簡體   English   中英

藍牙:使用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過濾器: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 ++中檢測藍牙事件?

去年我做了類似的事。 我確定的方法是使用libdbus-c ++生成c ++代理對象/類,通過dbus與bluez進行通信。

  • 確定耳機實現的藍牙接口。 我使用了d-feet並在連接時探索了設備。 您可以在此處手動控制和讀取耳機的狀態,這對於調試非常方便。
  • 生成,查找或創建所需接口的dbus xml描述。 我通過將apz規范從bluez api文檔翻譯成xml來手動完成,但我相信你也可以通過dbus內省創建它們。
  • 使用dbusxx-xml2cpp生成代理對象
  • 確定按下按鈕時調用的回調
  • 根據需要將代理對象集成到代碼中

您需要將代碼鏈接到libdbus-c ++並將其安裝在目標上。

您可以使用生成的代理對象來訪問耳機的整個功能,它可以派上用場,而不僅僅是按下按鈕!

收集的hcidump是設備主機和控制器之間的日志。 事件是控制器發送給設備主機的事件,命令是發送到設備主機的請求/響應。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM