startEcgAcquisition method
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,
);
}
}