diff --git a/example/ios/Podfile b/example/ios/Podfile index 1e8c3c90..313ea4a1 100644 --- a/example/ios/Podfile +++ b/example/ios/Podfile @@ -1,5 +1,5 @@ # Uncomment this line to define a global platform for your project -# platform :ios, '9.0' +platform :ios, '11.0' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock index 3ffa835d..83c96e96 100644 --- a/example/ios/Podfile.lock +++ b/example/ios/Podfile.lock @@ -25,9 +25,9 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: Flutter: 50d75fe2f02b26cc09d224853bb45737f8b3214a Protobuf: 1a37ebea1338949e9ac35a3f06e80b3f536eec8d - reactive_ble_mobile: 9ce6723d37ccf701dbffd202d487f23f5de03b4c + reactive_ble_mobile: 3831edf37e03054cb94c9d98391d4a603df7273f SwiftProtobuf: 9c85136c6ba74b0a1b84279dbf0f6db8efb714e0 -PODFILE CHECKSUM: aafe91acc616949ddb318b77800a7f51bffa2a4c +PODFILE CHECKSUM: 7368163408c647b7eb699d0d788ba6718e18fb8d COCOAPODS: 1.11.2 diff --git a/example/ios/Runner.xcodeproj/project.pbxproj b/example/ios/Runner.xcodeproj/project.pbxproj index 9c6f2694..15bfdeda 100644 --- a/example/ios/Runner.xcodeproj/project.pbxproj +++ b/example/ios/Runner.xcodeproj/project.pbxproj @@ -166,8 +166,7 @@ TargetAttributes = { 97C146ED1CF9000F007C117D = { CreatedOnToolsVersion = 7.3.1; - DevelopmentTeam = 29DK8LS8B3; - LastSwiftMigration = 0910; + LastSwiftMigration = 1310; }; }; }; @@ -362,7 +361,7 @@ MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; - SWIFT_VERSION = 4.2; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; @@ -412,7 +411,7 @@ MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 4.2; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; @@ -441,6 +440,7 @@ PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; VERSIONING_SYSTEM = "apple-generic"; }; name = Debug; @@ -467,6 +467,7 @@ PRODUCT_BUNDLE_IDENTIFIER = com.signify.huereactivebleExample; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; VERSIONING_SYSTEM = "apple-generic"; }; name = Release; diff --git a/example/pubspec.lock b/example/pubspec.lock index 67ecf0b6..6b1e3edc 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -28,7 +28,7 @@ packages: name: async url: "https://pub.dartlang.org" source: hosted - version: "2.8.2" + version: "2.8.1" boolean_selector: dependency: transitive description: @@ -42,7 +42,7 @@ packages: name: build url: "https://pub.dartlang.org" source: hosted - version: "2.1.0" + version: "2.1.1" build_config: dependency: transitive description: @@ -56,7 +56,7 @@ packages: name: build_daemon url: "https://pub.dartlang.org" source: hosted - version: "3.0.0" + version: "3.0.1" build_resolvers: dependency: transitive description: @@ -70,7 +70,7 @@ packages: name: build_runner url: "https://pub.dartlang.org" source: hosted - version: "2.1.4" + version: "2.1.5" build_runner_core: dependency: transitive description: @@ -91,14 +91,14 @@ packages: name: built_value url: "https://pub.dartlang.org" source: hosted - version: "8.1.2" + version: "8.1.3" characters: dependency: transitive description: name: characters url: "https://pub.dartlang.org" source: hosted - version: "1.2.0" + version: "1.1.0" charcode: dependency: transitive description: @@ -119,7 +119,7 @@ packages: name: cli_util url: "https://pub.dartlang.org" source: hosted - version: "0.3.3" + version: "0.3.5" clock: dependency: transitive description: @@ -161,7 +161,7 @@ packages: name: dart_style url: "https://pub.dartlang.org" source: hosted - version: "2.1.0" + version: "2.1.1" dependency_validator: dependency: "direct dev" description: @@ -208,7 +208,7 @@ packages: path: "../packages/flutter_reactive_ble" relative: true source: path - version: "5.0.1" + version: "5.0.2" flutter_test: dependency: "direct dev" description: flutter @@ -241,7 +241,7 @@ packages: name: glob url: "https://pub.dartlang.org" source: hosted - version: "2.0.1" + version: "2.0.2" graphs: dependency: transitive description: @@ -290,7 +290,7 @@ packages: name: json_annotation url: "https://pub.dartlang.org" source: hosted - version: "4.1.0" + version: "4.3.0" lints: dependency: transitive description: @@ -311,7 +311,7 @@ packages: name: matcher url: "https://pub.dartlang.org" source: hosted - version: "0.12.11" + version: "0.12.10" meta: dependency: transitive description: @@ -325,7 +325,7 @@ packages: name: mime url: "https://pub.dartlang.org" source: hosted - version: "1.0.0" + version: "1.0.1" nested: dependency: transitive description: @@ -360,7 +360,7 @@ packages: name: plugin_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "2.0.1" + version: "2.0.2" pool: dependency: transitive description: @@ -406,9 +406,9 @@ packages: reactive_ble_platform_interface: dependency: transitive description: - name: reactive_ble_platform_interface - url: "https://pub.dartlang.org" - source: hosted + path: "../packages/reactive_ble_platform_interface" + relative: true + source: path version: "5.0.2" shelf: dependency: transitive @@ -484,7 +484,7 @@ packages: name: test_api url: "https://pub.dartlang.org" source: hosted - version: "0.4.3" + version: "0.4.2" timing: dependency: transitive description: @@ -505,14 +505,14 @@ packages: name: vector_math url: "https://pub.dartlang.org" source: hosted - version: "2.1.1" + version: "2.1.0" watcher: dependency: transitive description: name: watcher url: "https://pub.dartlang.org" source: hosted - version: "1.0.0" + version: "1.0.1" web_socket_channel: dependency: transitive description: diff --git a/melos.yaml b/melos.yaml index ba9fda01..722db414 100644 --- a/melos.yaml +++ b/melos.yaml @@ -3,6 +3,7 @@ packages: - /** scripts: analyze: melos exec -- flutter analyze + generate: melos exec -c 1 -- flutter pub run build_runner build --delete-conflicting-outputs format: melos exec -- flutter format . get: melos exec -- flutter pub get unittest: diff --git a/packages/flutter_reactive_ble/lib/src/connected_device_operation.dart b/packages/flutter_reactive_ble/lib/src/connected_device_operation.dart index 546c9014..d42b508c 100644 --- a/packages/flutter_reactive_ble/lib/src/connected_device_operation.dart +++ b/packages/flutter_reactive_ble/lib/src/connected_device_operation.dart @@ -17,6 +17,11 @@ abstract class ConnectedDeviceOperation { required List value, }); + Future writeDescriptorWithoutResponse( + QualifiedDescriptor descriptor, { + required List value, + }); + Stream> subscribeToCharacteristic( QualifiedCharacteristic characteristic, Future isDisconnected, @@ -71,6 +76,13 @@ class ConnectedDeviceOperationImpl implements ConnectedDeviceOperation { .writeCharacteristicWithoutResponse(characteristic, value) .then((info) => info.result.dematerialize()); + @override + Future writeDescriptorWithoutResponse(QualifiedDescriptor descriptor, + {required List value}) => + _blePlatform + .writeDescriptorWithoutResponse(descriptor, value) + .then((info) => info.result.dematerialize()); + @override Stream> subscribeToCharacteristic( QualifiedCharacteristic characteristic, diff --git a/packages/flutter_reactive_ble/lib/src/reactive_ble.dart b/packages/flutter_reactive_ble/lib/src/reactive_ble.dart index 053a882b..f16fe6e7 100644 --- a/packages/flutter_reactive_ble/lib/src/reactive_ble.dart +++ b/packages/flutter_reactive_ble/lib/src/reactive_ble.dart @@ -191,6 +191,17 @@ class FlutterReactiveBle { ); } + Future writeDescriptor( + QualifiedDescriptor descriptor, { + required List value, + }) async { + await initialize(); + return _connectedDeviceOperator.writeDescriptorWithoutResponse( + descriptor, + value: value, + ); + } + /// Request a specific MTU for a connected device. /// /// Returns the actual MTU negotiated. diff --git a/packages/flutter_reactive_ble/pubspec.lock b/packages/flutter_reactive_ble/pubspec.lock index fcf56061..eb03b0a5 100644 --- a/packages/flutter_reactive_ble/pubspec.lock +++ b/packages/flutter_reactive_ble/pubspec.lock @@ -42,7 +42,7 @@ packages: name: build url: "https://pub.dartlang.org" source: hosted - version: "2.1.0" + version: "2.1.1" build_config: dependency: transitive description: @@ -56,7 +56,7 @@ packages: name: build_daemon url: "https://pub.dartlang.org" source: hosted - version: "3.0.0" + version: "3.0.1" build_resolvers: dependency: transitive description: @@ -70,14 +70,14 @@ packages: name: build_runner url: "https://pub.dartlang.org" source: hosted - version: "2.1.2" + version: "2.1.5" build_runner_core: dependency: transitive description: name: build_runner_core url: "https://pub.dartlang.org" source: hosted - version: "7.1.0" + version: "7.2.2" built_collection: dependency: transitive description: @@ -91,7 +91,7 @@ packages: name: built_value url: "https://pub.dartlang.org" source: hosted - version: "8.1.2" + version: "8.1.3" characters: dependency: transitive description: @@ -119,7 +119,7 @@ packages: name: cli_util url: "https://pub.dartlang.org" source: hosted - version: "0.3.3" + version: "0.3.5" clock: dependency: transitive description: @@ -161,7 +161,7 @@ packages: name: dart_style url: "https://pub.dartlang.org" source: hosted - version: "2.1.0" + version: "2.1.1" fake_async: dependency: transitive description: @@ -227,7 +227,7 @@ packages: name: glob url: "https://pub.dartlang.org" source: hosted - version: "2.0.1" + version: "2.0.2" graphs: dependency: transitive description: @@ -269,7 +269,7 @@ packages: name: json_annotation url: "https://pub.dartlang.org" source: hosted - version: "4.1.0" + version: "4.3.0" lints: dependency: transitive description: @@ -304,7 +304,7 @@ packages: name: mime url: "https://pub.dartlang.org" source: hosted - version: "1.0.0" + version: "1.0.1" mockito: dependency: "direct dev" description: @@ -339,7 +339,7 @@ packages: name: plugin_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "2.0.1" + version: "2.0.2" pool: dependency: transitive description: @@ -371,16 +371,16 @@ packages: reactive_ble_mobile: dependency: "direct main" description: - name: reactive_ble_mobile - url: "https://pub.dartlang.org" - source: hosted + path: "../reactive_ble_mobile" + relative: true + source: path version: "5.0.2" reactive_ble_platform_interface: dependency: "direct main" description: - name: reactive_ble_platform_interface - url: "https://pub.dartlang.org" - source: hosted + path: "../reactive_ble_platform_interface" + relative: true + source: path version: "5.0.2" shelf: dependency: transitive @@ -484,7 +484,7 @@ packages: name: watcher url: "https://pub.dartlang.org" source: hosted - version: "1.0.0" + version: "1.0.1" web_socket_channel: dependency: transitive description: @@ -500,5 +500,5 @@ packages: source: hosted version: "3.1.0" sdks: - dart: ">=2.12.0 <3.0.0" + dart: ">=2.14.0 <3.0.0" flutter: ">=2.0.0" diff --git a/packages/flutter_reactive_ble/test/connected_device_operation_test.mocks.dart b/packages/flutter_reactive_ble/test/connected_device_operation_test.mocks.dart index d6ad58d5..9c41dbbf 100644 --- a/packages/flutter_reactive_ble/test/connected_device_operation_test.mocks.dart +++ b/packages/flutter_reactive_ble/test/connected_device_operation_test.mocks.dart @@ -1,4 +1,4 @@ -// Mocks generated by Mockito 5.0.14 from annotations +// Mocks generated by Mockito 5.0.15 from annotations // in flutter_reactive_ble/test/connected_device_operation_test.dart. // Do not manually edit this file. diff --git a/packages/flutter_reactive_ble/test/device_connector_test.mocks.dart b/packages/flutter_reactive_ble/test/device_connector_test.mocks.dart index a4cac8b8..8ccb48d8 100644 --- a/packages/flutter_reactive_ble/test/device_connector_test.mocks.dart +++ b/packages/flutter_reactive_ble/test/device_connector_test.mocks.dart @@ -1,4 +1,4 @@ -// Mocks generated by Mockito 5.0.14 from annotations +// Mocks generated by Mockito 5.0.15 from annotations // in flutter_reactive_ble/test/device_connector_test.dart. // Do not manually edit this file. diff --git a/packages/flutter_reactive_ble/test/device_scanner_test.mocks.dart b/packages/flutter_reactive_ble/test/device_scanner_test.mocks.dart index 93270450..cb487897 100644 --- a/packages/flutter_reactive_ble/test/device_scanner_test.mocks.dart +++ b/packages/flutter_reactive_ble/test/device_scanner_test.mocks.dart @@ -1,4 +1,4 @@ -// Mocks generated by Mockito 5.0.14 from annotations +// Mocks generated by Mockito 5.0.15 from annotations // in flutter_reactive_ble/test/device_scanner_test.dart. // Do not manually edit this file. diff --git a/packages/flutter_reactive_ble/test/reactive_ble_test.mocks.dart b/packages/flutter_reactive_ble/test/reactive_ble_test.mocks.dart index dd8ad483..8c975542 100644 --- a/packages/flutter_reactive_ble/test/reactive_ble_test.mocks.dart +++ b/packages/flutter_reactive_ble/test/reactive_ble_test.mocks.dart @@ -1,4 +1,4 @@ -// Mocks generated by Mockito 5.0.14 from annotations +// Mocks generated by Mockito 5.0.15 from annotations // in flutter_reactive_ble/test/reactive_ble_test.dart. // Do not manually edit this file. @@ -223,6 +223,14 @@ class MockConnectedDeviceOperation extends _i1.Mock returnValue: Future.value(), returnValueForMissingStub: Future.value()) as _i4.Future); @override + _i4.Future writeDescriptorWithoutResponse(dynamic descriptor, + {List? value}) => + (super.noSuchMethod( + Invocation.method( + #writeDescriptorWithoutResponse, [descriptor], {#value: value}), + returnValue: Future.value(), + returnValueForMissingStub: Future.value()) as _i4.Future); + @override _i4.Stream> subscribeToCharacteristic( _i2.QualifiedCharacteristic? characteristic, _i4.Future? isDisconnected) => diff --git a/packages/reactive_ble_mobile/android/src/main/kotlin/com/signify/hue/flutterreactiveble/PluginController.kt b/packages/reactive_ble_mobile/android/src/main/kotlin/com/signify/hue/flutterreactiveble/PluginController.kt index b362c942..c4cad06c 100644 --- a/packages/reactive_ble_mobile/android/src/main/kotlin/com/signify/hue/flutterreactiveble/PluginController.kt +++ b/packages/reactive_ble_mobile/android/src/main/kotlin/com/signify/hue/flutterreactiveble/PluginController.kt @@ -32,6 +32,7 @@ class PluginController { "readCharacteristic" to this::readCharacteristic, "writeCharacteristicWithResponse" to this::writeCharacteristicWithResponse, "writeCharacteristicWithoutResponse" to this::writeCharacteristicWithoutResponse, + "writeDescriptorWithoutResponse" to this::writeDescriptorWithoutResponse, "readNotifications" to this::readNotifications, "stopNotifications" to this::stopNotifications, "negotiateMtuSize" to this::negotiateMtuSize, @@ -174,6 +175,35 @@ class PluginController { executeWriteAndPropagateResultToChannel(call, result, com.signify.hue.flutterreactiveble.ble.BleClient::writeCharacteristicWithoutResponse) } + private fun writeDescriptorWithoutResponse(call: MethodCall, result: Result) { + val writeDescriptorMessage = pb.WriteDescriptorRequest.parseFrom(call.arguments as ByteArray) + bleClient.writeDescriptorWithoutResponse( + writeDescriptorMessage.descriptor.deviceId, + uuidConverter.uuidFromByteArray(writeDescriptorMessage.descriptor.serviceUuid.data.toByteArray()), + uuidConverter.uuidFromByteArray(writeDescriptorMessage.descriptor.characteristicUuid.data.toByteArray()), + uuidConverter.uuidFromByteArray(writeDescriptorMessage.descriptor.descriptorUuid.data.toByteArray()), + writeDescriptorMessage.value.toByteArray()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe({ operationResult -> + when (operationResult) { + is com.signify.hue.flutterreactiveble.ble.CharOperationSuccessful -> { + result.success(protoConverter.convertWriteDescriptorInfo(writeDescriptorMessage, + null).toByteArray()) + } + is com.signify.hue.flutterreactiveble.ble.CharOperationFailed -> { + result.success(protoConverter.convertWriteDescriptorInfo(writeDescriptorMessage, + operationResult.errorMessage).toByteArray()) + } + } + }, + { throwable -> + result.success(protoConverter.convertWriteDescriptorInfo(writeDescriptorMessage, + throwable.message).toByteArray()) + } + ) + .discard() + } + private fun executeWriteAndPropagateResultToChannel( call: MethodCall, result: Result, diff --git a/packages/reactive_ble_mobile/android/src/main/kotlin/com/signify/hue/flutterreactiveble/ble/BleClient.kt b/packages/reactive_ble_mobile/android/src/main/kotlin/com/signify/hue/flutterreactiveble/ble/BleClient.kt index 05b7d720..aa5103e2 100644 --- a/packages/reactive_ble_mobile/android/src/main/kotlin/com/signify/hue/flutterreactiveble/ble/BleClient.kt +++ b/packages/reactive_ble_mobile/android/src/main/kotlin/com/signify/hue/flutterreactiveble/ble/BleClient.kt @@ -34,6 +34,13 @@ interface BleClient { characteristic: UUID, value: ByteArray ): Single + fun writeDescriptorWithoutResponse( + deviceId: String, + serviceId: UUID, + characteristic: UUID, + descriptor: UUID, + value: ByteArray + ): Single fun negotiateMtuSize(deviceId: String, size: Int): Single fun observeBleStatus(): Observable fun requestConnectionPriority(deviceId: String, priority: ConnectionPriority): diff --git a/packages/reactive_ble_mobile/android/src/main/kotlin/com/signify/hue/flutterreactiveble/ble/ReactiveBleClient.kt b/packages/reactive_ble_mobile/android/src/main/kotlin/com/signify/hue/flutterreactiveble/ble/ReactiveBleClient.kt index af8851ba..c803c053 100644 --- a/packages/reactive_ble_mobile/android/src/main/kotlin/com/signify/hue/flutterreactiveble/ble/ReactiveBleClient.kt +++ b/packages/reactive_ble_mobile/android/src/main/kotlin/com/signify/hue/flutterreactiveble/ble/ReactiveBleClient.kt @@ -198,6 +198,33 @@ open class ReactiveBleClient(private val context: Context) : BleClient { RxBleConnection::writeCharWithoutResponse ) + override fun writeDescriptorWithoutResponse( + deviceId: String, + serviceId: UUID, + characteristic: UUID, + descriptor: UUID, + value: ByteArray + ): Single { + return getConnection(deviceId) + .flatMapSingle { connectionResult -> + when (connectionResult) { + is EstablishedConnection -> { + connectionResult.rxConnection.writeDescriptor(serviceId, characteristic, descriptor, value) + .andThen(Single.just(CharOperationSuccessful(deviceId, value.asList()))) + } + is EstablishConnectionFailure -> { + Single.just( + CharOperationFailed( + deviceId, + "failed to connect ${connectionResult.errorMessage}" + ) + ) + } + } + }.first(CharOperationFailed(deviceId, "Writechar timed-out")) + + } + override fun setupNotification(deviceId: String, characteristic: UUID): Observable { return getConnection(deviceId) .flatMap { deviceConnection -> diff --git a/packages/reactive_ble_mobile/android/src/main/kotlin/com/signify/hue/flutterreactiveble/converters/ProtobufMessageConverter.kt b/packages/reactive_ble_mobile/android/src/main/kotlin/com/signify/hue/flutterreactiveble/converters/ProtobufMessageConverter.kt index 01accad0..a645911f 100644 --- a/packages/reactive_ble_mobile/android/src/main/kotlin/com/signify/hue/flutterreactiveble/converters/ProtobufMessageConverter.kt +++ b/packages/reactive_ble_mobile/android/src/main/kotlin/com/signify/hue/flutterreactiveble/converters/ProtobufMessageConverter.kt @@ -122,6 +122,24 @@ class ProtobufMessageConverter { return builder.build() } + fun convertWriteDescriptorInfo( + request: pb.WriteDescriptorRequest, + error: String? + ): pb.WriteDescriptorInfo { + val builder = pb.WriteDescriptorInfo.newBuilder() + .setDescriptor(request.descriptor) + + error?.let { + val failure = pb.GenericFailure.newBuilder() + .setCode(CharacteristicErrorType.UNKNOWN.code) + .setMessage(error) + + builder.setFailure(failure) + } + + return builder.build() + } + fun convertNegotiateMtuInfo(result: MtuNegotiateResult): pb.NegotiateMtuInfo = when (result) { is MtuNegotiateSuccesful -> pb.NegotiateMtuInfo.newBuilder() diff --git a/packages/reactive_ble_mobile/android/src/test/kotlin/com/signify/hue/flutterreactiveble/converters/ProtobufMessageConverterTest.kt b/packages/reactive_ble_mobile/android/src/test/kotlin/com/signify/hue/flutterreactiveble/converters/ProtobufMessageConverterTest.kt index 51b3eeca..552da18d 100644 --- a/packages/reactive_ble_mobile/android/src/test/kotlin/com/signify/hue/flutterreactiveble/converters/ProtobufMessageConverterTest.kt +++ b/packages/reactive_ble_mobile/android/src/test/kotlin/com/signify/hue/flutterreactiveble/converters/ProtobufMessageConverterTest.kt @@ -136,6 +136,43 @@ class ProtobufMessageConverterTest { } } + @Nested + @DisplayName("Convert to WriteDescriptorInfo") + inner class WriteDescriptorInfoTest { + + val result = createWriteDescriptorRequest("id", UUID.fromString("abcd"), + UUID.fromString("bcde"), UUID.fromString("cdef")) + + @Test + fun `converts to WriteDescriptorInfo object`() { + assertThat(protobufConverter.convertWriteDescriptorInfo(result, null)).isInstanceOf(pb.WriteDescriptorInfo::class.java) + } + + @Test + fun `converts deviceId`() { + assertThat(protobufConverter.convertWriteDescriptorInfo(result, null).descriptor.deviceId).isEqualTo(result.descriptor.deviceId) + } + + @Test + fun `converts serviceId`() { + assertThat(protobufConverter.convertWriteDescriptorInfo(result, null).descriptor.serviceUuid).isEqualTo(result.descriptor.serviceUuid) + } + + @Test + fun `converts characteristicId`() { + assertThat(protobufConverter.convertWriteDescriptorInfo(result, null).descriptor.characteristicUuid).isEqualTo(result.descriptor.characteristicUuid) + } + + @Test + fun `converts descriptorId`() { + assertThat(protobufConverter.convertWriteDescriptorInfo(result, null).descriptor.descriptorUuid).isEqualTo(result.descriptor.descriptorUuid) + } + + + // TODO: Error cases. + } + + @Nested @DisplayName("Convert to negotiatemtuinfo") inner class NegotiateMtuInfoTest { @@ -215,5 +252,26 @@ class ProtobufMessageConverterTest { .setCharacteristic(characteristicAddress) .build() } + + private fun createWriteDescriptorRequest( + deviceId: String, serviceUuid: UUID, characteristicUuid: UUID, descriptorUuid: UUID + ): pb.WriteDescriptorRequest { + val descriptorAddress = pb.DescriptorAddress.newBuilder() + .setDeviceId(deviceId) + .setServiceUuid(serviceUuid.toProtobuf()) + .setCharacteristicUuid(characteristicUuid.toProtobuf()) + .setDescriptorUuid(descriptorUuid.toProtobuf()) + + return pb.WriteDescriptorRequest.newBuilder() + .setDescriptor(descriptorAddress) + .build() + } +} + +fun UUID.toProtobuf() : com.signify.hue.flutterreactiveble.ProtobufModel.Uuid.Builder? { + val uuidConverter = UuidConverter() + return pb.Uuid.newBuilder() + .setData(ByteString.copyFrom(uuidConverter.byteArrayFromUuid(this))) + } diff --git a/packages/reactive_ble_mobile/ios/Classes/BleData extras/FailureCodes.swift b/packages/reactive_ble_mobile/ios/Classes/BleData extras/FailureCodes.swift index 4c608970..540e6da5 100644 --- a/packages/reactive_ble_mobile/ios/Classes/BleData extras/FailureCodes.swift +++ b/packages/reactive_ble_mobile/ios/Classes/BleData extras/FailureCodes.swift @@ -19,6 +19,11 @@ enum WriteCharacteristicFailure: Int { case unknown } +enum WriteDescriptorFailure: Int { + + case unknown +} + enum MaximumWriteValueLengthRetrieval: Int { case unknown diff --git a/packages/reactive_ble_mobile/ios/Classes/BleData extras/QualifiedDescriptor.swift b/packages/reactive_ble_mobile/ios/Classes/BleData extras/QualifiedDescriptor.swift new file mode 100644 index 00000000..2f7067fb --- /dev/null +++ b/packages/reactive_ble_mobile/ios/Classes/BleData extras/QualifiedDescriptor.swift @@ -0,0 +1,46 @@ +import class CoreBluetooth.CBUUID +import class CoreBluetooth.CBDescriptor +import CoreBluetooth + +struct QualifiedDescriptor: Equatable { + + let id: DescriptorID + let characteristicID: CharacteristicID + let serviceID: ServiceID + let peripheralID: PeripheralID +} + +extension QualifiedDescriptor { + + init(_ descriptor: CBDescriptor) { + self.init( + id: descriptor.uuid, + characteristicID: descriptor.characteristic?.uuid ?? CharacteristicID(), + serviceID: descriptor.characteristic?.service?.uuid ?? ServiceID(), + peripheralID: descriptor.characteristic?.service?.peripheral?.identifier ?? PeripheralID(uuid: (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)) + ) + } +} + +struct QualifiedDescriptorIDFactory { + + func make(from message: DescriptorAddress) -> QualifiedDescriptor? { + guard + message.hasCharacteristicUuid, + message.hasDescriptorUuid, + message.hasServiceUuid, + let peripheralID = UUID(uuidString: message.deviceID) + else { return nil } + + let descriptorID = CBUUID(data: message.descriptorUuid.data) + let characteristicID = CBUUID(data: message.characteristicUuid.data) + let serviceID = CBUUID(data: message.serviceUuid.data) + + return QualifiedDescriptor( + id: descriptorID, + characteristicID: characteristicID, + serviceID: serviceID, + peripheralID: peripheralID + ) + } +} diff --git a/packages/reactive_ble_mobile/ios/Classes/BleData/bledata.pb.swift b/packages/reactive_ble_mobile/ios/Classes/BleData/bledata.pb.swift index df77587d..c98e5296 100644 --- a/packages/reactive_ble_mobile/ios/Classes/BleData/bledata.pb.swift +++ b/packages/reactive_ble_mobile/ios/Classes/BleData/bledata.pb.swift @@ -314,6 +314,60 @@ struct WriteCharacteristicInfo { fileprivate var _failure: GenericFailure? = nil } +struct WriteDescriptorRequest { + // SwiftProtobuf.Message conformance is added in an extension below. See the + // `Message` and `Message+*Additions` files in the SwiftProtobuf library for + // methods supported on all messages. + + var descriptor: DescriptorAddress { + get {return _descriptor ?? DescriptorAddress()} + set {_descriptor = newValue} + } + /// Returns true if `descriptor` has been explicitly set. + var hasDescriptor: Bool {return self._descriptor != nil} + /// Clears the value of `descriptor`. Subsequent reads from it will return its default value. + mutating func clearDescriptor() {self._descriptor = nil} + + var value: Data = Data() + + var unknownFields = SwiftProtobuf.UnknownStorage() + + init() {} + + fileprivate var _descriptor: DescriptorAddress? = nil +} + +struct WriteDescriptorInfo { + // SwiftProtobuf.Message conformance is added in an extension below. See the + // `Message` and `Message+*Additions` files in the SwiftProtobuf library for + // methods supported on all messages. + + var descriptor: DescriptorAddress { + get {return _descriptor ?? DescriptorAddress()} + set {_descriptor = newValue} + } + /// Returns true if `descriptor` has been explicitly set. + var hasDescriptor: Bool {return self._descriptor != nil} + /// Clears the value of `descriptor`. Subsequent reads from it will return its default value. + mutating func clearDescriptor() {self._descriptor = nil} + + var failure: GenericFailure { + get {return _failure ?? GenericFailure()} + set {_failure = newValue} + } + /// Returns true if `failure` has been explicitly set. + var hasFailure: Bool {return self._failure != nil} + /// Clears the value of `failure`. Subsequent reads from it will return its default value. + mutating func clearFailure() {self._failure = nil} + + var unknownFields = SwiftProtobuf.UnknownStorage() + + init() {} + + fileprivate var _descriptor: DescriptorAddress? = nil + fileprivate var _failure: GenericFailure? = nil +} + struct NegotiateMtuRequest { // SwiftProtobuf.Message conformance is added in an extension below. See the // `Message` and `Message+*Additions` files in the SwiftProtobuf library for @@ -435,6 +489,49 @@ struct CharacteristicAddress { fileprivate var _characteristicUuid: Uuid? = nil } +struct DescriptorAddress { + // SwiftProtobuf.Message conformance is added in an extension below. See the + // `Message` and `Message+*Additions` files in the SwiftProtobuf library for + // methods supported on all messages. + + var deviceID: String = String() + + var serviceUuid: Uuid { + get {return _serviceUuid ?? Uuid()} + set {_serviceUuid = newValue} + } + /// Returns true if `serviceUuid` has been explicitly set. + var hasServiceUuid: Bool {return self._serviceUuid != nil} + /// Clears the value of `serviceUuid`. Subsequent reads from it will return its default value. + mutating func clearServiceUuid() {self._serviceUuid = nil} + + var characteristicUuid: Uuid { + get {return _characteristicUuid ?? Uuid()} + set {_characteristicUuid = newValue} + } + /// Returns true if `characteristicUuid` has been explicitly set. + var hasCharacteristicUuid: Bool {return self._characteristicUuid != nil} + /// Clears the value of `characteristicUuid`. Subsequent reads from it will return its default value. + mutating func clearCharacteristicUuid() {self._characteristicUuid = nil} + + var descriptorUuid: Uuid { + get {return _descriptorUuid ?? Uuid()} + set {_descriptorUuid = newValue} + } + /// Returns true if `descriptorUuid` has been explicitly set. + var hasDescriptorUuid: Bool {return self._descriptorUuid != nil} + /// Clears the value of `descriptorUuid`. Subsequent reads from it will return its default value. + mutating func clearDescriptorUuid() {self._descriptorUuid = nil} + + var unknownFields = SwiftProtobuf.UnknownStorage() + + init() {} + + fileprivate var _serviceUuid: Uuid? = nil + fileprivate var _characteristicUuid: Uuid? = nil + fileprivate var _descriptorUuid: Uuid? = nil +} + struct ServiceDataEntry { // SwiftProtobuf.Message conformance is added in an extension below. See the // `Message` and `Message+*Additions` files in the SwiftProtobuf library for @@ -690,15 +787,19 @@ extension DeviceScanInfo: SwiftProtobuf.Message, SwiftProtobuf._MessageImplement } func traverse(visitor: inout V) throws { + // The use of inline closures is to circumvent an issue where the compiler + // allocates stack space for every if/case branch local when no optimizations + // are enabled. https://github.com/apple/swift-protobuf/issues/1034 and + // https://github.com/apple/swift-protobuf/issues/1182 if !self.id.isEmpty { try visitor.visitSingularStringField(value: self.id, fieldNumber: 1) } if !self.name.isEmpty { try visitor.visitSingularStringField(value: self.name, fieldNumber: 2) } - if let v = self._failure { + try { if let v = self._failure { try visitor.visitSingularMessageField(value: v, fieldNumber: 3) - } + } }() if !self.serviceData.isEmpty { try visitor.visitRepeatedMessageField(value: self.serviceData, fieldNumber: 4) } @@ -750,12 +851,16 @@ extension ConnectToDeviceRequest: SwiftProtobuf.Message, SwiftProtobuf._MessageI } func traverse(visitor: inout V) throws { + // The use of inline closures is to circumvent an issue where the compiler + // allocates stack space for every if/case branch local when no optimizations + // are enabled. https://github.com/apple/swift-protobuf/issues/1034 and + // https://github.com/apple/swift-protobuf/issues/1182 if !self.deviceID.isEmpty { try visitor.visitSingularStringField(value: self.deviceID, fieldNumber: 1) } - if let v = self._servicesWithCharacteristicsToDiscover { + try { if let v = self._servicesWithCharacteristicsToDiscover { try visitor.visitSingularMessageField(value: v, fieldNumber: 2) - } + } }() if self.timeoutInMs != 0 { try visitor.visitSingularInt32Field(value: self.timeoutInMs, fieldNumber: 3) } @@ -794,15 +899,19 @@ extension DeviceInfo: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementatio } func traverse(visitor: inout V) throws { + // The use of inline closures is to circumvent an issue where the compiler + // allocates stack space for every if/case branch local when no optimizations + // are enabled. https://github.com/apple/swift-protobuf/issues/1034 and + // https://github.com/apple/swift-protobuf/issues/1182 if !self.id.isEmpty { try visitor.visitSingularStringField(value: self.id, fieldNumber: 1) } if self.connectionState != 0 { try visitor.visitSingularInt32Field(value: self.connectionState, fieldNumber: 2) } - if let v = self._failure { + try { if let v = self._failure { try visitor.visitSingularMessageField(value: v, fieldNumber: 3) - } + } }() try unknownFields.traverse(visitor: &visitor) } @@ -898,9 +1007,13 @@ extension ClearGattCacheInfo: SwiftProtobuf.Message, SwiftProtobuf._MessageImple } func traverse(visitor: inout V) throws { - if let v = self._failure { + // The use of inline closures is to circumvent an issue where the compiler + // allocates stack space for every if/case branch local when no optimizations + // are enabled. https://github.com/apple/swift-protobuf/issues/1034 and + // https://github.com/apple/swift-protobuf/issues/1182 + try { if let v = self._failure { try visitor.visitSingularMessageField(value: v, fieldNumber: 1) - } + } }() try unknownFields.traverse(visitor: &visitor) } @@ -930,9 +1043,13 @@ extension NotifyCharacteristicRequest: SwiftProtobuf.Message, SwiftProtobuf._Mes } func traverse(visitor: inout V) throws { - if let v = self._characteristic { + // The use of inline closures is to circumvent an issue where the compiler + // allocates stack space for every if/case branch local when no optimizations + // are enabled. https://github.com/apple/swift-protobuf/issues/1034 and + // https://github.com/apple/swift-protobuf/issues/1182 + try { if let v = self._characteristic { try visitor.visitSingularMessageField(value: v, fieldNumber: 1) - } + } }() try unknownFields.traverse(visitor: &visitor) } @@ -962,9 +1079,13 @@ extension NotifyNoMoreCharacteristicRequest: SwiftProtobuf.Message, SwiftProtobu } func traverse(visitor: inout V) throws { - if let v = self._characteristic { + // The use of inline closures is to circumvent an issue where the compiler + // allocates stack space for every if/case branch local when no optimizations + // are enabled. https://github.com/apple/swift-protobuf/issues/1034 and + // https://github.com/apple/swift-protobuf/issues/1182 + try { if let v = self._characteristic { try visitor.visitSingularMessageField(value: v, fieldNumber: 1) - } + } }() try unknownFields.traverse(visitor: &visitor) } @@ -994,9 +1115,13 @@ extension ReadCharacteristicRequest: SwiftProtobuf.Message, SwiftProtobuf._Messa } func traverse(visitor: inout V) throws { - if let v = self._characteristic { + // The use of inline closures is to circumvent an issue where the compiler + // allocates stack space for every if/case branch local when no optimizations + // are enabled. https://github.com/apple/swift-protobuf/issues/1034 and + // https://github.com/apple/swift-protobuf/issues/1182 + try { if let v = self._characteristic { try visitor.visitSingularMessageField(value: v, fieldNumber: 1) - } + } }() try unknownFields.traverse(visitor: &visitor) } @@ -1030,15 +1155,19 @@ extension CharacteristicValueInfo: SwiftProtobuf.Message, SwiftProtobuf._Message } func traverse(visitor: inout V) throws { - if let v = self._characteristic { + // The use of inline closures is to circumvent an issue where the compiler + // allocates stack space for every if/case branch local when no optimizations + // are enabled. https://github.com/apple/swift-protobuf/issues/1034 and + // https://github.com/apple/swift-protobuf/issues/1182 + try { if let v = self._characteristic { try visitor.visitSingularMessageField(value: v, fieldNumber: 1) - } + } }() if !self.value.isEmpty { try visitor.visitSingularBytesField(value: self.value, fieldNumber: 2) } - if let v = self._failure { + try { if let v = self._failure { try visitor.visitSingularMessageField(value: v, fieldNumber: 3) - } + } }() try unknownFields.traverse(visitor: &visitor) } @@ -1072,9 +1201,13 @@ extension WriteCharacteristicRequest: SwiftProtobuf.Message, SwiftProtobuf._Mess } func traverse(visitor: inout V) throws { - if let v = self._characteristic { + // The use of inline closures is to circumvent an issue where the compiler + // allocates stack space for every if/case branch local when no optimizations + // are enabled. https://github.com/apple/swift-protobuf/issues/1034 and + // https://github.com/apple/swift-protobuf/issues/1182 + try { if let v = self._characteristic { try visitor.visitSingularMessageField(value: v, fieldNumber: 1) - } + } }() if !self.value.isEmpty { try visitor.visitSingularBytesField(value: self.value, fieldNumber: 2) } @@ -1110,12 +1243,16 @@ extension WriteCharacteristicInfo: SwiftProtobuf.Message, SwiftProtobuf._Message } func traverse(visitor: inout V) throws { - if let v = self._characteristic { + // The use of inline closures is to circumvent an issue where the compiler + // allocates stack space for every if/case branch local when no optimizations + // are enabled. https://github.com/apple/swift-protobuf/issues/1034 and + // https://github.com/apple/swift-protobuf/issues/1182 + try { if let v = self._characteristic { try visitor.visitSingularMessageField(value: v, fieldNumber: 1) - } - if let v = self._failure { + } }() + try { if let v = self._failure { try visitor.visitSingularMessageField(value: v, fieldNumber: 3) - } + } }() try unknownFields.traverse(visitor: &visitor) } @@ -1127,6 +1264,90 @@ extension WriteCharacteristicInfo: SwiftProtobuf.Message, SwiftProtobuf._Message } } +extension WriteDescriptorRequest: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { + static let protoMessageName: String = "WriteDescriptorRequest" + static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ + 1: .same(proto: "descriptor"), + 2: .same(proto: "value"), + ] + + mutating func decodeMessage(decoder: inout D) throws { + while let fieldNumber = try decoder.nextFieldNumber() { + // The use of inline closures is to circumvent an issue where the compiler + // allocates stack space for every case branch when no optimizations are + // enabled. https://github.com/apple/swift-protobuf/issues/1034 + switch fieldNumber { + case 1: try { try decoder.decodeSingularMessageField(value: &self._descriptor) }() + case 2: try { try decoder.decodeSingularBytesField(value: &self.value) }() + default: break + } + } + } + + func traverse(visitor: inout V) throws { + // The use of inline closures is to circumvent an issue where the compiler + // allocates stack space for every if/case branch local when no optimizations + // are enabled. https://github.com/apple/swift-protobuf/issues/1034 and + // https://github.com/apple/swift-protobuf/issues/1182 + try { if let v = self._descriptor { + try visitor.visitSingularMessageField(value: v, fieldNumber: 1) + } }() + if !self.value.isEmpty { + try visitor.visitSingularBytesField(value: self.value, fieldNumber: 2) + } + try unknownFields.traverse(visitor: &visitor) + } + + static func ==(lhs: WriteDescriptorRequest, rhs: WriteDescriptorRequest) -> Bool { + if lhs._descriptor != rhs._descriptor {return false} + if lhs.value != rhs.value {return false} + if lhs.unknownFields != rhs.unknownFields {return false} + return true + } +} + +extension WriteDescriptorInfo: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { + static let protoMessageName: String = "WriteDescriptorInfo" + static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ + 1: .same(proto: "descriptor"), + 3: .same(proto: "failure"), + ] + + mutating func decodeMessage(decoder: inout D) throws { + while let fieldNumber = try decoder.nextFieldNumber() { + // The use of inline closures is to circumvent an issue where the compiler + // allocates stack space for every case branch when no optimizations are + // enabled. https://github.com/apple/swift-protobuf/issues/1034 + switch fieldNumber { + case 1: try { try decoder.decodeSingularMessageField(value: &self._descriptor) }() + case 3: try { try decoder.decodeSingularMessageField(value: &self._failure) }() + default: break + } + } + } + + func traverse(visitor: inout V) throws { + // The use of inline closures is to circumvent an issue where the compiler + // allocates stack space for every if/case branch local when no optimizations + // are enabled. https://github.com/apple/swift-protobuf/issues/1034 and + // https://github.com/apple/swift-protobuf/issues/1182 + try { if let v = self._descriptor { + try visitor.visitSingularMessageField(value: v, fieldNumber: 1) + } }() + try { if let v = self._failure { + try visitor.visitSingularMessageField(value: v, fieldNumber: 3) + } }() + try unknownFields.traverse(visitor: &visitor) + } + + static func ==(lhs: WriteDescriptorInfo, rhs: WriteDescriptorInfo) -> Bool { + if lhs._descriptor != rhs._descriptor {return false} + if lhs._failure != rhs._failure {return false} + if lhs.unknownFields != rhs.unknownFields {return false} + return true + } +} + extension NegotiateMtuRequest: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { static let protoMessageName: String = "NegotiateMtuRequest" static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ @@ -1188,15 +1409,19 @@ extension NegotiateMtuInfo: SwiftProtobuf.Message, SwiftProtobuf._MessageImpleme } func traverse(visitor: inout V) throws { + // The use of inline closures is to circumvent an issue where the compiler + // allocates stack space for every if/case branch local when no optimizations + // are enabled. https://github.com/apple/swift-protobuf/issues/1034 and + // https://github.com/apple/swift-protobuf/issues/1182 if !self.deviceID.isEmpty { try visitor.visitSingularStringField(value: self.deviceID, fieldNumber: 1) } if self.mtuSize != 0 { try visitor.visitSingularInt32Field(value: self.mtuSize, fieldNumber: 2) } - if let v = self._failure { + try { if let v = self._failure { try visitor.visitSingularMessageField(value: v, fieldNumber: 3) - } + } }() try unknownFields.traverse(visitor: &visitor) } @@ -1300,12 +1525,16 @@ extension ChangeConnectionPriorityInfo: SwiftProtobuf.Message, SwiftProtobuf._Me } func traverse(visitor: inout V) throws { + // The use of inline closures is to circumvent an issue where the compiler + // allocates stack space for every if/case branch local when no optimizations + // are enabled. https://github.com/apple/swift-protobuf/issues/1034 and + // https://github.com/apple/swift-protobuf/issues/1182 if !self.deviceID.isEmpty { try visitor.visitSingularStringField(value: self.deviceID, fieldNumber: 1) } - if let v = self._failure { + try { if let v = self._failure { try visitor.visitSingularMessageField(value: v, fieldNumber: 2) - } + } }() try unknownFields.traverse(visitor: &visitor) } @@ -1340,15 +1569,19 @@ extension CharacteristicAddress: SwiftProtobuf.Message, SwiftProtobuf._MessageIm } func traverse(visitor: inout V) throws { + // The use of inline closures is to circumvent an issue where the compiler + // allocates stack space for every if/case branch local when no optimizations + // are enabled. https://github.com/apple/swift-protobuf/issues/1034 and + // https://github.com/apple/swift-protobuf/issues/1182 if !self.deviceID.isEmpty { try visitor.visitSingularStringField(value: self.deviceID, fieldNumber: 1) } - if let v = self._serviceUuid { + try { if let v = self._serviceUuid { try visitor.visitSingularMessageField(value: v, fieldNumber: 2) - } - if let v = self._characteristicUuid { + } }() + try { if let v = self._characteristicUuid { try visitor.visitSingularMessageField(value: v, fieldNumber: 3) - } + } }() try unknownFields.traverse(visitor: &visitor) } @@ -1361,6 +1594,60 @@ extension CharacteristicAddress: SwiftProtobuf.Message, SwiftProtobuf._MessageIm } } +extension DescriptorAddress: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { + static let protoMessageName: String = "DescriptorAddress" + static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ + 1: .same(proto: "deviceId"), + 2: .same(proto: "serviceUuid"), + 3: .same(proto: "characteristicUuid"), + 4: .same(proto: "descriptorUuid"), + ] + + mutating func decodeMessage(decoder: inout D) throws { + while let fieldNumber = try decoder.nextFieldNumber() { + // The use of inline closures is to circumvent an issue where the compiler + // allocates stack space for every case branch when no optimizations are + // enabled. https://github.com/apple/swift-protobuf/issues/1034 + switch fieldNumber { + case 1: try { try decoder.decodeSingularStringField(value: &self.deviceID) }() + case 2: try { try decoder.decodeSingularMessageField(value: &self._serviceUuid) }() + case 3: try { try decoder.decodeSingularMessageField(value: &self._characteristicUuid) }() + case 4: try { try decoder.decodeSingularMessageField(value: &self._descriptorUuid) }() + default: break + } + } + } + + func traverse(visitor: inout V) throws { + // The use of inline closures is to circumvent an issue where the compiler + // allocates stack space for every if/case branch local when no optimizations + // are enabled. https://github.com/apple/swift-protobuf/issues/1034 and + // https://github.com/apple/swift-protobuf/issues/1182 + if !self.deviceID.isEmpty { + try visitor.visitSingularStringField(value: self.deviceID, fieldNumber: 1) + } + try { if let v = self._serviceUuid { + try visitor.visitSingularMessageField(value: v, fieldNumber: 2) + } }() + try { if let v = self._characteristicUuid { + try visitor.visitSingularMessageField(value: v, fieldNumber: 3) + } }() + try { if let v = self._descriptorUuid { + try visitor.visitSingularMessageField(value: v, fieldNumber: 4) + } }() + try unknownFields.traverse(visitor: &visitor) + } + + static func ==(lhs: DescriptorAddress, rhs: DescriptorAddress) -> Bool { + if lhs.deviceID != rhs.deviceID {return false} + if lhs._serviceUuid != rhs._serviceUuid {return false} + if lhs._characteristicUuid != rhs._characteristicUuid {return false} + if lhs._descriptorUuid != rhs._descriptorUuid {return false} + if lhs.unknownFields != rhs.unknownFields {return false} + return true + } +} + extension ServiceDataEntry: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding { static let protoMessageName: String = "ServiceDataEntry" static let _protobuf_nameMap: SwiftProtobuf._NameMap = [ @@ -1382,9 +1669,13 @@ extension ServiceDataEntry: SwiftProtobuf.Message, SwiftProtobuf._MessageImpleme } func traverse(visitor: inout V) throws { - if let v = self._serviceUuid { + // The use of inline closures is to circumvent an issue where the compiler + // allocates stack space for every if/case branch local when no optimizations + // are enabled. https://github.com/apple/swift-protobuf/issues/1034 and + // https://github.com/apple/swift-protobuf/issues/1182 + try { if let v = self._serviceUuid { try visitor.visitSingularMessageField(value: v, fieldNumber: 1) - } + } }() if !self.data.isEmpty { try visitor.visitSingularBytesField(value: self.data, fieldNumber: 2) } @@ -1452,9 +1743,13 @@ extension ServiceWithCharacteristics: SwiftProtobuf.Message, SwiftProtobuf._Mess } func traverse(visitor: inout V) throws { - if let v = self._serviceID { + // The use of inline closures is to circumvent an issue where the compiler + // allocates stack space for every if/case branch local when no optimizations + // are enabled. https://github.com/apple/swift-protobuf/issues/1034 and + // https://github.com/apple/swift-protobuf/issues/1182 + try { if let v = self._serviceID { try visitor.visitSingularMessageField(value: v, fieldNumber: 1) - } + } }() if !self.characteristics.isEmpty { try visitor.visitRepeatedMessageField(value: self.characteristics, fieldNumber: 2) } @@ -1564,9 +1859,13 @@ extension DiscoveredService: SwiftProtobuf.Message, SwiftProtobuf._MessageImplem } func traverse(visitor: inout V) throws { - if let v = self._serviceUuid { + // The use of inline closures is to circumvent an issue where the compiler + // allocates stack space for every if/case branch local when no optimizations + // are enabled. https://github.com/apple/swift-protobuf/issues/1034 and + // https://github.com/apple/swift-protobuf/issues/1182 + try { if let v = self._serviceUuid { try visitor.visitSingularMessageField(value: v, fieldNumber: 1) - } + } }() if !self.characteristicUuids.isEmpty { try visitor.visitRepeatedMessageField(value: self.characteristicUuids, fieldNumber: 2) } @@ -1620,12 +1919,16 @@ extension DiscoveredCharacteristic: SwiftProtobuf.Message, SwiftProtobuf._Messag } func traverse(visitor: inout V) throws { - if let v = self._characteristicID { + // The use of inline closures is to circumvent an issue where the compiler + // allocates stack space for every if/case branch local when no optimizations + // are enabled. https://github.com/apple/swift-protobuf/issues/1034 and + // https://github.com/apple/swift-protobuf/issues/1182 + try { if let v = self._characteristicID { try visitor.visitSingularMessageField(value: v, fieldNumber: 1) - } - if let v = self._serviceID { + } }() + try { if let v = self._serviceID { try visitor.visitSingularMessageField(value: v, fieldNumber: 2) - } + } }() if self.isReadable != false { try visitor.visitSingularBoolField(value: self.isReadable, fieldNumber: 3) } diff --git a/packages/reactive_ble_mobile/ios/Classes/Plugin/PluginController.swift b/packages/reactive_ble_mobile/ios/Classes/Plugin/PluginController.swift index 77a6a641..9482d2d1 100644 --- a/packages/reactive_ble_mobile/ios/Classes/Plugin/PluginController.swift +++ b/packages/reactive_ble_mobile/ios/Classes/Plugin/PluginController.swift @@ -298,6 +298,12 @@ final class PluginController { $0.isWritableWithoutResponse = characteristic.properties.contains(.writeWithoutResponse) $0.isNotifiable = characteristic.properties.contains(.notify) $0.isIndicatable = characteristic.properties.contains(.indicate) + + if let descriptors = characteristic.descriptors { + for descriptor in descriptors { + print("descriptor: \(descriptor.uuid): \(descriptor.value ?? "")") + } + } } } @@ -491,6 +497,66 @@ final class PluginController { completion(.success(result)) } + func writeDescriptorWithoutResponse(name: String, args: WriteDescriptorRequest, completion: @escaping PlatformMethodCompletionHandler) { + guard let central = central + else { + completion(.failure(PluginError.notInitialized.asFlutterError)) + return + } + + guard let descriptor = QualifiedDescriptorIDFactory().make(from: args.descriptor) + else { + completion(.failure(PluginError.invalidMethodCall(method: name, details: "descriptor, characteristic, service, and peripheral IDs are required").asFlutterError)) + return + } + + guard let peripheral = central.activePeripherals[descriptor.peripheralID], + let service = peripheral.services?.first(where: { service in + service == descriptor.serviceID + }), + let characteristic = service.characteristics?.first(where: { characteristic in + characteristic == descriptor.characteristicID + }) else { + return + } + + if let _ = characteristic.descriptors?.first(where: { $0.uuid == descriptor.id }) { + let result = performWriteDescriptorWithoutResponse(central: central, args: args, descriptor: descriptor) + completion(.success(result)) + } else { + do { + try central.discoverDescriptors( + characteristic: QualifiedCharacteristic(characteristic), + discover: .some([characteristic])) { central, characteristic, errors in + let result = self.performWriteDescriptorWithoutResponse(central: central, args: args, descriptor: descriptor) + completion(.success(result)) + } + } catch { + + } + } + } + + private func performWriteDescriptorWithoutResponse(central: Central, args: WriteDescriptorRequest, descriptor: QualifiedDescriptor) -> WriteDescriptorInfo { + do { + try central.writeDescriptorWithoutResponse( + value: args.value, + descriptor: QualifiedDescriptor(id: descriptor.id, characteristicID: descriptor.characteristicID, serviceID: descriptor.serviceID, peripheralID: descriptor.peripheralID) + ) + return WriteDescriptorInfo.with { + $0.descriptor = args.descriptor + } + } catch { + return WriteDescriptorInfo.with { + $0.descriptor = args.descriptor + $0.failure = GenericFailure.with { + $0.code = Int32(WriteDescriptorFailure.unknown.rawValue) + $0.message = "\(error)" + } + } + } + } + func reportMaximumWriteValueLength(name: String, args: NegotiateMtuRequest, completion: @escaping PlatformMethodCompletionHandler) { guard let central = central else { diff --git a/packages/reactive_ble_mobile/ios/Classes/Plugin/SwiftReactiveBlePlugin.swift b/packages/reactive_ble_mobile/ios/Classes/Plugin/SwiftReactiveBlePlugin.swift index e0a4fb93..66379aa0 100644 --- a/packages/reactive_ble_mobile/ios/Classes/Plugin/SwiftReactiveBlePlugin.swift +++ b/packages/reactive_ble_mobile/ios/Classes/Plugin/SwiftReactiveBlePlugin.swift @@ -135,6 +135,9 @@ public class SwiftReactiveBlePlugin: NSObject, FlutterPlugin { AnyPlatformMethod(UnaryPlatformMethod(name: "writeCharacteristicWithoutResponse") { (name, context, args: WriteCharacteristicRequest, completion) in context.writeCharacteristicWithoutResponse(name: name, args: args, completion: completion) }), + AnyPlatformMethod(UnaryPlatformMethod(name: "writeDescriptorWithoutResponse") { (name, context, args: WriteDescriptorRequest, completion) in + context.writeDescriptorWithoutResponse(name: name, args: args, completion: completion) + }), AnyPlatformMethod(UnaryPlatformMethod(name: "negotiateMtuSize") { (name, context, args: NegotiateMtuRequest, completion) in context.reportMaximumWriteValueLength(name: name, args: args, completion: completion) }), diff --git a/packages/reactive_ble_mobile/ios/Classes/ReactiveBle/Central.swift b/packages/reactive_ble_mobile/ios/Classes/ReactiveBle/Central.swift index 95f2f9dc..59f99a5e 100644 --- a/packages/reactive_ble_mobile/ios/Classes/ReactiveBle/Central.swift +++ b/packages/reactive_ble_mobile/ios/Classes/ReactiveBle/Central.swift @@ -5,6 +5,8 @@ typealias RSSI = Int typealias PeripheralID = UUID typealias ServiceID = CBUUID typealias CharacteristicID = CBUUID +typealias DescriptorID = CBUUID + typealias ServiceData = [ServiceID: Data] typealias AdvertisementData = [String: Any] @@ -15,6 +17,7 @@ final class Central { typealias DiscoveryHandler = (Central, CBPeripheral, AdvertisementData, RSSI) -> Void typealias ConnectionChangeHandler = (Central, CBPeripheral, ConnectionChange) -> Void typealias ServicesWithCharacteristicsDiscoveryHandler = (Central, CBPeripheral, [Error]) -> Void + typealias CharacteristicsWithDescriptorsDiscoveryHandler = (Central, CBCharacteristic, [Error]) -> Void typealias CharacteristicNotifyCompletionHandler = (Central, Error?) -> Void typealias CharacteristicValueUpdateHandler = (Central, QualifiedCharacteristic, Data?, Error?) -> Void typealias CharacteristicWriteCompletionHandler = (Central, QualifiedCharacteristic, Error?) -> Void @@ -31,6 +34,7 @@ final class Central { private let servicesWithCharacteristicsDiscoveryRegistry = PeripheralTaskRegistry() private let characteristicNotifyRegistry = PeripheralTaskRegistry() private let characteristicWriteRegistry = PeripheralTaskRegistry() + private let characteristicsWithDescriptorsDiscoveryRegistry = PeripheralTaskRegistry() init( onStateChange: @escaping StateChangeHandler, @@ -95,6 +99,12 @@ final class Central { key: QualifiedCharacteristic(characteristic), action: { $0.handleWrite(error: error) } ) + }, + onDescriptorsDiscovery: papply(weak: self) { central, peripheral, characteristic, error in + let c: CharacteristicID = characteristic.uuid + central.characteristicsWithDescriptorsDiscoveryRegistry.updateTask( + key: c, + action: { $0.handleDiscovery(peripheral: peripheral, characteristic: characteristic, error: error) }) } ) self.centralManager = CBCentralManager( @@ -199,6 +209,34 @@ final class Central { action: { $0.start(peripheral: peripheral) } ) } + + func discoverDescriptors( + characteristic: QualifiedCharacteristic, + discover characteristicsWithDescriptorsToDiscover: CharacteristicsWithDescriptorsToDiscover, + completion: @escaping CharacteristicsWithDescriptorsDiscoveryHandler + ) throws -> Void { + let resolved = try resolve(characteristic: characteristic) + + discoverDescriptors( + for: resolved, + discover: characteristicsWithDescriptorsToDiscover, + completion: completion + ) + } + + private func discoverDescriptors( + for peripheral: CBCharacteristic, + discover characteristicsWithDescriptorsToDiscover: CharacteristicsWithDescriptorsToDiscover, + completion: @escaping CharacteristicsWithDescriptorsDiscoveryHandler + ) { + characteristicsWithDescriptorsDiscoveryRegistry.registerTask( + key: peripheral.uuid, + params: .init(characteristicsWithDescriptorsToDiscover: characteristicsWithDescriptorsToDiscover), + completion: papply(weak: self) { central, result in + completion(central, peripheral, result) + } + ) + } func turnNotifications(_ state: OnOff, for qualifiedCharacteristic: QualifiedCharacteristic, completion: @escaping CharacteristicNotifyCompletionHandler) throws { let characteristic = try resolve(characteristic: qualifiedCharacteristic) @@ -275,6 +313,22 @@ final class Central { return response } + + func writeDescriptorWithoutResponse( + value: Data, + descriptor qualifiedDescriptor: QualifiedDescriptor + ) throws { + let descriptor = try resolve(descriptor: qualifiedDescriptor) + + guard let characteristic = descriptor.characteristic else { + throw Failure.descriptorNotFound(qualifiedDescriptor) + } + + guard let response = characteristic.service?.peripheral?.writeValue(value, for: descriptor) + else { throw Failure.descriptorNotFound(qualifiedDescriptor) } + + return response + } func maximumWriteValueLength(for peripheral: PeripheralID, type: CBCharacteristicWriteType) throws -> Int { let peripheral = try resolve(connected: peripheral) @@ -327,6 +381,22 @@ final class Central { return characteristic } + + private func resolve(descriptor qualifiedDescriptor: QualifiedDescriptor) throws -> CBDescriptor { + let peripheral = try resolve(connected: qualifiedDescriptor.peripheralID) + + guard let service = peripheral.services?.first(where: { $0.uuid == qualifiedDescriptor.serviceID }) + else { throw Failure.serviceNotFound(qualifiedDescriptor.serviceID, qualifiedDescriptor.peripheralID) } + + guard let characteristic = service.characteristics?.first(where: { $0.uuid == qualifiedDescriptor.characteristicID }) + else { throw Failure.descriptorNotFound(qualifiedDescriptor) } + + guard let descriptor = characteristic.descriptors?.first(where: { $0.uuid == qualifiedDescriptor.id }) + else { throw Failure.descriptorNotFound(qualifiedDescriptor) } + + return descriptor + } + private enum Failure: Error, CustomStringConvertible { @@ -335,6 +405,7 @@ final class Central { case peripheralIsNotConnected(PeripheralID) case serviceNotFound(ServiceID, PeripheralID) case characteristicNotFound(QualifiedCharacteristic) + case descriptorNotFound(QualifiedDescriptor) case notificationsNotSupported(QualifiedCharacteristic) case notReadable(QualifiedCharacteristic) case notWritable(QualifiedCharacteristic) @@ -351,6 +422,8 @@ final class Central { return "A service \(serviceID) is not found in the peripheral \(peripheralID) (make sure it has been discovered)" case .characteristicNotFound(let qualifiedCharacteristic): return "A characteristic \(qualifiedCharacteristic.id) is not found in the service \(qualifiedCharacteristic.serviceID) of the peripheral \(qualifiedCharacteristic.peripheralID) (make sure it has been discovered)" + case .descriptorNotFound(let qualifiedDescriptor): + return "A descriptor \(qualifiedDescriptor.id) is not found in the characteristic \(qualifiedDescriptor.characteristicID) in service \(qualifiedDescriptor.serviceID) of the peripheral \(qualifiedDescriptor.peripheralID) (make sure it has been discovered)" case .notificationsNotSupported(let qualifiedCharacteristic): return "The characteristic \(qualifiedCharacteristic.id) of the service \(qualifiedCharacteristic.serviceID) of the peripheral \(qualifiedCharacteristic.peripheralID) does not support either notifications or indications" case .notReadable(let qualifiedCharacteristic): diff --git a/packages/reactive_ble_mobile/ios/Classes/ReactiveBle/PeripheralDelegate.swift b/packages/reactive_ble_mobile/ios/Classes/ReactiveBle/PeripheralDelegate.swift index 0c50851b..25d6e161 100644 --- a/packages/reactive_ble_mobile/ios/Classes/ReactiveBle/PeripheralDelegate.swift +++ b/packages/reactive_ble_mobile/ios/Classes/ReactiveBle/PeripheralDelegate.swift @@ -7,25 +7,29 @@ final class PeripheralDelegate: NSObject, CBPeripheralDelegate { typealias CharacteristicNotificationStateUpdateHandler = (CBCharacteristic, Error?) -> Void typealias CharacteristicValueUpdateHandler = (CBCharacteristic, Error?) -> Void typealias CharacteristicValueWriteHandler = (CBCharacteristic, Error?) -> Void + typealias DescriptorsDiscoveryHandler = (CBPeripheral, CBCharacteristic, Error?) -> Void private let onServicesDiscovery: ServicesDiscoveryHandler private let onCharacteristicsDiscovery: CharacteristicsDiscoverHandler private let onCharacteristicNotificationStateUpdate: CharacteristicNotificationStateUpdateHandler private let onCharacteristicValueUpdate: CharacteristicValueUpdateHandler private let onCharacteristicValueWrite: CharacteristicValueWriteHandler + private let onDescriptorsDiscovery: DescriptorsDiscoveryHandler init( onServicesDiscovery: @escaping ServicesDiscoveryHandler, onCharacteristicsDiscovery: @escaping CharacteristicsDiscoverHandler, onCharacteristicNotificationStateUpdate: @escaping CharacteristicNotificationStateUpdateHandler, onCharacteristicValueUpdate: @escaping CharacteristicValueUpdateHandler, - onCharacteristicValueWrite: @escaping CharacteristicValueWriteHandler + onCharacteristicValueWrite: @escaping CharacteristicValueWriteHandler, + onDescriptorsDiscovery: @escaping DescriptorsDiscoveryHandler ) { self.onServicesDiscovery = onServicesDiscovery self.onCharacteristicsDiscovery = onCharacteristicsDiscovery self.onCharacteristicNotificationStateUpdate = onCharacteristicNotificationStateUpdate self.onCharacteristicValueUpdate = onCharacteristicValueUpdate self.onCharacteristicValueWrite = onCharacteristicValueWrite + self.onDescriptorsDiscovery = onDescriptorsDiscovery } func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?) { @@ -47,4 +51,8 @@ final class PeripheralDelegate: NSObject, CBPeripheralDelegate { func peripheral(_ peripheral: CBPeripheral, didWriteValueFor characteristic: CBCharacteristic, error: Error?) { onCharacteristicValueWrite(characteristic, error) } + + func peripheral(_ peripheral: CBPeripheral, didDiscoverDescriptorsFor characteristic: CBCharacteristic, error: Error?) { + onDescriptorsDiscovery(peripheral, characteristic, error) + } } diff --git a/packages/reactive_ble_mobile/ios/Classes/ReactiveBle/Tasks/CharacteristicsWithDescriptorsDiscovery/CharacteristicsWithDescriptorsDiscoveryTaskController.swift b/packages/reactive_ble_mobile/ios/Classes/ReactiveBle/Tasks/CharacteristicsWithDescriptorsDiscovery/CharacteristicsWithDescriptorsDiscoveryTaskController.swift new file mode 100644 index 00000000..f951da37 --- /dev/null +++ b/packages/reactive_ble_mobile/ios/Classes/ReactiveBle/Tasks/CharacteristicsWithDescriptorsDiscovery/CharacteristicsWithDescriptorsDiscoveryTaskController.swift @@ -0,0 +1,63 @@ +import CoreBluetooth + +struct CharacteristicsWithDescriptorsDiscoveryTaskController: PeripheralTaskController { + + typealias TaskSpec = CharacteristicsWithDescriptorsDiscoveryTaskSpec + + private let task: SubjectTask + + init(_ task: SubjectTask) { + self.task = task + } + + func start(peripheral: CBPeripheral) -> SubjectTask { + guard case .pending = task.state + else { + return task + .with(state: task.state.finished([ + improperHandling(currentState: task.state) + ])) + } + + if task.params.characteristicsWithDescriptorsToDiscover.isEmpty { + return task.with(state: task.state.finished([])) + } else { + let toDiscover = task.params.characteristicsWithDescriptorsToDiscover.characteristics + + for characteristic in toDiscover { + peripheral.discoverDescriptors(for: characteristic) + } + + return task.with(state: task.state.processing(.discoveringDescriptors(characteristicsLeft: toDiscover.count, errors: []))) + } + } + + func cancel(error: Error) -> SubjectTask { + return task + .with(state: task.state.finished([error])) + } + + func handleDiscovery(peripheral: CBPeripheral, characteristic: CBCharacteristic, error: Error?) -> SubjectTask { + guard case .processing(since: _, .discoveringDescriptors(let characteristicsLeft, _)) = task.state + else { + return task + .with(state: task.state.finished([ + improperHandling(currentState: task.state) + ])) + } + + if let error = error { + return task + .with(state: task.state.finished([error])) + } else { + return task + .with(state: characteristicsLeft > 0 + ? task.state.processing(.discoveringDescriptors( + characteristicsLeft: characteristicsLeft - 1, + errors: [] + )) + : task.state.finished([]) + ) + } + } +} diff --git a/packages/reactive_ble_mobile/ios/Classes/ReactiveBle/Tasks/CharacteristicsWithDescriptorsDiscovery/CharacteristicsWithDescriptorsDiscoveryTaskSpec.swift b/packages/reactive_ble_mobile/ios/Classes/ReactiveBle/Tasks/CharacteristicsWithDescriptorsDiscovery/CharacteristicsWithDescriptorsDiscoveryTaskSpec.swift new file mode 100644 index 00000000..d0f79684 --- /dev/null +++ b/packages/reactive_ble_mobile/ios/Classes/ReactiveBle/Tasks/CharacteristicsWithDescriptorsDiscovery/CharacteristicsWithDescriptorsDiscoveryTaskSpec.swift @@ -0,0 +1,24 @@ +import CoreBluetooth + +struct CharacteristicsWithDescriptorsDiscoveryTaskSpec: PeripheralTaskSpec { + + typealias Key = CharacteristicID + + struct Params { + + let characteristicsWithDescriptorsToDiscover: CharacteristicsWithDescriptorsToDiscover + } + + enum Stage { + + case discoveringDescriptors(characteristicsLeft: Int, errors: [Error]) + } + + typealias Result = [Error] + + static let tag = "DISCOVER D" + + static func isMember(_ key: Key, of group: CharacteristicID) -> Bool { + return key == group + } +} diff --git a/packages/reactive_ble_mobile/ios/Classes/ReactiveBle/Tasks/CharacteristicsWithDescriptorsDiscovery/CharacteristicsWithDescriptorsToDiscover.swift b/packages/reactive_ble_mobile/ios/Classes/ReactiveBle/Tasks/CharacteristicsWithDescriptorsDiscovery/CharacteristicsWithDescriptorsToDiscover.swift new file mode 100644 index 00000000..f6162fb2 --- /dev/null +++ b/packages/reactive_ble_mobile/ios/Classes/ReactiveBle/Tasks/CharacteristicsWithDescriptorsDiscovery/CharacteristicsWithDescriptorsToDiscover.swift @@ -0,0 +1,21 @@ +import CoreBluetooth + +enum CharacteristicsWithDescriptorsToDiscover: Equatable { + + case some([CBCharacteristic]) + + var isEmpty: Bool { + switch self { + case .some(let characteristicsWithDescriptorsToDiscover): + return characteristicsWithDescriptorsToDiscover.isEmpty + } + } + + var characteristics: [CBCharacteristic] { + switch self { + case .some(let characteristicsWithDescriptorsToDiscover): + return Array(characteristicsWithDescriptorsToDiscover) + } + } +} + diff --git a/packages/reactive_ble_mobile/ios/Classes/ReactiveBlePlugin.m b/packages/reactive_ble_mobile/ios/Classes/ReactiveBlePlugin.m index 53c57d24..8da01f04 100644 --- a/packages/reactive_ble_mobile/ios/Classes/ReactiveBlePlugin.m +++ b/packages/reactive_ble_mobile/ios/Classes/ReactiveBlePlugin.m @@ -1,5 +1,10 @@ #import "ReactiveBlePlugin.h" + +#if __has_include() #import +#else +#import "reactive_ble_mobile-Swift.h" +#endif @implementation ReactiveBlePlugin + (void)registerWithRegistrar:(NSObject*)registrar { diff --git a/packages/reactive_ble_mobile/ios/reactive_ble_mobile.podspec b/packages/reactive_ble_mobile/ios/reactive_ble_mobile.podspec index 8d754343..3f499f7b 100644 --- a/packages/reactive_ble_mobile/ios/reactive_ble_mobile.podspec +++ b/packages/reactive_ble_mobile/ios/reactive_ble_mobile.podspec @@ -16,7 +16,10 @@ Bluetooth Low Energy (BLE) Flutter plug-in s.dependency 'SwiftProtobuf', '~> 1.0' s.ios.deployment_target = '11.0' s.osx.deployment_target = '10.13' - s.pod_target_xcconfig = { 'GCC_PREPROCESSOR_DEFINITIONS' => '$(inherited) GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS=1' } - s.swift_version = '4.2' + s.pod_target_xcconfig = { + 'GCC_PREPROCESSOR_DEFINITIONS' => '$(inherited) GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS=1', + 'DEFINES_MODULE' => 'YES', + 'VALID_ARCHS[sdk=iphonesimulator*]' => 'x86_64' + } + s.swift_version = '5.0' end - diff --git a/packages/reactive_ble_mobile/lib/src/converter/args_to_protubuf_converter.dart b/packages/reactive_ble_mobile/lib/src/converter/args_to_protubuf_converter.dart index 5885adfe..e2df5451 100644 --- a/packages/reactive_ble_mobile/lib/src/converter/args_to_protubuf_converter.dart +++ b/packages/reactive_ble_mobile/lib/src/converter/args_to_protubuf_converter.dart @@ -20,6 +20,11 @@ abstract class ArgsToProtobufConverter { List value, ); + pb.WriteDescriptorRequest createWriteDescriptorRequest( + QualifiedDescriptor descriptor, + List value, + ); + pb.NotifyCharacteristicRequest createNotifyCharacteristicRequest( QualifiedCharacteristic characteristic, ); @@ -116,6 +121,23 @@ class ArgsToProtobufConverterImpl implements ArgsToProtobufConverter { return args; } + @override + pb.WriteDescriptorRequest createWriteDescriptorRequest( + QualifiedDescriptor descriptor, + List value, + ) { + final args = pb.WriteDescriptorRequest() + ..descriptor = (pb.DescriptorAddress() + ..deviceId = descriptor.deviceId + ..serviceUuid = (pb.Uuid()..data = descriptor.serviceId.data) + ..characteristicUuid = + (pb.Uuid()..data = descriptor.characteristicId.data) + ..descriptorUuid = (pb.Uuid()..data = descriptor.descriptorId.data)) + ..value = value; + + return args; + } + @override pb.NotifyCharacteristicRequest createNotifyCharacteristicRequest( QualifiedCharacteristic characteristic, diff --git a/packages/reactive_ble_mobile/lib/src/converter/protobuf_converter.dart b/packages/reactive_ble_mobile/lib/src/converter/protobuf_converter.dart index c9c505ae..a232d771 100644 --- a/packages/reactive_ble_mobile/lib/src/converter/protobuf_converter.dart +++ b/packages/reactive_ble_mobile/lib/src/converter/protobuf_converter.dart @@ -20,6 +20,8 @@ abstract class ProtobufConverter { WriteCharacteristicInfo writeCharacteristicInfoFrom(List data); + WriteDescriptorInfo writeDescriptorInfoFrom(List data); + ConnectionPriorityInfo connectionPriorityInfoFrom(List data); int mtuSizeFrom(List data) => @@ -143,6 +145,24 @@ class ProtobufConverterImpl implements ProtobufConverter { ); } + @override + WriteDescriptorInfo writeDescriptorInfoFrom(List data) { + final message = pb.WriteDescriptorInfo.fromBuffer(data); + + return WriteDescriptorInfo( + descriptor: qualifiedDescriptorFrom(message.descriptor), + result: resultFrom( + getValue: () => const Unit(), + failure: genericFailureFrom( + hasFailure: message.hasFailure(), + getFailure: () => message.failure, + codes: WriteDescriptorFailure.values, + fallback: (rawOrNull) => WriteDescriptorFailure.unknown, + ), + ), + ); + } + @override ConnectionPriorityInfo connectionPriorityInfoFrom(List data) { final message = pb.ChangeConnectionPriorityInfo.fromBuffer(data); @@ -171,6 +191,14 @@ class ProtobufConverterImpl implements ProtobufConverter { deviceId: message.deviceId, ); + QualifiedDescriptor qualifiedDescriptorFrom(pb.DescriptorAddress message) => + QualifiedDescriptor( + descriptorId: Uuid(message.descriptorUuid.data), + characteristicId: Uuid(message.characteristicUuid.data), + serviceId: Uuid(message.serviceUuid.data), + deviceId: message.deviceId, + ); + @visibleForTesting GenericFailure? genericFailureFrom({ required bool hasFailure, diff --git a/packages/reactive_ble_mobile/lib/src/generated/bledata.pb.dart b/packages/reactive_ble_mobile/lib/src/generated/bledata.pb.dart index b085f9ef..b0d5a6d9 100644 --- a/packages/reactive_ble_mobile/lib/src/generated/bledata.pb.dart +++ b/packages/reactive_ble_mobile/lib/src/generated/bledata.pb.dart @@ -10,33 +10,12 @@ import 'dart:core' as $core; import 'package:protobuf/protobuf.dart' as $pb; class ScanForDevicesRequest extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo( - const $core.bool.fromEnvironment('protobuf.omit_message_names') - ? '' - : 'ScanForDevicesRequest', - createEmptyInstance: create) - ..pc( - 1, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'serviceUuids', - $pb.PbFieldType.PM, - protoName: 'serviceUuids', - subBuilder: Uuid.create) - ..a<$core.int>( - 2, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'scanMode', - $pb.PbFieldType.O3, - protoName: 'scanMode') - ..aOB( - 3, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'requireLocationServicesEnabled', - protoName: 'requireLocationServicesEnabled') - ..hasRequiredFields = false; + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'ScanForDevicesRequest', createEmptyInstance: create) + ..pc(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'serviceUuids', $pb.PbFieldType.PM, protoName: 'serviceUuids', subBuilder: Uuid.create) + ..a<$core.int>(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'scanMode', $pb.PbFieldType.O3, protoName: 'scanMode') + ..aOB(3, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'requireLocationServicesEnabled', protoName: 'requireLocationServicesEnabled') + ..hasRequiredFields = false + ; ScanForDevicesRequest._() : super(); factory ScanForDevicesRequest({ @@ -56,33 +35,25 @@ class ScanForDevicesRequest extends $pb.GeneratedMessage { } return _result; } - 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); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' - 'Will be removed in next major version') - ScanForDevicesRequest clone() => - ScanForDevicesRequest()..mergeFromMessage(this); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' - 'Will be removed in next major version') - ScanForDevicesRequest copyWith( - void Function(ScanForDevicesRequest) updates) => - super.copyWith((message) => updates(message as ScanForDevicesRequest)) - as ScanForDevicesRequest; // ignore: deprecated_member_use + 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); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + ScanForDevicesRequest clone() => ScanForDevicesRequest()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + ScanForDevicesRequest copyWith(void Function(ScanForDevicesRequest) updates) => super.copyWith((message) => updates(message as ScanForDevicesRequest)) as ScanForDevicesRequest; // ignore: deprecated_member_use $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) @@ -91,10 +62,7 @@ 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) @@ -103,10 +71,7 @@ class ScanForDevicesRequest extends $pb.GeneratedMessage { @$pb.TagNumber(3) $core.bool get requireLocationServicesEnabled => $_getBF(2); @$pb.TagNumber(3) - set requireLocationServicesEnabled($core.bool v) { - $_setBool(2, v); - } - + set requireLocationServicesEnabled($core.bool v) { $_setBool(2, v); } @$pb.TagNumber(3) $core.bool hasRequireLocationServicesEnabled() => $_has(2); @$pb.TagNumber(3) @@ -114,57 +79,16 @@ class ScanForDevicesRequest extends $pb.GeneratedMessage { } class DeviceScanInfo extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo( - const $core.bool.fromEnvironment('protobuf.omit_message_names') - ? '' - : 'DeviceScanInfo', - createEmptyInstance: create) - ..aOS( - 1, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'id') - ..aOS( - 2, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'name') - ..aOM( - 3, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'failure', - subBuilder: GenericFailure.create) - ..pc( - 4, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'serviceData', - $pb.PbFieldType.PM, - protoName: 'serviceData', - subBuilder: ServiceDataEntry.create) - ..a<$core.int>( - 5, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'rssi', - $pb.PbFieldType.O3) - ..a<$core.List<$core.int>>( - 6, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'manufacturerData', - $pb.PbFieldType.OY, - protoName: 'manufacturerData') - ..pc( - 7, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'serviceUuids', - $pb.PbFieldType.PM, - protoName: 'serviceUuids', - subBuilder: Uuid.create) - ..hasRequiredFields = false; + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'DeviceScanInfo', createEmptyInstance: create) + ..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'id') + ..aOS(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'name') + ..aOM(3, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'failure', subBuilder: GenericFailure.create) + ..pc(4, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'serviceData', $pb.PbFieldType.PM, protoName: 'serviceData', subBuilder: ServiceDataEntry.create) + ..a<$core.int>(5, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'rssi', $pb.PbFieldType.O3) + ..a<$core.List<$core.int>>(6, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'manufacturerData', $pb.PbFieldType.OY, protoName: 'manufacturerData') + ..pc(7, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'serviceUuids', $pb.PbFieldType.PM, protoName: 'serviceUuids', subBuilder: Uuid.create) + ..hasRequiredFields = false + ; DeviceScanInfo._() : super(); factory DeviceScanInfo({ @@ -200,40 +124,31 @@ class DeviceScanInfo extends $pb.GeneratedMessage { } return _result; } - 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); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' - 'Will be removed in next major version') + 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); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') DeviceScanInfo clone() => DeviceScanInfo()..mergeFromMessage(this); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' - 'Will be removed in next major version') - DeviceScanInfo copyWith(void Function(DeviceScanInfo) updates) => - super.copyWith((message) => updates(message as DeviceScanInfo)) - as DeviceScanInfo; // ignore: deprecated_member_use + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + DeviceScanInfo copyWith(void Function(DeviceScanInfo) updates) => super.copyWith((message) => updates(message as DeviceScanInfo)) as DeviceScanInfo; // ignore: deprecated_member_use $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) @@ -242,10 +157,7 @@ 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) @@ -254,10 +166,7 @@ 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) @@ -271,10 +180,7 @@ 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) @@ -283,10 +189,7 @@ class DeviceScanInfo extends $pb.GeneratedMessage { @$pb.TagNumber(6) $core.List<$core.int> get manufacturerData => $_getN(5); @$pb.TagNumber(6) - set manufacturerData($core.List<$core.int> v) { - $_setBytes(5, v); - } - + set manufacturerData($core.List<$core.int> v) { $_setBytes(5, v); } @$pb.TagNumber(6) $core.bool hasManufacturerData() => $_has(5); @$pb.TagNumber(6) @@ -297,32 +200,12 @@ class DeviceScanInfo extends $pb.GeneratedMessage { } class ConnectToDeviceRequest extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo( - const $core.bool.fromEnvironment('protobuf.omit_message_names') - ? '' - : 'ConnectToDeviceRequest', - createEmptyInstance: create) - ..aOS( - 1, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'deviceId', - protoName: 'deviceId') - ..aOM( - 2, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'servicesWithCharacteristicsToDiscover', - protoName: 'servicesWithCharacteristicsToDiscover', - subBuilder: ServicesWithCharacteristics.create) - ..a<$core.int>( - 3, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'timeoutInMs', - $pb.PbFieldType.O3, - protoName: 'timeoutInMs') - ..hasRequiredFields = false; + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'ConnectToDeviceRequest', createEmptyInstance: create) + ..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'deviceId', protoName: 'deviceId') + ..aOM(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'servicesWithCharacteristicsToDiscover', protoName: 'servicesWithCharacteristicsToDiscover', subBuilder: ServicesWithCharacteristics.create) + ..a<$core.int>(3, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'timeoutInMs', $pb.PbFieldType.O3, protoName: 'timeoutInMs') + ..hasRequiredFields = false + ; ConnectToDeviceRequest._() : super(); factory ConnectToDeviceRequest({ @@ -335,78 +218,58 @@ class ConnectToDeviceRequest extends $pb.GeneratedMessage { _result.deviceId = deviceId; } if (servicesWithCharacteristicsToDiscover != null) { - _result.servicesWithCharacteristicsToDiscover = - servicesWithCharacteristicsToDiscover; + _result.servicesWithCharacteristicsToDiscover = servicesWithCharacteristicsToDiscover; } if (timeoutInMs != null) { _result.timeoutInMs = timeoutInMs; } return _result; } - 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); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' - 'Will be removed in next major version') - ConnectToDeviceRequest clone() => - ConnectToDeviceRequest()..mergeFromMessage(this); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' - 'Will be removed in next major version') - ConnectToDeviceRequest copyWith( - void Function(ConnectToDeviceRequest) updates) => - super.copyWith((message) => updates(message as ConnectToDeviceRequest)) - as ConnectToDeviceRequest; // ignore: deprecated_member_use + 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); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + ConnectToDeviceRequest clone() => ConnectToDeviceRequest()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + ConnectToDeviceRequest copyWith(void Function(ConnectToDeviceRequest) updates) => super.copyWith((message) => updates(message as ConnectToDeviceRequest)) as ConnectToDeviceRequest; // ignore: deprecated_member_use $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) @@ -414,30 +277,12 @@ class ConnectToDeviceRequest extends $pb.GeneratedMessage { } class DeviceInfo extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo( - const $core.bool.fromEnvironment('protobuf.omit_message_names') - ? '' - : 'DeviceInfo', - createEmptyInstance: create) - ..aOS( - 1, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'id') - ..a<$core.int>( - 2, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'connectionState', - $pb.PbFieldType.O3, - protoName: 'connectionState') - ..aOM( - 3, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'failure', - subBuilder: GenericFailure.create) - ..hasRequiredFields = false; + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'DeviceInfo', createEmptyInstance: create) + ..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'id') + ..a<$core.int>(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'connectionState', $pb.PbFieldType.O3, protoName: 'connectionState') + ..aOM(3, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'failure', subBuilder: GenericFailure.create) + ..hasRequiredFields = false + ; DeviceInfo._() : super(); factory DeviceInfo({ @@ -457,39 +302,31 @@ class DeviceInfo extends $pb.GeneratedMessage { } return _result; } - 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); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' - 'Will be removed in next major version') + 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); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') DeviceInfo clone() => DeviceInfo()..mergeFromMessage(this); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' - 'Will be removed in next major version') - DeviceInfo copyWith(void Function(DeviceInfo) updates) => - super.copyWith((message) => updates(message as DeviceInfo)) - as DeviceInfo; // ignore: deprecated_member_use + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + DeviceInfo copyWith(void Function(DeviceInfo) updates) => super.copyWith((message) => updates(message as DeviceInfo)) as DeviceInfo; // ignore: deprecated_member_use $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) @@ -498,10 +335,7 @@ 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) @@ -510,10 +344,7 @@ 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) @@ -523,18 +354,10 @@ class DeviceInfo extends $pb.GeneratedMessage { } class DisconnectFromDeviceRequest extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo( - const $core.bool.fromEnvironment('protobuf.omit_message_names') - ? '' - : 'DisconnectFromDeviceRequest', - createEmptyInstance: create) - ..aOS( - 1, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'deviceId', - protoName: 'deviceId') - ..hasRequiredFields = false; + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'DisconnectFromDeviceRequest', createEmptyInstance: create) + ..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'deviceId', protoName: 'deviceId') + ..hasRequiredFields = false + ; DisconnectFromDeviceRequest._() : super(); factory DisconnectFromDeviceRequest({ @@ -546,44 +369,31 @@ class DisconnectFromDeviceRequest extends $pb.GeneratedMessage { } return _result; } - 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); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' - 'Will be removed in next major version') - DisconnectFromDeviceRequest clone() => - DisconnectFromDeviceRequest()..mergeFromMessage(this); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' - 'Will be removed in next major version') - DisconnectFromDeviceRequest copyWith( - void Function(DisconnectFromDeviceRequest) updates) => - super.copyWith( - (message) => updates(message as DisconnectFromDeviceRequest)) - as DisconnectFromDeviceRequest; // ignore: deprecated_member_use + 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); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + DisconnectFromDeviceRequest clone() => DisconnectFromDeviceRequest()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + DisconnectFromDeviceRequest copyWith(void Function(DisconnectFromDeviceRequest) updates) => super.copyWith((message) => updates(message as DisconnectFromDeviceRequest)) as DisconnectFromDeviceRequest; // ignore: deprecated_member_use $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) @@ -591,18 +401,10 @@ class DisconnectFromDeviceRequest extends $pb.GeneratedMessage { } class ClearGattCacheRequest extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo( - const $core.bool.fromEnvironment('protobuf.omit_message_names') - ? '' - : 'ClearGattCacheRequest', - createEmptyInstance: create) - ..aOS( - 1, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'deviceId', - protoName: 'deviceId') - ..hasRequiredFields = false; + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'ClearGattCacheRequest', createEmptyInstance: create) + ..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'deviceId', protoName: 'deviceId') + ..hasRequiredFields = false + ; ClearGattCacheRequest._() : super(); factory ClearGattCacheRequest({ @@ -614,42 +416,31 @@ class ClearGattCacheRequest extends $pb.GeneratedMessage { } return _result; } - 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); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' - 'Will be removed in next major version') - ClearGattCacheRequest clone() => - ClearGattCacheRequest()..mergeFromMessage(this); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' - 'Will be removed in next major version') - ClearGattCacheRequest copyWith( - void Function(ClearGattCacheRequest) updates) => - super.copyWith((message) => updates(message as ClearGattCacheRequest)) - as ClearGattCacheRequest; // ignore: deprecated_member_use + 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); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + ClearGattCacheRequest clone() => ClearGattCacheRequest()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + ClearGattCacheRequest copyWith(void Function(ClearGattCacheRequest) updates) => super.copyWith((message) => updates(message as ClearGattCacheRequest)) as ClearGattCacheRequest; // ignore: deprecated_member_use $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) @@ -657,18 +448,10 @@ class ClearGattCacheRequest extends $pb.GeneratedMessage { } class ClearGattCacheInfo extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo( - const $core.bool.fromEnvironment('protobuf.omit_message_names') - ? '' - : 'ClearGattCacheInfo', - createEmptyInstance: create) - ..aOM( - 1, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'failure', - subBuilder: GenericFailure.create) - ..hasRequiredFields = false; + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'ClearGattCacheInfo', createEmptyInstance: create) + ..aOM(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'failure', subBuilder: GenericFailure.create) + ..hasRequiredFields = false + ; ClearGattCacheInfo._() : super(); factory ClearGattCacheInfo({ @@ -680,40 +463,31 @@ class ClearGattCacheInfo extends $pb.GeneratedMessage { } return _result; } - 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); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' - 'Will be removed in next major version') + 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); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') ClearGattCacheInfo clone() => ClearGattCacheInfo()..mergeFromMessage(this); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' - 'Will be removed in next major version') - ClearGattCacheInfo copyWith(void Function(ClearGattCacheInfo) updates) => - super.copyWith((message) => updates(message as ClearGattCacheInfo)) - as ClearGattCacheInfo; // ignore: deprecated_member_use + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + ClearGattCacheInfo copyWith(void Function(ClearGattCacheInfo) updates) => super.copyWith((message) => updates(message as ClearGattCacheInfo)) as ClearGattCacheInfo; // ignore: deprecated_member_use $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) @@ -723,18 +497,10 @@ class ClearGattCacheInfo extends $pb.GeneratedMessage { } class NotifyCharacteristicRequest extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo( - const $core.bool.fromEnvironment('protobuf.omit_message_names') - ? '' - : 'NotifyCharacteristicRequest', - createEmptyInstance: create) - ..aOM( - 1, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'characteristic', - subBuilder: CharacteristicAddress.create) - ..hasRequiredFields = false; + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'NotifyCharacteristicRequest', createEmptyInstance: create) + ..aOM(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'characteristic', subBuilder: CharacteristicAddress.create) + ..hasRequiredFields = false + ; NotifyCharacteristicRequest._() : super(); factory NotifyCharacteristicRequest({ @@ -746,44 +512,31 @@ class NotifyCharacteristicRequest extends $pb.GeneratedMessage { } return _result; } - 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); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' - 'Will be removed in next major version') - NotifyCharacteristicRequest clone() => - NotifyCharacteristicRequest()..mergeFromMessage(this); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' - 'Will be removed in next major version') - NotifyCharacteristicRequest copyWith( - void Function(NotifyCharacteristicRequest) updates) => - super.copyWith( - (message) => updates(message as NotifyCharacteristicRequest)) - as NotifyCharacteristicRequest; // ignore: deprecated_member_use + 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); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + NotifyCharacteristicRequest clone() => NotifyCharacteristicRequest()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + NotifyCharacteristicRequest copyWith(void Function(NotifyCharacteristicRequest) updates) => super.copyWith((message) => updates(message as NotifyCharacteristicRequest)) as NotifyCharacteristicRequest; // ignore: deprecated_member_use $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) @@ -793,18 +546,10 @@ class NotifyCharacteristicRequest extends $pb.GeneratedMessage { } class NotifyNoMoreCharacteristicRequest extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo( - const $core.bool.fromEnvironment('protobuf.omit_message_names') - ? '' - : 'NotifyNoMoreCharacteristicRequest', - createEmptyInstance: create) - ..aOM( - 1, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'characteristic', - subBuilder: CharacteristicAddress.create) - ..hasRequiredFields = false; + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'NotifyNoMoreCharacteristicRequest', createEmptyInstance: create) + ..aOM(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'characteristic', subBuilder: CharacteristicAddress.create) + ..hasRequiredFields = false + ; NotifyNoMoreCharacteristicRequest._() : super(); factory NotifyNoMoreCharacteristicRequest({ @@ -816,45 +561,31 @@ class NotifyNoMoreCharacteristicRequest extends $pb.GeneratedMessage { } return _result; } - 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); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' - 'Will be removed in next major version') - NotifyNoMoreCharacteristicRequest clone() => - NotifyNoMoreCharacteristicRequest()..mergeFromMessage(this); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' - 'Will be removed in next major version') - NotifyNoMoreCharacteristicRequest copyWith( - void Function(NotifyNoMoreCharacteristicRequest) updates) => - super.copyWith((message) => - updates(message as NotifyNoMoreCharacteristicRequest)) - as NotifyNoMoreCharacteristicRequest; // ignore: deprecated_member_use + 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); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + NotifyNoMoreCharacteristicRequest clone() => NotifyNoMoreCharacteristicRequest()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + NotifyNoMoreCharacteristicRequest copyWith(void Function(NotifyNoMoreCharacteristicRequest) updates) => super.copyWith((message) => updates(message as NotifyNoMoreCharacteristicRequest)) as NotifyNoMoreCharacteristicRequest; // ignore: deprecated_member_use $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) @@ -864,18 +595,10 @@ class NotifyNoMoreCharacteristicRequest extends $pb.GeneratedMessage { } class ReadCharacteristicRequest extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo( - const $core.bool.fromEnvironment('protobuf.omit_message_names') - ? '' - : 'ReadCharacteristicRequest', - createEmptyInstance: create) - ..aOM( - 1, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'characteristic', - subBuilder: CharacteristicAddress.create) - ..hasRequiredFields = false; + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'ReadCharacteristicRequest', createEmptyInstance: create) + ..aOM(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'characteristic', subBuilder: CharacteristicAddress.create) + ..hasRequiredFields = false + ; ReadCharacteristicRequest._() : super(); factory ReadCharacteristicRequest({ @@ -887,42 +610,31 @@ class ReadCharacteristicRequest extends $pb.GeneratedMessage { } return _result; } - 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); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' - 'Will be removed in next major version') - ReadCharacteristicRequest clone() => - ReadCharacteristicRequest()..mergeFromMessage(this); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' - 'Will be removed in next major version') - ReadCharacteristicRequest copyWith( - void Function(ReadCharacteristicRequest) updates) => - super.copyWith((message) => updates(message as ReadCharacteristicRequest)) - as ReadCharacteristicRequest; // ignore: deprecated_member_use + 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); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + ReadCharacteristicRequest clone() => ReadCharacteristicRequest()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + ReadCharacteristicRequest copyWith(void Function(ReadCharacteristicRequest) updates) => super.copyWith((message) => updates(message as ReadCharacteristicRequest)) as ReadCharacteristicRequest; // ignore: deprecated_member_use $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) @@ -932,30 +644,12 @@ class ReadCharacteristicRequest extends $pb.GeneratedMessage { } class CharacteristicValueInfo extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo( - const $core.bool.fromEnvironment('protobuf.omit_message_names') - ? '' - : 'CharacteristicValueInfo', - createEmptyInstance: create) - ..aOM( - 1, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'characteristic', - subBuilder: CharacteristicAddress.create) - ..a<$core.List<$core.int>>( - 2, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'value', - $pb.PbFieldType.OY) - ..aOM( - 3, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'failure', - subBuilder: GenericFailure.create) - ..hasRequiredFields = false; + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'CharacteristicValueInfo', createEmptyInstance: create) + ..aOM(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'characteristic', subBuilder: CharacteristicAddress.create) + ..a<$core.List<$core.int>>(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'value', $pb.PbFieldType.OY) + ..aOM(3, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'failure', subBuilder: GenericFailure.create) + ..hasRequiredFields = false + ; CharacteristicValueInfo._() : super(); factory CharacteristicValueInfo({ @@ -975,42 +669,31 @@ class CharacteristicValueInfo extends $pb.GeneratedMessage { } return _result; } - 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); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' - 'Will be removed in next major version') - CharacteristicValueInfo clone() => - CharacteristicValueInfo()..mergeFromMessage(this); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' - 'Will be removed in next major version') - CharacteristicValueInfo copyWith( - void Function(CharacteristicValueInfo) updates) => - super.copyWith((message) => updates(message as CharacteristicValueInfo)) - as CharacteristicValueInfo; // ignore: deprecated_member_use + 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); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + CharacteristicValueInfo clone() => CharacteristicValueInfo()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + CharacteristicValueInfo copyWith(void Function(CharacteristicValueInfo) updates) => super.copyWith((message) => updates(message as CharacteristicValueInfo)) as CharacteristicValueInfo; // ignore: deprecated_member_use $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) @@ -1021,10 +704,7 @@ 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) @@ -1033,10 +713,7 @@ 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) @@ -1046,24 +723,11 @@ class CharacteristicValueInfo extends $pb.GeneratedMessage { } class WriteCharacteristicRequest extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo( - const $core.bool.fromEnvironment('protobuf.omit_message_names') - ? '' - : 'WriteCharacteristicRequest', - createEmptyInstance: create) - ..aOM( - 1, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'characteristic', - subBuilder: CharacteristicAddress.create) - ..a<$core.List<$core.int>>( - 2, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'value', - $pb.PbFieldType.OY) - ..hasRequiredFields = false; + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'WriteCharacteristicRequest', createEmptyInstance: create) + ..aOM(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'characteristic', subBuilder: CharacteristicAddress.create) + ..a<$core.List<$core.int>>(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'value', $pb.PbFieldType.OY) + ..hasRequiredFields = false + ; WriteCharacteristicRequest._() : super(); factory WriteCharacteristicRequest({ @@ -1079,43 +743,31 @@ class WriteCharacteristicRequest extends $pb.GeneratedMessage { } return _result; } - 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); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' - 'Will be removed in next major version') - WriteCharacteristicRequest clone() => - WriteCharacteristicRequest()..mergeFromMessage(this); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' - 'Will be removed in next major version') - WriteCharacteristicRequest copyWith( - void Function(WriteCharacteristicRequest) updates) => - super.copyWith( - (message) => updates(message as WriteCharacteristicRequest)) - as WriteCharacteristicRequest; // ignore: deprecated_member_use + 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); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + WriteCharacteristicRequest clone() => WriteCharacteristicRequest()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + WriteCharacteristicRequest copyWith(void Function(WriteCharacteristicRequest) updates) => super.copyWith((message) => updates(message as WriteCharacteristicRequest)) as WriteCharacteristicRequest; // ignore: deprecated_member_use $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) @@ -1126,10 +778,7 @@ 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) @@ -1137,24 +786,11 @@ class WriteCharacteristicRequest extends $pb.GeneratedMessage { } class WriteCharacteristicInfo extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo( - const $core.bool.fromEnvironment('protobuf.omit_message_names') - ? '' - : 'WriteCharacteristicInfo', - createEmptyInstance: create) - ..aOM( - 1, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'characteristic', - subBuilder: CharacteristicAddress.create) - ..aOM( - 3, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'failure', - subBuilder: GenericFailure.create) - ..hasRequiredFields = false; + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'WriteCharacteristicInfo', createEmptyInstance: create) + ..aOM(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'characteristic', subBuilder: CharacteristicAddress.create) + ..aOM(3, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'failure', subBuilder: GenericFailure.create) + ..hasRequiredFields = false + ; WriteCharacteristicInfo._() : super(); factory WriteCharacteristicInfo({ @@ -1170,42 +806,31 @@ class WriteCharacteristicInfo extends $pb.GeneratedMessage { } return _result; } - 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); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' - 'Will be removed in next major version') - WriteCharacteristicInfo clone() => - WriteCharacteristicInfo()..mergeFromMessage(this); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' - 'Will be removed in next major version') - WriteCharacteristicInfo copyWith( - void Function(WriteCharacteristicInfo) updates) => - super.copyWith((message) => updates(message as WriteCharacteristicInfo)) - as WriteCharacteristicInfo; // ignore: deprecated_member_use + 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); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + WriteCharacteristicInfo clone() => WriteCharacteristicInfo()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + WriteCharacteristicInfo copyWith(void Function(WriteCharacteristicInfo) updates) => super.copyWith((message) => updates(message as WriteCharacteristicInfo)) as WriteCharacteristicInfo; // ignore: deprecated_member_use $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) @@ -1216,10 +841,135 @@ 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) + void clearFailure() => clearField(3); + @$pb.TagNumber(3) + GenericFailure ensureFailure() => $_ensure(1); +} + +class WriteDescriptorRequest extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'WriteDescriptorRequest', createEmptyInstance: create) + ..aOM(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'descriptor', subBuilder: DescriptorAddress.create) + ..a<$core.List<$core.int>>(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'value', $pb.PbFieldType.OY) + ..hasRequiredFields = false + ; + + WriteDescriptorRequest._() : super(); + factory WriteDescriptorRequest({ + DescriptorAddress? descriptor, + $core.List<$core.int>? value, + }) { + final _result = create(); + if (descriptor != null) { + _result.descriptor = descriptor; + } + if (value != null) { + _result.value = value; + } + return _result; } + factory WriteDescriptorRequest.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory WriteDescriptorRequest.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + WriteDescriptorRequest clone() => WriteDescriptorRequest()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + WriteDescriptorRequest copyWith(void Function(WriteDescriptorRequest) updates) => super.copyWith((message) => updates(message as WriteDescriptorRequest)) as WriteDescriptorRequest; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static WriteDescriptorRequest create() => WriteDescriptorRequest._(); + WriteDescriptorRequest createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static WriteDescriptorRequest getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static WriteDescriptorRequest? _defaultInstance; + + @$pb.TagNumber(1) + DescriptorAddress get descriptor => $_getN(0); + @$pb.TagNumber(1) + set descriptor(DescriptorAddress v) { setField(1, v); } + @$pb.TagNumber(1) + $core.bool hasDescriptor() => $_has(0); + @$pb.TagNumber(1) + void clearDescriptor() => clearField(1); + @$pb.TagNumber(1) + DescriptorAddress ensureDescriptor() => $_ensure(0); + @$pb.TagNumber(2) + $core.List<$core.int> get value => $_getN(1); + @$pb.TagNumber(2) + set value($core.List<$core.int> v) { $_setBytes(1, v); } + @$pb.TagNumber(2) + $core.bool hasValue() => $_has(1); + @$pb.TagNumber(2) + void clearValue() => clearField(2); +} + +class WriteDescriptorInfo extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'WriteDescriptorInfo', createEmptyInstance: create) + ..aOM(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'descriptor', subBuilder: DescriptorAddress.create) + ..aOM(3, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'failure', subBuilder: GenericFailure.create) + ..hasRequiredFields = false + ; + + WriteDescriptorInfo._() : super(); + factory WriteDescriptorInfo({ + DescriptorAddress? descriptor, + GenericFailure? failure, + }) { + final _result = create(); + if (descriptor != null) { + _result.descriptor = descriptor; + } + if (failure != null) { + _result.failure = failure; + } + return _result; + } + factory WriteDescriptorInfo.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory WriteDescriptorInfo.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + WriteDescriptorInfo clone() => WriteDescriptorInfo()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + WriteDescriptorInfo copyWith(void Function(WriteDescriptorInfo) updates) => super.copyWith((message) => updates(message as WriteDescriptorInfo)) as WriteDescriptorInfo; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static WriteDescriptorInfo create() => WriteDescriptorInfo._(); + WriteDescriptorInfo createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static WriteDescriptorInfo getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static WriteDescriptorInfo? _defaultInstance; + + @$pb.TagNumber(1) + DescriptorAddress get descriptor => $_getN(0); + @$pb.TagNumber(1) + set descriptor(DescriptorAddress v) { setField(1, v); } + @$pb.TagNumber(1) + $core.bool hasDescriptor() => $_has(0); + @$pb.TagNumber(1) + void clearDescriptor() => clearField(1); + @$pb.TagNumber(1) + DescriptorAddress ensureDescriptor() => $_ensure(0); + + @$pb.TagNumber(3) + GenericFailure get failure => $_getN(1); + @$pb.TagNumber(3) + set failure(GenericFailure v) { setField(3, v); } @$pb.TagNumber(3) $core.bool hasFailure() => $_has(1); @$pb.TagNumber(3) @@ -1229,25 +979,11 @@ class WriteCharacteristicInfo extends $pb.GeneratedMessage { } class NegotiateMtuRequest extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo( - const $core.bool.fromEnvironment('protobuf.omit_message_names') - ? '' - : 'NegotiateMtuRequest', - createEmptyInstance: create) - ..aOS( - 1, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'deviceId', - protoName: 'deviceId') - ..a<$core.int>( - 2, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'mtuSize', - $pb.PbFieldType.O3, - protoName: 'mtuSize') - ..hasRequiredFields = false; + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'NegotiateMtuRequest', createEmptyInstance: create) + ..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'deviceId', protoName: 'deviceId') + ..a<$core.int>(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'mtuSize', $pb.PbFieldType.O3, protoName: 'mtuSize') + ..hasRequiredFields = false + ; NegotiateMtuRequest._() : super(); factory NegotiateMtuRequest({ @@ -1263,40 +999,31 @@ class NegotiateMtuRequest extends $pb.GeneratedMessage { } return _result; } - 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); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' - 'Will be removed in next major version') + 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); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') NegotiateMtuRequest clone() => NegotiateMtuRequest()..mergeFromMessage(this); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' - 'Will be removed in next major version') - NegotiateMtuRequest copyWith(void Function(NegotiateMtuRequest) updates) => - super.copyWith((message) => updates(message as NegotiateMtuRequest)) - as NegotiateMtuRequest; // ignore: deprecated_member_use + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + NegotiateMtuRequest copyWith(void Function(NegotiateMtuRequest) updates) => super.copyWith((message) => updates(message as NegotiateMtuRequest)) as NegotiateMtuRequest; // ignore: deprecated_member_use $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) @@ -1305,10 +1032,7 @@ 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) @@ -1316,31 +1040,12 @@ class NegotiateMtuRequest extends $pb.GeneratedMessage { } class NegotiateMtuInfo extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo( - const $core.bool.fromEnvironment('protobuf.omit_message_names') - ? '' - : 'NegotiateMtuInfo', - createEmptyInstance: create) - ..aOS( - 1, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'deviceId', - protoName: 'deviceId') - ..a<$core.int>( - 2, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'mtuSize', - $pb.PbFieldType.O3, - protoName: 'mtuSize') - ..aOM( - 3, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'failure', - subBuilder: GenericFailure.create) - ..hasRequiredFields = false; + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'NegotiateMtuInfo', createEmptyInstance: create) + ..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'deviceId', protoName: 'deviceId') + ..a<$core.int>(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'mtuSize', $pb.PbFieldType.O3, protoName: 'mtuSize') + ..aOM(3, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'failure', subBuilder: GenericFailure.create) + ..hasRequiredFields = false + ; NegotiateMtuInfo._() : super(); factory NegotiateMtuInfo({ @@ -1360,40 +1065,31 @@ class NegotiateMtuInfo extends $pb.GeneratedMessage { } return _result; } - 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); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' - 'Will be removed in next major version') + 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); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') NegotiateMtuInfo clone() => NegotiateMtuInfo()..mergeFromMessage(this); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' - 'Will be removed in next major version') - NegotiateMtuInfo copyWith(void Function(NegotiateMtuInfo) updates) => - super.copyWith((message) => updates(message as NegotiateMtuInfo)) - as NegotiateMtuInfo; // ignore: deprecated_member_use + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + NegotiateMtuInfo copyWith(void Function(NegotiateMtuInfo) updates) => super.copyWith((message) => updates(message as NegotiateMtuInfo)) as NegotiateMtuInfo; // ignore: deprecated_member_use $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) @@ -1402,10 +1098,7 @@ 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) @@ -1414,10 +1107,7 @@ 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) @@ -1427,18 +1117,10 @@ class NegotiateMtuInfo extends $pb.GeneratedMessage { } class BleStatusInfo extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo( - const $core.bool.fromEnvironment('protobuf.omit_message_names') - ? '' - : 'BleStatusInfo', - createEmptyInstance: create) - ..a<$core.int>( - 1, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'status', - $pb.PbFieldType.O3) - ..hasRequiredFields = false; + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'BleStatusInfo', createEmptyInstance: create) + ..a<$core.int>(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'status', $pb.PbFieldType.O3) + ..hasRequiredFields = false + ; BleStatusInfo._() : super(); factory BleStatusInfo({ @@ -1450,40 +1132,31 @@ class BleStatusInfo extends $pb.GeneratedMessage { } return _result; } - 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); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' - 'Will be removed in next major version') + 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); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') BleStatusInfo clone() => BleStatusInfo()..mergeFromMessage(this); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' - 'Will be removed in next major version') - BleStatusInfo copyWith(void Function(BleStatusInfo) updates) => - super.copyWith((message) => updates(message as BleStatusInfo)) - as BleStatusInfo; // ignore: deprecated_member_use + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + BleStatusInfo copyWith(void Function(BleStatusInfo) updates) => super.copyWith((message) => updates(message as BleStatusInfo)) as BleStatusInfo; // ignore: deprecated_member_use $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) @@ -1491,24 +1164,11 @@ class BleStatusInfo extends $pb.GeneratedMessage { } class ChangeConnectionPriorityRequest extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo( - const $core.bool.fromEnvironment('protobuf.omit_message_names') - ? '' - : 'ChangeConnectionPriorityRequest', - createEmptyInstance: create) - ..aOS( - 1, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'deviceId', - protoName: 'deviceId') - ..a<$core.int>( - 2, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'priority', - $pb.PbFieldType.O3) - ..hasRequiredFields = false; + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'ChangeConnectionPriorityRequest', createEmptyInstance: create) + ..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'deviceId', protoName: 'deviceId') + ..a<$core.int>(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'priority', $pb.PbFieldType.O3) + ..hasRequiredFields = false + ; ChangeConnectionPriorityRequest._() : super(); factory ChangeConnectionPriorityRequest({ @@ -1524,45 +1184,31 @@ class ChangeConnectionPriorityRequest extends $pb.GeneratedMessage { } return _result; } - 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); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' - 'Will be removed in next major version') - ChangeConnectionPriorityRequest clone() => - ChangeConnectionPriorityRequest()..mergeFromMessage(this); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' - 'Will be removed in next major version') - ChangeConnectionPriorityRequest copyWith( - void Function(ChangeConnectionPriorityRequest) updates) => - super.copyWith( - (message) => updates(message as ChangeConnectionPriorityRequest)) - as ChangeConnectionPriorityRequest; // ignore: deprecated_member_use + 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); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + ChangeConnectionPriorityRequest clone() => ChangeConnectionPriorityRequest()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + ChangeConnectionPriorityRequest copyWith(void Function(ChangeConnectionPriorityRequest) updates) => super.copyWith((message) => updates(message as ChangeConnectionPriorityRequest)) as ChangeConnectionPriorityRequest; // ignore: deprecated_member_use $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) @@ -1571,10 +1217,7 @@ 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) @@ -1582,24 +1225,11 @@ class ChangeConnectionPriorityRequest extends $pb.GeneratedMessage { } class ChangeConnectionPriorityInfo extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo( - const $core.bool.fromEnvironment('protobuf.omit_message_names') - ? '' - : 'ChangeConnectionPriorityInfo', - createEmptyInstance: create) - ..aOS( - 1, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'deviceId', - protoName: 'deviceId') - ..aOM( - 2, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'failure', - subBuilder: GenericFailure.create) - ..hasRequiredFields = false; + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'ChangeConnectionPriorityInfo', createEmptyInstance: create) + ..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'deviceId', protoName: 'deviceId') + ..aOM(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'failure', subBuilder: GenericFailure.create) + ..hasRequiredFields = false + ; ChangeConnectionPriorityInfo._() : super(); factory ChangeConnectionPriorityInfo({ @@ -1615,44 +1245,31 @@ class ChangeConnectionPriorityInfo extends $pb.GeneratedMessage { } return _result; } - 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); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' - 'Will be removed in next major version') - ChangeConnectionPriorityInfo clone() => - ChangeConnectionPriorityInfo()..mergeFromMessage(this); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' - 'Will be removed in next major version') - ChangeConnectionPriorityInfo copyWith( - void Function(ChangeConnectionPriorityInfo) updates) => - super.copyWith( - (message) => updates(message as ChangeConnectionPriorityInfo)) - as ChangeConnectionPriorityInfo; // ignore: deprecated_member_use + 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); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + ChangeConnectionPriorityInfo clone() => ChangeConnectionPriorityInfo()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + ChangeConnectionPriorityInfo copyWith(void Function(ChangeConnectionPriorityInfo) updates) => super.copyWith((message) => updates(message as ChangeConnectionPriorityInfo)) as ChangeConnectionPriorityInfo; // ignore: deprecated_member_use $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) @@ -1661,10 +1278,7 @@ 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) @@ -1674,32 +1288,12 @@ class ChangeConnectionPriorityInfo extends $pb.GeneratedMessage { } class CharacteristicAddress extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo( - const $core.bool.fromEnvironment('protobuf.omit_message_names') - ? '' - : 'CharacteristicAddress', - createEmptyInstance: create) - ..aOS( - 1, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'deviceId', - protoName: 'deviceId') - ..aOM( - 2, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'serviceUuid', - protoName: 'serviceUuid', - subBuilder: Uuid.create) - ..aOM( - 3, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'characteristicUuid', - protoName: 'characteristicUuid', - subBuilder: Uuid.create) - ..hasRequiredFields = false; + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'CharacteristicAddress', createEmptyInstance: create) + ..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'deviceId', protoName: 'deviceId') + ..aOM(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'serviceUuid', protoName: 'serviceUuid', subBuilder: Uuid.create) + ..aOM(3, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'characteristicUuid', protoName: 'characteristicUuid', subBuilder: Uuid.create) + ..hasRequiredFields = false + ; CharacteristicAddress._() : super(); factory CharacteristicAddress({ @@ -1719,42 +1313,31 @@ class CharacteristicAddress extends $pb.GeneratedMessage { } return _result; } - 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); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' - 'Will be removed in next major version') - CharacteristicAddress clone() => - CharacteristicAddress()..mergeFromMessage(this); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' - 'Will be removed in next major version') - CharacteristicAddress copyWith( - void Function(CharacteristicAddress) updates) => - super.copyWith((message) => updates(message as CharacteristicAddress)) - as CharacteristicAddress; // ignore: deprecated_member_use + 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); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + CharacteristicAddress clone() => CharacteristicAddress()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + CharacteristicAddress copyWith(void Function(CharacteristicAddress) updates) => super.copyWith((message) => updates(message as CharacteristicAddress)) as CharacteristicAddress; // ignore: deprecated_member_use $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) @@ -1763,10 +1346,7 @@ 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) @@ -1777,38 +1357,116 @@ 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) + void clearCharacteristicUuid() => clearField(3); + @$pb.TagNumber(3) + Uuid ensureCharacteristicUuid() => $_ensure(2); +} + +class DescriptorAddress extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'DescriptorAddress', createEmptyInstance: create) + ..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'deviceId', protoName: 'deviceId') + ..aOM(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'serviceUuid', protoName: 'serviceUuid', subBuilder: Uuid.create) + ..aOM(3, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'characteristicUuid', protoName: 'characteristicUuid', subBuilder: Uuid.create) + ..aOM(4, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'descriptorUuid', protoName: 'descriptorUuid', subBuilder: Uuid.create) + ..hasRequiredFields = false + ; + + DescriptorAddress._() : super(); + factory DescriptorAddress({ + $core.String? deviceId, + Uuid? serviceUuid, + Uuid? characteristicUuid, + Uuid? descriptorUuid, + }) { + final _result = create(); + if (deviceId != null) { + _result.deviceId = deviceId; + } + if (serviceUuid != null) { + _result.serviceUuid = serviceUuid; + } + if (characteristicUuid != null) { + _result.characteristicUuid = characteristicUuid; + } + if (descriptorUuid != null) { + _result.descriptorUuid = descriptorUuid; + } + return _result; } + factory DescriptorAddress.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory DescriptorAddress.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + DescriptorAddress clone() => DescriptorAddress()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + DescriptorAddress copyWith(void Function(DescriptorAddress) updates) => super.copyWith((message) => updates(message as DescriptorAddress)) as DescriptorAddress; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static DescriptorAddress create() => DescriptorAddress._(); + DescriptorAddress createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static DescriptorAddress getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static DescriptorAddress? _defaultInstance; + @$pb.TagNumber(1) + $core.String get deviceId => $_getSZ(0); + @$pb.TagNumber(1) + 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) + Uuid get serviceUuid => $_getN(1); + @$pb.TagNumber(2) + set serviceUuid(Uuid v) { setField(2, v); } + @$pb.TagNumber(2) + $core.bool hasServiceUuid() => $_has(1); + @$pb.TagNumber(2) + void clearServiceUuid() => clearField(2); + @$pb.TagNumber(2) + Uuid ensureServiceUuid() => $_ensure(1); + + @$pb.TagNumber(3) + Uuid get characteristicUuid => $_getN(2); + @$pb.TagNumber(3) + set characteristicUuid(Uuid v) { setField(3, v); } @$pb.TagNumber(3) $core.bool hasCharacteristicUuid() => $_has(2); @$pb.TagNumber(3) void clearCharacteristicUuid() => clearField(3); @$pb.TagNumber(3) Uuid ensureCharacteristicUuid() => $_ensure(2); + + @$pb.TagNumber(4) + Uuid get descriptorUuid => $_getN(3); + @$pb.TagNumber(4) + set descriptorUuid(Uuid v) { setField(4, v); } + @$pb.TagNumber(4) + $core.bool hasDescriptorUuid() => $_has(3); + @$pb.TagNumber(4) + void clearDescriptorUuid() => clearField(4); + @$pb.TagNumber(4) + Uuid ensureDescriptorUuid() => $_ensure(3); } class ServiceDataEntry extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo( - const $core.bool.fromEnvironment('protobuf.omit_message_names') - ? '' - : 'ServiceDataEntry', - createEmptyInstance: create) - ..aOM( - 1, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'serviceUuid', - protoName: 'serviceUuid', - subBuilder: Uuid.create) - ..a<$core.List<$core.int>>( - 2, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'data', - $pb.PbFieldType.OY) - ..hasRequiredFields = false; + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'ServiceDataEntry', createEmptyInstance: create) + ..aOM(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'serviceUuid', protoName: 'serviceUuid', subBuilder: Uuid.create) + ..a<$core.List<$core.int>>(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'data', $pb.PbFieldType.OY) + ..hasRequiredFields = false + ; ServiceDataEntry._() : super(); factory ServiceDataEntry({ @@ -1824,40 +1482,31 @@ class ServiceDataEntry extends $pb.GeneratedMessage { } return _result; } - 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); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' - 'Will be removed in next major version') + 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); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') ServiceDataEntry clone() => ServiceDataEntry()..mergeFromMessage(this); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' - 'Will be removed in next major version') - ServiceDataEntry copyWith(void Function(ServiceDataEntry) updates) => - super.copyWith((message) => updates(message as ServiceDataEntry)) - as ServiceDataEntry; // ignore: deprecated_member_use + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + ServiceDataEntry copyWith(void Function(ServiceDataEntry) updates) => super.copyWith((message) => updates(message as ServiceDataEntry)) as ServiceDataEntry; // ignore: deprecated_member_use $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) @@ -1868,10 +1517,7 @@ 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) @@ -1879,19 +1525,10 @@ class ServiceDataEntry extends $pb.GeneratedMessage { } class ServicesWithCharacteristics extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo( - const $core.bool.fromEnvironment('protobuf.omit_message_names') - ? '' - : 'ServicesWithCharacteristics', - createEmptyInstance: create) - ..pc( - 1, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'items', - $pb.PbFieldType.PM, - subBuilder: ServiceWithCharacteristics.create) - ..hasRequiredFields = false; + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'ServicesWithCharacteristics', createEmptyInstance: create) + ..pc(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'items', $pb.PbFieldType.PM, subBuilder: ServiceWithCharacteristics.create) + ..hasRequiredFields = false + ; ServicesWithCharacteristics._() : super(); factory ServicesWithCharacteristics({ @@ -1903,35 +1540,25 @@ class ServicesWithCharacteristics extends $pb.GeneratedMessage { } return _result; } - 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); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' - 'Will be removed in next major version') - ServicesWithCharacteristics clone() => - ServicesWithCharacteristics()..mergeFromMessage(this); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' - 'Will be removed in next major version') - ServicesWithCharacteristics copyWith( - void Function(ServicesWithCharacteristics) updates) => - super.copyWith( - (message) => updates(message as ServicesWithCharacteristics)) - as ServicesWithCharacteristics; // ignore: deprecated_member_use + 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); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + ServicesWithCharacteristics clone() => ServicesWithCharacteristics()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + ServicesWithCharacteristics copyWith(void Function(ServicesWithCharacteristics) updates) => super.copyWith((message) => updates(message as ServicesWithCharacteristics)) as ServicesWithCharacteristics; // ignore: deprecated_member_use $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) @@ -1939,26 +1566,11 @@ class ServicesWithCharacteristics extends $pb.GeneratedMessage { } class ServiceWithCharacteristics extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo( - const $core.bool.fromEnvironment('protobuf.omit_message_names') - ? '' - : 'ServiceWithCharacteristics', - createEmptyInstance: create) - ..aOM( - 1, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'serviceId', - protoName: 'serviceId', - subBuilder: Uuid.create) - ..pc( - 2, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'characteristics', - $pb.PbFieldType.PM, - subBuilder: Uuid.create) - ..hasRequiredFields = false; + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'ServiceWithCharacteristics', createEmptyInstance: create) + ..aOM(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'serviceId', protoName: 'serviceId', subBuilder: Uuid.create) + ..pc(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'characteristics', $pb.PbFieldType.PM, subBuilder: Uuid.create) + ..hasRequiredFields = false + ; ServiceWithCharacteristics._() : super(); factory ServiceWithCharacteristics({ @@ -1974,43 +1586,31 @@ class ServiceWithCharacteristics extends $pb.GeneratedMessage { } return _result; } - 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); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' - 'Will be removed in next major version') - ServiceWithCharacteristics clone() => - ServiceWithCharacteristics()..mergeFromMessage(this); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' - 'Will be removed in next major version') - ServiceWithCharacteristics copyWith( - void Function(ServiceWithCharacteristics) updates) => - super.copyWith( - (message) => updates(message as ServiceWithCharacteristics)) - as ServiceWithCharacteristics; // ignore: deprecated_member_use + 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); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + ServiceWithCharacteristics clone() => ServiceWithCharacteristics()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + ServiceWithCharacteristics copyWith(void Function(ServiceWithCharacteristics) updates) => super.copyWith((message) => updates(message as ServiceWithCharacteristics)) as ServiceWithCharacteristics; // ignore: deprecated_member_use $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) @@ -2023,18 +1623,10 @@ class ServiceWithCharacteristics extends $pb.GeneratedMessage { } class DiscoverServicesRequest extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo( - const $core.bool.fromEnvironment('protobuf.omit_message_names') - ? '' - : 'DiscoverServicesRequest', - createEmptyInstance: create) - ..aOS( - 1, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'deviceId', - protoName: 'deviceId') - ..hasRequiredFields = false; + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'DiscoverServicesRequest', createEmptyInstance: create) + ..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'deviceId', protoName: 'deviceId') + ..hasRequiredFields = false + ; DiscoverServicesRequest._() : super(); factory DiscoverServicesRequest({ @@ -2046,42 +1638,31 @@ class DiscoverServicesRequest extends $pb.GeneratedMessage { } return _result; } - factory DiscoverServicesRequest.fromBuffer($core.List<$core.int> i, - [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => - create()..mergeFromBuffer(i, r); - factory DiscoverServicesRequest.fromJson($core.String i, - [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => - create()..mergeFromJson(i, r); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' - 'Will be removed in next major version') - DiscoverServicesRequest clone() => - DiscoverServicesRequest()..mergeFromMessage(this); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' - 'Will be removed in next major version') - DiscoverServicesRequest copyWith( - void Function(DiscoverServicesRequest) updates) => - super.copyWith((message) => updates(message as DiscoverServicesRequest)) - as DiscoverServicesRequest; // ignore: deprecated_member_use + factory DiscoverServicesRequest.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory DiscoverServicesRequest.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + DiscoverServicesRequest clone() => DiscoverServicesRequest()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + DiscoverServicesRequest copyWith(void Function(DiscoverServicesRequest) updates) => super.copyWith((message) => updates(message as DiscoverServicesRequest)) as DiscoverServicesRequest; // ignore: deprecated_member_use $pb.BuilderInfo get info_ => _i; @$core.pragma('dart2js:noInline') static DiscoverServicesRequest create() => DiscoverServicesRequest._(); DiscoverServicesRequest createEmptyInstance() => create(); - static $pb.PbList createRepeated() => - $pb.PbList(); + static $pb.PbList createRepeated() => $pb.PbList(); @$core.pragma('dart2js:noInline') - static DiscoverServicesRequest getDefault() => _defaultInstance ??= - $pb.GeneratedMessage.$_defaultFor(create); + static DiscoverServicesRequest getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); static DiscoverServicesRequest? _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) @@ -2089,25 +1670,11 @@ class DiscoverServicesRequest extends $pb.GeneratedMessage { } class DiscoverServicesInfo extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo( - const $core.bool.fromEnvironment('protobuf.omit_message_names') - ? '' - : 'DiscoverServicesInfo', - createEmptyInstance: create) - ..aOS( - 1, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'deviceId', - protoName: 'deviceId') - ..pc( - 2, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'services', - $pb.PbFieldType.PM, - subBuilder: DiscoveredService.create) - ..hasRequiredFields = false; + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'DiscoverServicesInfo', createEmptyInstance: create) + ..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'deviceId', protoName: 'deviceId') + ..pc(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'services', $pb.PbFieldType.PM, subBuilder: DiscoveredService.create) + ..hasRequiredFields = false + ; DiscoverServicesInfo._() : super(); factory DiscoverServicesInfo({ @@ -2123,41 +1690,31 @@ class DiscoverServicesInfo extends $pb.GeneratedMessage { } return _result; } - factory DiscoverServicesInfo.fromBuffer($core.List<$core.int> i, - [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => - create()..mergeFromBuffer(i, r); - factory DiscoverServicesInfo.fromJson($core.String i, - [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => - create()..mergeFromJson(i, r); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' - 'Will be removed in next major version') - DiscoverServicesInfo clone() => - DiscoverServicesInfo()..mergeFromMessage(this); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' - 'Will be removed in next major version') - DiscoverServicesInfo copyWith(void Function(DiscoverServicesInfo) updates) => - super.copyWith((message) => updates(message as DiscoverServicesInfo)) - as DiscoverServicesInfo; // ignore: deprecated_member_use + factory DiscoverServicesInfo.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory DiscoverServicesInfo.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + DiscoverServicesInfo clone() => DiscoverServicesInfo()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + DiscoverServicesInfo copyWith(void Function(DiscoverServicesInfo) updates) => super.copyWith((message) => updates(message as DiscoverServicesInfo)) as DiscoverServicesInfo; // ignore: deprecated_member_use $pb.BuilderInfo get info_ => _i; @$core.pragma('dart2js:noInline') static DiscoverServicesInfo create() => DiscoverServicesInfo._(); DiscoverServicesInfo createEmptyInstance() => create(); - static $pb.PbList createRepeated() => - $pb.PbList(); + static $pb.PbList createRepeated() => $pb.PbList(); @$core.pragma('dart2js:noInline') - static DiscoverServicesInfo getDefault() => _defaultInstance ??= - $pb.GeneratedMessage.$_defaultFor(create); + static DiscoverServicesInfo getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); static DiscoverServicesInfo? _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) @@ -2168,42 +1725,13 @@ class DiscoverServicesInfo extends $pb.GeneratedMessage { } class DiscoveredService extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo( - const $core.bool.fromEnvironment('protobuf.omit_message_names') - ? '' - : 'DiscoveredService', - createEmptyInstance: create) - ..aOM( - 1, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'serviceUuid', - protoName: 'serviceUuid', - subBuilder: Uuid.create) - ..pc( - 2, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'characteristicUuids', - $pb.PbFieldType.PM, - protoName: 'characteristicUuids', - subBuilder: Uuid.create) - ..pc( - 3, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'includedServices', - $pb.PbFieldType.PM, - protoName: 'includedServices', - subBuilder: DiscoveredService.create) - ..pc( - 4, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'characteristics', - $pb.PbFieldType.PM, - subBuilder: DiscoveredCharacteristic.create) - ..hasRequiredFields = false; + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'DiscoveredService', createEmptyInstance: create) + ..aOM(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'serviceUuid', protoName: 'serviceUuid', subBuilder: Uuid.create) + ..pc(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'characteristicUuids', $pb.PbFieldType.PM, protoName: 'characteristicUuids', subBuilder: Uuid.create) + ..pc(3, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'includedServices', $pb.PbFieldType.PM, protoName: 'includedServices', subBuilder: DiscoveredService.create) + ..pc(4, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'characteristics', $pb.PbFieldType.PM, subBuilder: DiscoveredCharacteristic.create) + ..hasRequiredFields = false + ; DiscoveredService._() : super(); factory DiscoveredService({ @@ -2227,40 +1755,31 @@ class DiscoveredService extends $pb.GeneratedMessage { } return _result; } - factory DiscoveredService.fromBuffer($core.List<$core.int> i, - [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => - create()..mergeFromBuffer(i, r); - factory DiscoveredService.fromJson($core.String i, - [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => - create()..mergeFromJson(i, r); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' - 'Will be removed in next major version') + factory DiscoveredService.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory DiscoveredService.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') DiscoveredService clone() => DiscoveredService()..mergeFromMessage(this); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' - 'Will be removed in next major version') - DiscoveredService copyWith(void Function(DiscoveredService) updates) => - super.copyWith((message) => updates(message as DiscoveredService)) - as DiscoveredService; // ignore: deprecated_member_use + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + DiscoveredService copyWith(void Function(DiscoveredService) updates) => super.copyWith((message) => updates(message as DiscoveredService)) as DiscoveredService; // ignore: deprecated_member_use $pb.BuilderInfo get info_ => _i; @$core.pragma('dart2js:noInline') static DiscoveredService create() => DiscoveredService._(); DiscoveredService createEmptyInstance() => create(); - static $pb.PbList createRepeated() => - $pb.PbList(); + static $pb.PbList createRepeated() => $pb.PbList(); @$core.pragma('dart2js:noInline') - static DiscoveredService getDefault() => _defaultInstance ??= - $pb.GeneratedMessage.$_defaultFor(create); + static DiscoveredService getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); static DiscoveredService? _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) @@ -2279,56 +1798,16 @@ class DiscoveredService extends $pb.GeneratedMessage { } class DiscoveredCharacteristic extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo( - const $core.bool.fromEnvironment('protobuf.omit_message_names') - ? '' - : 'DiscoveredCharacteristic', - createEmptyInstance: create) - ..aOM( - 1, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'characteristicId', - protoName: 'characteristicId', - subBuilder: Uuid.create) - ..aOM( - 2, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'serviceId', - protoName: 'serviceId', - subBuilder: Uuid.create) - ..aOB( - 3, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'isReadable', - protoName: 'isReadable') - ..aOB( - 4, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'isWritableWithResponse', - protoName: 'isWritableWithResponse') - ..aOB( - 5, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'isWritableWithoutResponse', - protoName: 'isWritableWithoutResponse') - ..aOB( - 6, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'isNotifiable', - protoName: 'isNotifiable') - ..aOB( - 7, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'isIndicatable', - protoName: 'isIndicatable') - ..hasRequiredFields = false; + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'DiscoveredCharacteristic', createEmptyInstance: create) + ..aOM(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'characteristicId', protoName: 'characteristicId', subBuilder: Uuid.create) + ..aOM(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'serviceId', protoName: 'serviceId', subBuilder: Uuid.create) + ..aOB(3, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'isReadable', protoName: 'isReadable') + ..aOB(4, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'isWritableWithResponse', protoName: 'isWritableWithResponse') + ..aOB(5, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'isWritableWithoutResponse', protoName: 'isWritableWithoutResponse') + ..aOB(6, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'isNotifiable', protoName: 'isNotifiable') + ..aOB(7, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'isIndicatable', protoName: 'isIndicatable') + ..hasRequiredFields = false + ; DiscoveredCharacteristic._() : super(); factory DiscoveredCharacteristic({ @@ -2364,42 +1843,31 @@ class DiscoveredCharacteristic extends $pb.GeneratedMessage { } return _result; } - factory DiscoveredCharacteristic.fromBuffer($core.List<$core.int> i, - [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => - create()..mergeFromBuffer(i, r); - factory DiscoveredCharacteristic.fromJson($core.String i, - [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => - create()..mergeFromJson(i, r); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' - 'Will be removed in next major version') - DiscoveredCharacteristic clone() => - DiscoveredCharacteristic()..mergeFromMessage(this); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' - 'Will be removed in next major version') - DiscoveredCharacteristic copyWith( - void Function(DiscoveredCharacteristic) updates) => - super.copyWith((message) => updates(message as DiscoveredCharacteristic)) - as DiscoveredCharacteristic; // ignore: deprecated_member_use + factory DiscoveredCharacteristic.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory DiscoveredCharacteristic.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + DiscoveredCharacteristic clone() => DiscoveredCharacteristic()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + DiscoveredCharacteristic copyWith(void Function(DiscoveredCharacteristic) updates) => super.copyWith((message) => updates(message as DiscoveredCharacteristic)) as DiscoveredCharacteristic; // ignore: deprecated_member_use $pb.BuilderInfo get info_ => _i; @$core.pragma('dart2js:noInline') static DiscoveredCharacteristic create() => DiscoveredCharacteristic._(); DiscoveredCharacteristic createEmptyInstance() => create(); - static $pb.PbList createRepeated() => - $pb.PbList(); + static $pb.PbList createRepeated() => $pb.PbList(); @$core.pragma('dart2js:noInline') - static DiscoveredCharacteristic getDefault() => _defaultInstance ??= - $pb.GeneratedMessage.$_defaultFor(create); + static DiscoveredCharacteristic getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); static DiscoveredCharacteristic? _defaultInstance; @$pb.TagNumber(1) Uuid get characteristicId => $_getN(0); @$pb.TagNumber(1) - set characteristicId(Uuid v) { - setField(1, v); - } - + set characteristicId(Uuid v) { setField(1, v); } @$pb.TagNumber(1) $core.bool hasCharacteristicId() => $_has(0); @$pb.TagNumber(1) @@ -2410,10 +1878,7 @@ class DiscoveredCharacteristic extends $pb.GeneratedMessage { @$pb.TagNumber(2) Uuid get serviceId => $_getN(1); @$pb.TagNumber(2) - set serviceId(Uuid v) { - setField(2, v); - } - + set serviceId(Uuid v) { setField(2, v); } @$pb.TagNumber(2) $core.bool hasServiceId() => $_has(1); @$pb.TagNumber(2) @@ -2424,10 +1889,7 @@ class DiscoveredCharacteristic extends $pb.GeneratedMessage { @$pb.TagNumber(3) $core.bool get isReadable => $_getBF(2); @$pb.TagNumber(3) - set isReadable($core.bool v) { - $_setBool(2, v); - } - + set isReadable($core.bool v) { $_setBool(2, v); } @$pb.TagNumber(3) $core.bool hasIsReadable() => $_has(2); @$pb.TagNumber(3) @@ -2436,10 +1898,7 @@ class DiscoveredCharacteristic extends $pb.GeneratedMessage { @$pb.TagNumber(4) $core.bool get isWritableWithResponse => $_getBF(3); @$pb.TagNumber(4) - set isWritableWithResponse($core.bool v) { - $_setBool(3, v); - } - + set isWritableWithResponse($core.bool v) { $_setBool(3, v); } @$pb.TagNumber(4) $core.bool hasIsWritableWithResponse() => $_has(3); @$pb.TagNumber(4) @@ -2448,10 +1907,7 @@ class DiscoveredCharacteristic extends $pb.GeneratedMessage { @$pb.TagNumber(5) $core.bool get isWritableWithoutResponse => $_getBF(4); @$pb.TagNumber(5) - set isWritableWithoutResponse($core.bool v) { - $_setBool(4, v); - } - + set isWritableWithoutResponse($core.bool v) { $_setBool(4, v); } @$pb.TagNumber(5) $core.bool hasIsWritableWithoutResponse() => $_has(4); @$pb.TagNumber(5) @@ -2460,10 +1916,7 @@ class DiscoveredCharacteristic extends $pb.GeneratedMessage { @$pb.TagNumber(6) $core.bool get isNotifiable => $_getBF(5); @$pb.TagNumber(6) - set isNotifiable($core.bool v) { - $_setBool(5, v); - } - + set isNotifiable($core.bool v) { $_setBool(5, v); } @$pb.TagNumber(6) $core.bool hasIsNotifiable() => $_has(5); @$pb.TagNumber(6) @@ -2472,10 +1925,7 @@ class DiscoveredCharacteristic extends $pb.GeneratedMessage { @$pb.TagNumber(7) $core.bool get isIndicatable => $_getBF(6); @$pb.TagNumber(7) - set isIndicatable($core.bool v) { - $_setBool(6, v); - } - + set isIndicatable($core.bool v) { $_setBool(6, v); } @$pb.TagNumber(7) $core.bool hasIsIndicatable() => $_has(6); @$pb.TagNumber(7) @@ -2483,18 +1933,10 @@ class DiscoveredCharacteristic extends $pb.GeneratedMessage { } class Uuid extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo( - const $core.bool.fromEnvironment('protobuf.omit_message_names') - ? '' - : 'Uuid', - createEmptyInstance: create) - ..a<$core.List<$core.int>>( - 1, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'data', - $pb.PbFieldType.OY) - ..hasRequiredFields = false; + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'Uuid', createEmptyInstance: create) + ..a<$core.List<$core.int>>(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'data', $pb.PbFieldType.OY) + ..hasRequiredFields = false + ; Uuid._() : super(); factory Uuid({ @@ -2506,39 +1948,31 @@ class Uuid extends $pb.GeneratedMessage { } return _result; } - 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); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' - 'Will be removed in next major version') + 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); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') Uuid clone() => Uuid()..mergeFromMessage(this); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' - 'Will be removed in next major version') - Uuid copyWith(void Function(Uuid) updates) => - super.copyWith((message) => updates(message as Uuid)) - as Uuid; // ignore: deprecated_member_use + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + Uuid copyWith(void Function(Uuid) updates) => super.copyWith((message) => updates(message as Uuid)) as Uuid; // ignore: deprecated_member_use $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) @@ -2546,23 +1980,11 @@ class Uuid extends $pb.GeneratedMessage { } class GenericFailure extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo( - const $core.bool.fromEnvironment('protobuf.omit_message_names') - ? '' - : 'GenericFailure', - createEmptyInstance: create) - ..a<$core.int>( - 1, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'code', - $pb.PbFieldType.O3) - ..aOS( - 2, - const $core.bool.fromEnvironment('protobuf.omit_field_names') - ? '' - : 'message') - ..hasRequiredFields = false; + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'GenericFailure', createEmptyInstance: create) + ..a<$core.int>(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'code', $pb.PbFieldType.O3) + ..aOS(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'message') + ..hasRequiredFields = false + ; GenericFailure._() : super(); factory GenericFailure({ @@ -2578,40 +2000,31 @@ class GenericFailure extends $pb.GeneratedMessage { } return _result; } - 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); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' - 'Will be removed in next major version') + 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); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') GenericFailure clone() => GenericFailure()..mergeFromMessage(this); - @$core.Deprecated('Using this can add significant overhead to your binary. ' - 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' - 'Will be removed in next major version') - GenericFailure copyWith(void Function(GenericFailure) updates) => - super.copyWith((message) => updates(message as GenericFailure)) - as GenericFailure; // ignore: deprecated_member_use + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + GenericFailure copyWith(void Function(GenericFailure) updates) => super.copyWith((message) => updates(message as GenericFailure)) as GenericFailure; // ignore: deprecated_member_use $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) @@ -2620,12 +2033,10 @@ 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/packages/reactive_ble_mobile/lib/src/reactive_ble_mobile_platform.dart b/packages/reactive_ble_mobile/lib/src/reactive_ble_mobile_platform.dart index e8262056..fcf64104 100644 --- a/packages/reactive_ble_mobile/lib/src/reactive_ble_mobile_platform.dart +++ b/packages/reactive_ble_mobile/lib/src/reactive_ble_mobile_platform.dart @@ -154,6 +154,20 @@ class ReactiveBleMobilePlatform extends ReactiveBlePlatform { .then( (data) => _protobufConverter.writeCharacteristicInfoFrom(data!)); + @override + Future writeDescriptorWithoutResponse( + QualifiedDescriptor descriptor, + List value, + ) async => + _bleMethodChannel + .invokeMethod>( + "writeDescriptorWithoutResponse", + _argsToProtobufConverter + .createWriteDescriptorRequest(descriptor, value) + .writeToBuffer(), + ) + .then((data) => _protobufConverter.writeDescriptorInfoFrom(data!)); + @override Stream subscribeToNotifications( QualifiedCharacteristic characteristic, diff --git a/packages/reactive_ble_mobile/protos/bledata.proto b/packages/reactive_ble_mobile/protos/bledata.proto index e156cbd8..92f6525f 100644 --- a/packages/reactive_ble_mobile/protos/bledata.proto +++ b/packages/reactive_ble_mobile/protos/bledata.proto @@ -70,6 +70,16 @@ message WriteCharacteristicInfo { GenericFailure failure = 3; } +message WriteDescriptorRequest { + DescriptorAddress descriptor = 1; + bytes value = 2; +} + +message WriteDescriptorInfo { + DescriptorAddress descriptor = 1; + GenericFailure failure = 3; +} + message NegotiateMtuRequest { string deviceId = 1; int32 mtuSize = 2; @@ -101,6 +111,13 @@ message CharacteristicAddress { Uuid characteristicUuid = 3; } +message DescriptorAddress { + string deviceId = 1; + Uuid serviceUuid = 2; + Uuid characteristicUuid = 3; + Uuid descriptorUuid = 4; +} + message ServiceDataEntry { Uuid serviceUuid = 1; bytes data = 2; diff --git a/packages/reactive_ble_mobile/pubspec.lock b/packages/reactive_ble_mobile/pubspec.lock index a1763002..bd6b15b0 100644 --- a/packages/reactive_ble_mobile/pubspec.lock +++ b/packages/reactive_ble_mobile/pubspec.lock @@ -7,14 +7,14 @@ packages: name: _fe_analyzer_shared url: "https://pub.dartlang.org" source: hosted - version: "26.0.0" + version: "30.0.0" analyzer: dependency: transitive description: name: analyzer url: "https://pub.dartlang.org" source: hosted - version: "2.3.0" + version: "2.7.0" args: dependency: transitive description: @@ -42,7 +42,7 @@ packages: name: build url: "https://pub.dartlang.org" source: hosted - version: "2.1.0" + version: "2.1.1" build_config: dependency: transitive description: @@ -56,7 +56,7 @@ packages: name: build_daemon url: "https://pub.dartlang.org" source: hosted - version: "3.0.0" + version: "3.0.1" build_resolvers: dependency: transitive description: @@ -70,14 +70,14 @@ packages: name: build_runner url: "https://pub.dartlang.org" source: hosted - version: "2.1.2" + version: "2.1.5" build_runner_core: dependency: transitive description: name: build_runner_core url: "https://pub.dartlang.org" source: hosted - version: "7.1.0" + version: "7.2.2" built_collection: dependency: transitive description: @@ -91,7 +91,7 @@ packages: name: built_value url: "https://pub.dartlang.org" source: hosted - version: "8.1.2" + version: "8.1.3" characters: dependency: transitive description: @@ -119,7 +119,7 @@ packages: name: cli_util url: "https://pub.dartlang.org" source: hosted - version: "0.3.3" + version: "0.3.5" clock: dependency: transitive description: @@ -161,7 +161,7 @@ packages: name: dart_style url: "https://pub.dartlang.org" source: hosted - version: "2.1.0" + version: "2.2.0" fake_async: dependency: transitive description: @@ -213,7 +213,7 @@ packages: name: glob url: "https://pub.dartlang.org" source: hosted - version: "2.0.1" + version: "2.0.2" graphs: dependency: transitive description: @@ -255,7 +255,7 @@ packages: name: json_annotation url: "https://pub.dartlang.org" source: hosted - version: "4.1.0" + version: "4.3.0" logging: dependency: transitive description: @@ -283,7 +283,7 @@ packages: name: mime url: "https://pub.dartlang.org" source: hosted - version: "1.0.0" + version: "1.0.1" mockito: dependency: "direct dev" description: @@ -305,20 +305,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.8.0" - pedantic: - dependency: transitive - description: - name: pedantic - url: "https://pub.dartlang.org" - source: hosted - version: "1.11.1" plugin_platform_interface: dependency: transitive description: name: plugin_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "2.0.1" + version: "2.0.2" pool: dependency: transitive description: @@ -350,9 +343,9 @@ packages: reactive_ble_platform_interface: dependency: "direct main" description: - name: reactive_ble_platform_interface - url: "https://pub.dartlang.org" - source: hosted + path: "../reactive_ble_platform_interface" + relative: true + source: path version: "5.0.2" shelf: dependency: transitive @@ -379,7 +372,7 @@ packages: name: source_gen url: "https://pub.dartlang.org" source: hosted - version: "1.1.0" + version: "1.1.1" source_span: dependency: transitive description: @@ -456,7 +449,7 @@ packages: name: watcher url: "https://pub.dartlang.org" source: hosted - version: "1.0.0" + version: "1.0.1" web_socket_channel: dependency: transitive description: @@ -472,5 +465,5 @@ packages: source: hosted version: "3.1.0" sdks: - dart: ">=2.12.0 <3.0.0" + dart: ">=2.14.0 <3.0.0" flutter: ">=2.0.0" diff --git a/packages/reactive_ble_mobile/test/converter/args_to_protobuf_converter_test.dart b/packages/reactive_ble_mobile/test/converter/args_to_protobuf_converter_test.dart index fd01cad3..2f82271a 100644 --- a/packages/reactive_ble_mobile/test/converter/args_to_protobuf_converter_test.dart +++ b/packages/reactive_ble_mobile/test/converter/args_to_protobuf_converter_test.dart @@ -3,6 +3,7 @@ import 'package:reactive_ble_mobile/src/converter/args_to_protubuf_converter.dar import 'package:reactive_ble_mobile/src/generated/bledata.pb.dart' as pb; import 'package:reactive_ble_platform_interface/src/model/connection_priority.dart'; import 'package:reactive_ble_platform_interface/src/model/qualified_characteristic.dart'; +import 'package:reactive_ble_platform_interface/src/model/qualified_descriptor.dart'; import 'package:reactive_ble_platform_interface/src/model/scan_mode.dart'; import 'package:reactive_ble_platform_interface/src/model/uuid.dart'; @@ -117,7 +118,7 @@ void main() { }); }); - group('Create WriteRequest', () { + group('Create WriteCharacteristicRequest', () { late pb.WriteCharacteristicRequest result; const deviceId = '123'; final serviceUuid = Uuid.parse('FEFF'); @@ -153,6 +154,48 @@ void main() { }); }); + group('Create WriteDescriptorRequest', () { + late pb.WriteDescriptorRequest result; + const deviceId = '123'; + final serviceUuid = Uuid.parse('FEFF'); + final charUuid = Uuid.parse('FEEF'); + final descriptorUuid = Uuid.parse('FFEE'); + QualifiedDescriptor descriptor; + + const value = [0, 1]; + + setUp(() { + descriptor = QualifiedDescriptor( + characteristicId: charUuid, + serviceId: serviceUuid, + descriptorId: descriptorUuid, + deviceId: deviceId, + ); + + result = _sut.createWriteDescriptorRequest(descriptor, value); + }); + + test('It converts device Id ', () { + expect(result.descriptor.deviceId, deviceId); + }); + + test('It converts service Uuid', () { + expect(result.descriptor.serviceUuid.data, [254, 255]); + }); + + test('It converts descriptor Uuid', () { + expect(result.descriptor.descriptorUuid.data, [255, 238]); + }); + + test('It converts char Uuid', () { + expect(result.descriptor.characteristicUuid.data, [254, 239]); + }); + + test('It converts value', () { + expect(result.value, value); + }); + }); + group('Create NotifyCharacteristic request', () { late pb.NotifyCharacteristicRequest result; const deviceId = '123'; diff --git a/packages/reactive_ble_mobile/test/reactive_ble_platform_test.dart b/packages/reactive_ble_mobile/test/reactive_ble_platform_test.dart index ef7c9f10..31124cf4 100644 --- a/packages/reactive_ble_mobile/test/reactive_ble_platform_test.dart +++ b/packages/reactive_ble_mobile/test/reactive_ble_platform_test.dart @@ -13,6 +13,7 @@ import 'package:reactive_ble_platform_interface/reactive_ble_platform_interface. import 'package:reactive_ble_platform_interface/src/model/characteristic_value.dart'; import 'package:reactive_ble_platform_interface/src/model/connection_state_update.dart'; import 'package:reactive_ble_platform_interface/src/model/qualified_characteristic.dart'; +import 'package:reactive_ble_platform_interface/src/model/qualified_descriptor.dart'; import 'package:reactive_ble_platform_interface/src/model/result.dart'; import 'package:reactive_ble_platform_interface/src/model/unit.dart'; import 'package:reactive_ble_platform_interface/src/model/uuid.dart'; @@ -290,6 +291,49 @@ void main() { }); }); + group('Write descriptor without response', () { + QualifiedDescriptor descriptor; + const value = [0, 1]; + late pb.WriteDescriptorRequest request; + late WriteDescriptorInfo expectedResult; + late WriteDescriptorInfo result; + + setUp(() async { + request = pb.WriteDescriptorRequest(); + descriptor = QualifiedDescriptor( + characteristicId: Uuid.parse('FEFF'), + descriptorId: Uuid.parse('FEFF'), + serviceId: Uuid.parse('FEFF'), + deviceId: '123', + ); + + expectedResult = WriteDescriptorInfo( + // ignore: void_checks + descriptor: descriptor, + // ignore: void_checks + result: const Result.success(Unit())); + + when(_methodChannel.invokeMethod?>(any, any)).thenAnswer( + (_) async => value, + ); + when(_argsConverter.createWriteDescriptorRequest(descriptor, value)) + .thenReturn(request); + when(_protobufConverter.writeDescriptorInfoFrom(value)) + .thenReturn(expectedResult); + result = await _sut.writeDescriptorWithoutResponse(descriptor, value); + }); + + test('It returns correct value', () async { + expect(result, expectedResult); + }); + + test('It invokes method channel with correct arguments', () { + verify(_methodChannel.invokeMethod( + 'writeDescriptorWithoutResponse', request.writeToBuffer())) + .called(1); + }); + }); + group('Subscribe to notifications', () { late QualifiedCharacteristic characteristic; late pb.NotifyCharacteristicRequest request; diff --git a/packages/reactive_ble_mobile/test/reactive_ble_platform_test.mocks.dart b/packages/reactive_ble_mobile/test/reactive_ble_platform_test.mocks.dart index f692f5dd..bb419a43 100644 --- a/packages/reactive_ble_mobile/test/reactive_ble_platform_test.mocks.dart +++ b/packages/reactive_ble_mobile/test/reactive_ble_platform_test.mocks.dart @@ -37,47 +37,53 @@ class _FakeReadCharacteristicRequest_2 extends _i1.Fake class _FakeWriteCharacteristicRequest_3 extends _i1.Fake implements _i2.WriteCharacteristicRequest {} -class _FakeNotifyCharacteristicRequest_4 extends _i1.Fake +class _FakeWriteDescriptorRequest_4 extends _i1.Fake + implements _i2.WriteDescriptorRequest {} + +class _FakeNotifyCharacteristicRequest_5 extends _i1.Fake implements _i2.NotifyCharacteristicRequest {} -class _FakeNotifyNoMoreCharacteristicRequest_5 extends _i1.Fake +class _FakeNotifyNoMoreCharacteristicRequest_6 extends _i1.Fake implements _i2.NotifyNoMoreCharacteristicRequest {} -class _FakeNegotiateMtuRequest_6 extends _i1.Fake +class _FakeNegotiateMtuRequest_7 extends _i1.Fake implements _i2.NegotiateMtuRequest {} -class _FakeChangeConnectionPriorityRequest_7 extends _i1.Fake +class _FakeChangeConnectionPriorityRequest_8 extends _i1.Fake implements _i2.ChangeConnectionPriorityRequest {} -class _FakeScanForDevicesRequest_8 extends _i1.Fake +class _FakeScanForDevicesRequest_9 extends _i1.Fake implements _i2.ScanForDevicesRequest {} -class _FakeClearGattCacheRequest_9 extends _i1.Fake +class _FakeClearGattCacheRequest_10 extends _i1.Fake implements _i2.ClearGattCacheRequest {} -class _FakeDiscoverServicesRequest_10 extends _i1.Fake +class _FakeDiscoverServicesRequest_11 extends _i1.Fake implements _i2.DiscoverServicesRequest {} -class _FakeScanResult_11 extends _i1.Fake implements _i3.ScanResult {} +class _FakeScanResult_12 extends _i1.Fake implements _i3.ScanResult {} -class _FakeConnectionStateUpdate_12 extends _i1.Fake +class _FakeConnectionStateUpdate_13 extends _i1.Fake implements _i3.ConnectionStateUpdate {} -class _FakeResult_13 extends _i1.Fake +class _FakeResult_14 extends _i1.Fake implements _i3.Result {} -class _FakeCharacteristicValue_14 extends _i1.Fake +class _FakeCharacteristicValue_15 extends _i1.Fake implements _i3.CharacteristicValue {} -class _FakeWriteCharacteristicInfo_15 extends _i1.Fake +class _FakeWriteCharacteristicInfo_16 extends _i1.Fake implements _i3.WriteCharacteristicInfo {} -class _FakeConnectionPriorityInfo_16 extends _i1.Fake +class _FakeConnectionPriorityInfo_17 extends _i1.Fake implements _i3.ConnectionPriorityInfo {} -class _FakeMethodCodec_17 extends _i1.Fake implements _i4.MethodCodec {} +class _FakeMethodCodec_18 extends _i1.Fake implements _i4.MethodCodec {} + +class _FakeBinaryMessenger_19 extends _i1.Fake implements _i5.BinaryMessenger {} -class _FakeBinaryMessenger_18 extends _i1.Fake implements _i5.BinaryMessenger {} +class _FakeWriteDescriptorInfo_20 extends _i1.Fake + implements _i3.WriteDescriptorInfo {} /// A class which mocks [ArgsToProtobufConverter]. /// @@ -125,12 +131,19 @@ class MockArgsToProtobufConverter extends _i1.Mock returnValue: _FakeWriteCharacteristicRequest_3()) as _i2.WriteCharacteristicRequest); @override + _i2.WriteDescriptorRequest createWriteDescriptorRequest( + dynamic descriptor, List? value) => + (super.noSuchMethod( + Invocation.method(#createWriteDescriptorRequest, [descriptor, value]), + returnValue: + _FakeWriteDescriptorRequest_4()) as _i2.WriteDescriptorRequest); + @override _i2.NotifyCharacteristicRequest createNotifyCharacteristicRequest( _i3.QualifiedCharacteristic? characteristic) => (super.noSuchMethod( Invocation.method( #createNotifyCharacteristicRequest, [characteristic]), - returnValue: _FakeNotifyCharacteristicRequest_4()) + returnValue: _FakeNotifyCharacteristicRequest_5()) as _i2.NotifyCharacteristicRequest); @override _i2.NotifyNoMoreCharacteristicRequest createNotifyNoMoreCharacteristicRequest( @@ -138,14 +151,14 @@ class MockArgsToProtobufConverter extends _i1.Mock (super.noSuchMethod( Invocation.method( #createNotifyNoMoreCharacteristicRequest, [characteristic]), - returnValue: _FakeNotifyNoMoreCharacteristicRequest_5()) + returnValue: _FakeNotifyNoMoreCharacteristicRequest_6()) as _i2.NotifyNoMoreCharacteristicRequest); @override _i2.NegotiateMtuRequest createNegotiateMtuRequest( String? deviceId, int? mtu) => (super.noSuchMethod( Invocation.method(#createNegotiateMtuRequest, [deviceId, mtu]), - returnValue: _FakeNegotiateMtuRequest_6()) + returnValue: _FakeNegotiateMtuRequest_7()) as _i2.NegotiateMtuRequest); @override _i2.ChangeConnectionPriorityRequest createChangeConnectionPrioRequest( @@ -153,7 +166,7 @@ class MockArgsToProtobufConverter extends _i1.Mock (super.noSuchMethod( Invocation.method( #createChangeConnectionPrioRequest, [deviceId, priority]), - returnValue: _FakeChangeConnectionPriorityRequest_7()) + returnValue: _FakeChangeConnectionPriorityRequest_8()) as _i2.ChangeConnectionPriorityRequest); @override _i2.ScanForDevicesRequest createScanForDevicesRequest( @@ -166,19 +179,19 @@ class MockArgsToProtobufConverter extends _i1.Mock #scanMode: scanMode, #requireLocationServicesEnabled: requireLocationServicesEnabled }), - returnValue: _FakeScanForDevicesRequest_8()) + returnValue: _FakeScanForDevicesRequest_9()) as _i2.ScanForDevicesRequest); @override _i2.ClearGattCacheRequest createClearGattCacheRequest(String? deviceId) => (super.noSuchMethod( Invocation.method(#createClearGattCacheRequest, [deviceId]), - returnValue: _FakeClearGattCacheRequest_9()) + returnValue: _FakeClearGattCacheRequest_10()) as _i2.ClearGattCacheRequest); @override _i2.DiscoverServicesRequest createDiscoverServicesRequest(String? deviceId) => (super.noSuchMethod( Invocation.method(#createDiscoverServicesRequest, [deviceId]), - returnValue: _FakeDiscoverServicesRequest_10()) + returnValue: _FakeDiscoverServicesRequest_11()) as _i2.DiscoverServicesRequest); @override String toString() => super.toString(); @@ -199,35 +212,40 @@ class MockProtobufConverter extends _i1.Mock implements _i7.ProtobufConverter { @override _i3.ScanResult scanResultFrom(List? data) => (super.noSuchMethod(Invocation.method(#scanResultFrom, [data]), - returnValue: _FakeScanResult_11()) as _i3.ScanResult); + returnValue: _FakeScanResult_12()) as _i3.ScanResult); @override _i3.ConnectionStateUpdate connectionStateUpdateFrom(List? data) => (super.noSuchMethod(Invocation.method(#connectionStateUpdateFrom, [data]), - returnValue: _FakeConnectionStateUpdate_12()) + returnValue: _FakeConnectionStateUpdate_13()) as _i3.ConnectionStateUpdate); @override _i3.Result<_i3.Unit, _i3.GenericFailure<_i3.ClearGattCacheError>?> clearGattCacheResultFrom(List? data) => (super.noSuchMethod( Invocation.method(#clearGattCacheResultFrom, [data]), - returnValue: _FakeResult_13<_i3.Unit, + returnValue: _FakeResult_14<_i3.Unit, _i3.GenericFailure<_i3.ClearGattCacheError>?>()) as _i3 .Result<_i3.Unit, _i3.GenericFailure<_i3.ClearGattCacheError>?>); @override _i3.CharacteristicValue characteristicValueFrom(List? data) => (super.noSuchMethod(Invocation.method(#characteristicValueFrom, [data]), - returnValue: _FakeCharacteristicValue_14()) + returnValue: _FakeCharacteristicValue_15()) as _i3.CharacteristicValue); @override _i3.WriteCharacteristicInfo writeCharacteristicInfoFrom(List? data) => (super.noSuchMethod( Invocation.method(#writeCharacteristicInfoFrom, [data]), - returnValue: _FakeWriteCharacteristicInfo_15()) + returnValue: _FakeWriteCharacteristicInfo_16()) as _i3.WriteCharacteristicInfo); @override + _i3.WriteDescriptorInfo writeDescriptorInfoFrom(List? data) => (super + .noSuchMethod(Invocation.method(#writeCharacteristicInfoFrom, [data]), + returnValue: _FakeWriteDescriptorInfo_20()) + as _i3.WriteDescriptorInfo); + @override _i3.ConnectionPriorityInfo connectionPriorityInfoFrom(List? data) => (super.noSuchMethod( Invocation.method(#connectionPriorityInfoFrom, [data]), - returnValue: _FakeConnectionPriorityInfo_16()) + returnValue: _FakeConnectionPriorityInfo_17()) as _i3.ConnectionPriorityInfo); @override int mtuSizeFrom(List? data) => (super @@ -255,11 +273,11 @@ class MockMethodChannel extends _i1.Mock implements _i8.MethodChannel { (super.noSuchMethod(Invocation.getter(#name), returnValue: '') as String); @override _i4.MethodCodec get codec => (super.noSuchMethod(Invocation.getter(#codec), - returnValue: _FakeMethodCodec_17()) as _i4.MethodCodec); + returnValue: _FakeMethodCodec_18()) as _i4.MethodCodec); @override _i5.BinaryMessenger get binaryMessenger => (super.noSuchMethod(Invocation.getter(#binaryMessenger), - returnValue: _FakeBinaryMessenger_18()) as _i5.BinaryMessenger); + returnValue: _FakeBinaryMessenger_19()) as _i5.BinaryMessenger); @override _i9.Future invokeMethod(String? method, [dynamic arguments]) => (super.noSuchMethod(Invocation.method(#invokeMethod, [method, arguments]), diff --git a/packages/reactive_ble_platform_interface/lib/src/model/qualified_descriptor.dart b/packages/reactive_ble_platform_interface/lib/src/model/qualified_descriptor.dart new file mode 100644 index 00000000..ac783f7b --- /dev/null +++ b/packages/reactive_ble_platform_interface/lib/src/model/qualified_descriptor.dart @@ -0,0 +1,44 @@ +import 'package:meta/meta.dart'; + +import 'uuid.dart'; + +/// Specific BLE characteristic for a BLE device characterised by [deviceId], [serviceId] and +/// [characteristicId]. +@immutable +class QualifiedDescriptor { + /// Unique uuid of the specific characteristic + final Uuid characteristicId; + + /// Service uuid of the characteristic + final Uuid serviceId; + + /// Unique uuid of the specific descriptor + final Uuid descriptorId; + + /// Device id of the BLE device + final String deviceId; + + const QualifiedDescriptor({ + required this.characteristicId, + required this.serviceId, + required this.deviceId, + required this.descriptorId, + }); + + @override + String toString() => + "$runtimeType(characteristicId: $characteristicId, serviceId: $serviceId, deviceId: $deviceId, descriptorId: $descriptorId)"; + + @override + int get hashCode => + (((17 * 37) + characteristicId.hashCode) * 37 + serviceId.hashCode) * 37 + + deviceId.hashCode; + + @override + bool operator ==(dynamic other) => + runtimeType == other.runtimeType && + characteristicId == other.characteristicId && + serviceId == other.serviceId && + descriptorId == other.descriptorId && + deviceId == other.deviceId; +} diff --git a/packages/reactive_ble_platform_interface/lib/src/model/write_descriptor_info.dart b/packages/reactive_ble_platform_interface/lib/src/model/write_descriptor_info.dart new file mode 100644 index 00000000..44ed760b --- /dev/null +++ b/packages/reactive_ble_platform_interface/lib/src/model/write_descriptor_info.dart @@ -0,0 +1,32 @@ +import 'package:meta/meta.dart'; + +import 'generic_failure.dart'; +import 'qualified_descriptor.dart'; +import 'result.dart'; +import 'unit.dart'; + +@immutable +class WriteDescriptorInfo { + final QualifiedDescriptor descriptor; + final Result?> result; + + const WriteDescriptorInfo({ + required this.descriptor, + required this.result, + }); + + @override + String toString() => "$runtimeType(descriptor: $descriptor, result: $result)"; + + @override + int get hashCode => ((17 * 37) + descriptor.hashCode) * 37 + result.hashCode; + + @override + bool operator ==(Object other) => + runtimeType == other.runtimeType && + other is WriteDescriptorInfo && + descriptor == other.descriptor && + result == other.result; +} + +enum WriteDescriptorFailure { unknown } diff --git a/packages/reactive_ble_platform_interface/lib/src/models.dart b/packages/reactive_ble_platform_interface/lib/src/models.dart index 62d3b3e7..a38ed46f 100644 --- a/packages/reactive_ble_platform_interface/lib/src/models.dart +++ b/packages/reactive_ble_platform_interface/lib/src/models.dart @@ -9,9 +9,11 @@ export './model/discovered_service.dart'; export './model/generic_failure.dart'; export './model/log_level.dart'; export './model/qualified_characteristic.dart'; +export './model/qualified_descriptor.dart'; export './model/result.dart'; export './model/scan_mode.dart'; export './model/scan_session.dart'; export './model/unit.dart'; export './model/uuid.dart'; export './model/write_characteristic_info.dart'; +export './model/write_descriptor_info.dart'; diff --git a/packages/reactive_ble_platform_interface/lib/src/reactive_ble_platform_interface.dart b/packages/reactive_ble_platform_interface/lib/src/reactive_ble_platform_interface.dart index 4baed12b..af068de8 100644 --- a/packages/reactive_ble_platform_interface/lib/src/reactive_ble_platform_interface.dart +++ b/packages/reactive_ble_platform_interface/lib/src/reactive_ble_platform_interface.dart @@ -148,6 +148,19 @@ abstract class ReactiveBlePlatform extends PlatformInterface { 'writeCharacteristicWithoutResponse has not been implemented.'); } + /// Perform writing a value to a specific descriptor without awaiting the + /// acknowledgment from the peripheral. + /// + /// When implementing this operation on the platform make sure that it directly + /// returns a response to the dart layer when the command arrived. + Future writeDescriptorWithoutResponse( + QualifiedDescriptor descriptor, + List value, + ) { + throw UnimplementedError( + 'writeCharacteristicWithoutResponse has not been implemented.'); + } + /// Starts subscribing to notifications for a specificied characteristic. /// /// This stream only returns the result of the operation. Value updates should diff --git a/packages/reactive_ble_platform_interface/pubspec.lock b/packages/reactive_ble_platform_interface/pubspec.lock index e4d76998..bf943b25 100644 --- a/packages/reactive_ble_platform_interface/pubspec.lock +++ b/packages/reactive_ble_platform_interface/pubspec.lock @@ -42,7 +42,7 @@ packages: name: build url: "https://pub.dartlang.org" source: hosted - version: "2.1.0" + version: "2.1.1" build_config: dependency: transitive description: @@ -56,7 +56,7 @@ packages: name: build_daemon url: "https://pub.dartlang.org" source: hosted - version: "3.0.0" + version: "3.0.1" build_resolvers: dependency: transitive description: @@ -70,14 +70,14 @@ packages: name: build_runner url: "https://pub.dartlang.org" source: hosted - version: "2.1.2" + version: "2.1.5" build_runner_core: dependency: transitive description: name: build_runner_core url: "https://pub.dartlang.org" source: hosted - version: "7.1.0" + version: "7.2.2" built_collection: dependency: transitive description: @@ -91,7 +91,7 @@ packages: name: built_value url: "https://pub.dartlang.org" source: hosted - version: "8.1.2" + version: "8.1.3" characters: dependency: transitive description: @@ -119,7 +119,7 @@ packages: name: cli_util url: "https://pub.dartlang.org" source: hosted - version: "0.3.3" + version: "0.3.5" clock: dependency: transitive description: @@ -161,7 +161,7 @@ packages: name: dart_style url: "https://pub.dartlang.org" source: hosted - version: "2.1.0" + version: "2.1.1" fake_async: dependency: transitive description: @@ -227,7 +227,7 @@ packages: name: glob url: "https://pub.dartlang.org" source: hosted - version: "2.0.1" + version: "2.0.2" graphs: dependency: transitive description: @@ -269,7 +269,7 @@ packages: name: json_annotation url: "https://pub.dartlang.org" source: hosted - version: "4.1.0" + version: "4.3.0" lints: dependency: transitive description: @@ -304,7 +304,7 @@ packages: name: mime url: "https://pub.dartlang.org" source: hosted - version: "1.0.0" + version: "1.0.1" mockito: dependency: "direct dev" description: @@ -339,7 +339,7 @@ packages: name: plugin_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "2.0.1" + version: "2.0.2" pool: dependency: transitive description: @@ -463,7 +463,7 @@ packages: name: watcher url: "https://pub.dartlang.org" source: hosted - version: "1.0.0" + version: "1.0.1" web_socket_channel: dependency: transitive description: @@ -479,5 +479,5 @@ packages: source: hosted version: "3.1.0" sdks: - dart: ">=2.12.0 <3.0.0" + dart: ">=2.14.0 <3.0.0" flutter: ">=2.0.0"