问题描述
我有一个Swift iOS项目,该项目能够检测蓝牙Accu-Chek指南外围设备,获得所需的血糖服务和特征(血糖测量,血糖测量上下文和远程访问控制点),但无法获取数据存储在Accu-Chek设备中。当我写远程访问控制点特征以便检索所有存储的数据时,“ didWriteValueFor特征”委托函数会收到“未知ATT错误”。
这是我通过写入RACP(远程访问控制点特征)来请求数据的方式:
let bytes:[UInt8] = [0x01,0x01]
let myData:Data = Data(bytes: bytes,count: 2)
self.connectedPeripheral?.writeValue(myData,for: self.RACP!,type: .withResponse)
仅在检测到包括RACP在内的特征后,才触发上述代码。通过使用“ diddiscovercharacteristicsFor service”委托方法中的日志,我确定已经发现了所需的特征。
我也确信RACP允许写入响应,因为我已将其记录为真实:
if self.RACP!.properties.contains(.write){
print("contains write...")
}
这是“ diddiscoverCharacteristicFor服务:”
func peripheral(_ peripheral: CBPeripheral,diddiscovercharacteristicsFor service: CBService,error: Error?) {
if let errorService = error{
print("error diddiscovercharacteristicsFor \(errorService.localizedDescription)")
glucoseperipherals = []
deviceTable.reloadData()
centralManager.scanForperipherals(withServices: [glucoseServiceCBUUID])
return
}
guard let characteristics = service.characteristics else { return }
// Set notifications for glucose measurement and context
// 0x2a18 is glucose measurement,0x2a34 is context,0x2a52 is RACP,// 0x2A51 is glucose Feature
for characteristic in characteristics {
if (characteristic.uuid == glucoseMeasurementCharacteristicCBUUID ||
characteristic.uuid == glucoseMeasurementContextCharacteristicCBUUID ||
characteristic.uuid == recordAccessControlPointCharacteristicCBUUID)
{
print("diddiscovercharacteristicsFor characteristics.uid ",characteristic.uuid)
print("diddiscovercharacteristicsFor characteristics ",characteristic)
if characteristic.uuid == glucoseMeasurementCharacteristicCBUUID{
self.glucoseMeasurementCharacteristic = characteristic
}
if characteristic.uuid == glucoseMeasurementContextCharacteristicCBUUID{
self.glucoseMeasurementContextCharacteristic = characteristic
}
if characteristic.properties.contains(.read) {
dispatchQueue.main.asyncAfter(deadline: .Now() + 0.5) {
peripheral.readValue(for: characteristic)
}
}
if characteristic.properties.contains(.notify) {
dispatchQueue.main.asyncAfter(deadline: .Now() + 1.0) {
peripheral.setNotifyValue(true,for: characteristic)
}
}
if characteristic.properties.contains(.indicate) {
print("value is indicate for characteristics.uid ",characteristic.uuid)
}
if characteristic.uuid == recordAccessControlPointCharacteristicCBUUID {
self.RACP = characteristic
}
}
}
}
也许是由于“ didWriteValueFor特性”中的“未知ATT错误”,所以未调用“ didUpdateValueFor特性:”委托方法。
请提供有关错误以及如何检索外围设备中存储的数据的建议。谢谢。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)