蓝牙:使用蓝色检测事件

问题描述:

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

    HCI嗅探 - 蓝牙分组分析器版本2.2
    设备:hci0 snap_len:1028过滤器:为0xffffffff

    HCI事件:模式变化(0×14)PLEN 6个
    状态0x00手柄21模式为0x00区间0
    模式:主动
    ACL数据:手柄21和标志0×02 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和标志0×02 DLEN 18
    L2CAP(d):CID 0x0041 LEN 14 [PSM 0]
    < ACL数据:手柄21个标志为0x00 DLEN 14
    L2CAP(d):CID 0x0047 LEN 10 [诗0]
    HCI事件:已完成的报文数(0×13)PLEN 5
    手柄21包1
    HCI事件:已完成数据包(0×13)PLEN 5
    手柄21包1
    HCI事件数:一些已完成数据包(0x13)plen 5
    句柄21数据包1
    HCI事件:模式改变(0×14)PLEN 6个
    状态0x00处理21模式0×02间隔2048
    方式:嗅嗅

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

你有什么成功吗? – Schrieveslaach 2015-10-28 11:04:15

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

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

我做了一件类似去年。我决定采用的方法是使用libdbus-c++生成C++代理对象/类,以通过dbus与bluez进行通信。

  • 确定您的耳机实现的蓝牙接口。我使用d-feet,并在连接时探索设备。您可以手动控制并从头戴式耳机读取状态,这在调试时非常方便。
  • 生成,查找或创建所需接口的dbus xml描述。我通过将api规范从bluez api documentation转换为xml手动执行此操作,但我相信您也可以通过dbus introspection创建它们。
  • 使用dbusxx-xml2cpp生成代理对象
  • 确定当按下你的按钮
  • 作为集成所需的代理对象插入到您的代码调用的回调

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

您可以使用生成的代理对象访问耳机的全部功能,它可能会派上用场,而不仅仅是按下按钮!