Чтение характеристики измерения температуры Bluetooth (0x2A1C) в Swift - PullRequest
0 голосов
/ 04 декабря 2018

Я подключился к устройству BLE, которое имеет службу термометра работоспособности ( 0x1809 ).Я пытаюсь декодировать характеристику измерения температуры ( 0x2A1C ) из байтов в температуру в градусах Цельсия.

По это старое сообщение Swift 2 Я считаю, что основная проблемас моим кодом из-за типа Float Swift и другого типа Bluetooth Float.

Буду признателен за любую помощь!

private func temperatureMeasurement(from characteristic: CBCharacteristic) -> Float {
  guard let characteristicData = characteristic.value else { return -1 }

  var byteArray = [UInt8](characteristicData)

  let flags = byteArray[0]

  let temperatureIsInFahrenheit = (flags & 0x01) != 0
  let hasTimestamp = (flags & 0x02) != 0
  let hasTemperatureType = (flags & 0x04) != 0

  let mantissa1 = Float(byteArray[1])
  let mantissa2 = Float(byteArray[2]) * 256
  let mantissa3 = Float(byteArray[3]) * 256 * 256
  let mantissa = mantissa1 + mantissa2 + mantissa3
  let exponent = Float(byteArray[4])
  let temperatureMeasurement = mantissa * pow(10, exponent)

  return temperatureMeasurement
}
...