swift - CBService /CB 特性在 RTOS 管理器写入 RXMqtt 消息时返回 nil
问题描述
我们的 react native 应用程序通过蓝牙与 ESP 32 设备交互并传输 mqtt 消息。在设备之间将重新启动多次。这会导致应用程序崩溃并在 RTOS 库中出现错误 CBService/CBcharacteristics 在写入 RXMqttMessage 时返回 null
应用程序崩溃的 RTOSManager 文件
internal func writeValueToRXMessage(peripheral: CBPeripheral, characteristic: CBCharacteristic, data: Data) {
DispatchQueue.main.async {
guard let mtu = self.devices[peripheral.identifier]?.mtu else {
self.debugPrint("[\(peripheral.identifier.uuidString)][ERROR] Mtu unknown")
return
}
if data.count > mtu - 3 {
guard let characteristic = characteristic.service.characteristicOf(uuid: AmazonFreeRTOSGattCharacteristic.RXLargeMqttMessage) ?? characteristic.service.characteristicOf(uuid: AmazonFreeRTOSGattCharacteristic.RXLargeNetworkMessage) else {
self.debugPrint("[\(peripheral.identifier.uuidString)][ERROR] RXLargeMqttMessage or RXLargeNetworkMessage characteristic doesn't exist")
return
}
if self.devices[peripheral.identifier]?.rxLotDataQueues[characteristic.service.uuid.uuidString] == nil {
self.devices[peripheral.identifier]?.rxLotDataQueues[characteristic.service.uuid.uuidString] = [data]
} else {
self.devices[peripheral.identifier]?.rxLotDataQueues[characteristic.service.uuid.uuidString]?.append(data)
}
if self.devices[peripheral.identifier]?.rxLotDataQueues[characteristic.service.uuid.uuidString]?.count == 1 {
self.writeValueToRXLargeMessage(peripheral: peripheral, characteristic: characteristic)
}
return
}
guard let characteristic = characteristic.service.characteristicOf(uuid: AmazonFreeRTOSGattCharacteristic.RXMqttMessage) ?? characteristic.service.characteristicOf(uuid: AmazonFreeRTOSGattCharacteristic.RXNetworkMessage) else {
self.debugPrint("[\(peripheral.identifier.uuidString)][ERROR] RXMqttMessage or RXNetworkMessage characteristic doesn't exist")
return
}
peripheral.writeValue(data, for: characteristic, type: .withResponse)
}
}
来自应用程序 currentDevice = UUID(uuidString: deviceid) 的本机代码 let device: AmazonFreeRTOSDevice = AmazonFreeRTOSManager.shared.devices[currentDevice!]!
device.connect(reconnect: true, credentialsProvider: provider)
解决方案
推荐阅读
- angular - 反应形式:不能绑定到“formGroup”,因为它不是“form”的已知属性
- excel - 使用索引匹配从日期中获取所需的结果
- r - 如何在 R 中组合 sf 元素(层)
- arrays - 这个反汇编的数组的开始和结束是什么?
- flutter - 如何使用自定义画家在 Flutter 中为容器绘制尾部
- kubernetes - Istio 入口网关随机返回 507 响应
- python - 传递给范围python循环中的下一个数字
- c# - 防止在导航 ASP.net MVC 5.xx 上重新加载整页
- javascript - PromoClick 仅在页面上执行一次
- facebook - Facebook 拒绝了这些权限