使用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测量。再次感谢!
如果我的问题不清楚或需要更多信息,请在评论中让我知道。我很高兴根据需要提供其他信息。感谢您在阅读和制作建议书/指针方面的时间。
答案 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
由于没有电池服务,您将找不到任何与电池服务相关的特性,例如电池电量,电池电量状态,电池电量状态等。
参考文献: