繁体   English   中英

蓝牙LE:向设备发送“处理价值通知”

[英]Bluetooth LE: Send “Handle Value Notification” to device

我正在尝试重现发送到已连接到手机的Bluetooth LE设备的ATT数据包。

这有可能吗?

我已经弄清楚了数据包的外观,只是无法把头包裹在GATT上,在这种特定情况下,它如何转换为ATT。


Wireshk转储看起来像这样:

localhost ()    remote ()   ATT 26  Sent Handle Value Notification, Handle: 0x0035 (Unknown)

Bluetooth Attribute Protocol
  Opcode: Handle Value Notification (0x1b)
    0... .... = Authentication Signature: False
    .0.. .... = Command: False
    ..01 1011 = Method: Handle Value Notification (0x1b)
  Handle: 0x0035 (Unknown)
  Value: 0a0b313233343536373839303132

我已经弄清楚,这里的实际应用程序有效负载从句柄0x0035开始,其中0x0a 0x0b是一些自定义控件字符,之后的所有内容都是数字(123456789012),完全符合我的预期。


如何将“句柄”转换为GATT协议? 这是在Android GATT中通过UUID完成的吗? 如果我遍历该设备上的所有服务,就会得到一堆服务,大量特征,描述符,我会迷失方向。

哦,我忘了提:我获得的所有服务和特性似乎都与句柄0x0035有关。

是否应该“ getInstanceId”返回将使用的句柄? 在该设备上写入可写特征会导致Wireshark显示与getInstanceId对应的句柄值。

您首先要知道的是,在Android中,您不能直接使用Handles作为开发人员。 您必须处理UUID。 在Wireshark中,当您查看ATT协议时,在打开Handle下拉列表时,您应该能够看到服务的UUID和特征。 使用此信息,您应该能够检测到所需的UUid。
https://developer.android.com/guide/topics/connectivity/bluetooth-le展示了如何向通知发送值。 通常,您可以使用例如常量来取消通知。 我想如果您的服务器需要特定的字节,您应该能够以相同的方式发送它们。

好了,在检查了日志和文档后,我得出的结论是,此处的远程设备(应提供服务)实际上正在使用本地主机上的服务器,这是从主机发送到远程的值通知。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM