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

问题描述

我有一个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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...