startEcgAcquisition method

  1. @override
Future<void> startEcgAcquisition()
override

ECGの取得を開始

Implementation

@override
Future<void> startEcgAcquisition() async {
  try {
    final connectedDevice = state.connectedDevice;
    // 未接続の場合
    if (connectedDevice == null) {
      throw HeartRateAdapterException(
        AdapterErrorType.deviceNotConnected,
        AdapterErrorType.deviceNotConnected.message,
        HeartRateDeviceEventStreamErrorType.unknown,
      );
    }

    // 利用可能なデータタイプを取得
    final availabletypes = await _polar
        .getAvailableOnlineStreamDataTypes(connectedDevice.deviceId);
    // ECGが利用可能でない場合
    if (!availabletypes.contains(PolarDataType.ecg)) {
      throw HeartRateAdapterException(
        AdapterErrorType.libraryError,
        AdapterErrorType.libraryError.message,
        HeartRateDeviceEventStreamErrorType.unknown,
      );
    }

    // ECGの取得を開始
    _ecgStreamSubscription = _polar
        .startEcgStreaming(state.connectedDevice!.deviceId)
        .listen((event) {
      // ステートを更新
      state = state.copyWith(isEcgAcquisitionStarted: true);
      _deviceEventStreamController.add(HeartRateDeviceEvent.ecg(
        ecgList: event.samples
            .map((e) => EcgData(timeStamp: e.timeStamp, voltage: e.voltage))
            .toList(),
      ));
    }, onError: (error) {
      _deviceEventStreamController.addError(HeartRateAdapterException(
          AdapterErrorType.libraryError,
          AdapterErrorType.libraryError.message,
          HeartRateDeviceEventStreamErrorType.ecgError,
          detail: error));
    });
  } on HeartRateAdapterException catch (_) {
    rethrow;
  } catch (e) {
    throw HeartRateAdapterException(
      AdapterErrorType.libraryError,
      AdapterErrorType.libraryError.message,
      HeartRateDeviceEventStreamErrorType.unknown,
      detail: e,
    );
  }
}