Sunday, March 31, 2024

[Protocol] Android Bluetooth Architecture

 


[Protocol] D-Bus 原理

 一个系统中可以有多条 D-Bus 总线,即多个 D-Bus 守护进程。D-Bus 总线有两种类型

个系统上可以存在任意多总线,以 Ubuntu 为例

System bus 系统总线 

开机创建,有且只能有一条,Unix domain socket路径为/run/dbus/system_bus_socket

Session bus 用户总线

desktop environment,如:GNOME,KDE,每个用户登录后会创建专有的D-Bus总线,Unix domain socket路径为/run/user/$UID/bus

不同 Bus 之间是逻辑隔离的,相互直接无法通信。


原生物件和物件路徑

所有使用D-BUS的應用程式都包含一些物件, 當經由一個D-BUS連線收到一條訊息時,該訊息是被髮往一個物件而不是整個應用程式。在開發中程式框架定義著這樣的物件,例如JAVA,GObject,QObject等等,在D-Bus中成為native object

對於底層的D-Bus協議,即libdbus API,並不理會這些native object,它們使用的是一個叫做object path的概念。通過object path,高層程式設計可以為物件例項進行命名,並允許遠端應用引用它們。這些名字看起來像是檔案系統路徑,例如一個物件可能叫做

“/org/kde/kspread/sheets/3/cells/4/5”。易讀的路徑名是受鼓勵的做法,但也允許使用諸如“/com/mycompany/c5yo817y0c1y1c5b”等,只要它可以為你的應用程式所用。Namespacing的物件路徑以開發者所有的域名開始(如 /org/kde)以避免系統不同程式碼模組互相干擾。

方法和訊號Methodsand Signals

每一個物件有兩類成員:方法和訊號

方法就是 JAVA 中同樣概念,方法是一段函式程式碼,帶有輸入和輸出。

訊號是廣播給所有興趣的其他實體,訊號可以帶有資料 payload

在 D-BUS 中有四種型別的訊息

方法呼叫(method calls)、方法返回(method returns)、訊號(signals)和錯誤(errors)

要執行 D-BUS 物件的方法,您需要向物件傳送一個方法呼叫訊息。它將完成一些處理(就是執行了物件中的Method,Method是可以帶有輸入引數的。)並返回,返回訊息或者錯誤訊息。

訊號的不同之處在於它們不返回任何內容:既沒有“訊號返回”訊息,也沒有任何型別的錯誤訊息。

介面 Interface

每一個物件支援一個或者多個介面,介面是一組方法和訊號,介面定義一個物件實體的型別。D-Bus對介面的命名方式,類似org.freedesktop.Introspectable。開發人員通常將使用程式語言類的的名字作為介面名字。

Proxies代理

代理物件用來表示其他的remote object。當我們觸發了proxy物件的method時,將會在D-Bus上傳送一個method_call的訊息,並等待答覆,根據答覆返回。使用非常方便,就像呼叫一個本地的物件。

未完 和菜鳥一起學linux之DBUS基礎學習記錄

通信流程概覽


https://www.twblogs.net/a/5ea4a6706052e10444d73e02

https://www.gushiciku.cn/pl/gwTk/zh-tw

D-Bus Specification

[Protocol] D-Bus Application

 Android Bluetooth Architecture

BlueZ 5.50 and D-Bus

OpenBMC 和 D-Bus 的關係

[Protocol] D-Bus index

介紹

原理

相關應用

n8n index

 【n8n免費本地端部署】Windows版|程式安裝x指令大補帖  【一鍵安裝 n8n】圖文教學,獲得無限額度自動化工具&限時免費升級企業版功能