Bluetooth

Bluez:“Connect()”方法返回和“Connected”信號之間的區別

  • March 11, 2022

根據 Bluez API 文件(設備 API),該Connect()方法的返回表示一個或多個配置文件的成功連接:

無效連接()

(跳過)

如果成功連接了至少一個配置文件,則此方法將指示成功。

同時還有一個Connected屬性,描述為:

布爾連接

$$ readonly $$ 指示遠端設備目前是否已連接。PropertiesChanged 信號指示此狀態的更改。

在實踐中,方法的返回和通知屬性設置Connect()的信號的到達似乎相隔幾秒鐘。PropertiesChanged``Connected``true

執行 bluetoothctl 時:

[bluetooth]# connect XX:XX:XX:XX:XX:XX
Attempting to connect to XX:XX:XX:XX:XX:XX
[CHG] Device XX:XX:XX:XX:XX:XX Connected: yes
Connection successful

在 D-Bus 上擷取了以下消息:

方法呼叫時間=1646854334.904791 發件人=:1.521 -> 目的地=org.bluez 串列=50 路徑=/org/bluez/hci0/dev_XX_XX_XX_XX_XX_XX;介面=org.bluez.Device1;成員=連接
信號時間=1646854336.902736 發件人=:1.128 -> 目的地=(空目的地)串列=10521 路徑=/org/bluez/hci0/dev_XX_XX_XX_XX_XX_XX;介面=org.freedesktop.DBus.Properties;成員=屬性已更改
字元串“org.bluez.Device1”
大批 [
字典條目(
字元串“已連接”
變體佈爾真
)
]
大批 [
]

方法返回時間=1646854339.349113 發件人=:1.128 -> 目的地=:1.521 串列=10522 回复串列=50

這告訴我們:

  • 當屬性更改為信號所報告的 ( )[CHG] Device XX:XX:XX:XX:XX:XX Connected: yes時,螢幕上會出現。Connected``true``time=1646854336.902736
  • 當方法返回 ( ) 時會出現該Connection successful消息。Connect()``time=1646854339.349113
  • 這些事件相隔 2.4 秒發生。

問題是這兩個事件之間有什麼區別,哪一個實際上表示藍牙設備已連接?

(斷開設備連接時,Disconnect()方法返回和信號到達0.003相隔數秒)。


環境:Linux核心:5.4-179,Bluez:5.62-r3,Systemd 249.9:。

信號的到來Connected表明低級鏈路(ACL)的建立。

Connect()方法的返回表明至少一個配置文件已成功連接(更高級別的連接)。

引用自:https://unix.stackexchange.com/questions/693783