如何从iOS应用程序中检索蓝牙外围设备中存储的数据

如何从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

我有一个Swift iOS项目,它能够检测蓝牙Accu-Chek guide外围设备,获得所需的血糖服务和特征(血糖测量、血糖测量上下文和远程访问控制点),但无法获得Accu-Chek设备中存储的数据。当我写入远程访问控制点特征以便检索所有存储的数据时,“didWriteValueFor characteristic”委托函数接收到“未知ATT错误”

以下是我如何通过写入RACP(远程访问控制点特征)来请求数据:

我只在检测到特征(包括RACP)后触发上述代码。使用“DidDiscoveryCharacteristicsFor service”委托方法中的日志,我确信已发现所需的特征

我还确信RACP允许使用响应进行写入,因为我已将此记录为真:

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
                }
            }
        }
    }