ReadValue из характеристики устройства BLE после WriteValue с использованием Swift - PullRequest
0 голосов
/ 27 марта 2019

Я реализую в своем приложении связь через 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. Если я использую делегат didUpdateValue, все работает, но это в асинхронном режиме

    func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) {

      if characteristic == txCharacteristic {

        recived.removeAll()
        recived.append(contentsOf: characteristic.value!)
      }

    }
    }

Есть ли решение для создания синхронизированных writeValue и readValue, другими словами, мне нужно извлечь Characteristic.value, используя readValue в том же цикле For.

Заранее спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...