如何查找与BLE设备的不同UUID对应的句柄

时间:2019-08-18 04:57:44

标签: bluetooth-lowenergy gatt bluetooth-gatt gatttool

使用gattool,我可以找到对应于我的智能手表手柄的UUID,如下所示:

Device: MAC address
Name: MS1020
Alias: MS1020
Paired: yes
Trusted: yes
Blocked: no
Connected: no
LegacyPairing: no
UUID: Generic Access Profile    (00001800-0000-1000-8000-00805f9b34fb)
UUID: Unknown                   (0000cc00-0000-1000-8000-00805f9b34fb)
UUID: Tencent Holdings Limited  (0000fee7-0000-1000-8000-00805f9b34fb)
UUID: Vendor specific           (00010203-0405-0607-0809-0a0b0c0d1912)
ManufacturerData Key: 0x0211
ManufacturerData Value:
[LE]> characteristics
handle: 0x0002, char properties: 0x12, char value handle: 0x0003, uuid: 2b120008-0600-072a-0100-050200042a00
handle: 0x0004, char properties: 0x02, char value handle: 0x0005, uuid: 0708090a-0b0c-0d2b-1200-080600072a01
handle: 0x0007, char properties: 0x06, char value handle: 0x0008, uuid: 00010203-0405-0607-0809-0a0b0c0d2b12
handle: 0x000b, char properties: 0x08, char value handle: 0x000c, uuid: 0000fec7-0000-1000-8000-00805f9b34fb
handle: 0x000d, char properties: 0x20, char value handle: 0x000e, uuid: 0000fec8-0000-1000-8000-00805f9b34fb
handle: 0x0010, char properties: 0x02, char value handle: 0x0011, uuid: 0000fec9-0000-1000-8000-00805f9b34fb
handle: 0x0012, char properties: 0x32, char value handle: 0x0013, uuid: 0000fea1-0000-1000-8000-00805f9b34fb
handle: 0x0015, char properties: 0x2a, char value handle: 0x0016, uuid: 0000fea2-0000-1000-8000-00805f9b34fb
handle: 0x0019, char properties: 0x0a, char value handle: 0x001a, uuid: 0000cc02-0000-1000-8000-00805f9b34fb
handle: 0x001b, char properties: 0x12, char value handle: 0x001c, uuid: 0000cc03-0000-1000-8000-00805f9b34fb
handle: 0x001e, char properties: 0x12, char value handle: 0x001f, uuid: 0000cc04-0000-1000-8000-00805f9b34fb
handle: 0x0021, char properties: 0x1a, char value handle: 0x0022, uuid: 0000cc05-0000-1000-8000-00805f9b34fb
handle: 0x0024, char properties: 0x08, char value handle: 0x0025, uuid: 0000cc06-0000-1000-8000-00805f9b34fb

[LE]> primary
attr handle: 0x0001, end grp handle: 0x0005 uuid: 00001800-0000-1000-8000-00805f9b34fb
attr handle: 0x0006, end grp handle: 0x0009 uuid: 00010203-0405-0607-0809-0a0b0c0d1912
attr handle: 0x000a, end grp handle: 0x0017 uuid: 0000fee7-0000-1000-8000-00805f9b34fb
attr handle: 0x0018, end grp handle: 0x0025 uuid: 0000cc00-0000-1000-8000-00805f9b34fb

