stopMeasurement method

  1. @override
Future<VtjCommandResult<StopMeasurementResult>> stopMeasurement(
  1. BluetoothDevice device
)
override

Prematurely stop an accelerometer measurement. See BLE Interface Specification Section 7.4

Implementation

@override
Future<VtjCommandResult<StopMeasurementResult>> stopMeasurement(
  BluetoothDevice device,
) async {
  final manager = _measurementRegistry.getManager(device);

  final result = await _executeCommand<StopMeasurementResult>(
    device: device,
    createCommand: () => StopMeasurementCommand(),
  );

  // Reset measurement state on stop
  result.when(
    success: (_) {
      // Get device state to confirm measurement stopped
      getDeviceState(device).then((stateResult) {
        stateResult.when(
          success: (state) {
            if (state.measurementState == 2) {
              manager.completeMeasurement();
            } else {
              manager.reset();
            }
          },
          failure: (_, __) => manager.reset(),
        );
      });
    },
    failure: (error, code) {
      manager.failMeasurement(error, code);
    },
  );

  return result;
}