我一直认为,对于BLE外设上的每个特性/服务/描述符,都有一个唯一的UUID。我发现UUID不仅描述了它提供的内容,而且还为其提供了唯一的句柄。基本上,我认为传输层用来识别外围设备和中央设备之间的特定实例。
但是在使用Android时,我发现要具有可通知的特征,不仅需要使用setCharacteristicNotification
API,还必须在规范化的UUID({ {1}}),然后设置该描述符的值以允许适当的通知/指示。
我不明白的是,这意味着对于我的设备具有的每个可通知特征,它都有一个与该特定UUID关联的描述符。如果我有5个可通知的特征,则我将有5个不同的描述符,但所有描述符都具有相同的UUID。因此,当Android设备编写这些描述符之一时,它使用什么地址来指定外观相似的描述符?所有这些都是在引擎盖下神奇地管理吗?
答案 0 :(得分:2)
UUID只是描述 什么样的服务/特征/描述符。
(G)ATT数据库建立在称为属性的元组(句柄,uuid,值)列表上。句柄是在传输层用于标识属性的16位唯一标识符。
GATT标准描述了一种对值进行分组的方法。首先,您具有特征声明,特征值和一组描述符,这些描述符被分组为一个特征。然后,您可以将服务定义以及多个特征分组到一项服务中。
您通过uuid查找客户端特征配置描述符,将其分组到您感兴趣的特征中,并向其写入0x0001。 Android的GATT客户端在内部查找其句柄并发送写请求。您的应用无法访问这些句柄;只有高级特征对象。