簡體   English   中英

已解決:Bluez - 連接前掃描並列出設備的 BLE 配置文件?

[英]SOLVED: Bluez - Scanning and listing BLE profiles of devices before connection?

我對藍牙開發很陌生,但目前正在通過開發一些基本的 python 腳本來建立我的理解。 我正在使用 Bluez 5.58、python 3.9 和 dbus。

到目前為止,我能夠掃描並連接到設備以及連接后監控屬性,我使用過https://www.bluetooth.com/blog/the-bluetooth-for-linux-developers-study-guide/作為大部分項目的指南。

現在,我正在嘗試找到一種方法來列出已發現設備的 BLE 配置文件,然后再決定在 cmdline 中連接到哪個設備,例如:

設備名稱:[[BLEprofiles],bdaddr1]

設備名稱:[[BLEprofiles],bdaddr2]

我對 BLE 配置文件很陌生,但據我了解,它們是“特定用例的標准服務集合”,描述了屬性表的角色、要求和結構。 正如我發現的那樣,使用 bluez 和 dbus 似乎沒有任何直觀的方法可以在連接之前列出配置文件並檢查兼容性。 SDPtool 似乎對此很有用,但 Bluez 5+ 不支持。

我的第一個想法是使用標准的 SIG UUID ( https://www.bluetooth.com/specifications/assigned-numbers/ ) 來匹配,但這似乎也需要與 bluez 和 dbus 連接。 在能夠判斷它是否適合用例之前必須連接到設備似乎是相當倒退的。 例如,如果我想將手機連接到揚聲器以播放音頻但不知道揚聲器的名稱,我想查看哪些設備支持 A2DP 或類似的音頻配置文件。

可以在不連接的情況下在 dbus/bluez 中列出 BLE 配置文件嗎? 如果需要連接,實現列表的最佳方式是什么?

謝謝你的幫助!

當 BlueZ 發現新設備時,它會發送InterfacesAdded信號。 以下是包含具有 UUID f0cd1400-95da-4f4b-9ac8-aa55d312af0c的自定義服務的設備的數據示例

BlueZ 具有過濾在發現過程中找到的設備的功能。 這些過濾器之一是廣告服務 UUID。 這是通過setDiscoveryFilter方法完成的。

這允許 BlueZ 要么只報告需要 UUID 的廣告服務的設備,要么您可以查看所有設備上的服務 UUID 並從中選擇一個設備。

‣ Type=signal  Endian=l  Flags=1  Version=1 Cookie=668
  Sender=:1.12  Path=/  Interface=org.freedesktop.DBus.ObjectManager  Member=InterfacesAdded
  UniqueName=:1.12
  MESSAGE "oa{sa{sv}}" {
          OBJECT_PATH "/org/bluez/hci0/dev_C7_18_1E_21_F4_87";
          ARRAY "{sa{sv}}" {
                  DICT_ENTRY "sa{sv}" {
                          STRING "org.freedesktop.DBus.Introspectable";
                          ARRAY "{sv}" {
                          };
                  };
                  DICT_ENTRY "sa{sv}" {
                          STRING "org.bluez.Device1";
                          ARRAY "{sv}" {
                                  DICT_ENTRY "sv" {
                                          STRING "Address";
                                          VARIANT "s" {
                                                  STRING "C7:18:1E:21:F4:87";
                                          };
                                  };
                                  DICT_ENTRY "sv" {
                                          STRING "AddressType";
                                          VARIANT "s" {
                                                  STRING "random";
                                          };
                                  };
                                  DICT_ENTRY "sv" {
                                          STRING "Name";
                                          VARIANT "s" {
                                                  STRING "Aranet4 0578A";
                                          };
                                  };
                                  DICT_ENTRY "sv" {
                                          STRING "Alias";
                                          VARIANT "s" {
                                                  STRING "Aranet4 0578A";
                                          };
                                  };
                                  DICT_ENTRY "sv" {
                                          STRING "Paired";
                                          VARIANT "b" {
                                                  BOOLEAN false;
                                          };
                                  };
                                  DICT_ENTRY "sv" {
                                          STRING "Trusted";
                                          VARIANT "b" {
                                                  BOOLEAN false;
                                          };
                                  };
                                  DICT_ENTRY "sv" {
                                          STRING "Blocked";
                                          VARIANT "b" {
                                                  BOOLEAN false;
                                          };
                                  };
                                  DICT_ENTRY "sv" {
                                          STRING "LegacyPairing";
                                          VARIANT "b" {
                                                  BOOLEAN false;
                                          };
                                  };
                                  DICT_ENTRY "sv" {
                                          STRING "RSSI";
                                          VARIANT "n" {
                                                  INT16 -71;
                                          };
                                  };
                                  DICT_ENTRY "sv" {
                                          STRING "Connected";
                                          VARIANT "b" {
                                                  BOOLEAN false;
                                          };
                                  };
                                  DICT_ENTRY "sv" {
                                          STRING "UUIDs";
                                          VARIANT "as" {
                                                  ARRAY "s" {
                                                          STRING "f0cd1400-95da-4f4b-9ac8-aa55d312af0c";
                                                  };
                                          };
                                  };
                                  DICT_ENTRY "sv" {
                                          STRING "Adapter";
                                          VARIANT "o" {
                                                  OBJECT_PATH "/org/bluez/hci0";
                                          };
                                  };
                                  DICT_ENTRY "sv" {
                                          STRING "ManufacturerData";
                                          VARIANT "a{qv}" {
                                                  ARRAY "{qv}" {
                                                          DICT_ENTRY "qv" {
                                                                  UINT16 1794;
                                                                  VARIANT "ay" {
                                                                          ARRAY "y" {
                                                                                  BYTE 33;
                                                                                  BYTE 4;
                                                                                  BYTE 4;
                                                                                  BYTE 0;
                                                                                  BYTE 0;
                                                                                  BYTE 9;
                                                                                  BYTE 15;
                                                                          };
                                                                  };
                                                          };
                                                  };
                                          };
                                  };
                                  DICT_ENTRY "sv" {
                                          STRING "ServicesResolved";
                                          VARIANT "b" {
                                                  BOOLEAN false;
                                          };
                                  };
                          };
                  };
                  DICT_ENTRY "sa{sv}" {
                          STRING "org.freedesktop.DBus.Properties";
                          ARRAY "{sv}" {
                          };
                  };
          };
  };

暫無
暫無

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

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