2015-12-20 4 views
3

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

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)?

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

+0

'gatttool' очень тонкий. Вместо этого попробуйте 'char-write-cmd 0x25 02' (то есть без значения' 0x' в значении). – kaylum

+1

Я бы не использовал 'gatttool', поскольку у меня никогда не было хорошего опыта с ним. Попробуйте 'bluetoothctl' или' btgatt-client' вместо этого и посмотрите, обнаружите ли вы, что работаете лучше для вас. Также обратите внимание, что дескрипторы не совпадают с значениями. – Zimano

+0

проверить, есть ли у вас права на запись, а также char-write-cmd не имеет никакого ответа, поэтому лучше получить для char-write-req; если у вас нет разрешений, это вызовет ошибку – Jagdish

ответ

3

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

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

+0

'hcidump' также очень устаревший инструмент, который больше не поддерживается! Попробуйте 'btmon' :) – Zimano

+0

@ Zimano отредактирован. –

+0

Отлично! Хороший, надежный ответ! – Zimano