С пульсометром 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
, куда мне нужно отправить запрос (doc для 0x2902), и я получаю ответы от другого дескриптора (doc для 0x2a37).
Меня уже немного смущает полезная нагрузка 0100
, которую мы отправляем. Спецификация для 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? Спасибо.