对特征/描述符寻址和UUID感到困惑

时间:2018-09-05 19:42:16

标签: android bluetooth-lowenergy

我一直认为,对于BLE外设上的每个特性/服务/描述符,都有一个唯一的UUID。我发现UUID不仅描述了它提供的内容,而且还为其提供了唯一的句柄。基本上,我认为传输层用来识别外围设备和中央设备之间的特定实例。

但是在使用Android时,我发现要具有可通知的特征,不仅需要使用setCharacteristicNotification API,还必须在规范化的UUID({ {1}}),然后设置该描述符的值以允许适当的通知/指示。

我不明白的是,这意味着对于我的设备具有的每个可通知特征,它都有一个与该特定UUID关联的描述符。如果我有5个可通知的特征,则我将有5个不同的描述符,但所有描述符都具有相同的UUID。因此,当Android设备编写这些描述符之一时,它使用什么地址来指定外观相似的描述符?所有这些都是在引擎盖下神奇地管理吗?

1 个答案:

答案 0 :(得分:2)

UUID只是描述 什么样的服务/特征/描述符。

(G)ATT数据库建立在称为属性的元组(句柄,uuid,值)列表上。句柄是在传输层用于标识属性的16位唯一标识符。

GATT标准描述了一种对值进行分组的方法。首先,您具有特征声明,特征值和一组描述符,这些描述符被分组为一个特征。然后,您可以将服务定义以及多个特征分组到一项服务中。

您通过uuid查找客户端特征配置描述符,将其分组到您感兴趣的特征中,并向其写入0x0001。 Android的GATT客户端在内部查找其句柄并发送写请求。您的应用无法访问这些句柄;只有高级特征对象。

相关问题