我正在我的App中通过BLE与运动设备实现通信,该运动设备的工作原理如下: 发现完成并建立连接后,我可以发送类似的消息来获取我的应用程序有用的返回数据:
[0x01、0x00、0xFF,0x01、0x03、0x00、0x36,块,0xC0]
其中“阻止”是我需要从设备中获取的下一个阻止。
我目前使用以下函数编写:
func outgoingData () {
var block: UInt8 = 0x00
for index in 1...10 {
block = block + 1
let bytes : [UInt8] = [0x01, 0x00, 0xFF, 0x01, 0x03, 0x00, 0x36, block, 0xC0]
writeNewValue(data: bytes)
readNewValue(dataBack : byte)
// dataBack should contain characteristic.value
}
}
// writeNewValue functions
func writeNewValue(data: [UInt8]){
let valueString = NSData(bytes: data, length: data.count)
print (valueString)
if let blePeripheral = blePeripheral{
if let txCharacteristic = txCharacteristic {
blePeripheral.writeValue(valueString as Data, for: txCharacteristic, type: CBCharacteristicWriteType.withoutResponse)
}
}
}
问题在于,在writeValue之后,设备应发送一些数据,但具有readValue功能的设备仅返回0x00值。 如果我使用委托didUpdateValueFor进行所有工作,但这处于异步模式
func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) {
if characteristic == txCharacteristic {
recived.removeAll()
recived.append(contentsOf: characteristic.value!)
}
}
}
是否存在使synwriteValue和readValue同步的解决方案,换句话说,我需要在同一Loop For中使用readValue检索Characteristic.value。
预先感谢