蓝牙:使用Bluez检测事件

时间:2012-07-05 21:18:49

标签: c++ linux bluetooth bluez

  • 我们正在尝试用C / C ++检测事件。
  • 我们在Linux上使用Bluez作为我们的蓝牙库。
  • 我们的目标是在触发该事件时运行外部脚本。
  • 具体来说,我们有一个摩托罗拉H730耳机,上面有一个按钮,我们正在寻找按下那个按钮。
  • 我们已配对蓝牙设备(hcitool),我们可以连接到它(bluez-test-audio),但有兴趣将该方法迁移到C / C ++。
  • 连接设备并按下按钮时hcidump的输出是:

    HCI嗅探器 - 蓝牙数据包分析器版本2.2
    device:hci0 snap_len:1028 filter:0xffffffff

      

    HCI事件:模式改变(0x14)plen 6
          状态0x00句柄21模式0x00间隔0
          模式:主动
      ACL数据:处理21个标志0x02 dlen 17
          L2CAP(d):cid 0x0041 len 13 [psm 0]
      < ACL数据:处理21个标志0x00 dlen 14
          L2CAP(d):cid 0x0047 len 10 [psm 0]
      < ACL数据:处理21个标志0x00 dlen 22
          L2CAP(d):cid 0x0047 len 18 [psm 0]
      < ACL数据:处理21个标志0x00 dlen 22
          L2CAP(d):cid 0x0047 len 18 [psm 0]
      HCI事件:已完成数据包的数量(0x13)plen 5
          处理21包1   ACL数据:处理21个标志0x02 dlen 18
          L2CAP(d):cid 0x0041 len 14 [psm 0]
      < ACL数据:处理21个标志0x00 dlen 14
          L2CAP(d):cid 0x0047 len 10 [psm 0]
      HCI事件:已完成数据包的数量(0x13)plen 5
          处理21包1   HCI事件:已完成数据包的数量(0x13)plen 5
          处理21包1   HCI事件:已完成数据包的数量(0x13)plen 5
          处理21包1   HCI事件:模式改变(0x14)plen 6
          状态0x00处理21模式0x02间隔2048
          模式:嗅探

  • 我们一直在寻找蓝牙文档,并没有取得多大成功 我们如何使用Bluez在C / C ++中检测蓝牙事件?

2 个答案:

答案 0 :(得分:1)

去年我做了类似的事情。我确定的方法是使用libdbus-c++生成c ++代理对象/类,通过dbus与bluez进行通信。

  • 确定耳机实现的蓝牙接口。我使用d-feet并在连接时探索了设备。您可以在此处手动控制和读取耳机的状态,这对于调试非常方便。
  • 生成,查找或创建所需接口的dbus xml说明。我是通过将api规范从bluez api documentation转换为xml手动完成的,但我相信你也可以通过dbus内省来创建它们。
  • 使用dbusxx-xml2cpp生成代理对象
  • 确定按下按钮时调用的回调
  • 根据需要将代理对象集成到您的代码中

您需要将代码链接到libdbus-c ++并将其安装在目标上。

您可以使用生成的代理对象来访问耳机的整个功能,它可能比按下按钮更方便!

答案 1 :(得分:0)

收集的hcidump是设备主机和控制器之间的日志。事件是控制器发送给设备主机的事件,命令是发送给设备主机的请求/响应。

Bluez编程指南:http://people.csail.mit.edu/albert/bluez-intro/