0

我正在尝试从蓝牙读取特征:

service uuid: 00001800-0000-1000-8000-00805f9b34fb
characteristic uuid: 00002a00-0000-1000-8000-00805f9b34fb

我不知道如何调用chr_get_valueand的这些方法chr_read。我知道关键是gdbus

4

1 回答 1

1

您提到的服务 UUID 是 GAP(通用访问配置文件)服务 UUID,您尝试读取的特征 UUID (00002a00-0000-1000-8000-00805f9b34fb) 是设备名称特征,并返回远程 LE 设备的设备名称。

bluez 通过其 DBus API 公开其所有功能。如果您想在 DBus 和 C 中执行此操作,您首先需要了解 DBus 协议和 libdbus 或任何其他 DBus 绑定 API。

有关文档和 python 示例,请参阅 bluez 源目录中的 doc/gatt-api.txt 和 test/example-gatt-client。test/example-gatt-client 有很好的 python 示例,可以帮助您了解如何扫描、查找和读取设备的特征。

否则,如果您知道要连接的设备的 BD_ADDR 地址(蓝牙设备地址),您可以使用 bluez 的 gatttool 工具简单地执行此任务。

例如,如果地址是 03:0F:45:65:43:FF 并且您的设备 hci 接口地址是 hci0 下面的命令序列读取 2a00 特征

[03:0F:45:65:43:FF][LE]> connect
Attempting to connect to 03:0F:45:65:43:FF
Connection successful

[03:0F:45:65:43:FF][LE]> primary
attr handle: 0x0001, end grp handle: 0x0005 uuid: 00001800-0000-1000-8000-00805f9b34fb
attr handle: 0x0006, end grp handle: 0x0009 uuid: 00001801-0000-1000-8000-00805f9b34fb
# lists all other primary services

[03:0F:45:65:43:FF][LE]> characteristics
handle: 0x0002, char properties: 0x02, char value handle: 0x0003, uuid: 00002a00-0000-1000-8000-00805f9b34fb
handle: 0x0004, char properties: 0x02, char value handle: 0x0005, uuid: 00002a01-0000-1000-8000-00805f9b34fb
# lists all other characteristics as well

[03:0F:45:65:43:FF][LE]> char-read-uuid 2a00
handle: 0x0003   value: 4d 79 20 6e 61 6d 65
于 2017-12-15T07:22:11.343 回答