Может ли служба пульсоксиметра (0x1822) отображаться на «nRF Connect for Mobile» - PullRequest
0 голосов
/ 06 мая 2019

Я использую arduino для отправки сообщения через BLE на мобильный телефон, который использует «nRF Connect for Mobile» для сканирования arduino.

Я могу получить информацию о кровяном давлении (0x1810) и термометре работоспособности (0x1809), но не удается выполнить обслуживание пульсоксиметра (0x1822)

Отображает только

Value: (0x) 00-63-00-50-00

То, что я ожидаю, это

00 = flags

63-00 = SLOAT of the SpO2 value, i.e. 99%

50-00 = SLOAT of the pulse rate, i.e. 80

Поскольку у него нет симптомов типа «неверный синтаксис данных», мне интересно, определен ли этот сервис этим приложением.

// For Blood Pressure service (0x1810): Blood Pressure Measurement (0x2A35)
byte flags1 = 0b00000000;
byte SYS = 100;
byte DIA = 160;
byte MAP = 120;
byte BP[8] = {flags1, SYS, 0, DIA, 0, MAP, 0};

pChara1_1->setValue(BP, 8);
pChara1_1->indicate();
// The mobile app (nRF Connect) display the systolic pressure: 100 mmHg successfully (also the diastolic and mean pressure)

// For Pulse Oximeter Service (0x1822): PLX Spot-check Measurement (0x2A5E)
byte flags3 = 0b00000000;
byte Sp = 99;
byte PR = 80;
byte SPO2[5] = {flags3, Sp, 0, PR, 0};

pChara3_1->setValue(SPO2, 5);
pChara3_1->indicate();

// For Pulse Oximeter Service (0x1822): PLX Features (0x2A60)
byte flags4[2] = {0b00000000,0b00000000};

pChara3_3->setValue(flags4, 2);

// It turns out "Value: (0x) 00-63-00-50-00"

Ожидаемые результаты

SpO2: 99%
Pulse rate: 80

Фактические результаты

Value: (0x) 00-63-00-50-00

1 Ответ

0 голосов
/ 06 мая 2019

В официальных спецификациях профиля общих атрибутов Bluetooth можно найти здесь:
https://www.bluetooth.com/specifications/gatt/

И ссылка на PDF на этой странице:
https://www.bluetooth.org/DocMan/handlers/DownloadDoc.ashx?doc_id=304965

значение, возвращаемое сервисным пульсоксиметром PLX, возвращает SFLOAT.
SFLOAT - это 16-битное слово, начинающееся со знака 4-битного целого числа со знаком, за которым следует 12-битная мантисса со знаком, каждая в форме дополнения по два.
Например:
Ваше OxiValue: 0x0063.
Экспонента: 0x0 равно 0.
Мантисса: 0x063 - это 99.
Результат: 99 * 10 ^ 0 - это 99.
Поскольку показатель степени равен 0, этот пример прост, так как 10 ^ 0 равен 1.
4-разрядное целое число со знаком в форме двойного дополнения представлено десятичным диапазоном - от 8 до + 7,
где -8 - это BIN 1000, 0 - это BIN 0000, а +7 - это BIN 0111.
0xB - это BIN 1011, дает DEC -4.
0x4 - БИН 0100 - 4 декабря.
0x3 - это BIN, 0011 - 3 декабря.
Это означает, что шестнадцатеричные числа больше 0x7 будут отрицательными до 0xF, что равно -1 декабря

Простой способ преобразовать SFLOAT в DEC - создать таблицу соответствия для всех 16 значений экспоненциальной части. Для части мантиссы, если это положительное число, просто преобразуйте шестнадцатеричное значение в целое число. для отрицательных чисел все сложнее. Вам придется Google это.

Теперь к nRF Connect for Mobile. Для представления этих чисел необходимо преобразовать их в целое число и использовать формат представления Int. Это возможно только в nRF Connect версии 4.19.0. и выше, в противном случае Вы должны отправить значение int в виде текста.

...