GATTTool не может читать / писать характеристики

Я пытаюсь использовать gatttool bluez для записи некоторых демонстрационных характеристик на пользовательской плате BLE. В частности, я надеюсь записать в характеристику и прочитать значение обратно. Вот что я делаю (где 0x25 - дескриптор характеристики):

bluepy$ gatttool -b EC:24:B8:23:1C:39 -I
[   ][EC:24:B8:23:1C:39][LE]> connect
[CON][EC:24:B8:23:1C:39][LE]> char-read-hnd 0x0025 
[CON][EC:24:B8:23:1C:39][LE]> Characteristic value/descriptor: 01
[CON][EC:24:B8:23:1C:39][LE]> char-write-cmd 0x25 0x02
[CON][EC:24:B8:23:1C:39][LE]> char-read-hnd 0x0025
[CON][EC:24:B8:23:1C:39][LE]> Characteristic value/descriptor: 00

Кто-нибудь знает, почему считанное значение характеристики - 00, а не 02 (второй аргумент char-write-cmd)?

Любая помощь будет оценена по достоинству.


person WKleinberg    schedule 20.12.2015    source источник
comment
gatttool очень привередлив. Попробуйте вместо этого char-write-cmd 0x25 02 (то есть без 0x в значении).   -  person kaylum    schedule 21.12.2015
comment
Я бы избегал использования gatttool, поскольку у меня никогда не было хорошего опыта с ним. Попробуйте вместо этого bluetoothctl или btgatt-client и посмотрите, работает ли это лучше для вас. Также обратите внимание, что дескрипторы - это не то же самое, что значения.   -  person Zimano    schedule 21.12.2015
comment
проверьте, есть ли у вас права на запись, а также у char-write-cmd нет ответа, поэтому лучше получить char-write-req; если у вас нет разрешений, это вызовет ошибку   -  person Jagdish    schedule 21.12.2015
comment
@kaylum Ты прав! Удаление 0x сделало это. Означает ли это, что второй параметр считается шестнадцатеричным?   -  person WKleinberg    schedule 25.12.2015


Ответы (2)


Хотя существуют правила и стандарты для BLE, основное устройство может просто игнорировать их и делать свои собственные дела. Таким образом, возможно, что он перечисляет атрибут как чтение-запись и принимает новые значения, но затем просто отбрасывает значения. Так не должно быть, но нет причин, по которым нельзя.

Однако вы должны убедиться, что он действительно отправляет правильные данные, и проблема связана с устройством ... Как упоминалось в комментариях, gatttool может быть немного испорчен с интерпретацией входных данных (более новые версии лучше, чем старые), поэтому попробуйте 02 или 2 вместо 0x02. Вы также можете попробовать использовать btmon, чтобы проверить, действительно ли gatttool отправляет значение, которое вы намереваетесь.

person Tim Tisdall    schedule 21.12.2015
comment
hcidump также очень устаревший инструмент, который больше не поддерживается! Попробуйте btmon :) - person Zimano; 22.12.2015
comment
Понятно! 02 или 2 сделали это. Похоже, он уже по умолчанию интерпретировал аргумент как шестнадцатеричный. - person WKleinberg; 25.12.2015

Убедитесь, что какое-либо другое программное обеспечение не имеет доступа к Bluetooth.

У меня была аналогичная проблема при попытке прочитать характеристики, и красный узел также обращался к тому же устройству. gatttool подключился к устройству, но не смог связаться с чтением / записью. Как только я остановил node-red, он начал работать.

person Uros Mesaric    schedule 03.02.2020