From 6bc1a364fb085950953ecec5d693d97f7c4e412c Mon Sep 17 00:00:00 2001 From: iAMD Date: Thu, 1 Jul 2021 17:35:54 +0800 Subject: [PATCH] =?UTF-8?q?Android=20=E5=B9=B3=E5=8F=B0=E5=BC=80=E5=8F=91?= =?UTF-8?q?=20(#1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 修复 UUID 创建失败的问题 * 移除 scanning 属性 * 临时提交 * CentralManager 开发 & 示例项目开发 * CentralManager 开发 & 示例项目开发 * android 插件生命周期监听 * 修改 API * 示例程序开发 * 修改字体,添加 API,解决后台问题 * Central#connect API * 蓝牙连接部分开发 * 蓝牙连接部分开发 * 解决一些问题 * 解决一些问题 * Connect API 优化 * 添加 API * example 开发 * API 基本完成 * 消息重命名 * API 修改,Android 实现 * 删除多余代码 * 删除多余文件 * 解决 descriptor 自动生成报错的问题 * 还原 Kotlin 版本,广播处理代码迁移至 dart 端 * Kotlin 版本升至 1.5.20 * 解决特征值通知没有在主线程触发的问题,优化代码 * 引入哈希值,避免对象销毁后继续使用 * 使用下拉刷新代替搜索按钮 * 解决由于热重载和蓝牙关闭产生的问题 * 更新插件信息 * 更新 README 和 CHANGELOG * 更新许可证 * 添加注释 * 添加注释,central 拆分 --- CHANGELOG.md | 5 +- LICENSE | 22 +- README.md | 45 +- android/build.gradle | 11 +- android/src/main/AndroidManifest.xml | 6 +- .../MessageOuterClass.java | 14803 ++++++++++++++++ .../BluetoothLowEnergyPlugin.kt | 696 +- .../ConnectArgumentsKt.kt | 45 + .../bluetooth_low_energy/ConnectionLostKt.kt | 62 + .../bluetooth_low_energy/DiscoveryKt.kt | 79 + .../bluetooth_low_energy/GATTKt.kt | 125 + .../GattCharacteristicKt.kt | 193 + .../GattCharacteristicNotifyArgumentsKt.kt | 113 + .../GattCharacteristicReadArgumentsKt.kt | 96 + .../GattCharacteristicValueKt.kt | 62 + .../GattCharacteristicWriteArgumentsKt.kt | 130 + .../bluetooth_low_energy/GattDescriptorKt.kt | 62 + .../GattDescriptorReadArgumentsKt.kt | 113 + .../GattDescriptorWriteArgumentsKt.kt | 130 + .../GattDisconnectArgumentsKt.kt | 62 + .../bluetooth_low_energy/GattServiceKt.kt | 125 + .../bluetooth_low_energy/MessageKt.kt | 172 + .../MessageOuterClassKt.kt | 0 .../StartDiscoveryArgumentsKt.kt | 96 + example/android/app/build.gradle | 3 +- example/android/build.gradle | 8 +- .../gradle/wrapper/gradle-wrapper.properties | 3 +- example/fonts/IBMPlexMono-Bold.ttf | Bin 0 -> 112548 bytes example/fonts/IBMPlexMono-Italic.ttf | Bin 0 -> 118560 bytes example/fonts/IBMPlexMono-Regular.ttf | Bin 0 -> 110308 bytes example/lib/main.dart | 17 +- example/lib/views.dart | 3 + example/lib/views/flip_view.dart | 37 + example/lib/views/gatt_view.dart | 383 + example/lib/views/home_view.dart | 232 + example/lib/widgets.dart | 1 + example/lib/widgets/flip_card.dart | 106 + example/pubspec.lock | 9 +- example/pubspec.yaml | 11 + lib/bluetooth_low_energy.dart | 27 +- lib/src/bluetooth.dart | 31 +- lib/src/bluetooth_manager.dart | 133 - lib/src/central.dart | 52 + lib/src/discovery.dart | 21 +- lib/src/exception.dart | 9 - lib/src/extension.dart | 149 + lib/src/gatt.dart | 44 + lib/src/gatt_characteristic.dart | 114 + lib/src/gatt_descriptor.dart | 59 + lib/src/gatt_service.dart | 21 + lib/src/mac.dart | 31 + lib/src/message.pb.dart | 1229 +- lib/src/message.pbenum.dart | 57 +- lib/src/message.pbjson.dart | 238 +- lib/src/{channel.dart => util.dart} | 3 + lib/src/uuid.dart | 44 +- proto/message.proto | 132 +- pubspec.yaml | 5 +- test/bluetooth_low_energy_test.dart | 502 +- 59 files changed, 20524 insertions(+), 443 deletions(-) create mode 100644 android/src/main/java/dev/yanshouwang/bluetooth_low_energy/MessageOuterClass.java create mode 100644 android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/ConnectArgumentsKt.kt create mode 100644 android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/ConnectionLostKt.kt create mode 100644 android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/DiscoveryKt.kt create mode 100644 android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/GATTKt.kt create mode 100644 android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/GattCharacteristicKt.kt create mode 100644 android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/GattCharacteristicNotifyArgumentsKt.kt create mode 100644 android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/GattCharacteristicReadArgumentsKt.kt create mode 100644 android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/GattCharacteristicValueKt.kt create mode 100644 android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/GattCharacteristicWriteArgumentsKt.kt create mode 100644 android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/GattDescriptorKt.kt create mode 100644 android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/GattDescriptorReadArgumentsKt.kt create mode 100644 android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/GattDescriptorWriteArgumentsKt.kt create mode 100644 android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/GattDisconnectArgumentsKt.kt create mode 100644 android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/GattServiceKt.kt create mode 100644 android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/MessageKt.kt create mode 100644 android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/MessageOuterClassKt.kt create mode 100644 android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/StartDiscoveryArgumentsKt.kt create mode 100644 example/fonts/IBMPlexMono-Bold.ttf create mode 100644 example/fonts/IBMPlexMono-Italic.ttf create mode 100644 example/fonts/IBMPlexMono-Regular.ttf create mode 100644 example/lib/views.dart create mode 100644 example/lib/views/flip_view.dart create mode 100644 example/lib/views/gatt_view.dart create mode 100644 example/lib/views/home_view.dart create mode 100644 example/lib/widgets.dart create mode 100644 example/lib/widgets/flip_card.dart delete mode 100644 lib/src/bluetooth_manager.dart create mode 100644 lib/src/central.dart delete mode 100644 lib/src/exception.dart create mode 100644 lib/src/extension.dart create mode 100644 lib/src/gatt.dart rename lib/src/{channel.dart => util.dart} (74%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 41cc7d8..10db7a7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ ## 0.0.1 -* TODO: Describe initial release. +- Add central APIs. +- Add implements on Android. +- Add example. +- Add test. diff --git a/LICENSE b/LICENSE index ba75c69..752d28b 100644 --- a/LICENSE +++ b/LICENSE @@ -1 +1,21 @@ -TODO: Add your license here. +MIT License + +Copyright (c) 2021 yanshouwang + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md index 93a872e..00e6f4d 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,42 @@ -# bluetooth_low_energy +# Bluetooth Low Energy -A new flutter plugin project. +A bluetooth low energy plugin for flutter, which can be used to develope central role apps. + +## Features + +### Central APIs +- [x] Discover advertisements. +- [x] Connect/Disconnect to GATTs. +- [x] Read/Write/Notify characteristics. +- [x] Read/Write descriptors. + +### Peripheral APIs +- [ ] Add/Send advertisements. +- [ ] Add services +- [ ] Add/Listen/Write characteristics +- [ ] Add/Listen/Write descriptors. +- [ ] Listen GATT connect/disconnect events. ## Getting Started -This project is a starting point for a Flutter -[plug-in package](https://flutter.dev/developing-packages/), -a specialized package that includes platform-specific implementation code for -Android and/or iOS. +Add `bluetooth_low_energy` as a [dependency in your pubspec.yaml file](https://flutter.dev/using-packages/). -For help getting started with Flutter, view our -[online documentation](https://flutter.dev/docs), which offers tutorials, -samples, guidance on mobile development, and a full API reference. +``` +dependencies: + bluetooth_low_energy: ^ +``` +### Android + +Make sure you have a `miniSdkVersion` with 21 or higher in your `android/app/build.gradle` file, now we only support Android 5.0 or above. + +*Note*: Bluetooth Low Energy doesn't work on Android emulators, so use physical devices which has bluetooth features for development. + +### iOS + +TO BE DONE. + +## Issues + +- Only support Android for now, iOS will available as soon as possible. +- Only support central APIs for now. diff --git a/android/build.gradle b/android/build.gradle index 016c607..4339c91 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -2,10 +2,11 @@ group 'dev.yanshouwang.bluetooth_low_energy' version '1.0-SNAPSHOT' buildscript { - ext.kotlin_version = '1.3.50' + ext.kotlin_version = '1.5.20' repositories { google() - jcenter() + mavenCentral() + maven { url 'https://mirrors.cloud.tencent.com/nexus/repository/maven-public/' } } dependencies { @@ -17,7 +18,8 @@ buildscript { rootProject.allprojects { repositories { google() - jcenter() + mavenCentral() + maven { url 'https://mirrors.cloud.tencent.com/nexus/repository/maven-public/' } } } @@ -31,10 +33,11 @@ android { main.java.srcDirs += 'src/main/kotlin' } defaultConfig { - minSdkVersion 16 + minSdkVersion 21 } } dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" + implementation 'com.google.protobuf:protobuf-kotlin:3.17.3' } diff --git a/android/src/main/AndroidManifest.xml b/android/src/main/AndroidManifest.xml index 8495748..fce4a44 100644 --- a/android/src/main/AndroidManifest.xml +++ b/android/src/main/AndroidManifest.xml @@ -1,3 +1,7 @@ + package="dev.yanshouwang.bluetooth_low_energy"> + + + + diff --git a/android/src/main/java/dev/yanshouwang/bluetooth_low_energy/MessageOuterClass.java b/android/src/main/java/dev/yanshouwang/bluetooth_low_energy/MessageOuterClass.java new file mode 100644 index 0000000..e23904e --- /dev/null +++ b/android/src/main/java/dev/yanshouwang/bluetooth_low_energy/MessageOuterClass.java @@ -0,0 +1,14803 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: message.proto + +package dev.yanshouwang.bluetooth_low_energy; + +public final class MessageOuterClass { + private MessageOuterClass() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistryLite registry) { + } + + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistry registry) { + registerAllExtensions( + (com.google.protobuf.ExtensionRegistryLite) registry); + } + /** + * Protobuf enum {@code dev.yanshouwang.bluetooth_low_energy.MessageCategory} + */ + public enum MessageCategory + implements com.google.protobuf.ProtocolMessageEnum { + /** + * BLUETOOTH_AVAILABLE = 0; + */ + BLUETOOTH_AVAILABLE(0), + /** + * BLUETOOTH_STATE = 1; + */ + BLUETOOTH_STATE(1), + /** + * CENTRAL_START_DISCOVERY = 2; + */ + CENTRAL_START_DISCOVERY(2), + /** + * CENTRAL_STOP_DISCOVERY = 3; + */ + CENTRAL_STOP_DISCOVERY(3), + /** + * CENTRAL_DISCOVERED = 4; + */ + CENTRAL_DISCOVERED(4), + /** + * CENTRAL_CONNECT = 5; + */ + CENTRAL_CONNECT(5), + /** + * GATT_DISCONNECT = 6; + */ + GATT_DISCONNECT(6), + /** + * GATT_CONNECTION_LOST = 7; + */ + GATT_CONNECTION_LOST(7), + /** + * GATT_CHARACTERISTIC_READ = 8; + */ + GATT_CHARACTERISTIC_READ(8), + /** + * GATT_CHARACTERISTIC_WRITE = 9; + */ + GATT_CHARACTERISTIC_WRITE(9), + /** + * GATT_CHARACTERISTIC_NOTIFY = 10; + */ + GATT_CHARACTERISTIC_NOTIFY(10), + /** + * GATT_DESCRIPTOR_READ = 11; + */ + GATT_DESCRIPTOR_READ(11), + /** + * GATT_DESCRIPTOR_WRITE = 12; + */ + GATT_DESCRIPTOR_WRITE(12), + UNRECOGNIZED(-1), + ; + + /** + * BLUETOOTH_AVAILABLE = 0; + */ + public static final int BLUETOOTH_AVAILABLE_VALUE = 0; + /** + * BLUETOOTH_STATE = 1; + */ + public static final int BLUETOOTH_STATE_VALUE = 1; + /** + * CENTRAL_START_DISCOVERY = 2; + */ + public static final int CENTRAL_START_DISCOVERY_VALUE = 2; + /** + * CENTRAL_STOP_DISCOVERY = 3; + */ + public static final int CENTRAL_STOP_DISCOVERY_VALUE = 3; + /** + * CENTRAL_DISCOVERED = 4; + */ + public static final int CENTRAL_DISCOVERED_VALUE = 4; + /** + * CENTRAL_CONNECT = 5; + */ + public static final int CENTRAL_CONNECT_VALUE = 5; + /** + * GATT_DISCONNECT = 6; + */ + public static final int GATT_DISCONNECT_VALUE = 6; + /** + * GATT_CONNECTION_LOST = 7; + */ + public static final int GATT_CONNECTION_LOST_VALUE = 7; + /** + * GATT_CHARACTERISTIC_READ = 8; + */ + public static final int GATT_CHARACTERISTIC_READ_VALUE = 8; + /** + * GATT_CHARACTERISTIC_WRITE = 9; + */ + public static final int GATT_CHARACTERISTIC_WRITE_VALUE = 9; + /** + * GATT_CHARACTERISTIC_NOTIFY = 10; + */ + public static final int GATT_CHARACTERISTIC_NOTIFY_VALUE = 10; + /** + * GATT_DESCRIPTOR_READ = 11; + */ + public static final int GATT_DESCRIPTOR_READ_VALUE = 11; + /** + * GATT_DESCRIPTOR_WRITE = 12; + */ + public static final int GATT_DESCRIPTOR_WRITE_VALUE = 12; + + + public final int getNumber() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalArgumentException( + "Can't get the number of an unknown enum value."); + } + return value; + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static MessageCategory valueOf(int value) { + return forNumber(value); + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + */ + public static MessageCategory forNumber(int value) { + switch (value) { + case 0: return BLUETOOTH_AVAILABLE; + case 1: return BLUETOOTH_STATE; + case 2: return CENTRAL_START_DISCOVERY; + case 3: return CENTRAL_STOP_DISCOVERY; + case 4: return CENTRAL_DISCOVERED; + case 5: return CENTRAL_CONNECT; + case 6: return GATT_DISCONNECT; + case 7: return GATT_CONNECTION_LOST; + case 8: return GATT_CHARACTERISTIC_READ; + case 9: return GATT_CHARACTERISTIC_WRITE; + case 10: return GATT_CHARACTERISTIC_NOTIFY; + case 11: return GATT_DESCRIPTOR_READ; + case 12: return GATT_DESCRIPTOR_WRITE; + default: return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; + } + private static final com.google.protobuf.Internal.EnumLiteMap< + MessageCategory> internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public MessageCategory findValueByNumber(int number) { + return MessageCategory.forNumber(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor + getValueDescriptor() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalStateException( + "Can't get the descriptor of an unrecognized enum value."); + } + return getDescriptor().getValues().get(ordinal()); + } + public final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptorForType() { + return getDescriptor(); + } + public static final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptor() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.getDescriptor().getEnumTypes().get(0); + } + + private static final MessageCategory[] VALUES = values(); + + public static MessageCategory valueOf( + com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException( + "EnumValueDescriptor is not for this type."); + } + if (desc.getIndex() == -1) { + return UNRECOGNIZED; + } + return VALUES[desc.getIndex()]; + } + + private final int value; + + private MessageCategory(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:dev.yanshouwang.bluetooth_low_energy.MessageCategory) + } + + public interface MessageOrBuilder extends + // @@protoc_insertion_point(interface_extends:dev.yanshouwang.bluetooth_low_energy.Message) + com.google.protobuf.MessageOrBuilder { + + /** + * .dev.yanshouwang.bluetooth_low_energy.MessageCategory category = 1; + * @return The enum numeric value on the wire for category. + */ + int getCategoryValue(); + /** + * .dev.yanshouwang.bluetooth_low_energy.MessageCategory category = 1; + * @return The category. + */ + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.MessageCategory getCategory(); + + /** + * bool state = 2; + * @return Whether the state field is set. + */ + boolean hasState(); + /** + * bool state = 2; + * @return The state. + */ + boolean getState(); + + /** + * .dev.yanshouwang.bluetooth_low_energy.Discovery discovery = 3; + * @return Whether the discovery field is set. + */ + boolean hasDiscovery(); + /** + * .dev.yanshouwang.bluetooth_low_energy.Discovery discovery = 3; + * @return The discovery. + */ + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery getDiscovery(); + /** + * .dev.yanshouwang.bluetooth_low_energy.Discovery discovery = 3; + */ + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.DiscoveryOrBuilder getDiscoveryOrBuilder(); + + /** + * bool scanning = 4; + * @return Whether the scanning field is set. + */ + boolean hasScanning(); + /** + * bool scanning = 4; + * @return The scanning. + */ + boolean getScanning(); + + /** + * .dev.yanshouwang.bluetooth_low_energy.ConnectionLost connectionLost = 5; + * @return Whether the connectionLost field is set. + */ + boolean hasConnectionLost(); + /** + * .dev.yanshouwang.bluetooth_low_energy.ConnectionLost connectionLost = 5; + * @return The connectionLost. + */ + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost getConnectionLost(); + /** + * .dev.yanshouwang.bluetooth_low_energy.ConnectionLost connectionLost = 5; + */ + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLostOrBuilder getConnectionLostOrBuilder(); + + /** + * .dev.yanshouwang.bluetooth_low_energy.GattCharacteristicValue characteristicValue = 6; + * @return Whether the characteristicValue field is set. + */ + boolean hasCharacteristicValue(); + /** + * .dev.yanshouwang.bluetooth_low_energy.GattCharacteristicValue characteristicValue = 6; + * @return The characteristicValue. + */ + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue getCharacteristicValue(); + /** + * .dev.yanshouwang.bluetooth_low_energy.GattCharacteristicValue characteristicValue = 6; + */ + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValueOrBuilder getCharacteristicValueOrBuilder(); + + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Message.ValueCase getValueCase(); + } + /** + * Protobuf type {@code dev.yanshouwang.bluetooth_low_energy.Message} + */ + public static final class Message extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:dev.yanshouwang.bluetooth_low_energy.Message) + MessageOrBuilder { + private static final long serialVersionUID = 0L; + // Use Message.newBuilder() to construct. + private Message(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private Message() { + category_ = 0; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new Message(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private Message( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: { + int rawValue = input.readEnum(); + + category_ = rawValue; + break; + } + case 16: { + valueCase_ = 2; + value_ = input.readBool(); + break; + } + case 26: { + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery.Builder subBuilder = null; + if (valueCase_ == 3) { + subBuilder = ((dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery) value_).toBuilder(); + } + value_ = + input.readMessage(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery.parser(), extensionRegistry); + if (subBuilder != null) { + subBuilder.mergeFrom((dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery) value_); + value_ = subBuilder.buildPartial(); + } + valueCase_ = 3; + break; + } + case 32: { + valueCase_ = 4; + value_ = input.readBool(); + break; + } + case 42: { + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost.Builder subBuilder = null; + if (valueCase_ == 5) { + subBuilder = ((dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost) value_).toBuilder(); + } + value_ = + input.readMessage(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost.parser(), extensionRegistry); + if (subBuilder != null) { + subBuilder.mergeFrom((dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost) value_); + value_ = subBuilder.buildPartial(); + } + valueCase_ = 5; + break; + } + case 50: { + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue.Builder subBuilder = null; + if (valueCase_ == 6) { + subBuilder = ((dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue) value_).toBuilder(); + } + value_ = + input.readMessage(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue.parser(), extensionRegistry); + if (subBuilder != null) { + subBuilder.mergeFrom((dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue) value_); + value_ = subBuilder.buildPartial(); + } + valueCase_ = 6; + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_Message_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_Message_fieldAccessorTable + .ensureFieldAccessorsInitialized( + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Message.class, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Message.Builder.class); + } + + private int valueCase_ = 0; + private java.lang.Object value_; + public enum ValueCase + implements com.google.protobuf.Internal.EnumLite, + com.google.protobuf.AbstractMessage.InternalOneOfEnum { + STATE(2), + DISCOVERY(3), + SCANNING(4), + CONNECTIONLOST(5), + CHARACTERISTICVALUE(6), + VALUE_NOT_SET(0); + private final int value; + private ValueCase(int value) { + this.value = value; + } + /** + * @param value The number of the enum to look for. + * @return The enum associated with the given number. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static ValueCase valueOf(int value) { + return forNumber(value); + } + + public static ValueCase forNumber(int value) { + switch (value) { + case 2: return STATE; + case 3: return DISCOVERY; + case 4: return SCANNING; + case 5: return CONNECTIONLOST; + case 6: return CHARACTERISTICVALUE; + case 0: return VALUE_NOT_SET; + default: return null; + } + } + public int getNumber() { + return this.value; + } + }; + + public ValueCase + getValueCase() { + return ValueCase.forNumber( + valueCase_); + } + + public static final int CATEGORY_FIELD_NUMBER = 1; + private int category_; + /** + * .dev.yanshouwang.bluetooth_low_energy.MessageCategory category = 1; + * @return The enum numeric value on the wire for category. + */ + @java.lang.Override public int getCategoryValue() { + return category_; + } + /** + * .dev.yanshouwang.bluetooth_low_energy.MessageCategory category = 1; + * @return The category. + */ + @java.lang.Override public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.MessageCategory getCategory() { + @SuppressWarnings("deprecation") + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.MessageCategory result = dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.MessageCategory.valueOf(category_); + return result == null ? dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.MessageCategory.UNRECOGNIZED : result; + } + + public static final int STATE_FIELD_NUMBER = 2; + /** + * bool state = 2; + * @return Whether the state field is set. + */ + @java.lang.Override + public boolean hasState() { + return valueCase_ == 2; + } + /** + * bool state = 2; + * @return The state. + */ + @java.lang.Override + public boolean getState() { + if (valueCase_ == 2) { + return (java.lang.Boolean) value_; + } + return false; + } + + public static final int DISCOVERY_FIELD_NUMBER = 3; + /** + * .dev.yanshouwang.bluetooth_low_energy.Discovery discovery = 3; + * @return Whether the discovery field is set. + */ + @java.lang.Override + public boolean hasDiscovery() { + return valueCase_ == 3; + } + /** + * .dev.yanshouwang.bluetooth_low_energy.Discovery discovery = 3; + * @return The discovery. + */ + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery getDiscovery() { + if (valueCase_ == 3) { + return (dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery) value_; + } + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery.getDefaultInstance(); + } + /** + * .dev.yanshouwang.bluetooth_low_energy.Discovery discovery = 3; + */ + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.DiscoveryOrBuilder getDiscoveryOrBuilder() { + if (valueCase_ == 3) { + return (dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery) value_; + } + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery.getDefaultInstance(); + } + + public static final int SCANNING_FIELD_NUMBER = 4; + /** + * bool scanning = 4; + * @return Whether the scanning field is set. + */ + @java.lang.Override + public boolean hasScanning() { + return valueCase_ == 4; + } + /** + * bool scanning = 4; + * @return The scanning. + */ + @java.lang.Override + public boolean getScanning() { + if (valueCase_ == 4) { + return (java.lang.Boolean) value_; + } + return false; + } + + public static final int CONNECTIONLOST_FIELD_NUMBER = 5; + /** + * .dev.yanshouwang.bluetooth_low_energy.ConnectionLost connectionLost = 5; + * @return Whether the connectionLost field is set. + */ + @java.lang.Override + public boolean hasConnectionLost() { + return valueCase_ == 5; + } + /** + * .dev.yanshouwang.bluetooth_low_energy.ConnectionLost connectionLost = 5; + * @return The connectionLost. + */ + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost getConnectionLost() { + if (valueCase_ == 5) { + return (dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost) value_; + } + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost.getDefaultInstance(); + } + /** + * .dev.yanshouwang.bluetooth_low_energy.ConnectionLost connectionLost = 5; + */ + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLostOrBuilder getConnectionLostOrBuilder() { + if (valueCase_ == 5) { + return (dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost) value_; + } + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost.getDefaultInstance(); + } + + public static final int CHARACTERISTICVALUE_FIELD_NUMBER = 6; + /** + * .dev.yanshouwang.bluetooth_low_energy.GattCharacteristicValue characteristicValue = 6; + * @return Whether the characteristicValue field is set. + */ + @java.lang.Override + public boolean hasCharacteristicValue() { + return valueCase_ == 6; + } + /** + * .dev.yanshouwang.bluetooth_low_energy.GattCharacteristicValue characteristicValue = 6; + * @return The characteristicValue. + */ + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue getCharacteristicValue() { + if (valueCase_ == 6) { + return (dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue) value_; + } + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue.getDefaultInstance(); + } + /** + * .dev.yanshouwang.bluetooth_low_energy.GattCharacteristicValue characteristicValue = 6; + */ + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValueOrBuilder getCharacteristicValueOrBuilder() { + if (valueCase_ == 6) { + return (dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue) value_; + } + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue.getDefaultInstance(); + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (category_ != dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.MessageCategory.BLUETOOTH_AVAILABLE.getNumber()) { + output.writeEnum(1, category_); + } + if (valueCase_ == 2) { + output.writeBool( + 2, (boolean)((java.lang.Boolean) value_)); + } + if (valueCase_ == 3) { + output.writeMessage(3, (dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery) value_); + } + if (valueCase_ == 4) { + output.writeBool( + 4, (boolean)((java.lang.Boolean) value_)); + } + if (valueCase_ == 5) { + output.writeMessage(5, (dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost) value_); + } + if (valueCase_ == 6) { + output.writeMessage(6, (dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue) value_); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (category_ != dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.MessageCategory.BLUETOOTH_AVAILABLE.getNumber()) { + size += com.google.protobuf.CodedOutputStream + .computeEnumSize(1, category_); + } + if (valueCase_ == 2) { + size += com.google.protobuf.CodedOutputStream + .computeBoolSize( + 2, (boolean)((java.lang.Boolean) value_)); + } + if (valueCase_ == 3) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(3, (dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery) value_); + } + if (valueCase_ == 4) { + size += com.google.protobuf.CodedOutputStream + .computeBoolSize( + 4, (boolean)((java.lang.Boolean) value_)); + } + if (valueCase_ == 5) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(5, (dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost) value_); + } + if (valueCase_ == 6) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(6, (dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue) value_); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Message)) { + return super.equals(obj); + } + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Message other = (dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Message) obj; + + if (category_ != other.category_) return false; + if (!getValueCase().equals(other.getValueCase())) return false; + switch (valueCase_) { + case 2: + if (getState() + != other.getState()) return false; + break; + case 3: + if (!getDiscovery() + .equals(other.getDiscovery())) return false; + break; + case 4: + if (getScanning() + != other.getScanning()) return false; + break; + case 5: + if (!getConnectionLost() + .equals(other.getConnectionLost())) return false; + break; + case 6: + if (!getCharacteristicValue() + .equals(other.getCharacteristicValue())) return false; + break; + case 0: + default: + } + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + CATEGORY_FIELD_NUMBER; + hash = (53 * hash) + category_; + switch (valueCase_) { + case 2: + hash = (37 * hash) + STATE_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean( + getState()); + break; + case 3: + hash = (37 * hash) + DISCOVERY_FIELD_NUMBER; + hash = (53 * hash) + getDiscovery().hashCode(); + break; + case 4: + hash = (37 * hash) + SCANNING_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean( + getScanning()); + break; + case 5: + hash = (37 * hash) + CONNECTIONLOST_FIELD_NUMBER; + hash = (53 * hash) + getConnectionLost().hashCode(); + break; + case 6: + hash = (37 * hash) + CHARACTERISTICVALUE_FIELD_NUMBER; + hash = (53 * hash) + getCharacteristicValue().hashCode(); + break; + case 0: + default: + } + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Message parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Message parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Message parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Message parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Message parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Message parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Message parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Message parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Message parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Message parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Message parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Message parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Message prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code dev.yanshouwang.bluetooth_low_energy.Message} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:dev.yanshouwang.bluetooth_low_energy.Message) + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.MessageOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_Message_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_Message_fieldAccessorTable + .ensureFieldAccessorsInitialized( + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Message.class, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Message.Builder.class); + } + + // Construct using dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Message.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + category_ = 0; + + valueCase_ = 0; + value_ = null; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_Message_descriptor; + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Message getDefaultInstanceForType() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Message.getDefaultInstance(); + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Message build() { + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Message result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Message buildPartial() { + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Message result = new dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Message(this); + result.category_ = category_; + if (valueCase_ == 2) { + result.value_ = value_; + } + if (valueCase_ == 3) { + if (discoveryBuilder_ == null) { + result.value_ = value_; + } else { + result.value_ = discoveryBuilder_.build(); + } + } + if (valueCase_ == 4) { + result.value_ = value_; + } + if (valueCase_ == 5) { + if (connectionLostBuilder_ == null) { + result.value_ = value_; + } else { + result.value_ = connectionLostBuilder_.build(); + } + } + if (valueCase_ == 6) { + if (characteristicValueBuilder_ == null) { + result.value_ = value_; + } else { + result.value_ = characteristicValueBuilder_.build(); + } + } + result.valueCase_ = valueCase_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Message) { + return mergeFrom((dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Message)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Message other) { + if (other == dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Message.getDefaultInstance()) return this; + if (other.category_ != 0) { + setCategoryValue(other.getCategoryValue()); + } + switch (other.getValueCase()) { + case STATE: { + setState(other.getState()); + break; + } + case DISCOVERY: { + mergeDiscovery(other.getDiscovery()); + break; + } + case SCANNING: { + setScanning(other.getScanning()); + break; + } + case CONNECTIONLOST: { + mergeConnectionLost(other.getConnectionLost()); + break; + } + case CHARACTERISTICVALUE: { + mergeCharacteristicValue(other.getCharacteristicValue()); + break; + } + case VALUE_NOT_SET: { + break; + } + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Message parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Message) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + private int valueCase_ = 0; + private java.lang.Object value_; + public ValueCase + getValueCase() { + return ValueCase.forNumber( + valueCase_); + } + + public Builder clearValue() { + valueCase_ = 0; + value_ = null; + onChanged(); + return this; + } + + + private int category_ = 0; + /** + * .dev.yanshouwang.bluetooth_low_energy.MessageCategory category = 1; + * @return The enum numeric value on the wire for category. + */ + @java.lang.Override public int getCategoryValue() { + return category_; + } + /** + * .dev.yanshouwang.bluetooth_low_energy.MessageCategory category = 1; + * @param value The enum numeric value on the wire for category to set. + * @return This builder for chaining. + */ + public Builder setCategoryValue(int value) { + + category_ = value; + onChanged(); + return this; + } + /** + * .dev.yanshouwang.bluetooth_low_energy.MessageCategory category = 1; + * @return The category. + */ + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.MessageCategory getCategory() { + @SuppressWarnings("deprecation") + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.MessageCategory result = dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.MessageCategory.valueOf(category_); + return result == null ? dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.MessageCategory.UNRECOGNIZED : result; + } + /** + * .dev.yanshouwang.bluetooth_low_energy.MessageCategory category = 1; + * @param value The category to set. + * @return This builder for chaining. + */ + public Builder setCategory(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.MessageCategory value) { + if (value == null) { + throw new NullPointerException(); + } + + category_ = value.getNumber(); + onChanged(); + return this; + } + /** + * .dev.yanshouwang.bluetooth_low_energy.MessageCategory category = 1; + * @return This builder for chaining. + */ + public Builder clearCategory() { + + category_ = 0; + onChanged(); + return this; + } + + /** + * bool state = 2; + * @return Whether the state field is set. + */ + public boolean hasState() { + return valueCase_ == 2; + } + /** + * bool state = 2; + * @return The state. + */ + public boolean getState() { + if (valueCase_ == 2) { + return (java.lang.Boolean) value_; + } + return false; + } + /** + * bool state = 2; + * @param value The state to set. + * @return This builder for chaining. + */ + public Builder setState(boolean value) { + valueCase_ = 2; + value_ = value; + onChanged(); + return this; + } + /** + * bool state = 2; + * @return This builder for chaining. + */ + public Builder clearState() { + if (valueCase_ == 2) { + valueCase_ = 0; + value_ = null; + onChanged(); + } + return this; + } + + private com.google.protobuf.SingleFieldBuilderV3< + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery.Builder, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.DiscoveryOrBuilder> discoveryBuilder_; + /** + * .dev.yanshouwang.bluetooth_low_energy.Discovery discovery = 3; + * @return Whether the discovery field is set. + */ + @java.lang.Override + public boolean hasDiscovery() { + return valueCase_ == 3; + } + /** + * .dev.yanshouwang.bluetooth_low_energy.Discovery discovery = 3; + * @return The discovery. + */ + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery getDiscovery() { + if (discoveryBuilder_ == null) { + if (valueCase_ == 3) { + return (dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery) value_; + } + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery.getDefaultInstance(); + } else { + if (valueCase_ == 3) { + return discoveryBuilder_.getMessage(); + } + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery.getDefaultInstance(); + } + } + /** + * .dev.yanshouwang.bluetooth_low_energy.Discovery discovery = 3; + */ + public Builder setDiscovery(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery value) { + if (discoveryBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + value_ = value; + onChanged(); + } else { + discoveryBuilder_.setMessage(value); + } + valueCase_ = 3; + return this; + } + /** + * .dev.yanshouwang.bluetooth_low_energy.Discovery discovery = 3; + */ + public Builder setDiscovery( + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery.Builder builderForValue) { + if (discoveryBuilder_ == null) { + value_ = builderForValue.build(); + onChanged(); + } else { + discoveryBuilder_.setMessage(builderForValue.build()); + } + valueCase_ = 3; + return this; + } + /** + * .dev.yanshouwang.bluetooth_low_energy.Discovery discovery = 3; + */ + public Builder mergeDiscovery(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery value) { + if (discoveryBuilder_ == null) { + if (valueCase_ == 3 && + value_ != dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery.getDefaultInstance()) { + value_ = dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery.newBuilder((dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery) value_) + .mergeFrom(value).buildPartial(); + } else { + value_ = value; + } + onChanged(); + } else { + if (valueCase_ == 3) { + discoveryBuilder_.mergeFrom(value); + } + discoveryBuilder_.setMessage(value); + } + valueCase_ = 3; + return this; + } + /** + * .dev.yanshouwang.bluetooth_low_energy.Discovery discovery = 3; + */ + public Builder clearDiscovery() { + if (discoveryBuilder_ == null) { + if (valueCase_ == 3) { + valueCase_ = 0; + value_ = null; + onChanged(); + } + } else { + if (valueCase_ == 3) { + valueCase_ = 0; + value_ = null; + } + discoveryBuilder_.clear(); + } + return this; + } + /** + * .dev.yanshouwang.bluetooth_low_energy.Discovery discovery = 3; + */ + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery.Builder getDiscoveryBuilder() { + return getDiscoveryFieldBuilder().getBuilder(); + } + /** + * .dev.yanshouwang.bluetooth_low_energy.Discovery discovery = 3; + */ + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.DiscoveryOrBuilder getDiscoveryOrBuilder() { + if ((valueCase_ == 3) && (discoveryBuilder_ != null)) { + return discoveryBuilder_.getMessageOrBuilder(); + } else { + if (valueCase_ == 3) { + return (dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery) value_; + } + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery.getDefaultInstance(); + } + } + /** + * .dev.yanshouwang.bluetooth_low_energy.Discovery discovery = 3; + */ + private com.google.protobuf.SingleFieldBuilderV3< + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery.Builder, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.DiscoveryOrBuilder> + getDiscoveryFieldBuilder() { + if (discoveryBuilder_ == null) { + if (!(valueCase_ == 3)) { + value_ = dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery.getDefaultInstance(); + } + discoveryBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery.Builder, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.DiscoveryOrBuilder>( + (dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery) value_, + getParentForChildren(), + isClean()); + value_ = null; + } + valueCase_ = 3; + onChanged();; + return discoveryBuilder_; + } + + /** + * bool scanning = 4; + * @return Whether the scanning field is set. + */ + public boolean hasScanning() { + return valueCase_ == 4; + } + /** + * bool scanning = 4; + * @return The scanning. + */ + public boolean getScanning() { + if (valueCase_ == 4) { + return (java.lang.Boolean) value_; + } + return false; + } + /** + * bool scanning = 4; + * @param value The scanning to set. + * @return This builder for chaining. + */ + public Builder setScanning(boolean value) { + valueCase_ = 4; + value_ = value; + onChanged(); + return this; + } + /** + * bool scanning = 4; + * @return This builder for chaining. + */ + public Builder clearScanning() { + if (valueCase_ == 4) { + valueCase_ = 0; + value_ = null; + onChanged(); + } + return this; + } + + private com.google.protobuf.SingleFieldBuilderV3< + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost.Builder, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLostOrBuilder> connectionLostBuilder_; + /** + * .dev.yanshouwang.bluetooth_low_energy.ConnectionLost connectionLost = 5; + * @return Whether the connectionLost field is set. + */ + @java.lang.Override + public boolean hasConnectionLost() { + return valueCase_ == 5; + } + /** + * .dev.yanshouwang.bluetooth_low_energy.ConnectionLost connectionLost = 5; + * @return The connectionLost. + */ + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost getConnectionLost() { + if (connectionLostBuilder_ == null) { + if (valueCase_ == 5) { + return (dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost) value_; + } + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost.getDefaultInstance(); + } else { + if (valueCase_ == 5) { + return connectionLostBuilder_.getMessage(); + } + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost.getDefaultInstance(); + } + } + /** + * .dev.yanshouwang.bluetooth_low_energy.ConnectionLost connectionLost = 5; + */ + public Builder setConnectionLost(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost value) { + if (connectionLostBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + value_ = value; + onChanged(); + } else { + connectionLostBuilder_.setMessage(value); + } + valueCase_ = 5; + return this; + } + /** + * .dev.yanshouwang.bluetooth_low_energy.ConnectionLost connectionLost = 5; + */ + public Builder setConnectionLost( + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost.Builder builderForValue) { + if (connectionLostBuilder_ == null) { + value_ = builderForValue.build(); + onChanged(); + } else { + connectionLostBuilder_.setMessage(builderForValue.build()); + } + valueCase_ = 5; + return this; + } + /** + * .dev.yanshouwang.bluetooth_low_energy.ConnectionLost connectionLost = 5; + */ + public Builder mergeConnectionLost(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost value) { + if (connectionLostBuilder_ == null) { + if (valueCase_ == 5 && + value_ != dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost.getDefaultInstance()) { + value_ = dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost.newBuilder((dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost) value_) + .mergeFrom(value).buildPartial(); + } else { + value_ = value; + } + onChanged(); + } else { + if (valueCase_ == 5) { + connectionLostBuilder_.mergeFrom(value); + } + connectionLostBuilder_.setMessage(value); + } + valueCase_ = 5; + return this; + } + /** + * .dev.yanshouwang.bluetooth_low_energy.ConnectionLost connectionLost = 5; + */ + public Builder clearConnectionLost() { + if (connectionLostBuilder_ == null) { + if (valueCase_ == 5) { + valueCase_ = 0; + value_ = null; + onChanged(); + } + } else { + if (valueCase_ == 5) { + valueCase_ = 0; + value_ = null; + } + connectionLostBuilder_.clear(); + } + return this; + } + /** + * .dev.yanshouwang.bluetooth_low_energy.ConnectionLost connectionLost = 5; + */ + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost.Builder getConnectionLostBuilder() { + return getConnectionLostFieldBuilder().getBuilder(); + } + /** + * .dev.yanshouwang.bluetooth_low_energy.ConnectionLost connectionLost = 5; + */ + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLostOrBuilder getConnectionLostOrBuilder() { + if ((valueCase_ == 5) && (connectionLostBuilder_ != null)) { + return connectionLostBuilder_.getMessageOrBuilder(); + } else { + if (valueCase_ == 5) { + return (dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost) value_; + } + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost.getDefaultInstance(); + } + } + /** + * .dev.yanshouwang.bluetooth_low_energy.ConnectionLost connectionLost = 5; + */ + private com.google.protobuf.SingleFieldBuilderV3< + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost.Builder, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLostOrBuilder> + getConnectionLostFieldBuilder() { + if (connectionLostBuilder_ == null) { + if (!(valueCase_ == 5)) { + value_ = dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost.getDefaultInstance(); + } + connectionLostBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost.Builder, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLostOrBuilder>( + (dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost) value_, + getParentForChildren(), + isClean()); + value_ = null; + } + valueCase_ = 5; + onChanged();; + return connectionLostBuilder_; + } + + private com.google.protobuf.SingleFieldBuilderV3< + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue.Builder, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValueOrBuilder> characteristicValueBuilder_; + /** + * .dev.yanshouwang.bluetooth_low_energy.GattCharacteristicValue characteristicValue = 6; + * @return Whether the characteristicValue field is set. + */ + @java.lang.Override + public boolean hasCharacteristicValue() { + return valueCase_ == 6; + } + /** + * .dev.yanshouwang.bluetooth_low_energy.GattCharacteristicValue characteristicValue = 6; + * @return The characteristicValue. + */ + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue getCharacteristicValue() { + if (characteristicValueBuilder_ == null) { + if (valueCase_ == 6) { + return (dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue) value_; + } + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue.getDefaultInstance(); + } else { + if (valueCase_ == 6) { + return characteristicValueBuilder_.getMessage(); + } + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue.getDefaultInstance(); + } + } + /** + * .dev.yanshouwang.bluetooth_low_energy.GattCharacteristicValue characteristicValue = 6; + */ + public Builder setCharacteristicValue(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue value) { + if (characteristicValueBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + value_ = value; + onChanged(); + } else { + characteristicValueBuilder_.setMessage(value); + } + valueCase_ = 6; + return this; + } + /** + * .dev.yanshouwang.bluetooth_low_energy.GattCharacteristicValue characteristicValue = 6; + */ + public Builder setCharacteristicValue( + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue.Builder builderForValue) { + if (characteristicValueBuilder_ == null) { + value_ = builderForValue.build(); + onChanged(); + } else { + characteristicValueBuilder_.setMessage(builderForValue.build()); + } + valueCase_ = 6; + return this; + } + /** + * .dev.yanshouwang.bluetooth_low_energy.GattCharacteristicValue characteristicValue = 6; + */ + public Builder mergeCharacteristicValue(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue value) { + if (characteristicValueBuilder_ == null) { + if (valueCase_ == 6 && + value_ != dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue.getDefaultInstance()) { + value_ = dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue.newBuilder((dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue) value_) + .mergeFrom(value).buildPartial(); + } else { + value_ = value; + } + onChanged(); + } else { + if (valueCase_ == 6) { + characteristicValueBuilder_.mergeFrom(value); + } + characteristicValueBuilder_.setMessage(value); + } + valueCase_ = 6; + return this; + } + /** + * .dev.yanshouwang.bluetooth_low_energy.GattCharacteristicValue characteristicValue = 6; + */ + public Builder clearCharacteristicValue() { + if (characteristicValueBuilder_ == null) { + if (valueCase_ == 6) { + valueCase_ = 0; + value_ = null; + onChanged(); + } + } else { + if (valueCase_ == 6) { + valueCase_ = 0; + value_ = null; + } + characteristicValueBuilder_.clear(); + } + return this; + } + /** + * .dev.yanshouwang.bluetooth_low_energy.GattCharacteristicValue characteristicValue = 6; + */ + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue.Builder getCharacteristicValueBuilder() { + return getCharacteristicValueFieldBuilder().getBuilder(); + } + /** + * .dev.yanshouwang.bluetooth_low_energy.GattCharacteristicValue characteristicValue = 6; + */ + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValueOrBuilder getCharacteristicValueOrBuilder() { + if ((valueCase_ == 6) && (characteristicValueBuilder_ != null)) { + return characteristicValueBuilder_.getMessageOrBuilder(); + } else { + if (valueCase_ == 6) { + return (dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue) value_; + } + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue.getDefaultInstance(); + } + } + /** + * .dev.yanshouwang.bluetooth_low_energy.GattCharacteristicValue characteristicValue = 6; + */ + private com.google.protobuf.SingleFieldBuilderV3< + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue.Builder, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValueOrBuilder> + getCharacteristicValueFieldBuilder() { + if (characteristicValueBuilder_ == null) { + if (!(valueCase_ == 6)) { + value_ = dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue.getDefaultInstance(); + } + characteristicValueBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue.Builder, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValueOrBuilder>( + (dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue) value_, + getParentForChildren(), + isClean()); + value_ = null; + } + valueCase_ = 6; + onChanged();; + return characteristicValueBuilder_; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:dev.yanshouwang.bluetooth_low_energy.Message) + } + + // @@protoc_insertion_point(class_scope:dev.yanshouwang.bluetooth_low_energy.Message) + private static final dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Message DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Message(); + } + + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Message getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public Message parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new Message(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Message getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface StartDiscoveryArgumentsOrBuilder extends + // @@protoc_insertion_point(interface_extends:dev.yanshouwang.bluetooth_low_energy.StartDiscoveryArguments) + com.google.protobuf.MessageOrBuilder { + + /** + * repeated string services = 1; + * @return A list containing the services. + */ + java.util.List + getServicesList(); + /** + * repeated string services = 1; + * @return The count of services. + */ + int getServicesCount(); + /** + * repeated string services = 1; + * @param index The index of the element to return. + * @return The services at the given index. + */ + java.lang.String getServices(int index); + /** + * repeated string services = 1; + * @param index The index of the value to return. + * @return The bytes of the services at the given index. + */ + com.google.protobuf.ByteString + getServicesBytes(int index); + } + /** + * Protobuf type {@code dev.yanshouwang.bluetooth_low_energy.StartDiscoveryArguments} + */ + public static final class StartDiscoveryArguments extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:dev.yanshouwang.bluetooth_low_energy.StartDiscoveryArguments) + StartDiscoveryArgumentsOrBuilder { + private static final long serialVersionUID = 0L; + // Use StartDiscoveryArguments.newBuilder() to construct. + private StartDiscoveryArguments(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private StartDiscoveryArguments() { + services_ = com.google.protobuf.LazyStringArrayList.EMPTY; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new StartDiscoveryArguments(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private StartDiscoveryArguments( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + java.lang.String s = input.readStringRequireUtf8(); + if (!((mutable_bitField0_ & 0x00000001) != 0)) { + services_ = new com.google.protobuf.LazyStringArrayList(); + mutable_bitField0_ |= 0x00000001; + } + services_.add(s); + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + if (((mutable_bitField0_ & 0x00000001) != 0)) { + services_ = services_.getUnmodifiableView(); + } + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_StartDiscoveryArguments_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_StartDiscoveryArguments_fieldAccessorTable + .ensureFieldAccessorsInitialized( + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.StartDiscoveryArguments.class, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.StartDiscoveryArguments.Builder.class); + } + + public static final int SERVICES_FIELD_NUMBER = 1; + private com.google.protobuf.LazyStringList services_; + /** + * repeated string services = 1; + * @return A list containing the services. + */ + public com.google.protobuf.ProtocolStringList + getServicesList() { + return services_; + } + /** + * repeated string services = 1; + * @return The count of services. + */ + public int getServicesCount() { + return services_.size(); + } + /** + * repeated string services = 1; + * @param index The index of the element to return. + * @return The services at the given index. + */ + public java.lang.String getServices(int index) { + return services_.get(index); + } + /** + * repeated string services = 1; + * @param index The index of the value to return. + * @return The bytes of the services at the given index. + */ + public com.google.protobuf.ByteString + getServicesBytes(int index) { + return services_.getByteString(index); + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + for (int i = 0; i < services_.size(); i++) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 1, services_.getRaw(i)); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + { + int dataSize = 0; + for (int i = 0; i < services_.size(); i++) { + dataSize += computeStringSizeNoTag(services_.getRaw(i)); + } + size += dataSize; + size += 1 * getServicesList().size(); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.StartDiscoveryArguments)) { + return super.equals(obj); + } + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.StartDiscoveryArguments other = (dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.StartDiscoveryArguments) obj; + + if (!getServicesList() + .equals(other.getServicesList())) return false; + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (getServicesCount() > 0) { + hash = (37 * hash) + SERVICES_FIELD_NUMBER; + hash = (53 * hash) + getServicesList().hashCode(); + } + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.StartDiscoveryArguments parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.StartDiscoveryArguments parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.StartDiscoveryArguments parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.StartDiscoveryArguments parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.StartDiscoveryArguments parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.StartDiscoveryArguments parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.StartDiscoveryArguments parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.StartDiscoveryArguments parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.StartDiscoveryArguments parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.StartDiscoveryArguments parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.StartDiscoveryArguments parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.StartDiscoveryArguments parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.StartDiscoveryArguments prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code dev.yanshouwang.bluetooth_low_energy.StartDiscoveryArguments} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:dev.yanshouwang.bluetooth_low_energy.StartDiscoveryArguments) + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.StartDiscoveryArgumentsOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_StartDiscoveryArguments_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_StartDiscoveryArguments_fieldAccessorTable + .ensureFieldAccessorsInitialized( + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.StartDiscoveryArguments.class, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.StartDiscoveryArguments.Builder.class); + } + + // Construct using dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.StartDiscoveryArguments.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + services_ = com.google.protobuf.LazyStringArrayList.EMPTY; + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_StartDiscoveryArguments_descriptor; + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.StartDiscoveryArguments getDefaultInstanceForType() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.StartDiscoveryArguments.getDefaultInstance(); + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.StartDiscoveryArguments build() { + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.StartDiscoveryArguments result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.StartDiscoveryArguments buildPartial() { + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.StartDiscoveryArguments result = new dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.StartDiscoveryArguments(this); + int from_bitField0_ = bitField0_; + if (((bitField0_ & 0x00000001) != 0)) { + services_ = services_.getUnmodifiableView(); + bitField0_ = (bitField0_ & ~0x00000001); + } + result.services_ = services_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.StartDiscoveryArguments) { + return mergeFrom((dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.StartDiscoveryArguments)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.StartDiscoveryArguments other) { + if (other == dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.StartDiscoveryArguments.getDefaultInstance()) return this; + if (!other.services_.isEmpty()) { + if (services_.isEmpty()) { + services_ = other.services_; + bitField0_ = (bitField0_ & ~0x00000001); + } else { + ensureServicesIsMutable(); + services_.addAll(other.services_); + } + onChanged(); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.StartDiscoveryArguments parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.StartDiscoveryArguments) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + private int bitField0_; + + private com.google.protobuf.LazyStringList services_ = com.google.protobuf.LazyStringArrayList.EMPTY; + private void ensureServicesIsMutable() { + if (!((bitField0_ & 0x00000001) != 0)) { + services_ = new com.google.protobuf.LazyStringArrayList(services_); + bitField0_ |= 0x00000001; + } + } + /** + * repeated string services = 1; + * @return A list containing the services. + */ + public com.google.protobuf.ProtocolStringList + getServicesList() { + return services_.getUnmodifiableView(); + } + /** + * repeated string services = 1; + * @return The count of services. + */ + public int getServicesCount() { + return services_.size(); + } + /** + * repeated string services = 1; + * @param index The index of the element to return. + * @return The services at the given index. + */ + public java.lang.String getServices(int index) { + return services_.get(index); + } + /** + * repeated string services = 1; + * @param index The index of the value to return. + * @return The bytes of the services at the given index. + */ + public com.google.protobuf.ByteString + getServicesBytes(int index) { + return services_.getByteString(index); + } + /** + * repeated string services = 1; + * @param index The index to set the value at. + * @param value The services to set. + * @return This builder for chaining. + */ + public Builder setServices( + int index, java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + ensureServicesIsMutable(); + services_.set(index, value); + onChanged(); + return this; + } + /** + * repeated string services = 1; + * @param value The services to add. + * @return This builder for chaining. + */ + public Builder addServices( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + ensureServicesIsMutable(); + services_.add(value); + onChanged(); + return this; + } + /** + * repeated string services = 1; + * @param values The services to add. + * @return This builder for chaining. + */ + public Builder addAllServices( + java.lang.Iterable values) { + ensureServicesIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, services_); + onChanged(); + return this; + } + /** + * repeated string services = 1; + * @return This builder for chaining. + */ + public Builder clearServices() { + services_ = com.google.protobuf.LazyStringArrayList.EMPTY; + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + /** + * repeated string services = 1; + * @param value The bytes of the services to add. + * @return This builder for chaining. + */ + public Builder addServicesBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + ensureServicesIsMutable(); + services_.add(value); + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:dev.yanshouwang.bluetooth_low_energy.StartDiscoveryArguments) + } + + // @@protoc_insertion_point(class_scope:dev.yanshouwang.bluetooth_low_energy.StartDiscoveryArguments) + private static final dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.StartDiscoveryArguments DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.StartDiscoveryArguments(); + } + + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.StartDiscoveryArguments getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public StartDiscoveryArguments parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new StartDiscoveryArguments(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.StartDiscoveryArguments getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface DiscoveryOrBuilder extends + // @@protoc_insertion_point(interface_extends:dev.yanshouwang.bluetooth_low_energy.Discovery) + com.google.protobuf.MessageOrBuilder { + + /** + * string address = 1; + * @return The address. + */ + java.lang.String getAddress(); + /** + * string address = 1; + * @return The bytes for address. + */ + com.google.protobuf.ByteString + getAddressBytes(); + + /** + * sint32 rssi = 2; + * @return The rssi. + */ + int getRssi(); + + /** + * bytes advertisements = 3; + * @return The advertisements. + */ + com.google.protobuf.ByteString getAdvertisements(); + } + /** + * Protobuf type {@code dev.yanshouwang.bluetooth_low_energy.Discovery} + */ + public static final class Discovery extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:dev.yanshouwang.bluetooth_low_energy.Discovery) + DiscoveryOrBuilder { + private static final long serialVersionUID = 0L; + // Use Discovery.newBuilder() to construct. + private Discovery(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private Discovery() { + address_ = ""; + advertisements_ = com.google.protobuf.ByteString.EMPTY; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new Discovery(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private Discovery( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + java.lang.String s = input.readStringRequireUtf8(); + + address_ = s; + break; + } + case 16: { + + rssi_ = input.readSInt32(); + break; + } + case 26: { + + advertisements_ = input.readBytes(); + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_Discovery_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_Discovery_fieldAccessorTable + .ensureFieldAccessorsInitialized( + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery.class, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery.Builder.class); + } + + public static final int ADDRESS_FIELD_NUMBER = 1; + private volatile java.lang.Object address_; + /** + * string address = 1; + * @return The address. + */ + @java.lang.Override + public java.lang.String getAddress() { + java.lang.Object ref = address_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + address_ = s; + return s; + } + } + /** + * string address = 1; + * @return The bytes for address. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getAddressBytes() { + java.lang.Object ref = address_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + address_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int RSSI_FIELD_NUMBER = 2; + private int rssi_; + /** + * sint32 rssi = 2; + * @return The rssi. + */ + @java.lang.Override + public int getRssi() { + return rssi_; + } + + public static final int ADVERTISEMENTS_FIELD_NUMBER = 3; + private com.google.protobuf.ByteString advertisements_; + /** + * bytes advertisements = 3; + * @return The advertisements. + */ + @java.lang.Override + public com.google.protobuf.ByteString getAdvertisements() { + return advertisements_; + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (!getAddressBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 1, address_); + } + if (rssi_ != 0) { + output.writeSInt32(2, rssi_); + } + if (!advertisements_.isEmpty()) { + output.writeBytes(3, advertisements_); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!getAddressBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, address_); + } + if (rssi_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeSInt32Size(2, rssi_); + } + if (!advertisements_.isEmpty()) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(3, advertisements_); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery)) { + return super.equals(obj); + } + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery other = (dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery) obj; + + if (!getAddress() + .equals(other.getAddress())) return false; + if (getRssi() + != other.getRssi()) return false; + if (!getAdvertisements() + .equals(other.getAdvertisements())) return false; + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + ADDRESS_FIELD_NUMBER; + hash = (53 * hash) + getAddress().hashCode(); + hash = (37 * hash) + RSSI_FIELD_NUMBER; + hash = (53 * hash) + getRssi(); + hash = (37 * hash) + ADVERTISEMENTS_FIELD_NUMBER; + hash = (53 * hash) + getAdvertisements().hashCode(); + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code dev.yanshouwang.bluetooth_low_energy.Discovery} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:dev.yanshouwang.bluetooth_low_energy.Discovery) + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.DiscoveryOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_Discovery_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_Discovery_fieldAccessorTable + .ensureFieldAccessorsInitialized( + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery.class, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery.Builder.class); + } + + // Construct using dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + address_ = ""; + + rssi_ = 0; + + advertisements_ = com.google.protobuf.ByteString.EMPTY; + + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_Discovery_descriptor; + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery getDefaultInstanceForType() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery.getDefaultInstance(); + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery build() { + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery buildPartial() { + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery result = new dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery(this); + result.address_ = address_; + result.rssi_ = rssi_; + result.advertisements_ = advertisements_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery) { + return mergeFrom((dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery other) { + if (other == dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery.getDefaultInstance()) return this; + if (!other.getAddress().isEmpty()) { + address_ = other.address_; + onChanged(); + } + if (other.getRssi() != 0) { + setRssi(other.getRssi()); + } + if (other.getAdvertisements() != com.google.protobuf.ByteString.EMPTY) { + setAdvertisements(other.getAdvertisements()); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + + private java.lang.Object address_ = ""; + /** + * string address = 1; + * @return The address. + */ + public java.lang.String getAddress() { + java.lang.Object ref = address_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + address_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string address = 1; + * @return The bytes for address. + */ + public com.google.protobuf.ByteString + getAddressBytes() { + java.lang.Object ref = address_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + address_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string address = 1; + * @param value The address to set. + * @return This builder for chaining. + */ + public Builder setAddress( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + address_ = value; + onChanged(); + return this; + } + /** + * string address = 1; + * @return This builder for chaining. + */ + public Builder clearAddress() { + + address_ = getDefaultInstance().getAddress(); + onChanged(); + return this; + } + /** + * string address = 1; + * @param value The bytes for address to set. + * @return This builder for chaining. + */ + public Builder setAddressBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + address_ = value; + onChanged(); + return this; + } + + private int rssi_ ; + /** + * sint32 rssi = 2; + * @return The rssi. + */ + @java.lang.Override + public int getRssi() { + return rssi_; + } + /** + * sint32 rssi = 2; + * @param value The rssi to set. + * @return This builder for chaining. + */ + public Builder setRssi(int value) { + + rssi_ = value; + onChanged(); + return this; + } + /** + * sint32 rssi = 2; + * @return This builder for chaining. + */ + public Builder clearRssi() { + + rssi_ = 0; + onChanged(); + return this; + } + + private com.google.protobuf.ByteString advertisements_ = com.google.protobuf.ByteString.EMPTY; + /** + * bytes advertisements = 3; + * @return The advertisements. + */ + @java.lang.Override + public com.google.protobuf.ByteString getAdvertisements() { + return advertisements_; + } + /** + * bytes advertisements = 3; + * @param value The advertisements to set. + * @return This builder for chaining. + */ + public Builder setAdvertisements(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + + advertisements_ = value; + onChanged(); + return this; + } + /** + * bytes advertisements = 3; + * @return This builder for chaining. + */ + public Builder clearAdvertisements() { + + advertisements_ = getDefaultInstance().getAdvertisements(); + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:dev.yanshouwang.bluetooth_low_energy.Discovery) + } + + // @@protoc_insertion_point(class_scope:dev.yanshouwang.bluetooth_low_energy.Discovery) + private static final dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery(); + } + + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public Discovery parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new Discovery(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface ConnectArgumentsOrBuilder extends + // @@protoc_insertion_point(interface_extends:dev.yanshouwang.bluetooth_low_energy.ConnectArguments) + com.google.protobuf.MessageOrBuilder { + + /** + * string address = 1; + * @return The address. + */ + java.lang.String getAddress(); + /** + * string address = 1; + * @return The bytes for address. + */ + com.google.protobuf.ByteString + getAddressBytes(); + } + /** + * Protobuf type {@code dev.yanshouwang.bluetooth_low_energy.ConnectArguments} + */ + public static final class ConnectArguments extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:dev.yanshouwang.bluetooth_low_energy.ConnectArguments) + ConnectArgumentsOrBuilder { + private static final long serialVersionUID = 0L; + // Use ConnectArguments.newBuilder() to construct. + private ConnectArguments(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private ConnectArguments() { + address_ = ""; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new ConnectArguments(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private ConnectArguments( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + java.lang.String s = input.readStringRequireUtf8(); + + address_ = s; + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_ConnectArguments_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_ConnectArguments_fieldAccessorTable + .ensureFieldAccessorsInitialized( + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectArguments.class, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectArguments.Builder.class); + } + + public static final int ADDRESS_FIELD_NUMBER = 1; + private volatile java.lang.Object address_; + /** + * string address = 1; + * @return The address. + */ + @java.lang.Override + public java.lang.String getAddress() { + java.lang.Object ref = address_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + address_ = s; + return s; + } + } + /** + * string address = 1; + * @return The bytes for address. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getAddressBytes() { + java.lang.Object ref = address_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + address_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (!getAddressBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 1, address_); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!getAddressBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, address_); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectArguments)) { + return super.equals(obj); + } + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectArguments other = (dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectArguments) obj; + + if (!getAddress() + .equals(other.getAddress())) return false; + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + ADDRESS_FIELD_NUMBER; + hash = (53 * hash) + getAddress().hashCode(); + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectArguments parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectArguments parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectArguments parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectArguments parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectArguments parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectArguments parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectArguments parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectArguments parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectArguments parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectArguments parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectArguments parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectArguments parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectArguments prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code dev.yanshouwang.bluetooth_low_energy.ConnectArguments} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:dev.yanshouwang.bluetooth_low_energy.ConnectArguments) + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectArgumentsOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_ConnectArguments_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_ConnectArguments_fieldAccessorTable + .ensureFieldAccessorsInitialized( + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectArguments.class, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectArguments.Builder.class); + } + + // Construct using dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectArguments.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + address_ = ""; + + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_ConnectArguments_descriptor; + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectArguments getDefaultInstanceForType() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectArguments.getDefaultInstance(); + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectArguments build() { + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectArguments result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectArguments buildPartial() { + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectArguments result = new dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectArguments(this); + result.address_ = address_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectArguments) { + return mergeFrom((dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectArguments)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectArguments other) { + if (other == dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectArguments.getDefaultInstance()) return this; + if (!other.getAddress().isEmpty()) { + address_ = other.address_; + onChanged(); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectArguments parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectArguments) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + + private java.lang.Object address_ = ""; + /** + * string address = 1; + * @return The address. + */ + public java.lang.String getAddress() { + java.lang.Object ref = address_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + address_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string address = 1; + * @return The bytes for address. + */ + public com.google.protobuf.ByteString + getAddressBytes() { + java.lang.Object ref = address_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + address_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string address = 1; + * @param value The address to set. + * @return This builder for chaining. + */ + public Builder setAddress( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + address_ = value; + onChanged(); + return this; + } + /** + * string address = 1; + * @return This builder for chaining. + */ + public Builder clearAddress() { + + address_ = getDefaultInstance().getAddress(); + onChanged(); + return this; + } + /** + * string address = 1; + * @param value The bytes for address to set. + * @return This builder for chaining. + */ + public Builder setAddressBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + address_ = value; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:dev.yanshouwang.bluetooth_low_energy.ConnectArguments) + } + + // @@protoc_insertion_point(class_scope:dev.yanshouwang.bluetooth_low_energy.ConnectArguments) + private static final dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectArguments DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectArguments(); + } + + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectArguments getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ConnectArguments parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new ConnectArguments(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectArguments getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface GATTOrBuilder extends + // @@protoc_insertion_point(interface_extends:dev.yanshouwang.bluetooth_low_energy.GATT) + com.google.protobuf.MessageOrBuilder { + + /** + * int32 id = 1; + * @return The id. + */ + int getId(); + + /** + * int32 mtu = 2; + * @return The mtu. + */ + int getMtu(); + + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattService services = 3; + */ + java.util.List + getServicesList(); + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattService services = 3; + */ + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService getServices(int index); + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattService services = 3; + */ + int getServicesCount(); + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattService services = 3; + */ + java.util.List + getServicesOrBuilderList(); + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattService services = 3; + */ + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattServiceOrBuilder getServicesOrBuilder( + int index); + } + /** + * Protobuf type {@code dev.yanshouwang.bluetooth_low_energy.GATT} + */ + public static final class GATT extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:dev.yanshouwang.bluetooth_low_energy.GATT) + GATTOrBuilder { + private static final long serialVersionUID = 0L; + // Use GATT.newBuilder() to construct. + private GATT(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private GATT() { + services_ = java.util.Collections.emptyList(); + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new GATT(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private GATT( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: { + + id_ = input.readInt32(); + break; + } + case 16: { + + mtu_ = input.readInt32(); + break; + } + case 26: { + if (!((mutable_bitField0_ & 0x00000001) != 0)) { + services_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000001; + } + services_.add( + input.readMessage(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService.parser(), extensionRegistry)); + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + if (((mutable_bitField0_ & 0x00000001) != 0)) { + services_ = java.util.Collections.unmodifiableList(services_); + } + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_GATT_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_GATT_fieldAccessorTable + .ensureFieldAccessorsInitialized( + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GATT.class, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GATT.Builder.class); + } + + public static final int ID_FIELD_NUMBER = 1; + private int id_; + /** + * int32 id = 1; + * @return The id. + */ + @java.lang.Override + public int getId() { + return id_; + } + + public static final int MTU_FIELD_NUMBER = 2; + private int mtu_; + /** + * int32 mtu = 2; + * @return The mtu. + */ + @java.lang.Override + public int getMtu() { + return mtu_; + } + + public static final int SERVICES_FIELD_NUMBER = 3; + private java.util.List services_; + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattService services = 3; + */ + @java.lang.Override + public java.util.List getServicesList() { + return services_; + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattService services = 3; + */ + @java.lang.Override + public java.util.List + getServicesOrBuilderList() { + return services_; + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattService services = 3; + */ + @java.lang.Override + public int getServicesCount() { + return services_.size(); + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattService services = 3; + */ + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService getServices(int index) { + return services_.get(index); + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattService services = 3; + */ + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattServiceOrBuilder getServicesOrBuilder( + int index) { + return services_.get(index); + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (id_ != 0) { + output.writeInt32(1, id_); + } + if (mtu_ != 0) { + output.writeInt32(2, mtu_); + } + for (int i = 0; i < services_.size(); i++) { + output.writeMessage(3, services_.get(i)); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (id_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(1, id_); + } + if (mtu_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(2, mtu_); + } + for (int i = 0; i < services_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(3, services_.get(i)); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GATT)) { + return super.equals(obj); + } + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GATT other = (dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GATT) obj; + + if (getId() + != other.getId()) return false; + if (getMtu() + != other.getMtu()) return false; + if (!getServicesList() + .equals(other.getServicesList())) return false; + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + ID_FIELD_NUMBER; + hash = (53 * hash) + getId(); + hash = (37 * hash) + MTU_FIELD_NUMBER; + hash = (53 * hash) + getMtu(); + if (getServicesCount() > 0) { + hash = (37 * hash) + SERVICES_FIELD_NUMBER; + hash = (53 * hash) + getServicesList().hashCode(); + } + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GATT parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GATT parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GATT parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GATT parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GATT parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GATT parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GATT parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GATT parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GATT parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GATT parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GATT parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GATT parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GATT prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code dev.yanshouwang.bluetooth_low_energy.GATT} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:dev.yanshouwang.bluetooth_low_energy.GATT) + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GATTOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_GATT_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_GATT_fieldAccessorTable + .ensureFieldAccessorsInitialized( + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GATT.class, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GATT.Builder.class); + } + + // Construct using dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GATT.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + getServicesFieldBuilder(); + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + id_ = 0; + + mtu_ = 0; + + if (servicesBuilder_ == null) { + services_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + } else { + servicesBuilder_.clear(); + } + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_GATT_descriptor; + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GATT getDefaultInstanceForType() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GATT.getDefaultInstance(); + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GATT build() { + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GATT result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GATT buildPartial() { + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GATT result = new dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GATT(this); + int from_bitField0_ = bitField0_; + result.id_ = id_; + result.mtu_ = mtu_; + if (servicesBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0)) { + services_ = java.util.Collections.unmodifiableList(services_); + bitField0_ = (bitField0_ & ~0x00000001); + } + result.services_ = services_; + } else { + result.services_ = servicesBuilder_.build(); + } + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GATT) { + return mergeFrom((dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GATT)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GATT other) { + if (other == dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GATT.getDefaultInstance()) return this; + if (other.getId() != 0) { + setId(other.getId()); + } + if (other.getMtu() != 0) { + setMtu(other.getMtu()); + } + if (servicesBuilder_ == null) { + if (!other.services_.isEmpty()) { + if (services_.isEmpty()) { + services_ = other.services_; + bitField0_ = (bitField0_ & ~0x00000001); + } else { + ensureServicesIsMutable(); + services_.addAll(other.services_); + } + onChanged(); + } + } else { + if (!other.services_.isEmpty()) { + if (servicesBuilder_.isEmpty()) { + servicesBuilder_.dispose(); + servicesBuilder_ = null; + services_ = other.services_; + bitField0_ = (bitField0_ & ~0x00000001); + servicesBuilder_ = + com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? + getServicesFieldBuilder() : null; + } else { + servicesBuilder_.addAllMessages(other.services_); + } + } + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GATT parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GATT) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + private int bitField0_; + + private int id_ ; + /** + * int32 id = 1; + * @return The id. + */ + @java.lang.Override + public int getId() { + return id_; + } + /** + * int32 id = 1; + * @param value The id to set. + * @return This builder for chaining. + */ + public Builder setId(int value) { + + id_ = value; + onChanged(); + return this; + } + /** + * int32 id = 1; + * @return This builder for chaining. + */ + public Builder clearId() { + + id_ = 0; + onChanged(); + return this; + } + + private int mtu_ ; + /** + * int32 mtu = 2; + * @return The mtu. + */ + @java.lang.Override + public int getMtu() { + return mtu_; + } + /** + * int32 mtu = 2; + * @param value The mtu to set. + * @return This builder for chaining. + */ + public Builder setMtu(int value) { + + mtu_ = value; + onChanged(); + return this; + } + /** + * int32 mtu = 2; + * @return This builder for chaining. + */ + public Builder clearMtu() { + + mtu_ = 0; + onChanged(); + return this; + } + + private java.util.List services_ = + java.util.Collections.emptyList(); + private void ensureServicesIsMutable() { + if (!((bitField0_ & 0x00000001) != 0)) { + services_ = new java.util.ArrayList(services_); + bitField0_ |= 0x00000001; + } + } + + private com.google.protobuf.RepeatedFieldBuilderV3< + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService.Builder, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattServiceOrBuilder> servicesBuilder_; + + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattService services = 3; + */ + public java.util.List getServicesList() { + if (servicesBuilder_ == null) { + return java.util.Collections.unmodifiableList(services_); + } else { + return servicesBuilder_.getMessageList(); + } + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattService services = 3; + */ + public int getServicesCount() { + if (servicesBuilder_ == null) { + return services_.size(); + } else { + return servicesBuilder_.getCount(); + } + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattService services = 3; + */ + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService getServices(int index) { + if (servicesBuilder_ == null) { + return services_.get(index); + } else { + return servicesBuilder_.getMessage(index); + } + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattService services = 3; + */ + public Builder setServices( + int index, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService value) { + if (servicesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureServicesIsMutable(); + services_.set(index, value); + onChanged(); + } else { + servicesBuilder_.setMessage(index, value); + } + return this; + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattService services = 3; + */ + public Builder setServices( + int index, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService.Builder builderForValue) { + if (servicesBuilder_ == null) { + ensureServicesIsMutable(); + services_.set(index, builderForValue.build()); + onChanged(); + } else { + servicesBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattService services = 3; + */ + public Builder addServices(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService value) { + if (servicesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureServicesIsMutable(); + services_.add(value); + onChanged(); + } else { + servicesBuilder_.addMessage(value); + } + return this; + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattService services = 3; + */ + public Builder addServices( + int index, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService value) { + if (servicesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureServicesIsMutable(); + services_.add(index, value); + onChanged(); + } else { + servicesBuilder_.addMessage(index, value); + } + return this; + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattService services = 3; + */ + public Builder addServices( + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService.Builder builderForValue) { + if (servicesBuilder_ == null) { + ensureServicesIsMutable(); + services_.add(builderForValue.build()); + onChanged(); + } else { + servicesBuilder_.addMessage(builderForValue.build()); + } + return this; + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattService services = 3; + */ + public Builder addServices( + int index, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService.Builder builderForValue) { + if (servicesBuilder_ == null) { + ensureServicesIsMutable(); + services_.add(index, builderForValue.build()); + onChanged(); + } else { + servicesBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattService services = 3; + */ + public Builder addAllServices( + java.lang.Iterable values) { + if (servicesBuilder_ == null) { + ensureServicesIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, services_); + onChanged(); + } else { + servicesBuilder_.addAllMessages(values); + } + return this; + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattService services = 3; + */ + public Builder clearServices() { + if (servicesBuilder_ == null) { + services_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + } else { + servicesBuilder_.clear(); + } + return this; + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattService services = 3; + */ + public Builder removeServices(int index) { + if (servicesBuilder_ == null) { + ensureServicesIsMutable(); + services_.remove(index); + onChanged(); + } else { + servicesBuilder_.remove(index); + } + return this; + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattService services = 3; + */ + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService.Builder getServicesBuilder( + int index) { + return getServicesFieldBuilder().getBuilder(index); + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattService services = 3; + */ + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattServiceOrBuilder getServicesOrBuilder( + int index) { + if (servicesBuilder_ == null) { + return services_.get(index); } else { + return servicesBuilder_.getMessageOrBuilder(index); + } + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattService services = 3; + */ + public java.util.List + getServicesOrBuilderList() { + if (servicesBuilder_ != null) { + return servicesBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(services_); + } + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattService services = 3; + */ + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService.Builder addServicesBuilder() { + return getServicesFieldBuilder().addBuilder( + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService.getDefaultInstance()); + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattService services = 3; + */ + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService.Builder addServicesBuilder( + int index) { + return getServicesFieldBuilder().addBuilder( + index, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService.getDefaultInstance()); + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattService services = 3; + */ + public java.util.List + getServicesBuilderList() { + return getServicesFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilderV3< + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService.Builder, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattServiceOrBuilder> + getServicesFieldBuilder() { + if (servicesBuilder_ == null) { + servicesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService.Builder, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattServiceOrBuilder>( + services_, + ((bitField0_ & 0x00000001) != 0), + getParentForChildren(), + isClean()); + services_ = null; + } + return servicesBuilder_; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:dev.yanshouwang.bluetooth_low_energy.GATT) + } + + // @@protoc_insertion_point(class_scope:dev.yanshouwang.bluetooth_low_energy.GATT) + private static final dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GATT DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GATT(); + } + + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GATT getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public GATT parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new GATT(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GATT getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface GattDisconnectArgumentsOrBuilder extends + // @@protoc_insertion_point(interface_extends:dev.yanshouwang.bluetooth_low_energy.GattDisconnectArguments) + com.google.protobuf.MessageOrBuilder { + + /** + * string address = 1; + * @return The address. + */ + java.lang.String getAddress(); + /** + * string address = 1; + * @return The bytes for address. + */ + com.google.protobuf.ByteString + getAddressBytes(); + + /** + * int32 id = 2; + * @return The id. + */ + int getId(); + } + /** + * Protobuf type {@code dev.yanshouwang.bluetooth_low_energy.GattDisconnectArguments} + */ + public static final class GattDisconnectArguments extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:dev.yanshouwang.bluetooth_low_energy.GattDisconnectArguments) + GattDisconnectArgumentsOrBuilder { + private static final long serialVersionUID = 0L; + // Use GattDisconnectArguments.newBuilder() to construct. + private GattDisconnectArguments(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private GattDisconnectArguments() { + address_ = ""; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new GattDisconnectArguments(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private GattDisconnectArguments( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + java.lang.String s = input.readStringRequireUtf8(); + + address_ = s; + break; + } + case 16: { + + id_ = input.readInt32(); + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_GattDisconnectArguments_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_GattDisconnectArguments_fieldAccessorTable + .ensureFieldAccessorsInitialized( + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDisconnectArguments.class, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDisconnectArguments.Builder.class); + } + + public static final int ADDRESS_FIELD_NUMBER = 1; + private volatile java.lang.Object address_; + /** + * string address = 1; + * @return The address. + */ + @java.lang.Override + public java.lang.String getAddress() { + java.lang.Object ref = address_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + address_ = s; + return s; + } + } + /** + * string address = 1; + * @return The bytes for address. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getAddressBytes() { + java.lang.Object ref = address_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + address_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int ID_FIELD_NUMBER = 2; + private int id_; + /** + * int32 id = 2; + * @return The id. + */ + @java.lang.Override + public int getId() { + return id_; + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (!getAddressBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 1, address_); + } + if (id_ != 0) { + output.writeInt32(2, id_); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!getAddressBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, address_); + } + if (id_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(2, id_); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDisconnectArguments)) { + return super.equals(obj); + } + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDisconnectArguments other = (dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDisconnectArguments) obj; + + if (!getAddress() + .equals(other.getAddress())) return false; + if (getId() + != other.getId()) return false; + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + ADDRESS_FIELD_NUMBER; + hash = (53 * hash) + getAddress().hashCode(); + hash = (37 * hash) + ID_FIELD_NUMBER; + hash = (53 * hash) + getId(); + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDisconnectArguments parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDisconnectArguments parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDisconnectArguments parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDisconnectArguments parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDisconnectArguments parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDisconnectArguments parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDisconnectArguments parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDisconnectArguments parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDisconnectArguments parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDisconnectArguments parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDisconnectArguments parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDisconnectArguments parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDisconnectArguments prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code dev.yanshouwang.bluetooth_low_energy.GattDisconnectArguments} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:dev.yanshouwang.bluetooth_low_energy.GattDisconnectArguments) + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDisconnectArgumentsOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_GattDisconnectArguments_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_GattDisconnectArguments_fieldAccessorTable + .ensureFieldAccessorsInitialized( + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDisconnectArguments.class, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDisconnectArguments.Builder.class); + } + + // Construct using dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDisconnectArguments.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + address_ = ""; + + id_ = 0; + + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_GattDisconnectArguments_descriptor; + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDisconnectArguments getDefaultInstanceForType() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDisconnectArguments.getDefaultInstance(); + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDisconnectArguments build() { + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDisconnectArguments result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDisconnectArguments buildPartial() { + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDisconnectArguments result = new dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDisconnectArguments(this); + result.address_ = address_; + result.id_ = id_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDisconnectArguments) { + return mergeFrom((dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDisconnectArguments)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDisconnectArguments other) { + if (other == dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDisconnectArguments.getDefaultInstance()) return this; + if (!other.getAddress().isEmpty()) { + address_ = other.address_; + onChanged(); + } + if (other.getId() != 0) { + setId(other.getId()); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDisconnectArguments parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDisconnectArguments) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + + private java.lang.Object address_ = ""; + /** + * string address = 1; + * @return The address. + */ + public java.lang.String getAddress() { + java.lang.Object ref = address_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + address_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string address = 1; + * @return The bytes for address. + */ + public com.google.protobuf.ByteString + getAddressBytes() { + java.lang.Object ref = address_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + address_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string address = 1; + * @param value The address to set. + * @return This builder for chaining. + */ + public Builder setAddress( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + address_ = value; + onChanged(); + return this; + } + /** + * string address = 1; + * @return This builder for chaining. + */ + public Builder clearAddress() { + + address_ = getDefaultInstance().getAddress(); + onChanged(); + return this; + } + /** + * string address = 1; + * @param value The bytes for address to set. + * @return This builder for chaining. + */ + public Builder setAddressBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + address_ = value; + onChanged(); + return this; + } + + private int id_ ; + /** + * int32 id = 2; + * @return The id. + */ + @java.lang.Override + public int getId() { + return id_; + } + /** + * int32 id = 2; + * @param value The id to set. + * @return This builder for chaining. + */ + public Builder setId(int value) { + + id_ = value; + onChanged(); + return this; + } + /** + * int32 id = 2; + * @return This builder for chaining. + */ + public Builder clearId() { + + id_ = 0; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:dev.yanshouwang.bluetooth_low_energy.GattDisconnectArguments) + } + + // @@protoc_insertion_point(class_scope:dev.yanshouwang.bluetooth_low_energy.GattDisconnectArguments) + private static final dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDisconnectArguments DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDisconnectArguments(); + } + + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDisconnectArguments getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public GattDisconnectArguments parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new GattDisconnectArguments(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDisconnectArguments getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface GattServiceOrBuilder extends + // @@protoc_insertion_point(interface_extends:dev.yanshouwang.bluetooth_low_energy.GattService) + com.google.protobuf.MessageOrBuilder { + + /** + * int32 id = 1; + * @return The id. + */ + int getId(); + + /** + * string uuid = 2; + * @return The uuid. + */ + java.lang.String getUuid(); + /** + * string uuid = 2; + * @return The bytes for uuid. + */ + com.google.protobuf.ByteString + getUuidBytes(); + + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattCharacteristic characteristics = 3; + */ + java.util.List + getCharacteristicsList(); + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattCharacteristic characteristics = 3; + */ + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic getCharacteristics(int index); + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattCharacteristic characteristics = 3; + */ + int getCharacteristicsCount(); + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattCharacteristic characteristics = 3; + */ + java.util.List + getCharacteristicsOrBuilderList(); + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattCharacteristic characteristics = 3; + */ + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicOrBuilder getCharacteristicsOrBuilder( + int index); + } + /** + * Protobuf type {@code dev.yanshouwang.bluetooth_low_energy.GattService} + */ + public static final class GattService extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:dev.yanshouwang.bluetooth_low_energy.GattService) + GattServiceOrBuilder { + private static final long serialVersionUID = 0L; + // Use GattService.newBuilder() to construct. + private GattService(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private GattService() { + uuid_ = ""; + characteristics_ = java.util.Collections.emptyList(); + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new GattService(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private GattService( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: { + + id_ = input.readInt32(); + break; + } + case 18: { + java.lang.String s = input.readStringRequireUtf8(); + + uuid_ = s; + break; + } + case 26: { + if (!((mutable_bitField0_ & 0x00000001) != 0)) { + characteristics_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000001; + } + characteristics_.add( + input.readMessage(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic.parser(), extensionRegistry)); + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + if (((mutable_bitField0_ & 0x00000001) != 0)) { + characteristics_ = java.util.Collections.unmodifiableList(characteristics_); + } + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_GattService_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_GattService_fieldAccessorTable + .ensureFieldAccessorsInitialized( + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService.class, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService.Builder.class); + } + + public static final int ID_FIELD_NUMBER = 1; + private int id_; + /** + * int32 id = 1; + * @return The id. + */ + @java.lang.Override + public int getId() { + return id_; + } + + public static final int UUID_FIELD_NUMBER = 2; + private volatile java.lang.Object uuid_; + /** + * string uuid = 2; + * @return The uuid. + */ + @java.lang.Override + public java.lang.String getUuid() { + java.lang.Object ref = uuid_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + uuid_ = s; + return s; + } + } + /** + * string uuid = 2; + * @return The bytes for uuid. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getUuidBytes() { + java.lang.Object ref = uuid_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + uuid_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int CHARACTERISTICS_FIELD_NUMBER = 3; + private java.util.List characteristics_; + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattCharacteristic characteristics = 3; + */ + @java.lang.Override + public java.util.List getCharacteristicsList() { + return characteristics_; + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattCharacteristic characteristics = 3; + */ + @java.lang.Override + public java.util.List + getCharacteristicsOrBuilderList() { + return characteristics_; + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattCharacteristic characteristics = 3; + */ + @java.lang.Override + public int getCharacteristicsCount() { + return characteristics_.size(); + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattCharacteristic characteristics = 3; + */ + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic getCharacteristics(int index) { + return characteristics_.get(index); + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattCharacteristic characteristics = 3; + */ + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicOrBuilder getCharacteristicsOrBuilder( + int index) { + return characteristics_.get(index); + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (id_ != 0) { + output.writeInt32(1, id_); + } + if (!getUuidBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 2, uuid_); + } + for (int i = 0; i < characteristics_.size(); i++) { + output.writeMessage(3, characteristics_.get(i)); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (id_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(1, id_); + } + if (!getUuidBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, uuid_); + } + for (int i = 0; i < characteristics_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(3, characteristics_.get(i)); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService)) { + return super.equals(obj); + } + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService other = (dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService) obj; + + if (getId() + != other.getId()) return false; + if (!getUuid() + .equals(other.getUuid())) return false; + if (!getCharacteristicsList() + .equals(other.getCharacteristicsList())) return false; + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + ID_FIELD_NUMBER; + hash = (53 * hash) + getId(); + hash = (37 * hash) + UUID_FIELD_NUMBER; + hash = (53 * hash) + getUuid().hashCode(); + if (getCharacteristicsCount() > 0) { + hash = (37 * hash) + CHARACTERISTICS_FIELD_NUMBER; + hash = (53 * hash) + getCharacteristicsList().hashCode(); + } + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code dev.yanshouwang.bluetooth_low_energy.GattService} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:dev.yanshouwang.bluetooth_low_energy.GattService) + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattServiceOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_GattService_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_GattService_fieldAccessorTable + .ensureFieldAccessorsInitialized( + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService.class, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService.Builder.class); + } + + // Construct using dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + getCharacteristicsFieldBuilder(); + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + id_ = 0; + + uuid_ = ""; + + if (characteristicsBuilder_ == null) { + characteristics_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + } else { + characteristicsBuilder_.clear(); + } + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_GattService_descriptor; + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService getDefaultInstanceForType() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService.getDefaultInstance(); + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService build() { + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService buildPartial() { + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService result = new dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService(this); + int from_bitField0_ = bitField0_; + result.id_ = id_; + result.uuid_ = uuid_; + if (characteristicsBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0)) { + characteristics_ = java.util.Collections.unmodifiableList(characteristics_); + bitField0_ = (bitField0_ & ~0x00000001); + } + result.characteristics_ = characteristics_; + } else { + result.characteristics_ = characteristicsBuilder_.build(); + } + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService) { + return mergeFrom((dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService other) { + if (other == dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService.getDefaultInstance()) return this; + if (other.getId() != 0) { + setId(other.getId()); + } + if (!other.getUuid().isEmpty()) { + uuid_ = other.uuid_; + onChanged(); + } + if (characteristicsBuilder_ == null) { + if (!other.characteristics_.isEmpty()) { + if (characteristics_.isEmpty()) { + characteristics_ = other.characteristics_; + bitField0_ = (bitField0_ & ~0x00000001); + } else { + ensureCharacteristicsIsMutable(); + characteristics_.addAll(other.characteristics_); + } + onChanged(); + } + } else { + if (!other.characteristics_.isEmpty()) { + if (characteristicsBuilder_.isEmpty()) { + characteristicsBuilder_.dispose(); + characteristicsBuilder_ = null; + characteristics_ = other.characteristics_; + bitField0_ = (bitField0_ & ~0x00000001); + characteristicsBuilder_ = + com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? + getCharacteristicsFieldBuilder() : null; + } else { + characteristicsBuilder_.addAllMessages(other.characteristics_); + } + } + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + private int bitField0_; + + private int id_ ; + /** + * int32 id = 1; + * @return The id. + */ + @java.lang.Override + public int getId() { + return id_; + } + /** + * int32 id = 1; + * @param value The id to set. + * @return This builder for chaining. + */ + public Builder setId(int value) { + + id_ = value; + onChanged(); + return this; + } + /** + * int32 id = 1; + * @return This builder for chaining. + */ + public Builder clearId() { + + id_ = 0; + onChanged(); + return this; + } + + private java.lang.Object uuid_ = ""; + /** + * string uuid = 2; + * @return The uuid. + */ + public java.lang.String getUuid() { + java.lang.Object ref = uuid_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + uuid_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string uuid = 2; + * @return The bytes for uuid. + */ + public com.google.protobuf.ByteString + getUuidBytes() { + java.lang.Object ref = uuid_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + uuid_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string uuid = 2; + * @param value The uuid to set. + * @return This builder for chaining. + */ + public Builder setUuid( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + uuid_ = value; + onChanged(); + return this; + } + /** + * string uuid = 2; + * @return This builder for chaining. + */ + public Builder clearUuid() { + + uuid_ = getDefaultInstance().getUuid(); + onChanged(); + return this; + } + /** + * string uuid = 2; + * @param value The bytes for uuid to set. + * @return This builder for chaining. + */ + public Builder setUuidBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + uuid_ = value; + onChanged(); + return this; + } + + private java.util.List characteristics_ = + java.util.Collections.emptyList(); + private void ensureCharacteristicsIsMutable() { + if (!((bitField0_ & 0x00000001) != 0)) { + characteristics_ = new java.util.ArrayList(characteristics_); + bitField0_ |= 0x00000001; + } + } + + private com.google.protobuf.RepeatedFieldBuilderV3< + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic.Builder, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicOrBuilder> characteristicsBuilder_; + + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattCharacteristic characteristics = 3; + */ + public java.util.List getCharacteristicsList() { + if (characteristicsBuilder_ == null) { + return java.util.Collections.unmodifiableList(characteristics_); + } else { + return characteristicsBuilder_.getMessageList(); + } + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattCharacteristic characteristics = 3; + */ + public int getCharacteristicsCount() { + if (characteristicsBuilder_ == null) { + return characteristics_.size(); + } else { + return characteristicsBuilder_.getCount(); + } + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattCharacteristic characteristics = 3; + */ + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic getCharacteristics(int index) { + if (characteristicsBuilder_ == null) { + return characteristics_.get(index); + } else { + return characteristicsBuilder_.getMessage(index); + } + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattCharacteristic characteristics = 3; + */ + public Builder setCharacteristics( + int index, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic value) { + if (characteristicsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureCharacteristicsIsMutable(); + characteristics_.set(index, value); + onChanged(); + } else { + characteristicsBuilder_.setMessage(index, value); + } + return this; + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattCharacteristic characteristics = 3; + */ + public Builder setCharacteristics( + int index, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic.Builder builderForValue) { + if (characteristicsBuilder_ == null) { + ensureCharacteristicsIsMutable(); + characteristics_.set(index, builderForValue.build()); + onChanged(); + } else { + characteristicsBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattCharacteristic characteristics = 3; + */ + public Builder addCharacteristics(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic value) { + if (characteristicsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureCharacteristicsIsMutable(); + characteristics_.add(value); + onChanged(); + } else { + characteristicsBuilder_.addMessage(value); + } + return this; + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattCharacteristic characteristics = 3; + */ + public Builder addCharacteristics( + int index, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic value) { + if (characteristicsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureCharacteristicsIsMutable(); + characteristics_.add(index, value); + onChanged(); + } else { + characteristicsBuilder_.addMessage(index, value); + } + return this; + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattCharacteristic characteristics = 3; + */ + public Builder addCharacteristics( + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic.Builder builderForValue) { + if (characteristicsBuilder_ == null) { + ensureCharacteristicsIsMutable(); + characteristics_.add(builderForValue.build()); + onChanged(); + } else { + characteristicsBuilder_.addMessage(builderForValue.build()); + } + return this; + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattCharacteristic characteristics = 3; + */ + public Builder addCharacteristics( + int index, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic.Builder builderForValue) { + if (characteristicsBuilder_ == null) { + ensureCharacteristicsIsMutable(); + characteristics_.add(index, builderForValue.build()); + onChanged(); + } else { + characteristicsBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattCharacteristic characteristics = 3; + */ + public Builder addAllCharacteristics( + java.lang.Iterable values) { + if (characteristicsBuilder_ == null) { + ensureCharacteristicsIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, characteristics_); + onChanged(); + } else { + characteristicsBuilder_.addAllMessages(values); + } + return this; + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattCharacteristic characteristics = 3; + */ + public Builder clearCharacteristics() { + if (characteristicsBuilder_ == null) { + characteristics_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + } else { + characteristicsBuilder_.clear(); + } + return this; + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattCharacteristic characteristics = 3; + */ + public Builder removeCharacteristics(int index) { + if (characteristicsBuilder_ == null) { + ensureCharacteristicsIsMutable(); + characteristics_.remove(index); + onChanged(); + } else { + characteristicsBuilder_.remove(index); + } + return this; + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattCharacteristic characteristics = 3; + */ + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic.Builder getCharacteristicsBuilder( + int index) { + return getCharacteristicsFieldBuilder().getBuilder(index); + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattCharacteristic characteristics = 3; + */ + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicOrBuilder getCharacteristicsOrBuilder( + int index) { + if (characteristicsBuilder_ == null) { + return characteristics_.get(index); } else { + return characteristicsBuilder_.getMessageOrBuilder(index); + } + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattCharacteristic characteristics = 3; + */ + public java.util.List + getCharacteristicsOrBuilderList() { + if (characteristicsBuilder_ != null) { + return characteristicsBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(characteristics_); + } + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattCharacteristic characteristics = 3; + */ + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic.Builder addCharacteristicsBuilder() { + return getCharacteristicsFieldBuilder().addBuilder( + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic.getDefaultInstance()); + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattCharacteristic characteristics = 3; + */ + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic.Builder addCharacteristicsBuilder( + int index) { + return getCharacteristicsFieldBuilder().addBuilder( + index, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic.getDefaultInstance()); + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattCharacteristic characteristics = 3; + */ + public java.util.List + getCharacteristicsBuilderList() { + return getCharacteristicsFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilderV3< + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic.Builder, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicOrBuilder> + getCharacteristicsFieldBuilder() { + if (characteristicsBuilder_ == null) { + characteristicsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic.Builder, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicOrBuilder>( + characteristics_, + ((bitField0_ & 0x00000001) != 0), + getParentForChildren(), + isClean()); + characteristics_ = null; + } + return characteristicsBuilder_; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:dev.yanshouwang.bluetooth_low_energy.GattService) + } + + // @@protoc_insertion_point(class_scope:dev.yanshouwang.bluetooth_low_energy.GattService) + private static final dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService(); + } + + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public GattService parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new GattService(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface GattCharacteristicOrBuilder extends + // @@protoc_insertion_point(interface_extends:dev.yanshouwang.bluetooth_low_energy.GattCharacteristic) + com.google.protobuf.MessageOrBuilder { + + /** + * int32 id = 1; + * @return The id. + */ + int getId(); + + /** + * string uuid = 2; + * @return The uuid. + */ + java.lang.String getUuid(); + /** + * string uuid = 2; + * @return The bytes for uuid. + */ + com.google.protobuf.ByteString + getUuidBytes(); + + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattDescriptor descriptors = 3; + */ + java.util.List + getDescriptorsList(); + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattDescriptor descriptors = 3; + */ + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor getDescriptors(int index); + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattDescriptor descriptors = 3; + */ + int getDescriptorsCount(); + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattDescriptor descriptors = 3; + */ + java.util.List + getDescriptorsOrBuilderList(); + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattDescriptor descriptors = 3; + */ + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorOrBuilder getDescriptorsOrBuilder( + int index); + + /** + * bool canRead = 4; + * @return The canRead. + */ + boolean getCanRead(); + + /** + * bool canWrite = 5; + * @return The canWrite. + */ + boolean getCanWrite(); + + /** + * bool canWriteWithoutResponse = 6; + * @return The canWriteWithoutResponse. + */ + boolean getCanWriteWithoutResponse(); + + /** + * bool canNotify = 7; + * @return The canNotify. + */ + boolean getCanNotify(); + } + /** + * Protobuf type {@code dev.yanshouwang.bluetooth_low_energy.GattCharacteristic} + */ + public static final class GattCharacteristic extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:dev.yanshouwang.bluetooth_low_energy.GattCharacteristic) + GattCharacteristicOrBuilder { + private static final long serialVersionUID = 0L; + // Use GattCharacteristic.newBuilder() to construct. + private GattCharacteristic(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private GattCharacteristic() { + uuid_ = ""; + descriptors_ = java.util.Collections.emptyList(); + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new GattCharacteristic(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private GattCharacteristic( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: { + + id_ = input.readInt32(); + break; + } + case 18: { + java.lang.String s = input.readStringRequireUtf8(); + + uuid_ = s; + break; + } + case 26: { + if (!((mutable_bitField0_ & 0x00000001) != 0)) { + descriptors_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000001; + } + descriptors_.add( + input.readMessage(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor.parser(), extensionRegistry)); + break; + } + case 32: { + + canRead_ = input.readBool(); + break; + } + case 40: { + + canWrite_ = input.readBool(); + break; + } + case 48: { + + canWriteWithoutResponse_ = input.readBool(); + break; + } + case 56: { + + canNotify_ = input.readBool(); + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + if (((mutable_bitField0_ & 0x00000001) != 0)) { + descriptors_ = java.util.Collections.unmodifiableList(descriptors_); + } + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_GattCharacteristic_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_GattCharacteristic_fieldAccessorTable + .ensureFieldAccessorsInitialized( + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic.class, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic.Builder.class); + } + + public static final int ID_FIELD_NUMBER = 1; + private int id_; + /** + * int32 id = 1; + * @return The id. + */ + @java.lang.Override + public int getId() { + return id_; + } + + public static final int UUID_FIELD_NUMBER = 2; + private volatile java.lang.Object uuid_; + /** + * string uuid = 2; + * @return The uuid. + */ + @java.lang.Override + public java.lang.String getUuid() { + java.lang.Object ref = uuid_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + uuid_ = s; + return s; + } + } + /** + * string uuid = 2; + * @return The bytes for uuid. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getUuidBytes() { + java.lang.Object ref = uuid_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + uuid_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int DESCRIPTORS_FIELD_NUMBER = 3; + private java.util.List descriptors_; + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattDescriptor descriptors = 3; + */ + @java.lang.Override + public java.util.List getDescriptorsList() { + return descriptors_; + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattDescriptor descriptors = 3; + */ + @java.lang.Override + public java.util.List + getDescriptorsOrBuilderList() { + return descriptors_; + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattDescriptor descriptors = 3; + */ + @java.lang.Override + public int getDescriptorsCount() { + return descriptors_.size(); + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattDescriptor descriptors = 3; + */ + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor getDescriptors(int index) { + return descriptors_.get(index); + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattDescriptor descriptors = 3; + */ + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorOrBuilder getDescriptorsOrBuilder( + int index) { + return descriptors_.get(index); + } + + public static final int CANREAD_FIELD_NUMBER = 4; + private boolean canRead_; + /** + * bool canRead = 4; + * @return The canRead. + */ + @java.lang.Override + public boolean getCanRead() { + return canRead_; + } + + public static final int CANWRITE_FIELD_NUMBER = 5; + private boolean canWrite_; + /** + * bool canWrite = 5; + * @return The canWrite. + */ + @java.lang.Override + public boolean getCanWrite() { + return canWrite_; + } + + public static final int CANWRITEWITHOUTRESPONSE_FIELD_NUMBER = 6; + private boolean canWriteWithoutResponse_; + /** + * bool canWriteWithoutResponse = 6; + * @return The canWriteWithoutResponse. + */ + @java.lang.Override + public boolean getCanWriteWithoutResponse() { + return canWriteWithoutResponse_; + } + + public static final int CANNOTIFY_FIELD_NUMBER = 7; + private boolean canNotify_; + /** + * bool canNotify = 7; + * @return The canNotify. + */ + @java.lang.Override + public boolean getCanNotify() { + return canNotify_; + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (id_ != 0) { + output.writeInt32(1, id_); + } + if (!getUuidBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 2, uuid_); + } + for (int i = 0; i < descriptors_.size(); i++) { + output.writeMessage(3, descriptors_.get(i)); + } + if (canRead_ != false) { + output.writeBool(4, canRead_); + } + if (canWrite_ != false) { + output.writeBool(5, canWrite_); + } + if (canWriteWithoutResponse_ != false) { + output.writeBool(6, canWriteWithoutResponse_); + } + if (canNotify_ != false) { + output.writeBool(7, canNotify_); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (id_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(1, id_); + } + if (!getUuidBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, uuid_); + } + for (int i = 0; i < descriptors_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(3, descriptors_.get(i)); + } + if (canRead_ != false) { + size += com.google.protobuf.CodedOutputStream + .computeBoolSize(4, canRead_); + } + if (canWrite_ != false) { + size += com.google.protobuf.CodedOutputStream + .computeBoolSize(5, canWrite_); + } + if (canWriteWithoutResponse_ != false) { + size += com.google.protobuf.CodedOutputStream + .computeBoolSize(6, canWriteWithoutResponse_); + } + if (canNotify_ != false) { + size += com.google.protobuf.CodedOutputStream + .computeBoolSize(7, canNotify_); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic)) { + return super.equals(obj); + } + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic other = (dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic) obj; + + if (getId() + != other.getId()) return false; + if (!getUuid() + .equals(other.getUuid())) return false; + if (!getDescriptorsList() + .equals(other.getDescriptorsList())) return false; + if (getCanRead() + != other.getCanRead()) return false; + if (getCanWrite() + != other.getCanWrite()) return false; + if (getCanWriteWithoutResponse() + != other.getCanWriteWithoutResponse()) return false; + if (getCanNotify() + != other.getCanNotify()) return false; + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + ID_FIELD_NUMBER; + hash = (53 * hash) + getId(); + hash = (37 * hash) + UUID_FIELD_NUMBER; + hash = (53 * hash) + getUuid().hashCode(); + if (getDescriptorsCount() > 0) { + hash = (37 * hash) + DESCRIPTORS_FIELD_NUMBER; + hash = (53 * hash) + getDescriptorsList().hashCode(); + } + hash = (37 * hash) + CANREAD_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean( + getCanRead()); + hash = (37 * hash) + CANWRITE_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean( + getCanWrite()); + hash = (37 * hash) + CANWRITEWITHOUTRESPONSE_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean( + getCanWriteWithoutResponse()); + hash = (37 * hash) + CANNOTIFY_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean( + getCanNotify()); + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code dev.yanshouwang.bluetooth_low_energy.GattCharacteristic} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:dev.yanshouwang.bluetooth_low_energy.GattCharacteristic) + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_GattCharacteristic_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_GattCharacteristic_fieldAccessorTable + .ensureFieldAccessorsInitialized( + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic.class, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic.Builder.class); + } + + // Construct using dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + getDescriptorsFieldBuilder(); + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + id_ = 0; + + uuid_ = ""; + + if (descriptorsBuilder_ == null) { + descriptors_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + } else { + descriptorsBuilder_.clear(); + } + canRead_ = false; + + canWrite_ = false; + + canWriteWithoutResponse_ = false; + + canNotify_ = false; + + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_GattCharacteristic_descriptor; + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic getDefaultInstanceForType() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic.getDefaultInstance(); + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic build() { + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic buildPartial() { + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic result = new dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic(this); + int from_bitField0_ = bitField0_; + result.id_ = id_; + result.uuid_ = uuid_; + if (descriptorsBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0)) { + descriptors_ = java.util.Collections.unmodifiableList(descriptors_); + bitField0_ = (bitField0_ & ~0x00000001); + } + result.descriptors_ = descriptors_; + } else { + result.descriptors_ = descriptorsBuilder_.build(); + } + result.canRead_ = canRead_; + result.canWrite_ = canWrite_; + result.canWriteWithoutResponse_ = canWriteWithoutResponse_; + result.canNotify_ = canNotify_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic) { + return mergeFrom((dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic other) { + if (other == dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic.getDefaultInstance()) return this; + if (other.getId() != 0) { + setId(other.getId()); + } + if (!other.getUuid().isEmpty()) { + uuid_ = other.uuid_; + onChanged(); + } + if (descriptorsBuilder_ == null) { + if (!other.descriptors_.isEmpty()) { + if (descriptors_.isEmpty()) { + descriptors_ = other.descriptors_; + bitField0_ = (bitField0_ & ~0x00000001); + } else { + ensureDescriptorsIsMutable(); + descriptors_.addAll(other.descriptors_); + } + onChanged(); + } + } else { + if (!other.descriptors_.isEmpty()) { + if (descriptorsBuilder_.isEmpty()) { + descriptorsBuilder_.dispose(); + descriptorsBuilder_ = null; + descriptors_ = other.descriptors_; + bitField0_ = (bitField0_ & ~0x00000001); + descriptorsBuilder_ = + com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? + getDescriptorsFieldBuilder() : null; + } else { + descriptorsBuilder_.addAllMessages(other.descriptors_); + } + } + } + if (other.getCanRead() != false) { + setCanRead(other.getCanRead()); + } + if (other.getCanWrite() != false) { + setCanWrite(other.getCanWrite()); + } + if (other.getCanWriteWithoutResponse() != false) { + setCanWriteWithoutResponse(other.getCanWriteWithoutResponse()); + } + if (other.getCanNotify() != false) { + setCanNotify(other.getCanNotify()); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + private int bitField0_; + + private int id_ ; + /** + * int32 id = 1; + * @return The id. + */ + @java.lang.Override + public int getId() { + return id_; + } + /** + * int32 id = 1; + * @param value The id to set. + * @return This builder for chaining. + */ + public Builder setId(int value) { + + id_ = value; + onChanged(); + return this; + } + /** + * int32 id = 1; + * @return This builder for chaining. + */ + public Builder clearId() { + + id_ = 0; + onChanged(); + return this; + } + + private java.lang.Object uuid_ = ""; + /** + * string uuid = 2; + * @return The uuid. + */ + public java.lang.String getUuid() { + java.lang.Object ref = uuid_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + uuid_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string uuid = 2; + * @return The bytes for uuid. + */ + public com.google.protobuf.ByteString + getUuidBytes() { + java.lang.Object ref = uuid_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + uuid_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string uuid = 2; + * @param value The uuid to set. + * @return This builder for chaining. + */ + public Builder setUuid( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + uuid_ = value; + onChanged(); + return this; + } + /** + * string uuid = 2; + * @return This builder for chaining. + */ + public Builder clearUuid() { + + uuid_ = getDefaultInstance().getUuid(); + onChanged(); + return this; + } + /** + * string uuid = 2; + * @param value The bytes for uuid to set. + * @return This builder for chaining. + */ + public Builder setUuidBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + uuid_ = value; + onChanged(); + return this; + } + + private java.util.List descriptors_ = + java.util.Collections.emptyList(); + private void ensureDescriptorsIsMutable() { + if (!((bitField0_ & 0x00000001) != 0)) { + descriptors_ = new java.util.ArrayList(descriptors_); + bitField0_ |= 0x00000001; + } + } + + private com.google.protobuf.RepeatedFieldBuilderV3< + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor.Builder, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorOrBuilder> descriptorsBuilder_; + + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattDescriptor descriptors = 3; + */ + public java.util.List getDescriptorsList() { + if (descriptorsBuilder_ == null) { + return java.util.Collections.unmodifiableList(descriptors_); + } else { + return descriptorsBuilder_.getMessageList(); + } + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattDescriptor descriptors = 3; + */ + public int getDescriptorsCount() { + if (descriptorsBuilder_ == null) { + return descriptors_.size(); + } else { + return descriptorsBuilder_.getCount(); + } + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattDescriptor descriptors = 3; + */ + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor getDescriptors(int index) { + if (descriptorsBuilder_ == null) { + return descriptors_.get(index); + } else { + return descriptorsBuilder_.getMessage(index); + } + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattDescriptor descriptors = 3; + */ + public Builder setDescriptors( + int index, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor value) { + if (descriptorsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureDescriptorsIsMutable(); + descriptors_.set(index, value); + onChanged(); + } else { + descriptorsBuilder_.setMessage(index, value); + } + return this; + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattDescriptor descriptors = 3; + */ + public Builder setDescriptors( + int index, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor.Builder builderForValue) { + if (descriptorsBuilder_ == null) { + ensureDescriptorsIsMutable(); + descriptors_.set(index, builderForValue.build()); + onChanged(); + } else { + descriptorsBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattDescriptor descriptors = 3; + */ + public Builder addDescriptors(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor value) { + if (descriptorsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureDescriptorsIsMutable(); + descriptors_.add(value); + onChanged(); + } else { + descriptorsBuilder_.addMessage(value); + } + return this; + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattDescriptor descriptors = 3; + */ + public Builder addDescriptors( + int index, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor value) { + if (descriptorsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureDescriptorsIsMutable(); + descriptors_.add(index, value); + onChanged(); + } else { + descriptorsBuilder_.addMessage(index, value); + } + return this; + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattDescriptor descriptors = 3; + */ + public Builder addDescriptors( + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor.Builder builderForValue) { + if (descriptorsBuilder_ == null) { + ensureDescriptorsIsMutable(); + descriptors_.add(builderForValue.build()); + onChanged(); + } else { + descriptorsBuilder_.addMessage(builderForValue.build()); + } + return this; + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattDescriptor descriptors = 3; + */ + public Builder addDescriptors( + int index, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor.Builder builderForValue) { + if (descriptorsBuilder_ == null) { + ensureDescriptorsIsMutable(); + descriptors_.add(index, builderForValue.build()); + onChanged(); + } else { + descriptorsBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattDescriptor descriptors = 3; + */ + public Builder addAllDescriptors( + java.lang.Iterable values) { + if (descriptorsBuilder_ == null) { + ensureDescriptorsIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, descriptors_); + onChanged(); + } else { + descriptorsBuilder_.addAllMessages(values); + } + return this; + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattDescriptor descriptors = 3; + */ + public Builder clearDescriptors() { + if (descriptorsBuilder_ == null) { + descriptors_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + } else { + descriptorsBuilder_.clear(); + } + return this; + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattDescriptor descriptors = 3; + */ + public Builder removeDescriptors(int index) { + if (descriptorsBuilder_ == null) { + ensureDescriptorsIsMutable(); + descriptors_.remove(index); + onChanged(); + } else { + descriptorsBuilder_.remove(index); + } + return this; + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattDescriptor descriptors = 3; + */ + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor.Builder getDescriptorsBuilder( + int index) { + return getDescriptorsFieldBuilder().getBuilder(index); + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattDescriptor descriptors = 3; + */ + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorOrBuilder getDescriptorsOrBuilder( + int index) { + if (descriptorsBuilder_ == null) { + return descriptors_.get(index); } else { + return descriptorsBuilder_.getMessageOrBuilder(index); + } + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattDescriptor descriptors = 3; + */ + public java.util.List + getDescriptorsOrBuilderList() { + if (descriptorsBuilder_ != null) { + return descriptorsBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(descriptors_); + } + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattDescriptor descriptors = 3; + */ + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor.Builder addDescriptorsBuilder() { + return getDescriptorsFieldBuilder().addBuilder( + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor.getDefaultInstance()); + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattDescriptor descriptors = 3; + */ + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor.Builder addDescriptorsBuilder( + int index) { + return getDescriptorsFieldBuilder().addBuilder( + index, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor.getDefaultInstance()); + } + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattDescriptor descriptors = 3; + */ + public java.util.List + getDescriptorsBuilderList() { + return getDescriptorsFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilderV3< + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor.Builder, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorOrBuilder> + getDescriptorsFieldBuilder() { + if (descriptorsBuilder_ == null) { + descriptorsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor.Builder, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorOrBuilder>( + descriptors_, + ((bitField0_ & 0x00000001) != 0), + getParentForChildren(), + isClean()); + descriptors_ = null; + } + return descriptorsBuilder_; + } + + private boolean canRead_ ; + /** + * bool canRead = 4; + * @return The canRead. + */ + @java.lang.Override + public boolean getCanRead() { + return canRead_; + } + /** + * bool canRead = 4; + * @param value The canRead to set. + * @return This builder for chaining. + */ + public Builder setCanRead(boolean value) { + + canRead_ = value; + onChanged(); + return this; + } + /** + * bool canRead = 4; + * @return This builder for chaining. + */ + public Builder clearCanRead() { + + canRead_ = false; + onChanged(); + return this; + } + + private boolean canWrite_ ; + /** + * bool canWrite = 5; + * @return The canWrite. + */ + @java.lang.Override + public boolean getCanWrite() { + return canWrite_; + } + /** + * bool canWrite = 5; + * @param value The canWrite to set. + * @return This builder for chaining. + */ + public Builder setCanWrite(boolean value) { + + canWrite_ = value; + onChanged(); + return this; + } + /** + * bool canWrite = 5; + * @return This builder for chaining. + */ + public Builder clearCanWrite() { + + canWrite_ = false; + onChanged(); + return this; + } + + private boolean canWriteWithoutResponse_ ; + /** + * bool canWriteWithoutResponse = 6; + * @return The canWriteWithoutResponse. + */ + @java.lang.Override + public boolean getCanWriteWithoutResponse() { + return canWriteWithoutResponse_; + } + /** + * bool canWriteWithoutResponse = 6; + * @param value The canWriteWithoutResponse to set. + * @return This builder for chaining. + */ + public Builder setCanWriteWithoutResponse(boolean value) { + + canWriteWithoutResponse_ = value; + onChanged(); + return this; + } + /** + * bool canWriteWithoutResponse = 6; + * @return This builder for chaining. + */ + public Builder clearCanWriteWithoutResponse() { + + canWriteWithoutResponse_ = false; + onChanged(); + return this; + } + + private boolean canNotify_ ; + /** + * bool canNotify = 7; + * @return The canNotify. + */ + @java.lang.Override + public boolean getCanNotify() { + return canNotify_; + } + /** + * bool canNotify = 7; + * @param value The canNotify to set. + * @return This builder for chaining. + */ + public Builder setCanNotify(boolean value) { + + canNotify_ = value; + onChanged(); + return this; + } + /** + * bool canNotify = 7; + * @return This builder for chaining. + */ + public Builder clearCanNotify() { + + canNotify_ = false; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:dev.yanshouwang.bluetooth_low_energy.GattCharacteristic) + } + + // @@protoc_insertion_point(class_scope:dev.yanshouwang.bluetooth_low_energy.GattCharacteristic) + private static final dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic(); + } + + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public GattCharacteristic parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new GattCharacteristic(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface GattDescriptorOrBuilder extends + // @@protoc_insertion_point(interface_extends:dev.yanshouwang.bluetooth_low_energy.GattDescriptor) + com.google.protobuf.MessageOrBuilder { + + /** + * int32 id = 1; + * @return The id. + */ + int getId(); + + /** + * string uuid = 2; + * @return The uuid. + */ + java.lang.String getUuid(); + /** + * string uuid = 2; + * @return The bytes for uuid. + */ + com.google.protobuf.ByteString + getUuidBytes(); + } + /** + * Protobuf type {@code dev.yanshouwang.bluetooth_low_energy.GattDescriptor} + */ + public static final class GattDescriptor extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:dev.yanshouwang.bluetooth_low_energy.GattDescriptor) + GattDescriptorOrBuilder { + private static final long serialVersionUID = 0L; + // Use GattDescriptor.newBuilder() to construct. + private GattDescriptor(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private GattDescriptor() { + uuid_ = ""; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new GattDescriptor(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private GattDescriptor( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: { + + id_ = input.readInt32(); + break; + } + case 18: { + java.lang.String s = input.readStringRequireUtf8(); + + uuid_ = s; + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_GattDescriptor_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_GattDescriptor_fieldAccessorTable + .ensureFieldAccessorsInitialized( + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor.class, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor.Builder.class); + } + + public static final int ID_FIELD_NUMBER = 1; + private int id_; + /** + * int32 id = 1; + * @return The id. + */ + @java.lang.Override + public int getId() { + return id_; + } + + public static final int UUID_FIELD_NUMBER = 2; + private volatile java.lang.Object uuid_; + /** + * string uuid = 2; + * @return The uuid. + */ + @java.lang.Override + public java.lang.String getUuid() { + java.lang.Object ref = uuid_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + uuid_ = s; + return s; + } + } + /** + * string uuid = 2; + * @return The bytes for uuid. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getUuidBytes() { + java.lang.Object ref = uuid_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + uuid_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (id_ != 0) { + output.writeInt32(1, id_); + } + if (!getUuidBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 2, uuid_); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (id_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(1, id_); + } + if (!getUuidBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, uuid_); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor)) { + return super.equals(obj); + } + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor other = (dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor) obj; + + if (getId() + != other.getId()) return false; + if (!getUuid() + .equals(other.getUuid())) return false; + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + ID_FIELD_NUMBER; + hash = (53 * hash) + getId(); + hash = (37 * hash) + UUID_FIELD_NUMBER; + hash = (53 * hash) + getUuid().hashCode(); + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code dev.yanshouwang.bluetooth_low_energy.GattDescriptor} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:dev.yanshouwang.bluetooth_low_energy.GattDescriptor) + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_GattDescriptor_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_GattDescriptor_fieldAccessorTable + .ensureFieldAccessorsInitialized( + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor.class, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor.Builder.class); + } + + // Construct using dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + id_ = 0; + + uuid_ = ""; + + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_GattDescriptor_descriptor; + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor getDefaultInstanceForType() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor.getDefaultInstance(); + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor build() { + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor buildPartial() { + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor result = new dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor(this); + result.id_ = id_; + result.uuid_ = uuid_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor) { + return mergeFrom((dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor other) { + if (other == dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor.getDefaultInstance()) return this; + if (other.getId() != 0) { + setId(other.getId()); + } + if (!other.getUuid().isEmpty()) { + uuid_ = other.uuid_; + onChanged(); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + + private int id_ ; + /** + * int32 id = 1; + * @return The id. + */ + @java.lang.Override + public int getId() { + return id_; + } + /** + * int32 id = 1; + * @param value The id to set. + * @return This builder for chaining. + */ + public Builder setId(int value) { + + id_ = value; + onChanged(); + return this; + } + /** + * int32 id = 1; + * @return This builder for chaining. + */ + public Builder clearId() { + + id_ = 0; + onChanged(); + return this; + } + + private java.lang.Object uuid_ = ""; + /** + * string uuid = 2; + * @return The uuid. + */ + public java.lang.String getUuid() { + java.lang.Object ref = uuid_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + uuid_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string uuid = 2; + * @return The bytes for uuid. + */ + public com.google.protobuf.ByteString + getUuidBytes() { + java.lang.Object ref = uuid_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + uuid_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string uuid = 2; + * @param value The uuid to set. + * @return This builder for chaining. + */ + public Builder setUuid( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + uuid_ = value; + onChanged(); + return this; + } + /** + * string uuid = 2; + * @return This builder for chaining. + */ + public Builder clearUuid() { + + uuid_ = getDefaultInstance().getUuid(); + onChanged(); + return this; + } + /** + * string uuid = 2; + * @param value The bytes for uuid to set. + * @return This builder for chaining. + */ + public Builder setUuidBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + uuid_ = value; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:dev.yanshouwang.bluetooth_low_energy.GattDescriptor) + } + + // @@protoc_insertion_point(class_scope:dev.yanshouwang.bluetooth_low_energy.GattDescriptor) + private static final dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor(); + } + + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public GattDescriptor parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new GattDescriptor(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface ConnectionLostOrBuilder extends + // @@protoc_insertion_point(interface_extends:dev.yanshouwang.bluetooth_low_energy.ConnectionLost) + com.google.protobuf.MessageOrBuilder { + + /** + * int32 id = 1; + * @return The id. + */ + int getId(); + + /** + * int32 error_code = 2; + * @return The errorCode. + */ + int getErrorCode(); + } + /** + * Protobuf type {@code dev.yanshouwang.bluetooth_low_energy.ConnectionLost} + */ + public static final class ConnectionLost extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:dev.yanshouwang.bluetooth_low_energy.ConnectionLost) + ConnectionLostOrBuilder { + private static final long serialVersionUID = 0L; + // Use ConnectionLost.newBuilder() to construct. + private ConnectionLost(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private ConnectionLost() { + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new ConnectionLost(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private ConnectionLost( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: { + + id_ = input.readInt32(); + break; + } + case 16: { + + errorCode_ = input.readInt32(); + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_ConnectionLost_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_ConnectionLost_fieldAccessorTable + .ensureFieldAccessorsInitialized( + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost.class, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost.Builder.class); + } + + public static final int ID_FIELD_NUMBER = 1; + private int id_; + /** + * int32 id = 1; + * @return The id. + */ + @java.lang.Override + public int getId() { + return id_; + } + + public static final int ERROR_CODE_FIELD_NUMBER = 2; + private int errorCode_; + /** + * int32 error_code = 2; + * @return The errorCode. + */ + @java.lang.Override + public int getErrorCode() { + return errorCode_; + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (id_ != 0) { + output.writeInt32(1, id_); + } + if (errorCode_ != 0) { + output.writeInt32(2, errorCode_); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (id_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(1, id_); + } + if (errorCode_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(2, errorCode_); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost)) { + return super.equals(obj); + } + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost other = (dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost) obj; + + if (getId() + != other.getId()) return false; + if (getErrorCode() + != other.getErrorCode()) return false; + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + ID_FIELD_NUMBER; + hash = (53 * hash) + getId(); + hash = (37 * hash) + ERROR_CODE_FIELD_NUMBER; + hash = (53 * hash) + getErrorCode(); + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code dev.yanshouwang.bluetooth_low_energy.ConnectionLost} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:dev.yanshouwang.bluetooth_low_energy.ConnectionLost) + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLostOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_ConnectionLost_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_ConnectionLost_fieldAccessorTable + .ensureFieldAccessorsInitialized( + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost.class, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost.Builder.class); + } + + // Construct using dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + id_ = 0; + + errorCode_ = 0; + + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_ConnectionLost_descriptor; + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost getDefaultInstanceForType() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost.getDefaultInstance(); + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost build() { + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost buildPartial() { + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost result = new dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost(this); + result.id_ = id_; + result.errorCode_ = errorCode_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost) { + return mergeFrom((dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost other) { + if (other == dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost.getDefaultInstance()) return this; + if (other.getId() != 0) { + setId(other.getId()); + } + if (other.getErrorCode() != 0) { + setErrorCode(other.getErrorCode()); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + + private int id_ ; + /** + * int32 id = 1; + * @return The id. + */ + @java.lang.Override + public int getId() { + return id_; + } + /** + * int32 id = 1; + * @param value The id to set. + * @return This builder for chaining. + */ + public Builder setId(int value) { + + id_ = value; + onChanged(); + return this; + } + /** + * int32 id = 1; + * @return This builder for chaining. + */ + public Builder clearId() { + + id_ = 0; + onChanged(); + return this; + } + + private int errorCode_ ; + /** + * int32 error_code = 2; + * @return The errorCode. + */ + @java.lang.Override + public int getErrorCode() { + return errorCode_; + } + /** + * int32 error_code = 2; + * @param value The errorCode to set. + * @return This builder for chaining. + */ + public Builder setErrorCode(int value) { + + errorCode_ = value; + onChanged(); + return this; + } + /** + * int32 error_code = 2; + * @return This builder for chaining. + */ + public Builder clearErrorCode() { + + errorCode_ = 0; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:dev.yanshouwang.bluetooth_low_energy.ConnectionLost) + } + + // @@protoc_insertion_point(class_scope:dev.yanshouwang.bluetooth_low_energy.ConnectionLost) + private static final dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost(); + } + + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ConnectionLost parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new ConnectionLost(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface GattCharacteristicReadArgumentsOrBuilder extends + // @@protoc_insertion_point(interface_extends:dev.yanshouwang.bluetooth_low_energy.GattCharacteristicReadArguments) + com.google.protobuf.MessageOrBuilder { + + /** + * string address = 1; + * @return The address. + */ + java.lang.String getAddress(); + /** + * string address = 1; + * @return The bytes for address. + */ + com.google.protobuf.ByteString + getAddressBytes(); + + /** + * string service_uuid = 2; + * @return The serviceUuid. + */ + java.lang.String getServiceUuid(); + /** + * string service_uuid = 2; + * @return The bytes for serviceUuid. + */ + com.google.protobuf.ByteString + getServiceUuidBytes(); + + /** + * string uuid = 3; + * @return The uuid. + */ + java.lang.String getUuid(); + /** + * string uuid = 3; + * @return The bytes for uuid. + */ + com.google.protobuf.ByteString + getUuidBytes(); + + /** + * int32 id = 4; + * @return The id. + */ + int getId(); + } + /** + * Protobuf type {@code dev.yanshouwang.bluetooth_low_energy.GattCharacteristicReadArguments} + */ + public static final class GattCharacteristicReadArguments extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:dev.yanshouwang.bluetooth_low_energy.GattCharacteristicReadArguments) + GattCharacteristicReadArgumentsOrBuilder { + private static final long serialVersionUID = 0L; + // Use GattCharacteristicReadArguments.newBuilder() to construct. + private GattCharacteristicReadArguments(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private GattCharacteristicReadArguments() { + address_ = ""; + serviceUuid_ = ""; + uuid_ = ""; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new GattCharacteristicReadArguments(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private GattCharacteristicReadArguments( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + java.lang.String s = input.readStringRequireUtf8(); + + address_ = s; + break; + } + case 18: { + java.lang.String s = input.readStringRequireUtf8(); + + serviceUuid_ = s; + break; + } + case 26: { + java.lang.String s = input.readStringRequireUtf8(); + + uuid_ = s; + break; + } + case 32: { + + id_ = input.readInt32(); + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_GattCharacteristicReadArguments_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_GattCharacteristicReadArguments_fieldAccessorTable + .ensureFieldAccessorsInitialized( + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicReadArguments.class, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicReadArguments.Builder.class); + } + + public static final int ADDRESS_FIELD_NUMBER = 1; + private volatile java.lang.Object address_; + /** + * string address = 1; + * @return The address. + */ + @java.lang.Override + public java.lang.String getAddress() { + java.lang.Object ref = address_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + address_ = s; + return s; + } + } + /** + * string address = 1; + * @return The bytes for address. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getAddressBytes() { + java.lang.Object ref = address_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + address_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int SERVICE_UUID_FIELD_NUMBER = 2; + private volatile java.lang.Object serviceUuid_; + /** + * string service_uuid = 2; + * @return The serviceUuid. + */ + @java.lang.Override + public java.lang.String getServiceUuid() { + java.lang.Object ref = serviceUuid_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + serviceUuid_ = s; + return s; + } + } + /** + * string service_uuid = 2; + * @return The bytes for serviceUuid. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getServiceUuidBytes() { + java.lang.Object ref = serviceUuid_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + serviceUuid_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int UUID_FIELD_NUMBER = 3; + private volatile java.lang.Object uuid_; + /** + * string uuid = 3; + * @return The uuid. + */ + @java.lang.Override + public java.lang.String getUuid() { + java.lang.Object ref = uuid_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + uuid_ = s; + return s; + } + } + /** + * string uuid = 3; + * @return The bytes for uuid. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getUuidBytes() { + java.lang.Object ref = uuid_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + uuid_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int ID_FIELD_NUMBER = 4; + private int id_; + /** + * int32 id = 4; + * @return The id. + */ + @java.lang.Override + public int getId() { + return id_; + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (!getAddressBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 1, address_); + } + if (!getServiceUuidBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 2, serviceUuid_); + } + if (!getUuidBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 3, uuid_); + } + if (id_ != 0) { + output.writeInt32(4, id_); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!getAddressBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, address_); + } + if (!getServiceUuidBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, serviceUuid_); + } + if (!getUuidBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, uuid_); + } + if (id_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(4, id_); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicReadArguments)) { + return super.equals(obj); + } + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicReadArguments other = (dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicReadArguments) obj; + + if (!getAddress() + .equals(other.getAddress())) return false; + if (!getServiceUuid() + .equals(other.getServiceUuid())) return false; + if (!getUuid() + .equals(other.getUuid())) return false; + if (getId() + != other.getId()) return false; + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + ADDRESS_FIELD_NUMBER; + hash = (53 * hash) + getAddress().hashCode(); + hash = (37 * hash) + SERVICE_UUID_FIELD_NUMBER; + hash = (53 * hash) + getServiceUuid().hashCode(); + hash = (37 * hash) + UUID_FIELD_NUMBER; + hash = (53 * hash) + getUuid().hashCode(); + hash = (37 * hash) + ID_FIELD_NUMBER; + hash = (53 * hash) + getId(); + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicReadArguments parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicReadArguments parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicReadArguments parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicReadArguments parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicReadArguments parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicReadArguments parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicReadArguments parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicReadArguments parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicReadArguments parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicReadArguments parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicReadArguments parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicReadArguments parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicReadArguments prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code dev.yanshouwang.bluetooth_low_energy.GattCharacteristicReadArguments} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:dev.yanshouwang.bluetooth_low_energy.GattCharacteristicReadArguments) + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicReadArgumentsOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_GattCharacteristicReadArguments_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_GattCharacteristicReadArguments_fieldAccessorTable + .ensureFieldAccessorsInitialized( + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicReadArguments.class, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicReadArguments.Builder.class); + } + + // Construct using dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicReadArguments.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + address_ = ""; + + serviceUuid_ = ""; + + uuid_ = ""; + + id_ = 0; + + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_GattCharacteristicReadArguments_descriptor; + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicReadArguments getDefaultInstanceForType() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicReadArguments.getDefaultInstance(); + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicReadArguments build() { + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicReadArguments result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicReadArguments buildPartial() { + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicReadArguments result = new dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicReadArguments(this); + result.address_ = address_; + result.serviceUuid_ = serviceUuid_; + result.uuid_ = uuid_; + result.id_ = id_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicReadArguments) { + return mergeFrom((dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicReadArguments)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicReadArguments other) { + if (other == dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicReadArguments.getDefaultInstance()) return this; + if (!other.getAddress().isEmpty()) { + address_ = other.address_; + onChanged(); + } + if (!other.getServiceUuid().isEmpty()) { + serviceUuid_ = other.serviceUuid_; + onChanged(); + } + if (!other.getUuid().isEmpty()) { + uuid_ = other.uuid_; + onChanged(); + } + if (other.getId() != 0) { + setId(other.getId()); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicReadArguments parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicReadArguments) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + + private java.lang.Object address_ = ""; + /** + * string address = 1; + * @return The address. + */ + public java.lang.String getAddress() { + java.lang.Object ref = address_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + address_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string address = 1; + * @return The bytes for address. + */ + public com.google.protobuf.ByteString + getAddressBytes() { + java.lang.Object ref = address_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + address_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string address = 1; + * @param value The address to set. + * @return This builder for chaining. + */ + public Builder setAddress( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + address_ = value; + onChanged(); + return this; + } + /** + * string address = 1; + * @return This builder for chaining. + */ + public Builder clearAddress() { + + address_ = getDefaultInstance().getAddress(); + onChanged(); + return this; + } + /** + * string address = 1; + * @param value The bytes for address to set. + * @return This builder for chaining. + */ + public Builder setAddressBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + address_ = value; + onChanged(); + return this; + } + + private java.lang.Object serviceUuid_ = ""; + /** + * string service_uuid = 2; + * @return The serviceUuid. + */ + public java.lang.String getServiceUuid() { + java.lang.Object ref = serviceUuid_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + serviceUuid_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string service_uuid = 2; + * @return The bytes for serviceUuid. + */ + public com.google.protobuf.ByteString + getServiceUuidBytes() { + java.lang.Object ref = serviceUuid_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + serviceUuid_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string service_uuid = 2; + * @param value The serviceUuid to set. + * @return This builder for chaining. + */ + public Builder setServiceUuid( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + serviceUuid_ = value; + onChanged(); + return this; + } + /** + * string service_uuid = 2; + * @return This builder for chaining. + */ + public Builder clearServiceUuid() { + + serviceUuid_ = getDefaultInstance().getServiceUuid(); + onChanged(); + return this; + } + /** + * string service_uuid = 2; + * @param value The bytes for serviceUuid to set. + * @return This builder for chaining. + */ + public Builder setServiceUuidBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + serviceUuid_ = value; + onChanged(); + return this; + } + + private java.lang.Object uuid_ = ""; + /** + * string uuid = 3; + * @return The uuid. + */ + public java.lang.String getUuid() { + java.lang.Object ref = uuid_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + uuid_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string uuid = 3; + * @return The bytes for uuid. + */ + public com.google.protobuf.ByteString + getUuidBytes() { + java.lang.Object ref = uuid_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + uuid_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string uuid = 3; + * @param value The uuid to set. + * @return This builder for chaining. + */ + public Builder setUuid( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + uuid_ = value; + onChanged(); + return this; + } + /** + * string uuid = 3; + * @return This builder for chaining. + */ + public Builder clearUuid() { + + uuid_ = getDefaultInstance().getUuid(); + onChanged(); + return this; + } + /** + * string uuid = 3; + * @param value The bytes for uuid to set. + * @return This builder for chaining. + */ + public Builder setUuidBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + uuid_ = value; + onChanged(); + return this; + } + + private int id_ ; + /** + * int32 id = 4; + * @return The id. + */ + @java.lang.Override + public int getId() { + return id_; + } + /** + * int32 id = 4; + * @param value The id to set. + * @return This builder for chaining. + */ + public Builder setId(int value) { + + id_ = value; + onChanged(); + return this; + } + /** + * int32 id = 4; + * @return This builder for chaining. + */ + public Builder clearId() { + + id_ = 0; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:dev.yanshouwang.bluetooth_low_energy.GattCharacteristicReadArguments) + } + + // @@protoc_insertion_point(class_scope:dev.yanshouwang.bluetooth_low_energy.GattCharacteristicReadArguments) + private static final dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicReadArguments DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicReadArguments(); + } + + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicReadArguments getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public GattCharacteristicReadArguments parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new GattCharacteristicReadArguments(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicReadArguments getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface GattCharacteristicWriteArgumentsOrBuilder extends + // @@protoc_insertion_point(interface_extends:dev.yanshouwang.bluetooth_low_energy.GattCharacteristicWriteArguments) + com.google.protobuf.MessageOrBuilder { + + /** + * string address = 1; + * @return The address. + */ + java.lang.String getAddress(); + /** + * string address = 1; + * @return The bytes for address. + */ + com.google.protobuf.ByteString + getAddressBytes(); + + /** + * string service_uuid = 2; + * @return The serviceUuid. + */ + java.lang.String getServiceUuid(); + /** + * string service_uuid = 2; + * @return The bytes for serviceUuid. + */ + com.google.protobuf.ByteString + getServiceUuidBytes(); + + /** + * string uuid = 3; + * @return The uuid. + */ + java.lang.String getUuid(); + /** + * string uuid = 3; + * @return The bytes for uuid. + */ + com.google.protobuf.ByteString + getUuidBytes(); + + /** + * int32 id = 4; + * @return The id. + */ + int getId(); + + /** + * bytes value = 5; + * @return The value. + */ + com.google.protobuf.ByteString getValue(); + + /** + * bool withoutResponse = 6; + * @return The withoutResponse. + */ + boolean getWithoutResponse(); + } + /** + * Protobuf type {@code dev.yanshouwang.bluetooth_low_energy.GattCharacteristicWriteArguments} + */ + public static final class GattCharacteristicWriteArguments extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:dev.yanshouwang.bluetooth_low_energy.GattCharacteristicWriteArguments) + GattCharacteristicWriteArgumentsOrBuilder { + private static final long serialVersionUID = 0L; + // Use GattCharacteristicWriteArguments.newBuilder() to construct. + private GattCharacteristicWriteArguments(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private GattCharacteristicWriteArguments() { + address_ = ""; + serviceUuid_ = ""; + uuid_ = ""; + value_ = com.google.protobuf.ByteString.EMPTY; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new GattCharacteristicWriteArguments(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private GattCharacteristicWriteArguments( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + java.lang.String s = input.readStringRequireUtf8(); + + address_ = s; + break; + } + case 18: { + java.lang.String s = input.readStringRequireUtf8(); + + serviceUuid_ = s; + break; + } + case 26: { + java.lang.String s = input.readStringRequireUtf8(); + + uuid_ = s; + break; + } + case 32: { + + id_ = input.readInt32(); + break; + } + case 42: { + + value_ = input.readBytes(); + break; + } + case 48: { + + withoutResponse_ = input.readBool(); + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_GattCharacteristicWriteArguments_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_GattCharacteristicWriteArguments_fieldAccessorTable + .ensureFieldAccessorsInitialized( + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicWriteArguments.class, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicWriteArguments.Builder.class); + } + + public static final int ADDRESS_FIELD_NUMBER = 1; + private volatile java.lang.Object address_; + /** + * string address = 1; + * @return The address. + */ + @java.lang.Override + public java.lang.String getAddress() { + java.lang.Object ref = address_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + address_ = s; + return s; + } + } + /** + * string address = 1; + * @return The bytes for address. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getAddressBytes() { + java.lang.Object ref = address_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + address_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int SERVICE_UUID_FIELD_NUMBER = 2; + private volatile java.lang.Object serviceUuid_; + /** + * string service_uuid = 2; + * @return The serviceUuid. + */ + @java.lang.Override + public java.lang.String getServiceUuid() { + java.lang.Object ref = serviceUuid_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + serviceUuid_ = s; + return s; + } + } + /** + * string service_uuid = 2; + * @return The bytes for serviceUuid. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getServiceUuidBytes() { + java.lang.Object ref = serviceUuid_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + serviceUuid_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int UUID_FIELD_NUMBER = 3; + private volatile java.lang.Object uuid_; + /** + * string uuid = 3; + * @return The uuid. + */ + @java.lang.Override + public java.lang.String getUuid() { + java.lang.Object ref = uuid_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + uuid_ = s; + return s; + } + } + /** + * string uuid = 3; + * @return The bytes for uuid. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getUuidBytes() { + java.lang.Object ref = uuid_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + uuid_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int ID_FIELD_NUMBER = 4; + private int id_; + /** + * int32 id = 4; + * @return The id. + */ + @java.lang.Override + public int getId() { + return id_; + } + + public static final int VALUE_FIELD_NUMBER = 5; + private com.google.protobuf.ByteString value_; + /** + * bytes value = 5; + * @return The value. + */ + @java.lang.Override + public com.google.protobuf.ByteString getValue() { + return value_; + } + + public static final int WITHOUTRESPONSE_FIELD_NUMBER = 6; + private boolean withoutResponse_; + /** + * bool withoutResponse = 6; + * @return The withoutResponse. + */ + @java.lang.Override + public boolean getWithoutResponse() { + return withoutResponse_; + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (!getAddressBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 1, address_); + } + if (!getServiceUuidBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 2, serviceUuid_); + } + if (!getUuidBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 3, uuid_); + } + if (id_ != 0) { + output.writeInt32(4, id_); + } + if (!value_.isEmpty()) { + output.writeBytes(5, value_); + } + if (withoutResponse_ != false) { + output.writeBool(6, withoutResponse_); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!getAddressBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, address_); + } + if (!getServiceUuidBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, serviceUuid_); + } + if (!getUuidBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, uuid_); + } + if (id_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(4, id_); + } + if (!value_.isEmpty()) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(5, value_); + } + if (withoutResponse_ != false) { + size += com.google.protobuf.CodedOutputStream + .computeBoolSize(6, withoutResponse_); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicWriteArguments)) { + return super.equals(obj); + } + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicWriteArguments other = (dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicWriteArguments) obj; + + if (!getAddress() + .equals(other.getAddress())) return false; + if (!getServiceUuid() + .equals(other.getServiceUuid())) return false; + if (!getUuid() + .equals(other.getUuid())) return false; + if (getId() + != other.getId()) return false; + if (!getValue() + .equals(other.getValue())) return false; + if (getWithoutResponse() + != other.getWithoutResponse()) return false; + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + ADDRESS_FIELD_NUMBER; + hash = (53 * hash) + getAddress().hashCode(); + hash = (37 * hash) + SERVICE_UUID_FIELD_NUMBER; + hash = (53 * hash) + getServiceUuid().hashCode(); + hash = (37 * hash) + UUID_FIELD_NUMBER; + hash = (53 * hash) + getUuid().hashCode(); + hash = (37 * hash) + ID_FIELD_NUMBER; + hash = (53 * hash) + getId(); + hash = (37 * hash) + VALUE_FIELD_NUMBER; + hash = (53 * hash) + getValue().hashCode(); + hash = (37 * hash) + WITHOUTRESPONSE_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean( + getWithoutResponse()); + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicWriteArguments parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicWriteArguments parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicWriteArguments parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicWriteArguments parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicWriteArguments parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicWriteArguments parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicWriteArguments parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicWriteArguments parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicWriteArguments parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicWriteArguments parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicWriteArguments parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicWriteArguments parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicWriteArguments prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code dev.yanshouwang.bluetooth_low_energy.GattCharacteristicWriteArguments} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:dev.yanshouwang.bluetooth_low_energy.GattCharacteristicWriteArguments) + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicWriteArgumentsOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_GattCharacteristicWriteArguments_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_GattCharacteristicWriteArguments_fieldAccessorTable + .ensureFieldAccessorsInitialized( + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicWriteArguments.class, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicWriteArguments.Builder.class); + } + + // Construct using dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicWriteArguments.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + address_ = ""; + + serviceUuid_ = ""; + + uuid_ = ""; + + id_ = 0; + + value_ = com.google.protobuf.ByteString.EMPTY; + + withoutResponse_ = false; + + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_GattCharacteristicWriteArguments_descriptor; + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicWriteArguments getDefaultInstanceForType() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicWriteArguments.getDefaultInstance(); + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicWriteArguments build() { + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicWriteArguments result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicWriteArguments buildPartial() { + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicWriteArguments result = new dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicWriteArguments(this); + result.address_ = address_; + result.serviceUuid_ = serviceUuid_; + result.uuid_ = uuid_; + result.id_ = id_; + result.value_ = value_; + result.withoutResponse_ = withoutResponse_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicWriteArguments) { + return mergeFrom((dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicWriteArguments)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicWriteArguments other) { + if (other == dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicWriteArguments.getDefaultInstance()) return this; + if (!other.getAddress().isEmpty()) { + address_ = other.address_; + onChanged(); + } + if (!other.getServiceUuid().isEmpty()) { + serviceUuid_ = other.serviceUuid_; + onChanged(); + } + if (!other.getUuid().isEmpty()) { + uuid_ = other.uuid_; + onChanged(); + } + if (other.getId() != 0) { + setId(other.getId()); + } + if (other.getValue() != com.google.protobuf.ByteString.EMPTY) { + setValue(other.getValue()); + } + if (other.getWithoutResponse() != false) { + setWithoutResponse(other.getWithoutResponse()); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicWriteArguments parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicWriteArguments) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + + private java.lang.Object address_ = ""; + /** + * string address = 1; + * @return The address. + */ + public java.lang.String getAddress() { + java.lang.Object ref = address_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + address_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string address = 1; + * @return The bytes for address. + */ + public com.google.protobuf.ByteString + getAddressBytes() { + java.lang.Object ref = address_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + address_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string address = 1; + * @param value The address to set. + * @return This builder for chaining. + */ + public Builder setAddress( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + address_ = value; + onChanged(); + return this; + } + /** + * string address = 1; + * @return This builder for chaining. + */ + public Builder clearAddress() { + + address_ = getDefaultInstance().getAddress(); + onChanged(); + return this; + } + /** + * string address = 1; + * @param value The bytes for address to set. + * @return This builder for chaining. + */ + public Builder setAddressBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + address_ = value; + onChanged(); + return this; + } + + private java.lang.Object serviceUuid_ = ""; + /** + * string service_uuid = 2; + * @return The serviceUuid. + */ + public java.lang.String getServiceUuid() { + java.lang.Object ref = serviceUuid_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + serviceUuid_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string service_uuid = 2; + * @return The bytes for serviceUuid. + */ + public com.google.protobuf.ByteString + getServiceUuidBytes() { + java.lang.Object ref = serviceUuid_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + serviceUuid_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string service_uuid = 2; + * @param value The serviceUuid to set. + * @return This builder for chaining. + */ + public Builder setServiceUuid( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + serviceUuid_ = value; + onChanged(); + return this; + } + /** + * string service_uuid = 2; + * @return This builder for chaining. + */ + public Builder clearServiceUuid() { + + serviceUuid_ = getDefaultInstance().getServiceUuid(); + onChanged(); + return this; + } + /** + * string service_uuid = 2; + * @param value The bytes for serviceUuid to set. + * @return This builder for chaining. + */ + public Builder setServiceUuidBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + serviceUuid_ = value; + onChanged(); + return this; + } + + private java.lang.Object uuid_ = ""; + /** + * string uuid = 3; + * @return The uuid. + */ + public java.lang.String getUuid() { + java.lang.Object ref = uuid_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + uuid_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string uuid = 3; + * @return The bytes for uuid. + */ + public com.google.protobuf.ByteString + getUuidBytes() { + java.lang.Object ref = uuid_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + uuid_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string uuid = 3; + * @param value The uuid to set. + * @return This builder for chaining. + */ + public Builder setUuid( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + uuid_ = value; + onChanged(); + return this; + } + /** + * string uuid = 3; + * @return This builder for chaining. + */ + public Builder clearUuid() { + + uuid_ = getDefaultInstance().getUuid(); + onChanged(); + return this; + } + /** + * string uuid = 3; + * @param value The bytes for uuid to set. + * @return This builder for chaining. + */ + public Builder setUuidBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + uuid_ = value; + onChanged(); + return this; + } + + private int id_ ; + /** + * int32 id = 4; + * @return The id. + */ + @java.lang.Override + public int getId() { + return id_; + } + /** + * int32 id = 4; + * @param value The id to set. + * @return This builder for chaining. + */ + public Builder setId(int value) { + + id_ = value; + onChanged(); + return this; + } + /** + * int32 id = 4; + * @return This builder for chaining. + */ + public Builder clearId() { + + id_ = 0; + onChanged(); + return this; + } + + private com.google.protobuf.ByteString value_ = com.google.protobuf.ByteString.EMPTY; + /** + * bytes value = 5; + * @return The value. + */ + @java.lang.Override + public com.google.protobuf.ByteString getValue() { + return value_; + } + /** + * bytes value = 5; + * @param value The value to set. + * @return This builder for chaining. + */ + public Builder setValue(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + + value_ = value; + onChanged(); + return this; + } + /** + * bytes value = 5; + * @return This builder for chaining. + */ + public Builder clearValue() { + + value_ = getDefaultInstance().getValue(); + onChanged(); + return this; + } + + private boolean withoutResponse_ ; + /** + * bool withoutResponse = 6; + * @return The withoutResponse. + */ + @java.lang.Override + public boolean getWithoutResponse() { + return withoutResponse_; + } + /** + * bool withoutResponse = 6; + * @param value The withoutResponse to set. + * @return This builder for chaining. + */ + public Builder setWithoutResponse(boolean value) { + + withoutResponse_ = value; + onChanged(); + return this; + } + /** + * bool withoutResponse = 6; + * @return This builder for chaining. + */ + public Builder clearWithoutResponse() { + + withoutResponse_ = false; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:dev.yanshouwang.bluetooth_low_energy.GattCharacteristicWriteArguments) + } + + // @@protoc_insertion_point(class_scope:dev.yanshouwang.bluetooth_low_energy.GattCharacteristicWriteArguments) + private static final dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicWriteArguments DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicWriteArguments(); + } + + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicWriteArguments getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public GattCharacteristicWriteArguments parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new GattCharacteristicWriteArguments(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicWriteArguments getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface GattCharacteristicNotifyArgumentsOrBuilder extends + // @@protoc_insertion_point(interface_extends:dev.yanshouwang.bluetooth_low_energy.GattCharacteristicNotifyArguments) + com.google.protobuf.MessageOrBuilder { + + /** + * string address = 1; + * @return The address. + */ + java.lang.String getAddress(); + /** + * string address = 1; + * @return The bytes for address. + */ + com.google.protobuf.ByteString + getAddressBytes(); + + /** + * string service_uuid = 2; + * @return The serviceUuid. + */ + java.lang.String getServiceUuid(); + /** + * string service_uuid = 2; + * @return The bytes for serviceUuid. + */ + com.google.protobuf.ByteString + getServiceUuidBytes(); + + /** + * string uuid = 3; + * @return The uuid. + */ + java.lang.String getUuid(); + /** + * string uuid = 3; + * @return The bytes for uuid. + */ + com.google.protobuf.ByteString + getUuidBytes(); + + /** + * int32 id = 4; + * @return The id. + */ + int getId(); + + /** + * bool state = 5; + * @return The state. + */ + boolean getState(); + } + /** + * Protobuf type {@code dev.yanshouwang.bluetooth_low_energy.GattCharacteristicNotifyArguments} + */ + public static final class GattCharacteristicNotifyArguments extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:dev.yanshouwang.bluetooth_low_energy.GattCharacteristicNotifyArguments) + GattCharacteristicNotifyArgumentsOrBuilder { + private static final long serialVersionUID = 0L; + // Use GattCharacteristicNotifyArguments.newBuilder() to construct. + private GattCharacteristicNotifyArguments(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private GattCharacteristicNotifyArguments() { + address_ = ""; + serviceUuid_ = ""; + uuid_ = ""; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new GattCharacteristicNotifyArguments(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private GattCharacteristicNotifyArguments( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + java.lang.String s = input.readStringRequireUtf8(); + + address_ = s; + break; + } + case 18: { + java.lang.String s = input.readStringRequireUtf8(); + + serviceUuid_ = s; + break; + } + case 26: { + java.lang.String s = input.readStringRequireUtf8(); + + uuid_ = s; + break; + } + case 32: { + + id_ = input.readInt32(); + break; + } + case 40: { + + state_ = input.readBool(); + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_GattCharacteristicNotifyArguments_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_GattCharacteristicNotifyArguments_fieldAccessorTable + .ensureFieldAccessorsInitialized( + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicNotifyArguments.class, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicNotifyArguments.Builder.class); + } + + public static final int ADDRESS_FIELD_NUMBER = 1; + private volatile java.lang.Object address_; + /** + * string address = 1; + * @return The address. + */ + @java.lang.Override + public java.lang.String getAddress() { + java.lang.Object ref = address_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + address_ = s; + return s; + } + } + /** + * string address = 1; + * @return The bytes for address. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getAddressBytes() { + java.lang.Object ref = address_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + address_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int SERVICE_UUID_FIELD_NUMBER = 2; + private volatile java.lang.Object serviceUuid_; + /** + * string service_uuid = 2; + * @return The serviceUuid. + */ + @java.lang.Override + public java.lang.String getServiceUuid() { + java.lang.Object ref = serviceUuid_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + serviceUuid_ = s; + return s; + } + } + /** + * string service_uuid = 2; + * @return The bytes for serviceUuid. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getServiceUuidBytes() { + java.lang.Object ref = serviceUuid_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + serviceUuid_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int UUID_FIELD_NUMBER = 3; + private volatile java.lang.Object uuid_; + /** + * string uuid = 3; + * @return The uuid. + */ + @java.lang.Override + public java.lang.String getUuid() { + java.lang.Object ref = uuid_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + uuid_ = s; + return s; + } + } + /** + * string uuid = 3; + * @return The bytes for uuid. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getUuidBytes() { + java.lang.Object ref = uuid_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + uuid_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int ID_FIELD_NUMBER = 4; + private int id_; + /** + * int32 id = 4; + * @return The id. + */ + @java.lang.Override + public int getId() { + return id_; + } + + public static final int STATE_FIELD_NUMBER = 5; + private boolean state_; + /** + * bool state = 5; + * @return The state. + */ + @java.lang.Override + public boolean getState() { + return state_; + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (!getAddressBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 1, address_); + } + if (!getServiceUuidBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 2, serviceUuid_); + } + if (!getUuidBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 3, uuid_); + } + if (id_ != 0) { + output.writeInt32(4, id_); + } + if (state_ != false) { + output.writeBool(5, state_); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!getAddressBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, address_); + } + if (!getServiceUuidBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, serviceUuid_); + } + if (!getUuidBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, uuid_); + } + if (id_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(4, id_); + } + if (state_ != false) { + size += com.google.protobuf.CodedOutputStream + .computeBoolSize(5, state_); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicNotifyArguments)) { + return super.equals(obj); + } + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicNotifyArguments other = (dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicNotifyArguments) obj; + + if (!getAddress() + .equals(other.getAddress())) return false; + if (!getServiceUuid() + .equals(other.getServiceUuid())) return false; + if (!getUuid() + .equals(other.getUuid())) return false; + if (getId() + != other.getId()) return false; + if (getState() + != other.getState()) return false; + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + ADDRESS_FIELD_NUMBER; + hash = (53 * hash) + getAddress().hashCode(); + hash = (37 * hash) + SERVICE_UUID_FIELD_NUMBER; + hash = (53 * hash) + getServiceUuid().hashCode(); + hash = (37 * hash) + UUID_FIELD_NUMBER; + hash = (53 * hash) + getUuid().hashCode(); + hash = (37 * hash) + ID_FIELD_NUMBER; + hash = (53 * hash) + getId(); + hash = (37 * hash) + STATE_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean( + getState()); + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicNotifyArguments parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicNotifyArguments parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicNotifyArguments parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicNotifyArguments parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicNotifyArguments parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicNotifyArguments parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicNotifyArguments parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicNotifyArguments parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicNotifyArguments parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicNotifyArguments parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicNotifyArguments parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicNotifyArguments parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicNotifyArguments prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code dev.yanshouwang.bluetooth_low_energy.GattCharacteristicNotifyArguments} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:dev.yanshouwang.bluetooth_low_energy.GattCharacteristicNotifyArguments) + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicNotifyArgumentsOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_GattCharacteristicNotifyArguments_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_GattCharacteristicNotifyArguments_fieldAccessorTable + .ensureFieldAccessorsInitialized( + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicNotifyArguments.class, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicNotifyArguments.Builder.class); + } + + // Construct using dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicNotifyArguments.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + address_ = ""; + + serviceUuid_ = ""; + + uuid_ = ""; + + id_ = 0; + + state_ = false; + + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_GattCharacteristicNotifyArguments_descriptor; + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicNotifyArguments getDefaultInstanceForType() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicNotifyArguments.getDefaultInstance(); + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicNotifyArguments build() { + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicNotifyArguments result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicNotifyArguments buildPartial() { + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicNotifyArguments result = new dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicNotifyArguments(this); + result.address_ = address_; + result.serviceUuid_ = serviceUuid_; + result.uuid_ = uuid_; + result.id_ = id_; + result.state_ = state_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicNotifyArguments) { + return mergeFrom((dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicNotifyArguments)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicNotifyArguments other) { + if (other == dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicNotifyArguments.getDefaultInstance()) return this; + if (!other.getAddress().isEmpty()) { + address_ = other.address_; + onChanged(); + } + if (!other.getServiceUuid().isEmpty()) { + serviceUuid_ = other.serviceUuid_; + onChanged(); + } + if (!other.getUuid().isEmpty()) { + uuid_ = other.uuid_; + onChanged(); + } + if (other.getId() != 0) { + setId(other.getId()); + } + if (other.getState() != false) { + setState(other.getState()); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicNotifyArguments parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicNotifyArguments) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + + private java.lang.Object address_ = ""; + /** + * string address = 1; + * @return The address. + */ + public java.lang.String getAddress() { + java.lang.Object ref = address_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + address_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string address = 1; + * @return The bytes for address. + */ + public com.google.protobuf.ByteString + getAddressBytes() { + java.lang.Object ref = address_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + address_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string address = 1; + * @param value The address to set. + * @return This builder for chaining. + */ + public Builder setAddress( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + address_ = value; + onChanged(); + return this; + } + /** + * string address = 1; + * @return This builder for chaining. + */ + public Builder clearAddress() { + + address_ = getDefaultInstance().getAddress(); + onChanged(); + return this; + } + /** + * string address = 1; + * @param value The bytes for address to set. + * @return This builder for chaining. + */ + public Builder setAddressBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + address_ = value; + onChanged(); + return this; + } + + private java.lang.Object serviceUuid_ = ""; + /** + * string service_uuid = 2; + * @return The serviceUuid. + */ + public java.lang.String getServiceUuid() { + java.lang.Object ref = serviceUuid_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + serviceUuid_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string service_uuid = 2; + * @return The bytes for serviceUuid. + */ + public com.google.protobuf.ByteString + getServiceUuidBytes() { + java.lang.Object ref = serviceUuid_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + serviceUuid_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string service_uuid = 2; + * @param value The serviceUuid to set. + * @return This builder for chaining. + */ + public Builder setServiceUuid( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + serviceUuid_ = value; + onChanged(); + return this; + } + /** + * string service_uuid = 2; + * @return This builder for chaining. + */ + public Builder clearServiceUuid() { + + serviceUuid_ = getDefaultInstance().getServiceUuid(); + onChanged(); + return this; + } + /** + * string service_uuid = 2; + * @param value The bytes for serviceUuid to set. + * @return This builder for chaining. + */ + public Builder setServiceUuidBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + serviceUuid_ = value; + onChanged(); + return this; + } + + private java.lang.Object uuid_ = ""; + /** + * string uuid = 3; + * @return The uuid. + */ + public java.lang.String getUuid() { + java.lang.Object ref = uuid_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + uuid_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string uuid = 3; + * @return The bytes for uuid. + */ + public com.google.protobuf.ByteString + getUuidBytes() { + java.lang.Object ref = uuid_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + uuid_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string uuid = 3; + * @param value The uuid to set. + * @return This builder for chaining. + */ + public Builder setUuid( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + uuid_ = value; + onChanged(); + return this; + } + /** + * string uuid = 3; + * @return This builder for chaining. + */ + public Builder clearUuid() { + + uuid_ = getDefaultInstance().getUuid(); + onChanged(); + return this; + } + /** + * string uuid = 3; + * @param value The bytes for uuid to set. + * @return This builder for chaining. + */ + public Builder setUuidBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + uuid_ = value; + onChanged(); + return this; + } + + private int id_ ; + /** + * int32 id = 4; + * @return The id. + */ + @java.lang.Override + public int getId() { + return id_; + } + /** + * int32 id = 4; + * @param value The id to set. + * @return This builder for chaining. + */ + public Builder setId(int value) { + + id_ = value; + onChanged(); + return this; + } + /** + * int32 id = 4; + * @return This builder for chaining. + */ + public Builder clearId() { + + id_ = 0; + onChanged(); + return this; + } + + private boolean state_ ; + /** + * bool state = 5; + * @return The state. + */ + @java.lang.Override + public boolean getState() { + return state_; + } + /** + * bool state = 5; + * @param value The state to set. + * @return This builder for chaining. + */ + public Builder setState(boolean value) { + + state_ = value; + onChanged(); + return this; + } + /** + * bool state = 5; + * @return This builder for chaining. + */ + public Builder clearState() { + + state_ = false; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:dev.yanshouwang.bluetooth_low_energy.GattCharacteristicNotifyArguments) + } + + // @@protoc_insertion_point(class_scope:dev.yanshouwang.bluetooth_low_energy.GattCharacteristicNotifyArguments) + private static final dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicNotifyArguments DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicNotifyArguments(); + } + + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicNotifyArguments getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public GattCharacteristicNotifyArguments parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new GattCharacteristicNotifyArguments(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicNotifyArguments getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface GattCharacteristicValueOrBuilder extends + // @@protoc_insertion_point(interface_extends:dev.yanshouwang.bluetooth_low_energy.GattCharacteristicValue) + com.google.protobuf.MessageOrBuilder { + + /** + * int32 id = 3; + * @return The id. + */ + int getId(); + + /** + * bytes value = 4; + * @return The value. + */ + com.google.protobuf.ByteString getValue(); + } + /** + * Protobuf type {@code dev.yanshouwang.bluetooth_low_energy.GattCharacteristicValue} + */ + public static final class GattCharacteristicValue extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:dev.yanshouwang.bluetooth_low_energy.GattCharacteristicValue) + GattCharacteristicValueOrBuilder { + private static final long serialVersionUID = 0L; + // Use GattCharacteristicValue.newBuilder() to construct. + private GattCharacteristicValue(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private GattCharacteristicValue() { + value_ = com.google.protobuf.ByteString.EMPTY; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new GattCharacteristicValue(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private GattCharacteristicValue( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 24: { + + id_ = input.readInt32(); + break; + } + case 34: { + + value_ = input.readBytes(); + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_GattCharacteristicValue_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_GattCharacteristicValue_fieldAccessorTable + .ensureFieldAccessorsInitialized( + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue.class, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue.Builder.class); + } + + public static final int ID_FIELD_NUMBER = 3; + private int id_; + /** + * int32 id = 3; + * @return The id. + */ + @java.lang.Override + public int getId() { + return id_; + } + + public static final int VALUE_FIELD_NUMBER = 4; + private com.google.protobuf.ByteString value_; + /** + * bytes value = 4; + * @return The value. + */ + @java.lang.Override + public com.google.protobuf.ByteString getValue() { + return value_; + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (id_ != 0) { + output.writeInt32(3, id_); + } + if (!value_.isEmpty()) { + output.writeBytes(4, value_); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (id_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(3, id_); + } + if (!value_.isEmpty()) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(4, value_); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue)) { + return super.equals(obj); + } + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue other = (dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue) obj; + + if (getId() + != other.getId()) return false; + if (!getValue() + .equals(other.getValue())) return false; + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + ID_FIELD_NUMBER; + hash = (53 * hash) + getId(); + hash = (37 * hash) + VALUE_FIELD_NUMBER; + hash = (53 * hash) + getValue().hashCode(); + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code dev.yanshouwang.bluetooth_low_energy.GattCharacteristicValue} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:dev.yanshouwang.bluetooth_low_energy.GattCharacteristicValue) + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValueOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_GattCharacteristicValue_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_GattCharacteristicValue_fieldAccessorTable + .ensureFieldAccessorsInitialized( + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue.class, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue.Builder.class); + } + + // Construct using dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + id_ = 0; + + value_ = com.google.protobuf.ByteString.EMPTY; + + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_GattCharacteristicValue_descriptor; + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue getDefaultInstanceForType() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue.getDefaultInstance(); + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue build() { + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue buildPartial() { + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue result = new dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue(this); + result.id_ = id_; + result.value_ = value_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue) { + return mergeFrom((dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue other) { + if (other == dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue.getDefaultInstance()) return this; + if (other.getId() != 0) { + setId(other.getId()); + } + if (other.getValue() != com.google.protobuf.ByteString.EMPTY) { + setValue(other.getValue()); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + + private int id_ ; + /** + * int32 id = 3; + * @return The id. + */ + @java.lang.Override + public int getId() { + return id_; + } + /** + * int32 id = 3; + * @param value The id to set. + * @return This builder for chaining. + */ + public Builder setId(int value) { + + id_ = value; + onChanged(); + return this; + } + /** + * int32 id = 3; + * @return This builder for chaining. + */ + public Builder clearId() { + + id_ = 0; + onChanged(); + return this; + } + + private com.google.protobuf.ByteString value_ = com.google.protobuf.ByteString.EMPTY; + /** + * bytes value = 4; + * @return The value. + */ + @java.lang.Override + public com.google.protobuf.ByteString getValue() { + return value_; + } + /** + * bytes value = 4; + * @param value The value to set. + * @return This builder for chaining. + */ + public Builder setValue(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + + value_ = value; + onChanged(); + return this; + } + /** + * bytes value = 4; + * @return This builder for chaining. + */ + public Builder clearValue() { + + value_ = getDefaultInstance().getValue(); + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:dev.yanshouwang.bluetooth_low_energy.GattCharacteristicValue) + } + + // @@protoc_insertion_point(class_scope:dev.yanshouwang.bluetooth_low_energy.GattCharacteristicValue) + private static final dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue(); + } + + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public GattCharacteristicValue parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new GattCharacteristicValue(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface GattDescriptorReadArgumentsOrBuilder extends + // @@protoc_insertion_point(interface_extends:dev.yanshouwang.bluetooth_low_energy.GattDescriptorReadArguments) + com.google.protobuf.MessageOrBuilder { + + /** + * string address = 1; + * @return The address. + */ + java.lang.String getAddress(); + /** + * string address = 1; + * @return The bytes for address. + */ + com.google.protobuf.ByteString + getAddressBytes(); + + /** + * string service_uuid = 2; + * @return The serviceUuid. + */ + java.lang.String getServiceUuid(); + /** + * string service_uuid = 2; + * @return The bytes for serviceUuid. + */ + com.google.protobuf.ByteString + getServiceUuidBytes(); + + /** + * string characteristic_uuid = 3; + * @return The characteristicUuid. + */ + java.lang.String getCharacteristicUuid(); + /** + * string characteristic_uuid = 3; + * @return The bytes for characteristicUuid. + */ + com.google.protobuf.ByteString + getCharacteristicUuidBytes(); + + /** + * string uuid = 4; + * @return The uuid. + */ + java.lang.String getUuid(); + /** + * string uuid = 4; + * @return The bytes for uuid. + */ + com.google.protobuf.ByteString + getUuidBytes(); + + /** + * int32 id = 5; + * @return The id. + */ + int getId(); + } + /** + * Protobuf type {@code dev.yanshouwang.bluetooth_low_energy.GattDescriptorReadArguments} + */ + public static final class GattDescriptorReadArguments extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:dev.yanshouwang.bluetooth_low_energy.GattDescriptorReadArguments) + GattDescriptorReadArgumentsOrBuilder { + private static final long serialVersionUID = 0L; + // Use GattDescriptorReadArguments.newBuilder() to construct. + private GattDescriptorReadArguments(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private GattDescriptorReadArguments() { + address_ = ""; + serviceUuid_ = ""; + characteristicUuid_ = ""; + uuid_ = ""; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new GattDescriptorReadArguments(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private GattDescriptorReadArguments( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + java.lang.String s = input.readStringRequireUtf8(); + + address_ = s; + break; + } + case 18: { + java.lang.String s = input.readStringRequireUtf8(); + + serviceUuid_ = s; + break; + } + case 26: { + java.lang.String s = input.readStringRequireUtf8(); + + characteristicUuid_ = s; + break; + } + case 34: { + java.lang.String s = input.readStringRequireUtf8(); + + uuid_ = s; + break; + } + case 40: { + + id_ = input.readInt32(); + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_GattDescriptorReadArguments_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_GattDescriptorReadArguments_fieldAccessorTable + .ensureFieldAccessorsInitialized( + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorReadArguments.class, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorReadArguments.Builder.class); + } + + public static final int ADDRESS_FIELD_NUMBER = 1; + private volatile java.lang.Object address_; + /** + * string address = 1; + * @return The address. + */ + @java.lang.Override + public java.lang.String getAddress() { + java.lang.Object ref = address_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + address_ = s; + return s; + } + } + /** + * string address = 1; + * @return The bytes for address. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getAddressBytes() { + java.lang.Object ref = address_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + address_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int SERVICE_UUID_FIELD_NUMBER = 2; + private volatile java.lang.Object serviceUuid_; + /** + * string service_uuid = 2; + * @return The serviceUuid. + */ + @java.lang.Override + public java.lang.String getServiceUuid() { + java.lang.Object ref = serviceUuid_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + serviceUuid_ = s; + return s; + } + } + /** + * string service_uuid = 2; + * @return The bytes for serviceUuid. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getServiceUuidBytes() { + java.lang.Object ref = serviceUuid_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + serviceUuid_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int CHARACTERISTIC_UUID_FIELD_NUMBER = 3; + private volatile java.lang.Object characteristicUuid_; + /** + * string characteristic_uuid = 3; + * @return The characteristicUuid. + */ + @java.lang.Override + public java.lang.String getCharacteristicUuid() { + java.lang.Object ref = characteristicUuid_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + characteristicUuid_ = s; + return s; + } + } + /** + * string characteristic_uuid = 3; + * @return The bytes for characteristicUuid. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getCharacteristicUuidBytes() { + java.lang.Object ref = characteristicUuid_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + characteristicUuid_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int UUID_FIELD_NUMBER = 4; + private volatile java.lang.Object uuid_; + /** + * string uuid = 4; + * @return The uuid. + */ + @java.lang.Override + public java.lang.String getUuid() { + java.lang.Object ref = uuid_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + uuid_ = s; + return s; + } + } + /** + * string uuid = 4; + * @return The bytes for uuid. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getUuidBytes() { + java.lang.Object ref = uuid_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + uuid_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int ID_FIELD_NUMBER = 5; + private int id_; + /** + * int32 id = 5; + * @return The id. + */ + @java.lang.Override + public int getId() { + return id_; + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (!getAddressBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 1, address_); + } + if (!getServiceUuidBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 2, serviceUuid_); + } + if (!getCharacteristicUuidBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 3, characteristicUuid_); + } + if (!getUuidBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 4, uuid_); + } + if (id_ != 0) { + output.writeInt32(5, id_); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!getAddressBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, address_); + } + if (!getServiceUuidBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, serviceUuid_); + } + if (!getCharacteristicUuidBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, characteristicUuid_); + } + if (!getUuidBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, uuid_); + } + if (id_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(5, id_); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorReadArguments)) { + return super.equals(obj); + } + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorReadArguments other = (dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorReadArguments) obj; + + if (!getAddress() + .equals(other.getAddress())) return false; + if (!getServiceUuid() + .equals(other.getServiceUuid())) return false; + if (!getCharacteristicUuid() + .equals(other.getCharacteristicUuid())) return false; + if (!getUuid() + .equals(other.getUuid())) return false; + if (getId() + != other.getId()) return false; + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + ADDRESS_FIELD_NUMBER; + hash = (53 * hash) + getAddress().hashCode(); + hash = (37 * hash) + SERVICE_UUID_FIELD_NUMBER; + hash = (53 * hash) + getServiceUuid().hashCode(); + hash = (37 * hash) + CHARACTERISTIC_UUID_FIELD_NUMBER; + hash = (53 * hash) + getCharacteristicUuid().hashCode(); + hash = (37 * hash) + UUID_FIELD_NUMBER; + hash = (53 * hash) + getUuid().hashCode(); + hash = (37 * hash) + ID_FIELD_NUMBER; + hash = (53 * hash) + getId(); + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorReadArguments parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorReadArguments parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorReadArguments parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorReadArguments parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorReadArguments parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorReadArguments parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorReadArguments parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorReadArguments parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorReadArguments parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorReadArguments parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorReadArguments parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorReadArguments parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorReadArguments prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code dev.yanshouwang.bluetooth_low_energy.GattDescriptorReadArguments} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:dev.yanshouwang.bluetooth_low_energy.GattDescriptorReadArguments) + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorReadArgumentsOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_GattDescriptorReadArguments_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_GattDescriptorReadArguments_fieldAccessorTable + .ensureFieldAccessorsInitialized( + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorReadArguments.class, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorReadArguments.Builder.class); + } + + // Construct using dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorReadArguments.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + address_ = ""; + + serviceUuid_ = ""; + + characteristicUuid_ = ""; + + uuid_ = ""; + + id_ = 0; + + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_GattDescriptorReadArguments_descriptor; + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorReadArguments getDefaultInstanceForType() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorReadArguments.getDefaultInstance(); + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorReadArguments build() { + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorReadArguments result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorReadArguments buildPartial() { + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorReadArguments result = new dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorReadArguments(this); + result.address_ = address_; + result.serviceUuid_ = serviceUuid_; + result.characteristicUuid_ = characteristicUuid_; + result.uuid_ = uuid_; + result.id_ = id_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorReadArguments) { + return mergeFrom((dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorReadArguments)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorReadArguments other) { + if (other == dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorReadArguments.getDefaultInstance()) return this; + if (!other.getAddress().isEmpty()) { + address_ = other.address_; + onChanged(); + } + if (!other.getServiceUuid().isEmpty()) { + serviceUuid_ = other.serviceUuid_; + onChanged(); + } + if (!other.getCharacteristicUuid().isEmpty()) { + characteristicUuid_ = other.characteristicUuid_; + onChanged(); + } + if (!other.getUuid().isEmpty()) { + uuid_ = other.uuid_; + onChanged(); + } + if (other.getId() != 0) { + setId(other.getId()); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorReadArguments parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorReadArguments) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + + private java.lang.Object address_ = ""; + /** + * string address = 1; + * @return The address. + */ + public java.lang.String getAddress() { + java.lang.Object ref = address_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + address_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string address = 1; + * @return The bytes for address. + */ + public com.google.protobuf.ByteString + getAddressBytes() { + java.lang.Object ref = address_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + address_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string address = 1; + * @param value The address to set. + * @return This builder for chaining. + */ + public Builder setAddress( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + address_ = value; + onChanged(); + return this; + } + /** + * string address = 1; + * @return This builder for chaining. + */ + public Builder clearAddress() { + + address_ = getDefaultInstance().getAddress(); + onChanged(); + return this; + } + /** + * string address = 1; + * @param value The bytes for address to set. + * @return This builder for chaining. + */ + public Builder setAddressBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + address_ = value; + onChanged(); + return this; + } + + private java.lang.Object serviceUuid_ = ""; + /** + * string service_uuid = 2; + * @return The serviceUuid. + */ + public java.lang.String getServiceUuid() { + java.lang.Object ref = serviceUuid_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + serviceUuid_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string service_uuid = 2; + * @return The bytes for serviceUuid. + */ + public com.google.protobuf.ByteString + getServiceUuidBytes() { + java.lang.Object ref = serviceUuid_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + serviceUuid_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string service_uuid = 2; + * @param value The serviceUuid to set. + * @return This builder for chaining. + */ + public Builder setServiceUuid( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + serviceUuid_ = value; + onChanged(); + return this; + } + /** + * string service_uuid = 2; + * @return This builder for chaining. + */ + public Builder clearServiceUuid() { + + serviceUuid_ = getDefaultInstance().getServiceUuid(); + onChanged(); + return this; + } + /** + * string service_uuid = 2; + * @param value The bytes for serviceUuid to set. + * @return This builder for chaining. + */ + public Builder setServiceUuidBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + serviceUuid_ = value; + onChanged(); + return this; + } + + private java.lang.Object characteristicUuid_ = ""; + /** + * string characteristic_uuid = 3; + * @return The characteristicUuid. + */ + public java.lang.String getCharacteristicUuid() { + java.lang.Object ref = characteristicUuid_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + characteristicUuid_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string characteristic_uuid = 3; + * @return The bytes for characteristicUuid. + */ + public com.google.protobuf.ByteString + getCharacteristicUuidBytes() { + java.lang.Object ref = characteristicUuid_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + characteristicUuid_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string characteristic_uuid = 3; + * @param value The characteristicUuid to set. + * @return This builder for chaining. + */ + public Builder setCharacteristicUuid( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + characteristicUuid_ = value; + onChanged(); + return this; + } + /** + * string characteristic_uuid = 3; + * @return This builder for chaining. + */ + public Builder clearCharacteristicUuid() { + + characteristicUuid_ = getDefaultInstance().getCharacteristicUuid(); + onChanged(); + return this; + } + /** + * string characteristic_uuid = 3; + * @param value The bytes for characteristicUuid to set. + * @return This builder for chaining. + */ + public Builder setCharacteristicUuidBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + characteristicUuid_ = value; + onChanged(); + return this; + } + + private java.lang.Object uuid_ = ""; + /** + * string uuid = 4; + * @return The uuid. + */ + public java.lang.String getUuid() { + java.lang.Object ref = uuid_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + uuid_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string uuid = 4; + * @return The bytes for uuid. + */ + public com.google.protobuf.ByteString + getUuidBytes() { + java.lang.Object ref = uuid_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + uuid_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string uuid = 4; + * @param value The uuid to set. + * @return This builder for chaining. + */ + public Builder setUuid( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + uuid_ = value; + onChanged(); + return this; + } + /** + * string uuid = 4; + * @return This builder for chaining. + */ + public Builder clearUuid() { + + uuid_ = getDefaultInstance().getUuid(); + onChanged(); + return this; + } + /** + * string uuid = 4; + * @param value The bytes for uuid to set. + * @return This builder for chaining. + */ + public Builder setUuidBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + uuid_ = value; + onChanged(); + return this; + } + + private int id_ ; + /** + * int32 id = 5; + * @return The id. + */ + @java.lang.Override + public int getId() { + return id_; + } + /** + * int32 id = 5; + * @param value The id to set. + * @return This builder for chaining. + */ + public Builder setId(int value) { + + id_ = value; + onChanged(); + return this; + } + /** + * int32 id = 5; + * @return This builder for chaining. + */ + public Builder clearId() { + + id_ = 0; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:dev.yanshouwang.bluetooth_low_energy.GattDescriptorReadArguments) + } + + // @@protoc_insertion_point(class_scope:dev.yanshouwang.bluetooth_low_energy.GattDescriptorReadArguments) + private static final dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorReadArguments DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorReadArguments(); + } + + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorReadArguments getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public GattDescriptorReadArguments parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new GattDescriptorReadArguments(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorReadArguments getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface GattDescriptorWriteArgumentsOrBuilder extends + // @@protoc_insertion_point(interface_extends:dev.yanshouwang.bluetooth_low_energy.GattDescriptorWriteArguments) + com.google.protobuf.MessageOrBuilder { + + /** + * string address = 1; + * @return The address. + */ + java.lang.String getAddress(); + /** + * string address = 1; + * @return The bytes for address. + */ + com.google.protobuf.ByteString + getAddressBytes(); + + /** + * string service_uuid = 2; + * @return The serviceUuid. + */ + java.lang.String getServiceUuid(); + /** + * string service_uuid = 2; + * @return The bytes for serviceUuid. + */ + com.google.protobuf.ByteString + getServiceUuidBytes(); + + /** + * string characteristic_uuid = 3; + * @return The characteristicUuid. + */ + java.lang.String getCharacteristicUuid(); + /** + * string characteristic_uuid = 3; + * @return The bytes for characteristicUuid. + */ + com.google.protobuf.ByteString + getCharacteristicUuidBytes(); + + /** + * string uuid = 4; + * @return The uuid. + */ + java.lang.String getUuid(); + /** + * string uuid = 4; + * @return The bytes for uuid. + */ + com.google.protobuf.ByteString + getUuidBytes(); + + /** + * int32 id = 5; + * @return The id. + */ + int getId(); + + /** + * bytes value = 6; + * @return The value. + */ + com.google.protobuf.ByteString getValue(); + } + /** + * Protobuf type {@code dev.yanshouwang.bluetooth_low_energy.GattDescriptorWriteArguments} + */ + public static final class GattDescriptorWriteArguments extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:dev.yanshouwang.bluetooth_low_energy.GattDescriptorWriteArguments) + GattDescriptorWriteArgumentsOrBuilder { + private static final long serialVersionUID = 0L; + // Use GattDescriptorWriteArguments.newBuilder() to construct. + private GattDescriptorWriteArguments(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private GattDescriptorWriteArguments() { + address_ = ""; + serviceUuid_ = ""; + characteristicUuid_ = ""; + uuid_ = ""; + value_ = com.google.protobuf.ByteString.EMPTY; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new GattDescriptorWriteArguments(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private GattDescriptorWriteArguments( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + java.lang.String s = input.readStringRequireUtf8(); + + address_ = s; + break; + } + case 18: { + java.lang.String s = input.readStringRequireUtf8(); + + serviceUuid_ = s; + break; + } + case 26: { + java.lang.String s = input.readStringRequireUtf8(); + + characteristicUuid_ = s; + break; + } + case 34: { + java.lang.String s = input.readStringRequireUtf8(); + + uuid_ = s; + break; + } + case 40: { + + id_ = input.readInt32(); + break; + } + case 50: { + + value_ = input.readBytes(); + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_GattDescriptorWriteArguments_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_GattDescriptorWriteArguments_fieldAccessorTable + .ensureFieldAccessorsInitialized( + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorWriteArguments.class, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorWriteArguments.Builder.class); + } + + public static final int ADDRESS_FIELD_NUMBER = 1; + private volatile java.lang.Object address_; + /** + * string address = 1; + * @return The address. + */ + @java.lang.Override + public java.lang.String getAddress() { + java.lang.Object ref = address_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + address_ = s; + return s; + } + } + /** + * string address = 1; + * @return The bytes for address. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getAddressBytes() { + java.lang.Object ref = address_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + address_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int SERVICE_UUID_FIELD_NUMBER = 2; + private volatile java.lang.Object serviceUuid_; + /** + * string service_uuid = 2; + * @return The serviceUuid. + */ + @java.lang.Override + public java.lang.String getServiceUuid() { + java.lang.Object ref = serviceUuid_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + serviceUuid_ = s; + return s; + } + } + /** + * string service_uuid = 2; + * @return The bytes for serviceUuid. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getServiceUuidBytes() { + java.lang.Object ref = serviceUuid_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + serviceUuid_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int CHARACTERISTIC_UUID_FIELD_NUMBER = 3; + private volatile java.lang.Object characteristicUuid_; + /** + * string characteristic_uuid = 3; + * @return The characteristicUuid. + */ + @java.lang.Override + public java.lang.String getCharacteristicUuid() { + java.lang.Object ref = characteristicUuid_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + characteristicUuid_ = s; + return s; + } + } + /** + * string characteristic_uuid = 3; + * @return The bytes for characteristicUuid. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getCharacteristicUuidBytes() { + java.lang.Object ref = characteristicUuid_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + characteristicUuid_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int UUID_FIELD_NUMBER = 4; + private volatile java.lang.Object uuid_; + /** + * string uuid = 4; + * @return The uuid. + */ + @java.lang.Override + public java.lang.String getUuid() { + java.lang.Object ref = uuid_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + uuid_ = s; + return s; + } + } + /** + * string uuid = 4; + * @return The bytes for uuid. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getUuidBytes() { + java.lang.Object ref = uuid_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + uuid_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int ID_FIELD_NUMBER = 5; + private int id_; + /** + * int32 id = 5; + * @return The id. + */ + @java.lang.Override + public int getId() { + return id_; + } + + public static final int VALUE_FIELD_NUMBER = 6; + private com.google.protobuf.ByteString value_; + /** + * bytes value = 6; + * @return The value. + */ + @java.lang.Override + public com.google.protobuf.ByteString getValue() { + return value_; + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (!getAddressBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 1, address_); + } + if (!getServiceUuidBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 2, serviceUuid_); + } + if (!getCharacteristicUuidBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 3, characteristicUuid_); + } + if (!getUuidBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 4, uuid_); + } + if (id_ != 0) { + output.writeInt32(5, id_); + } + if (!value_.isEmpty()) { + output.writeBytes(6, value_); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!getAddressBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, address_); + } + if (!getServiceUuidBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, serviceUuid_); + } + if (!getCharacteristicUuidBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, characteristicUuid_); + } + if (!getUuidBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, uuid_); + } + if (id_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(5, id_); + } + if (!value_.isEmpty()) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(6, value_); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorWriteArguments)) { + return super.equals(obj); + } + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorWriteArguments other = (dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorWriteArguments) obj; + + if (!getAddress() + .equals(other.getAddress())) return false; + if (!getServiceUuid() + .equals(other.getServiceUuid())) return false; + if (!getCharacteristicUuid() + .equals(other.getCharacteristicUuid())) return false; + if (!getUuid() + .equals(other.getUuid())) return false; + if (getId() + != other.getId()) return false; + if (!getValue() + .equals(other.getValue())) return false; + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + ADDRESS_FIELD_NUMBER; + hash = (53 * hash) + getAddress().hashCode(); + hash = (37 * hash) + SERVICE_UUID_FIELD_NUMBER; + hash = (53 * hash) + getServiceUuid().hashCode(); + hash = (37 * hash) + CHARACTERISTIC_UUID_FIELD_NUMBER; + hash = (53 * hash) + getCharacteristicUuid().hashCode(); + hash = (37 * hash) + UUID_FIELD_NUMBER; + hash = (53 * hash) + getUuid().hashCode(); + hash = (37 * hash) + ID_FIELD_NUMBER; + hash = (53 * hash) + getId(); + hash = (37 * hash) + VALUE_FIELD_NUMBER; + hash = (53 * hash) + getValue().hashCode(); + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorWriteArguments parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorWriteArguments parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorWriteArguments parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorWriteArguments parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorWriteArguments parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorWriteArguments parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorWriteArguments parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorWriteArguments parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorWriteArguments parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorWriteArguments parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorWriteArguments parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorWriteArguments parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorWriteArguments prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code dev.yanshouwang.bluetooth_low_energy.GattDescriptorWriteArguments} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:dev.yanshouwang.bluetooth_low_energy.GattDescriptorWriteArguments) + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorWriteArgumentsOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_GattDescriptorWriteArguments_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_GattDescriptorWriteArguments_fieldAccessorTable + .ensureFieldAccessorsInitialized( + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorWriteArguments.class, dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorWriteArguments.Builder.class); + } + + // Construct using dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorWriteArguments.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + address_ = ""; + + serviceUuid_ = ""; + + characteristicUuid_ = ""; + + uuid_ = ""; + + id_ = 0; + + value_ = com.google.protobuf.ByteString.EMPTY; + + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.internal_static_dev_yanshouwang_bluetooth_low_energy_GattDescriptorWriteArguments_descriptor; + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorWriteArguments getDefaultInstanceForType() { + return dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorWriteArguments.getDefaultInstance(); + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorWriteArguments build() { + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorWriteArguments result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorWriteArguments buildPartial() { + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorWriteArguments result = new dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorWriteArguments(this); + result.address_ = address_; + result.serviceUuid_ = serviceUuid_; + result.characteristicUuid_ = characteristicUuid_; + result.uuid_ = uuid_; + result.id_ = id_; + result.value_ = value_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorWriteArguments) { + return mergeFrom((dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorWriteArguments)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorWriteArguments other) { + if (other == dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorWriteArguments.getDefaultInstance()) return this; + if (!other.getAddress().isEmpty()) { + address_ = other.address_; + onChanged(); + } + if (!other.getServiceUuid().isEmpty()) { + serviceUuid_ = other.serviceUuid_; + onChanged(); + } + if (!other.getCharacteristicUuid().isEmpty()) { + characteristicUuid_ = other.characteristicUuid_; + onChanged(); + } + if (!other.getUuid().isEmpty()) { + uuid_ = other.uuid_; + onChanged(); + } + if (other.getId() != 0) { + setId(other.getId()); + } + if (other.getValue() != com.google.protobuf.ByteString.EMPTY) { + setValue(other.getValue()); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorWriteArguments parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorWriteArguments) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + + private java.lang.Object address_ = ""; + /** + * string address = 1; + * @return The address. + */ + public java.lang.String getAddress() { + java.lang.Object ref = address_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + address_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string address = 1; + * @return The bytes for address. + */ + public com.google.protobuf.ByteString + getAddressBytes() { + java.lang.Object ref = address_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + address_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string address = 1; + * @param value The address to set. + * @return This builder for chaining. + */ + public Builder setAddress( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + address_ = value; + onChanged(); + return this; + } + /** + * string address = 1; + * @return This builder for chaining. + */ + public Builder clearAddress() { + + address_ = getDefaultInstance().getAddress(); + onChanged(); + return this; + } + /** + * string address = 1; + * @param value The bytes for address to set. + * @return This builder for chaining. + */ + public Builder setAddressBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + address_ = value; + onChanged(); + return this; + } + + private java.lang.Object serviceUuid_ = ""; + /** + * string service_uuid = 2; + * @return The serviceUuid. + */ + public java.lang.String getServiceUuid() { + java.lang.Object ref = serviceUuid_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + serviceUuid_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string service_uuid = 2; + * @return The bytes for serviceUuid. + */ + public com.google.protobuf.ByteString + getServiceUuidBytes() { + java.lang.Object ref = serviceUuid_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + serviceUuid_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string service_uuid = 2; + * @param value The serviceUuid to set. + * @return This builder for chaining. + */ + public Builder setServiceUuid( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + serviceUuid_ = value; + onChanged(); + return this; + } + /** + * string service_uuid = 2; + * @return This builder for chaining. + */ + public Builder clearServiceUuid() { + + serviceUuid_ = getDefaultInstance().getServiceUuid(); + onChanged(); + return this; + } + /** + * string service_uuid = 2; + * @param value The bytes for serviceUuid to set. + * @return This builder for chaining. + */ + public Builder setServiceUuidBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + serviceUuid_ = value; + onChanged(); + return this; + } + + private java.lang.Object characteristicUuid_ = ""; + /** + * string characteristic_uuid = 3; + * @return The characteristicUuid. + */ + public java.lang.String getCharacteristicUuid() { + java.lang.Object ref = characteristicUuid_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + characteristicUuid_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string characteristic_uuid = 3; + * @return The bytes for characteristicUuid. + */ + public com.google.protobuf.ByteString + getCharacteristicUuidBytes() { + java.lang.Object ref = characteristicUuid_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + characteristicUuid_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string characteristic_uuid = 3; + * @param value The characteristicUuid to set. + * @return This builder for chaining. + */ + public Builder setCharacteristicUuid( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + characteristicUuid_ = value; + onChanged(); + return this; + } + /** + * string characteristic_uuid = 3; + * @return This builder for chaining. + */ + public Builder clearCharacteristicUuid() { + + characteristicUuid_ = getDefaultInstance().getCharacteristicUuid(); + onChanged(); + return this; + } + /** + * string characteristic_uuid = 3; + * @param value The bytes for characteristicUuid to set. + * @return This builder for chaining. + */ + public Builder setCharacteristicUuidBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + characteristicUuid_ = value; + onChanged(); + return this; + } + + private java.lang.Object uuid_ = ""; + /** + * string uuid = 4; + * @return The uuid. + */ + public java.lang.String getUuid() { + java.lang.Object ref = uuid_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + uuid_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string uuid = 4; + * @return The bytes for uuid. + */ + public com.google.protobuf.ByteString + getUuidBytes() { + java.lang.Object ref = uuid_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + uuid_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string uuid = 4; + * @param value The uuid to set. + * @return This builder for chaining. + */ + public Builder setUuid( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + uuid_ = value; + onChanged(); + return this; + } + /** + * string uuid = 4; + * @return This builder for chaining. + */ + public Builder clearUuid() { + + uuid_ = getDefaultInstance().getUuid(); + onChanged(); + return this; + } + /** + * string uuid = 4; + * @param value The bytes for uuid to set. + * @return This builder for chaining. + */ + public Builder setUuidBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + uuid_ = value; + onChanged(); + return this; + } + + private int id_ ; + /** + * int32 id = 5; + * @return The id. + */ + @java.lang.Override + public int getId() { + return id_; + } + /** + * int32 id = 5; + * @param value The id to set. + * @return This builder for chaining. + */ + public Builder setId(int value) { + + id_ = value; + onChanged(); + return this; + } + /** + * int32 id = 5; + * @return This builder for chaining. + */ + public Builder clearId() { + + id_ = 0; + onChanged(); + return this; + } + + private com.google.protobuf.ByteString value_ = com.google.protobuf.ByteString.EMPTY; + /** + * bytes value = 6; + * @return The value. + */ + @java.lang.Override + public com.google.protobuf.ByteString getValue() { + return value_; + } + /** + * bytes value = 6; + * @param value The value to set. + * @return This builder for chaining. + */ + public Builder setValue(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + + value_ = value; + onChanged(); + return this; + } + /** + * bytes value = 6; + * @return This builder for chaining. + */ + public Builder clearValue() { + + value_ = getDefaultInstance().getValue(); + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:dev.yanshouwang.bluetooth_low_energy.GattDescriptorWriteArguments) + } + + // @@protoc_insertion_point(class_scope:dev.yanshouwang.bluetooth_low_energy.GattDescriptorWriteArguments) + private static final dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorWriteArguments DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorWriteArguments(); + } + + public static dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorWriteArguments getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public GattDescriptorWriteArguments parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new GattDescriptorWriteArguments(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorWriteArguments getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_dev_yanshouwang_bluetooth_low_energy_Message_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_dev_yanshouwang_bluetooth_low_energy_Message_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_dev_yanshouwang_bluetooth_low_energy_StartDiscoveryArguments_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_dev_yanshouwang_bluetooth_low_energy_StartDiscoveryArguments_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_dev_yanshouwang_bluetooth_low_energy_Discovery_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_dev_yanshouwang_bluetooth_low_energy_Discovery_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_dev_yanshouwang_bluetooth_low_energy_ConnectArguments_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_dev_yanshouwang_bluetooth_low_energy_ConnectArguments_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_dev_yanshouwang_bluetooth_low_energy_GATT_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_dev_yanshouwang_bluetooth_low_energy_GATT_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_dev_yanshouwang_bluetooth_low_energy_GattDisconnectArguments_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_dev_yanshouwang_bluetooth_low_energy_GattDisconnectArguments_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_dev_yanshouwang_bluetooth_low_energy_GattService_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_dev_yanshouwang_bluetooth_low_energy_GattService_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_dev_yanshouwang_bluetooth_low_energy_GattCharacteristic_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_dev_yanshouwang_bluetooth_low_energy_GattCharacteristic_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_dev_yanshouwang_bluetooth_low_energy_GattDescriptor_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_dev_yanshouwang_bluetooth_low_energy_GattDescriptor_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_dev_yanshouwang_bluetooth_low_energy_ConnectionLost_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_dev_yanshouwang_bluetooth_low_energy_ConnectionLost_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_dev_yanshouwang_bluetooth_low_energy_GattCharacteristicReadArguments_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_dev_yanshouwang_bluetooth_low_energy_GattCharacteristicReadArguments_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_dev_yanshouwang_bluetooth_low_energy_GattCharacteristicWriteArguments_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_dev_yanshouwang_bluetooth_low_energy_GattCharacteristicWriteArguments_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_dev_yanshouwang_bluetooth_low_energy_GattCharacteristicNotifyArguments_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_dev_yanshouwang_bluetooth_low_energy_GattCharacteristicNotifyArguments_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_dev_yanshouwang_bluetooth_low_energy_GattCharacteristicValue_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_dev_yanshouwang_bluetooth_low_energy_GattCharacteristicValue_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_dev_yanshouwang_bluetooth_low_energy_GattDescriptorReadArguments_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_dev_yanshouwang_bluetooth_low_energy_GattDescriptorReadArguments_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_dev_yanshouwang_bluetooth_low_energy_GattDescriptorWriteArguments_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_dev_yanshouwang_bluetooth_low_energy_GattDescriptorWriteArguments_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor + getDescriptor() { + return descriptor; + } + private static com.google.protobuf.Descriptors.FileDescriptor + descriptor; + static { + java.lang.String[] descriptorData = { + "\n\rmessage.proto\022$dev.yanshouwang.bluetoo" + + "th_low_energy\"\364\002\n\007Message\022G\n\010category\030\001 " + + "\001(\01625.dev.yanshouwang.bluetooth_low_ener" + + "gy.MessageCategory\022\017\n\005state\030\002 \001(\010H\000\022D\n\td" + + "iscovery\030\003 \001(\0132/.dev.yanshouwang.bluetoo" + + "th_low_energy.DiscoveryH\000\022\022\n\010scanning\030\004 " + + "\001(\010H\000\022N\n\016connectionLost\030\005 \001(\01324.dev.yans" + + "houwang.bluetooth_low_energy.ConnectionL" + + "ostH\000\022\\\n\023characteristicValue\030\006 \001(\0132=.dev" + + ".yanshouwang.bluetooth_low_energy.GattCh" + + "aracteristicValueH\000B\007\n\005value\"+\n\027StartDis" + + "coveryArguments\022\020\n\010services\030\001 \003(\t\"B\n\tDis" + + "covery\022\017\n\007address\030\001 \001(\t\022\014\n\004rssi\030\002 \001(\021\022\026\n" + + "\016advertisements\030\003 \001(\014\"#\n\020ConnectArgument" + + "s\022\017\n\007address\030\001 \001(\t\"d\n\004GATT\022\n\n\002id\030\001 \001(\005\022\013" + + "\n\003mtu\030\002 \001(\005\022C\n\010services\030\003 \003(\01321.dev.yans" + + "houwang.bluetooth_low_energy.GattService" + + "\"6\n\027GattDisconnectArguments\022\017\n\007address\030\001" + + " \001(\t\022\n\n\002id\030\002 \001(\005\"z\n\013GattService\022\n\n\002id\030\001 " + + "\001(\005\022\014\n\004uuid\030\002 \001(\t\022Q\n\017characteristics\030\003 \003" + + "(\01328.dev.yanshouwang.bluetooth_low_energ" + + "y.GattCharacteristic\"\320\001\n\022GattCharacteris" + + "tic\022\n\n\002id\030\001 \001(\005\022\014\n\004uuid\030\002 \001(\t\022I\n\013descrip" + + "tors\030\003 \003(\01324.dev.yanshouwang.bluetooth_l" + + "ow_energy.GattDescriptor\022\017\n\007canRead\030\004 \001(" + + "\010\022\020\n\010canWrite\030\005 \001(\010\022\037\n\027canWriteWithoutRe" + + "sponse\030\006 \001(\010\022\021\n\tcanNotify\030\007 \001(\010\"*\n\016GattD" + + "escriptor\022\n\n\002id\030\001 \001(\005\022\014\n\004uuid\030\002 \001(\t\"0\n\016C" + + "onnectionLost\022\n\n\002id\030\001 \001(\005\022\022\n\nerror_code\030" + + "\002 \001(\005\"b\n\037GattCharacteristicReadArguments" + + "\022\017\n\007address\030\001 \001(\t\022\024\n\014service_uuid\030\002 \001(\t\022" + + "\014\n\004uuid\030\003 \001(\t\022\n\n\002id\030\004 \001(\005\"\213\001\n GattCharac" + + "teristicWriteArguments\022\017\n\007address\030\001 \001(\t\022" + + "\024\n\014service_uuid\030\002 \001(\t\022\014\n\004uuid\030\003 \001(\t\022\n\n\002i" + + "d\030\004 \001(\005\022\r\n\005value\030\005 \001(\014\022\027\n\017withoutRespons" + + "e\030\006 \001(\010\"s\n!GattCharacteristicNotifyArgum" + + "ents\022\017\n\007address\030\001 \001(\t\022\024\n\014service_uuid\030\002 " + + "\001(\t\022\014\n\004uuid\030\003 \001(\t\022\n\n\002id\030\004 \001(\005\022\r\n\005state\030\005" + + " \001(\010\"4\n\027GattCharacteristicValue\022\n\n\002id\030\003 " + + "\001(\005\022\r\n\005value\030\004 \001(\014\"{\n\033GattDescriptorRead" + + "Arguments\022\017\n\007address\030\001 \001(\t\022\024\n\014service_uu" + + "id\030\002 \001(\t\022\033\n\023characteristic_uuid\030\003 \001(\t\022\014\n" + + "\004uuid\030\004 \001(\t\022\n\n\002id\030\005 \001(\005\"\213\001\n\034GattDescript" + + "orWriteArguments\022\017\n\007address\030\001 \001(\t\022\024\n\014ser" + + "vice_uuid\030\002 \001(\t\022\033\n\023characteristic_uuid\030\003" + + " \001(\t\022\014\n\004uuid\030\004 \001(\t\022\n\n\002id\030\005 \001(\005\022\r\n\005value\030" + + "\006 \001(\014*\346\002\n\017MessageCategory\022\027\n\023BLUETOOTH_A" + + "VAILABLE\020\000\022\023\n\017BLUETOOTH_STATE\020\001\022\033\n\027CENTR" + + "AL_START_DISCOVERY\020\002\022\032\n\026CENTRAL_STOP_DIS" + + "COVERY\020\003\022\026\n\022CENTRAL_DISCOVERED\020\004\022\023\n\017CENT" + + "RAL_CONNECT\020\005\022\023\n\017GATT_DISCONNECT\020\006\022\030\n\024GA" + + "TT_CONNECTION_LOST\020\007\022\034\n\030GATT_CHARACTERIS" + + "TIC_READ\020\010\022\035\n\031GATT_CHARACTERISTIC_WRITE\020" + + "\t\022\036\n\032GATT_CHARACTERISTIC_NOTIFY\020\n\022\030\n\024GAT" + + "T_DESCRIPTOR_READ\020\013\022\031\n\025GATT_DESCRIPTOR_W" + + "RITE\020\014b\006proto3" + }; + descriptor = com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + }); + internal_static_dev_yanshouwang_bluetooth_low_energy_Message_descriptor = + getDescriptor().getMessageTypes().get(0); + internal_static_dev_yanshouwang_bluetooth_low_energy_Message_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_dev_yanshouwang_bluetooth_low_energy_Message_descriptor, + new java.lang.String[] { "Category", "State", "Discovery", "Scanning", "ConnectionLost", "CharacteristicValue", "Value", }); + internal_static_dev_yanshouwang_bluetooth_low_energy_StartDiscoveryArguments_descriptor = + getDescriptor().getMessageTypes().get(1); + internal_static_dev_yanshouwang_bluetooth_low_energy_StartDiscoveryArguments_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_dev_yanshouwang_bluetooth_low_energy_StartDiscoveryArguments_descriptor, + new java.lang.String[] { "Services", }); + internal_static_dev_yanshouwang_bluetooth_low_energy_Discovery_descriptor = + getDescriptor().getMessageTypes().get(2); + internal_static_dev_yanshouwang_bluetooth_low_energy_Discovery_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_dev_yanshouwang_bluetooth_low_energy_Discovery_descriptor, + new java.lang.String[] { "Address", "Rssi", "Advertisements", }); + internal_static_dev_yanshouwang_bluetooth_low_energy_ConnectArguments_descriptor = + getDescriptor().getMessageTypes().get(3); + internal_static_dev_yanshouwang_bluetooth_low_energy_ConnectArguments_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_dev_yanshouwang_bluetooth_low_energy_ConnectArguments_descriptor, + new java.lang.String[] { "Address", }); + internal_static_dev_yanshouwang_bluetooth_low_energy_GATT_descriptor = + getDescriptor().getMessageTypes().get(4); + internal_static_dev_yanshouwang_bluetooth_low_energy_GATT_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_dev_yanshouwang_bluetooth_low_energy_GATT_descriptor, + new java.lang.String[] { "Id", "Mtu", "Services", }); + internal_static_dev_yanshouwang_bluetooth_low_energy_GattDisconnectArguments_descriptor = + getDescriptor().getMessageTypes().get(5); + internal_static_dev_yanshouwang_bluetooth_low_energy_GattDisconnectArguments_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_dev_yanshouwang_bluetooth_low_energy_GattDisconnectArguments_descriptor, + new java.lang.String[] { "Address", "Id", }); + internal_static_dev_yanshouwang_bluetooth_low_energy_GattService_descriptor = + getDescriptor().getMessageTypes().get(6); + internal_static_dev_yanshouwang_bluetooth_low_energy_GattService_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_dev_yanshouwang_bluetooth_low_energy_GattService_descriptor, + new java.lang.String[] { "Id", "Uuid", "Characteristics", }); + internal_static_dev_yanshouwang_bluetooth_low_energy_GattCharacteristic_descriptor = + getDescriptor().getMessageTypes().get(7); + internal_static_dev_yanshouwang_bluetooth_low_energy_GattCharacteristic_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_dev_yanshouwang_bluetooth_low_energy_GattCharacteristic_descriptor, + new java.lang.String[] { "Id", "Uuid", "Descriptors", "CanRead", "CanWrite", "CanWriteWithoutResponse", "CanNotify", }); + internal_static_dev_yanshouwang_bluetooth_low_energy_GattDescriptor_descriptor = + getDescriptor().getMessageTypes().get(8); + internal_static_dev_yanshouwang_bluetooth_low_energy_GattDescriptor_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_dev_yanshouwang_bluetooth_low_energy_GattDescriptor_descriptor, + new java.lang.String[] { "Id", "Uuid", }); + internal_static_dev_yanshouwang_bluetooth_low_energy_ConnectionLost_descriptor = + getDescriptor().getMessageTypes().get(9); + internal_static_dev_yanshouwang_bluetooth_low_energy_ConnectionLost_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_dev_yanshouwang_bluetooth_low_energy_ConnectionLost_descriptor, + new java.lang.String[] { "Id", "ErrorCode", }); + internal_static_dev_yanshouwang_bluetooth_low_energy_GattCharacteristicReadArguments_descriptor = + getDescriptor().getMessageTypes().get(10); + internal_static_dev_yanshouwang_bluetooth_low_energy_GattCharacteristicReadArguments_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_dev_yanshouwang_bluetooth_low_energy_GattCharacteristicReadArguments_descriptor, + new java.lang.String[] { "Address", "ServiceUuid", "Uuid", "Id", }); + internal_static_dev_yanshouwang_bluetooth_low_energy_GattCharacteristicWriteArguments_descriptor = + getDescriptor().getMessageTypes().get(11); + internal_static_dev_yanshouwang_bluetooth_low_energy_GattCharacteristicWriteArguments_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_dev_yanshouwang_bluetooth_low_energy_GattCharacteristicWriteArguments_descriptor, + new java.lang.String[] { "Address", "ServiceUuid", "Uuid", "Id", "Value", "WithoutResponse", }); + internal_static_dev_yanshouwang_bluetooth_low_energy_GattCharacteristicNotifyArguments_descriptor = + getDescriptor().getMessageTypes().get(12); + internal_static_dev_yanshouwang_bluetooth_low_energy_GattCharacteristicNotifyArguments_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_dev_yanshouwang_bluetooth_low_energy_GattCharacteristicNotifyArguments_descriptor, + new java.lang.String[] { "Address", "ServiceUuid", "Uuid", "Id", "State", }); + internal_static_dev_yanshouwang_bluetooth_low_energy_GattCharacteristicValue_descriptor = + getDescriptor().getMessageTypes().get(13); + internal_static_dev_yanshouwang_bluetooth_low_energy_GattCharacteristicValue_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_dev_yanshouwang_bluetooth_low_energy_GattCharacteristicValue_descriptor, + new java.lang.String[] { "Id", "Value", }); + internal_static_dev_yanshouwang_bluetooth_low_energy_GattDescriptorReadArguments_descriptor = + getDescriptor().getMessageTypes().get(14); + internal_static_dev_yanshouwang_bluetooth_low_energy_GattDescriptorReadArguments_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_dev_yanshouwang_bluetooth_low_energy_GattDescriptorReadArguments_descriptor, + new java.lang.String[] { "Address", "ServiceUuid", "CharacteristicUuid", "Uuid", "Id", }); + internal_static_dev_yanshouwang_bluetooth_low_energy_GattDescriptorWriteArguments_descriptor = + getDescriptor().getMessageTypes().get(15); + internal_static_dev_yanshouwang_bluetooth_low_energy_GattDescriptorWriteArguments_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_dev_yanshouwang_bluetooth_low_energy_GattDescriptorWriteArguments_descriptor, + new java.lang.String[] { "Address", "ServiceUuid", "CharacteristicUuid", "Uuid", "Id", "Value", }); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/BluetoothLowEnergyPlugin.kt b/android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/BluetoothLowEnergyPlugin.kt index ecfcd92..b04a014 100644 --- a/android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/BluetoothLowEnergyPlugin.kt +++ b/android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/BluetoothLowEnergyPlugin.kt @@ -1,35 +1,687 @@ package dev.yanshouwang.bluetooth_low_energy +import android.Manifest +import android.bluetooth.* +import android.bluetooth.le.* +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.content.IntentFilter +import android.content.pm.PackageManager +import android.os.Build +import android.os.DeadObjectException +import android.os.Handler +import android.os.ParcelUuid +import android.util.Log import androidx.annotation.NonNull - +import androidx.core.app.ActivityCompat +import androidx.core.content.ContextCompat +import com.google.protobuf.ByteString +import dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.* +import dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.MessageCategory.* import io.flutter.embedding.engine.plugins.FlutterPlugin +import io.flutter.embedding.engine.plugins.activity.ActivityAware +import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding +import io.flutter.plugin.common.EventChannel +import io.flutter.plugin.common.EventChannel.EventSink +import io.flutter.plugin.common.EventChannel.StreamHandler import io.flutter.plugin.common.MethodCall import io.flutter.plugin.common.MethodChannel import io.flutter.plugin.common.MethodChannel.MethodCallHandler import io.flutter.plugin.common.MethodChannel.Result +import io.flutter.plugin.common.PluginRegistry.RequestPermissionsResultListener +import java.util.* + +const val NAMESPACE = "yanshouwang.dev/bluetooth_low_energy" + +typealias StartScanHandler = (code: Int) -> Unit +typealias RequestPermissionsHandler = (granted: Boolean) -> Unit /** BluetoothLowEnergyPlugin */ -class BluetoothLowEnergyPlugin: FlutterPlugin, MethodCallHandler { - /// The MethodChannel that will the communication between Flutter and native Android - /// - /// This local reference serves to register the plugin with the Flutter Engine and unregister it - /// when the Flutter Engine is detached from the Activity - private lateinit var channel : MethodChannel - - override fun onAttachedToEngine(@NonNull flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) { - channel = MethodChannel(flutterPluginBinding.binaryMessenger, "bluetooth_low_energy") - channel.setMethodCallHandler(this) - } - - override fun onMethodCall(@NonNull call: MethodCall, @NonNull result: Result) { - if (call.method == "getPlatformVersion") { - result.success("Android ${android.os.Build.VERSION.RELEASE}") - } else { - result.notImplemented() +class BluetoothLowEnergyPlugin : FlutterPlugin, MethodCallHandler, StreamHandler, ActivityAware, RequestPermissionsResultListener { + companion object { + private const val CLIENT_CHARACTERISTIC_CONFIG = "00002902-0000-1000-8000-00805f9b34fb" + private const val BLUETOOTH_ADAPTER_STATE_UNKNOWN = -1 + private const val NO_ERROR = 0 + private const val INVALID_REQUEST = 1 + private const val REQUEST_PERMISSION_FAILED = 2 + private const val REQUEST_MTU_FAILED = 3 + private const val DISCOVER_SERVICES_FAILED = 4 + private const val READ_CHARACTERISTIC_FAILED = 5 + private const val WRITE_CHARACTERISTIC_FAILED = 6 + private const val NOTIFY_CHARACTERISTIC_FAILED = 7 + private const val READ_DESCRIPTOR_FAILED = 8 + private const val WRITE_DESCRIPTOR_FAILED = 9 + private const val REQUEST_CODE = 443 } - } - override fun onDetachedFromEngine(@NonNull binding: FlutterPlugin.FlutterPluginBinding) { - channel.setMethodCallHandler(null) - } + private lateinit var method: MethodChannel + private lateinit var event: EventChannel + private lateinit var context: Context + + private var binding: ActivityPluginBinding? = null + private var sink: EventSink? = null + + private val bluetoothAvailable by lazy { context.packageManager.hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE) } + private val bluetoothManager by lazy { context.getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager } + private val bluetoothAdapter by lazy { bluetoothManager.adapter } + private val handler by lazy { Handler(context.mainLooper) } + + private val bluetoothStateReceiver by lazy { + object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + val oldState = intent!!.getIntExtra(BluetoothAdapter.EXTRA_PREVIOUS_STATE, BLUETOOTH_ADAPTER_STATE_UNKNOWN).opened + val newState = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BLUETOOTH_ADAPTER_STATE_UNKNOWN).opened + // TODO: clear status when bluetooth closed. + if (newState == oldState) return + val closed = !newState + if (closed && scanning) scanning = false + val event = Message.newBuilder() + .setCategory(BLUETOOTH_STATE) + .setState(newState) + .build() + .toByteArray() + sink?.success(event) + } + } + } + + private val hasPermission + get() = ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED + + private var requestPermissionsHandler: RequestPermissionsHandler? = null + + private var scanCode = NO_ERROR + private var scanning = false + private val scanCallback by lazy { + object : ScanCallback() { + override fun onScanFailed(errorCode: Int) { + super.onScanFailed(errorCode) + scanCode = errorCode + } + + override fun onScanResult(callbackType: Int, result: ScanResult?) { + super.onScanResult(callbackType, result) + if (result == null) return + val address = result.device.address + val rssi = result.rssi + val record = result.scanRecord + val advertisements = + if (record == null) ByteString.EMPTY + else ByteString.copyFrom(record.bytes) + val builder = Discovery.newBuilder() + .setAddress(address) + .setRssi(rssi) + .setAdvertisements(advertisements) + val discovery = builder.build() + val event = Message.newBuilder() + .setCategory(CENTRAL_DISCOVERED) + .setDiscovery(discovery) + .build() + .toByteArray() + sink?.success(event) + } + + override fun onBatchScanResults(results: MutableList?) { + super.onBatchScanResults(results) + if (results == null) return + for (result in results) { + val address = result.device.address + val rssi = result.rssi + val record = result.scanRecord + val advertisements = + if (record == null) ByteString.EMPTY + else ByteString.copyFrom(record.bytes) + val builder = Discovery.newBuilder() + .setAddress(address) + .setRssi(rssi) + .setAdvertisements(advertisements) + val discovery = builder.build() + val event = Message.newBuilder() + .setCategory(CENTRAL_DISCOVERED) + .setDiscovery(discovery) + .build() + .toByteArray() + sink?.success(event) + } + } + } + } + + private val gatts by lazy { mutableMapOf() } + private val connects by lazy { mutableMapOf() } + private val mtus by lazy { mutableMapOf() } + private val disconnects by lazy { mutableMapOf() } + private val characteristicReads by lazy { mutableMapOf() } + private val characteristicWrites by lazy { mutableMapOf() } + private val descriptorReads by lazy { mutableMapOf() } + private val descriptorWrites by lazy { mutableMapOf() } + private val bluetoothGattCallback by lazy { + object : BluetoothGattCallback() { + override fun onConnectionStateChange(gatt: BluetoothGatt?, status: Int, newState: Int) { + super.onConnectionStateChange(gatt, status, newState) + val address = gatt!!.device.address + when (status) { + BluetoothGatt.GATT_SUCCESS -> { + when (newState) { + BluetoothProfile.STATE_DISCONNECTED -> { + gatts.remove(address)!!.close() + val disconnect = disconnects.remove(address) + if (disconnect != null) handler.post { disconnect.success() } + else { + // An adapter closed event + val id = gatt.hashCode() + val connectionLost = ConnectionLost.newBuilder() + .setId(id) + .setErrorCode(status) + .build() + val event = Message.newBuilder() + .setCategory(GATT_CONNECTION_LOST) + .setConnectionLost(connectionLost) + .build() + .toByteArray() + handler.post { sink?.success(event) } + } + } + BluetoothProfile.STATE_CONNECTED -> { + val code = when { + Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP -> { + // TODO: how to get exact MTU size of this device here? + if (gatt.requestMtu(512)) NO_ERROR + else REQUEST_MTU_FAILED + } + else -> { + if (gatt.discoverServices()) { + // Just use 23 as MTU before LOLLIPOP. + mtus[address] = 23 + NO_ERROR + } else DISCOVER_SERVICES_FAILED + } + } + if (code != NO_ERROR) { + gatts.remove(address)!!.close() + val connect = connects.remove(address)!! + handler.post { connect.error(code) } + } + } + else -> throw NotImplementedError() // should never be called. + } + } + else -> { + gatts.remove(address)!!.close() + val connect = connects.remove(address) + val disconnect = disconnects.remove(address) + when { + connect != null -> handler.post { connect.error(status) } + disconnect != null -> handler.post { disconnect.error(status) } + else -> { + val id = gatt.hashCode() + val connectionLost = ConnectionLost.newBuilder() + .setId(id) + .setErrorCode(status) + .build() + val event = Message.newBuilder() + .setCategory(GATT_CONNECTION_LOST) + .setConnectionLost(connectionLost) + .build() + .toByteArray() + handler.post { sink?.success(event) } + } + } + } + } + } + + override fun onMtuChanged(gatt: BluetoothGatt?, mtu: Int, status: Int) { + super.onMtuChanged(gatt, mtu, status) + val address = gatt!!.device.address + val code = when (status) { + BluetoothGatt.GATT_SUCCESS -> { + if (gatt.discoverServices()) { + mtus[address] = mtu + NO_ERROR + } else DISCOVER_SERVICES_FAILED + } + else -> status + } + if (code != NO_ERROR) { + gatts.remove(address)!!.close() + val connect = connects.remove(address)!! + handler.post { connect.error(code) } + } + } + + override fun onServicesDiscovered(gatt: BluetoothGatt?, status: Int) { + super.onServicesDiscovered(gatt, status) + val address = gatt!!.device.address + val connect = connects.remove(address)!! + val mtu = mtus.remove(address)!! + when (status) { + BluetoothGatt.GATT_SUCCESS -> { + val id = gatt.hashCode() + val services = gatt.services.map { service -> + val serviceId = service.hashCode() + val serviceUUID = service.uuid.toString() + val characteristics = service.characteristics.map { characteristic -> + val characteristicId = characteristic.hashCode() + val characteristicUUID = characteristic.uuid.toString() + val properties = characteristic.properties + val canRead = properties and BluetoothGattCharacteristic.PROPERTY_READ != 0 + val canWrite = properties and BluetoothGattCharacteristic.PROPERTY_WRITE != 0 + val canWriteWithoutResponse = properties and BluetoothGattCharacteristic.PROPERTY_WRITE_NO_RESPONSE != 0 + val canNotify = properties and BluetoothGattCharacteristic.PROPERTY_NOTIFY != 0 + val descriptors = characteristic.descriptors.map { descriptor -> + val descriptorId = descriptor.hashCode() + val descriptorUUID = descriptor.uuid.toString() + GattDescriptor.newBuilder() + .setId(descriptorId) + .setUuid(descriptorUUID) + .build() + } + GattCharacteristic.newBuilder() + .setId(characteristicId) + .setUuid(characteristicUUID) + .setCanRead(canRead) + .setCanWrite(canWrite) + .setCanWriteWithoutResponse(canWriteWithoutResponse) + .setCanNotify(canNotify) + .addAllDescriptors(descriptors) + .build() + } + GattService.newBuilder() + .setId(serviceId) + .setUuid(serviceUUID) + .addAllCharacteristics(characteristics).build() + } + val reply = GATT.newBuilder() + .setId(id) + .setMtu(mtu) + .addAllServices(services) + .build() + .toByteArray() + handler.post { connect.success(reply) } + } + else -> { + gatts.remove(address)!!.close() + handler.post { connect.error(status) } + } + } + } + + override fun onCharacteristicRead(gatt: BluetoothGatt?, characteristic: BluetoothGattCharacteristic?, status: Int) { + super.onCharacteristicRead(gatt, characteristic, status) + val key = characteristic!!.hashCode() + val read = characteristicReads.remove(key)!! + when (status) { + BluetoothGatt.GATT_SUCCESS -> handler.post { read.success(characteristic.value) } + else -> handler.post { read.error(status) } + } + } + + override fun onCharacteristicWrite(gatt: BluetoothGatt?, characteristic: BluetoothGattCharacteristic?, status: Int) { + super.onCharacteristicWrite(gatt, characteristic, status) + val key = characteristic!!.hashCode() + val write = characteristicWrites.remove(key)!! + when (status) { + BluetoothGatt.GATT_SUCCESS -> handler.post { write.success() } + else -> handler.post { write.error(status) } + } + } + + override fun onCharacteristicChanged(gatt: BluetoothGatt?, characteristic: BluetoothGattCharacteristic?) { + super.onCharacteristicChanged(gatt, characteristic) + val id = characteristic!!.hashCode() + val value = ByteString.copyFrom(characteristic.value) + val characteristicValue = GattCharacteristicValue.newBuilder() + .setId(id) + .setValue(value) + .build() + val event = Message.newBuilder() + .setCategory(GATT_CHARACTERISTIC_NOTIFY) + .setCharacteristicValue(characteristicValue) + .build() + .toByteArray() + handler.post { sink?.success(event) } + } + + override fun onDescriptorRead(gatt: BluetoothGatt?, descriptor: BluetoothGattDescriptor?, status: Int) { + super.onDescriptorRead(gatt, descriptor, status) + val key = descriptor!!.hashCode() + val read = descriptorReads.remove(key)!! + when (status) { + BluetoothGatt.GATT_SUCCESS -> handler.post { read.success(descriptor.value) } + else -> handler.post { read.error(status) } + } + } + + override fun onDescriptorWrite(gatt: BluetoothGatt?, descriptor: BluetoothGattDescriptor?, status: Int) { + super.onDescriptorWrite(gatt, descriptor, status) + val key = descriptor!!.hashCode() + val write = descriptorWrites.remove(key)!! + when (status) { + BluetoothGatt.GATT_SUCCESS -> handler.post { write.success() } + else -> handler.post { write.error(status) } + } + } + } + } + + private fun startScan(services: List, startScanHandler: StartScanHandler) { + val filters = services.map { service -> + val serviceUUID = ParcelUuid.fromString(service) + ScanFilter.Builder() + .setServiceUuid(serviceUUID) + .build() + } + val settings = ScanSettings.Builder() + .setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY) + .build() + bluetoothAdapter.bluetoothLeScanner.startScan(filters, settings, scanCallback) + // use handler.post to delay until #onScanFailed executed. + handler.post { + val code = scanCode + when (code) { + NO_ERROR -> scanning = true + else -> scanCode = NO_ERROR + } + startScanHandler.invoke(code) + } + } + + private fun stopScan() { + bluetoothAdapter.bluetoothLeScanner.stopScan(scanCallback) + scanning = false + } + + override fun onAttachedToEngine(@NonNull binding: FlutterPlugin.FlutterPluginBinding) { + method = MethodChannel(binding.binaryMessenger, "$NAMESPACE/method") + method.setMethodCallHandler(this) + event = EventChannel(binding.binaryMessenger, "$NAMESPACE/event") + event.setStreamHandler(this) + context = binding.applicationContext + // Register bluetooth adapter state receiver. + val adapterStateFilter = IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED) + context.registerReceiver(bluetoothStateReceiver, adapterStateFilter) + } + + override fun onDetachedFromEngine(@NonNull binding: FlutterPlugin.FlutterPluginBinding) { + // Clear connections. + for (gatt in gatts.values) gatt.close() + gatts.clear() + // Stop scan. + if (scanning) stopScan() + // Unregister bluetooth adapter state receiver. + context.unregisterReceiver(bluetoothStateReceiver) + event.setStreamHandler(null) + method.setMethodCallHandler(null) + } + + override fun onMethodCall(@NonNull call: MethodCall, @NonNull result: Result) { + val category = call.category + if (category != BLUETOOTH_AVAILABLE && category != BLUETOOTH_STATE && !bluetoothAdapter.state.opened) result.error(INVALID_REQUEST) + else when (category) { + BLUETOOTH_AVAILABLE -> result.success(bluetoothAvailable) + BLUETOOTH_STATE -> result.success(bluetoothAdapter.state.opened) + CENTRAL_START_DISCOVERY -> { + when { + requestPermissionsHandler != null -> result.error(INVALID_REQUEST) + else -> { + val startDiscovery = Runnable { + val data = call.arguments() + val arguments = StartDiscoveryArguments.parseFrom(data) + val startScanHandler: StartScanHandler = { code -> + when (code) { + NO_ERROR -> result.success() + else -> result.error(code) + } + } + startScan(arguments.servicesList, startScanHandler) + } + when { + hasPermission -> startDiscovery.run() + else -> { + requestPermissionsHandler = { granted -> + if (granted) startDiscovery.run() + else result.error(REQUEST_PERMISSION_FAILED) + } + val permissions = arrayOf(Manifest.permission.ACCESS_FINE_LOCATION) + ActivityCompat.requestPermissions(binding!!.activity, permissions, REQUEST_CODE) + } + } + } + } + } + CENTRAL_STOP_DISCOVERY -> { + stopScan() + result.success() + } + CENTRAL_DISCOVERED -> result.notImplemented() + CENTRAL_CONNECT -> { + val data = call.arguments() + val arguments = ConnectArguments.parseFrom(data) + val address = arguments.address + val connect = connects[address] + var gatt = gatts[address] + if (connect != null || gatt != null) { + result.error(INVALID_REQUEST) + } else { + val device = bluetoothAdapter.getRemoteDevice(address) + gatt = when { + // Use TRANSPORT_LE to avoid none flag device on Android 23 or later. + Build.VERSION.SDK_INT >= Build.VERSION_CODES.M -> device.connectGatt(context, false, bluetoothGattCallback, BluetoothDevice.TRANSPORT_LE) + else -> device.connectGatt(context, false, bluetoothGattCallback) + } + connects[address] = result + gatts[address] = gatt + } + } + GATT_DISCONNECT -> { + val data = call.arguments() + val arguments = GattDisconnectArguments.parseFrom(data) + val address = arguments.address + val disconnect = disconnects[address] + val gatt = gatts[address] + if (disconnect != null || gatt == null || gatt.hashCode() != arguments.id) { + result.error(INVALID_REQUEST) + } else { + disconnects[address] = result + gatt.disconnect() + } + } + GATT_CONNECTION_LOST -> result.notImplemented() + GATT_CHARACTERISTIC_READ -> { + val data = call.arguments() + val arguments = GattCharacteristicReadArguments.parseFrom(data) + val gatt = gatts[arguments.address] + if (gatt == null) result.error(INVALID_REQUEST) + else { + val serviceUUID = UUID.fromString(arguments.serviceUuid) + val service = gatt.getService(serviceUUID) + val uuid = UUID.fromString(arguments.uuid) + val characteristic = service.getCharacteristic(uuid) + val id = characteristic.hashCode() + val characteristicRead = characteristicReads[id] + if (characteristicRead != null || id != arguments.id) result.error(INVALID_REQUEST) + else { + val failed = !gatt.readCharacteristic(characteristic) + if (failed) result.error(READ_CHARACTERISTIC_FAILED) + else characteristicReads[id] = result + } + } + } + GATT_CHARACTERISTIC_WRITE -> { + val data = call.arguments() + val arguments = GattCharacteristicWriteArguments.parseFrom(data) + val gatt = gatts[arguments.address] + if (gatt == null) result.error(INVALID_REQUEST) + else { + val serviceUUID = UUID.fromString(arguments.serviceUuid) + val service = gatt.getService(serviceUUID) + val uuid = UUID.fromString(arguments.uuid) + val characteristic = service.getCharacteristic(uuid) + val id = characteristic.hashCode() + val characteristicWrite = characteristicWrites[id] + if (characteristicWrite != null || id != arguments.id) result.error(INVALID_REQUEST) + else { + characteristic.value = arguments.value.toByteArray() + characteristic.writeType = + if (arguments.withoutResponse) BluetoothGattCharacteristic.WRITE_TYPE_NO_RESPONSE + else BluetoothGattCharacteristic.WRITE_TYPE_DEFAULT + val failed = !gatt.writeCharacteristic(characteristic) + if (failed) result.error(WRITE_CHARACTERISTIC_FAILED) + else characteristicWrites[id] = result + } + } + } + GATT_CHARACTERISTIC_NOTIFY -> { + val data = call.arguments() + val arguments = GattCharacteristicNotifyArguments.parseFrom(data) + val gatt = gatts[arguments.address] + if (gatt == null) result.error(INVALID_REQUEST) + else { + val serviceUUID = UUID.fromString(arguments.serviceUuid) + val service = gatt.getService(serviceUUID) + val uuid = UUID.fromString(arguments.uuid) + val characteristic = service.getCharacteristic(uuid) + val id = characteristic.hashCode() + val descriptorUUID = UUID.fromString(CLIENT_CHARACTERISTIC_CONFIG) + val descriptor = characteristic.getDescriptor(descriptorUUID) + val descriptorId = descriptor.hashCode() + val descriptorWrite = descriptorWrites[descriptorId] + if (descriptorWrite != null || id != arguments.id) result.error(INVALID_REQUEST) + else { + var failed = !gatt.setCharacteristicNotification(characteristic, arguments.state) + if (failed) result.error(NOTIFY_CHARACTERISTIC_FAILED) + else { + descriptor.value = + if (arguments.state) BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE + else BluetoothGattDescriptor.DISABLE_NOTIFICATION_VALUE + failed = !gatt.writeDescriptor(descriptor) + if (failed) result.error(WRITE_DESCRIPTOR_FAILED) + else descriptorWrites[descriptorId] = result + } + } + } + } + GATT_DESCRIPTOR_READ -> { + val data = call.arguments() + val arguments = GattDescriptorReadArguments.parseFrom(data) + val gatt = gatts[arguments.address] + if (gatt == null) result.error(INVALID_REQUEST) + else { + val serviceUUID = UUID.fromString(arguments.serviceUuid) + val service = gatt.getService(serviceUUID) + val characteristicUUID = UUID.fromString(arguments.characteristicUuid) + val characteristic = service.getCharacteristic(characteristicUUID) + val uuid = UUID.fromString(arguments.uuid) + val descriptor = characteristic.getDescriptor(uuid) + val id = descriptor.hashCode() + val descriptorRead = descriptorReads[id] + if (descriptorRead != null || id != arguments.id) result.error(INVALID_REQUEST) + else { + val failed = !gatt.readDescriptor(descriptor) + if (failed) result.error(READ_DESCRIPTOR_FAILED) + else descriptorReads[id] = result + } + } + } + GATT_DESCRIPTOR_WRITE -> { + val data = call.arguments() + val arguments = GattDescriptorWriteArguments.parseFrom(data) + val gatt = gatts[arguments.address] + if (gatt == null) result.error(INVALID_REQUEST) + else { + val serviceUUID = UUID.fromString(arguments.serviceUuid) + val service = gatt.getService(serviceUUID) + val characteristicUUID = UUID.fromString(arguments.characteristicUuid) + val characteristic = service.getCharacteristic(characteristicUUID) + val uuid = UUID.fromString(arguments.uuid) + val descriptor = characteristic.getDescriptor(uuid) + val id = descriptor.hashCode() + val descriptorWrite = descriptorWrites[id] + if (descriptorWrite != null || id != arguments.id) result.error(INVALID_REQUEST) + else { + val failed = !gatt.writeDescriptor(descriptor) + if (failed) result.error(WRITE_DESCRIPTOR_FAILED) + else descriptorWrites[id] = result + } + } + } + UNRECOGNIZED -> result.notImplemented() + } + } + + override fun onListen(arguments: Any?, sink: EventSink?) { + Log.d(TAG, "onListen") + this.sink = sink + } + + override fun onCancel(arguments: Any?) { + Log.d(TAG, "onCancel") + // This must be a hot reload for now, clear all status here. + // Clear connections. + for (gatt in gatts.values) gatt.close() + gatts.clear() + // Stop scan. + if (scanning) stopScan() + sink = null + } + + override fun onAttachedToActivity(binding: ActivityPluginBinding) { + this.binding = binding + this.binding!!.addRequestPermissionsResultListener(this) + } + + override fun onDetachedFromActivity() { + binding!!.removeRequestPermissionsResultListener(this) + binding = null + } + + override fun onReattachedToActivityForConfigChanges(binding: ActivityPluginBinding) { + onAttachedToActivity(binding) + } + + override fun onDetachedFromActivityForConfigChanges() { + onDetachedFromActivity() + } + + override fun onRequestPermissionsResult( + requestCode: Int, + permissions: Array?, + grantResults: IntArray? + ): Boolean { + return when { + requestCode != REQUEST_CODE || requestPermissionsHandler == null -> false + else -> { + val granted = + grantResults != null && grantResults.all { result -> result == PackageManager.PERMISSION_GRANTED } + requestPermissionsHandler!!.invoke(granted) + requestPermissionsHandler = null + true + } + } + } } + +fun Result.success() { + success(null) +} + +fun Result.error(code: Int, message: String? = null, details: String? = null) { + error("$code", message, details) +} + +val Any.TAG: String + get() = this::class.java.simpleName + +val MethodCall.category: MessageCategory + get() = valueOf(method) + +val Int.opened: Boolean + get() = when (this) { + BluetoothAdapter.STATE_OFF -> false + BluetoothAdapter.STATE_TURNING_ON -> false + BluetoothAdapter.STATE_ON -> true + BluetoothAdapter.STATE_TURNING_OFF -> true + else -> false + } \ No newline at end of file diff --git a/android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/ConnectArgumentsKt.kt b/android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/ConnectArgumentsKt.kt new file mode 100644 index 0000000..d02940c --- /dev/null +++ b/android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/ConnectArgumentsKt.kt @@ -0,0 +1,45 @@ +//Generated by the protocol buffer compiler. DO NOT EDIT! +// source: message.proto + +package dev.yanshouwang.bluetooth_low_energy; + +@kotlin.jvm.JvmSynthetic +inline fun connectArguments(block: dev.yanshouwang.bluetooth_low_energy.ConnectArgumentsKt.Dsl.() -> Unit): dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectArguments = + dev.yanshouwang.bluetooth_low_energy.ConnectArgumentsKt.Dsl._create(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectArguments.newBuilder()).apply { block() }._build() +object ConnectArgumentsKt { + @kotlin.OptIn(com.google.protobuf.kotlin.OnlyForUseByGeneratedProtoCode::class) + @com.google.protobuf.kotlin.ProtoDslMarker + class Dsl private constructor( + @kotlin.jvm.JvmField private val _builder: dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectArguments.Builder + ) { + companion object { + @kotlin.jvm.JvmSynthetic + @kotlin.PublishedApi + internal fun _create(builder: dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectArguments.Builder): Dsl = Dsl(builder) + } + + @kotlin.jvm.JvmSynthetic + @kotlin.PublishedApi + internal fun _build(): dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectArguments = _builder.build() + + /** + * string address = 1; + */ + var address: kotlin.String + @JvmName("getAddress") + get() = _builder.getAddress() + @JvmName("setAddress") + set(value) { + _builder.setAddress(value) + } + /** + * string address = 1; + */ + fun clearAddress() { + _builder.clearAddress() + } + } +} +@kotlin.jvm.JvmSynthetic +inline fun dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectArguments.copy(block: dev.yanshouwang.bluetooth_low_energy.ConnectArgumentsKt.Dsl.() -> Unit): dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectArguments = + dev.yanshouwang.bluetooth_low_energy.ConnectArgumentsKt.Dsl._create(this.toBuilder()).apply { block() }._build() diff --git a/android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/ConnectionLostKt.kt b/android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/ConnectionLostKt.kt new file mode 100644 index 0000000..255af82 --- /dev/null +++ b/android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/ConnectionLostKt.kt @@ -0,0 +1,62 @@ +//Generated by the protocol buffer compiler. DO NOT EDIT! +// source: message.proto + +package dev.yanshouwang.bluetooth_low_energy; + +@kotlin.jvm.JvmSynthetic +inline fun connectionLost(block: dev.yanshouwang.bluetooth_low_energy.ConnectionLostKt.Dsl.() -> Unit): dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost = + dev.yanshouwang.bluetooth_low_energy.ConnectionLostKt.Dsl._create(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost.newBuilder()).apply { block() }._build() +object ConnectionLostKt { + @kotlin.OptIn(com.google.protobuf.kotlin.OnlyForUseByGeneratedProtoCode::class) + @com.google.protobuf.kotlin.ProtoDslMarker + class Dsl private constructor( + @kotlin.jvm.JvmField private val _builder: dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost.Builder + ) { + companion object { + @kotlin.jvm.JvmSynthetic + @kotlin.PublishedApi + internal fun _create(builder: dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost.Builder): Dsl = Dsl(builder) + } + + @kotlin.jvm.JvmSynthetic + @kotlin.PublishedApi + internal fun _build(): dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost = _builder.build() + + /** + * int32 id = 1; + */ + var id: kotlin.Int + @JvmName("getId") + get() = _builder.getId() + @JvmName("setId") + set(value) { + _builder.setId(value) + } + /** + * int32 id = 1; + */ + fun clearId() { + _builder.clearId() + } + + /** + * int32 error_code = 2; + */ + var errorCode: kotlin.Int + @JvmName("getErrorCode") + get() = _builder.getErrorCode() + @JvmName("setErrorCode") + set(value) { + _builder.setErrorCode(value) + } + /** + * int32 error_code = 2; + */ + fun clearErrorCode() { + _builder.clearErrorCode() + } + } +} +@kotlin.jvm.JvmSynthetic +inline fun dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost.copy(block: dev.yanshouwang.bluetooth_low_energy.ConnectionLostKt.Dsl.() -> Unit): dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost = + dev.yanshouwang.bluetooth_low_energy.ConnectionLostKt.Dsl._create(this.toBuilder()).apply { block() }._build() diff --git a/android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/DiscoveryKt.kt b/android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/DiscoveryKt.kt new file mode 100644 index 0000000..81d2e74 --- /dev/null +++ b/android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/DiscoveryKt.kt @@ -0,0 +1,79 @@ +//Generated by the protocol buffer compiler. DO NOT EDIT! +// source: message.proto + +package dev.yanshouwang.bluetooth_low_energy; + +@kotlin.jvm.JvmSynthetic +inline fun discovery(block: dev.yanshouwang.bluetooth_low_energy.DiscoveryKt.Dsl.() -> Unit): dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery = + dev.yanshouwang.bluetooth_low_energy.DiscoveryKt.Dsl._create(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery.newBuilder()).apply { block() }._build() +object DiscoveryKt { + @kotlin.OptIn(com.google.protobuf.kotlin.OnlyForUseByGeneratedProtoCode::class) + @com.google.protobuf.kotlin.ProtoDslMarker + class Dsl private constructor( + @kotlin.jvm.JvmField private val _builder: dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery.Builder + ) { + companion object { + @kotlin.jvm.JvmSynthetic + @kotlin.PublishedApi + internal fun _create(builder: dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery.Builder): Dsl = Dsl(builder) + } + + @kotlin.jvm.JvmSynthetic + @kotlin.PublishedApi + internal fun _build(): dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery = _builder.build() + + /** + * string address = 1; + */ + var address: kotlin.String + @JvmName("getAddress") + get() = _builder.getAddress() + @JvmName("setAddress") + set(value) { + _builder.setAddress(value) + } + /** + * string address = 1; + */ + fun clearAddress() { + _builder.clearAddress() + } + + /** + * sint32 rssi = 2; + */ + var rssi: kotlin.Int + @JvmName("getRssi") + get() = _builder.getRssi() + @JvmName("setRssi") + set(value) { + _builder.setRssi(value) + } + /** + * sint32 rssi = 2; + */ + fun clearRssi() { + _builder.clearRssi() + } + + /** + * bytes advertisements = 3; + */ + var advertisements: com.google.protobuf.ByteString + @JvmName("getAdvertisements") + get() = _builder.getAdvertisements() + @JvmName("setAdvertisements") + set(value) { + _builder.setAdvertisements(value) + } + /** + * bytes advertisements = 3; + */ + fun clearAdvertisements() { + _builder.clearAdvertisements() + } + } +} +@kotlin.jvm.JvmSynthetic +inline fun dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery.copy(block: dev.yanshouwang.bluetooth_low_energy.DiscoveryKt.Dsl.() -> Unit): dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery = + dev.yanshouwang.bluetooth_low_energy.DiscoveryKt.Dsl._create(this.toBuilder()).apply { block() }._build() diff --git a/android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/GATTKt.kt b/android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/GATTKt.kt new file mode 100644 index 0000000..56f17f3 --- /dev/null +++ b/android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/GATTKt.kt @@ -0,0 +1,125 @@ +//Generated by the protocol buffer compiler. DO NOT EDIT! +// source: message.proto + +package dev.yanshouwang.bluetooth_low_energy; + +@kotlin.jvm.JvmSynthetic +inline fun gATT(block: dev.yanshouwang.bluetooth_low_energy.GATTKt.Dsl.() -> Unit): dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GATT = + dev.yanshouwang.bluetooth_low_energy.GATTKt.Dsl._create(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GATT.newBuilder()).apply { block() }._build() +object GATTKt { + @kotlin.OptIn(com.google.protobuf.kotlin.OnlyForUseByGeneratedProtoCode::class) + @com.google.protobuf.kotlin.ProtoDslMarker + class Dsl private constructor( + @kotlin.jvm.JvmField private val _builder: dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GATT.Builder + ) { + companion object { + @kotlin.jvm.JvmSynthetic + @kotlin.PublishedApi + internal fun _create(builder: dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GATT.Builder): Dsl = Dsl(builder) + } + + @kotlin.jvm.JvmSynthetic + @kotlin.PublishedApi + internal fun _build(): dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GATT = _builder.build() + + /** + * int32 id = 1; + */ + var id: kotlin.Int + @JvmName("getId") + get() = _builder.getId() + @JvmName("setId") + set(value) { + _builder.setId(value) + } + /** + * int32 id = 1; + */ + fun clearId() { + _builder.clearId() + } + + /** + * int32 mtu = 2; + */ + var mtu: kotlin.Int + @JvmName("getMtu") + get() = _builder.getMtu() + @JvmName("setMtu") + set(value) { + _builder.setMtu(value) + } + /** + * int32 mtu = 2; + */ + fun clearMtu() { + _builder.clearMtu() + } + + /** + * An uninstantiable, behaviorless type to represent the field in + * generics. + */ + @kotlin.OptIn(com.google.protobuf.kotlin.OnlyForUseByGeneratedProtoCode::class) + class ServicesProxy private constructor() : com.google.protobuf.kotlin.DslProxy() + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattService services = 3; + */ + val services: com.google.protobuf.kotlin.DslList + @kotlin.jvm.JvmSynthetic + get() = com.google.protobuf.kotlin.DslList( + _builder.getServicesList() + ) + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattService services = 3; + * @param value The services to add. + */ + @kotlin.jvm.JvmSynthetic + @kotlin.jvm.JvmName("addServices") + fun com.google.protobuf.kotlin.DslList.add(value: dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService) { + _builder.addServices(value) + }/** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattService services = 3; + * @param value The services to add. + */ + @kotlin.jvm.JvmSynthetic + @kotlin.jvm.JvmName("plusAssignServices") + inline operator fun com.google.protobuf.kotlin.DslList.plusAssign(value: dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService) { + add(value) + }/** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattService services = 3; + * @param values The services to add. + */ + @kotlin.jvm.JvmSynthetic + @kotlin.jvm.JvmName("addAllServices") + fun com.google.protobuf.kotlin.DslList.addAll(values: kotlin.collections.Iterable) { + _builder.addAllServices(values) + }/** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattService services = 3; + * @param values The services to add. + */ + @kotlin.jvm.JvmSynthetic + @kotlin.jvm.JvmName("plusAssignAllServices") + inline operator fun com.google.protobuf.kotlin.DslList.plusAssign(values: kotlin.collections.Iterable) { + addAll(values) + }/** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattService services = 3; + * @param index The index to set the value at. + * @param value The services to set. + */ + @kotlin.jvm.JvmSynthetic + @kotlin.jvm.JvmName("setServices") + operator fun com.google.protobuf.kotlin.DslList.set(index: kotlin.Int, value: dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService) { + _builder.setServices(index, value) + }/** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattService services = 3; + */ + @kotlin.jvm.JvmSynthetic + @kotlin.jvm.JvmName("clearServices") + fun com.google.protobuf.kotlin.DslList.clear() { + _builder.clearServices() + }} +} +@kotlin.jvm.JvmSynthetic +inline fun dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GATT.copy(block: dev.yanshouwang.bluetooth_low_energy.GATTKt.Dsl.() -> Unit): dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GATT = + dev.yanshouwang.bluetooth_low_energy.GATTKt.Dsl._create(this.toBuilder()).apply { block() }._build() diff --git a/android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/GattCharacteristicKt.kt b/android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/GattCharacteristicKt.kt new file mode 100644 index 0000000..abfe23e --- /dev/null +++ b/android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/GattCharacteristicKt.kt @@ -0,0 +1,193 @@ +//Generated by the protocol buffer compiler. DO NOT EDIT! +// source: message.proto + +package dev.yanshouwang.bluetooth_low_energy; + +@kotlin.jvm.JvmSynthetic +inline fun gattCharacteristic(block: dev.yanshouwang.bluetooth_low_energy.GattCharacteristicKt.Dsl.() -> Unit): dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic = + dev.yanshouwang.bluetooth_low_energy.GattCharacteristicKt.Dsl._create(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic.newBuilder()).apply { block() }._build() +object GattCharacteristicKt { + @kotlin.OptIn(com.google.protobuf.kotlin.OnlyForUseByGeneratedProtoCode::class) + @com.google.protobuf.kotlin.ProtoDslMarker + class Dsl private constructor( + @kotlin.jvm.JvmField private val _builder: dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic.Builder + ) { + companion object { + @kotlin.jvm.JvmSynthetic + @kotlin.PublishedApi + internal fun _create(builder: dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic.Builder): Dsl = Dsl(builder) + } + + @kotlin.jvm.JvmSynthetic + @kotlin.PublishedApi + internal fun _build(): dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic = _builder.build() + + /** + * int32 id = 1; + */ + var id: kotlin.Int + @JvmName("getId") + get() = _builder.getId() + @JvmName("setId") + set(value) { + _builder.setId(value) + } + /** + * int32 id = 1; + */ + fun clearId() { + _builder.clearId() + } + + /** + * string uuid = 2; + */ + var uuid: kotlin.String + @JvmName("getUuid") + get() = _builder.getUuid() + @JvmName("setUuid") + set(value) { + _builder.setUuid(value) + } + /** + * string uuid = 2; + */ + fun clearUuid() { + _builder.clearUuid() + } + + /** + * An uninstantiable, behaviorless type to represent the field in + * generics. + */ + @kotlin.OptIn(com.google.protobuf.kotlin.OnlyForUseByGeneratedProtoCode::class) + class DescriptorsProxy private constructor() : com.google.protobuf.kotlin.DslProxy() + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattDescriptor descriptors = 3; + */ + val descriptors: com.google.protobuf.kotlin.DslList + @kotlin.jvm.JvmSynthetic + get() = com.google.protobuf.kotlin.DslList( + _builder.getDescriptorsList() + ) + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattDescriptor descriptors = 3; + * @param value The descriptors to add. + */ + @kotlin.jvm.JvmSynthetic + @kotlin.jvm.JvmName("addDescriptors") + fun com.google.protobuf.kotlin.DslList.add(value: dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor) { + _builder.addDescriptors(value) + }/** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattDescriptor descriptors = 3; + * @param value The descriptors to add. + */ + @kotlin.jvm.JvmSynthetic + @kotlin.jvm.JvmName("plusAssignDescriptors") + inline operator fun com.google.protobuf.kotlin.DslList.plusAssign(value: dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor) { + add(value) + }/** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattDescriptor descriptors = 3; + * @param values The descriptors to add. + */ + @kotlin.jvm.JvmSynthetic + @kotlin.jvm.JvmName("addAllDescriptors") + fun com.google.protobuf.kotlin.DslList.addAll(values: kotlin.collections.Iterable) { + _builder.addAllDescriptors(values) + }/** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattDescriptor descriptors = 3; + * @param values The descriptors to add. + */ + @kotlin.jvm.JvmSynthetic + @kotlin.jvm.JvmName("plusAssignAllDescriptors") + inline operator fun com.google.protobuf.kotlin.DslList.plusAssign(values: kotlin.collections.Iterable) { + addAll(values) + }/** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattDescriptor descriptors = 3; + * @param index The index to set the value at. + * @param value The descriptors to set. + */ + @kotlin.jvm.JvmSynthetic + @kotlin.jvm.JvmName("setDescriptors") + operator fun com.google.protobuf.kotlin.DslList.set(index: kotlin.Int, value: dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor) { + _builder.setDescriptors(index, value) + }/** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattDescriptor descriptors = 3; + */ + @kotlin.jvm.JvmSynthetic + @kotlin.jvm.JvmName("clearDescriptors") + fun com.google.protobuf.kotlin.DslList.clear() { + _builder.clearDescriptors() + } + /** + * bool canRead = 4; + */ + var canRead: kotlin.Boolean + @JvmName("getCanRead") + get() = _builder.getCanRead() + @JvmName("setCanRead") + set(value) { + _builder.setCanRead(value) + } + /** + * bool canRead = 4; + */ + fun clearCanRead() { + _builder.clearCanRead() + } + + /** + * bool canWrite = 5; + */ + var canWrite: kotlin.Boolean + @JvmName("getCanWrite") + get() = _builder.getCanWrite() + @JvmName("setCanWrite") + set(value) { + _builder.setCanWrite(value) + } + /** + * bool canWrite = 5; + */ + fun clearCanWrite() { + _builder.clearCanWrite() + } + + /** + * bool canWriteWithoutResponse = 6; + */ + var canWriteWithoutResponse: kotlin.Boolean + @JvmName("getCanWriteWithoutResponse") + get() = _builder.getCanWriteWithoutResponse() + @JvmName("setCanWriteWithoutResponse") + set(value) { + _builder.setCanWriteWithoutResponse(value) + } + /** + * bool canWriteWithoutResponse = 6; + */ + fun clearCanWriteWithoutResponse() { + _builder.clearCanWriteWithoutResponse() + } + + /** + * bool canNotify = 7; + */ + var canNotify: kotlin.Boolean + @JvmName("getCanNotify") + get() = _builder.getCanNotify() + @JvmName("setCanNotify") + set(value) { + _builder.setCanNotify(value) + } + /** + * bool canNotify = 7; + */ + fun clearCanNotify() { + _builder.clearCanNotify() + } + } +} +@kotlin.jvm.JvmSynthetic +inline fun dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic.copy(block: dev.yanshouwang.bluetooth_low_energy.GattCharacteristicKt.Dsl.() -> Unit): dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic = + dev.yanshouwang.bluetooth_low_energy.GattCharacteristicKt.Dsl._create(this.toBuilder()).apply { block() }._build() diff --git a/android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/GattCharacteristicNotifyArgumentsKt.kt b/android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/GattCharacteristicNotifyArgumentsKt.kt new file mode 100644 index 0000000..b68b8a0 --- /dev/null +++ b/android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/GattCharacteristicNotifyArgumentsKt.kt @@ -0,0 +1,113 @@ +//Generated by the protocol buffer compiler. DO NOT EDIT! +// source: message.proto + +package dev.yanshouwang.bluetooth_low_energy; + +@kotlin.jvm.JvmSynthetic +inline fun gattCharacteristicNotifyArguments(block: dev.yanshouwang.bluetooth_low_energy.GattCharacteristicNotifyArgumentsKt.Dsl.() -> Unit): dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicNotifyArguments = + dev.yanshouwang.bluetooth_low_energy.GattCharacteristicNotifyArgumentsKt.Dsl._create(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicNotifyArguments.newBuilder()).apply { block() }._build() +object GattCharacteristicNotifyArgumentsKt { + @kotlin.OptIn(com.google.protobuf.kotlin.OnlyForUseByGeneratedProtoCode::class) + @com.google.protobuf.kotlin.ProtoDslMarker + class Dsl private constructor( + @kotlin.jvm.JvmField private val _builder: dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicNotifyArguments.Builder + ) { + companion object { + @kotlin.jvm.JvmSynthetic + @kotlin.PublishedApi + internal fun _create(builder: dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicNotifyArguments.Builder): Dsl = Dsl(builder) + } + + @kotlin.jvm.JvmSynthetic + @kotlin.PublishedApi + internal fun _build(): dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicNotifyArguments = _builder.build() + + /** + * string address = 1; + */ + var address: kotlin.String + @JvmName("getAddress") + get() = _builder.getAddress() + @JvmName("setAddress") + set(value) { + _builder.setAddress(value) + } + /** + * string address = 1; + */ + fun clearAddress() { + _builder.clearAddress() + } + + /** + * string service_uuid = 2; + */ + var serviceUuid: kotlin.String + @JvmName("getServiceUuid") + get() = _builder.getServiceUuid() + @JvmName("setServiceUuid") + set(value) { + _builder.setServiceUuid(value) + } + /** + * string service_uuid = 2; + */ + fun clearServiceUuid() { + _builder.clearServiceUuid() + } + + /** + * string uuid = 3; + */ + var uuid: kotlin.String + @JvmName("getUuid") + get() = _builder.getUuid() + @JvmName("setUuid") + set(value) { + _builder.setUuid(value) + } + /** + * string uuid = 3; + */ + fun clearUuid() { + _builder.clearUuid() + } + + /** + * int32 id = 4; + */ + var id: kotlin.Int + @JvmName("getId") + get() = _builder.getId() + @JvmName("setId") + set(value) { + _builder.setId(value) + } + /** + * int32 id = 4; + */ + fun clearId() { + _builder.clearId() + } + + /** + * bool state = 5; + */ + var state: kotlin.Boolean + @JvmName("getState") + get() = _builder.getState() + @JvmName("setState") + set(value) { + _builder.setState(value) + } + /** + * bool state = 5; + */ + fun clearState() { + _builder.clearState() + } + } +} +@kotlin.jvm.JvmSynthetic +inline fun dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicNotifyArguments.copy(block: dev.yanshouwang.bluetooth_low_energy.GattCharacteristicNotifyArgumentsKt.Dsl.() -> Unit): dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicNotifyArguments = + dev.yanshouwang.bluetooth_low_energy.GattCharacteristicNotifyArgumentsKt.Dsl._create(this.toBuilder()).apply { block() }._build() diff --git a/android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/GattCharacteristicReadArgumentsKt.kt b/android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/GattCharacteristicReadArgumentsKt.kt new file mode 100644 index 0000000..652f4a0 --- /dev/null +++ b/android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/GattCharacteristicReadArgumentsKt.kt @@ -0,0 +1,96 @@ +//Generated by the protocol buffer compiler. DO NOT EDIT! +// source: message.proto + +package dev.yanshouwang.bluetooth_low_energy; + +@kotlin.jvm.JvmSynthetic +inline fun gattCharacteristicReadArguments(block: dev.yanshouwang.bluetooth_low_energy.GattCharacteristicReadArgumentsKt.Dsl.() -> Unit): dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicReadArguments = + dev.yanshouwang.bluetooth_low_energy.GattCharacteristicReadArgumentsKt.Dsl._create(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicReadArguments.newBuilder()).apply { block() }._build() +object GattCharacteristicReadArgumentsKt { + @kotlin.OptIn(com.google.protobuf.kotlin.OnlyForUseByGeneratedProtoCode::class) + @com.google.protobuf.kotlin.ProtoDslMarker + class Dsl private constructor( + @kotlin.jvm.JvmField private val _builder: dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicReadArguments.Builder + ) { + companion object { + @kotlin.jvm.JvmSynthetic + @kotlin.PublishedApi + internal fun _create(builder: dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicReadArguments.Builder): Dsl = Dsl(builder) + } + + @kotlin.jvm.JvmSynthetic + @kotlin.PublishedApi + internal fun _build(): dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicReadArguments = _builder.build() + + /** + * string address = 1; + */ + var address: kotlin.String + @JvmName("getAddress") + get() = _builder.getAddress() + @JvmName("setAddress") + set(value) { + _builder.setAddress(value) + } + /** + * string address = 1; + */ + fun clearAddress() { + _builder.clearAddress() + } + + /** + * string service_uuid = 2; + */ + var serviceUuid: kotlin.String + @JvmName("getServiceUuid") + get() = _builder.getServiceUuid() + @JvmName("setServiceUuid") + set(value) { + _builder.setServiceUuid(value) + } + /** + * string service_uuid = 2; + */ + fun clearServiceUuid() { + _builder.clearServiceUuid() + } + + /** + * string uuid = 3; + */ + var uuid: kotlin.String + @JvmName("getUuid") + get() = _builder.getUuid() + @JvmName("setUuid") + set(value) { + _builder.setUuid(value) + } + /** + * string uuid = 3; + */ + fun clearUuid() { + _builder.clearUuid() + } + + /** + * int32 id = 4; + */ + var id: kotlin.Int + @JvmName("getId") + get() = _builder.getId() + @JvmName("setId") + set(value) { + _builder.setId(value) + } + /** + * int32 id = 4; + */ + fun clearId() { + _builder.clearId() + } + } +} +@kotlin.jvm.JvmSynthetic +inline fun dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicReadArguments.copy(block: dev.yanshouwang.bluetooth_low_energy.GattCharacteristicReadArgumentsKt.Dsl.() -> Unit): dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicReadArguments = + dev.yanshouwang.bluetooth_low_energy.GattCharacteristicReadArgumentsKt.Dsl._create(this.toBuilder()).apply { block() }._build() diff --git a/android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/GattCharacteristicValueKt.kt b/android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/GattCharacteristicValueKt.kt new file mode 100644 index 0000000..83b4e30 --- /dev/null +++ b/android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/GattCharacteristicValueKt.kt @@ -0,0 +1,62 @@ +//Generated by the protocol buffer compiler. DO NOT EDIT! +// source: message.proto + +package dev.yanshouwang.bluetooth_low_energy; + +@kotlin.jvm.JvmSynthetic +inline fun gattCharacteristicValue(block: dev.yanshouwang.bluetooth_low_energy.GattCharacteristicValueKt.Dsl.() -> Unit): dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue = + dev.yanshouwang.bluetooth_low_energy.GattCharacteristicValueKt.Dsl._create(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue.newBuilder()).apply { block() }._build() +object GattCharacteristicValueKt { + @kotlin.OptIn(com.google.protobuf.kotlin.OnlyForUseByGeneratedProtoCode::class) + @com.google.protobuf.kotlin.ProtoDslMarker + class Dsl private constructor( + @kotlin.jvm.JvmField private val _builder: dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue.Builder + ) { + companion object { + @kotlin.jvm.JvmSynthetic + @kotlin.PublishedApi + internal fun _create(builder: dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue.Builder): Dsl = Dsl(builder) + } + + @kotlin.jvm.JvmSynthetic + @kotlin.PublishedApi + internal fun _build(): dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue = _builder.build() + + /** + * int32 id = 3; + */ + var id: kotlin.Int + @JvmName("getId") + get() = _builder.getId() + @JvmName("setId") + set(value) { + _builder.setId(value) + } + /** + * int32 id = 3; + */ + fun clearId() { + _builder.clearId() + } + + /** + * bytes value = 4; + */ + var value: com.google.protobuf.ByteString + @JvmName("getValue") + get() = _builder.getValue() + @JvmName("setValue") + set(value) { + _builder.setValue(value) + } + /** + * bytes value = 4; + */ + fun clearValue() { + _builder.clearValue() + } + } +} +@kotlin.jvm.JvmSynthetic +inline fun dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue.copy(block: dev.yanshouwang.bluetooth_low_energy.GattCharacteristicValueKt.Dsl.() -> Unit): dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue = + dev.yanshouwang.bluetooth_low_energy.GattCharacteristicValueKt.Dsl._create(this.toBuilder()).apply { block() }._build() diff --git a/android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/GattCharacteristicWriteArgumentsKt.kt b/android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/GattCharacteristicWriteArgumentsKt.kt new file mode 100644 index 0000000..71b747c --- /dev/null +++ b/android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/GattCharacteristicWriteArgumentsKt.kt @@ -0,0 +1,130 @@ +//Generated by the protocol buffer compiler. DO NOT EDIT! +// source: message.proto + +package dev.yanshouwang.bluetooth_low_energy; + +@kotlin.jvm.JvmSynthetic +inline fun gattCharacteristicWriteArguments(block: dev.yanshouwang.bluetooth_low_energy.GattCharacteristicWriteArgumentsKt.Dsl.() -> Unit): dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicWriteArguments = + dev.yanshouwang.bluetooth_low_energy.GattCharacteristicWriteArgumentsKt.Dsl._create(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicWriteArguments.newBuilder()).apply { block() }._build() +object GattCharacteristicWriteArgumentsKt { + @kotlin.OptIn(com.google.protobuf.kotlin.OnlyForUseByGeneratedProtoCode::class) + @com.google.protobuf.kotlin.ProtoDslMarker + class Dsl private constructor( + @kotlin.jvm.JvmField private val _builder: dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicWriteArguments.Builder + ) { + companion object { + @kotlin.jvm.JvmSynthetic + @kotlin.PublishedApi + internal fun _create(builder: dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicWriteArguments.Builder): Dsl = Dsl(builder) + } + + @kotlin.jvm.JvmSynthetic + @kotlin.PublishedApi + internal fun _build(): dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicWriteArguments = _builder.build() + + /** + * string address = 1; + */ + var address: kotlin.String + @JvmName("getAddress") + get() = _builder.getAddress() + @JvmName("setAddress") + set(value) { + _builder.setAddress(value) + } + /** + * string address = 1; + */ + fun clearAddress() { + _builder.clearAddress() + } + + /** + * string service_uuid = 2; + */ + var serviceUuid: kotlin.String + @JvmName("getServiceUuid") + get() = _builder.getServiceUuid() + @JvmName("setServiceUuid") + set(value) { + _builder.setServiceUuid(value) + } + /** + * string service_uuid = 2; + */ + fun clearServiceUuid() { + _builder.clearServiceUuid() + } + + /** + * string uuid = 3; + */ + var uuid: kotlin.String + @JvmName("getUuid") + get() = _builder.getUuid() + @JvmName("setUuid") + set(value) { + _builder.setUuid(value) + } + /** + * string uuid = 3; + */ + fun clearUuid() { + _builder.clearUuid() + } + + /** + * int32 id = 4; + */ + var id: kotlin.Int + @JvmName("getId") + get() = _builder.getId() + @JvmName("setId") + set(value) { + _builder.setId(value) + } + /** + * int32 id = 4; + */ + fun clearId() { + _builder.clearId() + } + + /** + * bytes value = 5; + */ + var value: com.google.protobuf.ByteString + @JvmName("getValue") + get() = _builder.getValue() + @JvmName("setValue") + set(value) { + _builder.setValue(value) + } + /** + * bytes value = 5; + */ + fun clearValue() { + _builder.clearValue() + } + + /** + * bool withoutResponse = 6; + */ + var withoutResponse: kotlin.Boolean + @JvmName("getWithoutResponse") + get() = _builder.getWithoutResponse() + @JvmName("setWithoutResponse") + set(value) { + _builder.setWithoutResponse(value) + } + /** + * bool withoutResponse = 6; + */ + fun clearWithoutResponse() { + _builder.clearWithoutResponse() + } + } +} +@kotlin.jvm.JvmSynthetic +inline fun dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicWriteArguments.copy(block: dev.yanshouwang.bluetooth_low_energy.GattCharacteristicWriteArgumentsKt.Dsl.() -> Unit): dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicWriteArguments = + dev.yanshouwang.bluetooth_low_energy.GattCharacteristicWriteArgumentsKt.Dsl._create(this.toBuilder()).apply { block() }._build() diff --git a/android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/GattDescriptorKt.kt b/android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/GattDescriptorKt.kt new file mode 100644 index 0000000..9c163ef --- /dev/null +++ b/android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/GattDescriptorKt.kt @@ -0,0 +1,62 @@ +//Generated by the protocol buffer compiler. DO NOT EDIT! +// source: message.proto + +package dev.yanshouwang.bluetooth_low_energy; + +@kotlin.jvm.JvmSynthetic +inline fun gattDescriptor(block: dev.yanshouwang.bluetooth_low_energy.GattDescriptorKt.Dsl.() -> Unit): dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor = + dev.yanshouwang.bluetooth_low_energy.GattDescriptorKt.Dsl._create(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor.newBuilder()).apply { block() }._build() +object GattDescriptorKt { + @kotlin.OptIn(com.google.protobuf.kotlin.OnlyForUseByGeneratedProtoCode::class) + @com.google.protobuf.kotlin.ProtoDslMarker + class Dsl private constructor( + @kotlin.jvm.JvmField private val _builder: dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor.Builder + ) { + companion object { + @kotlin.jvm.JvmSynthetic + @kotlin.PublishedApi + internal fun _create(builder: dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor.Builder): Dsl = Dsl(builder) + } + + @kotlin.jvm.JvmSynthetic + @kotlin.PublishedApi + internal fun _build(): dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor = _builder.build() + + /** + * int32 id = 1; + */ + var id: kotlin.Int + @JvmName("getId") + get() = _builder.getId() + @JvmName("setId") + set(value) { + _builder.setId(value) + } + /** + * int32 id = 1; + */ + fun clearId() { + _builder.clearId() + } + + /** + * string uuid = 2; + */ + var uuid: kotlin.String + @JvmName("getUuid") + get() = _builder.getUuid() + @JvmName("setUuid") + set(value) { + _builder.setUuid(value) + } + /** + * string uuid = 2; + */ + fun clearUuid() { + _builder.clearUuid() + } + } +} +@kotlin.jvm.JvmSynthetic +inline fun dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor.copy(block: dev.yanshouwang.bluetooth_low_energy.GattDescriptorKt.Dsl.() -> Unit): dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptor = + dev.yanshouwang.bluetooth_low_energy.GattDescriptorKt.Dsl._create(this.toBuilder()).apply { block() }._build() diff --git a/android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/GattDescriptorReadArgumentsKt.kt b/android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/GattDescriptorReadArgumentsKt.kt new file mode 100644 index 0000000..c104d4e --- /dev/null +++ b/android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/GattDescriptorReadArgumentsKt.kt @@ -0,0 +1,113 @@ +//Generated by the protocol buffer compiler. DO NOT EDIT! +// source: message.proto + +package dev.yanshouwang.bluetooth_low_energy; + +@kotlin.jvm.JvmSynthetic +inline fun gattDescriptorReadArguments(block: dev.yanshouwang.bluetooth_low_energy.GattDescriptorReadArgumentsKt.Dsl.() -> Unit): dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorReadArguments = + dev.yanshouwang.bluetooth_low_energy.GattDescriptorReadArgumentsKt.Dsl._create(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorReadArguments.newBuilder()).apply { block() }._build() +object GattDescriptorReadArgumentsKt { + @kotlin.OptIn(com.google.protobuf.kotlin.OnlyForUseByGeneratedProtoCode::class) + @com.google.protobuf.kotlin.ProtoDslMarker + class Dsl private constructor( + @kotlin.jvm.JvmField private val _builder: dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorReadArguments.Builder + ) { + companion object { + @kotlin.jvm.JvmSynthetic + @kotlin.PublishedApi + internal fun _create(builder: dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorReadArguments.Builder): Dsl = Dsl(builder) + } + + @kotlin.jvm.JvmSynthetic + @kotlin.PublishedApi + internal fun _build(): dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorReadArguments = _builder.build() + + /** + * string address = 1; + */ + var address: kotlin.String + @JvmName("getAddress") + get() = _builder.getAddress() + @JvmName("setAddress") + set(value) { + _builder.setAddress(value) + } + /** + * string address = 1; + */ + fun clearAddress() { + _builder.clearAddress() + } + + /** + * string service_uuid = 2; + */ + var serviceUuid: kotlin.String + @JvmName("getServiceUuid") + get() = _builder.getServiceUuid() + @JvmName("setServiceUuid") + set(value) { + _builder.setServiceUuid(value) + } + /** + * string service_uuid = 2; + */ + fun clearServiceUuid() { + _builder.clearServiceUuid() + } + + /** + * string characteristic_uuid = 3; + */ + var characteristicUuid: kotlin.String + @JvmName("getCharacteristicUuid") + get() = _builder.getCharacteristicUuid() + @JvmName("setCharacteristicUuid") + set(value) { + _builder.setCharacteristicUuid(value) + } + /** + * string characteristic_uuid = 3; + */ + fun clearCharacteristicUuid() { + _builder.clearCharacteristicUuid() + } + + /** + * string uuid = 4; + */ + var uuid: kotlin.String + @JvmName("getUuid") + get() = _builder.getUuid() + @JvmName("setUuid") + set(value) { + _builder.setUuid(value) + } + /** + * string uuid = 4; + */ + fun clearUuid() { + _builder.clearUuid() + } + + /** + * int32 id = 5; + */ + var id: kotlin.Int + @JvmName("getId") + get() = _builder.getId() + @JvmName("setId") + set(value) { + _builder.setId(value) + } + /** + * int32 id = 5; + */ + fun clearId() { + _builder.clearId() + } + } +} +@kotlin.jvm.JvmSynthetic +inline fun dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorReadArguments.copy(block: dev.yanshouwang.bluetooth_low_energy.GattDescriptorReadArgumentsKt.Dsl.() -> Unit): dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorReadArguments = + dev.yanshouwang.bluetooth_low_energy.GattDescriptorReadArgumentsKt.Dsl._create(this.toBuilder()).apply { block() }._build() diff --git a/android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/GattDescriptorWriteArgumentsKt.kt b/android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/GattDescriptorWriteArgumentsKt.kt new file mode 100644 index 0000000..49dcdcf --- /dev/null +++ b/android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/GattDescriptorWriteArgumentsKt.kt @@ -0,0 +1,130 @@ +//Generated by the protocol buffer compiler. DO NOT EDIT! +// source: message.proto + +package dev.yanshouwang.bluetooth_low_energy; + +@kotlin.jvm.JvmSynthetic +inline fun gattDescriptorWriteArguments(block: dev.yanshouwang.bluetooth_low_energy.GattDescriptorWriteArgumentsKt.Dsl.() -> Unit): dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorWriteArguments = + dev.yanshouwang.bluetooth_low_energy.GattDescriptorWriteArgumentsKt.Dsl._create(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorWriteArguments.newBuilder()).apply { block() }._build() +object GattDescriptorWriteArgumentsKt { + @kotlin.OptIn(com.google.protobuf.kotlin.OnlyForUseByGeneratedProtoCode::class) + @com.google.protobuf.kotlin.ProtoDslMarker + class Dsl private constructor( + @kotlin.jvm.JvmField private val _builder: dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorWriteArguments.Builder + ) { + companion object { + @kotlin.jvm.JvmSynthetic + @kotlin.PublishedApi + internal fun _create(builder: dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorWriteArguments.Builder): Dsl = Dsl(builder) + } + + @kotlin.jvm.JvmSynthetic + @kotlin.PublishedApi + internal fun _build(): dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorWriteArguments = _builder.build() + + /** + * string address = 1; + */ + var address: kotlin.String + @JvmName("getAddress") + get() = _builder.getAddress() + @JvmName("setAddress") + set(value) { + _builder.setAddress(value) + } + /** + * string address = 1; + */ + fun clearAddress() { + _builder.clearAddress() + } + + /** + * string service_uuid = 2; + */ + var serviceUuid: kotlin.String + @JvmName("getServiceUuid") + get() = _builder.getServiceUuid() + @JvmName("setServiceUuid") + set(value) { + _builder.setServiceUuid(value) + } + /** + * string service_uuid = 2; + */ + fun clearServiceUuid() { + _builder.clearServiceUuid() + } + + /** + * string characteristic_uuid = 3; + */ + var characteristicUuid: kotlin.String + @JvmName("getCharacteristicUuid") + get() = _builder.getCharacteristicUuid() + @JvmName("setCharacteristicUuid") + set(value) { + _builder.setCharacteristicUuid(value) + } + /** + * string characteristic_uuid = 3; + */ + fun clearCharacteristicUuid() { + _builder.clearCharacteristicUuid() + } + + /** + * string uuid = 4; + */ + var uuid: kotlin.String + @JvmName("getUuid") + get() = _builder.getUuid() + @JvmName("setUuid") + set(value) { + _builder.setUuid(value) + } + /** + * string uuid = 4; + */ + fun clearUuid() { + _builder.clearUuid() + } + + /** + * int32 id = 5; + */ + var id: kotlin.Int + @JvmName("getId") + get() = _builder.getId() + @JvmName("setId") + set(value) { + _builder.setId(value) + } + /** + * int32 id = 5; + */ + fun clearId() { + _builder.clearId() + } + + /** + * bytes value = 6; + */ + var value: com.google.protobuf.ByteString + @JvmName("getValue") + get() = _builder.getValue() + @JvmName("setValue") + set(value) { + _builder.setValue(value) + } + /** + * bytes value = 6; + */ + fun clearValue() { + _builder.clearValue() + } + } +} +@kotlin.jvm.JvmSynthetic +inline fun dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorWriteArguments.copy(block: dev.yanshouwang.bluetooth_low_energy.GattDescriptorWriteArgumentsKt.Dsl.() -> Unit): dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDescriptorWriteArguments = + dev.yanshouwang.bluetooth_low_energy.GattDescriptorWriteArgumentsKt.Dsl._create(this.toBuilder()).apply { block() }._build() diff --git a/android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/GattDisconnectArgumentsKt.kt b/android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/GattDisconnectArgumentsKt.kt new file mode 100644 index 0000000..ccf3590 --- /dev/null +++ b/android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/GattDisconnectArgumentsKt.kt @@ -0,0 +1,62 @@ +//Generated by the protocol buffer compiler. DO NOT EDIT! +// source: message.proto + +package dev.yanshouwang.bluetooth_low_energy; + +@kotlin.jvm.JvmSynthetic +inline fun gattDisconnectArguments(block: dev.yanshouwang.bluetooth_low_energy.GattDisconnectArgumentsKt.Dsl.() -> Unit): dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDisconnectArguments = + dev.yanshouwang.bluetooth_low_energy.GattDisconnectArgumentsKt.Dsl._create(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDisconnectArguments.newBuilder()).apply { block() }._build() +object GattDisconnectArgumentsKt { + @kotlin.OptIn(com.google.protobuf.kotlin.OnlyForUseByGeneratedProtoCode::class) + @com.google.protobuf.kotlin.ProtoDslMarker + class Dsl private constructor( + @kotlin.jvm.JvmField private val _builder: dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDisconnectArguments.Builder + ) { + companion object { + @kotlin.jvm.JvmSynthetic + @kotlin.PublishedApi + internal fun _create(builder: dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDisconnectArguments.Builder): Dsl = Dsl(builder) + } + + @kotlin.jvm.JvmSynthetic + @kotlin.PublishedApi + internal fun _build(): dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDisconnectArguments = _builder.build() + + /** + * string address = 1; + */ + var address: kotlin.String + @JvmName("getAddress") + get() = _builder.getAddress() + @JvmName("setAddress") + set(value) { + _builder.setAddress(value) + } + /** + * string address = 1; + */ + fun clearAddress() { + _builder.clearAddress() + } + + /** + * int32 id = 2; + */ + var id: kotlin.Int + @JvmName("getId") + get() = _builder.getId() + @JvmName("setId") + set(value) { + _builder.setId(value) + } + /** + * int32 id = 2; + */ + fun clearId() { + _builder.clearId() + } + } +} +@kotlin.jvm.JvmSynthetic +inline fun dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDisconnectArguments.copy(block: dev.yanshouwang.bluetooth_low_energy.GattDisconnectArgumentsKt.Dsl.() -> Unit): dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattDisconnectArguments = + dev.yanshouwang.bluetooth_low_energy.GattDisconnectArgumentsKt.Dsl._create(this.toBuilder()).apply { block() }._build() diff --git a/android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/GattServiceKt.kt b/android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/GattServiceKt.kt new file mode 100644 index 0000000..c42f1d0 --- /dev/null +++ b/android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/GattServiceKt.kt @@ -0,0 +1,125 @@ +//Generated by the protocol buffer compiler. DO NOT EDIT! +// source: message.proto + +package dev.yanshouwang.bluetooth_low_energy; + +@kotlin.jvm.JvmSynthetic +inline fun gattService(block: dev.yanshouwang.bluetooth_low_energy.GattServiceKt.Dsl.() -> Unit): dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService = + dev.yanshouwang.bluetooth_low_energy.GattServiceKt.Dsl._create(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService.newBuilder()).apply { block() }._build() +object GattServiceKt { + @kotlin.OptIn(com.google.protobuf.kotlin.OnlyForUseByGeneratedProtoCode::class) + @com.google.protobuf.kotlin.ProtoDslMarker + class Dsl private constructor( + @kotlin.jvm.JvmField private val _builder: dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService.Builder + ) { + companion object { + @kotlin.jvm.JvmSynthetic + @kotlin.PublishedApi + internal fun _create(builder: dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService.Builder): Dsl = Dsl(builder) + } + + @kotlin.jvm.JvmSynthetic + @kotlin.PublishedApi + internal fun _build(): dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService = _builder.build() + + /** + * int32 id = 1; + */ + var id: kotlin.Int + @JvmName("getId") + get() = _builder.getId() + @JvmName("setId") + set(value) { + _builder.setId(value) + } + /** + * int32 id = 1; + */ + fun clearId() { + _builder.clearId() + } + + /** + * string uuid = 2; + */ + var uuid: kotlin.String + @JvmName("getUuid") + get() = _builder.getUuid() + @JvmName("setUuid") + set(value) { + _builder.setUuid(value) + } + /** + * string uuid = 2; + */ + fun clearUuid() { + _builder.clearUuid() + } + + /** + * An uninstantiable, behaviorless type to represent the field in + * generics. + */ + @kotlin.OptIn(com.google.protobuf.kotlin.OnlyForUseByGeneratedProtoCode::class) + class CharacteristicsProxy private constructor() : com.google.protobuf.kotlin.DslProxy() + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattCharacteristic characteristics = 3; + */ + val characteristics: com.google.protobuf.kotlin.DslList + @kotlin.jvm.JvmSynthetic + get() = com.google.protobuf.kotlin.DslList( + _builder.getCharacteristicsList() + ) + /** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattCharacteristic characteristics = 3; + * @param value The characteristics to add. + */ + @kotlin.jvm.JvmSynthetic + @kotlin.jvm.JvmName("addCharacteristics") + fun com.google.protobuf.kotlin.DslList.add(value: dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic) { + _builder.addCharacteristics(value) + }/** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattCharacteristic characteristics = 3; + * @param value The characteristics to add. + */ + @kotlin.jvm.JvmSynthetic + @kotlin.jvm.JvmName("plusAssignCharacteristics") + inline operator fun com.google.protobuf.kotlin.DslList.plusAssign(value: dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic) { + add(value) + }/** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattCharacteristic characteristics = 3; + * @param values The characteristics to add. + */ + @kotlin.jvm.JvmSynthetic + @kotlin.jvm.JvmName("addAllCharacteristics") + fun com.google.protobuf.kotlin.DslList.addAll(values: kotlin.collections.Iterable) { + _builder.addAllCharacteristics(values) + }/** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattCharacteristic characteristics = 3; + * @param values The characteristics to add. + */ + @kotlin.jvm.JvmSynthetic + @kotlin.jvm.JvmName("plusAssignAllCharacteristics") + inline operator fun com.google.protobuf.kotlin.DslList.plusAssign(values: kotlin.collections.Iterable) { + addAll(values) + }/** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattCharacteristic characteristics = 3; + * @param index The index to set the value at. + * @param value The characteristics to set. + */ + @kotlin.jvm.JvmSynthetic + @kotlin.jvm.JvmName("setCharacteristics") + operator fun com.google.protobuf.kotlin.DslList.set(index: kotlin.Int, value: dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristic) { + _builder.setCharacteristics(index, value) + }/** + * repeated .dev.yanshouwang.bluetooth_low_energy.GattCharacteristic characteristics = 3; + */ + @kotlin.jvm.JvmSynthetic + @kotlin.jvm.JvmName("clearCharacteristics") + fun com.google.protobuf.kotlin.DslList.clear() { + _builder.clearCharacteristics() + }} +} +@kotlin.jvm.JvmSynthetic +inline fun dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService.copy(block: dev.yanshouwang.bluetooth_low_energy.GattServiceKt.Dsl.() -> Unit): dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattService = + dev.yanshouwang.bluetooth_low_energy.GattServiceKt.Dsl._create(this.toBuilder()).apply { block() }._build() diff --git a/android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/MessageKt.kt b/android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/MessageKt.kt new file mode 100644 index 0000000..726c05d --- /dev/null +++ b/android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/MessageKt.kt @@ -0,0 +1,172 @@ +//Generated by the protocol buffer compiler. DO NOT EDIT! +// source: message.proto + +package dev.yanshouwang.bluetooth_low_energy; + +@kotlin.jvm.JvmSynthetic +inline fun message(block: dev.yanshouwang.bluetooth_low_energy.MessageKt.Dsl.() -> Unit): dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Message = + dev.yanshouwang.bluetooth_low_energy.MessageKt.Dsl._create(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Message.newBuilder()).apply { block() }._build() +object MessageKt { + @kotlin.OptIn(com.google.protobuf.kotlin.OnlyForUseByGeneratedProtoCode::class) + @com.google.protobuf.kotlin.ProtoDslMarker + class Dsl private constructor( + @kotlin.jvm.JvmField private val _builder: dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Message.Builder + ) { + companion object { + @kotlin.jvm.JvmSynthetic + @kotlin.PublishedApi + internal fun _create(builder: dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Message.Builder): Dsl = Dsl(builder) + } + + @kotlin.jvm.JvmSynthetic + @kotlin.PublishedApi + internal fun _build(): dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Message = _builder.build() + + /** + * .dev.yanshouwang.bluetooth_low_energy.MessageCategory category = 1; + */ + var category: dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.MessageCategory + @JvmName("getCategory") + get() = _builder.getCategory() + @JvmName("setCategory") + set(value) { + _builder.setCategory(value) + } + /** + * .dev.yanshouwang.bluetooth_low_energy.MessageCategory category = 1; + */ + fun clearCategory() { + _builder.clearCategory() + } + + /** + * bool state = 2; + */ + var state: kotlin.Boolean + @JvmName("getState") + get() = _builder.getState() + @JvmName("setState") + set(value) { + _builder.setState(value) + } + /** + * bool state = 2; + */ + fun clearState() { + _builder.clearState() + } + /** + * bool state = 2; + * @return Whether the state field is set. + */ + fun hasState(): kotlin.Boolean { + return _builder.hasState() + } + + /** + * .dev.yanshouwang.bluetooth_low_energy.Discovery discovery = 3; + */ + var discovery: dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Discovery + @JvmName("getDiscovery") + get() = _builder.getDiscovery() + @JvmName("setDiscovery") + set(value) { + _builder.setDiscovery(value) + } + /** + * .dev.yanshouwang.bluetooth_low_energy.Discovery discovery = 3; + */ + fun clearDiscovery() { + _builder.clearDiscovery() + } + /** + * .dev.yanshouwang.bluetooth_low_energy.Discovery discovery = 3; + * @return Whether the discovery field is set. + */ + fun hasDiscovery(): kotlin.Boolean { + return _builder.hasDiscovery() + } + + /** + * bool scanning = 4; + */ + var scanning: kotlin.Boolean + @JvmName("getScanning") + get() = _builder.getScanning() + @JvmName("setScanning") + set(value) { + _builder.setScanning(value) + } + /** + * bool scanning = 4; + */ + fun clearScanning() { + _builder.clearScanning() + } + /** + * bool scanning = 4; + * @return Whether the scanning field is set. + */ + fun hasScanning(): kotlin.Boolean { + return _builder.hasScanning() + } + + /** + * .dev.yanshouwang.bluetooth_low_energy.ConnectionLost connectionLost = 5; + */ + var connectionLost: dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.ConnectionLost + @JvmName("getConnectionLost") + get() = _builder.getConnectionLost() + @JvmName("setConnectionLost") + set(value) { + _builder.setConnectionLost(value) + } + /** + * .dev.yanshouwang.bluetooth_low_energy.ConnectionLost connectionLost = 5; + */ + fun clearConnectionLost() { + _builder.clearConnectionLost() + } + /** + * .dev.yanshouwang.bluetooth_low_energy.ConnectionLost connectionLost = 5; + * @return Whether the connectionLost field is set. + */ + fun hasConnectionLost(): kotlin.Boolean { + return _builder.hasConnectionLost() + } + + /** + * .dev.yanshouwang.bluetooth_low_energy.GattCharacteristicValue characteristicValue = 6; + */ + var characteristicValue: dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.GattCharacteristicValue + @JvmName("getCharacteristicValue") + get() = _builder.getCharacteristicValue() + @JvmName("setCharacteristicValue") + set(value) { + _builder.setCharacteristicValue(value) + } + /** + * .dev.yanshouwang.bluetooth_low_energy.GattCharacteristicValue characteristicValue = 6; + */ + fun clearCharacteristicValue() { + _builder.clearCharacteristicValue() + } + /** + * .dev.yanshouwang.bluetooth_low_energy.GattCharacteristicValue characteristicValue = 6; + * @return Whether the characteristicValue field is set. + */ + fun hasCharacteristicValue(): kotlin.Boolean { + return _builder.hasCharacteristicValue() + } + val valueCase: dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Message.ValueCase + @JvmName("getValueCase") + get() = _builder.getValueCase() + + fun clearValue() { + _builder.clearValue() + } + } +} +@kotlin.jvm.JvmSynthetic +inline fun dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Message.copy(block: dev.yanshouwang.bluetooth_low_energy.MessageKt.Dsl.() -> Unit): dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.Message = + dev.yanshouwang.bluetooth_low_energy.MessageKt.Dsl._create(this.toBuilder()).apply { block() }._build() diff --git a/android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/MessageOuterClassKt.kt b/android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/MessageOuterClassKt.kt new file mode 100644 index 0000000..e69de29 diff --git a/android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/StartDiscoveryArgumentsKt.kt b/android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/StartDiscoveryArgumentsKt.kt new file mode 100644 index 0000000..42e0429 --- /dev/null +++ b/android/src/main/kotlin/dev/yanshouwang/bluetooth_low_energy/StartDiscoveryArgumentsKt.kt @@ -0,0 +1,96 @@ +//Generated by the protocol buffer compiler. DO NOT EDIT! +// source: message.proto + +package dev.yanshouwang.bluetooth_low_energy; + +@kotlin.jvm.JvmSynthetic +inline fun startDiscoveryArguments(block: dev.yanshouwang.bluetooth_low_energy.StartDiscoveryArgumentsKt.Dsl.() -> Unit): dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.StartDiscoveryArguments = + dev.yanshouwang.bluetooth_low_energy.StartDiscoveryArgumentsKt.Dsl._create(dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.StartDiscoveryArguments.newBuilder()).apply { block() }._build() +object StartDiscoveryArgumentsKt { + @kotlin.OptIn(com.google.protobuf.kotlin.OnlyForUseByGeneratedProtoCode::class) + @com.google.protobuf.kotlin.ProtoDslMarker + class Dsl private constructor( + @kotlin.jvm.JvmField private val _builder: dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.StartDiscoveryArguments.Builder + ) { + companion object { + @kotlin.jvm.JvmSynthetic + @kotlin.PublishedApi + internal fun _create(builder: dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.StartDiscoveryArguments.Builder): Dsl = Dsl(builder) + } + + @kotlin.jvm.JvmSynthetic + @kotlin.PublishedApi + internal fun _build(): dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.StartDiscoveryArguments = _builder.build() + + /** + * An uninstantiable, behaviorless type to represent the field in + * generics. + */ + @kotlin.OptIn(com.google.protobuf.kotlin.OnlyForUseByGeneratedProtoCode::class) + class ServicesProxy private constructor() : com.google.protobuf.kotlin.DslProxy() + /** + * repeated string services = 1; + * @return A list containing the services. + */ + val services: com.google.protobuf.kotlin.DslList + @kotlin.OptIn(com.google.protobuf.kotlin.OnlyForUseByGeneratedProtoCode::class) + get() = com.google.protobuf.kotlin.DslList( + _builder.getServicesList() + ) + /** + * repeated string services = 1; + * @param value The services to add. + */ + @kotlin.jvm.JvmSynthetic + @kotlin.jvm.JvmName("addServices") + fun com.google.protobuf.kotlin.DslList.add(value: kotlin.String) { + _builder.addServices(value) + } + /** + * repeated string services = 1; + * @param value The services to add. + */ + @kotlin.jvm.JvmSynthetic + @kotlin.jvm.JvmName("plusAssignServices") + operator fun com.google.protobuf.kotlin.DslList.plusAssign(value: kotlin.String) { + _builder.addServices(value) + } + /** + * repeated string services = 1; + * @param values The services to add. + */ + @kotlin.jvm.JvmSynthetic + @kotlin.jvm.JvmName("addAllServices") + fun com.google.protobuf.kotlin.DslList.addAll(values: kotlin.collections.Iterable) { + _builder.addAllServices(values) + } + /** + * repeated string services = 1; + * @param values The services to add. + */ + @kotlin.jvm.JvmSynthetic + @kotlin.jvm.JvmName("plusAssignAllServices") + operator fun com.google.protobuf.kotlin.DslList.plusAssign(values: kotlin.collections.Iterable) { + _builder.addAllServices(values) + } + /** + * repeated string services = 1; + * @param index The index to set the value at. + * @param value The services to set. + */ + @kotlin.jvm.JvmSynthetic + @kotlin.jvm.JvmName("setServices") + operator fun com.google.protobuf.kotlin.DslList.set(index: kotlin.Int, value: kotlin.String) { + _builder.setServices(index, value) + }/** + * repeated string services = 1; + */ + @kotlin.jvm.JvmSynthetic + @kotlin.jvm.JvmName("clearServices") + fun com.google.protobuf.kotlin.DslList.clear() { + _builder.clearServices() + }} +} +@kotlin.jvm.JvmSynthetic +inline fun dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.StartDiscoveryArguments.copy(block: dev.yanshouwang.bluetooth_low_energy.StartDiscoveryArgumentsKt.Dsl.() -> Unit): dev.yanshouwang.bluetooth_low_energy.MessageOuterClass.StartDiscoveryArguments = + dev.yanshouwang.bluetooth_low_energy.StartDiscoveryArgumentsKt.Dsl._create(this.toBuilder()).apply { block() }._build() diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle index 7991a04..5d60e9d 100644 --- a/example/android/app/build.gradle +++ b/example/android/app/build.gradle @@ -33,9 +33,8 @@ android { } defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "dev.yanshouwang.bluetooth_low_energy_example" - minSdkVersion 16 + minSdkVersion 21 targetSdkVersion 30 versionCode flutterVersionCode.toInteger() versionName flutterVersionName diff --git a/example/android/build.gradle b/example/android/build.gradle index 9b6ed06..24b07e1 100644 --- a/example/android/build.gradle +++ b/example/android/build.gradle @@ -1,8 +1,9 @@ buildscript { - ext.kotlin_version = '1.3.50' + ext.kotlin_version = '1.5.20' repositories { google() - jcenter() + mavenCentral() + maven { url 'https://mirrors.cloud.tencent.com/nexus/repository/maven-public/' } } dependencies { @@ -14,7 +15,8 @@ buildscript { allprojects { repositories { google() - jcenter() + mavenCentral() + maven { url 'https://mirrors.cloud.tencent.com/nexus/repository/maven-public/' } } } diff --git a/example/android/gradle/wrapper/gradle-wrapper.properties b/example/android/gradle/wrapper/gradle-wrapper.properties index bc6a58a..7e7153e 100644 --- a/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/example/android/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip +#distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip +distributionUrl=https\://mirrors.cloud.tencent.com/gradle/gradle-6.7-all.zip diff --git a/example/fonts/IBMPlexMono-Bold.ttf b/example/fonts/IBMPlexMono-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..9f3903bcaf99d97accba236cb34e47853660e95b GIT binary patch literal 112548 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 BmvjIC literal 0 HcmV?d00001 diff --git a/example/fonts/IBMPlexMono-Italic.ttf b/example/fonts/IBMPlexMono-Italic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..0a7b7c1f03e7b09d5cdc82be51d7d569370e4f3e GIT binary patch literal 118560 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 Sy6o=_oK0%SOtROwkDzde*Zr~ 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�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�_^5pSjW4up7&yv zzYN>_~b>v6K&Bfgi;Bz6|So)Qw@+SJbkfz^K zekFSXufnQ-wd@dF&HlhOSm@VchrbS6{W^9BZeWk#_1O3~vSV-)dj>aSm%kCa{1)u; zw_ub1J+}VavGd=7oqsE~`EBebgdK+Wu)pv=Ec^Gn5BU8h_aXOT_YwC|_c8Zz_X+n& z_bK-;?$f+8{$JSz{;a#pea_wOKF^Nb7tMdNi}y=*?!L_4-B;Z`?p}AF`b^C@M*hLHmHfCn=6>pJW%Da+<$pK7HcyMS{0r>mC$W{E5-a(a z*v-FoPrKiUHGSOu&OPgX@1Aqdv!`Ms$Nowkdn>7^A(|C6vft9oe#`7=PBb@~7tJ@{ zj#|xk*webv{E*$WUh|mwvH5PazB&{SE4Oso$-B zkNSD_1Cn%4K$6aDJ$WG_o6c)}`OW~J*ZT5WUta6WYd!hCRB3;;e0kY}XNrL={Emjw zSZSbI8E+_6hAQLbk)~30czmcdFf|#2N=q`u{Kil;P(oaqjV}~XRqP8!;tJm*6cNw2 zl%(3wtu29^5Sd>Z7_JUXjU5;*UlCH~mIjB*)$+vfM2OE;vg5)-)zanV8Ce|~)Aq!% z(5et?mbQiPyjnX$LQ83Kcyw@Poqbx1AkS}{5zEYo#n=O6XELv6W~?wHZ$_Ox-81s? zA=XeTOTRS_)H#Po@S3O7JgL7WSsf5^E|?=PTEg3;BFQSs7jqU8DKR zwY+k>SGm_Ka+fLgDz|%u%js-qck@t{z}1b?u+(_S9}oHCiTvjA(xJ-4WVLeWU^yy} z52Y$eO0|P~`({@TPBFr&Q)8p0smX>)pu4#;F5c5c|sLLJY6Nvam5#4U|^{<<$h`sR_wyo=Ei2L?VCQP`Nrr_v|0l;aE2bS5lLq zrpW|k=Z z)Zx&A!?hMP9*$K=>aeJb<|}KNp>z8>Q&&osMpfwhx>HA_x~3!3qMYhUG^i&X3iMqIM4MlB0afUijD)LHwuTs;i)c49X#JCfx)0wWm z=4~~qTDB!5qG{VS?z-)MEN`y?rgkJcwO6Jr>g;ORp)~E#vAiRUCJE8T_ZDaGoFT3|16j>G6GL@pO-c*e zfTDIzLF*}KClf(mk`(`wGpK@ZKj?jHFLidFcy06yuqPC?^+g6PGLi>P^ zAYT{=zpzGl0Czf zXB2-%@n;l&M)7A9e@5|V6n{qXXB2-%@n;l&R`F*Qe^&8lwf$MepH=)>#h+FDS;e1K z{8`1HRs31SpH=)}O`gtW6@Qoo)44(>NJSyBPV=cr87U|YJYFiY(5*Cg$MHB{+tjJ~ z1*Nr9+Y)BzbS~(~bgo(n-cnVz_|ty|mLt@&Z?PQKQ|8eZt_ z)V>J|@pP`JczJ|X^1~#W&h==0Ma3T`)pV{eu19&;qxoUMpU#B^KXBR)!5|=A>F86x zGwvrX->E$9jQdG>+NrY8sr0Zk6*>!APf&|+N&CB?{hN;Yq3PXPPj{TJ=~#84KEq@l|O0aPde@&i}A($QMw9} zpG|L+e#RGk_);&v)Q2zi;m7dOAK7%5mg^G!5Enf7!dHB)uS@Ie()zlzzAmk=tGiLG z^zo^&>MTsxb_q-#u1KJ1@*soxCxBn@enKz4;`EgfaAkj zVZbpsUKtY{67V>DKymnBz!5?ohroFp0vB*dFyIhC!Qn$*PP3Vyckn~|GhrMN5ADx{ z@k2bcKNH43ap4Po=+{gbPsBwY@kMU&MPBejzi-rii;ZCp$!5B>e9(Ku13xlhd=XbV zf<7Z2_?ZdgC7TIyh#&Zw4|7g7ALJ~X4|5T5r9-zgGC{9oGhvO1uk8=x89YG_GC`iH zKgdBQY%H*n(e~?>M<$ZH*z^*NP?*Ywb!T)`~Bv75Cf{+7`sLB>F#5xJIm zsLCQxBrRs<|A?Yf#rB(h_l}&sl^NG4H zDP`#a%UK{7XE+BR#Pt-hQw=O1BjjIRL&_Q6e9j&lIeAQT3Yeu&)=1ma(%y`;H!E%I zkT&LgYixS@zmtx-nU$Mw93dzEWXobYbIwb3eE-=p>P;#}S>aIlEPUlQGM?Y^RY+a!6w}R!b#eLel?rd>qi7S}7>FCo};wC9s zN&T;bVk7{$;|dw)5E(ODRsSFV?*-4F{tq9x-{svqY3=2lgI~qX zWP^X)+=!$c=dAlU=YY3zs{H}dkHglUcdfYBOYVByq%?WCUWR0Qxn7Q2hlI3pi)}q&m1Sh{uamQY7+Wxljyra!RhtgT%i2tl^W4h{%z(9 z(L*Og!3yqDtbq`N$z8mI6JfRlJ3C3*de<(>H77pZA-cb*oU^OldfNo+x1DeQXL$(*`zz+adpjb zhsO`tEfYz1f|n2%CT6->djTm)x5K`il%$)p`$z}B9E_Dr%9@>9#wThOlXMXr9 zHxlk;6!PLVxoz+OZzz3`+2UdI2sZ#8<>tm?=G&a#e%Cz9jfUsU^L7hUIH&J_aPqnZ z-S|JAxq{K_a!>Pzxm{z;Gv;?@5w}h@^DY50d4i5peY2F)=5*1! zYqbyk+S z+)>;wy8Cgz1pQ>BgU5Xs%Qlyssmj$eo)==d!TYY{3jWp|MS8Ob-_* zxMaF^&!ZL07>0X4qh^WBfG2aG=QZXOZtL7=mU1`eO=cOlZ{B5=%gop&Gvf;G$nZ8W zo&$N@oGP>AD#7OEB+SoHELgmRH}OA(wD?tA9U5?&OWZF?(I+40DVbBa4RtXz`|pzY zHCmpheRd;D`{}zX+`NW0*UdcH`Y^2+=IQK5#NX;36~D(lCVt+1PyAlzZyyhvg8QNP zMOLjo-Y4ZpwETz( zU!#vx6D^yA7GK8rXy<9wTZ<^;m7>6cRkTnx}}TZ?x3zvLqlb0pdk&wj>}n0r4WY zXA%%gfOwI+G_=++rv1v*TPsP~Ih(%zleA;di6UtUE$0!KMWWfl7zw%;`-u^t`V_qN zjJ0RXZ_ROZVl2OwS++)z??J!r_1~JWLHId=A38Knb7(_8Rz&Ta|1Y{7T(jW1A2H3M z2YfF%(cF<}?vq4wFO~K!llJ*lP0)glvDC_%cMi9BwsM!}kIf17tWKE!xcS4HTJ(Ly Oou5-pooIdL%Krv)puDaC literal 0 HcmV?d00001 diff --git a/example/lib/main.dart b/example/lib/main.dart index 9ecb3fa..d6e86bc 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -1,8 +1,6 @@ import 'package:flutter/material.dart'; -import 'dart:async'; -import 'package:flutter/services.dart'; -import 'package:bluetooth_low_energy/bluetooth_low_energy.dart'; +import 'views.dart'; void main() { runApp(MyApp()); @@ -22,14 +20,13 @@ class _MyAppState extends State { @override Widget build(BuildContext context) { return MaterialApp( - home: Scaffold( - appBar: AppBar( - title: const Text('Plugin example app'), - ), - body: Center( - child: Text('Running on: \n'), - ), + theme: ThemeData( + fontFamily: 'IBM Plex Mono', ), + home: HomeView(), + routes: { + 'gatt': (context) => GattView(), + }, ); } } diff --git a/example/lib/views.dart b/example/lib/views.dart new file mode 100644 index 0000000..3609ff9 --- /dev/null +++ b/example/lib/views.dart @@ -0,0 +1,3 @@ +export 'views/home_view.dart'; +export 'views/gatt_view.dart'; +export 'views/flip_view.dart'; diff --git a/example/lib/views/flip_view.dart b/example/lib/views/flip_view.dart new file mode 100644 index 0000000..743bd95 --- /dev/null +++ b/example/lib/views/flip_view.dart @@ -0,0 +1,37 @@ +import 'package:bluetooth_low_energy_example/widgets.dart'; +import 'package:flutter/material.dart'; + +class FlipView extends StatelessWidget { + final front = Container( + height: 300, + width: 300, + color: Colors.orange, + child: Center( + child: Text('正面'), + ), + ); + final back = Container( + height: 300, + width: 300, + color: Colors.blue, + child: Center( + child: Text( + '反面', + style: TextStyle(color: Colors.white), + ), + ), + ); + @override + Widget build(BuildContext context) { + return Scaffold( + body: Container( + child: Center( + child: FlipCard( + front: front, + back: back, + ), + ), + ), + ); + } +} diff --git a/example/lib/views/gatt_view.dart b/example/lib/views/gatt_view.dart new file mode 100644 index 0000000..4d9b79b --- /dev/null +++ b/example/lib/views/gatt_view.dart @@ -0,0 +1,383 @@ +import 'dart:async'; +import 'dart:convert'; + +import 'package:bluetooth_low_energy/bluetooth_low_energy.dart'; +import 'package:convert/convert.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; + +class GattView extends StatefulWidget { + const GattView({Key? key}) : super(key: key); + + @override + _GattViewState createState() => _GattViewState(); +} + +class _GattViewState extends State { + final ValueNotifier state; + GATT? gatt; + StreamSubscription? connectionLostSubscription; + final ValueNotifier service; + final ValueNotifier characteristic; + final TextEditingController writeController; + final ValueNotifier> notifies; + final ValueNotifier> logs; + + late MAC address; + + _GattViewState() + : state = ValueNotifier(ConnectionState.disconnected), + service = ValueNotifier(null), + characteristic = ValueNotifier(null), + writeController = TextEditingController(), + notifies = ValueNotifier({}), + logs = ValueNotifier([]); + + @override + void initState() { + super.initState(); + } + + @override + Widget build(BuildContext context) { + address = ModalRoute.of(context)!.settings.arguments as MAC; + return Scaffold( + appBar: AppBar( + title: Text('$address'), + actions: [ + connectionView, + ], + ), + body: bodyView, + ); + } + + void Function()? disposeListener; + + @override + void dispose() { + super.dispose(); + + if (state.value != ConnectionState.disconnected) { + disposeListener ??= () => disposeGATT(); + state.addListener(disposeListener!); + if (state.value == ConnectionState.connected) { + disconnect(); + } + } else { + state.dispose(); + service.dispose(); + characteristic.dispose(); + notifies.dispose(); + logs.dispose(); + } + } + + void disposeGATT() { + switch (state.value) { + case ConnectionState.connected: + disconnect(); + break; + case ConnectionState.disconnected: + state.removeListener(disposeListener!); + state.dispose(); + service.dispose(); + characteristic.dispose(); + notifies.dispose(); + logs.dispose(); + break; + default: + break; + } + } + + void connect() async { + try { + state.value = ConnectionState.connecting; + gatt = await central.connect(address); + state.value = ConnectionState.connected; + connectionLostSubscription = gatt!.connectionLost.listen( + (errorCode) async { + for (var subscription in notifies.value.values) { + await subscription.cancel(); + } + await connectionLostSubscription!.cancel(); + gatt = null; + connectionLostSubscription = null; + service.value = null; + characteristic.value = null; + notifies.value.clear(); + logs.value.clear(); + state.value = ConnectionState.disconnected; + }, + ); + } on PlatformException { + state.value = ConnectionState.disconnected; + } + } + + void disconnect() async { + try { + state.value = ConnectionState.disconnecting; + await gatt!.disconnect(); + for (var subscription in notifies.value.values) { + await subscription.cancel(); + } + await connectionLostSubscription!.cancel(); + gatt = null; + connectionLostSubscription = null; + service.value = null; + characteristic.value = null; + notifies.value.clear(); + logs.value.clear(); + state.value = ConnectionState.disconnected; + } on PlatformException { + state.value = ConnectionState.connected; + } + } +} + +enum ConnectionState { + disconnected, + connecting, + connected, + disconnecting, +} + +extension on _GattViewState { + Widget get connectionView { + return ValueListenableBuilder( + valueListenable: state, + builder: (context, ConnectionState stateValue, child) { + void Function()? onPressed; + var data = ''; + switch (stateValue) { + case ConnectionState.disconnected: + onPressed = connect; + data = '连接'; + break; + case ConnectionState.connected: + onPressed = disconnect; + data = '断开'; + break; + default: + break; + } + return TextButton( + onPressed: onPressed, + child: Text( + data, + style: TextStyle( + color: Colors.white, + ), + ), + ); + }, + ); + } + + Widget get bodyView { + return ValueListenableBuilder( + valueListenable: state, + builder: (context, ConnectionState stateValue, child) { + switch (stateValue) { + case ConnectionState.disconnected: + return disconnectedView; + case ConnectionState.connecting: + return connectingView; + case ConnectionState.connected: + return connectedView; + case ConnectionState.disconnecting: + return disconnectingView; + default: + throw UnimplementedError(); + } + }, + ); + } + + Widget get disconnectedView { + return Center( + child: Text('未连接'), + ); + } + + Widget get connectingView { + return Center( + child: Text('正在建立连接'), + ); + } + + Widget get connectedView { + return ValueListenableBuilder( + valueListenable: service, + builder: (context, GattService? serviceValue, child) { + final services = gatt!.services.values + .map((service) => DropdownMenuItem( + value: service, + child: Text( + service.uuid.name, + softWrap: false, + ), + )) + .toList(); + final serviceView = DropdownButton( + isExpanded: true, + hint: Text('选择服务'), + value: serviceValue, + items: services, + onChanged: (value) { + service.value = value; + characteristic.value = null; + }, + ); + final views = [serviceView]; + if (serviceValue != null) { + final characteristics = serviceValue.characteristics.values + .map((characteristic) => DropdownMenuItem( + value: characteristic, + child: Text( + characteristic.uuid.name, + softWrap: false, + ), + )) + .toList(); + final characteristicView = ValueListenableBuilder( + valueListenable: characteristic, + builder: (context, GattCharacteristic? characteristicValue, child) { + final canWrite = characteristicValue != null && + (characteristicValue.canWrite || + characteristicValue.canWriteWithoutResponse); + final canRead = + characteristicValue != null && characteristicValue.canRead; + final canNotify = + characteristicValue != null && characteristicValue.canNotify; + final readAndNotifyView = Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + IconButton( + onPressed: canRead + ? () async { + final value = await characteristicValue!.read(); + final time = DateTime.now().display; + final log = '[$time][READ] ${hex.encode(value)}'; + logs.value = [...logs.value, log]; + } + : null, + icon: Icon(Icons.archive), + ), + ValueListenableBuilder( + valueListenable: notifies, + builder: (context, + Map + notifiesValue, + child) { + final notifying = + notifiesValue.containsKey(characteristicValue); + return IconButton( + onPressed: canNotify + ? () async { + if (notifying) { + await characteristicValue!.notify(false); + await notifiesValue + .remove(characteristicValue)! + .cancel(); + } else { + await characteristicValue!.notify(true); + notifiesValue[characteristicValue] = + characteristicValue.valueChanged + .listen((value) { + final time = DateTime.now().display; + final log = + '[$time][NOTIFY] ${hex.encode(value)}'; + logs.value = [...logs.value, log]; + }); + } + notifies.value = {...notifiesValue}; + } + : null, + icon: Icon( + Icons.notifications, + color: notifying ? Colors.blue : null, + ), + ); + }), + ], + ); + final controllerView = TextField( + controller: writeController, + decoration: InputDecoration( + suffixIcon: IconButton( + onPressed: canWrite + ? () { + final value = utf8.encode(writeController.text); + final withoutResponse = + !characteristicValue!.canWrite; + characteristicValue.write(value, + withoutResponse: withoutResponse); + } + : null, + icon: Icon(Icons.send), + ), + ), + ); + return Column( + children: [ + DropdownButton( + isExpanded: true, + hint: Text('选择特征值'), + value: characteristicValue, + items: characteristics, + onChanged: (value) => characteristic.value = value, + ), + readAndNotifyView, + controllerView, + ], + ); + }, + ); + views.add(characteristicView); + } + final loggerView = Expanded( + child: Padding( + padding: const EdgeInsets.symmetric(vertical: 12.0), + child: ValueListenableBuilder( + valueListenable: logs, + builder: (context, List logsValue, child) { + return ListView.builder( + itemCount: logsValue.length, + itemBuilder: (context, i) { + final log = logsValue[i]; + return Text(log); + }, + ); + }), + ), + ); + views.add(loggerView); + return Container( + padding: EdgeInsets.symmetric(horizontal: 12.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: views, + ), + ); + }, + ); + } + + Widget get disconnectingView { + return Center( + child: Text('正在断开连接'), + ); + } +} + +extension on DateTime { + String get display { + final hh = hour.toString().padLeft(2, '0'); + final mm = minute.toString().padLeft(2, '0'); + final ss = second.toString().padLeft(2, '0'); + return '$hh:$mm:$ss'; + } +} diff --git a/example/lib/views/home_view.dart b/example/lib/views/home_view.dart new file mode 100644 index 0000000..06160e5 --- /dev/null +++ b/example/lib/views/home_view.dart @@ -0,0 +1,232 @@ +import 'dart:async'; + +import 'package:bluetooth_low_energy/bluetooth_low_energy.dart'; +import 'package:convert/convert.dart'; +import 'package:flutter/material.dart'; + +class HomeView extends StatefulWidget { + const HomeView({Key? key}) : super(key: key); + + @override + _HomeViewState createState() => _HomeViewState(); +} + +class _HomeViewState extends State with WidgetsBindingObserver { + final ValueNotifier discovering; + final ValueNotifier> discoveries; + late StreamSubscription stateSubscription; + late StreamSubscription discoverySubscription; + + _HomeViewState() + : discovering = ValueNotifier(false), + discoveries = ValueNotifier({}); + + @override + void initState() { + super.initState(); + WidgetsBinding.instance!.addObserver(this); + stateSubscription = central.stateChanged.listen((state) { + if (state) { + startDiscovery(); + } else { + discoveries.value = {}; + discovering.value = false; + } + }); + discoverySubscription = central.discovered.listen( + (discovery) { + discoveries.value[discovery.address] = discovery; + discoveries.value = {...discoveries.value}; + }, + ); + startDiscovery(); + } + + @override + void didChangeAppLifecycleState(AppLifecycleState state) { + super.didChangeAppLifecycleState(state); + } + + @override + void dispose() { + stopDiscovery(); + stateSubscription.cancel(); + discoverySubscription.cancel(); + discoveries.dispose(); + discovering.dispose(); + WidgetsBinding.instance!.removeObserver(this); + print('dispose'); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text('Home'), + ), + body: bodyView, + ); + } + + void startDiscovery() async { + final state = await central.state; + if (!state) return; + await central.startDiscovery(); + discovering.value = true; + } + + void stopDiscovery() async { + final state = await central.state; + if (!state) return; + await central.stopDiscovery(); + discovering.value = false; + } + + void showAdvertisements(Discovery discovery) { + showModalBottomSheet( + context: context, + backgroundColor: Colors.transparent, + elevation: 0.0, + builder: (context) => buildAdvertisementsView(discovery), + ); + } + + void showGattView(Discovery discovery) async { + stopDiscovery(); + await Navigator.of(context).pushNamed( + 'gatt', + arguments: discovery.address, + ); + startDiscovery(); + } +} + +extension on _HomeViewState { + Widget get bodyView { + return FutureBuilder( + future: central.state, + builder: (context, snapshot) => snapshot.hasData + ? StreamBuilder( + stream: central.stateChanged, + initialData: snapshot.data, + builder: (context, snapshot) => + snapshot.data! ? discoveriesView : closedView, + ) + : closedView, + ); + } + + Widget get closedView { + return Center( + child: Text('蓝牙未开启'), + ); + } + + Widget get discoveriesView { + return RefreshIndicator( + onRefresh: () async => discoveries.value = {}, + child: ValueListenableBuilder( + valueListenable: discoveries, + builder: (context, Map discoveries, child) { + return ListView.builder( + padding: EdgeInsets.all(6.0), + itemCount: discoveries.length, + itemBuilder: (context, i) { + final discovery = discoveries.values.elementAt(i); + return Card( + color: Colors.amber, + clipBehavior: Clip.antiAlias, + shape: BeveledRectangleBorder( + borderRadius: BorderRadius.only( + topRight: Radius.circular(12.0), + bottomLeft: Radius.circular(12.0)), + ), + margin: EdgeInsets.all(6.0), + key: Key(discovery.address.name), + child: InkWell( + splashColor: Colors.purple, + onTap: () => showGattView(discovery), + onLongPress: () => showAdvertisements(discovery), + child: Container( + height: 100.0, + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text(discovery.name ?? 'NaN'), + Text(discovery.address.name), + ], + ), + Text(discovery.rssi.toString()), + ], + ), + ), + ), + ); + }, + ); + }, + ), + ); + } + + Widget buildAdvertisementsView(Discovery discovery) { + final widgets = [ + Row( + children: [ + Text('Type'), + Expanded( + child: Center( + child: Text('Value'), + ), + ), + ], + ), + Divider(), + ]; + for (final entry in discovery.advertisements.entries) { + final key = entry.key.toRadixString(16).padLeft(2, '0'); + final value = hex.encode(entry.value); + final widget = Row( + children: [ + Text('0x$key'), + Container(width: 12.0), + Expanded( + child: Text( + '$value', + softWrap: true, + ), + ), + ], + ); + widgets.add(widget); + if (entry.key != discovery.advertisements.entries.last.key) { + final divider = Divider(); + widgets.add(divider); + } + } + return Container( + margin: const EdgeInsets.all(12.0), + child: Material( + elevation: 1.0, + shape: BeveledRectangleBorder( + borderRadius: BorderRadius.only( + topLeft: Radius.circular(12.0), + bottomRight: Radius.circular(12.0), + ), + ), + clipBehavior: Clip.antiAlias, + child: Padding( + padding: const EdgeInsets.all(12.0), + child: Column( + mainAxisSize: MainAxisSize.min, + children: widgets, + ), + ), + ), + ); + } +} diff --git a/example/lib/widgets.dart b/example/lib/widgets.dart new file mode 100644 index 0000000..44a85c5 --- /dev/null +++ b/example/lib/widgets.dart @@ -0,0 +1 @@ +export 'widgets/flip_card.dart'; diff --git a/example/lib/widgets/flip_card.dart b/example/lib/widgets/flip_card.dart new file mode 100644 index 0000000..2f015fe --- /dev/null +++ b/example/lib/widgets/flip_card.dart @@ -0,0 +1,106 @@ +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; + +class FlipCard extends StatefulWidget { + final Widget? front; + final Widget? back; + const FlipCard({ + Key? key, + @required this.front, + @required this.back, + }) : assert(front != null), + assert(back != null), + super(key: key); + + @override + _FlipCardState createState() => _FlipCardState(); +} + +class _FlipCardState extends State with TickerProviderStateMixin { + final ValueNotifier angle; + late AnimationController animationController; + late Animation frontAnimation; + late Animation backAnimation; + + _FlipCardState() : angle = ValueNotifier(0.0); + + bool isFront = true; + bool hasHalf = false; + @override + void initState() { + super.initState(); + animationController = AnimationController( + vsync: this, + duration: Duration(milliseconds: 1000), + ); + animationController.addListener(() { + if (animationController.value > 0.5) { + if (hasHalf == false) { + isFront = !isFront; + } + hasHalf = true; + } + setState(() {}); + }); + animationController.addStatusListener((status) { + if (status == AnimationStatus.completed) { + hasHalf = false; + } + }); + frontAnimation = Tween(begin: 0.0, end: 0.5).animate( + CurvedAnimation( + parent: animationController, + curve: Interval(0.0, 0.5, curve: Curves.easeIn), + ), + ); + backAnimation = Tween(begin: 1.5, end: 2.0).animate(CurvedAnimation( + parent: animationController, + curve: Interval(0.5, 1.0, curve: Curves.easeOut))); + } + + void animate() { + animationController.stop(); + animationController.value = 0; + animationController.forward(); + } + + @override + void dispose() { + super.dispose(); + animationController.dispose(); + } + + @override + Widget build(BuildContext context) { + if (animationController.status == AnimationStatus.forward) { + if (hasHalf == true) { + angle.value = backAnimation.value; + } else { + angle.value = frontAnimation.value; + } + } + return GestureDetector( + onHorizontalDragUpdate: (details) { + print(details.delta); + angle.value += 0.01; + }, + child: Container( + child: ValueListenableBuilder( + valueListenable: angle, + builder: (BuildContext context, double angle, Widget? child) { + return Transform( + transform: Matrix4.identity() + ..setEntry(3, 2, 0.001) + ..rotateY(angle), + alignment: Alignment.center, + child: IndexedStack( + index: isFront ? 0 : 1, + children: [widget.front!, widget.back!], + ), + ); + }, + ), + ), + ); + } +} diff --git a/example/pubspec.lock b/example/pubspec.lock index 2317036..3a35606 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -51,7 +51,7 @@ packages: source: hosted version: "1.15.0" convert: - dependency: transitive + dependency: "direct main" description: name: convert url: "https://pub.flutter-io.cn" @@ -83,6 +83,13 @@ packages: description: flutter source: sdk version: "0.0.0" + flutter_simple_treeview: + dependency: "direct main" + description: + name: flutter_simple_treeview + url: "https://pub.flutter-io.cn" + source: hosted + version: "3.0.0-nullsafety.1" flutter_test: dependency: "direct dev" description: flutter diff --git a/example/pubspec.yaml b/example/pubspec.yaml index 24716a4..6843049 100644 --- a/example/pubspec.yaml +++ b/example/pubspec.yaml @@ -21,6 +21,8 @@ dependencies: # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.2 + convert: ^3.0.0 + flutter_simple_treeview: ^3.0.0-nullsafety.1 dev_dependencies: flutter_test: @@ -68,3 +70,12 @@ flutter: # # For details regarding fonts from package dependencies, # see https://flutter.dev/custom-fonts/#from-packages + + fonts: + - family: IBM Plex Mono + fonts: + - asset: fonts/IBMPlexMono-Regular.ttf + - asset: fonts/IBMPlexMono-Italic.ttf + style: italic + - asset: fonts/IBMPlexMono-Bold.ttf + weight: 700 diff --git a/lib/bluetooth_low_energy.dart b/lib/bluetooth_low_energy.dart index 3a0a291..5d2f5f1 100644 --- a/lib/bluetooth_low_energy.dart +++ b/lib/bluetooth_low_energy.dart @@ -1,7 +1,20 @@ -export 'src/bluetooth_manager.dart'; -export 'src/bluetooth.dart'; -export 'src/discovery.dart'; -export 'src/uuid.dart'; -export 'src/gatt_service.dart'; -export 'src/gatt_characteristic.dart'; -export 'src/gatt_descriptor.dart'; +library bluetooth_low_energy; + +import 'dart:async'; +import 'dart:convert'; + +import 'package:convert/convert.dart'; + +import 'src/message.pb.dart' as proto; +import 'src/util.dart'; + +part 'src/bluetooth.dart'; +part 'src/central.dart'; +part 'src/discovery.dart'; +part 'src/gatt.dart'; +part 'src/gatt_service.dart'; +part 'src/gatt_characteristic.dart'; +part 'src/gatt_descriptor.dart'; +part 'src/mac.dart'; +part 'src/uuid.dart'; +part 'src/extension.dart'; diff --git a/lib/src/bluetooth.dart b/lib/src/bluetooth.dart index 0331ffa..0819e0e 100644 --- a/lib/src/bluetooth.dart +++ b/lib/src/bluetooth.dart @@ -1,9 +1,32 @@ -import 'mac.dart'; +part of bluetooth_low_energy; +/// The abstract base class that manages central and peripheral objects. abstract class Bluetooth { - MAC get address; + /// The availability of the bluetooth. + Future get available; + + /// The current state of the bluetooth. + Future get state; + + /// The bluetooth’s state changed. + Stream get stateChanged; } -abstract class Central extends Bluetooth {} +class _Bluetooth implements Bluetooth { + @override + Future get available => method + .invokeMethod(proto.MessageCategory.BLUETOOTH_AVAILABLE.name) + .then((value) => value!); -abstract class Peripheral extends Bluetooth {} + @override + Future get state => method + .invokeMethod(proto.MessageCategory.BLUETOOTH_STATE.name) + .then((value) => value!); + + @override + Stream get stateChanged => stream + .map((event) => proto.Message.fromBuffer(event)) + .where((message) => + message.category == proto.MessageCategory.BLUETOOTH_STATE) + .map((message) => message.state); +} diff --git a/lib/src/bluetooth_manager.dart b/lib/src/bluetooth_manager.dart deleted file mode 100644 index 4142721..0000000 --- a/lib/src/bluetooth_manager.dart +++ /dev/null @@ -1,133 +0,0 @@ -import 'bluetooth.dart'; -import 'channel.dart'; -import 'discovery.dart'; -import 'exception.dart'; -import 'message.pb.dart' as message; -import 'uuid.dart'; - -/// The abstract base class that manages central and peripheral objects. -abstract class BluetoothManager { - /// The current state of the manager. - Future get state; - - /// The central manager’s state changed. - Stream get stateChanged; - - factory BluetoothManager() => _BluetoothManager(); -} - -class _BluetoothManager implements BluetoothManager { - @override - Future get state => method - .invokeMethod(message.MessageCategory.BLUETOOTH_MANAGER_STATE.name) - .then((i) => message.BluetoothManagerState.valueOf(i!)!.model); - - @override - Stream get stateChanged => stream - .map((i) => message.Message.fromBuffer(i)) - .where( - (i) => i.category == message.MessageCategory.BLUETOOTH_MANAGER_STATE) - .map((i) => i.state.model); -} - -/// An object that scans for, discovers, connects to, and manages peripherals. -abstract class CentralManager extends BluetoothManager { - /// A Boolean value that indicates whether the central is currently scanning. - Stream get scanning; - - /// The central manager discovered a peripheral while scanning for devices. - Stream get discovered; - - /// The central manager disconnected from a peripheral. - Stream get connectionLost; - - /// Establishes a local connection to a peripheral. - Future connect(Peripheral peripheral); - - /// Cancels an active or pending local connection to a peripheral. - Future disconnect(Peripheral peripheral); - - /// Scans for peripherals that are advertising services. - Future startDiscovery({List? services}); - - /// Asks the central manager to stop scanning for peripherals. - Future stopDiscovery(); - - factory CentralManager() => _CentralManager(); -} - -class _CentralManager extends _BluetoothManager implements CentralManager { - @override - Future connect(Peripheral peripheral) { - // TODO: implement connect - throw UnimplementedError(); - } - - @override - // TODO: implement connectionLost - Stream get connectionLost => - throw UnimplementedError(); - - @override - Future disconnect(Peripheral peripheral) { - // TODO: implement disconnect - throw UnimplementedError(); - } - - @override - // TODO: implement discovered - Stream get discovered => throw UnimplementedError(); - - @override - // TODO: implement scanning - Stream get scanning => throw UnimplementedError(); - - @override - Future startDiscovery({List? services}) => method.invokeMethod( - message.MessageCategory.CENTRAL_MANAGER_START_DISCOVERY.name, - services?.map((e) => e.value).toList()); - - @override - Future stopDiscovery() => method.invokeMethod( - message.MessageCategory.CENTRAL_MANAGER_STOP_DISCOVERY.name); -} - -/// The possible states of a bluetooth manager. -enum BluetoothManagerState { - /// The manager’s state is unknown. - unknown, - - /// A state that indicates the connection with the system service was momentarily lost. - resetting, - - /// A state that indicates this device doesn’t support the bluetooth low energy central or client role. - unsupported, - - /// A state that indicates the application isn’t authorized to use the bluetooth low energy role. - unauthorized, - - /// A state that indicates bluetooth is currently powered off. - poweredOff, - - /// A state that indicates bluetooth is currently powered on and available to use. - poweredOn, -} - -/// The current authorization state of a bluetooth manager. -enum BluetoothManagerAuthorization { - /// A state that indicates the user has yet to authorize bluetooth for this app. - notDetermined, - - /// A state that indicates this app isn’t authorized to use Bluetooth. - restricted, - - /// A state that indicates the user explicitly denied bluetooth access for this app. - denied, - - /// A state that indicates the user has authorized bluetooth at any time. - allowedAlways, -} - -extension on message.BluetoothManagerState { - BluetoothManagerState get model => BluetoothManagerState.values[value]; -} diff --git a/lib/src/central.dart b/lib/src/central.dart new file mode 100644 index 0000000..622604c --- /dev/null +++ b/lib/src/central.dart @@ -0,0 +1,52 @@ +part of bluetooth_low_energy; + +final Central central = _Central(); + +/// An object that scans for, discovers, connects to, and manages peripherals. +abstract class Central extends Bluetooth { + /// The central discovered a peripheral while scanning for devices. + Stream get discovered; + + /// Start discover peripherals that are advertising services. + Future startDiscovery({List? services}); + + /// Stop discover peripherals. + Future stopDiscovery(); + + /// Establishes a local connection to a peripheral. + Future connect(MAC address); +} + +class _Central extends _Bluetooth implements Central { + @override + Stream get discovered => stream + .map((event) => proto.Message.fromBuffer(event)) + .where((message) => + message.category == proto.MessageCategory.CENTRAL_DISCOVERED) + .map((message) => message.discovery.conversion); + + @override + Future startDiscovery({List? services}) { + final name = proto.MessageCategory.CENTRAL_START_DISCOVERY.name; + final arguments = proto.StartDiscoveryArguments( + services: services?.map((uuid) => uuid.name), + ).writeToBuffer(); + return method.invokeMethod(name, arguments); + } + + @override + Future stopDiscovery() { + final name = proto.MessageCategory.CENTRAL_STOP_DISCOVERY.name; + return method.invokeMethod(name); + } + + @override + Future connect(MAC address) { + final name = proto.MessageCategory.CENTRAL_CONNECT.name; + final arguments = + proto.ConnectArguments(address: address.name).writeToBuffer(); + return method + .invokeMethod>(name, arguments) + .then((value) => proto.GATT.fromBuffer(value!).convert(address)); + } +} diff --git a/lib/src/discovery.dart b/lib/src/discovery.dart index cd02cd0..2270ffe 100644 --- a/lib/src/discovery.dart +++ b/lib/src/discovery.dart @@ -1,7 +1,24 @@ -import 'bluetooth.dart'; +part of bluetooth_low_energy; +/// TO BE DONE. abstract class Discovery { - Peripheral get peripheral; + /// TO BE DONE. + MAC get address; + + /// TO BE DONE. int get rssi; + + /// TO BE DONE. Map> get advertisements; } + +class _Discovery implements Discovery { + @override + final MAC address; + @override + final int rssi; + @override + final Map> advertisements; + + _Discovery(this.address, this.rssi, this.advertisements); +} diff --git a/lib/src/exception.dart b/lib/src/exception.dart deleted file mode 100644 index d51f0d7..0000000 --- a/lib/src/exception.dart +++ /dev/null @@ -1,9 +0,0 @@ -import 'bluetooth.dart'; - -abstract class Exception { - String get message; -} - -abstract class ConnectionLostException extends Exception { - Peripheral get peripheral; -} diff --git a/lib/src/extension.dart b/lib/src/extension.dart new file mode 100644 index 0000000..d2e9bda --- /dev/null +++ b/lib/src/extension.dart @@ -0,0 +1,149 @@ +part of bluetooth_low_energy; + +extension on String { + String get nameOfMAC { + final upper = toUpperCase(); + final exp = RegExp( + r'^[0-9A-F]{2}(:[0-9A-F]{2}){5}$', + multiLine: true, + caseSensitive: true, + ); + if (exp.hasMatch(upper)) { + return upper; + } + throw ArgumentError.value(this); + } + + List get valueOfMAC { + final from = RegExp(r':'); + final encoded = replaceAll(from, ''); + return hex.decode(encoded); + } + + String get nameOfUUID { + final upper = toUpperCase(); + final exp0 = RegExp( + r'[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$', + multiLine: true, + caseSensitive: true, + ); + if (exp0.hasMatch(upper)) { + return upper; + } + final exp1 = RegExp( + r'^[0-9A-F]{4}$', + multiLine: true, + caseSensitive: true, + ); + if (exp1.hasMatch(upper)) { + return '0000$upper-0000-1000-8000-00805F9B34FB'; + } + throw ArgumentError.value(this); + } + + List get valueOfUUID { + final from = RegExp(r'-'); + final encoded = replaceAll(from, ''); + return hex.decode(encoded); + } + + MAC get conversionOfMAC => MAC(this); + + UUID get conversionOfUUID => UUID(this); +} + +extension on proto.Discovery { + Discovery get conversion { + final convertedAdvertisements = >{}; + var start = 0; + while (start < advertisements.length) { + final length = advertisements[start++]; + if (length == 0) { + break; + } + final end = start + length; + final key = advertisements[start++]; + final value = advertisements.sublist(start, end); + start = end; + convertedAdvertisements[key] = value; + } + return _Discovery(address.conversionOfMAC, rssi, convertedAdvertisements); + } +} + +extension on proto.GATT { + GATT convert(MAC address) { + final convertedServices = { + for (var service in services) + service.uuid.conversionOfUUID: service.convert(address) + }; + return _GATT(address, id, mtu, convertedServices); + } +} + +extension on proto.GattService { + GattService convert(MAC address) { + final convertedUUID = uuid.conversionOfUUID; + final convertedCharacteristics = { + for (var characteristic in characteristics) + characteristic.uuid.conversionOfUUID: + characteristic.convert(address, convertedUUID) + }; + return _GattService( + address, + id, + convertedUUID, + convertedCharacteristics, + ); + } +} + +extension on proto.GattCharacteristic { + GattCharacteristic convert(MAC address, UUID serviceUUID) { + final convertedUUID = uuid.conversionOfUUID; + final convertedDescriptors = { + for (var descriptor in descriptors) + descriptor.uuid.conversionOfUUID: + descriptor.convert(address, serviceUUID, convertedUUID) + }; + return _GattCharacteristic( + address, + serviceUUID, + id, + convertedUUID, + convertedDescriptors, + canRead, + canWrite, + canWriteWithoutResponse, + canNotify, + ); + } +} + +extension on proto.GattDescriptor { + GattDescriptor convert( + MAC address, UUID serviceUUID, UUID characteristicUUID) { + final convertedUUID = uuid.conversionOfUUID; + return _GattDescriptor( + address, + serviceUUID, + characteristicUUID, + id, + convertedUUID, + ); + } +} + +/// TO BE DONE. +extension DiscoveryX on Discovery { + /// TO BE DONE. + String? get name { + if (advertisements.containsKey(0x08)) { + return utf8.decode(advertisements[0x08]!); + } else if (advertisements.containsKey(0x09)) { + return utf8.decode(advertisements[0x09]!); + } else { + return null; + } + } +} diff --git a/lib/src/gatt.dart b/lib/src/gatt.dart new file mode 100644 index 0000000..4619ae2 --- /dev/null +++ b/lib/src/gatt.dart @@ -0,0 +1,44 @@ +part of bluetooth_low_energy; + +/// TO BE DONE. +abstract class GATT { + /// TO BE DONE. + int get mtu; + + /// TO BE DONE. + Stream get connectionLost; + + /// TO BE DONE. + Map get services; + + /// TO BE DONE. + Future disconnect(); +} + +class _GATT implements GATT { + _GATT(this.address, this.id, this.mtu, this.services); + + final MAC address; + final int id; + @override + final int mtu; + @override + final Map services; + + @override + Stream get connectionLost => stream + .map((event) => proto.Message.fromBuffer(event)) + .where((event) => + event.category == proto.MessageCategory.GATT_CONNECTION_LOST && + event.connectionLost.id == id) + .map((event) => event.connectionLost.errorCode); + + @override + Future disconnect() { + final name = proto.MessageCategory.GATT_DISCONNECT.name; + final arguments = + proto.GattDisconnectArguments(address: address.name, id: id) + .writeToBuffer(); + return method.invokeMethod(name, arguments); + } +} diff --git a/lib/src/gatt_characteristic.dart b/lib/src/gatt_characteristic.dart index e69de29..ac644df 100644 --- a/lib/src/gatt_characteristic.dart +++ b/lib/src/gatt_characteristic.dart @@ -0,0 +1,114 @@ +part of bluetooth_low_energy; + +/// TO BE DONE. +abstract class GattCharacteristic { + /// TO BE DONE. + UUID get uuid; + + /// TO BE DONE. + Map get descriptors; + + /// TO BE DONE. + bool get canRead; + + /// TO BE DONE. + bool get canWrite; + + /// TO BE DONE. + bool get canWriteWithoutResponse; + + /// TO BE DONE. + bool get canNotify; + + /// TO BE DONE. + Stream> get valueChanged; + + /// TO BE DONE. + Future> read(); + + /// TO BE DONE. + Future write(List value, {bool withoutResponse = false}); + + /// TO BE DONE. + Future notify(bool state); +} + +class _GattCharacteristic implements GattCharacteristic { + _GattCharacteristic( + this.address, + this.serviceUUID, + this.id, + this.uuid, + this.descriptors, + this.canRead, + this.canWrite, + this.canWriteWithoutResponse, + this.canNotify, + ); + + final MAC address; + final UUID serviceUUID; + final int id; + @override + final UUID uuid; + @override + final Map descriptors; + @override + final bool canRead; + @override + final bool canWrite; + @override + final bool canWriteWithoutResponse; + @override + final bool canNotify; + + @override + Stream> get valueChanged => stream + .map((event) => proto.Message.fromBuffer(event)) + .where((message) => + message.category == + proto.MessageCategory.GATT_CHARACTERISTIC_NOTIFY && + message.characteristicValue.id == id) + .map((message) => message.characteristicValue.value); + + @override + Future> read() { + final name = proto.MessageCategory.GATT_CHARACTERISTIC_READ.name; + final arguments = proto.GattCharacteristicReadArguments( + address: address.name, + serviceUuid: serviceUUID.name, + uuid: uuid.name, + id: id, + ).writeToBuffer(); + return method + .invokeListMethod(name, arguments) + .then((value) => value!); + } + + @override + Future write(List value, {bool withoutResponse = false}) { + final name = proto.MessageCategory.GATT_CHARACTERISTIC_WRITE.name; + final arguments = proto.GattCharacteristicWriteArguments( + address: address.name, + serviceUuid: serviceUUID.name, + uuid: uuid.name, + id: id, + value: value, + withoutResponse: withoutResponse, + ).writeToBuffer(); + return method.invokeMethod(name, arguments); + } + + @override + Future notify(bool state) { + final name = proto.MessageCategory.GATT_CHARACTERISTIC_NOTIFY.name; + final arguments = proto.GattCharacteristicNotifyArguments( + address: address.name, + serviceUuid: serviceUUID.name, + uuid: uuid.name, + id: id, + state: state, + ).writeToBuffer(); + return method.invokeMethod(name, arguments); + } +} diff --git a/lib/src/gatt_descriptor.dart b/lib/src/gatt_descriptor.dart index e69de29..06fdd9d 100644 --- a/lib/src/gatt_descriptor.dart +++ b/lib/src/gatt_descriptor.dart @@ -0,0 +1,59 @@ +part of bluetooth_low_energy; + +/// TO BE DONE. +abstract class GattDescriptor { + /// TO BE DONE. + UUID get uuid; + + /// TO BE DONE. + Future> read(); + + /// TO BE DONE. + Future write(List value); +} + +class _GattDescriptor implements GattDescriptor { + _GattDescriptor( + this.address, + this.serviceUUID, + this.characteristicUUID, + this.id, + this.uuid, + ); + + final MAC address; + final UUID serviceUUID; + final UUID characteristicUUID; + final int id; + @override + final UUID uuid; + + @override + Future> read() { + final name = proto.MessageCategory.GATT_DESCRIPTOR_READ.name; + final arguments = proto.GattDescriptorReadArguments( + address: address.name, + serviceUuid: serviceUUID.name, + characteristicUuid: characteristicUUID.name, + uuid: uuid.name, + id: id, + ).writeToBuffer(); + return method + .invokeListMethod(name, arguments) + .then((value) => value!); + } + + @override + Future write(List value) { + final name = proto.MessageCategory.GATT_DESCRIPTOR_WRITE.name; + final arguments = proto.GattDescriptorWriteArguments( + address: address.name, + serviceUuid: serviceUUID.name, + characteristicUuid: characteristicUUID.name, + uuid: uuid.name, + id: id, + value: value, + ).writeToBuffer(); + return method.invokeMethod(name, arguments); + } +} diff --git a/lib/src/gatt_service.dart b/lib/src/gatt_service.dart index e69de29..f708e0c 100644 --- a/lib/src/gatt_service.dart +++ b/lib/src/gatt_service.dart @@ -0,0 +1,21 @@ +part of bluetooth_low_energy; + +/// TO BE DONE. +abstract class GattService { + /// TO BE DONE. + UUID get uuid; + + /// TO BE DONE. + Map get characteristics; +} + +class _GattService implements GattService { + _GattService(this.address, this.id, this.uuid, this.characteristics); + + final MAC address; + final int id; + @override + final UUID uuid; + @override + final Map characteristics; +} diff --git a/lib/src/mac.dart b/lib/src/mac.dart index 4366e15..33ba2c5 100644 --- a/lib/src/mac.dart +++ b/lib/src/mac.dart @@ -1,3 +1,34 @@ +part of bluetooth_low_energy; + +/// TO BE DONE. abstract class MAC { + /// TO BE DONE. List get value; + + /// TO BE DONE. + String get name; + + /// TO BE DONE. + factory MAC(String str) => _MAC(str); +} + +class _MAC implements MAC { + @override + final String name; + @override + final List value; + @override + final int hashCode; + + _MAC(String str) : this.name(str.nameOfMAC); + + _MAC.name(String name) : this.nameValue(name, name.valueOfMAC); + + _MAC.nameValue(this.name, this.value) : hashCode = equality.hash(value); + + @override + String toString() => name; + + @override + bool operator ==(other) => other is MAC && other.hashCode == hashCode; } diff --git a/lib/src/message.pb.dart b/lib/src/message.pb.dart index 0f9ecdb..b7ddde1 100644 --- a/lib/src/message.pb.dart +++ b/lib/src/message.pb.dart @@ -15,25 +15,41 @@ export 'message.pbenum.dart'; enum Message_Value { state, + discovery, + scanning, + connectionLost, + characteristicValue, notSet } class Message extends $pb.GeneratedMessage { static const $core.Map<$core.int, Message_Value> _Message_ValueByTag = { 2 : Message_Value.state, + 3 : Message_Value.discovery, + 4 : Message_Value.scanning, + 5 : Message_Value.connectionLost, + 6 : Message_Value.characteristicValue, 0 : Message_Value.notSet }; - static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'Message', createEmptyInstance: create) - ..oo(0, [2]) - ..e(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'category', $pb.PbFieldType.OE, defaultOrMaker: MessageCategory.BLUETOOTH_MANAGER_STATE, valueOf: MessageCategory.valueOf, enumValues: MessageCategory.values) - ..e(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'state', $pb.PbFieldType.OE, defaultOrMaker: BluetoothManagerState.UNKNOWN, valueOf: BluetoothManagerState.valueOf, enumValues: BluetoothManagerState.values) + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'Message', package: const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'dev.yanshouwang.bluetooth_low_energy'), createEmptyInstance: create) + ..oo(0, [2, 3, 4, 5, 6]) + ..e(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'category', $pb.PbFieldType.OE, defaultOrMaker: MessageCategory.BLUETOOTH_AVAILABLE, valueOf: MessageCategory.valueOf, enumValues: MessageCategory.values) + ..aOB(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'state') + ..aOM(3, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'discovery', subBuilder: Discovery.create) + ..aOB(4, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'scanning') + ..aOM(5, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'connectionLost', protoName: 'connectionLost', subBuilder: ConnectionLost.create) + ..aOM(6, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'characteristicValue', protoName: 'characteristicValue', subBuilder: GattCharacteristicValue.create) ..hasRequiredFields = false ; Message._() : super(); factory Message({ MessageCategory? category, - BluetoothManagerState? state, + $core.bool? state, + Discovery? discovery, + $core.bool? scanning, + ConnectionLost? connectionLost, + GattCharacteristicValue? characteristicValue, }) { final _result = create(); if (category != null) { @@ -42,6 +58,18 @@ class Message extends $pb.GeneratedMessage { if (state != null) { _result.state = state; } + if (discovery != null) { + _result.discovery = discovery; + } + if (scanning != null) { + _result.scanning = scanning; + } + if (connectionLost != null) { + _result.connectionLost = connectionLost; + } + if (characteristicValue != null) { + _result.characteristicValue = characteristicValue; + } return _result; } factory Message.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); @@ -78,38 +106,121 @@ class Message extends $pb.GeneratedMessage { void clearCategory() => clearField(1); @$pb.TagNumber(2) - BluetoothManagerState get state => $_getN(1); + $core.bool get state => $_getBF(1); @$pb.TagNumber(2) - set state(BluetoothManagerState v) { setField(2, v); } + set state($core.bool v) { $_setBool(1, v); } @$pb.TagNumber(2) $core.bool hasState() => $_has(1); @$pb.TagNumber(2) void clearState() => clearField(2); + + @$pb.TagNumber(3) + Discovery get discovery => $_getN(2); + @$pb.TagNumber(3) + set discovery(Discovery v) { setField(3, v); } + @$pb.TagNumber(3) + $core.bool hasDiscovery() => $_has(2); + @$pb.TagNumber(3) + void clearDiscovery() => clearField(3); + @$pb.TagNumber(3) + Discovery ensureDiscovery() => $_ensure(2); + + @$pb.TagNumber(4) + $core.bool get scanning => $_getBF(3); + @$pb.TagNumber(4) + set scanning($core.bool v) { $_setBool(3, v); } + @$pb.TagNumber(4) + $core.bool hasScanning() => $_has(3); + @$pb.TagNumber(4) + void clearScanning() => clearField(4); + + @$pb.TagNumber(5) + ConnectionLost get connectionLost => $_getN(4); + @$pb.TagNumber(5) + set connectionLost(ConnectionLost v) { setField(5, v); } + @$pb.TagNumber(5) + $core.bool hasConnectionLost() => $_has(4); + @$pb.TagNumber(5) + void clearConnectionLost() => clearField(5); + @$pb.TagNumber(5) + ConnectionLost ensureConnectionLost() => $_ensure(4); + + @$pb.TagNumber(6) + GattCharacteristicValue get characteristicValue => $_getN(5); + @$pb.TagNumber(6) + set characteristicValue(GattCharacteristicValue v) { setField(6, v); } + @$pb.TagNumber(6) + $core.bool hasCharacteristicValue() => $_has(5); + @$pb.TagNumber(6) + void clearCharacteristicValue() => clearField(6); + @$pb.TagNumber(6) + GattCharacteristicValue ensureCharacteristicValue() => $_ensure(5); +} + +class StartDiscoveryArguments extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'StartDiscoveryArguments', package: const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'dev.yanshouwang.bluetooth_low_energy'), createEmptyInstance: create) + ..pPS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'services') + ..hasRequiredFields = false + ; + + StartDiscoveryArguments._() : super(); + factory StartDiscoveryArguments({ + $core.Iterable<$core.String>? services, + }) { + final _result = create(); + if (services != null) { + _result.services.addAll(services); + } + return _result; + } + factory StartDiscoveryArguments.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory StartDiscoveryArguments.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') + StartDiscoveryArguments clone() => StartDiscoveryArguments()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + StartDiscoveryArguments copyWith(void Function(StartDiscoveryArguments) updates) => super.copyWith((message) => updates(message as StartDiscoveryArguments)) as StartDiscoveryArguments; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static StartDiscoveryArguments create() => StartDiscoveryArguments._(); + StartDiscoveryArguments createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static StartDiscoveryArguments getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static StartDiscoveryArguments? _defaultInstance; + + @$pb.TagNumber(1) + $core.List<$core.String> get services => $_getList(0); } class Discovery extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'Discovery', createEmptyInstance: create) - ..aOM(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'peripheral', subBuilder: Peripheral.create) + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'Discovery', package: const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'dev.yanshouwang.bluetooth_low_energy'), createEmptyInstance: create) + ..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'address') ..a<$core.int>(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'rssi', $pb.PbFieldType.OS3) - ..m<$core.int, $core.List<$core.int>>(3, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'advertisements', entryClassName: 'Discovery.AdvertisementsEntry', keyFieldType: $pb.PbFieldType.OU3, valueFieldType: $pb.PbFieldType.OY) + ..a<$core.List<$core.int>>(3, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'advertisements', $pb.PbFieldType.OY) ..hasRequiredFields = false ; Discovery._() : super(); factory Discovery({ - Peripheral? peripheral, + $core.String? address, $core.int? rssi, - $core.Map<$core.int, $core.List<$core.int>>? advertisements, + $core.List<$core.int>? advertisements, }) { final _result = create(); - if (peripheral != null) { - _result.peripheral = peripheral; + if (address != null) { + _result.address = address; } if (rssi != null) { _result.rssi = rssi; } if (advertisements != null) { - _result.advertisements.addAll(advertisements); + _result.advertisements = advertisements; } return _result; } @@ -135,15 +246,13 @@ class Discovery extends $pb.GeneratedMessage { static Discovery? _defaultInstance; @$pb.TagNumber(1) - Peripheral get peripheral => $_getN(0); + $core.String get address => $_getSZ(0); @$pb.TagNumber(1) - set peripheral(Peripheral v) { setField(1, v); } + set address($core.String v) { $_setString(0, v); } @$pb.TagNumber(1) - $core.bool hasPeripheral() => $_has(0); + $core.bool hasAddress() => $_has(0); @$pb.TagNumber(1) - void clearPeripheral() => clearField(1); - @$pb.TagNumber(1) - Peripheral ensurePeripheral() => $_ensure(0); + void clearAddress() => clearField(1); @$pb.TagNumber(2) $core.int get rssi => $_getIZ(1); @@ -155,18 +264,24 @@ class Discovery extends $pb.GeneratedMessage { void clearRssi() => clearField(2); @$pb.TagNumber(3) - $core.Map<$core.int, $core.List<$core.int>> get advertisements => $_getMap(2); + $core.List<$core.int> get advertisements => $_getN(2); + @$pb.TagNumber(3) + set advertisements($core.List<$core.int> v) { $_setBytes(2, v); } + @$pb.TagNumber(3) + $core.bool hasAdvertisements() => $_has(2); + @$pb.TagNumber(3) + void clearAdvertisements() => clearField(3); } -class Peripheral extends $pb.GeneratedMessage { - static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'Peripheral', createEmptyInstance: create) - ..a<$core.List<$core.int>>(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'address', $pb.PbFieldType.OY) +class ConnectArguments extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'ConnectArguments', package: const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'dev.yanshouwang.bluetooth_low_energy'), createEmptyInstance: create) + ..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'address') ..hasRequiredFields = false ; - Peripheral._() : super(); - factory Peripheral({ - $core.List<$core.int>? address, + ConnectArguments._() : super(); + factory ConnectArguments({ + $core.String? address, }) { final _result = create(); if (address != null) { @@ -174,34 +289,1070 @@ class Peripheral extends $pb.GeneratedMessage { } return _result; } - factory Peripheral.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); - factory Peripheral.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + factory ConnectArguments.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory ConnectArguments.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') - Peripheral clone() => Peripheral()..mergeFromMessage(this); + ConnectArguments clone() => ConnectArguments()..mergeFromMessage(this); @$core.Deprecated( 'Using this can add significant overhead to your binary. ' 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' 'Will be removed in next major version') - Peripheral copyWith(void Function(Peripheral) updates) => super.copyWith((message) => updates(message as Peripheral)) as Peripheral; // ignore: deprecated_member_use + ConnectArguments copyWith(void Function(ConnectArguments) updates) => super.copyWith((message) => updates(message as ConnectArguments)) as ConnectArguments; // ignore: deprecated_member_use $pb.BuilderInfo get info_ => _i; @$core.pragma('dart2js:noInline') - static Peripheral create() => Peripheral._(); - Peripheral createEmptyInstance() => create(); - static $pb.PbList createRepeated() => $pb.PbList(); + static ConnectArguments create() => ConnectArguments._(); + ConnectArguments createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); @$core.pragma('dart2js:noInline') - static Peripheral getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); - static Peripheral? _defaultInstance; + static ConnectArguments getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static ConnectArguments? _defaultInstance; @$pb.TagNumber(1) - $core.List<$core.int> get address => $_getN(0); + $core.String get address => $_getSZ(0); @$pb.TagNumber(1) - set address($core.List<$core.int> v) { $_setBytes(0, v); } + set address($core.String v) { $_setString(0, v); } @$pb.TagNumber(1) $core.bool hasAddress() => $_has(0); @$pb.TagNumber(1) void clearAddress() => clearField(1); } +class GATT extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'GATT', package: const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'dev.yanshouwang.bluetooth_low_energy'), createEmptyInstance: create) + ..a<$core.int>(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'id', $pb.PbFieldType.O3) + ..a<$core.int>(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'mtu', $pb.PbFieldType.O3) + ..pc(3, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'services', $pb.PbFieldType.PM, subBuilder: GattService.create) + ..hasRequiredFields = false + ; + + GATT._() : super(); + factory GATT({ + $core.int? id, + $core.int? mtu, + $core.Iterable? services, + }) { + final _result = create(); + if (id != null) { + _result.id = id; + } + if (mtu != null) { + _result.mtu = mtu; + } + if (services != null) { + _result.services.addAll(services); + } + return _result; + } + factory GATT.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory GATT.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') + GATT clone() => GATT()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + GATT copyWith(void Function(GATT) updates) => super.copyWith((message) => updates(message as GATT)) as GATT; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static GATT create() => GATT._(); + GATT createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static GATT getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static GATT? _defaultInstance; + + @$pb.TagNumber(1) + $core.int get id => $_getIZ(0); + @$pb.TagNumber(1) + set id($core.int v) { $_setSignedInt32(0, v); } + @$pb.TagNumber(1) + $core.bool hasId() => $_has(0); + @$pb.TagNumber(1) + void clearId() => clearField(1); + + @$pb.TagNumber(2) + $core.int get mtu => $_getIZ(1); + @$pb.TagNumber(2) + set mtu($core.int v) { $_setSignedInt32(1, v); } + @$pb.TagNumber(2) + $core.bool hasMtu() => $_has(1); + @$pb.TagNumber(2) + void clearMtu() => clearField(2); + + @$pb.TagNumber(3) + $core.List get services => $_getList(2); +} + +class GattDisconnectArguments extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'GattDisconnectArguments', package: const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'dev.yanshouwang.bluetooth_low_energy'), createEmptyInstance: create) + ..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'address') + ..a<$core.int>(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'id', $pb.PbFieldType.O3) + ..hasRequiredFields = false + ; + + GattDisconnectArguments._() : super(); + factory GattDisconnectArguments({ + $core.String? address, + $core.int? id, + }) { + final _result = create(); + if (address != null) { + _result.address = address; + } + if (id != null) { + _result.id = id; + } + return _result; + } + factory GattDisconnectArguments.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory GattDisconnectArguments.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') + GattDisconnectArguments clone() => GattDisconnectArguments()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + GattDisconnectArguments copyWith(void Function(GattDisconnectArguments) updates) => super.copyWith((message) => updates(message as GattDisconnectArguments)) as GattDisconnectArguments; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static GattDisconnectArguments create() => GattDisconnectArguments._(); + GattDisconnectArguments createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static GattDisconnectArguments getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static GattDisconnectArguments? _defaultInstance; + + @$pb.TagNumber(1) + $core.String get address => $_getSZ(0); + @$pb.TagNumber(1) + set address($core.String v) { $_setString(0, v); } + @$pb.TagNumber(1) + $core.bool hasAddress() => $_has(0); + @$pb.TagNumber(1) + void clearAddress() => clearField(1); + + @$pb.TagNumber(2) + $core.int get id => $_getIZ(1); + @$pb.TagNumber(2) + set id($core.int v) { $_setSignedInt32(1, v); } + @$pb.TagNumber(2) + $core.bool hasId() => $_has(1); + @$pb.TagNumber(2) + void clearId() => clearField(2); +} + +class GattService extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'GattService', package: const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'dev.yanshouwang.bluetooth_low_energy'), createEmptyInstance: create) + ..a<$core.int>(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'id', $pb.PbFieldType.O3) + ..aOS(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'uuid') + ..pc(3, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'characteristics', $pb.PbFieldType.PM, subBuilder: GattCharacteristic.create) + ..hasRequiredFields = false + ; + + GattService._() : super(); + factory GattService({ + $core.int? id, + $core.String? uuid, + $core.Iterable? characteristics, + }) { + final _result = create(); + if (id != null) { + _result.id = id; + } + if (uuid != null) { + _result.uuid = uuid; + } + if (characteristics != null) { + _result.characteristics.addAll(characteristics); + } + return _result; + } + factory GattService.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory GattService.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') + GattService clone() => GattService()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + GattService copyWith(void Function(GattService) updates) => super.copyWith((message) => updates(message as GattService)) as GattService; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static GattService create() => GattService._(); + GattService createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static GattService getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static GattService? _defaultInstance; + + @$pb.TagNumber(1) + $core.int get id => $_getIZ(0); + @$pb.TagNumber(1) + set id($core.int v) { $_setSignedInt32(0, v); } + @$pb.TagNumber(1) + $core.bool hasId() => $_has(0); + @$pb.TagNumber(1) + void clearId() => clearField(1); + + @$pb.TagNumber(2) + $core.String get uuid => $_getSZ(1); + @$pb.TagNumber(2) + set uuid($core.String v) { $_setString(1, v); } + @$pb.TagNumber(2) + $core.bool hasUuid() => $_has(1); + @$pb.TagNumber(2) + void clearUuid() => clearField(2); + + @$pb.TagNumber(3) + $core.List get characteristics => $_getList(2); +} + +class GattCharacteristic extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'GattCharacteristic', package: const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'dev.yanshouwang.bluetooth_low_energy'), createEmptyInstance: create) + ..a<$core.int>(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'id', $pb.PbFieldType.O3) + ..aOS(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'uuid') + ..pc(3, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'descriptors', $pb.PbFieldType.PM, subBuilder: GattDescriptor.create) + ..aOB(4, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'canRead', protoName: 'canRead') + ..aOB(5, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'canWrite', protoName: 'canWrite') + ..aOB(6, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'canWriteWithoutResponse', protoName: 'canWriteWithoutResponse') + ..aOB(7, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'canNotify', protoName: 'canNotify') + ..hasRequiredFields = false + ; + + GattCharacteristic._() : super(); + factory GattCharacteristic({ + $core.int? id, + $core.String? uuid, + $core.Iterable? descriptors, + $core.bool? canRead, + $core.bool? canWrite, + $core.bool? canWriteWithoutResponse, + $core.bool? canNotify, + }) { + final _result = create(); + if (id != null) { + _result.id = id; + } + if (uuid != null) { + _result.uuid = uuid; + } + if (descriptors != null) { + _result.descriptors.addAll(descriptors); + } + if (canRead != null) { + _result.canRead = canRead; + } + if (canWrite != null) { + _result.canWrite = canWrite; + } + if (canWriteWithoutResponse != null) { + _result.canWriteWithoutResponse = canWriteWithoutResponse; + } + if (canNotify != null) { + _result.canNotify = canNotify; + } + return _result; + } + factory GattCharacteristic.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory GattCharacteristic.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') + GattCharacteristic clone() => GattCharacteristic()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + GattCharacteristic copyWith(void Function(GattCharacteristic) updates) => super.copyWith((message) => updates(message as GattCharacteristic)) as GattCharacteristic; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static GattCharacteristic create() => GattCharacteristic._(); + GattCharacteristic createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static GattCharacteristic getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static GattCharacteristic? _defaultInstance; + + @$pb.TagNumber(1) + $core.int get id => $_getIZ(0); + @$pb.TagNumber(1) + set id($core.int v) { $_setSignedInt32(0, v); } + @$pb.TagNumber(1) + $core.bool hasId() => $_has(0); + @$pb.TagNumber(1) + void clearId() => clearField(1); + + @$pb.TagNumber(2) + $core.String get uuid => $_getSZ(1); + @$pb.TagNumber(2) + set uuid($core.String v) { $_setString(1, v); } + @$pb.TagNumber(2) + $core.bool hasUuid() => $_has(1); + @$pb.TagNumber(2) + void clearUuid() => clearField(2); + + @$pb.TagNumber(3) + $core.List get descriptors => $_getList(2); + + @$pb.TagNumber(4) + $core.bool get canRead => $_getBF(3); + @$pb.TagNumber(4) + set canRead($core.bool v) { $_setBool(3, v); } + @$pb.TagNumber(4) + $core.bool hasCanRead() => $_has(3); + @$pb.TagNumber(4) + void clearCanRead() => clearField(4); + + @$pb.TagNumber(5) + $core.bool get canWrite => $_getBF(4); + @$pb.TagNumber(5) + set canWrite($core.bool v) { $_setBool(4, v); } + @$pb.TagNumber(5) + $core.bool hasCanWrite() => $_has(4); + @$pb.TagNumber(5) + void clearCanWrite() => clearField(5); + + @$pb.TagNumber(6) + $core.bool get canWriteWithoutResponse => $_getBF(5); + @$pb.TagNumber(6) + set canWriteWithoutResponse($core.bool v) { $_setBool(5, v); } + @$pb.TagNumber(6) + $core.bool hasCanWriteWithoutResponse() => $_has(5); + @$pb.TagNumber(6) + void clearCanWriteWithoutResponse() => clearField(6); + + @$pb.TagNumber(7) + $core.bool get canNotify => $_getBF(6); + @$pb.TagNumber(7) + set canNotify($core.bool v) { $_setBool(6, v); } + @$pb.TagNumber(7) + $core.bool hasCanNotify() => $_has(6); + @$pb.TagNumber(7) + void clearCanNotify() => clearField(7); +} + +class GattDescriptor extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'GattDescriptor', package: const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'dev.yanshouwang.bluetooth_low_energy'), createEmptyInstance: create) + ..a<$core.int>(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'id', $pb.PbFieldType.O3) + ..aOS(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'uuid') + ..hasRequiredFields = false + ; + + GattDescriptor._() : super(); + factory GattDescriptor({ + $core.int? id, + $core.String? uuid, + }) { + final _result = create(); + if (id != null) { + _result.id = id; + } + if (uuid != null) { + _result.uuid = uuid; + } + return _result; + } + factory GattDescriptor.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory GattDescriptor.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') + GattDescriptor clone() => GattDescriptor()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + GattDescriptor copyWith(void Function(GattDescriptor) updates) => super.copyWith((message) => updates(message as GattDescriptor)) as GattDescriptor; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static GattDescriptor create() => GattDescriptor._(); + GattDescriptor createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static GattDescriptor getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static GattDescriptor? _defaultInstance; + + @$pb.TagNumber(1) + $core.int get id => $_getIZ(0); + @$pb.TagNumber(1) + set id($core.int v) { $_setSignedInt32(0, v); } + @$pb.TagNumber(1) + $core.bool hasId() => $_has(0); + @$pb.TagNumber(1) + void clearId() => clearField(1); + + @$pb.TagNumber(2) + $core.String get uuid => $_getSZ(1); + @$pb.TagNumber(2) + set uuid($core.String v) { $_setString(1, v); } + @$pb.TagNumber(2) + $core.bool hasUuid() => $_has(1); + @$pb.TagNumber(2) + void clearUuid() => clearField(2); +} + +class ConnectionLost extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'ConnectionLost', package: const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'dev.yanshouwang.bluetooth_low_energy'), createEmptyInstance: create) + ..a<$core.int>(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'id', $pb.PbFieldType.O3) + ..a<$core.int>(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'errorCode', $pb.PbFieldType.O3) + ..hasRequiredFields = false + ; + + ConnectionLost._() : super(); + factory ConnectionLost({ + $core.int? id, + $core.int? errorCode, + }) { + final _result = create(); + if (id != null) { + _result.id = id; + } + if (errorCode != null) { + _result.errorCode = errorCode; + } + return _result; + } + factory ConnectionLost.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory ConnectionLost.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') + ConnectionLost clone() => ConnectionLost()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + ConnectionLost copyWith(void Function(ConnectionLost) updates) => super.copyWith((message) => updates(message as ConnectionLost)) as ConnectionLost; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static ConnectionLost create() => ConnectionLost._(); + ConnectionLost createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static ConnectionLost getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static ConnectionLost? _defaultInstance; + + @$pb.TagNumber(1) + $core.int get id => $_getIZ(0); + @$pb.TagNumber(1) + set id($core.int v) { $_setSignedInt32(0, v); } + @$pb.TagNumber(1) + $core.bool hasId() => $_has(0); + @$pb.TagNumber(1) + void clearId() => clearField(1); + + @$pb.TagNumber(2) + $core.int get errorCode => $_getIZ(1); + @$pb.TagNumber(2) + set errorCode($core.int v) { $_setSignedInt32(1, v); } + @$pb.TagNumber(2) + $core.bool hasErrorCode() => $_has(1); + @$pb.TagNumber(2) + void clearErrorCode() => clearField(2); +} + +class GattCharacteristicReadArguments extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'GattCharacteristicReadArguments', package: const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'dev.yanshouwang.bluetooth_low_energy'), createEmptyInstance: create) + ..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'address') + ..aOS(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'serviceUuid') + ..aOS(3, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'uuid') + ..a<$core.int>(4, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'id', $pb.PbFieldType.O3) + ..hasRequiredFields = false + ; + + GattCharacteristicReadArguments._() : super(); + factory GattCharacteristicReadArguments({ + $core.String? address, + $core.String? serviceUuid, + $core.String? uuid, + $core.int? id, + }) { + final _result = create(); + if (address != null) { + _result.address = address; + } + if (serviceUuid != null) { + _result.serviceUuid = serviceUuid; + } + if (uuid != null) { + _result.uuid = uuid; + } + if (id != null) { + _result.id = id; + } + return _result; + } + factory GattCharacteristicReadArguments.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory GattCharacteristicReadArguments.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') + GattCharacteristicReadArguments clone() => GattCharacteristicReadArguments()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + GattCharacteristicReadArguments copyWith(void Function(GattCharacteristicReadArguments) updates) => super.copyWith((message) => updates(message as GattCharacteristicReadArguments)) as GattCharacteristicReadArguments; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static GattCharacteristicReadArguments create() => GattCharacteristicReadArguments._(); + GattCharacteristicReadArguments createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static GattCharacteristicReadArguments getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static GattCharacteristicReadArguments? _defaultInstance; + + @$pb.TagNumber(1) + $core.String get address => $_getSZ(0); + @$pb.TagNumber(1) + set address($core.String v) { $_setString(0, v); } + @$pb.TagNumber(1) + $core.bool hasAddress() => $_has(0); + @$pb.TagNumber(1) + void clearAddress() => clearField(1); + + @$pb.TagNumber(2) + $core.String get serviceUuid => $_getSZ(1); + @$pb.TagNumber(2) + set serviceUuid($core.String v) { $_setString(1, v); } + @$pb.TagNumber(2) + $core.bool hasServiceUuid() => $_has(1); + @$pb.TagNumber(2) + void clearServiceUuid() => clearField(2); + + @$pb.TagNumber(3) + $core.String get uuid => $_getSZ(2); + @$pb.TagNumber(3) + set uuid($core.String v) { $_setString(2, v); } + @$pb.TagNumber(3) + $core.bool hasUuid() => $_has(2); + @$pb.TagNumber(3) + void clearUuid() => clearField(3); + + @$pb.TagNumber(4) + $core.int get id => $_getIZ(3); + @$pb.TagNumber(4) + set id($core.int v) { $_setSignedInt32(3, v); } + @$pb.TagNumber(4) + $core.bool hasId() => $_has(3); + @$pb.TagNumber(4) + void clearId() => clearField(4); +} + +class GattCharacteristicWriteArguments extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'GattCharacteristicWriteArguments', package: const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'dev.yanshouwang.bluetooth_low_energy'), createEmptyInstance: create) + ..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'address') + ..aOS(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'serviceUuid') + ..aOS(3, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'uuid') + ..a<$core.int>(4, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'id', $pb.PbFieldType.O3) + ..a<$core.List<$core.int>>(5, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'value', $pb.PbFieldType.OY) + ..aOB(6, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'withoutResponse', protoName: 'withoutResponse') + ..hasRequiredFields = false + ; + + GattCharacteristicWriteArguments._() : super(); + factory GattCharacteristicWriteArguments({ + $core.String? address, + $core.String? serviceUuid, + $core.String? uuid, + $core.int? id, + $core.List<$core.int>? value, + $core.bool? withoutResponse, + }) { + final _result = create(); + if (address != null) { + _result.address = address; + } + if (serviceUuid != null) { + _result.serviceUuid = serviceUuid; + } + if (uuid != null) { + _result.uuid = uuid; + } + if (id != null) { + _result.id = id; + } + if (value != null) { + _result.value = value; + } + if (withoutResponse != null) { + _result.withoutResponse = withoutResponse; + } + return _result; + } + factory GattCharacteristicWriteArguments.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory GattCharacteristicWriteArguments.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') + GattCharacteristicWriteArguments clone() => GattCharacteristicWriteArguments()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + GattCharacteristicWriteArguments copyWith(void Function(GattCharacteristicWriteArguments) updates) => super.copyWith((message) => updates(message as GattCharacteristicWriteArguments)) as GattCharacteristicWriteArguments; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static GattCharacteristicWriteArguments create() => GattCharacteristicWriteArguments._(); + GattCharacteristicWriteArguments createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static GattCharacteristicWriteArguments getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static GattCharacteristicWriteArguments? _defaultInstance; + + @$pb.TagNumber(1) + $core.String get address => $_getSZ(0); + @$pb.TagNumber(1) + set address($core.String v) { $_setString(0, v); } + @$pb.TagNumber(1) + $core.bool hasAddress() => $_has(0); + @$pb.TagNumber(1) + void clearAddress() => clearField(1); + + @$pb.TagNumber(2) + $core.String get serviceUuid => $_getSZ(1); + @$pb.TagNumber(2) + set serviceUuid($core.String v) { $_setString(1, v); } + @$pb.TagNumber(2) + $core.bool hasServiceUuid() => $_has(1); + @$pb.TagNumber(2) + void clearServiceUuid() => clearField(2); + + @$pb.TagNumber(3) + $core.String get uuid => $_getSZ(2); + @$pb.TagNumber(3) + set uuid($core.String v) { $_setString(2, v); } + @$pb.TagNumber(3) + $core.bool hasUuid() => $_has(2); + @$pb.TagNumber(3) + void clearUuid() => clearField(3); + + @$pb.TagNumber(4) + $core.int get id => $_getIZ(3); + @$pb.TagNumber(4) + set id($core.int v) { $_setSignedInt32(3, v); } + @$pb.TagNumber(4) + $core.bool hasId() => $_has(3); + @$pb.TagNumber(4) + void clearId() => clearField(4); + + @$pb.TagNumber(5) + $core.List<$core.int> get value => $_getN(4); + @$pb.TagNumber(5) + set value($core.List<$core.int> v) { $_setBytes(4, v); } + @$pb.TagNumber(5) + $core.bool hasValue() => $_has(4); + @$pb.TagNumber(5) + void clearValue() => clearField(5); + + @$pb.TagNumber(6) + $core.bool get withoutResponse => $_getBF(5); + @$pb.TagNumber(6) + set withoutResponse($core.bool v) { $_setBool(5, v); } + @$pb.TagNumber(6) + $core.bool hasWithoutResponse() => $_has(5); + @$pb.TagNumber(6) + void clearWithoutResponse() => clearField(6); +} + +class GattCharacteristicNotifyArguments extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'GattCharacteristicNotifyArguments', package: const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'dev.yanshouwang.bluetooth_low_energy'), createEmptyInstance: create) + ..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'address') + ..aOS(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'serviceUuid') + ..aOS(3, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'uuid') + ..a<$core.int>(4, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'id', $pb.PbFieldType.O3) + ..aOB(5, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'state') + ..hasRequiredFields = false + ; + + GattCharacteristicNotifyArguments._() : super(); + factory GattCharacteristicNotifyArguments({ + $core.String? address, + $core.String? serviceUuid, + $core.String? uuid, + $core.int? id, + $core.bool? state, + }) { + final _result = create(); + if (address != null) { + _result.address = address; + } + if (serviceUuid != null) { + _result.serviceUuid = serviceUuid; + } + if (uuid != null) { + _result.uuid = uuid; + } + if (id != null) { + _result.id = id; + } + if (state != null) { + _result.state = state; + } + return _result; + } + factory GattCharacteristicNotifyArguments.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory GattCharacteristicNotifyArguments.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') + GattCharacteristicNotifyArguments clone() => GattCharacteristicNotifyArguments()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + GattCharacteristicNotifyArguments copyWith(void Function(GattCharacteristicNotifyArguments) updates) => super.copyWith((message) => updates(message as GattCharacteristicNotifyArguments)) as GattCharacteristicNotifyArguments; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static GattCharacteristicNotifyArguments create() => GattCharacteristicNotifyArguments._(); + GattCharacteristicNotifyArguments createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static GattCharacteristicNotifyArguments getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static GattCharacteristicNotifyArguments? _defaultInstance; + + @$pb.TagNumber(1) + $core.String get address => $_getSZ(0); + @$pb.TagNumber(1) + set address($core.String v) { $_setString(0, v); } + @$pb.TagNumber(1) + $core.bool hasAddress() => $_has(0); + @$pb.TagNumber(1) + void clearAddress() => clearField(1); + + @$pb.TagNumber(2) + $core.String get serviceUuid => $_getSZ(1); + @$pb.TagNumber(2) + set serviceUuid($core.String v) { $_setString(1, v); } + @$pb.TagNumber(2) + $core.bool hasServiceUuid() => $_has(1); + @$pb.TagNumber(2) + void clearServiceUuid() => clearField(2); + + @$pb.TagNumber(3) + $core.String get uuid => $_getSZ(2); + @$pb.TagNumber(3) + set uuid($core.String v) { $_setString(2, v); } + @$pb.TagNumber(3) + $core.bool hasUuid() => $_has(2); + @$pb.TagNumber(3) + void clearUuid() => clearField(3); + + @$pb.TagNumber(4) + $core.int get id => $_getIZ(3); + @$pb.TagNumber(4) + set id($core.int v) { $_setSignedInt32(3, v); } + @$pb.TagNumber(4) + $core.bool hasId() => $_has(3); + @$pb.TagNumber(4) + void clearId() => clearField(4); + + @$pb.TagNumber(5) + $core.bool get state => $_getBF(4); + @$pb.TagNumber(5) + set state($core.bool v) { $_setBool(4, v); } + @$pb.TagNumber(5) + $core.bool hasState() => $_has(4); + @$pb.TagNumber(5) + void clearState() => clearField(5); +} + +class GattCharacteristicValue extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'GattCharacteristicValue', package: const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'dev.yanshouwang.bluetooth_low_energy'), createEmptyInstance: create) + ..a<$core.int>(3, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'id', $pb.PbFieldType.O3) + ..a<$core.List<$core.int>>(4, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'value', $pb.PbFieldType.OY) + ..hasRequiredFields = false + ; + + GattCharacteristicValue._() : super(); + factory GattCharacteristicValue({ + $core.int? id, + $core.List<$core.int>? value, + }) { + final _result = create(); + if (id != null) { + _result.id = id; + } + if (value != null) { + _result.value = value; + } + return _result; + } + factory GattCharacteristicValue.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory GattCharacteristicValue.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') + GattCharacteristicValue clone() => GattCharacteristicValue()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + GattCharacteristicValue copyWith(void Function(GattCharacteristicValue) updates) => super.copyWith((message) => updates(message as GattCharacteristicValue)) as GattCharacteristicValue; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static GattCharacteristicValue create() => GattCharacteristicValue._(); + GattCharacteristicValue createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static GattCharacteristicValue getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static GattCharacteristicValue? _defaultInstance; + + @$pb.TagNumber(3) + $core.int get id => $_getIZ(0); + @$pb.TagNumber(3) + set id($core.int v) { $_setSignedInt32(0, v); } + @$pb.TagNumber(3) + $core.bool hasId() => $_has(0); + @$pb.TagNumber(3) + void clearId() => clearField(3); + + @$pb.TagNumber(4) + $core.List<$core.int> get value => $_getN(1); + @$pb.TagNumber(4) + set value($core.List<$core.int> v) { $_setBytes(1, v); } + @$pb.TagNumber(4) + $core.bool hasValue() => $_has(1); + @$pb.TagNumber(4) + void clearValue() => clearField(4); +} + +class GattDescriptorReadArguments extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'GattDescriptorReadArguments', package: const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'dev.yanshouwang.bluetooth_low_energy'), createEmptyInstance: create) + ..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'address') + ..aOS(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'serviceUuid') + ..aOS(3, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'characteristicUuid') + ..aOS(4, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'uuid') + ..a<$core.int>(5, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'id', $pb.PbFieldType.O3) + ..hasRequiredFields = false + ; + + GattDescriptorReadArguments._() : super(); + factory GattDescriptorReadArguments({ + $core.String? address, + $core.String? serviceUuid, + $core.String? characteristicUuid, + $core.String? uuid, + $core.int? id, + }) { + final _result = create(); + if (address != null) { + _result.address = address; + } + if (serviceUuid != null) { + _result.serviceUuid = serviceUuid; + } + if (characteristicUuid != null) { + _result.characteristicUuid = characteristicUuid; + } + if (uuid != null) { + _result.uuid = uuid; + } + if (id != null) { + _result.id = id; + } + return _result; + } + factory GattDescriptorReadArguments.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory GattDescriptorReadArguments.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') + GattDescriptorReadArguments clone() => GattDescriptorReadArguments()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + GattDescriptorReadArguments copyWith(void Function(GattDescriptorReadArguments) updates) => super.copyWith((message) => updates(message as GattDescriptorReadArguments)) as GattDescriptorReadArguments; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static GattDescriptorReadArguments create() => GattDescriptorReadArguments._(); + GattDescriptorReadArguments createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static GattDescriptorReadArguments getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static GattDescriptorReadArguments? _defaultInstance; + + @$pb.TagNumber(1) + $core.String get address => $_getSZ(0); + @$pb.TagNumber(1) + set address($core.String v) { $_setString(0, v); } + @$pb.TagNumber(1) + $core.bool hasAddress() => $_has(0); + @$pb.TagNumber(1) + void clearAddress() => clearField(1); + + @$pb.TagNumber(2) + $core.String get serviceUuid => $_getSZ(1); + @$pb.TagNumber(2) + set serviceUuid($core.String v) { $_setString(1, v); } + @$pb.TagNumber(2) + $core.bool hasServiceUuid() => $_has(1); + @$pb.TagNumber(2) + void clearServiceUuid() => clearField(2); + + @$pb.TagNumber(3) + $core.String get characteristicUuid => $_getSZ(2); + @$pb.TagNumber(3) + set characteristicUuid($core.String v) { $_setString(2, v); } + @$pb.TagNumber(3) + $core.bool hasCharacteristicUuid() => $_has(2); + @$pb.TagNumber(3) + void clearCharacteristicUuid() => clearField(3); + + @$pb.TagNumber(4) + $core.String get uuid => $_getSZ(3); + @$pb.TagNumber(4) + set uuid($core.String v) { $_setString(3, v); } + @$pb.TagNumber(4) + $core.bool hasUuid() => $_has(3); + @$pb.TagNumber(4) + void clearUuid() => clearField(4); + + @$pb.TagNumber(5) + $core.int get id => $_getIZ(4); + @$pb.TagNumber(5) + set id($core.int v) { $_setSignedInt32(4, v); } + @$pb.TagNumber(5) + $core.bool hasId() => $_has(4); + @$pb.TagNumber(5) + void clearId() => clearField(5); +} + +class GattDescriptorWriteArguments extends $pb.GeneratedMessage { + static final $pb.BuilderInfo _i = $pb.BuilderInfo(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'GattDescriptorWriteArguments', package: const $pb.PackageName(const $core.bool.fromEnvironment('protobuf.omit_message_names') ? '' : 'dev.yanshouwang.bluetooth_low_energy'), createEmptyInstance: create) + ..aOS(1, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'address') + ..aOS(2, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'serviceUuid') + ..aOS(3, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'characteristicUuid') + ..aOS(4, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'uuid') + ..a<$core.int>(5, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'id', $pb.PbFieldType.O3) + ..a<$core.List<$core.int>>(6, const $core.bool.fromEnvironment('protobuf.omit_field_names') ? '' : 'value', $pb.PbFieldType.OY) + ..hasRequiredFields = false + ; + + GattDescriptorWriteArguments._() : super(); + factory GattDescriptorWriteArguments({ + $core.String? address, + $core.String? serviceUuid, + $core.String? characteristicUuid, + $core.String? uuid, + $core.int? id, + $core.List<$core.int>? value, + }) { + final _result = create(); + if (address != null) { + _result.address = address; + } + if (serviceUuid != null) { + _result.serviceUuid = serviceUuid; + } + if (characteristicUuid != null) { + _result.characteristicUuid = characteristicUuid; + } + if (uuid != null) { + _result.uuid = uuid; + } + if (id != null) { + _result.id = id; + } + if (value != null) { + _result.value = value; + } + return _result; + } + factory GattDescriptorWriteArguments.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory GattDescriptorWriteArguments.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') + GattDescriptorWriteArguments clone() => GattDescriptorWriteArguments()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + GattDescriptorWriteArguments copyWith(void Function(GattDescriptorWriteArguments) updates) => super.copyWith((message) => updates(message as GattDescriptorWriteArguments)) as GattDescriptorWriteArguments; // ignore: deprecated_member_use + $pb.BuilderInfo get info_ => _i; + @$core.pragma('dart2js:noInline') + static GattDescriptorWriteArguments create() => GattDescriptorWriteArguments._(); + GattDescriptorWriteArguments createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static GattDescriptorWriteArguments getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static GattDescriptorWriteArguments? _defaultInstance; + + @$pb.TagNumber(1) + $core.String get address => $_getSZ(0); + @$pb.TagNumber(1) + set address($core.String v) { $_setString(0, v); } + @$pb.TagNumber(1) + $core.bool hasAddress() => $_has(0); + @$pb.TagNumber(1) + void clearAddress() => clearField(1); + + @$pb.TagNumber(2) + $core.String get serviceUuid => $_getSZ(1); + @$pb.TagNumber(2) + set serviceUuid($core.String v) { $_setString(1, v); } + @$pb.TagNumber(2) + $core.bool hasServiceUuid() => $_has(1); + @$pb.TagNumber(2) + void clearServiceUuid() => clearField(2); + + @$pb.TagNumber(3) + $core.String get characteristicUuid => $_getSZ(2); + @$pb.TagNumber(3) + set characteristicUuid($core.String v) { $_setString(2, v); } + @$pb.TagNumber(3) + $core.bool hasCharacteristicUuid() => $_has(2); + @$pb.TagNumber(3) + void clearCharacteristicUuid() => clearField(3); + + @$pb.TagNumber(4) + $core.String get uuid => $_getSZ(3); + @$pb.TagNumber(4) + set uuid($core.String v) { $_setString(3, v); } + @$pb.TagNumber(4) + $core.bool hasUuid() => $_has(3); + @$pb.TagNumber(4) + void clearUuid() => clearField(4); + + @$pb.TagNumber(5) + $core.int get id => $_getIZ(4); + @$pb.TagNumber(5) + set id($core.int v) { $_setSignedInt32(4, v); } + @$pb.TagNumber(5) + $core.bool hasId() => $_has(4); + @$pb.TagNumber(5) + void clearId() => clearField(5); + + @$pb.TagNumber(6) + $core.List<$core.int> get value => $_getN(5); + @$pb.TagNumber(6) + set value($core.List<$core.int> v) { $_setBytes(5, v); } + @$pb.TagNumber(6) + $core.bool hasValue() => $_has(5); + @$pb.TagNumber(6) + void clearValue() => clearField(6); +} + diff --git a/lib/src/message.pbenum.dart b/lib/src/message.pbenum.dart index 4b77cd5..6e7dadc 100644 --- a/lib/src/message.pbenum.dart +++ b/lib/src/message.pbenum.dart @@ -10,16 +10,34 @@ import 'dart:core' as $core; import 'package:protobuf/protobuf.dart' as $pb; class MessageCategory extends $pb.ProtobufEnum { - static const MessageCategory BLUETOOTH_MANAGER_STATE = MessageCategory._(0, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'BLUETOOTH_MANAGER_STATE'); - static const MessageCategory CENTRAL_MANAGER_START_DISCOVERY = MessageCategory._(1, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'CENTRAL_MANAGER_START_DISCOVERY'); - static const MessageCategory CENTRAL_MANAGER_STOP_DISCOVERY = MessageCategory._(2, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'CENTRAL_MANAGER_STOP_DISCOVERY'); - static const MessageCategory CENTRAL_MANAGER_DISCOVERED = MessageCategory._(3, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'CENTRAL_MANAGER_DISCOVERED'); + static const MessageCategory BLUETOOTH_AVAILABLE = MessageCategory._(0, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'BLUETOOTH_AVAILABLE'); + static const MessageCategory BLUETOOTH_STATE = MessageCategory._(1, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'BLUETOOTH_STATE'); + static const MessageCategory CENTRAL_START_DISCOVERY = MessageCategory._(2, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'CENTRAL_START_DISCOVERY'); + static const MessageCategory CENTRAL_STOP_DISCOVERY = MessageCategory._(3, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'CENTRAL_STOP_DISCOVERY'); + static const MessageCategory CENTRAL_DISCOVERED = MessageCategory._(4, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'CENTRAL_DISCOVERED'); + static const MessageCategory CENTRAL_CONNECT = MessageCategory._(5, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'CENTRAL_CONNECT'); + static const MessageCategory GATT_DISCONNECT = MessageCategory._(6, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'GATT_DISCONNECT'); + static const MessageCategory GATT_CONNECTION_LOST = MessageCategory._(7, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'GATT_CONNECTION_LOST'); + static const MessageCategory GATT_CHARACTERISTIC_READ = MessageCategory._(8, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'GATT_CHARACTERISTIC_READ'); + static const MessageCategory GATT_CHARACTERISTIC_WRITE = MessageCategory._(9, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'GATT_CHARACTERISTIC_WRITE'); + static const MessageCategory GATT_CHARACTERISTIC_NOTIFY = MessageCategory._(10, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'GATT_CHARACTERISTIC_NOTIFY'); + static const MessageCategory GATT_DESCRIPTOR_READ = MessageCategory._(11, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'GATT_DESCRIPTOR_READ'); + static const MessageCategory GATT_DESCRIPTOR_WRITE = MessageCategory._(12, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'GATT_DESCRIPTOR_WRITE'); static const $core.List values = [ - BLUETOOTH_MANAGER_STATE, - CENTRAL_MANAGER_START_DISCOVERY, - CENTRAL_MANAGER_STOP_DISCOVERY, - CENTRAL_MANAGER_DISCOVERED, + BLUETOOTH_AVAILABLE, + BLUETOOTH_STATE, + CENTRAL_START_DISCOVERY, + CENTRAL_STOP_DISCOVERY, + CENTRAL_DISCOVERED, + CENTRAL_CONNECT, + GATT_DISCONNECT, + GATT_CONNECTION_LOST, + GATT_CHARACTERISTIC_READ, + GATT_CHARACTERISTIC_WRITE, + GATT_CHARACTERISTIC_NOTIFY, + GATT_DESCRIPTOR_READ, + GATT_DESCRIPTOR_WRITE, ]; static final $core.Map<$core.int, MessageCategory> _byValue = $pb.ProtobufEnum.initByValue(values); @@ -28,26 +46,3 @@ class MessageCategory extends $pb.ProtobufEnum { const MessageCategory._($core.int v, $core.String n) : super(v, n); } -class BluetoothManagerState extends $pb.ProtobufEnum { - static const BluetoothManagerState UNKNOWN = BluetoothManagerState._(0, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'UNKNOWN'); - static const BluetoothManagerState RESETTING = BluetoothManagerState._(1, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'RESETTING'); - static const BluetoothManagerState UNSUPPORTED = BluetoothManagerState._(2, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'UNSUPPORTED'); - static const BluetoothManagerState UNAUTHORIZED = BluetoothManagerState._(3, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'UNAUTHORIZED'); - static const BluetoothManagerState POWERED_OFF = BluetoothManagerState._(4, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'POWERED_OFF'); - static const BluetoothManagerState POWERED_ON = BluetoothManagerState._(5, const $core.bool.fromEnvironment('protobuf.omit_enum_names') ? '' : 'POWERED_ON'); - - static const $core.List values = [ - UNKNOWN, - RESETTING, - UNSUPPORTED, - UNAUTHORIZED, - POWERED_OFF, - POWERED_ON, - ]; - - static final $core.Map<$core.int, BluetoothManagerState> _byValue = $pb.ProtobufEnum.initByValue(values); - static BluetoothManagerState? valueOf($core.int value) => _byValue[value]; - - const BluetoothManagerState._($core.int v, $core.String n) : super(v, n); -} - diff --git a/lib/src/message.pbjson.dart b/lib/src/message.pbjson.dart index 02c32a6..2505285 100644 --- a/lib/src/message.pbjson.dart +++ b/lib/src/message.pbjson.dart @@ -12,36 +12,34 @@ import 'dart:typed_data' as $typed_data; const MessageCategory$json = const { '1': 'MessageCategory', '2': const [ - const {'1': 'BLUETOOTH_MANAGER_STATE', '2': 0}, - const {'1': 'CENTRAL_MANAGER_START_DISCOVERY', '2': 1}, - const {'1': 'CENTRAL_MANAGER_STOP_DISCOVERY', '2': 2}, - const {'1': 'CENTRAL_MANAGER_DISCOVERED', '2': 3}, + const {'1': 'BLUETOOTH_AVAILABLE', '2': 0}, + const {'1': 'BLUETOOTH_STATE', '2': 1}, + const {'1': 'CENTRAL_START_DISCOVERY', '2': 2}, + const {'1': 'CENTRAL_STOP_DISCOVERY', '2': 3}, + const {'1': 'CENTRAL_DISCOVERED', '2': 4}, + const {'1': 'CENTRAL_CONNECT', '2': 5}, + const {'1': 'GATT_DISCONNECT', '2': 6}, + const {'1': 'GATT_CONNECTION_LOST', '2': 7}, + const {'1': 'GATT_CHARACTERISTIC_READ', '2': 8}, + const {'1': 'GATT_CHARACTERISTIC_WRITE', '2': 9}, + const {'1': 'GATT_CHARACTERISTIC_NOTIFY', '2': 10}, + const {'1': 'GATT_DESCRIPTOR_READ', '2': 11}, + const {'1': 'GATT_DESCRIPTOR_WRITE', '2': 12}, ], }; /// Descriptor for `MessageCategory`. Decode as a `google.protobuf.EnumDescriptorProto`. -final $typed_data.Uint8List messageCategoryDescriptor = $convert.base64Decode('Cg9NZXNzYWdlQ2F0ZWdvcnkSGwoXQkxVRVRPT1RIX01BTkFHRVJfU1RBVEUQABIjCh9DRU5UUkFMX01BTkFHRVJfU1RBUlRfRElTQ09WRVJZEAESIgoeQ0VOVFJBTF9NQU5BR0VSX1NUT1BfRElTQ09WRVJZEAISHgoaQ0VOVFJBTF9NQU5BR0VSX0RJU0NPVkVSRUQQAw=='); -@$core.Deprecated('Use bluetoothManagerStateDescriptor instead') -const BluetoothManagerState$json = const { - '1': 'BluetoothManagerState', - '2': const [ - const {'1': 'UNKNOWN', '2': 0}, - const {'1': 'RESETTING', '2': 1}, - const {'1': 'UNSUPPORTED', '2': 2}, - const {'1': 'UNAUTHORIZED', '2': 3}, - const {'1': 'POWERED_OFF', '2': 4}, - const {'1': 'POWERED_ON', '2': 5}, - ], -}; - -/// Descriptor for `BluetoothManagerState`. Decode as a `google.protobuf.EnumDescriptorProto`. -final $typed_data.Uint8List bluetoothManagerStateDescriptor = $convert.base64Decode('ChVCbHVldG9vdGhNYW5hZ2VyU3RhdGUSCwoHVU5LTk9XThAAEg0KCVJFU0VUVElORxABEg8KC1VOU1VQUE9SVEVEEAISEAoMVU5BVVRIT1JJWkVEEAMSDwoLUE9XRVJFRF9PRkYQBBIOCgpQT1dFUkVEX09OEAU='); +final $typed_data.Uint8List messageCategoryDescriptor = $convert.base64Decode('Cg9NZXNzYWdlQ2F0ZWdvcnkSFwoTQkxVRVRPT1RIX0FWQUlMQUJMRRAAEhMKD0JMVUVUT09USF9TVEFURRABEhsKF0NFTlRSQUxfU1RBUlRfRElTQ09WRVJZEAISGgoWQ0VOVFJBTF9TVE9QX0RJU0NPVkVSWRADEhYKEkNFTlRSQUxfRElTQ09WRVJFRBAEEhMKD0NFTlRSQUxfQ09OTkVDVBAFEhMKD0dBVFRfRElTQ09OTkVDVBAGEhgKFEdBVFRfQ09OTkVDVElPTl9MT1NUEAcSHAoYR0FUVF9DSEFSQUNURVJJU1RJQ19SRUFEEAgSHQoZR0FUVF9DSEFSQUNURVJJU1RJQ19XUklURRAJEh4KGkdBVFRfQ0hBUkFDVEVSSVNUSUNfTk9USUZZEAoSGAoUR0FUVF9ERVNDUklQVE9SX1JFQUQQCxIZChVHQVRUX0RFU0NSSVBUT1JfV1JJVEUQDA=='); @$core.Deprecated('Use messageDescriptor instead') const Message$json = const { '1': 'Message', '2': const [ - const {'1': 'category', '3': 1, '4': 1, '5': 14, '6': '.MessageCategory', '10': 'category'}, - const {'1': 'state', '3': 2, '4': 1, '5': 14, '6': '.BluetoothManagerState', '9': 0, '10': 'state'}, + const {'1': 'category', '3': 1, '4': 1, '5': 14, '6': '.dev.yanshouwang.bluetooth_low_energy.MessageCategory', '10': 'category'}, + const {'1': 'state', '3': 2, '4': 1, '5': 8, '9': 0, '10': 'state'}, + const {'1': 'discovery', '3': 3, '4': 1, '5': 11, '6': '.dev.yanshouwang.bluetooth_low_energy.Discovery', '9': 0, '10': 'discovery'}, + const {'1': 'scanning', '3': 4, '4': 1, '5': 8, '9': 0, '10': 'scanning'}, + const {'1': 'connectionLost', '3': 5, '4': 1, '5': 11, '6': '.dev.yanshouwang.bluetooth_low_energy.ConnectionLost', '9': 0, '10': 'connectionLost'}, + const {'1': 'characteristicValue', '3': 6, '4': 1, '5': 11, '6': '.dev.yanshouwang.bluetooth_low_energy.GattCharacteristicValue', '9': 0, '10': 'characteristicValue'}, ], '8': const [ const {'1': 'value'}, @@ -49,37 +47,191 @@ const Message$json = const { }; /// Descriptor for `Message`. Decode as a `google.protobuf.DescriptorProto`. -final $typed_data.Uint8List messageDescriptor = $convert.base64Decode('CgdNZXNzYWdlEiwKCGNhdGVnb3J5GAEgASgOMhAuTWVzc2FnZUNhdGVnb3J5UghjYXRlZ29yeRIuCgVzdGF0ZRgCIAEoDjIWLkJsdWV0b290aE1hbmFnZXJTdGF0ZUgAUgVzdGF0ZUIHCgV2YWx1ZQ=='); +final $typed_data.Uint8List messageDescriptor = $convert.base64Decode('CgdNZXNzYWdlElEKCGNhdGVnb3J5GAEgASgOMjUuZGV2LnlhbnNob3V3YW5nLmJsdWV0b290aF9sb3dfZW5lcmd5Lk1lc3NhZ2VDYXRlZ29yeVIIY2F0ZWdvcnkSFgoFc3RhdGUYAiABKAhIAFIFc3RhdGUSTwoJZGlzY292ZXJ5GAMgASgLMi8uZGV2LnlhbnNob3V3YW5nLmJsdWV0b290aF9sb3dfZW5lcmd5LkRpc2NvdmVyeUgAUglkaXNjb3ZlcnkSHAoIc2Nhbm5pbmcYBCABKAhIAFIIc2Nhbm5pbmcSXgoOY29ubmVjdGlvbkxvc3QYBSABKAsyNC5kZXYueWFuc2hvdXdhbmcuYmx1ZXRvb3RoX2xvd19lbmVyZ3kuQ29ubmVjdGlvbkxvc3RIAFIOY29ubmVjdGlvbkxvc3QScQoTY2hhcmFjdGVyaXN0aWNWYWx1ZRgGIAEoCzI9LmRldi55YW5zaG91d2FuZy5ibHVldG9vdGhfbG93X2VuZXJneS5HYXR0Q2hhcmFjdGVyaXN0aWNWYWx1ZUgAUhNjaGFyYWN0ZXJpc3RpY1ZhbHVlQgcKBXZhbHVl'); +@$core.Deprecated('Use startDiscoveryArgumentsDescriptor instead') +const StartDiscoveryArguments$json = const { + '1': 'StartDiscoveryArguments', + '2': const [ + const {'1': 'services', '3': 1, '4': 3, '5': 9, '10': 'services'}, + ], +}; + +/// Descriptor for `StartDiscoveryArguments`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List startDiscoveryArgumentsDescriptor = $convert.base64Decode('ChdTdGFydERpc2NvdmVyeUFyZ3VtZW50cxIaCghzZXJ2aWNlcxgBIAMoCVIIc2VydmljZXM='); @$core.Deprecated('Use discoveryDescriptor instead') const Discovery$json = const { '1': 'Discovery', '2': const [ - const {'1': 'peripheral', '3': 1, '4': 1, '5': 11, '6': '.Peripheral', '10': 'peripheral'}, + const {'1': 'address', '3': 1, '4': 1, '5': 9, '10': 'address'}, const {'1': 'rssi', '3': 2, '4': 1, '5': 17, '10': 'rssi'}, - const {'1': 'advertisements', '3': 3, '4': 3, '5': 11, '6': '.Discovery.AdvertisementsEntry', '10': 'advertisements'}, + const {'1': 'advertisements', '3': 3, '4': 1, '5': 12, '10': 'advertisements'}, ], - '3': const [Discovery_AdvertisementsEntry$json], -}; - -@$core.Deprecated('Use discoveryDescriptor instead') -const Discovery_AdvertisementsEntry$json = const { - '1': 'AdvertisementsEntry', - '2': const [ - const {'1': 'key', '3': 1, '4': 1, '5': 13, '10': 'key'}, - const {'1': 'value', '3': 2, '4': 1, '5': 12, '10': 'value'}, - ], - '7': const {'7': true}, }; /// Descriptor for `Discovery`. Decode as a `google.protobuf.DescriptorProto`. -final $typed_data.Uint8List discoveryDescriptor = $convert.base64Decode('CglEaXNjb3ZlcnkSKwoKcGVyaXBoZXJhbBgBIAEoCzILLlBlcmlwaGVyYWxSCnBlcmlwaGVyYWwSEgoEcnNzaRgCIAEoEVIEcnNzaRJGCg5hZHZlcnRpc2VtZW50cxgDIAMoCzIeLkRpc2NvdmVyeS5BZHZlcnRpc2VtZW50c0VudHJ5Ug5hZHZlcnRpc2VtZW50cxpBChNBZHZlcnRpc2VtZW50c0VudHJ5EhAKA2tleRgBIAEoDVIDa2V5EhQKBXZhbHVlGAIgASgMUgV2YWx1ZToCOAE='); -@$core.Deprecated('Use peripheralDescriptor instead') -const Peripheral$json = const { - '1': 'Peripheral', +final $typed_data.Uint8List discoveryDescriptor = $convert.base64Decode('CglEaXNjb3ZlcnkSGAoHYWRkcmVzcxgBIAEoCVIHYWRkcmVzcxISCgRyc3NpGAIgASgRUgRyc3NpEiYKDmFkdmVydGlzZW1lbnRzGAMgASgMUg5hZHZlcnRpc2VtZW50cw=='); +@$core.Deprecated('Use connectArgumentsDescriptor instead') +const ConnectArguments$json = const { + '1': 'ConnectArguments', '2': const [ - const {'1': 'address', '3': 1, '4': 1, '5': 12, '10': 'address'}, + const {'1': 'address', '3': 1, '4': 1, '5': 9, '10': 'address'}, ], }; -/// Descriptor for `Peripheral`. Decode as a `google.protobuf.DescriptorProto`. -final $typed_data.Uint8List peripheralDescriptor = $convert.base64Decode('CgpQZXJpcGhlcmFsEhgKB2FkZHJlc3MYASABKAxSB2FkZHJlc3M='); +/// Descriptor for `ConnectArguments`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List connectArgumentsDescriptor = $convert.base64Decode('ChBDb25uZWN0QXJndW1lbnRzEhgKB2FkZHJlc3MYASABKAlSB2FkZHJlc3M='); +@$core.Deprecated('Use gATTDescriptor instead') +const GATT$json = const { + '1': 'GATT', + '2': const [ + const {'1': 'id', '3': 1, '4': 1, '5': 5, '10': 'id'}, + const {'1': 'mtu', '3': 2, '4': 1, '5': 5, '10': 'mtu'}, + const {'1': 'services', '3': 3, '4': 3, '5': 11, '6': '.dev.yanshouwang.bluetooth_low_energy.GattService', '10': 'services'}, + ], +}; + +/// Descriptor for `GATT`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List gATTDescriptor = $convert.base64Decode('CgRHQVRUEg4KAmlkGAEgASgFUgJpZBIQCgNtdHUYAiABKAVSA210dRJNCghzZXJ2aWNlcxgDIAMoCzIxLmRldi55YW5zaG91d2FuZy5ibHVldG9vdGhfbG93X2VuZXJneS5HYXR0U2VydmljZVIIc2VydmljZXM='); +@$core.Deprecated('Use gattDisconnectArgumentsDescriptor instead') +const GattDisconnectArguments$json = const { + '1': 'GattDisconnectArguments', + '2': const [ + const {'1': 'address', '3': 1, '4': 1, '5': 9, '10': 'address'}, + const {'1': 'id', '3': 2, '4': 1, '5': 5, '10': 'id'}, + ], +}; + +/// Descriptor for `GattDisconnectArguments`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List gattDisconnectArgumentsDescriptor = $convert.base64Decode('ChdHYXR0RGlzY29ubmVjdEFyZ3VtZW50cxIYCgdhZGRyZXNzGAEgASgJUgdhZGRyZXNzEg4KAmlkGAIgASgFUgJpZA=='); +@$core.Deprecated('Use gattServiceDescriptor instead') +const GattService$json = const { + '1': 'GattService', + '2': const [ + const {'1': 'id', '3': 1, '4': 1, '5': 5, '10': 'id'}, + const {'1': 'uuid', '3': 2, '4': 1, '5': 9, '10': 'uuid'}, + const {'1': 'characteristics', '3': 3, '4': 3, '5': 11, '6': '.dev.yanshouwang.bluetooth_low_energy.GattCharacteristic', '10': 'characteristics'}, + ], +}; + +/// Descriptor for `GattService`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List gattServiceDescriptor = $convert.base64Decode('CgtHYXR0U2VydmljZRIOCgJpZBgBIAEoBVICaWQSEgoEdXVpZBgCIAEoCVIEdXVpZBJiCg9jaGFyYWN0ZXJpc3RpY3MYAyADKAsyOC5kZXYueWFuc2hvdXdhbmcuYmx1ZXRvb3RoX2xvd19lbmVyZ3kuR2F0dENoYXJhY3RlcmlzdGljUg9jaGFyYWN0ZXJpc3RpY3M='); +@$core.Deprecated('Use gattCharacteristicDescriptor instead') +const GattCharacteristic$json = const { + '1': 'GattCharacteristic', + '2': const [ + const {'1': 'id', '3': 1, '4': 1, '5': 5, '10': 'id'}, + const {'1': 'uuid', '3': 2, '4': 1, '5': 9, '10': 'uuid'}, + const {'1': 'descriptors', '3': 3, '4': 3, '5': 11, '6': '.dev.yanshouwang.bluetooth_low_energy.GattDescriptor', '10': 'descriptors'}, + const {'1': 'canRead', '3': 4, '4': 1, '5': 8, '10': 'canRead'}, + const {'1': 'canWrite', '3': 5, '4': 1, '5': 8, '10': 'canWrite'}, + const {'1': 'canWriteWithoutResponse', '3': 6, '4': 1, '5': 8, '10': 'canWriteWithoutResponse'}, + const {'1': 'canNotify', '3': 7, '4': 1, '5': 8, '10': 'canNotify'}, + ], +}; + +/// Descriptor for `GattCharacteristic`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List gattCharacteristicDescriptor = $convert.base64Decode('ChJHYXR0Q2hhcmFjdGVyaXN0aWMSDgoCaWQYASABKAVSAmlkEhIKBHV1aWQYAiABKAlSBHV1aWQSVgoLZGVzY3JpcHRvcnMYAyADKAsyNC5kZXYueWFuc2hvdXdhbmcuYmx1ZXRvb3RoX2xvd19lbmVyZ3kuR2F0dERlc2NyaXB0b3JSC2Rlc2NyaXB0b3JzEhgKB2NhblJlYWQYBCABKAhSB2NhblJlYWQSGgoIY2FuV3JpdGUYBSABKAhSCGNhbldyaXRlEjgKF2NhbldyaXRlV2l0aG91dFJlc3BvbnNlGAYgASgIUhdjYW5Xcml0ZVdpdGhvdXRSZXNwb25zZRIcCgljYW5Ob3RpZnkYByABKAhSCWNhbk5vdGlmeQ=='); +@$core.Deprecated('Use gattDescriptorDescriptor instead') +const GattDescriptor$json = const { + '1': 'GattDescriptor', + '2': const [ + const {'1': 'id', '3': 1, '4': 1, '5': 5, '10': 'id'}, + const {'1': 'uuid', '3': 2, '4': 1, '5': 9, '10': 'uuid'}, + ], +}; + +/// Descriptor for `GattDescriptor`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List gattDescriptorDescriptor = $convert.base64Decode('Cg5HYXR0RGVzY3JpcHRvchIOCgJpZBgBIAEoBVICaWQSEgoEdXVpZBgCIAEoCVIEdXVpZA=='); +@$core.Deprecated('Use connectionLostDescriptor instead') +const ConnectionLost$json = const { + '1': 'ConnectionLost', + '2': const [ + const {'1': 'id', '3': 1, '4': 1, '5': 5, '10': 'id'}, + const {'1': 'error_code', '3': 2, '4': 1, '5': 5, '10': 'errorCode'}, + ], +}; + +/// Descriptor for `ConnectionLost`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List connectionLostDescriptor = $convert.base64Decode('Cg5Db25uZWN0aW9uTG9zdBIOCgJpZBgBIAEoBVICaWQSHQoKZXJyb3JfY29kZRgCIAEoBVIJZXJyb3JDb2Rl'); +@$core.Deprecated('Use gattCharacteristicReadArgumentsDescriptor instead') +const GattCharacteristicReadArguments$json = const { + '1': 'GattCharacteristicReadArguments', + '2': const [ + const {'1': 'address', '3': 1, '4': 1, '5': 9, '10': 'address'}, + const {'1': 'service_uuid', '3': 2, '4': 1, '5': 9, '10': 'serviceUuid'}, + const {'1': 'uuid', '3': 3, '4': 1, '5': 9, '10': 'uuid'}, + const {'1': 'id', '3': 4, '4': 1, '5': 5, '10': 'id'}, + ], +}; + +/// Descriptor for `GattCharacteristicReadArguments`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List gattCharacteristicReadArgumentsDescriptor = $convert.base64Decode('Ch9HYXR0Q2hhcmFjdGVyaXN0aWNSZWFkQXJndW1lbnRzEhgKB2FkZHJlc3MYASABKAlSB2FkZHJlc3MSIQoMc2VydmljZV91dWlkGAIgASgJUgtzZXJ2aWNlVXVpZBISCgR1dWlkGAMgASgJUgR1dWlkEg4KAmlkGAQgASgFUgJpZA=='); +@$core.Deprecated('Use gattCharacteristicWriteArgumentsDescriptor instead') +const GattCharacteristicWriteArguments$json = const { + '1': 'GattCharacteristicWriteArguments', + '2': const [ + const {'1': 'address', '3': 1, '4': 1, '5': 9, '10': 'address'}, + const {'1': 'service_uuid', '3': 2, '4': 1, '5': 9, '10': 'serviceUuid'}, + const {'1': 'uuid', '3': 3, '4': 1, '5': 9, '10': 'uuid'}, + const {'1': 'id', '3': 4, '4': 1, '5': 5, '10': 'id'}, + const {'1': 'value', '3': 5, '4': 1, '5': 12, '10': 'value'}, + const {'1': 'withoutResponse', '3': 6, '4': 1, '5': 8, '10': 'withoutResponse'}, + ], +}; + +/// Descriptor for `GattCharacteristicWriteArguments`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List gattCharacteristicWriteArgumentsDescriptor = $convert.base64Decode('CiBHYXR0Q2hhcmFjdGVyaXN0aWNXcml0ZUFyZ3VtZW50cxIYCgdhZGRyZXNzGAEgASgJUgdhZGRyZXNzEiEKDHNlcnZpY2VfdXVpZBgCIAEoCVILc2VydmljZVV1aWQSEgoEdXVpZBgDIAEoCVIEdXVpZBIOCgJpZBgEIAEoBVICaWQSFAoFdmFsdWUYBSABKAxSBXZhbHVlEigKD3dpdGhvdXRSZXNwb25zZRgGIAEoCFIPd2l0aG91dFJlc3BvbnNl'); +@$core.Deprecated('Use gattCharacteristicNotifyArgumentsDescriptor instead') +const GattCharacteristicNotifyArguments$json = const { + '1': 'GattCharacteristicNotifyArguments', + '2': const [ + const {'1': 'address', '3': 1, '4': 1, '5': 9, '10': 'address'}, + const {'1': 'service_uuid', '3': 2, '4': 1, '5': 9, '10': 'serviceUuid'}, + const {'1': 'uuid', '3': 3, '4': 1, '5': 9, '10': 'uuid'}, + const {'1': 'id', '3': 4, '4': 1, '5': 5, '10': 'id'}, + const {'1': 'state', '3': 5, '4': 1, '5': 8, '10': 'state'}, + ], +}; + +/// Descriptor for `GattCharacteristicNotifyArguments`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List gattCharacteristicNotifyArgumentsDescriptor = $convert.base64Decode('CiFHYXR0Q2hhcmFjdGVyaXN0aWNOb3RpZnlBcmd1bWVudHMSGAoHYWRkcmVzcxgBIAEoCVIHYWRkcmVzcxIhCgxzZXJ2aWNlX3V1aWQYAiABKAlSC3NlcnZpY2VVdWlkEhIKBHV1aWQYAyABKAlSBHV1aWQSDgoCaWQYBCABKAVSAmlkEhQKBXN0YXRlGAUgASgIUgVzdGF0ZQ=='); +@$core.Deprecated('Use gattCharacteristicValueDescriptor instead') +const GattCharacteristicValue$json = const { + '1': 'GattCharacteristicValue', + '2': const [ + const {'1': 'id', '3': 3, '4': 1, '5': 5, '10': 'id'}, + const {'1': 'value', '3': 4, '4': 1, '5': 12, '10': 'value'}, + ], +}; + +/// Descriptor for `GattCharacteristicValue`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List gattCharacteristicValueDescriptor = $convert.base64Decode('ChdHYXR0Q2hhcmFjdGVyaXN0aWNWYWx1ZRIOCgJpZBgDIAEoBVICaWQSFAoFdmFsdWUYBCABKAxSBXZhbHVl'); +@$core.Deprecated('Use gattDescriptorReadArgumentsDescriptor instead') +const GattDescriptorReadArguments$json = const { + '1': 'GattDescriptorReadArguments', + '2': const [ + const {'1': 'address', '3': 1, '4': 1, '5': 9, '10': 'address'}, + const {'1': 'service_uuid', '3': 2, '4': 1, '5': 9, '10': 'serviceUuid'}, + const {'1': 'characteristic_uuid', '3': 3, '4': 1, '5': 9, '10': 'characteristicUuid'}, + const {'1': 'uuid', '3': 4, '4': 1, '5': 9, '10': 'uuid'}, + const {'1': 'id', '3': 5, '4': 1, '5': 5, '10': 'id'}, + ], +}; + +/// Descriptor for `GattDescriptorReadArguments`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List gattDescriptorReadArgumentsDescriptor = $convert.base64Decode('ChtHYXR0RGVzY3JpcHRvclJlYWRBcmd1bWVudHMSGAoHYWRkcmVzcxgBIAEoCVIHYWRkcmVzcxIhCgxzZXJ2aWNlX3V1aWQYAiABKAlSC3NlcnZpY2VVdWlkEi8KE2NoYXJhY3RlcmlzdGljX3V1aWQYAyABKAlSEmNoYXJhY3RlcmlzdGljVXVpZBISCgR1dWlkGAQgASgJUgR1dWlkEg4KAmlkGAUgASgFUgJpZA=='); +@$core.Deprecated('Use gattDescriptorWriteArgumentsDescriptor instead') +const GattDescriptorWriteArguments$json = const { + '1': 'GattDescriptorWriteArguments', + '2': const [ + const {'1': 'address', '3': 1, '4': 1, '5': 9, '10': 'address'}, + const {'1': 'service_uuid', '3': 2, '4': 1, '5': 9, '10': 'serviceUuid'}, + const {'1': 'characteristic_uuid', '3': 3, '4': 1, '5': 9, '10': 'characteristicUuid'}, + const {'1': 'uuid', '3': 4, '4': 1, '5': 9, '10': 'uuid'}, + const {'1': 'id', '3': 5, '4': 1, '5': 5, '10': 'id'}, + const {'1': 'value', '3': 6, '4': 1, '5': 12, '10': 'value'}, + ], +}; + +/// Descriptor for `GattDescriptorWriteArguments`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List gattDescriptorWriteArgumentsDescriptor = $convert.base64Decode('ChxHYXR0RGVzY3JpcHRvcldyaXRlQXJndW1lbnRzEhgKB2FkZHJlc3MYASABKAlSB2FkZHJlc3MSIQoMc2VydmljZV91dWlkGAIgASgJUgtzZXJ2aWNlVXVpZBIvChNjaGFyYWN0ZXJpc3RpY191dWlkGAMgASgJUhJjaGFyYWN0ZXJpc3RpY1V1aWQSEgoEdXVpZBgEIAEoCVIEdXVpZBIOCgJpZBgFIAEoBVICaWQSFAoFdmFsdWUYBiABKAxSBXZhbHVl'); diff --git a/lib/src/channel.dart b/lib/src/util.dart similarity index 74% rename from lib/src/channel.dart rename to lib/src/util.dart index 1c18b7b..ee577b3 100644 --- a/lib/src/channel.dart +++ b/lib/src/util.dart @@ -1,6 +1,9 @@ +import 'package:collection/collection.dart'; import 'package:flutter/services.dart'; const namespace = 'yanshouwang.dev/bluetooth_low_energy'; const method = MethodChannel('$namespace/method'); const event = EventChannel('$namespace/event'); +const equality = ListEquality(); + final stream = event.receiveBroadcastStream(); diff --git a/lib/src/uuid.dart b/lib/src/uuid.dart index 59ca366..e85ebdf 100644 --- a/lib/src/uuid.dart +++ b/lib/src/uuid.dart @@ -1,52 +1,34 @@ -import 'package:collection/collection.dart'; -import 'package:convert/convert.dart'; +part of bluetooth_low_energy; /// A universally unique identifier, as defined by bluetooth standards. abstract class UUID { + /// TO BE DONE. List get value; - factory UUID(String s) => _UUID(s); + /// TO BE DONE. + String get name; + + /// TO BE DONE. + factory UUID(String str) => _UUID(str); } class _UUID implements UUID { - final String full; @override final List value; @override + final String name; + @override final int hashCode; - _UUID(String s) : this.full(s.full); + _UUID(String str) : this.name(str.nameOfUUID); - _UUID.full(String full) : this.create(full, full.value); + _UUID.name(String name) : this.nameValue(name, name.valueOfUUID); - _UUID.create(this.full, this.value) - : hashCode = ListEquality().hash(value); + _UUID.nameValue(this.name, this.value) : hashCode = equality.hash(value); @override - String toString() => full; + String toString() => name; @override bool operator ==(other) => other is UUID && other.hashCode == hashCode; } - -extension on String { - String get full { - var source = - r'[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$'; - var regex = RegExp(source, multiLine: true, caseSensitive: false); - if (regex.hasMatch(this)) return this; - source = r'^[0-9a-f]{4}$'; - regex = RegExp(source, multiLine: true, caseSensitive: false); - if (regex.hasMatch(this)) { - return '0x0000${this}-0000-1000-8000-00805F9B34FB'; - } - throw ArgumentError.value(this); - } - - List get value { - final source = r'-'; - final regex = RegExp(source); - final encoded = splitMapJoin(regex); - return hex.decode(encoded); - } -} diff --git a/proto/message.proto b/proto/message.proto index 22ee95c..9dc863a 100644 --- a/proto/message.proto +++ b/proto/message.proto @@ -1,34 +1,126 @@ syntax = "proto3"; +package dev.yanshouwang.bluetooth_low_energy; message Message { MessageCategory category = 1; oneof value { - BluetoothManagerState state = 2; + bool state = 2; + Discovery discovery = 3; + bool scanning = 4; + ConnectionLost connectionLost = 5; + GattCharacteristicValue characteristicValue = 6; } } -message Discovery { - Peripheral peripheral = 1; - sint32 rssi = 2; - map advertisements = 3; +message StartDiscoveryArguments { + repeated string services = 1; } -message Peripheral { - bytes address = 1; +message Discovery { + string address = 1; + sint32 rssi = 2; + bytes advertisements = 3; +} + +message ConnectArguments { + string address = 1; +} + +message GATT { + int32 id = 1; + int32 mtu = 2; + repeated GattService services = 3; +} + +message GattDisconnectArguments{ + string address = 1; + int32 id = 2; +} + +message GattService { + int32 id = 1; + string uuid = 2; + repeated GattCharacteristic characteristics = 3; +} + +message GattCharacteristic { + int32 id = 1; + string uuid = 2; + repeated GattDescriptor descriptors = 3; + bool canRead = 4; + bool canWrite = 5; + bool canWriteWithoutResponse = 6; + bool canNotify = 7; +} + +message GattDescriptor { + int32 id = 1; + string uuid = 2; +} + +message ConnectionLost { + int32 id = 1; + int32 error_code = 2; +} + +message GattCharacteristicReadArguments { + string address = 1; + string service_uuid = 2; + string uuid = 3; + int32 id = 4; +} + +message GattCharacteristicWriteArguments { + string address = 1; + string service_uuid = 2; + string uuid = 3; + int32 id = 4; + bytes value = 5; + bool withoutResponse = 6; +} + +message GattCharacteristicNotifyArguments{ + string address = 1; + string service_uuid = 2; + string uuid = 3; + int32 id = 4; + bool state = 5; +} + +message GattCharacteristicValue { + int32 id = 3; + bytes value = 4; +} + +message GattDescriptorReadArguments { + string address = 1; + string service_uuid = 2; + string characteristic_uuid = 3; + string uuid = 4; + int32 id = 5; +} + +message GattDescriptorWriteArguments { + string address = 1; + string service_uuid = 2; + string characteristic_uuid = 3; + string uuid = 4; + int32 id = 5; + bytes value = 6; } enum MessageCategory { - BLUETOOTH_MANAGER_STATE = 0; - CENTRAL_MANAGER_START_DISCOVERY = 1; - CENTRAL_MANAGER_STOP_DISCOVERY = 2; - CENTRAL_MANAGER_DISCOVERED = 3; -} - -enum BluetoothManagerState { - UNKNOWN = 0; - RESETTING = 1; - UNSUPPORTED = 2; - UNAUTHORIZED = 3; - POWERED_OFF = 4; - POWERED_ON = 5; + BLUETOOTH_AVAILABLE =0; + BLUETOOTH_STATE = 1; + CENTRAL_START_DISCOVERY = 2; + CENTRAL_STOP_DISCOVERY = 3; + CENTRAL_DISCOVERED = 4; + CENTRAL_CONNECT = 5; + GATT_DISCONNECT = 6; + GATT_CONNECTION_LOST = 7; + GATT_CHARACTERISTIC_READ = 8; + GATT_CHARACTERISTIC_WRITE = 9; + GATT_CHARACTERISTIC_NOTIFY = 10; + GATT_DESCRIPTOR_READ = 11; + GATT_DESCRIPTOR_WRITE = 12; } \ No newline at end of file diff --git a/pubspec.yaml b/pubspec.yaml index 9c5c28f..2fae5e9 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,7 +1,8 @@ name: bluetooth_low_energy -description: A new flutter plugin project. +description: A bluetooth low energy plugin for flutter, which can be used for a central role. version: 0.0.1 -homepage: +homepage: https://github.com/yanshouwang/camerax +publish_to: https://pub.dev environment: sdk: ">=2.12.0 <3.0.0" diff --git a/test/bluetooth_low_energy_test.dart b/test/bluetooth_low_energy_test.dart index 7d00ebe..89e4316 100644 --- a/test/bluetooth_low_energy_test.dart +++ b/test/bluetooth_low_energy_test.dart @@ -1,27 +1,76 @@ import 'package:bluetooth_low_energy/bluetooth_low_energy.dart'; -import 'package:bluetooth_low_energy/src/channel.dart' as channel; -import 'package:bluetooth_low_energy/src/message.pb.dart' as message; +import 'package:bluetooth_low_energy/src/util.dart' as util; +import 'package:bluetooth_low_energy/src/message.pb.dart' as proto; import 'package:flutter/services.dart'; import 'package:flutter_test/flutter_test.dart'; void main() { - final method = MethodChannel('${channel.method.name}'); - final event = MethodChannel('${channel.event.name}'); + final method = MethodChannel('${util.method.name}'); + final event = MethodChannel('${util.event.name}'); final calls = []; - TestWidgetsFlutterBinding.ensureInitialized(); setUp(() { calls.clear(); method.setMockMethodCallHandler((call) async { calls.add(call); - if (call.method == message.MessageCategory.BLUETOOTH_MANAGER_STATE.name) { - return message.BluetoothManagerState.POWERED_OFF.value; + if (call.method == proto.MessageCategory.BLUETOOTH_AVAILABLE.name) { + return true; + } else if (call.method == proto.MessageCategory.BLUETOOTH_STATE.name) { + return true; } else if (call.method == - message.MessageCategory.CENTRAL_MANAGER_START_DISCOVERY.name) { + proto.MessageCategory.CENTRAL_START_DISCOVERY.name) { return null; } else if (call.method == - message.MessageCategory.CENTRAL_MANAGER_STOP_DISCOVERY.name) { + proto.MessageCategory.CENTRAL_STOP_DISCOVERY.name) { + return null; + } else if (call.method == proto.MessageCategory.CENTRAL_CONNECT.name) { + final descriptors = [ + proto.GattDescriptor( + id: 4000, + uuid: '2900', + ), + ]; + final characteristics = [ + proto.GattCharacteristic( + id: 3000, + uuid: '2A00', + descriptors: descriptors, + canRead: true, + canWrite: true, + canWriteWithoutResponse: true, + canNotify: true, + ), + ]; + final services = [ + proto.GattService( + id: 2000, + uuid: '1800', + characteristics: characteristics, + ), + ]; + final gatt = proto.GATT( + id: 1000, + mtu: 23, + services: services, + ); + return gatt.writeToBuffer(); + } else if (call.method == proto.MessageCategory.GATT_DISCONNECT.name) { + return null; + } else if (call.method == + proto.MessageCategory.GATT_CHARACTERISTIC_READ.name) { + return [0x01, 0x02, 0x03, 0x04, 0x05]; + } else if (call.method == + proto.MessageCategory.GATT_CHARACTERISTIC_WRITE.name) { + return null; + } else if (call.method == + proto.MessageCategory.GATT_CHARACTERISTIC_NOTIFY.name) { + return null; + } else if (call.method == + proto.MessageCategory.GATT_DESCRIPTOR_READ.name) { + return [0x05, 0x04, 0x03, 0x02, 0x01]; + } else if (call.method == + proto.MessageCategory.GATT_DESCRIPTOR_WRITE.name) { return null; } else { throw UnimplementedError(); @@ -30,74 +79,393 @@ void main() { event.setMockMethodCallHandler((call) async { switch (call.method) { case 'listen': - final state = message.Message( - category: message.MessageCategory.BLUETOOTH_MANAGER_STATE, - state: message.BluetoothManagerState.POWERED_ON) - .writeToBuffer(); + final state = proto.Message( + category: proto.MessageCategory.BLUETOOTH_STATE, + state: false, + ).writeToBuffer(); await ServicesBinding.instance!.defaultBinaryMessenger - .handlePlatformMessage(channel.event.name, - channel.event.codec.encodeSuccessEnvelope(state), (data) {}); + .handlePlatformMessage( + event.name, + event.codec.encodeSuccessEnvelope(state), + (data) {}, + ); + final discovery = proto.Message( + category: proto.MessageCategory.CENTRAL_DISCOVERED, + discovery: proto.Discovery( + address: 'aa:bb:cc:dd:ee:ff', + rssi: -50, + advertisements: [0x07, 0xff, 0xff, 0xee, 0xdd, 0xcc, 0xbb, 0xaa], + ), + ).writeToBuffer(); + await ServicesBinding.instance!.defaultBinaryMessenger + .handlePlatformMessage( + event.name, + event.codec.encodeSuccessEnvelope(discovery), + (data) {}, + ); + final connectionLost = proto.Message( + category: proto.MessageCategory.GATT_CONNECTION_LOST, + connectionLost: proto.ConnectionLost( + id: 1000, + errorCode: 19, + ), + ).writeToBuffer(); + await ServicesBinding.instance!.defaultBinaryMessenger + .handlePlatformMessage( + event.name, + event.codec.encodeSuccessEnvelope(connectionLost), + (data) {}, + ); + final characteristicValue = proto.Message( + category: proto.MessageCategory.GATT_CHARACTERISTIC_NOTIFY, + characteristicValue: proto.GattCharacteristicValue( + id: 3000, + value: [0x0A, 0x0B, 0x0C, 0x0D, 0x0E], + ), + ).writeToBuffer(); + await ServicesBinding.instance!.defaultBinaryMessenger + .handlePlatformMessage( + event.name, + event.codec.encodeSuccessEnvelope(characteristicValue), + (data) {}, + ); break; case 'cancel': - default: return null; + default: + throw UnimplementedError(); } }); }); - tearDown(() { method.setMockMethodCallHandler(null); event.setMockMethodCallHandler(null); }); - test('${message.MessageCategory.BLUETOOTH_MANAGER_STATE}', () async { - final actual = await CentralManager().state; - final matcher = BluetoothManagerState.poweredOff; - expect(actual, matcher); - expect( - calls, - [ - isMethodCall( - message.MessageCategory.BLUETOOTH_MANAGER_STATE.name, - arguments: null, - ), - ], - ); - }); - - test('${message.MessageCategory.BLUETOOTH_MANAGER_STATE} EVENT', () async { - final actual = await CentralManager().stateChanged.first; - final matcher = BluetoothManagerState.poweredOn; - expect(actual, matcher); - }); - - test('${message.MessageCategory.CENTRAL_MANAGER_START_DISCOVERY}', () async { - final services = [ - UUID(""), - UUID(""), - ]; - await CentralManager().startDiscovery(services: services); - expect( - calls, - [ - isMethodCall( - message.MessageCategory.CENTRAL_MANAGER_START_DISCOVERY.name, - arguments: null, - ), - ], - ); - }); - - test('${message.MessageCategory.CENTRAL_MANAGER_STOP_DISCOVERY}', () async { - await CentralManager().stopDiscovery(); - expect( - calls, - [ - isMethodCall( - message.MessageCategory.CENTRAL_MANAGER_STOP_DISCOVERY.name, - arguments: null, - ), - ], - ); - }); + test( + '${proto.MessageCategory.BLUETOOTH_AVAILABLE}', + () async { + final actual = await central.available; + expect(actual, true); + expect( + calls, + [ + isMethodCall( + proto.MessageCategory.BLUETOOTH_AVAILABLE.name, + arguments: null, + ), + ], + ); + }, + ); + test( + '${proto.MessageCategory.BLUETOOTH_STATE}', + () async { + final actual = await central.state; + expect(actual, true); + expect( + calls, + [ + isMethodCall( + proto.MessageCategory.BLUETOOTH_STATE.name, + arguments: null, + ), + ], + ); + }, + ); + test( + '${proto.MessageCategory.BLUETOOTH_STATE} EVENT', + () async { + final actual = await central.stateChanged.first; + expect(actual, false); + }, + ); + test( + '${proto.MessageCategory.CENTRAL_START_DISCOVERY}', + () async { + final services = [UUID('1800'), UUID('1801')]; + await central.startDiscovery(services: services); + expect( + calls, + [ + isMethodCall( + proto.MessageCategory.CENTRAL_START_DISCOVERY.name, + arguments: proto.StartDiscoveryArguments( + services: services.map((uuid) => uuid.name), + ).writeToBuffer(), + ), + ], + ); + }, + ); + test( + '${proto.MessageCategory.CENTRAL_STOP_DISCOVERY}', + () async { + await central.stopDiscovery(); + expect( + calls, + [ + isMethodCall( + proto.MessageCategory.CENTRAL_STOP_DISCOVERY.name, + arguments: null, + ), + ], + ); + }, + ); + test( + '${proto.MessageCategory.CENTRAL_DISCOVERED} EVENT', + () async { + final actual = await central.discovered.first; + final address = MAC('aa:bb:cc:dd:ee:ff'); + expect(actual.address, address); + final rssi = -50; + expect(actual.rssi, rssi); + final advertisements = { + 0xff: [0xff, 0xee, 0xdd, 0xcc, 0xbb, 0xaa], + }; + expect(actual.advertisements, advertisements); + }, + ); + test( + '${proto.MessageCategory.CENTRAL_CONNECT}', + () async { + final address = MAC('aa:bb:cc:dd:ee:ff'); + final actual = await central.connect(address); + expect(actual.mtu, 23); + expect(actual.services.length, 1); + final service = actual.services.values.first; + expect(service.uuid, UUID('1800')); + expect(service.characteristics.length, 1); + final characteristic = service.characteristics.values.first; + expect(characteristic.uuid, UUID('2A00')); + expect(characteristic.descriptors.length, 1); + expect(characteristic.canRead, true); + expect(characteristic.canWrite, true); + expect(characteristic.canWriteWithoutResponse, true); + expect(characteristic.canNotify, true); + final descriptor = characteristic.descriptors.values.first; + expect(descriptor.uuid, UUID('2900')); + expect( + calls, + [ + isMethodCall( + proto.MessageCategory.CENTRAL_CONNECT.name, + arguments: proto.ConnectArguments( + address: address.name, + ).writeToBuffer(), + ), + ], + ); + }, + ); + test( + '${proto.MessageCategory.GATT_DISCONNECT}', + () async { + final address = MAC('aa:bb:cc:dd:ee:ff'); + final gatt = await central.connect(address); + await gatt.disconnect(); + expect( + calls, + [ + isMethodCall( + proto.MessageCategory.CENTRAL_CONNECT.name, + arguments: proto.ConnectArguments( + address: address.name, + ).writeToBuffer(), + ), + isMethodCall( + proto.MessageCategory.GATT_DISCONNECT.name, + arguments: proto.GattDisconnectArguments( + address: address.name, + id: 1000, + ).writeToBuffer(), + ), + ], + ); + }, + ); + test( + '${proto.MessageCategory.GATT_CONNECTION_LOST}', + () async { + final address = MAC('aa:bb:cc:dd:ee:ff'); + final gatt = await central.connect(address); + final actual = await gatt.connectionLost.first; + expect(actual, 19); + }, + ); + test( + '${proto.MessageCategory.GATT_CHARACTERISTIC_READ}', + () async { + final address = MAC('aa:bb:cc:dd:ee:ff'); + final gatt = await central.connect(address); + final service = gatt.services.values.first; + final characteristic = service.characteristics.values.first; + final actual = await characteristic.read(); + expect(actual, [0x01, 0x02, 0x03, 0x04, 0x05]); + expect( + calls, + [ + isMethodCall( + proto.MessageCategory.CENTRAL_CONNECT.name, + arguments: proto.ConnectArguments( + address: address.name, + ).writeToBuffer(), + ), + isMethodCall( + proto.MessageCategory.GATT_CHARACTERISTIC_READ.name, + arguments: proto.GattCharacteristicReadArguments( + address: address.name, + serviceUuid: service.uuid.name, + uuid: characteristic.uuid.name, + id: 3000, + ).writeToBuffer(), + ), + ], + ); + }, + ); + test( + '${proto.MessageCategory.GATT_CHARACTERISTIC_WRITE}', + () async { + final address = MAC('aa:bb:cc:dd:ee:ff'); + final gatt = await central.connect(address); + final service = gatt.services.values.first; + final characteristic = service.characteristics.values.first; + final value = [0x01, 0x02, 0x03, 0x04, 0x05]; + await characteristic.write(value, withoutResponse: true); + expect( + calls, + [ + isMethodCall( + proto.MessageCategory.CENTRAL_CONNECT.name, + arguments: proto.ConnectArguments( + address: address.name, + ).writeToBuffer(), + ), + isMethodCall( + proto.MessageCategory.GATT_CHARACTERISTIC_WRITE.name, + arguments: proto.GattCharacteristicWriteArguments( + address: address.name, + serviceUuid: service.uuid.name, + uuid: characteristic.uuid.name, + id: 3000, + value: value, + withoutResponse: true, + ).writeToBuffer(), + ), + ], + ); + }, + ); + test( + '${proto.MessageCategory.GATT_CHARACTERISTIC_NOTIFY}', + () async { + final address = MAC('aa:bb:cc:dd:ee:ff'); + final gatt = await central.connect(address); + final service = gatt.services.values.first; + final characteristic = service.characteristics.values.first; + await characteristic.notify(true); + expect( + calls, + [ + isMethodCall( + proto.MessageCategory.CENTRAL_CONNECT.name, + arguments: proto.ConnectArguments( + address: address.name, + ).writeToBuffer(), + ), + isMethodCall( + proto.MessageCategory.GATT_CHARACTERISTIC_NOTIFY.name, + arguments: proto.GattCharacteristicNotifyArguments( + address: address.name, + serviceUuid: service.uuid.name, + uuid: characteristic.uuid.name, + id: 3000, + state: true, + ).writeToBuffer(), + ), + ], + ); + }, + ); + test( + '${proto.MessageCategory.GATT_CHARACTERISTIC_NOTIFY} EVENT', + () async { + final address = MAC('aa:bb:cc:dd:ee:ff'); + final gatt = await central.connect(address); + final service = gatt.services.values.first; + final characteristic = service.characteristics.values.first; + final value = await characteristic.valueChanged.first; + expect(value, [0x0A, 0x0B, 0x0C, 0x0D, 0x0E]); + }, + ); + test( + '${proto.MessageCategory.GATT_DESCRIPTOR_READ}', + () async { + final address = MAC('aa:bb:cc:dd:ee:ff'); + final gatt = await central.connect(address); + final service = gatt.services.values.first; + final characteristic = service.characteristics.values.first; + final descriptor = characteristic.descriptors.values.first; + final actual = await descriptor.read(); + expect(actual, [0x05, 0x04, 0x03, 0x02, 0x01]); + expect( + calls, + [ + isMethodCall( + proto.MessageCategory.CENTRAL_CONNECT.name, + arguments: proto.ConnectArguments( + address: address.name, + ).writeToBuffer(), + ), + isMethodCall( + proto.MessageCategory.GATT_DESCRIPTOR_READ.name, + arguments: proto.GattDescriptorReadArguments( + address: address.name, + serviceUuid: service.uuid.name, + characteristicUuid: characteristic.uuid.name, + uuid: descriptor.uuid.name, + id: 4000, + ).writeToBuffer(), + ), + ], + ); + }, + ); + test( + '${proto.MessageCategory.GATT_DESCRIPTOR_WRITE}', + () async { + final address = MAC('aa:bb:cc:dd:ee:ff'); + final gatt = await central.connect(address); + final service = gatt.services.values.first; + final characteristic = service.characteristics.values.first; + final descriptor = characteristic.descriptors.values.first; + final value = [0x01, 0x02, 0x03, 0x04, 0x05]; + await descriptor.write(value); + expect( + calls, + [ + isMethodCall( + proto.MessageCategory.CENTRAL_CONNECT.name, + arguments: proto.ConnectArguments( + address: address.name, + ).writeToBuffer(), + ), + isMethodCall( + proto.MessageCategory.GATT_DESCRIPTOR_WRITE.name, + arguments: proto.GattDescriptorWriteArguments( + address: address.name, + serviceUuid: service.uuid.name, + characteristicUuid: characteristic.uuid.name, + uuid: descriptor.uuid.name, + id: 4000, + value: value, + ).writeToBuffer(), + ), + ], + ); + }, + ); }