当前位置: 首页 > 知识库问答 >
问题:

蓝牙:使用Bluez检测事件

宇文俊风
2023-03-14

>

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

    HCI sniffer-蓝牙数据包分析器2.2版设备:hci0 snap\u len:1028筛选器:0xffffffff

    HCI事件:模式更改(0x14)plen 6状态0x00句柄21模式0x00间隔0模式:活动ACL数据:句柄21标志0x02 dlen 17 L2CAP(d):cid 0x0041 len 13[psm 0]

  • 共有2个答案

    华景明
    2023-03-14

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

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

    戚奇略
    2023-03-14

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

    • 确定您的耳机实现的蓝牙接口。我使用d-英尺并在连接时探索了设备。您可以在此处手动控制和读取耳机的状态,这对调试很有用。
    • 生成、查找或创建所需接口的dbus xml描述。我通过将api规范从Bluez api留档转换为xml手动完成了此操作,但我相信您也可以通过dbus自省来创建它们。
    • 使用dbusxx-xml2cpp生成代理对象
    • 确定按下按钮时调用的回调
    • 根据需要将代理对象集成到您的代码中

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

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

     类似资料:
    • 我正在开发一款Android应用程序,它需要检测运行应用程序的设备附近的智能手机数量。为此,我有一个计划蓝牙BLE扫描的工作实现。我检测到附近的BLE设备没有问题,但在扫描结果中似乎找不到任何智能手机。 我的问题是:我们可以在Android上使用BLE扫描检测其他智能手机吗?(具体来说;如果我们无法控制其他智能手机中的设置)。 我尝试使用以下蓝牙库扫描BLE设备: RxAndroidBle 为了尝

    • 我扩展插件/gatt_example. c在Bluez源尝试BLE通知功能没有成功。我正在使用Bluez源中包含的电池服务示例。它具有1个具有READ和NOTIFY属性的特性。我添加dbus方法来调用attrib_db_update()来从蓝牙守护进程外部更新特征值。 现在,我可以连接哪个客户端(带有Android 4.3的Nexus4和iPhone(不含LightBlue的应用程序))并启动通知

    • 我制作了一个android应用程序来扫描蓝牙设备,并向我的服务器发送一个HTTP请求,这样我就可以检测它们是开着还是关着。我已经用我的带有蓝牙适配器的台式电脑测试过了,效果很好。当检测到电脑上的蓝牙功能时,它显示电脑是打开的,当我关闭电脑上的蓝牙功能时,它是关闭的。现在,我需要使用这个应用程序的设备有:雅伯投影仪、Bose SoundLink和JBL耳机,但我遇到了一些问题。 首先,投影仪似乎无法

    • 我正在使用BeagleBone Black和蓝牙USB加密狗V4.0。我的加密狗正在检测iBeacons没有问题,但有没有办法检测开启蓝牙的手机。我正在使用NodeJs和Noble包。 所以,当我使用hcitool lescan时,它也找不到手机,但有了hcitool,就有了选项扫描。当我在终端中调用hcitool扫描时,我得到了我的手机。是否有包装此选项的NodeJs包。我不需要连接到移动设备,

    • 问题内容: 我试图在Linux机器上使用GATT来设置具有许多特征的自定义服务。 使用[这个问题及其链接的问题,我能够识别出我需要编写的代码(利用该函数)。 我创建了一个单独的文件gatt_service.c,并编写了我认为需要的代码。但是,我无法解决如何将我的代码链接到Bluez库以编译和运行我的解决方案。例如,此站点(并非用于BLE开发)使用gcc参数链接到libbluetooth ,而我无法

    • jd.closeBluetoothAdapter(Object object) 关闭蓝牙模块。调用该方法将断开所有已建立的连接并释放系统资源。建议在使用蓝牙流程后,与 jd.openBluetoothAdapter 成对调用。 参数 Object object 属性 类型 默认值 必填 说明 success function 否 接口调用成功的回调函数 fail function 否 接口调用失败