gpt4 book ai didi

具有多种服务的 Android BLE Gatt 服务器 - onCharacteristicWriteRequest() 句柄没有字符

转载 作者:行者123 更新时间:2023-11-29 00:53:47 25 4
gpt4 key购买 nike

我正在尝试构建具有多个自定义服务和多个特征的 BLE Gatt 服务器。

首先,我使用了 Google 示例:https://github.com/androidthings/sample-bluetooth-le-gattserver/tree/master/kotlin

这很简单,而且效果很好。我修改了 UUID 以适合我的,我可以毫无问题地接收通知和写入字符。

这是我定义服务和字符的地方:

fun createTimeService(): BluetoothGattService {
val service = BluetoothGattService(TIME_SERVICE,
BluetoothGattService.SERVICE_TYPE_PRIMARY)

// Current Time characteristic
val currentTime = BluetoothGattCharacteristic(CURRENT_TIME,
//Read-only characteristic, supports notifications
BluetoothGattCharacteristic.PROPERTY_READ or BluetoothGattCharacteristic.PROPERTY_NOTIFY,
BluetoothGattCharacteristic.PERMISSION_READ)
val configDescriptor = BluetoothGattDescriptor(CLIENT_CONFIG,
//Read/write descriptor
BluetoothGattDescriptor.PERMISSION_READ or BluetoothGattDescriptor.PERMISSION_WRITE)
currentTime.addDescriptor(configDescriptor)

// Local Time Information characteristic
val localTime = BluetoothGattCharacteristic(LOCAL_TIME_INFO,
BluetoothGattCharacteristic.PROPERTY_WRITE,
BluetoothGattCharacteristic.PERMISSION_WRITE)

service.addCharacteristic(currentTime)
service.addCharacteristic(localTime)

return service
}

fun createSerialService(): BluetoothGattService {
val service = BluetoothGattService(serialPortServiceID,
BluetoothGattService.SERVICE_TYPE_PRIMARY)

val serialData = BluetoothGattCharacteristic(serialDataCharacteristicID,
BluetoothGattCharacteristic.PROPERTY_WRITE,
BluetoothGattCharacteristic.PERMISSION_WRITE)

service.addCharacteristic(serialData)

return service
}

我在这里将它们应用到我的服务器:

 private fun startServer() {
bluetoothGattServer = bluetoothManager.openGattServer(this, gattServerCallback)

bluetoothGattServer?.addService(TimeProfile.createTimeService())
?: Log.w(TAG, "Unable to create GATT server")

bluetoothGattServer?.addService(TimeProfile.createSerialService())
?: Log.w(TAG, "Unable to create GATT server")

// Initialize the local UI
updateLocalUi(System.currentTimeMillis())
}

我希望在添加第二个服务后一切都会像以前一样工作。但是现在,如果我尝试写入/订阅任何特征(无论在哪个服务中),我都会收到:

W/BluetoothGattServer: onCharacteristicWriteRequest() no char for handle 42
W/BluetoothGattServer: onDescriptorWriteRequest() no desc for handle 43

最佳答案

我发现出了什么问题。显然你不能像我一样一次添加所有服务。在确认第一个服务之前添加第二个服务会导致将服务设置为空的异常。

最后我通过最初只添加一项服务解决了这个问题。然后在BleGattServerCallback()的onServiceAdded()回调中我一个接一个的开始。

关于具有多种服务的 Android BLE Gatt 服务器 - onCharacteristicWriteRequest() 句柄没有字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56855046/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com