如何从iOS应用程序中检索蓝牙外围设备中存储的数据
我有一个Swift iOS项目,它能够检测蓝牙Accu-Chek guide外围设备,获得所需的血糖服务和特征(血糖测量、血糖测量上下文和远程访问控制点),但无法获得Accu-Chek设备中存储的数据。当我写入远程访问控制点特征以便检索所有存储的数据时,“didWriteValueFor characteristic”委托函数接收到“未知ATT错误” 以下是我如何通过写入RACP(远程访问控制点特征)来请求数据: 我只在检测到特征(包括RACP)后触发上述代码。使用“DidDiscoveryCharacteristicsFor service”委托方法中的日志,我确信已发现所需的特征 我还确信RACP允许使用响应进行写入,因为我已将此记录为真:如何从iOS应用程序中检索蓝牙外围设备中存储的数据,ios,swift,bluetooth,core-bluetooth,gatt,Ios,Swift,Bluetooth,Core Bluetooth,Gatt,我有一个Swift iOS项目,它能够检测蓝牙Accu-Chek guide外围设备,获得所需的血糖服务和特征(血糖测量、血糖测量上下文和远程访问控制点),但无法获得Accu-Chek设备中存储的数据。当我写入远程访问控制点特征以便检索所有存储的数据时,“didWriteValueFor characteristic”委托函数接收到“未知ATT错误” 以下是我如何通过写入RACP(远程访问控制点特征)来请求数据: 我只在检测到特征(包括RACP)后触发上述代码。使用“DidDiscoveryCh
if self.RACP!.properties.contains(.write){
print("contains write...")
}
这是“DidDiscoveryCharacteristicfor service:”
可能是由于“didWriteValueFor characteristic”中的“Unknown ATT error”,因此未调用“didUpdateValueFor characteristic:”委托方法
请提供有关错误以及如何检索外围设备中存储的数据的建议。谢谢
if self.RACP!.properties.contains(.write){
print("contains write...")
}
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
}
}
}
}