Bluetooth
Bluez:“Connect()”方法返回和“Connected”信號之間的區別
根據 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
,Systemd249.9
:。
信號的到來
Connected
表明低級鏈路(ACL)的建立。該
Connect()
方法的返回表明至少一個配置文件已成功連接(更高級別的連接)。