Как извлечь значение веса из шестнадцатеричного значения Bluetooth LE (SIG) - PullRequest
1 голос
/ 12 марта 2019

Я разрабатываю приложение xamarin android для подключения к Bluetooth-весу с низким энергопотреблением. Я уже могу подключиться к устройству, чтобы изучить его услуги и характеристики, однако я сталкиваюсь с некоторыми проблемами при извлечении его стоимости.

Весы реализуют стандарты Bluetooth SIG, поэтому я ожидал, что у них будет служба весовой шкалы (org.bluetooth.service.weight_scale) и характеристика измерения веса (org.bluetooth.characteristic.weight_measurement). По-видимому, нет.

Изучение сервисов устройства, сервисы чтения считаются «неизвестной услугой» (0000ffe0-0000-1000-8000-00805f9b34fb) и характеристические швы - «Данные ключей TI SensorTag» (0000ffe1-0000-1000-8000) -00805f9b34fb).

Вот несколько примеров показаний от упомянутой службы:

  • За 78,4 кг я получил E7-58-01-06-20
  • За 81,6 кг я получил E7-58-01-06-60
  • За 81,7 кг я получил E7-58-01-06-62
  • За 118,6 кг я получил E7-58-01-09-44

Шкала поддерживает считывание веса, жира, воды в организме, мышечной массы, костной массы, базовой скорости метаболизма и активной скорости метаболизма. Я думаю, что я использую режим только для чтения веса. Я уже преобразовал шестнадцатеричные значения в десятичные, но выходные значения не являются прямыми.

Какую формулу я должен использовать, чтобы извлечь значение?

1 Ответ

0 голосов
/ 12 марта 2019

Если вы заботитесь только о двух последних байтах вашего значения характеристики: 06-20, 06-60, 0--62 и 09-44. Вы можете сравнить их с весом, указанным на шкале:

 > 0x620/78.4 -> 20.0
 > 0x660/81.6 -> 20.0
 > 0x662/81.7 -> 20.0
 > 0x944/118.6 -> 20.0

Это означает, что каждая цифра в числе, представленном двумя младшими байтами характеристического значения, равна 1/20 от одного килограмма = 50 г.

Чтобы отобразить вес в вашем приложении, просто преобразуйте последние два байта значения характеристики в целочисленное представление вашего хоста (ntohs или эквивалентное https://linux.die.net/man/3/ntohs) и разделите его на 20.

...