使用Swift在WriteValue之后从BLE设备特征读取值

时间:2019-03-27 16:14:16

标签: swift bluetooth-lowenergy

我正在我的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。

预先感谢

0 个答案:

没有答案