С помощью пульсометра Bluetooth / ANT + без маркировки я могу легко получить данные HRM, используя gatttool
:
<MAC address>> connect
Attempting to connect to <MAC address>
Connection successful
<MAC address>> primary
(...)
<MAC address>> char-desc 0x000c 0x0011
(...)
<MAC address>> char-write-req 0x000f 0100
Characteristic value was written successfully
Notification handle = 0x000e value: 16 34 e4 04
Notification handle = 0x000e value: 16 34 a5 04
Notification handle = 0x000e value: 16 33 ea 04
Notification handle = 0x000e value: 16 33 de 04
С этим я отправляю на обработку 0x000f
, что составляет 00002902-0000-1000-8000-00805f9b34fb
, куда мне нужно отправить запрос ( do c для 0x2902 ), и я получаю ответы от другого дескриптора ( do c для 0x2a37 ).
Я уже немного смущен полезной нагрузкой 0100
, которую мы отправляем. Spe c для 0x2902
говорит, что мы должны отправить 16 бит, а 0x0100
равно 0b100000000
. Это приводит к 0b0000000100000000
или 0b1000000000000000
? Почему мы отправляем 0x0100
, а не 0x8000
(то есть 1
с 15 0
)?
В любом случае 01
, 010
, 0100
, 01000
будут работать, но больше цифр не получится. Разве он не должен потерпеть неудачу уже с 5 цифрами, так как 4 шестнадцатеричных символа составляют 16 бит? В любом случае, 01
работает (уведомления включены, индикация выключена?), 02
не приведет к обновлениям (уведомления отключены, индикация включена?), 03
работает (уведомления включены, индикация включена?). Правильно ли мое понимание?
Теперь я беру свой пульсометр Garmin (это Garmin HRM Dual). Я могу просто подключиться к нему через Bluetooth, я могу найти правильный дескриптор для взаимодействия с HRM (дескриптор, который соответствует UUID 0x2902
), но когда я использую gatttool
, чтобы отправить char-write-req
к дескриптору, как ранее , это говорит, что значение было написано, но ничего не происходит. Я пробовал несколько значений, но ничего не происходит.
Я что-то упустил? Есть ли какой-то дополнительный шаг, который необходимо предпринять перед вызовом дескриптора HRM? Спасибо.