From 83ea9fb460d07c18806219f327ba5e52af63d86f Mon Sep 17 00:00:00 2001 From: Remon Date: Sat, 11 Jan 2020 15:56:40 +0100 Subject: [PATCH 1/5] fix out of range error in example app --- example/lib/ui/device_list.dart | 43 ++++++++++++++++++++++++--------- 1 file changed, 31 insertions(+), 12 deletions(-) diff --git a/example/lib/ui/device_list.dart b/example/lib/ui/device_list.dart index 0d657e28..61a79d05 100644 --- a/example/lib/ui/device_list.dart +++ b/example/lib/ui/device_list.dart @@ -28,7 +28,8 @@ class _DeviceListState extends State { void initState() { super.initState(); _initBleState(); - _uuidController = TextEditingController()..addListener(() => setState(() {})); + _uuidController = TextEditingController() + ..addListener(() => setState(() {})); } @override @@ -55,7 +56,7 @@ class _DeviceListState extends State { bool _isValidUuidInput() { final uuidText = _uuidController.text; - if (uuidText.length > 3) { + if (uuidText.length > 3 && uuidText.length.isEven) { try { Uuid.parse(uuidText); return true; @@ -73,7 +74,8 @@ class _DeviceListState extends State { log("Starting to listen for devices..."); _clearDeviceList(); - _scanSubscription = _ble.scanForDevices(withService: uuid).listen((device) { + _scanSubscription = + _ble.scanForDevices(withService: uuid).listen((device) { if (!_devices.any((d) => d.id == device.id)) { log("New device found: $device"); @@ -115,12 +117,16 @@ class _DeviceListState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ const SizedBox(height: 16), - const Text('UUID to use for scanning: (short or long version)'), + const Text( + 'UUID to use for scanning: (short or long version)'), TextField( controller: _uuidController, enabled: _scanSubscription == null, - decoration: InputDecoration(errorText: _uuidController.text.isEmpty || _isValidUuidInput() ? null : 'Invalid UUID format'), - autofocus: true, + decoration: InputDecoration( + errorText: + _uuidController.text.isEmpty || _isValidUuidInput() + ? null + : 'Invalid UUID format'), autocorrect: false, ), const SizedBox(height: 16), @@ -129,15 +135,21 @@ class _DeviceListState extends State { children: [ RaisedButton( child: const Text('Start scanning'), - onPressed: _scanSubscription == null && _status == BleStatus.ready && _isValidUuidInput() ? _startScanning : null, + onPressed: _scanSubscription == null && + _status == BleStatus.ready && + _isValidUuidInput() + ? _startScanning + : null, ), RaisedButton( child: const Text('Stop scanning'), - onPressed: _scanSubscription != null ? _stopScanning : null, + onPressed: + _scanSubscription != null ? _stopScanning : null, ), RaisedButton( child: const Text('Clear scanlist'), - onPressed: _devices.isNotEmpty ? _clearDeviceList : null, + onPressed: + _devices.isNotEmpty ? _clearDeviceList : null, ), ], ), @@ -146,8 +158,11 @@ class _DeviceListState extends State { mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ if (_status == BleStatus.ready) ...[ - Text(_scanSubscription == null ? 'Enter a UUID above and tap start to begin scanning' : 'Tap a device to connect to it'), - if (_scanSubscription != null || _devices.isNotEmpty) Text('count: ${_devices.length}'), + Text(_scanSubscription == null + ? 'Enter a UUID above and tap start to begin scanning' + : 'Tap a device to connect to it'), + if (_scanSubscription != null || _devices.isNotEmpty) + Text('count: ${_devices.length}'), ] else const Text("BLE Status isn't valid for scanning"), ], @@ -167,7 +182,11 @@ class _DeviceListState extends State { onTap: () async { _stopScanning(); _clearDeviceList(); - await Navigator.push(context, MaterialPageRoute(builder: (_) => DeviceDetailScreen(device: device))); + await Navigator.push( + context, + MaterialPageRoute( + builder: (_) => + DeviceDetailScreen(device: device))); }, ), ) From 29a182a7d7b5f40d38602aad3a2a892b90eabec6 Mon Sep 17 00:00:00 2001 From: Remon Date: Sat, 11 Jan 2020 15:56:50 +0100 Subject: [PATCH 2/5] run flutter format --- example/lib/ui/device_detail_screen.dart | 35 +- example/pubspec.lock | 2 +- lib/src/converter/protobuf_converter.dart | 42 +- lib/src/discovered_devices_registry.dart | 3 +- lib/src/generated/bledata.pb.dart | 969 ++++++++++++++------ lib/src/generated/bledata.pbenum.dart | 1 - lib/src/generated/bledata.pbjson.dart | 207 ++++- lib/src/generated/bledata.pbserver.dart | 1 - lib/src/model/ble_status.dart | 9 +- lib/src/model/characteristic_value.dart | 9 +- lib/src/model/connection_state_update.dart | 10 +- lib/src/model/discovered_device.dart | 3 +- lib/src/model/discovered_device.g.dart | 20 +- lib/src/model/qualified_characteristic.dart | 7 +- lib/src/model/result.dart | 14 +- lib/src/model/uuid.dart | 10 +- lib/src/prescan_connector.dart | 40 +- lib/src/reactive_ble.dart | 118 ++- lib/src/rx_ext/serial_disposable.dart | 6 +- lib/src/select_from.dart | 3 +- test/discovered_devices_registry_test.dart | 28 +- test/prescan_connector_test.dart | 127 ++- test/protobuf_converter_test.dart | 32 +- test/repeater_test.dart | 10 +- test/result_test.dart | 3 +- test/select_from_test.dart | 3 +- 26 files changed, 1227 insertions(+), 485 deletions(-) diff --git a/example/lib/ui/device_detail_screen.dart b/example/lib/ui/device_detail_screen.dart index 99bb3849..65ae5e14 100644 --- a/example/lib/ui/device_detail_screen.dart +++ b/example/lib/ui/device_detail_screen.dart @@ -59,7 +59,11 @@ class _DetailState extends State { ) .asBroadcastStream(); - _charValueStream = _connectedDeviceStream.where((device) => device.connectionState == DeviceConnectionState.connected).take(1).asyncExpand((_) { + _charValueStream = _connectedDeviceStream + .where((device) => + device.connectionState == DeviceConnectionState.connected) + .take(1) + .asyncExpand((_) { log("Connected to $deviceName ($deviceId), getting characteristic"); return _ble.subscribeToCharacteristic(QualifiedCharacteristic( @@ -69,10 +73,12 @@ class _DetailState extends State { )); }); - _currentValueUpdateSubscription = _charValueStream.listen((data) => _currentValue = data.first); + _currentValueUpdateSubscription = + _charValueStream.listen((data) => _currentValue = data.first); _connectedDeviceStream - .where((device) => device.connectionState == DeviceConnectionState.connected) + .where((device) => + device.connectionState == DeviceConnectionState.connected) .first .then((_) => Future.delayed(const Duration(milliseconds: 100))) .then((_) => _readCharacteristic()); @@ -111,7 +117,8 @@ class _DetailState extends State { @override Widget build(BuildContext context) => Scaffold( appBar: AppBar( - title: Text("${_isConnected ? 'Connected' : 'Connecting'} to: $deviceName"), + title: Text( + "${_isConnected ? 'Connected' : 'Connecting'} to: $deviceName"), ), body: Padding( padding: const EdgeInsets.all(16), @@ -125,9 +132,12 @@ class _DetailState extends State { stream: _connectedDeviceStream, builder: (_, AsyncSnapshot snapshot) { if (snapshot.hasData) { - WidgetsBinding.instance.addPostFrameCallback((_) => setState(() => _connectionState = snapshot.data.connectionState)); + WidgetsBinding.instance.addPostFrameCallback((_) => + setState(() => _connectionState = + snapshot.data.connectionState)); - return StatusMessage('Connection state is: ${snapshot.data.connectionState}'); + return StatusMessage( + 'Connection state is: ${snapshot.data.connectionState}'); } else { return const StatusMessage('No data yet...'); } @@ -137,11 +147,14 @@ class _DetailState extends State { stream: _charValueStream, builder: (_, AsyncSnapshot> snapshot) { if (snapshot.hasData) { - return StatusMessage('Value for notification is: ${snapshot.data}'); + return StatusMessage( + 'Value for notification is: ${snapshot.data}'); } else if (_currentValue == null) { - return const StatusMessage('No data for characteristic retrieved yet...'); + return const StatusMessage( + 'No data for characteristic retrieved yet...'); } else { - return StatusMessage('Value for notification is: $_currentValue'); + return StatusMessage( + 'Value for notification is: $_currentValue'); } }, ), @@ -163,7 +176,9 @@ class _DetailState extends State { const SizedBox(width: 16), RaisedButton( child: const Text('Write characteristic'), - onPressed: _isConnected && _textController.text.isNotEmpty ? _writeCharacteristic : null, + onPressed: _isConnected && _textController.text.isNotEmpty + ? _writeCharacteristic + : null, ), ], ), diff --git a/example/pubspec.lock b/example/pubspec.lock index 65203416..4896467b 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -82,7 +82,7 @@ packages: path: ".." relative: true source: path - version: "0.1.0" + version: "1.0.0+1" flutter_test: dependency: "direct dev" description: flutter diff --git a/lib/src/converter/protobuf_converter.dart b/lib/src/converter/protobuf_converter.dart index 09c443eb..0d03402e 100644 --- a/lib/src/converter/protobuf_converter.dart +++ b/lib/src/converter/protobuf_converter.dart @@ -19,7 +19,8 @@ class ProtobufConverter { const ProtobufConverter(); BleStatus bleStatusFrom(pb.BleStatusInfo message) => - selectFrom(BleStatus.values, index: message.status, fallback: (_) => BleStatus.unknown); + selectFrom(BleStatus.values, + index: message.status, fallback: (_) => BleStatus.unknown); ScanResult scanResultFrom(pb.DeviceScanInfo message) { final serviceData = Map.fromIterables( @@ -29,7 +30,8 @@ class ProtobufConverter { return ScanResult( result: resultFrom( - getValue: () => DiscoveredDevice(id: message.id, name: message.name, serviceData: serviceData), + getValue: () => DiscoveredDevice( + id: message.id, name: message.name, serviceData: serviceData), failure: genericFailureFrom( hasFailure: message.hasFailure(), getFailure: () => message.failure, @@ -38,7 +40,8 @@ class ProtobufConverter { ); } - ConnectionStateUpdate connectionStateUpdateFrom(pb.DeviceInfo deviceInfo) => ConnectionStateUpdate( + ConnectionStateUpdate connectionStateUpdateFrom(pb.DeviceInfo deviceInfo) => + ConnectionStateUpdate( deviceId: deviceInfo.id, connectionState: selectFrom( DeviceConnectionState.values, @@ -49,11 +52,13 @@ class ProtobufConverter { hasFailure: deviceInfo.hasFailure(), getFailure: () => deviceInfo.failure, codes: ConnectionError.values, - fallback: (rawOrNull) => rawOrNull == null ? null : ConnectionError.unknown, + fallback: (rawOrNull) => + rawOrNull == null ? null : ConnectionError.unknown, ), ); - Result> clearGattCacheResultFrom(pb.ClearGattCacheInfo message) => + Result> clearGattCacheResultFrom( + pb.ClearGattCacheInfo message) => resultFrom( getValue: () {}, failure: genericFailureFrom( @@ -64,7 +69,9 @@ class ProtobufConverter { ), ); - CharacteristicValue characteristicValueFrom(pb.CharacteristicValueInfo message) => CharacteristicValue( + CharacteristicValue characteristicValueFrom( + pb.CharacteristicValueInfo message) => + CharacteristicValue( characteristic: qualifiedCharacteristicFrom(message.characteristic), result: resultFrom( getValue: () => message.value, @@ -77,7 +84,9 @@ class ProtobufConverter { ), ); - WriteCharacteristicInfo writeCharacteristicInfoFrom(pb.WriteCharacteristicInfo message) => WriteCharacteristicInfo( + WriteCharacteristicInfo writeCharacteristicInfoFrom( + pb.WriteCharacteristicInfo message) => + WriteCharacteristicInfo( characteristic: qualifiedCharacteristicFrom(message.characteristic), result: resultFrom( getValue: () {}, @@ -90,7 +99,9 @@ class ProtobufConverter { ), ); - ConnectionPriorityInfo connectionPriorityInfoFrom(pb.ChangeConnectionPriorityInfo message) => ConnectionPriorityInfo( + ConnectionPriorityInfo connectionPriorityInfoFrom( + pb.ChangeConnectionPriorityInfo message) => + ConnectionPriorityInfo( result: resultFrom( getValue: () {}, failure: genericFailureFrom( @@ -102,7 +113,9 @@ class ProtobufConverter { ), ); - QualifiedCharacteristic qualifiedCharacteristicFrom(pb.CharacteristicAddress message) => QualifiedCharacteristic( + QualifiedCharacteristic qualifiedCharacteristicFrom( + pb.CharacteristicAddress message) => + QualifiedCharacteristic( characteristicId: Uuid(message.characteristicUuid.data), serviceId: Uuid(message.serviceUuid.data), deviceId: message.deviceId, @@ -118,7 +131,9 @@ class ProtobufConverter { if (hasFailure) { final error = getFailure(); return GenericFailure( - code: error.hasCode() ? selectFrom(codes, index: error.code, fallback: fallback) : fallback(null), + code: error.hasCode() + ? selectFrom(codes, index: error.code, fallback: fallback) + : fallback(null), message: error.message, ); } @@ -126,8 +141,11 @@ class ProtobufConverter { } @visibleForTesting - Result resultFrom({@required Value Function() getValue, @required Failure failure}) => - failure != null ? Result.failure(failure) : Result.success(getValue()); + Result resultFrom( + {@required Value Function() getValue, @required Failure failure}) => + failure != null + ? Result.failure(failure) + : Result.success(getValue()); } class _InvalidConnectionState extends Error { diff --git a/lib/src/discovered_devices_registry.dart b/lib/src/discovered_devices_registry.dart index 4e24ec2b..1219d5be 100644 --- a/lib/src/discovered_devices_registry.dart +++ b/lib/src/discovered_devices_registry.dart @@ -27,5 +27,6 @@ class DiscoveredDevicesRegistry { bool deviceIsDiscoveredRecently({String deviceId, Duration cacheValidity}) => discoveredDevices.containsKey(deviceId) && - discoveredDevices[deviceId].isAfter(getTimestamp().subtract(cacheValidity)); + discoveredDevices[deviceId] + .isAfter(getTimestamp().subtract(cacheValidity)); } diff --git a/lib/src/generated/bledata.pb.dart b/lib/src/generated/bledata.pb.dart index 94aa87f0..21dcad20 100644 --- a/lib/src/generated/bledata.pb.dart +++ b/lib/src/generated/bledata.pb.dart @@ -10,31 +10,44 @@ import 'dart:core' as $core; import 'package:protobuf/protobuf.dart' as $pb; class ScanForDevicesRequest extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo('ScanForDevicesRequest', createEmptyInstance: create) - ..aOM(1, 'serviceUuid', protoName: 'serviceUuid', subBuilder: Uuid.create) - ..a<$core.int>(2, 'scanMode', $pb.PbFieldType.O3, protoName: 'scanMode') - ..hasRequiredFields = false - ; + static final $pb.BuilderInfo _i = + $pb.BuilderInfo('ScanForDevicesRequest', createEmptyInstance: create) + ..aOM(1, 'serviceUuid', + protoName: 'serviceUuid', subBuilder: Uuid.create) + ..a<$core.int>(2, 'scanMode', $pb.PbFieldType.O3, protoName: 'scanMode') + ..hasRequiredFields = false; ScanForDevicesRequest._() : super(); factory ScanForDevicesRequest() => create(); - factory ScanForDevicesRequest.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); - factory ScanForDevicesRequest.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); - ScanForDevicesRequest clone() => ScanForDevicesRequest()..mergeFromMessage(this); - ScanForDevicesRequest copyWith(void Function(ScanForDevicesRequest) updates) => super.copyWith((message) => updates(message as ScanForDevicesRequest)); + factory ScanForDevicesRequest.fromBuffer($core.List<$core.int> i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(i, r); + factory ScanForDevicesRequest.fromJson($core.String i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + ScanForDevicesRequest clone() => + ScanForDevicesRequest()..mergeFromMessage(this); + ScanForDevicesRequest copyWith( + void Function(ScanForDevicesRequest) updates) => + super.copyWith((message) => updates(message as ScanForDevicesRequest)); $pb.BuilderInfo get info_ => _i; @$core.pragma('dart2js:noInline') static ScanForDevicesRequest create() => ScanForDevicesRequest._(); ScanForDevicesRequest createEmptyInstance() => create(); - static $pb.PbList createRepeated() => $pb.PbList(); + static $pb.PbList createRepeated() => + $pb.PbList(); @$core.pragma('dart2js:noInline') - static ScanForDevicesRequest getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static ScanForDevicesRequest getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); static ScanForDevicesRequest _defaultInstance; @$pb.TagNumber(1) Uuid get serviceUuid => $_getN(0); @$pb.TagNumber(1) - set serviceUuid(Uuid v) { setField(1, v); } + set serviceUuid(Uuid v) { + setField(1, v); + } + @$pb.TagNumber(1) $core.bool hasServiceUuid() => $_has(0); @$pb.TagNumber(1) @@ -45,7 +58,10 @@ class ScanForDevicesRequest extends $pb.GeneratedMessage { @$pb.TagNumber(2) $core.int get scanMode => $_getIZ(1); @$pb.TagNumber(2) - set scanMode($core.int v) { $_setSignedInt32(1, v); } + set scanMode($core.int v) { + $_setSignedInt32(1, v); + } + @$pb.TagNumber(2) $core.bool hasScanMode() => $_has(1); @$pb.TagNumber(2) @@ -53,34 +69,45 @@ class ScanForDevicesRequest extends $pb.GeneratedMessage { } class DeviceScanInfo extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo('DeviceScanInfo', createEmptyInstance: create) - ..aOS(1, 'id') - ..aOS(2, 'name') - ..aOM(3, 'failure', subBuilder: GenericFailure.create) - ..pc(4, 'serviceData', $pb.PbFieldType.PM, protoName: 'serviceData', subBuilder: ServiceDataEntry.create) - ..a<$core.int>(5, 'rssi', $pb.PbFieldType.O3) - ..hasRequiredFields = false - ; + static final $pb.BuilderInfo _i = + $pb.BuilderInfo('DeviceScanInfo', createEmptyInstance: create) + ..aOS(1, 'id') + ..aOS(2, 'name') + ..aOM(3, 'failure', subBuilder: GenericFailure.create) + ..pc(4, 'serviceData', $pb.PbFieldType.PM, + protoName: 'serviceData', subBuilder: ServiceDataEntry.create) + ..a<$core.int>(5, 'rssi', $pb.PbFieldType.O3) + ..hasRequiredFields = false; DeviceScanInfo._() : super(); factory DeviceScanInfo() => create(); - factory DeviceScanInfo.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); - factory DeviceScanInfo.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + factory DeviceScanInfo.fromBuffer($core.List<$core.int> i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(i, r); + factory DeviceScanInfo.fromJson($core.String i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); DeviceScanInfo clone() => DeviceScanInfo()..mergeFromMessage(this); - DeviceScanInfo copyWith(void Function(DeviceScanInfo) updates) => super.copyWith((message) => updates(message as DeviceScanInfo)); + DeviceScanInfo copyWith(void Function(DeviceScanInfo) updates) => + super.copyWith((message) => updates(message as DeviceScanInfo)); $pb.BuilderInfo get info_ => _i; @$core.pragma('dart2js:noInline') static DeviceScanInfo create() => DeviceScanInfo._(); DeviceScanInfo createEmptyInstance() => create(); - static $pb.PbList createRepeated() => $pb.PbList(); + static $pb.PbList createRepeated() => + $pb.PbList(); @$core.pragma('dart2js:noInline') - static DeviceScanInfo getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static DeviceScanInfo getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); static DeviceScanInfo _defaultInstance; @$pb.TagNumber(1) $core.String get id => $_getSZ(0); @$pb.TagNumber(1) - set id($core.String v) { $_setString(0, v); } + set id($core.String v) { + $_setString(0, v); + } + @$pb.TagNumber(1) $core.bool hasId() => $_has(0); @$pb.TagNumber(1) @@ -89,7 +116,10 @@ class DeviceScanInfo extends $pb.GeneratedMessage { @$pb.TagNumber(2) $core.String get name => $_getSZ(1); @$pb.TagNumber(2) - set name($core.String v) { $_setString(1, v); } + set name($core.String v) { + $_setString(1, v); + } + @$pb.TagNumber(2) $core.bool hasName() => $_has(1); @$pb.TagNumber(2) @@ -98,7 +128,10 @@ class DeviceScanInfo extends $pb.GeneratedMessage { @$pb.TagNumber(3) GenericFailure get failure => $_getN(2); @$pb.TagNumber(3) - set failure(GenericFailure v) { setField(3, v); } + set failure(GenericFailure v) { + setField(3, v); + } + @$pb.TagNumber(3) $core.bool hasFailure() => $_has(2); @$pb.TagNumber(3) @@ -112,7 +145,10 @@ class DeviceScanInfo extends $pb.GeneratedMessage { @$pb.TagNumber(5) $core.int get rssi => $_getIZ(4); @$pb.TagNumber(5) - set rssi($core.int v) { $_setSignedInt32(4, v); } + set rssi($core.int v) { + $_setSignedInt32(4, v); + } + @$pb.TagNumber(5) $core.bool hasRssi() => $_has(4); @$pb.TagNumber(5) @@ -120,52 +156,76 @@ class DeviceScanInfo extends $pb.GeneratedMessage { } class ConnectToDeviceRequest extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo('ConnectToDeviceRequest', createEmptyInstance: create) - ..aOS(1, 'deviceId', protoName: 'deviceId') - ..aOM(2, 'servicesWithCharacteristicsToDiscover', protoName: 'servicesWithCharacteristicsToDiscover', subBuilder: ServicesWithCharacteristics.create) - ..a<$core.int>(3, 'timeoutInMs', $pb.PbFieldType.O3, protoName: 'timeoutInMs') - ..hasRequiredFields = false - ; + static final $pb.BuilderInfo _i = + $pb.BuilderInfo('ConnectToDeviceRequest', createEmptyInstance: create) + ..aOS(1, 'deviceId', protoName: 'deviceId') + ..aOM( + 2, 'servicesWithCharacteristicsToDiscover', + protoName: 'servicesWithCharacteristicsToDiscover', + subBuilder: ServicesWithCharacteristics.create) + ..a<$core.int>(3, 'timeoutInMs', $pb.PbFieldType.O3, + protoName: 'timeoutInMs') + ..hasRequiredFields = false; ConnectToDeviceRequest._() : super(); factory ConnectToDeviceRequest() => create(); - factory ConnectToDeviceRequest.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); - factory ConnectToDeviceRequest.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); - ConnectToDeviceRequest clone() => ConnectToDeviceRequest()..mergeFromMessage(this); - ConnectToDeviceRequest copyWith(void Function(ConnectToDeviceRequest) updates) => super.copyWith((message) => updates(message as ConnectToDeviceRequest)); + factory ConnectToDeviceRequest.fromBuffer($core.List<$core.int> i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(i, r); + factory ConnectToDeviceRequest.fromJson($core.String i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + ConnectToDeviceRequest clone() => + ConnectToDeviceRequest()..mergeFromMessage(this); + ConnectToDeviceRequest copyWith( + void Function(ConnectToDeviceRequest) updates) => + super.copyWith((message) => updates(message as ConnectToDeviceRequest)); $pb.BuilderInfo get info_ => _i; @$core.pragma('dart2js:noInline') static ConnectToDeviceRequest create() => ConnectToDeviceRequest._(); ConnectToDeviceRequest createEmptyInstance() => create(); - static $pb.PbList createRepeated() => $pb.PbList(); + static $pb.PbList createRepeated() => + $pb.PbList(); @$core.pragma('dart2js:noInline') - static ConnectToDeviceRequest getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static ConnectToDeviceRequest getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); static ConnectToDeviceRequest _defaultInstance; @$pb.TagNumber(1) $core.String get deviceId => $_getSZ(0); @$pb.TagNumber(1) - set deviceId($core.String v) { $_setString(0, v); } + set deviceId($core.String v) { + $_setString(0, v); + } + @$pb.TagNumber(1) $core.bool hasDeviceId() => $_has(0); @$pb.TagNumber(1) void clearDeviceId() => clearField(1); @$pb.TagNumber(2) - ServicesWithCharacteristics get servicesWithCharacteristicsToDiscover => $_getN(1); + ServicesWithCharacteristics get servicesWithCharacteristicsToDiscover => + $_getN(1); @$pb.TagNumber(2) - set servicesWithCharacteristicsToDiscover(ServicesWithCharacteristics v) { setField(2, v); } + set servicesWithCharacteristicsToDiscover(ServicesWithCharacteristics v) { + setField(2, v); + } + @$pb.TagNumber(2) $core.bool hasServicesWithCharacteristicsToDiscover() => $_has(1); @$pb.TagNumber(2) void clearServicesWithCharacteristicsToDiscover() => clearField(2); @$pb.TagNumber(2) - ServicesWithCharacteristics ensureServicesWithCharacteristicsToDiscover() => $_ensure(1); + ServicesWithCharacteristics ensureServicesWithCharacteristicsToDiscover() => + $_ensure(1); @$pb.TagNumber(3) $core.int get timeoutInMs => $_getIZ(2); @$pb.TagNumber(3) - set timeoutInMs($core.int v) { $_setSignedInt32(2, v); } + set timeoutInMs($core.int v) { + $_setSignedInt32(2, v); + } + @$pb.TagNumber(3) $core.bool hasTimeoutInMs() => $_has(2); @$pb.TagNumber(3) @@ -173,32 +233,42 @@ class ConnectToDeviceRequest extends $pb.GeneratedMessage { } class DeviceInfo extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo('DeviceInfo', createEmptyInstance: create) - ..aOS(1, 'id') - ..a<$core.int>(2, 'connectionState', $pb.PbFieldType.O3, protoName: 'connectionState') - ..aOM(3, 'failure', subBuilder: GenericFailure.create) - ..hasRequiredFields = false - ; + static final $pb.BuilderInfo _i = + $pb.BuilderInfo('DeviceInfo', createEmptyInstance: create) + ..aOS(1, 'id') + ..a<$core.int>(2, 'connectionState', $pb.PbFieldType.O3, + protoName: 'connectionState') + ..aOM(3, 'failure', subBuilder: GenericFailure.create) + ..hasRequiredFields = false; DeviceInfo._() : super(); factory DeviceInfo() => create(); - factory DeviceInfo.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); - factory DeviceInfo.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + factory DeviceInfo.fromBuffer($core.List<$core.int> i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(i, r); + factory DeviceInfo.fromJson($core.String i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); DeviceInfo clone() => DeviceInfo()..mergeFromMessage(this); - DeviceInfo copyWith(void Function(DeviceInfo) updates) => super.copyWith((message) => updates(message as DeviceInfo)); + DeviceInfo copyWith(void Function(DeviceInfo) updates) => + super.copyWith((message) => updates(message as DeviceInfo)); $pb.BuilderInfo get info_ => _i; @$core.pragma('dart2js:noInline') static DeviceInfo create() => DeviceInfo._(); DeviceInfo createEmptyInstance() => create(); static $pb.PbList createRepeated() => $pb.PbList(); @$core.pragma('dart2js:noInline') - static DeviceInfo getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static DeviceInfo getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); static DeviceInfo _defaultInstance; @$pb.TagNumber(1) $core.String get id => $_getSZ(0); @$pb.TagNumber(1) - set id($core.String v) { $_setString(0, v); } + set id($core.String v) { + $_setString(0, v); + } + @$pb.TagNumber(1) $core.bool hasId() => $_has(0); @$pb.TagNumber(1) @@ -207,7 +277,10 @@ class DeviceInfo extends $pb.GeneratedMessage { @$pb.TagNumber(2) $core.int get connectionState => $_getIZ(1); @$pb.TagNumber(2) - set connectionState($core.int v) { $_setSignedInt32(1, v); } + set connectionState($core.int v) { + $_setSignedInt32(1, v); + } + @$pb.TagNumber(2) $core.bool hasConnectionState() => $_has(1); @$pb.TagNumber(2) @@ -216,7 +289,10 @@ class DeviceInfo extends $pb.GeneratedMessage { @$pb.TagNumber(3) GenericFailure get failure => $_getN(2); @$pb.TagNumber(3) - set failure(GenericFailure v) { setField(3, v); } + set failure(GenericFailure v) { + setField(3, v); + } + @$pb.TagNumber(3) $core.bool hasFailure() => $_has(2); @$pb.TagNumber(3) @@ -226,30 +302,45 @@ class DeviceInfo extends $pb.GeneratedMessage { } class DisconnectFromDeviceRequest extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo('DisconnectFromDeviceRequest', createEmptyInstance: create) + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + 'DisconnectFromDeviceRequest', + createEmptyInstance: create) ..aOS(1, 'deviceId', protoName: 'deviceId') - ..hasRequiredFields = false - ; + ..hasRequiredFields = false; DisconnectFromDeviceRequest._() : super(); factory DisconnectFromDeviceRequest() => create(); - factory DisconnectFromDeviceRequest.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); - factory DisconnectFromDeviceRequest.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); - DisconnectFromDeviceRequest clone() => DisconnectFromDeviceRequest()..mergeFromMessage(this); - DisconnectFromDeviceRequest copyWith(void Function(DisconnectFromDeviceRequest) updates) => super.copyWith((message) => updates(message as DisconnectFromDeviceRequest)); + factory DisconnectFromDeviceRequest.fromBuffer($core.List<$core.int> i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(i, r); + factory DisconnectFromDeviceRequest.fromJson($core.String i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + DisconnectFromDeviceRequest clone() => + DisconnectFromDeviceRequest()..mergeFromMessage(this); + DisconnectFromDeviceRequest copyWith( + void Function(DisconnectFromDeviceRequest) updates) => + super.copyWith( + (message) => updates(message as DisconnectFromDeviceRequest)); $pb.BuilderInfo get info_ => _i; @$core.pragma('dart2js:noInline') - static DisconnectFromDeviceRequest create() => DisconnectFromDeviceRequest._(); + static DisconnectFromDeviceRequest create() => + DisconnectFromDeviceRequest._(); DisconnectFromDeviceRequest createEmptyInstance() => create(); - static $pb.PbList createRepeated() => $pb.PbList(); + static $pb.PbList createRepeated() => + $pb.PbList(); @$core.pragma('dart2js:noInline') - static DisconnectFromDeviceRequest getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static DisconnectFromDeviceRequest getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); static DisconnectFromDeviceRequest _defaultInstance; @$pb.TagNumber(1) $core.String get deviceId => $_getSZ(0); @$pb.TagNumber(1) - set deviceId($core.String v) { $_setString(0, v); } + set deviceId($core.String v) { + $_setString(0, v); + } + @$pb.TagNumber(1) $core.bool hasDeviceId() => $_has(0); @$pb.TagNumber(1) @@ -257,30 +348,42 @@ class DisconnectFromDeviceRequest extends $pb.GeneratedMessage { } class ClearGattCacheRequest extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo('ClearGattCacheRequest', createEmptyInstance: create) - ..aOS(1, 'deviceId', protoName: 'deviceId') - ..hasRequiredFields = false - ; + static final $pb.BuilderInfo _i = + $pb.BuilderInfo('ClearGattCacheRequest', createEmptyInstance: create) + ..aOS(1, 'deviceId', protoName: 'deviceId') + ..hasRequiredFields = false; ClearGattCacheRequest._() : super(); factory ClearGattCacheRequest() => create(); - factory ClearGattCacheRequest.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); - factory ClearGattCacheRequest.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); - ClearGattCacheRequest clone() => ClearGattCacheRequest()..mergeFromMessage(this); - ClearGattCacheRequest copyWith(void Function(ClearGattCacheRequest) updates) => super.copyWith((message) => updates(message as ClearGattCacheRequest)); + factory ClearGattCacheRequest.fromBuffer($core.List<$core.int> i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(i, r); + factory ClearGattCacheRequest.fromJson($core.String i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + ClearGattCacheRequest clone() => + ClearGattCacheRequest()..mergeFromMessage(this); + ClearGattCacheRequest copyWith( + void Function(ClearGattCacheRequest) updates) => + super.copyWith((message) => updates(message as ClearGattCacheRequest)); $pb.BuilderInfo get info_ => _i; @$core.pragma('dart2js:noInline') static ClearGattCacheRequest create() => ClearGattCacheRequest._(); ClearGattCacheRequest createEmptyInstance() => create(); - static $pb.PbList createRepeated() => $pb.PbList(); + static $pb.PbList createRepeated() => + $pb.PbList(); @$core.pragma('dart2js:noInline') - static ClearGattCacheRequest getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static ClearGattCacheRequest getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); static ClearGattCacheRequest _defaultInstance; @$pb.TagNumber(1) $core.String get deviceId => $_getSZ(0); @$pb.TagNumber(1) - set deviceId($core.String v) { $_setString(0, v); } + set deviceId($core.String v) { + $_setString(0, v); + } + @$pb.TagNumber(1) $core.bool hasDeviceId() => $_has(0); @$pb.TagNumber(1) @@ -288,30 +391,40 @@ class ClearGattCacheRequest extends $pb.GeneratedMessage { } class ClearGattCacheInfo extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo('ClearGattCacheInfo', createEmptyInstance: create) - ..aOM(1, 'failure', subBuilder: GenericFailure.create) - ..hasRequiredFields = false - ; + static final $pb.BuilderInfo _i = + $pb.BuilderInfo('ClearGattCacheInfo', createEmptyInstance: create) + ..aOM(1, 'failure', subBuilder: GenericFailure.create) + ..hasRequiredFields = false; ClearGattCacheInfo._() : super(); factory ClearGattCacheInfo() => create(); - factory ClearGattCacheInfo.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); - factory ClearGattCacheInfo.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + factory ClearGattCacheInfo.fromBuffer($core.List<$core.int> i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(i, r); + factory ClearGattCacheInfo.fromJson($core.String i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); ClearGattCacheInfo clone() => ClearGattCacheInfo()..mergeFromMessage(this); - ClearGattCacheInfo copyWith(void Function(ClearGattCacheInfo) updates) => super.copyWith((message) => updates(message as ClearGattCacheInfo)); + ClearGattCacheInfo copyWith(void Function(ClearGattCacheInfo) updates) => + super.copyWith((message) => updates(message as ClearGattCacheInfo)); $pb.BuilderInfo get info_ => _i; @$core.pragma('dart2js:noInline') static ClearGattCacheInfo create() => ClearGattCacheInfo._(); ClearGattCacheInfo createEmptyInstance() => create(); - static $pb.PbList createRepeated() => $pb.PbList(); + static $pb.PbList createRepeated() => + $pb.PbList(); @$core.pragma('dart2js:noInline') - static ClearGattCacheInfo getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static ClearGattCacheInfo getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); static ClearGattCacheInfo _defaultInstance; @$pb.TagNumber(1) GenericFailure get failure => $_getN(0); @$pb.TagNumber(1) - set failure(GenericFailure v) { setField(1, v); } + set failure(GenericFailure v) { + setField(1, v); + } + @$pb.TagNumber(1) $core.bool hasFailure() => $_has(0); @$pb.TagNumber(1) @@ -321,30 +434,46 @@ class ClearGattCacheInfo extends $pb.GeneratedMessage { } class NotifyCharacteristicRequest extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo('NotifyCharacteristicRequest', createEmptyInstance: create) - ..aOM(1, 'characteristic', subBuilder: CharacteristicAddress.create) - ..hasRequiredFields = false - ; + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + 'NotifyCharacteristicRequest', + createEmptyInstance: create) + ..aOM(1, 'characteristic', + subBuilder: CharacteristicAddress.create) + ..hasRequiredFields = false; NotifyCharacteristicRequest._() : super(); factory NotifyCharacteristicRequest() => create(); - factory NotifyCharacteristicRequest.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); - factory NotifyCharacteristicRequest.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); - NotifyCharacteristicRequest clone() => NotifyCharacteristicRequest()..mergeFromMessage(this); - NotifyCharacteristicRequest copyWith(void Function(NotifyCharacteristicRequest) updates) => super.copyWith((message) => updates(message as NotifyCharacteristicRequest)); + factory NotifyCharacteristicRequest.fromBuffer($core.List<$core.int> i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(i, r); + factory NotifyCharacteristicRequest.fromJson($core.String i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + NotifyCharacteristicRequest clone() => + NotifyCharacteristicRequest()..mergeFromMessage(this); + NotifyCharacteristicRequest copyWith( + void Function(NotifyCharacteristicRequest) updates) => + super.copyWith( + (message) => updates(message as NotifyCharacteristicRequest)); $pb.BuilderInfo get info_ => _i; @$core.pragma('dart2js:noInline') - static NotifyCharacteristicRequest create() => NotifyCharacteristicRequest._(); + static NotifyCharacteristicRequest create() => + NotifyCharacteristicRequest._(); NotifyCharacteristicRequest createEmptyInstance() => create(); - static $pb.PbList createRepeated() => $pb.PbList(); + static $pb.PbList createRepeated() => + $pb.PbList(); @$core.pragma('dart2js:noInline') - static NotifyCharacteristicRequest getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static NotifyCharacteristicRequest getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); static NotifyCharacteristicRequest _defaultInstance; @$pb.TagNumber(1) CharacteristicAddress get characteristic => $_getN(0); @$pb.TagNumber(1) - set characteristic(CharacteristicAddress v) { setField(1, v); } + set characteristic(CharacteristicAddress v) { + setField(1, v); + } + @$pb.TagNumber(1) $core.bool hasCharacteristic() => $_has(0); @$pb.TagNumber(1) @@ -354,30 +483,47 @@ class NotifyCharacteristicRequest extends $pb.GeneratedMessage { } class NotifyNoMoreCharacteristicRequest extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo('NotifyNoMoreCharacteristicRequest', createEmptyInstance: create) - ..aOM(1, 'characteristic', subBuilder: CharacteristicAddress.create) - ..hasRequiredFields = false - ; + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + 'NotifyNoMoreCharacteristicRequest', + createEmptyInstance: create) + ..aOM(1, 'characteristic', + subBuilder: CharacteristicAddress.create) + ..hasRequiredFields = false; NotifyNoMoreCharacteristicRequest._() : super(); factory NotifyNoMoreCharacteristicRequest() => create(); - factory NotifyNoMoreCharacteristicRequest.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); - factory NotifyNoMoreCharacteristicRequest.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); - NotifyNoMoreCharacteristicRequest clone() => NotifyNoMoreCharacteristicRequest()..mergeFromMessage(this); - NotifyNoMoreCharacteristicRequest copyWith(void Function(NotifyNoMoreCharacteristicRequest) updates) => super.copyWith((message) => updates(message as NotifyNoMoreCharacteristicRequest)); + factory NotifyNoMoreCharacteristicRequest.fromBuffer($core.List<$core.int> i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(i, r); + factory NotifyNoMoreCharacteristicRequest.fromJson($core.String i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + NotifyNoMoreCharacteristicRequest clone() => + NotifyNoMoreCharacteristicRequest()..mergeFromMessage(this); + NotifyNoMoreCharacteristicRequest copyWith( + void Function(NotifyNoMoreCharacteristicRequest) updates) => + super.copyWith( + (message) => updates(message as NotifyNoMoreCharacteristicRequest)); $pb.BuilderInfo get info_ => _i; @$core.pragma('dart2js:noInline') - static NotifyNoMoreCharacteristicRequest create() => NotifyNoMoreCharacteristicRequest._(); + static NotifyNoMoreCharacteristicRequest create() => + NotifyNoMoreCharacteristicRequest._(); NotifyNoMoreCharacteristicRequest createEmptyInstance() => create(); - static $pb.PbList createRepeated() => $pb.PbList(); + static $pb.PbList createRepeated() => + $pb.PbList(); @$core.pragma('dart2js:noInline') - static NotifyNoMoreCharacteristicRequest getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static NotifyNoMoreCharacteristicRequest getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor( + create); static NotifyNoMoreCharacteristicRequest _defaultInstance; @$pb.TagNumber(1) CharacteristicAddress get characteristic => $_getN(0); @$pb.TagNumber(1) - set characteristic(CharacteristicAddress v) { setField(1, v); } + set characteristic(CharacteristicAddress v) { + setField(1, v); + } + @$pb.TagNumber(1) $core.bool hasCharacteristic() => $_has(0); @$pb.TagNumber(1) @@ -387,30 +533,44 @@ class NotifyNoMoreCharacteristicRequest extends $pb.GeneratedMessage { } class ReadCharacteristicRequest extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo('ReadCharacteristicRequest', createEmptyInstance: create) - ..aOM(1, 'characteristic', subBuilder: CharacteristicAddress.create) - ..hasRequiredFields = false - ; + static final $pb.BuilderInfo _i = + $pb.BuilderInfo('ReadCharacteristicRequest', createEmptyInstance: create) + ..aOM(1, 'characteristic', + subBuilder: CharacteristicAddress.create) + ..hasRequiredFields = false; ReadCharacteristicRequest._() : super(); factory ReadCharacteristicRequest() => create(); - factory ReadCharacteristicRequest.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); - factory ReadCharacteristicRequest.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); - ReadCharacteristicRequest clone() => ReadCharacteristicRequest()..mergeFromMessage(this); - ReadCharacteristicRequest copyWith(void Function(ReadCharacteristicRequest) updates) => super.copyWith((message) => updates(message as ReadCharacteristicRequest)); + factory ReadCharacteristicRequest.fromBuffer($core.List<$core.int> i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(i, r); + factory ReadCharacteristicRequest.fromJson($core.String i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + ReadCharacteristicRequest clone() => + ReadCharacteristicRequest()..mergeFromMessage(this); + ReadCharacteristicRequest copyWith( + void Function(ReadCharacteristicRequest) updates) => + super + .copyWith((message) => updates(message as ReadCharacteristicRequest)); $pb.BuilderInfo get info_ => _i; @$core.pragma('dart2js:noInline') static ReadCharacteristicRequest create() => ReadCharacteristicRequest._(); ReadCharacteristicRequest createEmptyInstance() => create(); - static $pb.PbList createRepeated() => $pb.PbList(); + static $pb.PbList createRepeated() => + $pb.PbList(); @$core.pragma('dart2js:noInline') - static ReadCharacteristicRequest getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static ReadCharacteristicRequest getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); static ReadCharacteristicRequest _defaultInstance; @$pb.TagNumber(1) CharacteristicAddress get characteristic => $_getN(0); @$pb.TagNumber(1) - set characteristic(CharacteristicAddress v) { setField(1, v); } + set characteristic(CharacteristicAddress v) { + setField(1, v); + } + @$pb.TagNumber(1) $core.bool hasCharacteristic() => $_has(0); @$pb.TagNumber(1) @@ -420,32 +580,45 @@ class ReadCharacteristicRequest extends $pb.GeneratedMessage { } class CharacteristicValueInfo extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo('CharacteristicValueInfo', createEmptyInstance: create) - ..aOM(1, 'characteristic', subBuilder: CharacteristicAddress.create) - ..a<$core.List<$core.int>>(2, 'value', $pb.PbFieldType.OY) - ..aOM(3, 'failure', subBuilder: GenericFailure.create) - ..hasRequiredFields = false - ; + static final $pb.BuilderInfo _i = + $pb.BuilderInfo('CharacteristicValueInfo', createEmptyInstance: create) + ..aOM(1, 'characteristic', + subBuilder: CharacteristicAddress.create) + ..a<$core.List<$core.int>>(2, 'value', $pb.PbFieldType.OY) + ..aOM(3, 'failure', subBuilder: GenericFailure.create) + ..hasRequiredFields = false; CharacteristicValueInfo._() : super(); factory CharacteristicValueInfo() => create(); - factory CharacteristicValueInfo.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); - factory CharacteristicValueInfo.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); - CharacteristicValueInfo clone() => CharacteristicValueInfo()..mergeFromMessage(this); - CharacteristicValueInfo copyWith(void Function(CharacteristicValueInfo) updates) => super.copyWith((message) => updates(message as CharacteristicValueInfo)); + factory CharacteristicValueInfo.fromBuffer($core.List<$core.int> i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(i, r); + factory CharacteristicValueInfo.fromJson($core.String i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + CharacteristicValueInfo clone() => + CharacteristicValueInfo()..mergeFromMessage(this); + CharacteristicValueInfo copyWith( + void Function(CharacteristicValueInfo) updates) => + super.copyWith((message) => updates(message as CharacteristicValueInfo)); $pb.BuilderInfo get info_ => _i; @$core.pragma('dart2js:noInline') static CharacteristicValueInfo create() => CharacteristicValueInfo._(); CharacteristicValueInfo createEmptyInstance() => create(); - static $pb.PbList createRepeated() => $pb.PbList(); + static $pb.PbList createRepeated() => + $pb.PbList(); @$core.pragma('dart2js:noInline') - static CharacteristicValueInfo getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static CharacteristicValueInfo getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); static CharacteristicValueInfo _defaultInstance; @$pb.TagNumber(1) CharacteristicAddress get characteristic => $_getN(0); @$pb.TagNumber(1) - set characteristic(CharacteristicAddress v) { setField(1, v); } + set characteristic(CharacteristicAddress v) { + setField(1, v); + } + @$pb.TagNumber(1) $core.bool hasCharacteristic() => $_has(0); @$pb.TagNumber(1) @@ -456,7 +629,10 @@ class CharacteristicValueInfo extends $pb.GeneratedMessage { @$pb.TagNumber(2) $core.List<$core.int> get value => $_getN(1); @$pb.TagNumber(2) - set value($core.List<$core.int> v) { $_setBytes(1, v); } + set value($core.List<$core.int> v) { + $_setBytes(1, v); + } + @$pb.TagNumber(2) $core.bool hasValue() => $_has(1); @$pb.TagNumber(2) @@ -465,7 +641,10 @@ class CharacteristicValueInfo extends $pb.GeneratedMessage { @$pb.TagNumber(3) GenericFailure get failure => $_getN(2); @$pb.TagNumber(3) - set failure(GenericFailure v) { setField(3, v); } + set failure(GenericFailure v) { + setField(3, v); + } + @$pb.TagNumber(3) $core.bool hasFailure() => $_has(2); @$pb.TagNumber(3) @@ -475,31 +654,45 @@ class CharacteristicValueInfo extends $pb.GeneratedMessage { } class WriteCharacteristicRequest extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo('WriteCharacteristicRequest', createEmptyInstance: create) - ..aOM(1, 'characteristic', subBuilder: CharacteristicAddress.create) - ..a<$core.List<$core.int>>(2, 'value', $pb.PbFieldType.OY) - ..hasRequiredFields = false - ; + static final $pb.BuilderInfo _i = + $pb.BuilderInfo('WriteCharacteristicRequest', createEmptyInstance: create) + ..aOM(1, 'characteristic', + subBuilder: CharacteristicAddress.create) + ..a<$core.List<$core.int>>(2, 'value', $pb.PbFieldType.OY) + ..hasRequiredFields = false; WriteCharacteristicRequest._() : super(); factory WriteCharacteristicRequest() => create(); - factory WriteCharacteristicRequest.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); - factory WriteCharacteristicRequest.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); - WriteCharacteristicRequest clone() => WriteCharacteristicRequest()..mergeFromMessage(this); - WriteCharacteristicRequest copyWith(void Function(WriteCharacteristicRequest) updates) => super.copyWith((message) => updates(message as WriteCharacteristicRequest)); + factory WriteCharacteristicRequest.fromBuffer($core.List<$core.int> i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(i, r); + factory WriteCharacteristicRequest.fromJson($core.String i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + WriteCharacteristicRequest clone() => + WriteCharacteristicRequest()..mergeFromMessage(this); + WriteCharacteristicRequest copyWith( + void Function(WriteCharacteristicRequest) updates) => + super.copyWith( + (message) => updates(message as WriteCharacteristicRequest)); $pb.BuilderInfo get info_ => _i; @$core.pragma('dart2js:noInline') static WriteCharacteristicRequest create() => WriteCharacteristicRequest._(); WriteCharacteristicRequest createEmptyInstance() => create(); - static $pb.PbList createRepeated() => $pb.PbList(); + static $pb.PbList createRepeated() => + $pb.PbList(); @$core.pragma('dart2js:noInline') - static WriteCharacteristicRequest getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static WriteCharacteristicRequest getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); static WriteCharacteristicRequest _defaultInstance; @$pb.TagNumber(1) CharacteristicAddress get characteristic => $_getN(0); @$pb.TagNumber(1) - set characteristic(CharacteristicAddress v) { setField(1, v); } + set characteristic(CharacteristicAddress v) { + setField(1, v); + } + @$pb.TagNumber(1) $core.bool hasCharacteristic() => $_has(0); @$pb.TagNumber(1) @@ -510,7 +703,10 @@ class WriteCharacteristicRequest extends $pb.GeneratedMessage { @$pb.TagNumber(2) $core.List<$core.int> get value => $_getN(1); @$pb.TagNumber(2) - set value($core.List<$core.int> v) { $_setBytes(1, v); } + set value($core.List<$core.int> v) { + $_setBytes(1, v); + } + @$pb.TagNumber(2) $core.bool hasValue() => $_has(1); @$pb.TagNumber(2) @@ -518,31 +714,44 @@ class WriteCharacteristicRequest extends $pb.GeneratedMessage { } class WriteCharacteristicInfo extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo('WriteCharacteristicInfo', createEmptyInstance: create) - ..aOM(1, 'characteristic', subBuilder: CharacteristicAddress.create) - ..aOM(3, 'failure', subBuilder: GenericFailure.create) - ..hasRequiredFields = false - ; + static final $pb.BuilderInfo _i = + $pb.BuilderInfo('WriteCharacteristicInfo', createEmptyInstance: create) + ..aOM(1, 'characteristic', + subBuilder: CharacteristicAddress.create) + ..aOM(3, 'failure', subBuilder: GenericFailure.create) + ..hasRequiredFields = false; WriteCharacteristicInfo._() : super(); factory WriteCharacteristicInfo() => create(); - factory WriteCharacteristicInfo.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); - factory WriteCharacteristicInfo.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); - WriteCharacteristicInfo clone() => WriteCharacteristicInfo()..mergeFromMessage(this); - WriteCharacteristicInfo copyWith(void Function(WriteCharacteristicInfo) updates) => super.copyWith((message) => updates(message as WriteCharacteristicInfo)); + factory WriteCharacteristicInfo.fromBuffer($core.List<$core.int> i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(i, r); + factory WriteCharacteristicInfo.fromJson($core.String i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + WriteCharacteristicInfo clone() => + WriteCharacteristicInfo()..mergeFromMessage(this); + WriteCharacteristicInfo copyWith( + void Function(WriteCharacteristicInfo) updates) => + super.copyWith((message) => updates(message as WriteCharacteristicInfo)); $pb.BuilderInfo get info_ => _i; @$core.pragma('dart2js:noInline') static WriteCharacteristicInfo create() => WriteCharacteristicInfo._(); WriteCharacteristicInfo createEmptyInstance() => create(); - static $pb.PbList createRepeated() => $pb.PbList(); + static $pb.PbList createRepeated() => + $pb.PbList(); @$core.pragma('dart2js:noInline') - static WriteCharacteristicInfo getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static WriteCharacteristicInfo getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); static WriteCharacteristicInfo _defaultInstance; @$pb.TagNumber(1) CharacteristicAddress get characteristic => $_getN(0); @$pb.TagNumber(1) - set characteristic(CharacteristicAddress v) { setField(1, v); } + set characteristic(CharacteristicAddress v) { + setField(1, v); + } + @$pb.TagNumber(1) $core.bool hasCharacteristic() => $_has(0); @$pb.TagNumber(1) @@ -553,7 +762,10 @@ class WriteCharacteristicInfo extends $pb.GeneratedMessage { @$pb.TagNumber(3) GenericFailure get failure => $_getN(1); @$pb.TagNumber(3) - set failure(GenericFailure v) { setField(3, v); } + set failure(GenericFailure v) { + setField(3, v); + } + @$pb.TagNumber(3) $core.bool hasFailure() => $_has(1); @$pb.TagNumber(3) @@ -563,31 +775,41 @@ class WriteCharacteristicInfo extends $pb.GeneratedMessage { } class NegotiateMtuRequest extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo('NegotiateMtuRequest', createEmptyInstance: create) - ..aOS(1, 'deviceId', protoName: 'deviceId') - ..a<$core.int>(2, 'mtuSize', $pb.PbFieldType.O3, protoName: 'mtuSize') - ..hasRequiredFields = false - ; + static final $pb.BuilderInfo _i = + $pb.BuilderInfo('NegotiateMtuRequest', createEmptyInstance: create) + ..aOS(1, 'deviceId', protoName: 'deviceId') + ..a<$core.int>(2, 'mtuSize', $pb.PbFieldType.O3, protoName: 'mtuSize') + ..hasRequiredFields = false; NegotiateMtuRequest._() : super(); factory NegotiateMtuRequest() => create(); - factory NegotiateMtuRequest.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); - factory NegotiateMtuRequest.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + factory NegotiateMtuRequest.fromBuffer($core.List<$core.int> i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(i, r); + factory NegotiateMtuRequest.fromJson($core.String i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); NegotiateMtuRequest clone() => NegotiateMtuRequest()..mergeFromMessage(this); - NegotiateMtuRequest copyWith(void Function(NegotiateMtuRequest) updates) => super.copyWith((message) => updates(message as NegotiateMtuRequest)); + NegotiateMtuRequest copyWith(void Function(NegotiateMtuRequest) updates) => + super.copyWith((message) => updates(message as NegotiateMtuRequest)); $pb.BuilderInfo get info_ => _i; @$core.pragma('dart2js:noInline') static NegotiateMtuRequest create() => NegotiateMtuRequest._(); NegotiateMtuRequest createEmptyInstance() => create(); - static $pb.PbList createRepeated() => $pb.PbList(); + static $pb.PbList createRepeated() => + $pb.PbList(); @$core.pragma('dart2js:noInline') - static NegotiateMtuRequest getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static NegotiateMtuRequest getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); static NegotiateMtuRequest _defaultInstance; @$pb.TagNumber(1) $core.String get deviceId => $_getSZ(0); @$pb.TagNumber(1) - set deviceId($core.String v) { $_setString(0, v); } + set deviceId($core.String v) { + $_setString(0, v); + } + @$pb.TagNumber(1) $core.bool hasDeviceId() => $_has(0); @$pb.TagNumber(1) @@ -596,7 +818,10 @@ class NegotiateMtuRequest extends $pb.GeneratedMessage { @$pb.TagNumber(2) $core.int get mtuSize => $_getIZ(1); @$pb.TagNumber(2) - set mtuSize($core.int v) { $_setSignedInt32(1, v); } + set mtuSize($core.int v) { + $_setSignedInt32(1, v); + } + @$pb.TagNumber(2) $core.bool hasMtuSize() => $_has(1); @$pb.TagNumber(2) @@ -604,32 +829,42 @@ class NegotiateMtuRequest extends $pb.GeneratedMessage { } class NegotiateMtuInfo extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo('NegotiateMtuInfo', createEmptyInstance: create) - ..aOS(1, 'deviceId', protoName: 'deviceId') - ..a<$core.int>(2, 'mtuSize', $pb.PbFieldType.O3, protoName: 'mtuSize') - ..aOM(3, 'failure', subBuilder: GenericFailure.create) - ..hasRequiredFields = false - ; + static final $pb.BuilderInfo _i = + $pb.BuilderInfo('NegotiateMtuInfo', createEmptyInstance: create) + ..aOS(1, 'deviceId', protoName: 'deviceId') + ..a<$core.int>(2, 'mtuSize', $pb.PbFieldType.O3, protoName: 'mtuSize') + ..aOM(3, 'failure', subBuilder: GenericFailure.create) + ..hasRequiredFields = false; NegotiateMtuInfo._() : super(); factory NegotiateMtuInfo() => create(); - factory NegotiateMtuInfo.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); - factory NegotiateMtuInfo.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + factory NegotiateMtuInfo.fromBuffer($core.List<$core.int> i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(i, r); + factory NegotiateMtuInfo.fromJson($core.String i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); NegotiateMtuInfo clone() => NegotiateMtuInfo()..mergeFromMessage(this); - NegotiateMtuInfo copyWith(void Function(NegotiateMtuInfo) updates) => super.copyWith((message) => updates(message as NegotiateMtuInfo)); + NegotiateMtuInfo copyWith(void Function(NegotiateMtuInfo) updates) => + super.copyWith((message) => updates(message as NegotiateMtuInfo)); $pb.BuilderInfo get info_ => _i; @$core.pragma('dart2js:noInline') static NegotiateMtuInfo create() => NegotiateMtuInfo._(); NegotiateMtuInfo createEmptyInstance() => create(); - static $pb.PbList createRepeated() => $pb.PbList(); + static $pb.PbList createRepeated() => + $pb.PbList(); @$core.pragma('dart2js:noInline') - static NegotiateMtuInfo getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static NegotiateMtuInfo getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); static NegotiateMtuInfo _defaultInstance; @$pb.TagNumber(1) $core.String get deviceId => $_getSZ(0); @$pb.TagNumber(1) - set deviceId($core.String v) { $_setString(0, v); } + set deviceId($core.String v) { + $_setString(0, v); + } + @$pb.TagNumber(1) $core.bool hasDeviceId() => $_has(0); @$pb.TagNumber(1) @@ -638,7 +873,10 @@ class NegotiateMtuInfo extends $pb.GeneratedMessage { @$pb.TagNumber(2) $core.int get mtuSize => $_getIZ(1); @$pb.TagNumber(2) - set mtuSize($core.int v) { $_setSignedInt32(1, v); } + set mtuSize($core.int v) { + $_setSignedInt32(1, v); + } + @$pb.TagNumber(2) $core.bool hasMtuSize() => $_has(1); @$pb.TagNumber(2) @@ -647,7 +885,10 @@ class NegotiateMtuInfo extends $pb.GeneratedMessage { @$pb.TagNumber(3) GenericFailure get failure => $_getN(2); @$pb.TagNumber(3) - set failure(GenericFailure v) { setField(3, v); } + set failure(GenericFailure v) { + setField(3, v); + } + @$pb.TagNumber(3) $core.bool hasFailure() => $_has(2); @$pb.TagNumber(3) @@ -657,30 +898,40 @@ class NegotiateMtuInfo extends $pb.GeneratedMessage { } class BleStatusInfo extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo('BleStatusInfo', createEmptyInstance: create) - ..a<$core.int>(1, 'status', $pb.PbFieldType.O3) - ..hasRequiredFields = false - ; + static final $pb.BuilderInfo _i = + $pb.BuilderInfo('BleStatusInfo', createEmptyInstance: create) + ..a<$core.int>(1, 'status', $pb.PbFieldType.O3) + ..hasRequiredFields = false; BleStatusInfo._() : super(); factory BleStatusInfo() => create(); - factory BleStatusInfo.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); - factory BleStatusInfo.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + factory BleStatusInfo.fromBuffer($core.List<$core.int> i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(i, r); + factory BleStatusInfo.fromJson($core.String i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); BleStatusInfo clone() => BleStatusInfo()..mergeFromMessage(this); - BleStatusInfo copyWith(void Function(BleStatusInfo) updates) => super.copyWith((message) => updates(message as BleStatusInfo)); + BleStatusInfo copyWith(void Function(BleStatusInfo) updates) => + super.copyWith((message) => updates(message as BleStatusInfo)); $pb.BuilderInfo get info_ => _i; @$core.pragma('dart2js:noInline') static BleStatusInfo create() => BleStatusInfo._(); BleStatusInfo createEmptyInstance() => create(); - static $pb.PbList createRepeated() => $pb.PbList(); + static $pb.PbList createRepeated() => + $pb.PbList(); @$core.pragma('dart2js:noInline') - static BleStatusInfo getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static BleStatusInfo getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); static BleStatusInfo _defaultInstance; @$pb.TagNumber(1) $core.int get status => $_getIZ(0); @$pb.TagNumber(1) - set status($core.int v) { $_setSignedInt32(0, v); } + set status($core.int v) { + $_setSignedInt32(0, v); + } + @$pb.TagNumber(1) $core.bool hasStatus() => $_has(0); @$pb.TagNumber(1) @@ -688,31 +939,47 @@ class BleStatusInfo extends $pb.GeneratedMessage { } class ChangeConnectionPriorityRequest extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo('ChangeConnectionPriorityRequest', createEmptyInstance: create) + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + 'ChangeConnectionPriorityRequest', + createEmptyInstance: create) ..aOS(1, 'deviceId', protoName: 'deviceId') ..a<$core.int>(2, 'priority', $pb.PbFieldType.O3) - ..hasRequiredFields = false - ; + ..hasRequiredFields = false; ChangeConnectionPriorityRequest._() : super(); factory ChangeConnectionPriorityRequest() => create(); - factory ChangeConnectionPriorityRequest.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); - factory ChangeConnectionPriorityRequest.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); - ChangeConnectionPriorityRequest clone() => ChangeConnectionPriorityRequest()..mergeFromMessage(this); - ChangeConnectionPriorityRequest copyWith(void Function(ChangeConnectionPriorityRequest) updates) => super.copyWith((message) => updates(message as ChangeConnectionPriorityRequest)); + factory ChangeConnectionPriorityRequest.fromBuffer($core.List<$core.int> i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(i, r); + factory ChangeConnectionPriorityRequest.fromJson($core.String i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + ChangeConnectionPriorityRequest clone() => + ChangeConnectionPriorityRequest()..mergeFromMessage(this); + ChangeConnectionPriorityRequest copyWith( + void Function(ChangeConnectionPriorityRequest) updates) => + super.copyWith( + (message) => updates(message as ChangeConnectionPriorityRequest)); $pb.BuilderInfo get info_ => _i; @$core.pragma('dart2js:noInline') - static ChangeConnectionPriorityRequest create() => ChangeConnectionPriorityRequest._(); + static ChangeConnectionPriorityRequest create() => + ChangeConnectionPriorityRequest._(); ChangeConnectionPriorityRequest createEmptyInstance() => create(); - static $pb.PbList createRepeated() => $pb.PbList(); + static $pb.PbList createRepeated() => + $pb.PbList(); @$core.pragma('dart2js:noInline') - static ChangeConnectionPriorityRequest getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static ChangeConnectionPriorityRequest getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor( + create); static ChangeConnectionPriorityRequest _defaultInstance; @$pb.TagNumber(1) $core.String get deviceId => $_getSZ(0); @$pb.TagNumber(1) - set deviceId($core.String v) { $_setString(0, v); } + set deviceId($core.String v) { + $_setString(0, v); + } + @$pb.TagNumber(1) $core.bool hasDeviceId() => $_has(0); @$pb.TagNumber(1) @@ -721,7 +988,10 @@ class ChangeConnectionPriorityRequest extends $pb.GeneratedMessage { @$pb.TagNumber(2) $core.int get priority => $_getIZ(1); @$pb.TagNumber(2) - set priority($core.int v) { $_setSignedInt32(1, v); } + set priority($core.int v) { + $_setSignedInt32(1, v); + } + @$pb.TagNumber(2) $core.bool hasPriority() => $_has(1); @$pb.TagNumber(2) @@ -729,31 +999,46 @@ class ChangeConnectionPriorityRequest extends $pb.GeneratedMessage { } class ChangeConnectionPriorityInfo extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo('ChangeConnectionPriorityInfo', createEmptyInstance: create) + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + 'ChangeConnectionPriorityInfo', + createEmptyInstance: create) ..aOS(1, 'deviceId', protoName: 'deviceId') ..aOM(2, 'failure', subBuilder: GenericFailure.create) - ..hasRequiredFields = false - ; + ..hasRequiredFields = false; ChangeConnectionPriorityInfo._() : super(); factory ChangeConnectionPriorityInfo() => create(); - factory ChangeConnectionPriorityInfo.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); - factory ChangeConnectionPriorityInfo.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); - ChangeConnectionPriorityInfo clone() => ChangeConnectionPriorityInfo()..mergeFromMessage(this); - ChangeConnectionPriorityInfo copyWith(void Function(ChangeConnectionPriorityInfo) updates) => super.copyWith((message) => updates(message as ChangeConnectionPriorityInfo)); + factory ChangeConnectionPriorityInfo.fromBuffer($core.List<$core.int> i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(i, r); + factory ChangeConnectionPriorityInfo.fromJson($core.String i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + ChangeConnectionPriorityInfo clone() => + ChangeConnectionPriorityInfo()..mergeFromMessage(this); + ChangeConnectionPriorityInfo copyWith( + void Function(ChangeConnectionPriorityInfo) updates) => + super.copyWith( + (message) => updates(message as ChangeConnectionPriorityInfo)); $pb.BuilderInfo get info_ => _i; @$core.pragma('dart2js:noInline') - static ChangeConnectionPriorityInfo create() => ChangeConnectionPriorityInfo._(); + static ChangeConnectionPriorityInfo create() => + ChangeConnectionPriorityInfo._(); ChangeConnectionPriorityInfo createEmptyInstance() => create(); - static $pb.PbList createRepeated() => $pb.PbList(); + static $pb.PbList createRepeated() => + $pb.PbList(); @$core.pragma('dart2js:noInline') - static ChangeConnectionPriorityInfo getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static ChangeConnectionPriorityInfo getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); static ChangeConnectionPriorityInfo _defaultInstance; @$pb.TagNumber(1) $core.String get deviceId => $_getSZ(0); @$pb.TagNumber(1) - set deviceId($core.String v) { $_setString(0, v); } + set deviceId($core.String v) { + $_setString(0, v); + } + @$pb.TagNumber(1) $core.bool hasDeviceId() => $_has(0); @$pb.TagNumber(1) @@ -762,7 +1047,10 @@ class ChangeConnectionPriorityInfo extends $pb.GeneratedMessage { @$pb.TagNumber(2) GenericFailure get failure => $_getN(1); @$pb.TagNumber(2) - set failure(GenericFailure v) { setField(2, v); } + set failure(GenericFailure v) { + setField(2, v); + } + @$pb.TagNumber(2) $core.bool hasFailure() => $_has(1); @$pb.TagNumber(2) @@ -772,32 +1060,46 @@ class ChangeConnectionPriorityInfo extends $pb.GeneratedMessage { } class CharacteristicAddress extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo('CharacteristicAddress', createEmptyInstance: create) - ..aOS(1, 'deviceId', protoName: 'deviceId') - ..aOM(2, 'serviceUuid', protoName: 'serviceUuid', subBuilder: Uuid.create) - ..aOM(3, 'characteristicUuid', protoName: 'characteristicUuid', subBuilder: Uuid.create) - ..hasRequiredFields = false - ; + static final $pb.BuilderInfo _i = + $pb.BuilderInfo('CharacteristicAddress', createEmptyInstance: create) + ..aOS(1, 'deviceId', protoName: 'deviceId') + ..aOM(2, 'serviceUuid', + protoName: 'serviceUuid', subBuilder: Uuid.create) + ..aOM(3, 'characteristicUuid', + protoName: 'characteristicUuid', subBuilder: Uuid.create) + ..hasRequiredFields = false; CharacteristicAddress._() : super(); factory CharacteristicAddress() => create(); - factory CharacteristicAddress.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); - factory CharacteristicAddress.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); - CharacteristicAddress clone() => CharacteristicAddress()..mergeFromMessage(this); - CharacteristicAddress copyWith(void Function(CharacteristicAddress) updates) => super.copyWith((message) => updates(message as CharacteristicAddress)); + factory CharacteristicAddress.fromBuffer($core.List<$core.int> i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(i, r); + factory CharacteristicAddress.fromJson($core.String i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + CharacteristicAddress clone() => + CharacteristicAddress()..mergeFromMessage(this); + CharacteristicAddress copyWith( + void Function(CharacteristicAddress) updates) => + super.copyWith((message) => updates(message as CharacteristicAddress)); $pb.BuilderInfo get info_ => _i; @$core.pragma('dart2js:noInline') static CharacteristicAddress create() => CharacteristicAddress._(); CharacteristicAddress createEmptyInstance() => create(); - static $pb.PbList createRepeated() => $pb.PbList(); + static $pb.PbList createRepeated() => + $pb.PbList(); @$core.pragma('dart2js:noInline') - static CharacteristicAddress getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static CharacteristicAddress getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); static CharacteristicAddress _defaultInstance; @$pb.TagNumber(1) $core.String get deviceId => $_getSZ(0); @$pb.TagNumber(1) - set deviceId($core.String v) { $_setString(0, v); } + set deviceId($core.String v) { + $_setString(0, v); + } + @$pb.TagNumber(1) $core.bool hasDeviceId() => $_has(0); @$pb.TagNumber(1) @@ -806,7 +1108,10 @@ class CharacteristicAddress extends $pb.GeneratedMessage { @$pb.TagNumber(2) Uuid get serviceUuid => $_getN(1); @$pb.TagNumber(2) - set serviceUuid(Uuid v) { setField(2, v); } + set serviceUuid(Uuid v) { + setField(2, v); + } + @$pb.TagNumber(2) $core.bool hasServiceUuid() => $_has(1); @$pb.TagNumber(2) @@ -817,7 +1122,10 @@ class CharacteristicAddress extends $pb.GeneratedMessage { @$pb.TagNumber(3) Uuid get characteristicUuid => $_getN(2); @$pb.TagNumber(3) - set characteristicUuid(Uuid v) { setField(3, v); } + set characteristicUuid(Uuid v) { + setField(3, v); + } + @$pb.TagNumber(3) $core.bool hasCharacteristicUuid() => $_has(2); @$pb.TagNumber(3) @@ -827,31 +1135,42 @@ class CharacteristicAddress extends $pb.GeneratedMessage { } class ServiceDataEntry extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo('ServiceDataEntry', createEmptyInstance: create) - ..aOM(1, 'serviceUuid', protoName: 'serviceUuid', subBuilder: Uuid.create) - ..a<$core.List<$core.int>>(2, 'data', $pb.PbFieldType.OY) - ..hasRequiredFields = false - ; + static final $pb.BuilderInfo _i = + $pb.BuilderInfo('ServiceDataEntry', createEmptyInstance: create) + ..aOM(1, 'serviceUuid', + protoName: 'serviceUuid', subBuilder: Uuid.create) + ..a<$core.List<$core.int>>(2, 'data', $pb.PbFieldType.OY) + ..hasRequiredFields = false; ServiceDataEntry._() : super(); factory ServiceDataEntry() => create(); - factory ServiceDataEntry.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); - factory ServiceDataEntry.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + factory ServiceDataEntry.fromBuffer($core.List<$core.int> i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(i, r); + factory ServiceDataEntry.fromJson($core.String i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); ServiceDataEntry clone() => ServiceDataEntry()..mergeFromMessage(this); - ServiceDataEntry copyWith(void Function(ServiceDataEntry) updates) => super.copyWith((message) => updates(message as ServiceDataEntry)); + ServiceDataEntry copyWith(void Function(ServiceDataEntry) updates) => + super.copyWith((message) => updates(message as ServiceDataEntry)); $pb.BuilderInfo get info_ => _i; @$core.pragma('dart2js:noInline') static ServiceDataEntry create() => ServiceDataEntry._(); ServiceDataEntry createEmptyInstance() => create(); - static $pb.PbList createRepeated() => $pb.PbList(); + static $pb.PbList createRepeated() => + $pb.PbList(); @$core.pragma('dart2js:noInline') - static ServiceDataEntry getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static ServiceDataEntry getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); static ServiceDataEntry _defaultInstance; @$pb.TagNumber(1) Uuid get serviceUuid => $_getN(0); @$pb.TagNumber(1) - set serviceUuid(Uuid v) { setField(1, v); } + set serviceUuid(Uuid v) { + setField(1, v); + } + @$pb.TagNumber(1) $core.bool hasServiceUuid() => $_has(0); @$pb.TagNumber(1) @@ -862,7 +1181,10 @@ class ServiceDataEntry extends $pb.GeneratedMessage { @$pb.TagNumber(2) $core.List<$core.int> get data => $_getN(1); @$pb.TagNumber(2) - set data($core.List<$core.int> v) { $_setBytes(1, v); } + set data($core.List<$core.int> v) { + $_setBytes(1, v); + } + @$pb.TagNumber(2) $core.bool hasData() => $_has(1); @$pb.TagNumber(2) @@ -870,24 +1192,37 @@ class ServiceDataEntry extends $pb.GeneratedMessage { } class ServicesWithCharacteristics extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo('ServicesWithCharacteristics', createEmptyInstance: create) - ..pc(1, 'items', $pb.PbFieldType.PM, subBuilder: ServiceWithCharacteristics.create) - ..hasRequiredFields = false - ; + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + 'ServicesWithCharacteristics', + createEmptyInstance: create) + ..pc(1, 'items', $pb.PbFieldType.PM, + subBuilder: ServiceWithCharacteristics.create) + ..hasRequiredFields = false; ServicesWithCharacteristics._() : super(); factory ServicesWithCharacteristics() => create(); - factory ServicesWithCharacteristics.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); - factory ServicesWithCharacteristics.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); - ServicesWithCharacteristics clone() => ServicesWithCharacteristics()..mergeFromMessage(this); - ServicesWithCharacteristics copyWith(void Function(ServicesWithCharacteristics) updates) => super.copyWith((message) => updates(message as ServicesWithCharacteristics)); + factory ServicesWithCharacteristics.fromBuffer($core.List<$core.int> i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(i, r); + factory ServicesWithCharacteristics.fromJson($core.String i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + ServicesWithCharacteristics clone() => + ServicesWithCharacteristics()..mergeFromMessage(this); + ServicesWithCharacteristics copyWith( + void Function(ServicesWithCharacteristics) updates) => + super.copyWith( + (message) => updates(message as ServicesWithCharacteristics)); $pb.BuilderInfo get info_ => _i; @$core.pragma('dart2js:noInline') - static ServicesWithCharacteristics create() => ServicesWithCharacteristics._(); + static ServicesWithCharacteristics create() => + ServicesWithCharacteristics._(); ServicesWithCharacteristics createEmptyInstance() => create(); - static $pb.PbList createRepeated() => $pb.PbList(); + static $pb.PbList createRepeated() => + $pb.PbList(); @$core.pragma('dart2js:noInline') - static ServicesWithCharacteristics getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static ServicesWithCharacteristics getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); static ServicesWithCharacteristics _defaultInstance; @$pb.TagNumber(1) @@ -895,31 +1230,46 @@ class ServicesWithCharacteristics extends $pb.GeneratedMessage { } class ServiceWithCharacteristics extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo('ServiceWithCharacteristics', createEmptyInstance: create) + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + 'ServiceWithCharacteristics', + createEmptyInstance: create) ..aOM(1, 'serviceId', protoName: 'serviceId', subBuilder: Uuid.create) - ..pc(2, 'characteristics', $pb.PbFieldType.PM, subBuilder: Uuid.create) - ..hasRequiredFields = false - ; + ..pc(2, 'characteristics', $pb.PbFieldType.PM, + subBuilder: Uuid.create) + ..hasRequiredFields = false; ServiceWithCharacteristics._() : super(); factory ServiceWithCharacteristics() => create(); - factory ServiceWithCharacteristics.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); - factory ServiceWithCharacteristics.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); - ServiceWithCharacteristics clone() => ServiceWithCharacteristics()..mergeFromMessage(this); - ServiceWithCharacteristics copyWith(void Function(ServiceWithCharacteristics) updates) => super.copyWith((message) => updates(message as ServiceWithCharacteristics)); + factory ServiceWithCharacteristics.fromBuffer($core.List<$core.int> i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(i, r); + factory ServiceWithCharacteristics.fromJson($core.String i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); + ServiceWithCharacteristics clone() => + ServiceWithCharacteristics()..mergeFromMessage(this); + ServiceWithCharacteristics copyWith( + void Function(ServiceWithCharacteristics) updates) => + super.copyWith( + (message) => updates(message as ServiceWithCharacteristics)); $pb.BuilderInfo get info_ => _i; @$core.pragma('dart2js:noInline') static ServiceWithCharacteristics create() => ServiceWithCharacteristics._(); ServiceWithCharacteristics createEmptyInstance() => create(); - static $pb.PbList createRepeated() => $pb.PbList(); + static $pb.PbList createRepeated() => + $pb.PbList(); @$core.pragma('dart2js:noInline') - static ServiceWithCharacteristics getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static ServiceWithCharacteristics getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); static ServiceWithCharacteristics _defaultInstance; @$pb.TagNumber(1) Uuid get serviceId => $_getN(0); @$pb.TagNumber(1) - set serviceId(Uuid v) { setField(1, v); } + set serviceId(Uuid v) { + setField(1, v); + } + @$pb.TagNumber(1) $core.bool hasServiceId() => $_has(0); @$pb.TagNumber(1) @@ -932,30 +1282,39 @@ class ServiceWithCharacteristics extends $pb.GeneratedMessage { } class Uuid extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo('Uuid', createEmptyInstance: create) - ..a<$core.List<$core.int>>(1, 'data', $pb.PbFieldType.OY) - ..hasRequiredFields = false - ; + static final $pb.BuilderInfo _i = + $pb.BuilderInfo('Uuid', createEmptyInstance: create) + ..a<$core.List<$core.int>>(1, 'data', $pb.PbFieldType.OY) + ..hasRequiredFields = false; Uuid._() : super(); factory Uuid() => create(); - factory Uuid.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); - factory Uuid.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + factory Uuid.fromBuffer($core.List<$core.int> i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(i, r); + factory Uuid.fromJson($core.String i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); Uuid clone() => Uuid()..mergeFromMessage(this); - Uuid copyWith(void Function(Uuid) updates) => super.copyWith((message) => updates(message as Uuid)); + Uuid copyWith(void Function(Uuid) updates) => + super.copyWith((message) => updates(message as Uuid)); $pb.BuilderInfo get info_ => _i; @$core.pragma('dart2js:noInline') static Uuid create() => Uuid._(); Uuid createEmptyInstance() => create(); static $pb.PbList createRepeated() => $pb.PbList(); @$core.pragma('dart2js:noInline') - static Uuid getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static Uuid getDefault() => + _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); static Uuid _defaultInstance; @$pb.TagNumber(1) $core.List<$core.int> get data => $_getN(0); @$pb.TagNumber(1) - set data($core.List<$core.int> v) { $_setBytes(0, v); } + set data($core.List<$core.int> v) { + $_setBytes(0, v); + } + @$pb.TagNumber(1) $core.bool hasData() => $_has(0); @$pb.TagNumber(1) @@ -963,31 +1322,41 @@ class Uuid extends $pb.GeneratedMessage { } class GenericFailure extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo('GenericFailure', createEmptyInstance: create) - ..a<$core.int>(1, 'code', $pb.PbFieldType.O3) - ..aOS(2, 'message') - ..hasRequiredFields = false - ; + static final $pb.BuilderInfo _i = + $pb.BuilderInfo('GenericFailure', createEmptyInstance: create) + ..a<$core.int>(1, 'code', $pb.PbFieldType.O3) + ..aOS(2, 'message') + ..hasRequiredFields = false; GenericFailure._() : super(); factory GenericFailure() => create(); - factory GenericFailure.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); - factory GenericFailure.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + factory GenericFailure.fromBuffer($core.List<$core.int> i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(i, r); + factory GenericFailure.fromJson($core.String i, + [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(i, r); GenericFailure clone() => GenericFailure()..mergeFromMessage(this); - GenericFailure copyWith(void Function(GenericFailure) updates) => super.copyWith((message) => updates(message as GenericFailure)); + GenericFailure copyWith(void Function(GenericFailure) updates) => + super.copyWith((message) => updates(message as GenericFailure)); $pb.BuilderInfo get info_ => _i; @$core.pragma('dart2js:noInline') static GenericFailure create() => GenericFailure._(); GenericFailure createEmptyInstance() => create(); - static $pb.PbList createRepeated() => $pb.PbList(); + static $pb.PbList createRepeated() => + $pb.PbList(); @$core.pragma('dart2js:noInline') - static GenericFailure getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static GenericFailure getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); static GenericFailure _defaultInstance; @$pb.TagNumber(1) $core.int get code => $_getIZ(0); @$pb.TagNumber(1) - set code($core.int v) { $_setSignedInt32(0, v); } + set code($core.int v) { + $_setSignedInt32(0, v); + } + @$pb.TagNumber(1) $core.bool hasCode() => $_has(0); @$pb.TagNumber(1) @@ -996,10 +1365,12 @@ class GenericFailure extends $pb.GeneratedMessage { @$pb.TagNumber(2) $core.String get message => $_getSZ(1); @$pb.TagNumber(2) - set message($core.String v) { $_setString(1, v); } + set message($core.String v) { + $_setString(1, v); + } + @$pb.TagNumber(2) $core.bool hasMessage() => $_has(1); @$pb.TagNumber(2) void clearMessage() => clearField(2); } - diff --git a/lib/src/generated/bledata.pbenum.dart b/lib/src/generated/bledata.pbenum.dart index 3e18e072..de53b728 100644 --- a/lib/src/generated/bledata.pbenum.dart +++ b/lib/src/generated/bledata.pbenum.dart @@ -4,4 +4,3 @@ // // @dart = 2.3 // ignore_for_file: camel_case_types,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type - diff --git a/lib/src/generated/bledata.pbjson.dart b/lib/src/generated/bledata.pbjson.dart index a29fe2e1..59eaaf3b 100644 --- a/lib/src/generated/bledata.pbjson.dart +++ b/lib/src/generated/bledata.pbjson.dart @@ -8,7 +8,14 @@ const ScanForDevicesRequest$json = const { '1': 'ScanForDevicesRequest', '2': const [ - const {'1': 'serviceUuid', '3': 1, '4': 1, '5': 11, '6': '.Uuid', '10': 'serviceUuid'}, + const { + '1': 'serviceUuid', + '3': 1, + '4': 1, + '5': 11, + '6': '.Uuid', + '10': 'serviceUuid' + }, const {'1': 'scanMode', '3': 2, '4': 1, '5': 5, '10': 'scanMode'}, ], }; @@ -18,8 +25,22 @@ const DeviceScanInfo$json = const { '2': const [ const {'1': 'id', '3': 1, '4': 1, '5': 9, '10': 'id'}, const {'1': 'name', '3': 2, '4': 1, '5': 9, '10': 'name'}, - const {'1': 'failure', '3': 3, '4': 1, '5': 11, '6': '.GenericFailure', '10': 'failure'}, - const {'1': 'serviceData', '3': 4, '4': 3, '5': 11, '6': '.ServiceDataEntry', '10': 'serviceData'}, + const { + '1': 'failure', + '3': 3, + '4': 1, + '5': 11, + '6': '.GenericFailure', + '10': 'failure' + }, + const { + '1': 'serviceData', + '3': 4, + '4': 3, + '5': 11, + '6': '.ServiceDataEntry', + '10': 'serviceData' + }, const {'1': 'rssi', '3': 5, '4': 1, '5': 5, '10': 'rssi'}, ], }; @@ -28,7 +49,14 @@ const ConnectToDeviceRequest$json = const { '1': 'ConnectToDeviceRequest', '2': const [ const {'1': 'deviceId', '3': 1, '4': 1, '5': 9, '10': 'deviceId'}, - const {'1': 'servicesWithCharacteristicsToDiscover', '3': 2, '4': 1, '5': 11, '6': '.ServicesWithCharacteristics', '10': 'servicesWithCharacteristicsToDiscover'}, + const { + '1': 'servicesWithCharacteristicsToDiscover', + '3': 2, + '4': 1, + '5': 11, + '6': '.ServicesWithCharacteristics', + '10': 'servicesWithCharacteristicsToDiscover' + }, const {'1': 'timeoutInMs', '3': 3, '4': 1, '5': 5, '10': 'timeoutInMs'}, ], }; @@ -37,8 +65,21 @@ const DeviceInfo$json = const { '1': 'DeviceInfo', '2': const [ const {'1': 'id', '3': 1, '4': 1, '5': 9, '10': 'id'}, - const {'1': 'connectionState', '3': 2, '4': 1, '5': 5, '10': 'connectionState'}, - const {'1': 'failure', '3': 3, '4': 1, '5': 11, '6': '.GenericFailure', '10': 'failure'}, + const { + '1': 'connectionState', + '3': 2, + '4': 1, + '5': 5, + '10': 'connectionState' + }, + const { + '1': 'failure', + '3': 3, + '4': 1, + '5': 11, + '6': '.GenericFailure', + '10': 'failure' + }, ], }; @@ -59,44 +100,93 @@ const ClearGattCacheRequest$json = const { const ClearGattCacheInfo$json = const { '1': 'ClearGattCacheInfo', '2': const [ - const {'1': 'failure', '3': 1, '4': 1, '5': 11, '6': '.GenericFailure', '10': 'failure'}, + const { + '1': 'failure', + '3': 1, + '4': 1, + '5': 11, + '6': '.GenericFailure', + '10': 'failure' + }, ], }; const NotifyCharacteristicRequest$json = const { '1': 'NotifyCharacteristicRequest', '2': const [ - const {'1': 'characteristic', '3': 1, '4': 1, '5': 11, '6': '.CharacteristicAddress', '10': 'characteristic'}, + const { + '1': 'characteristic', + '3': 1, + '4': 1, + '5': 11, + '6': '.CharacteristicAddress', + '10': 'characteristic' + }, ], }; const NotifyNoMoreCharacteristicRequest$json = const { '1': 'NotifyNoMoreCharacteristicRequest', '2': const [ - const {'1': 'characteristic', '3': 1, '4': 1, '5': 11, '6': '.CharacteristicAddress', '10': 'characteristic'}, + const { + '1': 'characteristic', + '3': 1, + '4': 1, + '5': 11, + '6': '.CharacteristicAddress', + '10': 'characteristic' + }, ], }; const ReadCharacteristicRequest$json = const { '1': 'ReadCharacteristicRequest', '2': const [ - const {'1': 'characteristic', '3': 1, '4': 1, '5': 11, '6': '.CharacteristicAddress', '10': 'characteristic'}, + const { + '1': 'characteristic', + '3': 1, + '4': 1, + '5': 11, + '6': '.CharacteristicAddress', + '10': 'characteristic' + }, ], }; const CharacteristicValueInfo$json = const { '1': 'CharacteristicValueInfo', '2': const [ - const {'1': 'characteristic', '3': 1, '4': 1, '5': 11, '6': '.CharacteristicAddress', '10': 'characteristic'}, + const { + '1': 'characteristic', + '3': 1, + '4': 1, + '5': 11, + '6': '.CharacteristicAddress', + '10': 'characteristic' + }, const {'1': 'value', '3': 2, '4': 1, '5': 12, '10': 'value'}, - const {'1': 'failure', '3': 3, '4': 1, '5': 11, '6': '.GenericFailure', '10': 'failure'}, + const { + '1': 'failure', + '3': 3, + '4': 1, + '5': 11, + '6': '.GenericFailure', + '10': 'failure' + }, ], }; const WriteCharacteristicRequest$json = const { '1': 'WriteCharacteristicRequest', '2': const [ - const {'1': 'characteristic', '3': 1, '4': 1, '5': 11, '6': '.CharacteristicAddress', '10': 'characteristic'}, + const { + '1': 'characteristic', + '3': 1, + '4': 1, + '5': 11, + '6': '.CharacteristicAddress', + '10': 'characteristic' + }, const {'1': 'value', '3': 2, '4': 1, '5': 12, '10': 'value'}, ], }; @@ -104,8 +194,22 @@ const WriteCharacteristicRequest$json = const { const WriteCharacteristicInfo$json = const { '1': 'WriteCharacteristicInfo', '2': const [ - const {'1': 'characteristic', '3': 1, '4': 1, '5': 11, '6': '.CharacteristicAddress', '10': 'characteristic'}, - const {'1': 'failure', '3': 3, '4': 1, '5': 11, '6': '.GenericFailure', '10': 'failure'}, + const { + '1': 'characteristic', + '3': 1, + '4': 1, + '5': 11, + '6': '.CharacteristicAddress', + '10': 'characteristic' + }, + const { + '1': 'failure', + '3': 3, + '4': 1, + '5': 11, + '6': '.GenericFailure', + '10': 'failure' + }, ], }; @@ -122,7 +226,14 @@ const NegotiateMtuInfo$json = const { '2': const [ const {'1': 'deviceId', '3': 1, '4': 1, '5': 9, '10': 'deviceId'}, const {'1': 'mtuSize', '3': 2, '4': 1, '5': 5, '10': 'mtuSize'}, - const {'1': 'failure', '3': 3, '4': 1, '5': 11, '6': '.GenericFailure', '10': 'failure'}, + const { + '1': 'failure', + '3': 3, + '4': 1, + '5': 11, + '6': '.GenericFailure', + '10': 'failure' + }, ], }; @@ -145,7 +256,14 @@ const ChangeConnectionPriorityInfo$json = const { '1': 'ChangeConnectionPriorityInfo', '2': const [ const {'1': 'deviceId', '3': 1, '4': 1, '5': 9, '10': 'deviceId'}, - const {'1': 'failure', '3': 2, '4': 1, '5': 11, '6': '.GenericFailure', '10': 'failure'}, + const { + '1': 'failure', + '3': 2, + '4': 1, + '5': 11, + '6': '.GenericFailure', + '10': 'failure' + }, ], }; @@ -153,15 +271,36 @@ const CharacteristicAddress$json = const { '1': 'CharacteristicAddress', '2': const [ const {'1': 'deviceId', '3': 1, '4': 1, '5': 9, '10': 'deviceId'}, - const {'1': 'serviceUuid', '3': 2, '4': 1, '5': 11, '6': '.Uuid', '10': 'serviceUuid'}, - const {'1': 'characteristicUuid', '3': 3, '4': 1, '5': 11, '6': '.Uuid', '10': 'characteristicUuid'}, + const { + '1': 'serviceUuid', + '3': 2, + '4': 1, + '5': 11, + '6': '.Uuid', + '10': 'serviceUuid' + }, + const { + '1': 'characteristicUuid', + '3': 3, + '4': 1, + '5': 11, + '6': '.Uuid', + '10': 'characteristicUuid' + }, ], }; const ServiceDataEntry$json = const { '1': 'ServiceDataEntry', '2': const [ - const {'1': 'serviceUuid', '3': 1, '4': 1, '5': 11, '6': '.Uuid', '10': 'serviceUuid'}, + const { + '1': 'serviceUuid', + '3': 1, + '4': 1, + '5': 11, + '6': '.Uuid', + '10': 'serviceUuid' + }, const {'1': 'data', '3': 2, '4': 1, '5': 12, '10': 'data'}, ], }; @@ -169,15 +308,36 @@ const ServiceDataEntry$json = const { const ServicesWithCharacteristics$json = const { '1': 'ServicesWithCharacteristics', '2': const [ - const {'1': 'items', '3': 1, '4': 3, '5': 11, '6': '.ServiceWithCharacteristics', '10': 'items'}, + const { + '1': 'items', + '3': 1, + '4': 3, + '5': 11, + '6': '.ServiceWithCharacteristics', + '10': 'items' + }, ], }; const ServiceWithCharacteristics$json = const { '1': 'ServiceWithCharacteristics', '2': const [ - const {'1': 'serviceId', '3': 1, '4': 1, '5': 11, '6': '.Uuid', '10': 'serviceId'}, - const {'1': 'characteristics', '3': 2, '4': 3, '5': 11, '6': '.Uuid', '10': 'characteristics'}, + const { + '1': 'serviceId', + '3': 1, + '4': 1, + '5': 11, + '6': '.Uuid', + '10': 'serviceId' + }, + const { + '1': 'characteristics', + '3': 2, + '4': 3, + '5': 11, + '6': '.Uuid', + '10': 'characteristics' + }, ], }; @@ -195,4 +355,3 @@ const GenericFailure$json = const { const {'1': 'message', '3': 2, '4': 1, '5': 9, '10': 'message'}, ], }; - diff --git a/lib/src/generated/bledata.pbserver.dart b/lib/src/generated/bledata.pbserver.dart index 7789640f..a0cd8bd0 100644 --- a/lib/src/generated/bledata.pbserver.dart +++ b/lib/src/generated/bledata.pbserver.dart @@ -6,4 +6,3 @@ // ignore_for_file: camel_case_types,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type export 'bledata.pb.dart'; - diff --git a/lib/src/model/ble_status.dart b/lib/src/model/ble_status.dart index 30c79eed..58839c43 100644 --- a/lib/src/model/ble_status.dart +++ b/lib/src/model/ble_status.dart @@ -1 +1,8 @@ -enum BleStatus { unknown, unsupported, unauthorized, poweredOff, discoveryDisabled, ready } +enum BleStatus { + unknown, + unsupported, + unauthorized, + poweredOff, + discoveryDisabled, + ready +} diff --git a/lib/src/model/characteristic_value.dart b/lib/src/model/characteristic_value.dart index f2bead07..f33aecaa 100644 --- a/lib/src/model/characteristic_value.dart +++ b/lib/src/model/characteristic_value.dart @@ -5,12 +5,15 @@ import 'package:meta/meta.dart'; class CharacteristicValue { final QualifiedCharacteristic characteristic; - final Result, GenericFailure> result; + final Result, GenericFailure> + result; - const CharacteristicValue({@required this.characteristic, @required this.result}); + const CharacteristicValue( + {@required this.characteristic, @required this.result}); @override - String toString() => "$runtimeType(characteristic: $characteristic, value: $result)"; + String toString() => + "$runtimeType(characteristic: $characteristic, value: $result)"; } enum CharacteristicValueUpdateError { unknown } diff --git a/lib/src/model/connection_state_update.dart b/lib/src/model/connection_state_update.dart index acc1de1f..b6b04f88 100644 --- a/lib/src/model/connection_state_update.dart +++ b/lib/src/model/connection_state_update.dart @@ -16,8 +16,14 @@ class ConnectionStateUpdate { }); @override - String toString() => "$runtimeType(deviceId: $deviceId, connectionState: $connectionState, error: $failure)"; + String toString() => + "$runtimeType(deviceId: $deviceId, connectionState: $connectionState, error: $failure)"; } -enum DeviceConnectionState { connecting, connected, disconnecting, disconnected } +enum DeviceConnectionState { + connecting, + connected, + disconnecting, + disconnected +} enum ConnectionError { unknown, failedToConnect } diff --git a/lib/src/model/discovered_device.dart b/lib/src/model/discovered_device.dart index 6a327449..d8ffef8e 100644 --- a/lib/src/model/discovered_device.dart +++ b/lib/src/model/discovered_device.dart @@ -27,7 +27,8 @@ class DiscoveredDevice extends $DiscoveredDevice { @CustomEquality(DeepCollectionEquality()) final Map serviceData; - const DiscoveredDevice({@required this.id, @required this.name, @required this.serviceData}); + const DiscoveredDevice( + {@required this.id, @required this.name, @required this.serviceData}); } enum ConnectionStatus { disconnected, connecting, connected, disconnecting } diff --git a/lib/src/model/discovered_device.g.dart b/lib/src/model/discovered_device.g.dart index 9ee81033..104f48ab 100644 --- a/lib/src/model/discovered_device.g.dart +++ b/lib/src/model/discovered_device.g.dart @@ -11,9 +11,14 @@ abstract class $DiscoveredDevice { String get name; Map get serviceData; const $DiscoveredDevice(); - DiscoveredDevice copyWith({String id, String name, Map serviceData}) => - DiscoveredDevice(id: id ?? this.id, name: name ?? this.name, serviceData: serviceData ?? this.serviceData); - String toString() => "DiscoveredDevice(id: $id, name: $name, serviceData: $serviceData)"; + DiscoveredDevice copyWith( + {String id, String name, Map serviceData}) => + DiscoveredDevice( + id: id ?? this.id, + name: name ?? this.name, + serviceData: serviceData ?? this.serviceData); + String toString() => + "DiscoveredDevice(id: $id, name: $name, serviceData: $serviceData)"; bool operator ==(dynamic other) => other.runtimeType == runtimeType && id == other.id && @@ -30,8 +35,11 @@ abstract class $DiscoveredDevice { } class DiscoveredDevice$ { - static final id = Lens((s_) => s_.id, (s_, id) => s_.copyWith(id: id)); - static final name = Lens((s_) => s_.name, (s_, name) => s_.copyWith(name: name)); + static final id = Lens( + (s_) => s_.id, (s_, id) => s_.copyWith(id: id)); + static final name = Lens( + (s_) => s_.name, (s_, name) => s_.copyWith(name: name)); static final serviceData = Lens>( - (s_) => s_.serviceData, (s_, serviceData) => s_.copyWith(serviceData: serviceData)); + (s_) => s_.serviceData, + (s_, serviceData) => s_.copyWith(serviceData: serviceData)); } diff --git a/lib/src/model/qualified_characteristic.dart b/lib/src/model/qualified_characteristic.dart index 76c63d56..5758f494 100644 --- a/lib/src/model/qualified_characteristic.dart +++ b/lib/src/model/qualified_characteristic.dart @@ -14,10 +14,13 @@ class QualifiedCharacteristic { }); @override - String toString() => "$runtimeType(characteristicId: $characteristicId, serviceId: $serviceId, deviceId: $deviceId)"; + String toString() => + "$runtimeType(characteristicId: $characteristicId, serviceId: $serviceId, deviceId: $deviceId)"; @override - int get hashCode => (((17 * 37) + characteristicId.hashCode) * 37 + serviceId.hashCode) * 37 + deviceId.hashCode; + int get hashCode => + (((17 * 37) + characteristicId.hashCode) * 37 + serviceId.hashCode) * 37 + + deviceId.hashCode; @override bool operator ==(dynamic other) => diff --git a/lib/src/model/result.dart b/lib/src/model/result.dart index 50bf5287..ff117a3a 100644 --- a/lib/src/model/result.dart +++ b/lib/src/model/result.dart @@ -2,7 +2,8 @@ import 'package:meta/meta.dart'; @immutable class Result { - const Result.success(this._value) : _failure = null; // ignore: avoid_field_initializers_in_const_classes + const Result.success(this._value) + : _failure = null; // ignore: avoid_field_initializers_in_const_classes const Result.failure(this._failure) : assert(_failure != null), _value = null; // ignore: avoid_field_initializers_in_const_classes @@ -19,7 +20,9 @@ class Result { }, ); - T iif({@required T Function(Value value) success, @required T Function(Failure failure) failure}) { + T iif( + {@required T Function(Value value) success, + @required T Function(Failure failure) failure}) { assert(_value == null || _failure == null); if (_failure != null) { @@ -41,11 +44,14 @@ class Result { } @override - int get hashCode => ((17 * 37) + (_value?.hashCode ?? 0)) * 37 + (_failure?.hashCode ?? 0); + int get hashCode => + ((17 * 37) + (_value?.hashCode ?? 0)) * 37 + (_failure?.hashCode ?? 0); @override bool operator ==(dynamic other) => - runtimeType == other.runtimeType && _value == other._value && _failure == other._failure; + runtimeType == other.runtimeType && + _value == other._value && + _failure == other._failure; final Value _value; final Failure _failure; diff --git a/lib/src/model/uuid.dart b/lib/src/model/uuid.dart index 9e25b68b..5eee3c09 100644 --- a/lib/src/model/uuid.dart +++ b/lib/src/model/uuid.dart @@ -22,7 +22,9 @@ class Uuid { continue; } - final byte = int.tryParse(string.substring(substringStart, substringStart + 2), radix: 16); + final byte = int.tryParse( + string.substring(substringStart, substringStart + 2), + radix: 16); if (byte == null) throw _UuidParseFailure(string); data[byteOffset] = byte; @@ -57,11 +59,13 @@ class Uuid { } @override - int get hashCode => data.fold(17, (hash, octet) => 37 * hash + octet.hashCode); + int get hashCode => + data.fold(17, (hash, octet) => 37 * hash + octet.hashCode); @override bool operator ==(dynamic other) => - other.runtimeType == runtimeType && const DeepCollectionEquality().equals(other.data, data); + other.runtimeType == runtimeType && + const DeepCollectionEquality().equals(other.data, data); } @immutable diff --git a/lib/src/prescan_connector.dart b/lib/src/prescan_connector.dart index 842b366a..7a2fe566 100644 --- a/lib/src/prescan_connector.dart +++ b/lib/src/prescan_connector.dart @@ -27,7 +27,8 @@ class PrescanConnector { Duration connectionTimeout, }) connectDevice; - final Stream Function({Uuid withService, ScanMode scanMode}) scanDevices; + final Stream Function({Uuid withService, ScanMode scanMode}) + scanDevices; final ScanSession Function() getCurrentScan; final Duration delayAfterScanFailure; @@ -66,30 +67,41 @@ class PrescanConnector { Uuid withService, Duration prescanDuration, ) { - if (scanRegistry.deviceIsDiscoveredRecently(deviceId: id, cacheValidity: scanRegistryCacheValidityPeriod)) { + if (scanRegistry.deviceIsDiscoveredRecently( + deviceId: id, cacheValidity: scanRegistryCacheValidityPeriod)) { return connectDevice( id: id, - servicesWithCharacteristicsToDiscover: servicesWithCharacteristicsToDiscover, + servicesWithCharacteristicsToDiscover: + servicesWithCharacteristicsToDiscover, connectionTimeout: connectionTimeout, ); } else { - final scanSubscription = scanDevices(withService: withService, scanMode: ScanMode.lowLatency) - .listen((DiscoveredDevice scanData) {}, onError: (Object _) {}); + final scanSubscription = + scanDevices(withService: withService, scanMode: ScanMode.lowLatency) + .listen((DiscoveredDevice scanData) {}, onError: (Object _) {}); Future.delayed(prescanDuration).then((_) { scanSubscription.cancel(); }); - return getCurrentScan().future.then((_) => true).catchError((Object _) => false).asStream().asyncExpand( + return getCurrentScan() + .future + .then((_) => true) + .catchError((Object _) => false) + .asStream() + .asyncExpand( (succeeded) { if (succeeded) { - return connectIfRecentlyDiscovered(id, servicesWithCharacteristicsToDiscover, connectionTimeout); + return connectIfRecentlyDiscovered( + id, servicesWithCharacteristicsToDiscover, connectionTimeout); } else { /*When the scan fails 99% of the times it is due to violation of the scan threshold: https://blog.classycode.com/undocumented-android-7-ble-behavior-changes-d1a9bd87d983 . Previously we did autoconnect but that gives slow connection times (up to 2 min) on a lot of devices. */ - return Future.delayed(delayAfterScanFailure).asStream().asyncExpand( - (_) => connectIfRecentlyDiscovered(id, servicesWithCharacteristicsToDiscover, connectionTimeout)); + return Future.delayed(delayAfterScanFailure) + .asStream() + .asyncExpand((_) => connectIfRecentlyDiscovered(id, + servicesWithCharacteristicsToDiscover, connectionTimeout)); } }, ); @@ -136,10 +148,12 @@ class PrescanConnector { Map> servicesWithCharacteristicsToDiscover, Duration connectionTimeout, ) { - if (scanRegistry.deviceIsDiscoveredRecently(deviceId: id, cacheValidity: scanRegistryCacheValidityPeriod)) { + if (scanRegistry.deviceIsDiscoveredRecently( + deviceId: id, cacheValidity: scanRegistryCacheValidityPeriod)) { return connectDevice( id: id, - servicesWithCharacteristicsToDiscover: servicesWithCharacteristicsToDiscover, + servicesWithCharacteristicsToDiscover: + servicesWithCharacteristicsToDiscover, connectionTimeout: connectionTimeout, ); } else { @@ -148,7 +162,9 @@ class PrescanConnector { ConnectionStateUpdate( deviceId: id, connectionState: DeviceConnectionState.disconnected, - failure: const GenericFailure(code: ConnectionError.failedToConnect, message: "Device is not advertising"), + failure: const GenericFailure( + code: ConnectionError.failedToConnect, + message: "Device is not advertising"), ), ], ); diff --git a/lib/src/reactive_ble.dart b/lib/src/reactive_ble.dart index a6396b23..ace060ad 100644 --- a/lib/src/reactive_ble.dart +++ b/lib/src/reactive_ble.dart @@ -34,11 +34,12 @@ class FlutterReactiveBle { BleStatus _status = BleStatus.unknown; - final Stream _statusStream = const EventChannel("flutter_reactive_ble_status") - .receiveBroadcastStream() - .cast>() - .map((data) => pb.BleStatusInfo.fromBuffer(data)) - .map(const ProtobufConverter().bleStatusFrom); + final Stream _statusStream = + const EventChannel("flutter_reactive_ble_status") + .receiveBroadcastStream() + .cast>() + .map((data) => pb.BleStatusInfo.fromBuffer(data)) + .map(const ProtobufConverter().bleStatusFrom); PrescanConnector _prescanConnector; @@ -55,11 +56,12 @@ class FlutterReactiveBle { _statusStream.listen((status) => _status = status); } - final Stream _scanStream = const EventChannel("flutter_reactive_ble_scan") - .receiveBroadcastStream() - .cast>() - .map((data) => pb.DeviceScanInfo.fromBuffer(data)) - .map(const ProtobufConverter().scanResultFrom); + final Stream _scanStream = + const EventChannel("flutter_reactive_ble_scan") + .receiveBroadcastStream() + .cast>() + .map((data) => pb.DeviceScanInfo.fromBuffer(data)) + .map(const ProtobufConverter().scanResultFrom); final Stream connectedDeviceStream = const EventChannel("flutter_reactive_ble_connected_device") @@ -69,12 +71,13 @@ class FlutterReactiveBle { .map(const ProtobufConverter().connectionStateUpdateFrom) ..listen((_) {}); - final Stream characteristicValueStream = const EventChannel("flutter_reactive_ble_char_update") - .receiveBroadcastStream() - .cast>() - .map((data) => pb.CharacteristicValueInfo.fromBuffer(data)) - .map(const ProtobufConverter().characteristicValueFrom) - ..listen((_) {}); + final Stream characteristicValueStream = + const EventChannel("flutter_reactive_ble_char_update") + .receiveBroadcastStream() + .cast>() + .map((data) => pb.CharacteristicValueInfo.fromBuffer(data)) + .map(const ProtobufConverter().characteristicValueFrom) + ..listen((_) {}); final SerialDisposable> _scanStreamDisposable = SerialDisposable((repeater) => repeater.dispose()); @@ -106,7 +109,8 @@ class FlutterReactiveBle { /// before the actual read response arrives (due to the design of iOS BLE API). /// /// The returned future completes with an error in case of a failure during reading. - Future> readCharacteristic(QualifiedCharacteristic characteristic) async { + Future> readCharacteristic( + QualifiedCharacteristic characteristic) async { await initialize(); final specificCharacteristicValueStream = characteristicValueStream @@ -117,13 +121,15 @@ class FlutterReactiveBle { ..characteristic = (pb.CharacteristicAddress() ..deviceId = characteristic.deviceId ..serviceUuid = (pb.Uuid()..data = characteristic.serviceId.data) - ..characteristicUuid = (pb.Uuid()..data = characteristic.characteristicId.data)); + ..characteristicUuid = + (pb.Uuid()..data = characteristic.characteristicId.data)); return _methodChannel .invokeMethod("readCharacteristic", args.writeToBuffer()) .asStream() .asyncExpand((Object _) => specificCharacteristicValueStream) - .firstWhere((_) => true, orElse: () => throw _NoBleCharacteristicDataReceived()); + .firstWhere((_) => true, + orElse: () => throw _NoBleCharacteristicDataReceived()); } /// Writes a value to the specified characteristic awaiting for an acknowledgement. @@ -139,11 +145,13 @@ class FlutterReactiveBle { ..characteristic = (pb.CharacteristicAddress() ..deviceId = characteristic.deviceId ..serviceUuid = (pb.Uuid()..data = characteristic.serviceId.data) - ..characteristicUuid = (pb.Uuid()..data = characteristic.characteristicId.data)) + ..characteristicUuid = + (pb.Uuid()..data = characteristic.characteristicId.data)) ..value = value; return _methodChannel - .invokeMethod>("writeCharacteristicWithResponse", args.writeToBuffer()) + .invokeMethod>( + "writeCharacteristicWithResponse", args.writeToBuffer()) .then((data) => pb.WriteCharacteristicInfo.fromBuffer(data)) .then(const ProtobufConverter().writeCharacteristicInfoFrom) .then((info) => info.result.dematerialize()); @@ -162,11 +170,13 @@ class FlutterReactiveBle { ..characteristic = (pb.CharacteristicAddress() ..deviceId = characteristic.deviceId ..serviceUuid = (pb.Uuid()..data = characteristic.serviceId.data) - ..characteristicUuid = (pb.Uuid()..data = characteristic.characteristicId.data)) + ..characteristicUuid = + (pb.Uuid()..data = characteristic.characteristicId.data)) ..value = value; return _methodChannel - .invokeMethod>("writeCharacteristicWithoutResponse", args.writeToBuffer()) + .invokeMethod>( + "writeCharacteristicWithoutResponse", args.writeToBuffer()) .then((data) => pb.WriteCharacteristicInfo.fromBuffer(data)) .then(const ProtobufConverter().writeCharacteristicInfoFrom) .then((info) => info.result.dematerialize()); @@ -193,7 +203,9 @@ class FlutterReactiveBle { .then((message) => message.mtuSize); } - Future requestConnectionPriority({@required String deviceId, @required ConnectionPriority priority}) async { + Future requestConnectionPriority( + {@required String deviceId, + @required ConnectionPriority priority}) async { await initialize(); final args = pb.ChangeConnectionPriorityRequest() @@ -201,7 +213,8 @@ class FlutterReactiveBle { ..priority = convertPriorityToInt(priority); return _methodChannel - .invokeMethod>("requestConnectionPriority", args.writeToBuffer()) + .invokeMethod>( + "requestConnectionPriority", args.writeToBuffer()) .then((data) => pb.ChangeConnectionPriorityInfo.fromBuffer(data)) .then(const ProtobufConverter().connectionPriorityInfoFrom) .then((message) => message.result.dematerialize()); @@ -210,12 +223,15 @@ class FlutterReactiveBle { /// Scan for devices that are advertising a specific service /// [scanMode] is used only on Android to enforce a more battery or latency intensive scan strategy /// - Stream scanForDevices({@required Uuid withService, ScanMode scanMode = ScanMode.balanced}) { + Stream scanForDevices( + {@required Uuid withService, ScanMode scanMode = ScanMode.balanced}) { final completer = Completer(); - _currentScan = ScanSession(withService: withService, future: completer.future); + _currentScan = + ScanSession(withService: withService, future: completer.future); final scanRepeater = Repeater( - onListenEmitFrom: () => _scanStream.map((scan) => scan.result.dematerialize()).handleError( + onListenEmitFrom: () => + _scanStream.map((scan) => scan.result.dematerialize()).handleError( (Object e, StackTrace s) { if (!completer.isCompleted) { completer.completeError(e, s); @@ -243,7 +259,8 @@ class FlutterReactiveBle { return initialize() .then((_) { - _methodChannel.invokeMethod("scanForDevices", args.writeToBuffer()); + _methodChannel.invokeMethod( + "scanForDevices", args.writeToBuffer()); }) .asStream() .asyncExpand((Object _) => scanRepeater.stream) @@ -260,7 +277,10 @@ class FlutterReactiveBle { }) { final specificConnectedDeviceStream = connectedDeviceStream .where((update) => update.deviceId == id) - .expand((update) => update.connectionState != DeviceConnectionState.disconnected ? [update] : [update, null]) + .expand((update) => + update.connectionState != DeviceConnectionState.disconnected + ? [update] + : [update, null]) .takeWhile((update) => update != null); final autoconnectingRepeater = Repeater.broadcast( @@ -274,14 +294,17 @@ class FlutterReactiveBle { if (servicesWithCharacteristicsToDiscover != null) { final items = []; for (final serviceId in servicesWithCharacteristicsToDiscover.keys) { - final characteristicIds = servicesWithCharacteristicsToDiscover[serviceId]; + final characteristicIds = + servicesWithCharacteristicsToDiscover[serviceId]; items.add( pb.ServiceWithCharacteristics() ..serviceId = (pb.Uuid()..data = serviceId.data) - ..characteristics.addAll(characteristicIds.map((c) => pb.Uuid()..data = c.data)), + ..characteristics.addAll( + characteristicIds.map((c) => pb.Uuid()..data = c.data)), ); } - args.servicesWithCharacteristicsToDiscover = pb.ServicesWithCharacteristics()..items.addAll(items); + args.servicesWithCharacteristicsToDiscover = + pb.ServicesWithCharacteristics()..items.addAll(items); } return _methodChannel .invokeMethod("connectToDevice", args.writeToBuffer()) @@ -290,11 +313,14 @@ class FlutterReactiveBle { }, onCancel: () { final args = pb.DisconnectFromDeviceRequest()..deviceId = id; - return _methodChannel.invokeMethod("disconnectFromDevice", args.writeToBuffer()); + return _methodChannel.invokeMethod( + "disconnectFromDevice", args.writeToBuffer()); }, ); - return initialize().asStream().asyncExpand((_) => autoconnectingRepeater.stream); + return initialize() + .asStream() + .asyncExpand((_) => autoconnectingRepeater.stream); } Stream connectToAdvertisingDevice({ @@ -308,7 +334,8 @@ class FlutterReactiveBle { id: id, withService: withService, prescanDuration: prescanDuration, - servicesWithCharacteristicsToDiscover: servicesWithCharacteristicsToDiscover, + servicesWithCharacteristicsToDiscover: + servicesWithCharacteristicsToDiscover, connectionTimeout: connectionTimeout, ); @@ -330,7 +357,8 @@ class FlutterReactiveBle { /// /// The current implementation unsubscribes from notifications when the returned stream is not listened to, /// which affects other notification streams created for the same characteristic. - Stream> subscribeToCharacteristic(QualifiedCharacteristic characteristic) { + Stream> subscribeToCharacteristic( + QualifiedCharacteristic characteristic) { final specificCharacteristicValueStream = characteristicValueStream .where((update) => update.characteristic == characteristic) .map((update) => update.result.dematerialize()); @@ -341,7 +369,8 @@ class FlutterReactiveBle { ..characteristic = (pb.CharacteristicAddress() ..deviceId = characteristic.deviceId ..serviceUuid = (pb.Uuid()..data = characteristic.serviceId.data) - ..characteristicUuid = (pb.Uuid()..data = characteristic.characteristicId.data)); + ..characteristicUuid = + (pb.Uuid()..data = characteristic.characteristicId.data)); return _methodChannel .invokeMethod("readNotifications", args.writeToBuffer()) @@ -353,10 +382,12 @@ class FlutterReactiveBle { ..characteristic = (pb.CharacteristicAddress() ..deviceId = characteristic.deviceId ..serviceUuid = (pb.Uuid()..data = characteristic.serviceId.data) - ..characteristicUuid = (pb.Uuid()..data = characteristic.characteristicId.data)); + ..characteristicUuid = + (pb.Uuid()..data = characteristic.characteristicId.data)); return _methodChannel .invokeMethod("stopNotifications", args.writeToBuffer()) - .catchError((Object e) => print("Error unsubscribing from notifications: $e")); + .catchError((Object e) => + print("Error unsubscribing from notifications: $e")); }, ); @@ -365,10 +396,13 @@ class FlutterReactiveBle { update.deviceId == characteristic.deviceId && (update.connectionState == DeviceConnectionState.disconnecting || update.connectionState == DeviceConnectionState.disconnected)) - .firstWhere((_) => true, orElse: () => throw _NoBleDeviceConnectionStateReceived()) + .firstWhere((_) => true, + orElse: () => throw _NoBleDeviceConnectionStateReceived()) .then((_) => autosubscribingRepeater.dispose()); - return initialize().asStream().asyncExpand((_) => autosubscribingRepeater.stream); + return initialize() + .asStream() + .asyncExpand((_) => autosubscribingRepeater.stream); } } diff --git a/lib/src/rx_ext/serial_disposable.dart b/lib/src/rx_ext/serial_disposable.dart index abeef29a..3837438b 100644 --- a/lib/src/rx_ext/serial_disposable.dart +++ b/lib/src/rx_ext/serial_disposable.dart @@ -35,6 +35,8 @@ class _SerialAlreadyDisposed extends Error { String toString() => "An instance of $_type has already been disposed"; } -class StreamSubscriptionSerialDisposable extends SerialDisposable { - StreamSubscriptionSerialDisposable() : super((StreamSubscription subscription) => subscription.cancel()); +class StreamSubscriptionSerialDisposable + extends SerialDisposable { + StreamSubscriptionSerialDisposable() + : super((StreamSubscription subscription) => subscription.cancel()); } diff --git a/lib/src/select_from.dart b/lib/src/select_from.dart index 6ed88d7a..fa19c6c0 100644 --- a/lib/src/select_from.dart +++ b/lib/src/select_from.dart @@ -1,6 +1,7 @@ import 'package:meta/meta.dart'; -T selectFrom(List values, {@required int index, @required T Function(int index) fallback}) { +T selectFrom(List values, + {@required int index, @required T Function(int index) fallback}) { assert(values != null); assert(fallback != null); diff --git a/test/discovered_devices_registry_test.dart b/test/discovered_devices_registry_test.dart index 2c3bf346..f858a1a9 100644 --- a/test/discovered_devices_registry_test.dart +++ b/test/discovered_devices_registry_test.dart @@ -18,15 +18,23 @@ void main() { setUp(() { timestampMock = DateTimeMock(); when(timestampMock.getTimestamp()).thenReturn(timestamp); - sut = DiscoveredDevicesRegistry.withGetTimestamp(timestampMock.getTimestamp)..add(device); + sut = + DiscoveredDevicesRegistry.withGetTimestamp(timestampMock.getTimestamp) + ..add(device); }); test("Device is in cache", () { - expect(sut.deviceIsDiscoveredRecently(deviceId: device, cacheValidity: const Duration(minutes: 10)), true); + expect( + sut.deviceIsDiscoveredRecently( + deviceId: device, cacheValidity: const Duration(minutes: 10)), + true); }); test("Device is not in cache", () { - expect(sut.deviceIsDiscoveredRecently(deviceId: "NotInCacheDevice", cacheValidity: const Duration(seconds: 10)), + expect( + sut.deviceIsDiscoveredRecently( + deviceId: "NotInCacheDevice", + cacheValidity: const Duration(seconds: 10)), false); }); @@ -40,10 +48,16 @@ void main() { final dateTime = DateTime(2018, 1, 1); final responses = [dateTime, timestamp]; - when(timestampMock.getTimestamp()).thenAnswer((_) => responses.removeAt(0)); - sut = DiscoveredDevicesRegistry.withGetTimestamp(timestampMock.getTimestamp)..add(device); - - expect(sut.deviceIsDiscoveredRecently(deviceId: device, cacheValidity: const Duration(days: 1)), false); + when(timestampMock.getTimestamp()) + .thenAnswer((_) => responses.removeAt(0)); + sut = + DiscoveredDevicesRegistry.withGetTimestamp(timestampMock.getTimestamp) + ..add(device); + + expect( + sut.deviceIsDiscoveredRecently( + deviceId: device, cacheValidity: const Duration(days: 1)), + false); }); }); } diff --git a/test/prescan_connector_test.dart b/test/prescan_connector_test.dart index 67cf223a..e07a6b11 100644 --- a/test/prescan_connector_test.dart +++ b/test/prescan_connector_test.dart @@ -14,7 +14,9 @@ class MockRegistry extends Mock implements DiscoveredDevicesRegistry {} abstract class _PrescanConnectorStub { Stream connect( - {String id, Map> servicesWithCharacteristicsToDiscover, Duration connectionTimeout}); + {String id, + Map> servicesWithCharacteristicsToDiscover, + Duration connectionTimeout}); Stream scan({Uuid withService, ScanMode scanMode}); @@ -54,7 +56,8 @@ void main() { group("And device is in cache when I connect", () { setUp(() { when(_registry.deviceIsDiscoveredRecently( - deviceId: anyNamed("deviceId"), cacheValidity: anyNamed("cacheValidity"))) + deviceId: anyNamed("deviceId"), + cacheValidity: anyNamed("cacheValidity"))) .thenReturn(true); _sut.connectToAdvertisingDevice( @@ -68,20 +71,24 @@ void main() { test("Then connect device directly", () { verify(_prescanMock.connect( id: anyNamed("id"), - servicesWithCharacteristicsToDiscover: anyNamed("servicesWithCharacteristicsToDiscover"), + servicesWithCharacteristicsToDiscover: + anyNamed("servicesWithCharacteristicsToDiscover"), connectionTimeout: anyNamed("connectionTimeout"))) .called(1); }); test("And does not scan for the device", () { - verifyNever(_prescanMock.scan(withService: anyNamed("withService"), scanMode: anyNamed("scanMode"))); + verifyNever(_prescanMock.scan( + withService: anyNamed("withService"), + scanMode: anyNamed("scanMode"))); }); }); group("And device is not in cache", () { setUp(() { when(_registry.deviceIsDiscoveredRecently( - deviceId: anyNamed("deviceId"), cacheValidity: anyNamed("cacheValidity"))) + deviceId: anyNamed("deviceId"), + cacheValidity: anyNamed("cacheValidity"))) .thenReturn(false); }); @@ -94,11 +101,17 @@ void main() { completer = Completer(); session = ScanSession(withService: _uuid, future: completer.future); - when(_prescanMock.currentScan()).thenAnswer((_) => currentScanResponses.removeAt(0)); + when(_prescanMock.currentScan()) + .thenAnswer((_) => currentScanResponses.removeAt(0)); completer.complete(); - when(_prescanMock.scan(withService: anyNamed("withService"), scanMode: anyNamed("scanMode"))).thenAnswer( - (_) => Stream.fromIterable([const DiscoveredDevice(id: _device, name: _device, serviceData: {})])); + when(_prescanMock.scan( + withService: anyNamed("withService"), + scanMode: anyNamed("scanMode"))) + .thenAnswer((_) => Stream.fromIterable([ + const DiscoveredDevice( + id: _device, name: _device, serviceData: {}) + ])); }); test("It scans for the device", () { @@ -111,7 +124,10 @@ void main() { servicesWithCharacteristicsToDiscover: {}, connectionTimeout: _duration); - verify(_prescanMock.scan(withService: anyNamed("withService"), scanMode: anyNamed("scanMode"))).called(1); + verify(_prescanMock.scan( + withService: anyNamed("withService"), + scanMode: anyNamed("scanMode"))) + .called(1); }); test("Connects when device is in registry", () async { @@ -119,46 +135,61 @@ void main() { final connectResponses = [false, true]; when(_registry.deviceIsDiscoveredRecently( - deviceId: anyNamed("deviceId"), cacheValidity: anyNamed("cacheValidity"))) + deviceId: anyNamed("deviceId"), + cacheValidity: anyNamed("cacheValidity"))) .thenAnswer((_) => connectResponses.removeAt(0)); when(_prescanMock.connect( id: anyNamed("id"), - servicesWithCharacteristicsToDiscover: anyNamed("servicesWithCharacteristicsToDiscover"), + servicesWithCharacteristicsToDiscover: + anyNamed("servicesWithCharacteristicsToDiscover"), connectionTimeout: anyNamed("connectionTimeout"))) .thenAnswer((_) => Stream.fromIterable([ const ConnectionStateUpdate( - deviceId: "", connectionState: DeviceConnectionState.connected, failure: null) + deviceId: "", + connectionState: DeviceConnectionState.connected, + failure: null) ])); - await _sut.prescanAndConnect(_device, {}, _duration, _uuid, _duration).first; + await _sut + .prescanAndConnect(_device, {}, _duration, _uuid, _duration) + .first; verify(_prescanMock.connect( id: anyNamed("id"), - servicesWithCharacteristicsToDiscover: anyNamed("servicesWithCharacteristicsToDiscover"), + servicesWithCharacteristicsToDiscover: + anyNamed("servicesWithCharacteristicsToDiscover"), connectionTimeout: _duration)) .called(1); }); - test("Does not connect when device is not found after scanning", () async { + test("Does not connect when device is not found after scanning", + () async { when(_registry.deviceIsDiscoveredRecently( - deviceId: anyNamed("deviceId"), cacheValidity: anyNamed("cacheValidity"))) + deviceId: anyNamed("deviceId"), + cacheValidity: anyNamed("cacheValidity"))) .thenReturn(false); when(_prescanMock.connect( id: anyNamed("id"), - servicesWithCharacteristicsToDiscover: anyNamed("servicesWithCharacteristicsToDiscover"), + servicesWithCharacteristicsToDiscover: + anyNamed("servicesWithCharacteristicsToDiscover"), connectionTimeout: anyNamed("connectionTimeout"))) .thenAnswer((_) => Stream.fromIterable([ const ConnectionStateUpdate( - deviceId: "", connectionState: DeviceConnectionState.connected, failure: null) + deviceId: "", + connectionState: DeviceConnectionState.connected, + failure: null) ])); - await _sut.prescanAndConnect(_device, {}, _duration, _uuid, _duration).first; + await _sut + .prescanAndConnect(_device, {}, _duration, _uuid, _duration) + .first; verifyNever(_prescanMock.connect( id: anyNamed("id"), - servicesWithCharacteristicsToDiscover: anyNamed("servicesWithCharacteristicsToDiscover"), + servicesWithCharacteristicsToDiscover: + anyNamed("servicesWithCharacteristicsToDiscover"), connectionTimeout: _duration)); }); }); @@ -168,30 +199,43 @@ void main() { setUp(() { completer = Completer(); - final session = ScanSession(withService: _uuid, future: completer.future); + final session = + ScanSession(withService: _uuid, future: completer.future); final response = [session, session]; - when(_prescanMock.currentScan()).thenAnswer((_) => response.removeAt(0)); + when(_prescanMock.currentScan()) + .thenAnswer((_) => response.removeAt(0)); - when(_prescanMock.scan(withService: anyNamed("withService"), scanMode: anyNamed("scanMode"))).thenAnswer( - (_) => Stream.fromIterable([const DiscoveredDevice(id: _device, name: _device, serviceData: {})])); + when(_prescanMock.scan( + withService: anyNamed("withService"), + scanMode: anyNamed("scanMode"))) + .thenAnswer((_) => Stream.fromIterable([ + const DiscoveredDevice( + id: _device, name: _device, serviceData: {}) + ])); }); test("Will attempt to connect after delay", () async { when(_prescanMock.connect( id: anyNamed("id"), - servicesWithCharacteristicsToDiscover: anyNamed("servicesWithCharacteristicsToDiscover"), + servicesWithCharacteristicsToDiscover: + anyNamed("servicesWithCharacteristicsToDiscover"), connectionTimeout: anyNamed("connectionTimeout"))) .thenAnswer((_) => Stream.fromIterable([ const ConnectionStateUpdate( - deviceId: "", connectionState: DeviceConnectionState.connected, failure: null) + deviceId: "", + connectionState: DeviceConnectionState.connected, + failure: null) ])); completer.completeError(null); - await _sut.prescanAndConnect(_device, {}, _duration, _uuid, _duration).first; + await _sut + .prescanAndConnect(_device, {}, _duration, _uuid, _duration) + .first; verify(_registry.deviceIsDiscoveredRecently( - deviceId: anyNamed("deviceId"), cacheValidity: anyNamed("cacheValidity"))) + deviceId: anyNamed("deviceId"), + cacheValidity: anyNamed("cacheValidity"))) .called(2); }); }); @@ -199,11 +243,16 @@ void main() { }); group("And there is already a scan running", () { - test("Fails to connect when there is already a scan running for another service", () async { - when(_prescanMock.currentScan()) - .thenReturn(ScanSession(withService: Uuid.parse("432A"), future: Future.value())); + test( + "Fails to connect when there is already a scan running for another service", + () async { + when(_prescanMock.currentScan()).thenReturn(ScanSession( + withService: Uuid.parse("432A"), future: Future.value())); - final update = await _sut.awaitCurrentScanAndConnect(_uuid, _duration, _device, {}, _duration).first; + final update = await _sut + .awaitCurrentScanAndConnect( + _uuid, _duration, _device, {}, _duration) + .first; expect(update.failure.code, ConnectionError.failedToConnect); }); @@ -211,16 +260,22 @@ void main() { test("Checks registry after completion of scan", () async { final completer = Completer(); - when(_prescanMock.currentScan()).thenReturn(ScanSession(withService: _uuid, future: completer.future)); + when(_prescanMock.currentScan()).thenReturn( + ScanSession(withService: _uuid, future: completer.future)); when(_registry.deviceIsDiscoveredRecently( - deviceId: anyNamed("deviceId"), cacheValidity: anyNamed("cacheValidity"))) + deviceId: anyNamed("deviceId"), + cacheValidity: anyNamed("cacheValidity"))) .thenReturn(false); completer.complete(); - await _sut.awaitCurrentScanAndConnect(_uuid, _duration, _device, {}, _duration).first; + await _sut + .awaitCurrentScanAndConnect( + _uuid, _duration, _device, {}, _duration) + .first; - verify(_registry.deviceIsDiscoveredRecently(deviceId: _device, cacheValidity: anyNamed("cacheValidity"))) + verify(_registry.deviceIsDiscoveredRecently( + deviceId: _device, cacheValidity: anyNamed("cacheValidity"))) .called(1); }); }); diff --git a/test/protobuf_converter_test.dart b/test/protobuf_converter_test.dart index 633e0cad..669d3927 100644 --- a/test/protobuf_converter_test.dart +++ b/test/protobuf_converter_test.dart @@ -25,24 +25,32 @@ void main() { test('converts id', () { final scanresult = sut.scanResultFrom(message).result; - expect(scanresult.iif(success: (d) => d.id, failure: (_) => throw Exception()), id); + expect( + scanresult.iif( + success: (d) => d.id, failure: (_) => throw Exception()), + id); }); test('converts name', () { final scanresult = sut.scanResultFrom(message).result; - expect(scanresult.iif(success: (d) => d.name, failure: (_) => throw Exception()), name); + expect( + scanresult.iif( + success: (d) => d.name, failure: (_) => throw Exception()), + name); }); test('converts service data', () { final scanresult = sut.scanResultFrom(message).result; expect( scanresult.iif( - success: (d) => d.serviceData[Uuid(serviceDataEntry1.serviceUuid.data)], + success: (d) => + d.serviceData[Uuid(serviceDataEntry1.serviceUuid.data)], failure: (_) => throw Exception()), serviceDataEntry1.data); expect( scanresult.iif( - success: (d) => d.serviceData[Uuid(serviceDataEntry2.serviceUuid.data)], + success: (d) => + d.serviceData[Uuid(serviceDataEntry2.serviceUuid.data)], failure: (_) => throw Exception()), serviceDataEntry2.data); }); @@ -56,7 +64,9 @@ void main() { final scanresult = sut.scanResultFrom(failedScan).result; expect( scanresult.iif( - success: (d) => d.serviceData[Uuid(serviceDataEntry1.serviceUuid.data)], failure: (_) => "Failed"), + success: (d) => + d.serviceData[Uuid(serviceDataEntry1.serviceUuid.data)], + failure: (_) => "Failed"), "Failed"); }); }); @@ -156,7 +166,8 @@ void main() { final result = sut.resultFrom(getValue: getter.call, failure: failure); verifyNever(getter.call()); - expect(result.iif(success: (_) => throw Exception(), failure: id), failure); + expect(result.iif(success: (_) => throw Exception(), failure: id), + failure); }); test("converts a value", () { @@ -168,20 +179,23 @@ void main() { final result = sut.resultFrom(getValue: getter.call, failure: failure); verify(getter.call()).called(1); - expect(result.iif(success: id, failure: (_) => throw Exception()), value); + expect( + result.iif(success: id, failure: (_) => throw Exception()), value); }); }); }); } -class _GenericFailureCodeFallbackMock extends Mock implements _GenericFailureCodeFallback {} +class _GenericFailureCodeFallbackMock extends Mock + implements _GenericFailureCodeFallback {} // ignore: one_member_abstracts abstract class _GenericFailureCodeFallback { String call(int rawOrNull); } -class _ResultValueGetterMock extends Mock implements _ResultValueGetter {} +class _ResultValueGetterMock extends Mock + implements _ResultValueGetter {} // ignore: one_member_abstracts abstract class _ResultValueGetter { diff --git a/test/repeater_test.dart b/test/repeater_test.dart index 28b819d6..e23b9f1f 100644 --- a/test/repeater_test.dart +++ b/test/repeater_test.dart @@ -19,14 +19,16 @@ void main() { isSync: true, ); - when(handler.onListenEmitFrom()).thenAnswer((_) => underlyingStreamController.stream); + when(handler.onListenEmitFrom()) + .thenAnswer((_) => underlyingStreamController.stream); }); tearDown(() { underlyingStreamController.close(); }); - test("does not subscribe to the underlying stream in absence of listeners", () { + test("does not subscribe to the underlying stream in absence of listeners", + () { verifyNever(handler.onListenEmitFrom()); }); @@ -46,7 +48,9 @@ void main() { expect(underlyingStreamController.hasListener, true); }); - test("unsubscribes from the underlying stream when there are no listeners left", () async { + test( + "unsubscribes from the underlying stream when there are no listeners left", + () async { await sut.stream.listen((_) {}).cancel(); verify(handler.onCancel()).called(1); diff --git a/test/result_test.dart b/test/result_test.dart index 76b7af3c..42157ecb 100644 --- a/test/result_test.dart +++ b/test/result_test.dart @@ -53,7 +53,8 @@ void main() { }); } -class _ResultHandlerMock extends Mock implements _ResultHandler {} +class _ResultHandlerMock extends Mock + implements _ResultHandler {} abstract class _ResultHandler { T success(Value value); diff --git a/test/select_from_test.dart b/test/select_from_test.dart index 79033c66..c5ae6c15 100644 --- a/test/select_from_test.dart +++ b/test/select_from_test.dart @@ -3,7 +3,8 @@ import 'package:flutter_test/flutter_test.dart'; void main() { group("selectFrom", () { - _Enum sut(int raw) => selectFrom(_Enum.values, index: raw, fallback: (raw) => _Enum.unknown); + _Enum sut(int raw) => + selectFrom(_Enum.values, index: raw, fallback: (raw) => _Enum.unknown); test("selects a value by index", () { expect(sut(1), _Enum.a); From efc02aaa2a28b0009c8f9a09753e816904218c05 Mon Sep 17 00:00:00 2001 From: Remon Date: Sat, 11 Jan 2020 16:00:03 +0100 Subject: [PATCH 3/5] add ignore for lint violations in generated code --- lib/src/model/discovered_device.dart | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/src/model/discovered_device.dart b/lib/src/model/discovered_device.dart index d8ffef8e..adc5aca8 100644 --- a/lib/src/model/discovered_device.dart +++ b/lib/src/model/discovered_device.dart @@ -8,7 +8,7 @@ import 'package:meta/meta.dart'; part 'discovered_device.g.dart'; -// ignore_for_file: annotate_overrides +// ignore_for_file: annotate_overrides, avoid_classes_with_only_static_members, non_constant_identifier_names @immutable class ScanResult { @@ -27,8 +27,7 @@ class DiscoveredDevice extends $DiscoveredDevice { @CustomEquality(DeepCollectionEquality()) final Map serviceData; - const DiscoveredDevice( - {@required this.id, @required this.name, @required this.serviceData}); + const DiscoveredDevice({@required this.id, @required this.name, @required this.serviceData}); } enum ConnectionStatus { disconnected, connecting, connected, disconnecting } From 8f1c830b2687eb4631bf9ae74c07ab8f8813bbc2 Mon Sep 17 00:00:00 2001 From: Remon Date: Sat, 11 Jan 2020 16:32:47 +0100 Subject: [PATCH 4/5] fix undeliverable exception due to issues in android threading It is very likely that the exception is delivered already --- .../flutterreactiveble/PluginController.kt | 16 +++++++++ .../flutterreactiveble/ble/DeviceConnector.kt | 36 +++++++++---------- 2 files changed, 34 insertions(+), 18 deletions(-) diff --git a/android/src/main/kotlin/com/signify/hue/flutterreactiveble/PluginController.kt b/android/src/main/kotlin/com/signify/hue/flutterreactiveble/PluginController.kt index 32441c06..a721b106 100644 --- a/android/src/main/kotlin/com/signify/hue/flutterreactiveble/PluginController.kt +++ b/android/src/main/kotlin/com/signify/hue/flutterreactiveble/PluginController.kt @@ -1,5 +1,6 @@ package com.signify.hue.flutterreactiveble +import com.polidea.rxandroidble2.exceptions.BleException import com.signify.hue.flutterreactiveble.ble.RequestConnectionPriorityFailed import com.signify.hue.flutterreactiveble.channelhandlers.BleStatusHandler import com.signify.hue.flutterreactiveble.channelhandlers.CharNotificationHandler @@ -16,6 +17,8 @@ import io.flutter.plugin.common.MethodChannel.Result import io.flutter.plugin.common.PluginRegistry import io.reactivex.Single import io.reactivex.android.schedulers.AndroidSchedulers +import io.reactivex.exceptions.UndeliverableException +import io.reactivex.plugins.RxJavaPlugins import timber.log.Timber import java.util.UUID import com.signify.hue.flutterreactiveble.ProtobufModel as pb @@ -68,6 +71,19 @@ class PluginController { deviceConnectionChannel.setStreamHandler(deviceConnectionHandler) charNotificationChannel.setStreamHandler(charNotificationHandler) bleStatusChannel.setStreamHandler(bleStatusHandler) + + /*Workaround for issue undeliverable https://github.com/Polidea/RxAndroidBle/wiki/FAQ:-UndeliverableException + note that this not override the onError for the observable only the RXJAVA error handler like described in: + https://github.com/ReactiveX/RxJava/wiki/What's-different-in-2.0#error-handling + */ + RxJavaPlugins.setErrorHandler { throwable -> + if (throwable is UndeliverableException && throwable.cause is BleException) { + return@setErrorHandler // ignore BleExceptions as they were surely delivered at least once + } + // add other custom handlers if needed + @Suppress("TooGenericExceptionThrown") + throw RuntimeException("Unexpected Throwable in RxJavaPlugins error handler", throwable) + } } internal fun execute(call: MethodCall, result: Result) { diff --git a/android/src/main/kotlin/com/signify/hue/flutterreactiveble/ble/DeviceConnector.kt b/android/src/main/kotlin/com/signify/hue/flutterreactiveble/ble/DeviceConnector.kt index 1632fafb..759aa474 100644 --- a/android/src/main/kotlin/com/signify/hue/flutterreactiveble/ble/DeviceConnector.kt +++ b/android/src/main/kotlin/com/signify/hue/flutterreactiveble/ble/DeviceConnector.kt @@ -19,8 +19,8 @@ import java.util.concurrent.TimeUnit internal class DeviceConnector( private val device: RxBleDevice, private val connectionTimeout: Duration, - private val updateListeners: (update: com.signify.hue.flutterreactiveble.ble.ConnectionUpdate) -> Unit, - private val connectionQueue: com.signify.hue.flutterreactiveble.ble.ConnectionQueue + private val updateListeners: (update: ConnectionUpdate) -> Unit, + private val connectionQueue: ConnectionQueue ) { companion object { @@ -28,7 +28,7 @@ internal class DeviceConnector( private const val delayMsAfterClearingCache = 300L } - private val connectDeviceSubject = BehaviorSubject.create() + private val connectDeviceSubject = BehaviorSubject.create() private var timestampEstablishConnection: Long = 0 @@ -40,7 +40,7 @@ internal class DeviceConnector( connectDeviceSubject } - private val currentConnection: com.signify.hue.flutterreactiveble.ble.EstablishConnectionResult? + private val currentConnection: EstablishConnectionResult? get() = if (lazyConnection.isInitialized()) connection.value else null internal val connection by lazyConnection @@ -48,9 +48,9 @@ internal class DeviceConnector( private val connectionStatusUpdates by lazy { device.observeConnectionStateChanges() .startWith(device.connectionState) - .map { com.signify.hue.flutterreactiveble.ble.ConnectionUpdateSuccess(device.macAddress, it.toConnectionState().code) } + .map { ConnectionUpdateSuccess(device.macAddress, it.toConnectionState().code) } .onErrorReturn { - com.signify.hue.flutterreactiveble.ble.ConnectionUpdateError(device.macAddress, it.message + ConnectionUpdateError(device.macAddress, it.message ?: "Unknown error") } .subscribe( @@ -70,8 +70,8 @@ internal class DeviceConnector( in order to prevent Android from ignoring disconnects we add a delay when we try to disconnect to quickly after establishing connection. https://issuetracker.google.com/issues/37121223 */ - if (diff < com.signify.hue.flutterreactiveble.ble.DeviceConnector.Companion.minTimeMsBeforeDisconnectingIsAllowed) { - Single.timer(com.signify.hue.flutterreactiveble.ble.DeviceConnector.Companion.minTimeMsBeforeDisconnectingIsAllowed - diff, TimeUnit.MILLISECONDS) + if (diff < DeviceConnector.Companion.minTimeMsBeforeDisconnectingIsAllowed) { + Single.timer(DeviceConnector.Companion.minTimeMsBeforeDisconnectingIsAllowed - diff, TimeUnit.MILLISECONDS) .doFinally { disposeSubscriptions() }.subscribe() @@ -92,20 +92,20 @@ internal class DeviceConnector( val shouldNotTimeout = connectionTimeout.value <= 0L connectionQueue.addToQueue(deviceId) - updateListeners(com.signify.hue.flutterreactiveble.ble.ConnectionUpdateSuccess(deviceId, ConnectionState.CONNECTING.code)) + updateListeners(ConnectionUpdateSuccess(deviceId, ConnectionState.CONNECTING.code)) return waitUntilFirstOfQueue(deviceId) .switchMap { queue -> if (!queue.contains(deviceId)) { - Observable.just(com.signify.hue.flutterreactiveble.ble.EstablishConnectionFailure(deviceId, + Observable.just(EstablishConnectionFailure(deviceId, "Device is not in queue")) } else { connectDevice(rxBleDevice, shouldNotTimeout) - .map { com.signify.hue.flutterreactiveble.ble.EstablishedConnection(rxBleDevice.macAddress, it) } + .map { EstablishedConnection(rxBleDevice.macAddress, it) } } } .onErrorReturn { error -> - com.signify.hue.flutterreactiveble.ble.EstablishConnectionFailure(rxBleDevice.macAddress, + EstablishConnectionFailure(rxBleDevice.macAddress, error.message ?: "Unknown error") } .doOnNext { @@ -115,13 +115,13 @@ internal class DeviceConnector( connectionStatusUpdates timestampEstablishConnection = System.currentTimeMillis() connectionQueue.removeFromQueue(deviceId) - if (it is com.signify.hue.flutterreactiveble.ble.EstablishConnectionFailure) { - updateListeners.invoke(com.signify.hue.flutterreactiveble.ble.ConnectionUpdateError(deviceId, it.errorMessage)) + if (it is EstablishConnectionFailure) { + updateListeners.invoke(ConnectionUpdateError(deviceId, it.errorMessage)) } } .doOnError { connectionQueue.removeFromQueue(deviceId) - updateListeners.invoke(com.signify.hue.flutterreactiveble.ble.ConnectionUpdateError(deviceId, it.message + updateListeners.invoke(ConnectionUpdateError(deviceId, it.message ?: "Unknown error")) } .doOnDispose { @@ -152,8 +152,8 @@ internal class DeviceConnector( internal fun clearGattCache(): Completable = currentConnection?.let { connection -> when (connection) { - is com.signify.hue.flutterreactiveble.ble.EstablishedConnection -> clearGattCache(connection.rxConnection) - is com.signify.hue.flutterreactiveble.ble.EstablishConnectionFailure -> Completable.error(Throwable(connection.errorMessage)) + is EstablishedConnection -> clearGattCache(connection.rxConnection) + is EstablishConnectionFailure -> Completable.error(Throwable(connection.errorMessage)) } } ?: Completable.error(IllegalStateException("Connection is not established")) @@ -174,7 +174,7 @@ internal class DeviceConnector( val success = refreshMethod.invoke(bluetoothGatt) as Boolean if (success) { Observable.empty() - .delay(com.signify.hue.flutterreactiveble.ble.DeviceConnector.Companion.delayMsAfterClearingCache, TimeUnit.MILLISECONDS) + .delay(DeviceConnector.Companion.delayMsAfterClearingCache, TimeUnit.MILLISECONDS) .doOnComplete { Timber.d("Clearing GATT cache completed") } } else { val reason = "BluetoothGatt.refresh() returned false" From 9f7472d5277af490360182b89054f47a855b5c34 Mon Sep 17 00:00:00 2001 From: Remon Date: Sat, 11 Jan 2020 16:42:18 +0100 Subject: [PATCH 5/5] bump version --- CHANGELOG.MD | 6 ++++++ pubspec.yaml | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.MD b/CHANGELOG.MD index 860f4abb..bf4a0263 100644 --- a/CHANGELOG.MD +++ b/CHANGELOG.MD @@ -1,3 +1,9 @@ +## 1.0.1 + +* Fixes #5 Undeliverable exception. + +* Small fixes for example app. + ## 1.0.0+1 * Update homepage diff --git a/pubspec.yaml b/pubspec.yaml index 1a3e469c..d0f2b2e9 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: flutter_reactive_ble description: Reactive Bluetooth low energy (BLE) plugin that can communicate with multiple devices -version: 1.0.0+1 +version: 1.0.1 homepage: https://github.com/PhilipsHue/flutter_reactive_ble environment: