蓝牙:使用 Bluez 检测事件
Bluetooth: Detect Event Using Bluez
- 我们正在尝试检测 C/C++ 中的事件。
- 我们在 Linux 上使用 Bluez 作为我们的蓝牙库。
- 我们的目标是在触发该事件时运行外部脚本。
- 具体来说,我们有一个摩托罗拉H730耳机,上面有一个按钮,我们希望检测该按钮的按下。
- 我们已经配对了蓝牙设备(hcitool),我们可以连接到它(bluez-test-audio),但有兴趣将这种方法迁移到C/C++。
-
连接设备并按下按钮时 hcidump 的输出为:
HCI 嗅探器 - 蓝牙数据包分析器 2.2
版设备:HCI0 snap_len:1028 过滤器:0xffffffffHCI 事件:模式更改 (0x14) 第 6
个 状态 0x00 句柄 21 模式 0x00 间隔 0
模式:活动
ACL 数据:处理 21 个标志0x02 dlen 17
L2CAP(d): CID 0x0041 len 13 [psm 0]去年我做了类似的事情。我确定的方法是使用 libdbus-c++ 生成 c++ 代理对象/类,以便通过 dbus 与 bluez 进行通信。
- 确定头戴式耳机实现的蓝牙接口。我使用d-feet并在连接设备时对其进行了探索。您可以在此处手动控制和读取耳机的状态,这对于调试非常方便。
- 生成,查找或创建所需接口的dbus xml描述。我通过将 api 规范从 bluez api 文档转换为 xml 来手动执行此操作,但我相信您也可以通过 dbus 内省来创建它们。
- 使用 dbusxx-xml2cpp 生成代理对象
- 确定按下按钮时调用的回调
- 根据需要将代理对象集成到代码中
您需要将代码链接到libdbus-c++,并将其安装在目标上。
您可以使用生成的代理对象来访问耳机的全部功能,它可能比按下按钮更能派上用场!
的 hcidump 是设备主机和控制器之间的日志。事件是控制器发送到设备主机的事件,命令是发送到设备主机的请求/响应。
Bluez 编程指南 : http://people.csail.mit.edu/albert/bluez-intro/
- WMI检测进程创建事件-c++
- 检测键按事件 - Qt C++上的插入符号 (^) 键
- QT:检测 QGraphicsItem 上的鼠标左键和右键按下事件
- XCB_POLL_FOR_EVENT未检测到关闭窗口的XCB_CLIENT_MESSAGE事件
- 检测鼠标中键单击事件
- Qt 事件过滤器未检测到对象名称
- 如何检测终止进程事件、计算机关闭和计算机崩溃
- 当光标不在窗口小部件上时,QT小部件检测鼠标事件
- 检测Linux C 上的键盘和密钥事件
- Qt-如何在不使用插槽的情况下检测自定义事件循环中的关闭窗口
- 如何检测全局拖动事件
- Visual Studio 2008 MFC拖动对话框(不带标题)并检测所有鼠标事件
- 蓝牙:使用 Bluez 检测事件
- 是否可以在 MFC 按钮控件上检测到鼠标右键单击事件
- 如何检测全局鼠标按钮事件
- QKeyEvent 键按事件未检测到箭头键
- 如何在Qt中检测Windows事件
- 在Qt GUI事件线程中检测该"I'm running"
- 检测C++中的WM_KEYUP和WM_KEYDOWN事件
- 在C++scott-meyers中检测事件时使用的条件变量