蓝牙LE:发送"处理价值通知"设备

时间:2018-02-10 10:57:16

标签: android bluetooth bluetooth-lowenergy

我试图重现发送到已连接到手机的蓝牙LE设备的ATT数据包。

这甚至可能吗?

我已经弄清楚数据包应该是什么样的,我只是无法绕过GATT以及它在这种特定情况下如何转换为ATT。

wireshark转储看起来像这样:

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协议?这是通过UUID在Android GATT中完成的吗?如果我遍历该设备上的所有服务,就会得到一堆服务,大量特征,描述符和我丢失。

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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