[LE]> char-desc
handle: 0x0001, uuid: 00002800-0000-1000-8000-00805f9b34fb
handle: 0x0002, uuid: 00002803-0000-1000-8000-00805f9b34fb
handle: 0x0003, uuid: 00002a00-0000-1000-8000-00805f9b34fb
handle: 0x0004, uuid: 00002803-0000-1000-8000-00805f9b34fb
handle: 0x0005, uuid: 00002a01-0000-1000-8000-00805f9b34fb
handle: 0x0006, uuid: 00002800-0000-1000-8000-00805f9b34fb
handle: 0x0007, uuid: 00002803-0000-1000-8000-00805f9b34fb
handle: 0x0008, uuid: 00010203-0405-0607-0809-0a0b0c0d2b12
handle: 0x0009, uuid: 00002901-0000-1000-8000-00805f9b34fb
handle: 0x000a, uuid: 00002800-0000-1000-8000-00805f9b34fb
handle: 0x000b, uuid: 00002803-0000-1000-8000-00805f9b34fb
handle: 0x000c, uuid: 0000fec7-0000-1000-8000-00805f9b34fb
handle: 0x000d, uuid: 00002803-0000-1000-8000-00805f9b34fb
handle: 0x000e, uuid: 0000fec8-0000-1000-8000-00805f9b34fb
handle: 0x000f, uuid: 00002902-0000-1000-8000-00805f9b34fb
handle: 0x0010, uuid: 00002803-0000-1000-8000-00805f9b34fb
handle: 0x0011, uuid: 0000fec9-0000-1000-8000-00805f9b34fb
handle: 0x0012, uuid: 00002803-0000-1000-8000-00805f9b34fb
handle: 0x0013, uuid: 0000fea1-0000-1000-8000-00805f9b34fb
handle: 0x0014, uuid: 00002902-0000-1000-8000-00805f9b34fb
handle: 0x0015, uuid: 00002803-0000-1000-8000-00805f9b34fb
handle: 0x0016, uuid: 0000fea2-0000-1000-8000-00805f9b34fb
handle: 0x0017, uuid: 00002902-0000-1000-8000-00805f9b34fb
handle: 0x0018, uuid: 00002800-0000-1000-8000-00805f9b34fb
handle: 0x0019, uuid: 00002803-0000-1000-8000-00805f9b34fb
handle: 0x001a, uuid: 0000cc02-0000-1000-8000-00805f9b34fb
handle: 0x001b, uuid: 00002803-0000-1000-8000-00805f9b34fb
handle: 0x001c, uuid: 0000cc03-0000-1000-8000-00805f9b34fb
handle: 0x001d, uuid: 00002902-0000-1000-8000-00805f9b34fb
handle: 0x001e, uuid: 00002803-0000-1000-8000-00805f9b34fb
handle: 0x001f, uuid: 0000cc04-0000-1000-8000-00805f9b34fb
handle: 0x0020, uuid: 00002902-0000-1000-8000-00805f9b34fb
handle: 0x0021, uuid: 00002803-0000-1000-8000-00805f9b34fb
handle: 0x0022, uuid: 0000cc05-0000-1000-8000-00805f9b34fb
handle: 0x0023, uuid: 00002902-0000-1000-8000-00805f9b34fb
handle: 0x0024, uuid: 00002803-0000-1000-8000-00805f9b34fb
handle: 0x0025, uuid: 0000cc06-0000-1000-8000-00805f9b34fb

但是,我很困惑如何确定哪个手柄用于哪个手柄 BLE功能。例如,https://www.bluetooth.com/specifications/gatt/characteristics/上的页面显示电池电量规格功能位于0x2A19。但是,我不知道在上面的char-desc输出中从哪里或如何获取与0x2A19相对应的UUID。我怎么得到这个?

编辑:感谢您在回答中提供了非常有用的说明(两者都非常好)。我已经在上面添加了特征信息。我也有一些可能有用或可能没有用的附加信息。

通过反复试验,我能够确定血压测量值(从按下表带上的按钮时获得)是从通知句柄的第三和第四项(以十六进制格式)获得的(请参阅输出) ):

Notification handle = 0x001f value: f3 14 73 4d 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

但是,当什么都不做时,即没有按下任何按钮,我得到:

[LE]> char-read-hnd 0x001f
Characteristic value/descriptor: 07 00 04 4e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 

同一通知句柄在第11个条目中给出了心律(按下该按钮时):

Notification handle = 0x001f value: 20 00 00 00 00 00 00 00 00 00 63 00 00 00 00 00 00 00 00 00 

但是,在所有情况下,第一个条目也已更改(并且它们似乎是操作和非操作唯一的)。

例如,我想知道我是否可以访问该信息,以及如何触发BP测量。再次感谢!

如果我的问题不清楚或需要更多信息,请在评论中让我知道。我很高兴根据需要提供其他信息。感谢您在阅读和制作建议书/指针方面的时间。

2 个答案:

答案 0 :(得分:3)

电池电量特性不是“在0x2A19处”,而是UUID 00002A19-0000-1000-8000-00805f9b34fb。您的设备似乎没有这种特性。注意Battery Service被允许声明为辅助服务,因此“主”命令可能不会发现它。

编辑后更新

不幸的是,该设备在非标准服务(句柄0x18,类型0000cc00-0000-1000-8000-00805f9b34fb)内部使用了非标准特性(句柄0x1e,类型0000cc04-0000-1000-8000-00805f9b34fb)数据。如果有一种方法可以触发您想要的测量,则它属于逆向工程。

TL; DR

Bluetooth Specification希望允许特定于供应商的GATT功能与标准功能共存,而无需全局目录。为此,GATT中的所有内容都是通过ID(128位UUID)指定的,任何人都可以生成它而无需真正关心冲突。

  • 所有内容均由UUID输入,请参见3.G.2.5.1:

      

    属性类型是描述属性值的UUID。

  • 每个服务都有一个类型,请参见3.G.3.1:

      

    服务声明是一种属性,其属性类型设置为“主要服务”或“次要服务”的UUID。 [...] 一种   客户端可能会忽略具有未知服务的任何服务定义   UUID。未知的服务UUID是不支持的服务的UUID。

  • evey特性也具有类型,请参见3.G.3.3.1:

      

    特征声明是一种属性,其特征类型设置为“特征”的UUID,属性值设置为   特性,特性值属性句柄   和特征性UUID。

UUID的分配很简单,上面的设备中的转储可以很好地说明我们的情况:

  • 拥有standard-defined uses,坚持使用标准UUID,

  • Bluetooth SIG将其成员提供给get a Bluetooth-based UUID以优化使用,因此0000fee7-0000-1000-8000-00805f9b34fb符合规范且特定于供应商(SIG在2014年4月24日分配给Tencent Holdings Limited

  • 从头开始生成随机UUID并将其用于自定义目的。 00010203-0405-0607-0809-0a0b0c0d1912看起来很合规,但看起来一点也不随机。别人可能会偶然获得相同的价值。

OTOH,我找不到任何定义0000cc00-0000-1000-8000-00805f9b34fb的蓝牙规范,它看起来不合规。

蓝牙规范会自行处理,并通过两种方式针对自己的规范使用来优化UUID流程:

  • 为使它们易于查找,所有蓝牙定义的ID的公用基数为nnnnnnnn-0000-1000-8000-00805f9b34fb,其中nnnnnnnn是32位值,冲突不可接受,因此必须分配时要严格控制。参见3.B.2.5.1:

      

    为减轻存储和传输128位UUID值的负担,已预先分配了一系列UUID值,以便分配给经常使用的已注册目的。

    当您查看GATT Service / GATT Characteristics页时,实际上是在查看基于蓝牙的UUID列表,即,当您在{ gatttool的输出。

  • 作为一种优化,GATT协议允许将基于Bluettoth的UUID编码为较短的变体,即“ 16位”和“ 32位”变体,即不重复-0000-1000-8000-00805f9b34fb。有关此类示例,请参见3.G.3.3.1中的表3.4。

答案 1 :(得分:1)

primary的输出告诉您设备支持哪些服务,例如:uuid: 00001800-0000-1000-8000-00805f9b34fb的第一段是00001800,它是通用访问服务(org.bluetooth.service。 generic_access,0x1800)。

primary的输出未列出电池服务(org.bluetooth.service.battery_service,0x180F):

[LE]> primary
attr handle: 0x0001, end grp handle: 0x0005 uuid: 00001800-0000-1000-8000-00805f9b34fb
attr handle: 0x0006, end grp handle: 0x0009 uuid: 00010203-0405-0607-0809-0a0b0c0d1912
attr handle: 0x000a, end grp handle: 0x0017 uuid: 0000fee7-0000-1000-8000-00805f9b34fb
attr handle: 0x0018, end grp handle: 0x0025 uuid: 0000cc00-0000-1000-8000-00805f9b34fb

由于没有电池服务,您将找不到任何与电池服务相关的特性,例如电池电量,电池电量状态,电池电量状态等。

参考文献: