通訊協定
CompositeNodeManager
定義於 fuchsia.driver.framework/composite_node_spec.fidl
主機板驅動程式可透過此通訊協定建立複合節點規格。
系統會在執行階段建立複合節點規格,以便將複合驅動程式的靜態繫結規則與系統中的節點動態繫結屬性動態橋接,讓驅動程式庫繫結規則較為通用且可重複使用。
AddSpec
將指定的複合式節點規格新增至驅動程式庫架構。
要求
名稱 | 類型 |
---|---|
payload |
CompositeNodeSpec
|
回應
名稱 | 類型 |
---|---|
payload |
CompositeNodeManager_AddSpec_Result
|
駕駛座
定義於 fuchsia.driver.framework/driver.fidl
驅動程式架構的驅動程式主機會使用這個通訊協定,將各種訊息和生命週期掛鉤傳送給驅動程式庫。這個通訊協定的連線是透過 driver_symbols
程式庫中定義的|DriverRegistration| 建立。
驅動程式庫關閉伺服器後,驅動程式架構會關閉屬於此驅動程式庫的所有調度工具。
開始
使用指定的 |start_args| 啟動驅動程式庫。
驅動程式應在從 |Start| 傳回之前完成初始設定和列舉。特別應使用 fuchsia.driver.framework/Node.AddChild
並等待所有呼叫完成,以列舉目前所有可用的節點。
在這項呼叫成功傳回之前,架構不會考慮要啟動的驅動程式庫。因此,驅動程式庫必須先成功呼叫 |Start| 才會呼叫 |Stop|。
如果驅動程式庫傳回錯誤,在驅動程式架構關閉驅動程式庫的調度工具前,系統不會呼叫 |Stop|。因此,它應先執行所有必要的清理作業,再傳回錯誤。
要求
名稱 | 類型 |
---|---|
start_args |
DriverStartArgs
|
回應
名稱 | 類型 |
---|---|
payload |
Driver_Start_Result
|
停止
停止驅動程式庫。如要停止,驅動程式庫應拆除在|開始|之後設定的任何資源。這是單向的 FIDL 方法。驅動程式庫完成停止後,應關閉伺服器端。非同步作業應在伺服器結束時完全完成。
要求
<EMPTY>
節點
定義於 fuchsia.driver.framework/topology.fidl
驅動程式庫管理所繫結節點時使用的通訊協定。驅動程式應維持與節點的用戶端連線。在驅動程式庫執行期間捨棄用戶端連線,會導致驅動程式庫架構從拓撲中移除驅動程式庫和節點。如果驅動程式庫在元件資訊清單中將 host_restart_on_crash
設為「true」,則捨棄連線時,系統會重新啟動驅動程式代管程序和驅動程式庫。
AddChild
新增子節點至這個節點。
如果存在 node
,此驅動程式庫會負責繫結至新建立的子項。否則,驅動程式庫架構會尋找適當的驅動程式庫,以便繫結至子項。
要求
名稱 | 類型 |
---|---|
args |
NodeAddArgs
|
controller |
server_end<NodeController>
|
node |
server_end<Node>?
|
回應
名稱 | 類型 |
---|---|
payload |
Node_AddChild_Result
|
NodeController
定義於 fuchsia.driver.framework/topology.fidl
父項節點控管其中一個子項所使用的通訊協定。
OnBind
在相關聯的 Node
繫結至驅動程式庫時觸發的事件。
回應
<EMPTY>
移除
移除節點及其所有子項。
要求
<EMPTY>
RequestBind
要求架構嘗試將驅動程式庫繫結至這個節點。這是繫結的額外要求,因為架構會在建立節點後,嘗試繫結一個節點。
- 錯誤
ZX_ERR_ALREADY_BOUND
,表示節點已繫結,且force_rebind
為 false。 - 錯誤:
ZX_ERR_ALREADY_EXISTS
。
要求
名稱 | 類型 |
---|---|
payload |
NodeControllerRequestBindRequest
|
回應
名稱 | 類型 |
---|---|
payload |
NodeController_RequestBind_Result
|
結構化
BindRule
定義於 fuchsia.driver.framework/composite_node_spec.fidl
代表父項規格中的繫結規則。
廣闊 | 類型 | 說明 | 預設 |
---|---|---|---|
key |
NodePropertyKey
|
屬性鍵。 |
無預設 |
condition |
Condition
|
在比對程序中評估屬性值的條件。值必須為 Accept 或 REJECT。 |
無預設 |
values |
vector<NodePropertyValue>[64]
|
屬性值清單。欄位不得留空。屬性值的類型必須相同。 |
無預設 |
CompositeNodeManager_AddSpec_Response
定義於 fuchsia.driver.framework/composite_node_spec.fidl
<EMPTY>
Driver_Start_Response
定義於 fuchsia.driver.framework/driver.fidl
<EMPTY>
NodeController_RequestBind_Response
定義於 fuchsia.driver.framework/topology.fidl
<EMPTY>
NodeProperty
定義於 fuchsia.driver.framework/topology.fidl
節點的屬性定義。屬性常用來將節點與驅動程式庫配對,以便進行驅動程式庫繫結。
廣闊 | 類型 | 說明 | 預設 |
---|---|---|---|
key |
NodePropertyKey
|
屬性的鍵。 |
無預設 |
value |
NodePropertyValue
|
屬性值。 |
無預設 |
NodePropertyEntry
定義於 fuchsia.driver.framework/driver_start_args.fidl
包含屬於節點的節點屬性。
廣闊 | 類型 | 說明 | 預設 |
---|---|---|---|
name |
NodeName
|
含有 |node_properties| 的節點名稱。 |
無預設 |
properties |
NodePropertyVector
|
屬於節點 (名稱為 |node_name|) 的節點屬性。如果節點為複合節點,則 |properties| 會是空白,並不包含其父項屬性。 |
無預設 |
Node_AddChild_Response
定義於 fuchsia.driver.framework/topology.fidl
<EMPTY>
ParentSpec
定義於 fuchsia.driver.framework/composite_node_spec.fidl
這個節點的指定節點父項為複合式節點規格建立的複合式節點。
廣闊 | 類型 | 說明 | 預設 |
---|---|---|---|
bind_rules |
vector<BindRule>[64]
|
父項的繫結規則。屬性鍵不得重複。欄位不得留空。 |
無預設 |
properties |
vector<NodeProperty>[64]
|
用於比對複合驅動程式庫繫結規則的屬性。鍵不得重複。 |
無預設 |
ENUMS
CompositeNodeSpecError 彈性
類型:uint32
定義於 fuchsia.driver.framework/composite_node_spec.fidl
CompositeNodeManager 通訊協定的錯誤代碼。
名稱 | 值 | 說明 |
---|---|---|
MISSING_ARGS |
1 |
未提供複合式節點規格的引數。 |
EMPTY_NODES |
2 |
指定複合式節點規格的 |
ALREADY_EXISTS |
3 |
指定複合式節點規格中的 |
條件嚴格
類型:uint32
定義於 fuchsia.driver.framework/composite_node_spec.fidl
代表繫結規則條件。
名稱 | 值 | 說明 |
---|---|---|
不明 |
0 |
|
接受 |
1 |
|
拒絕 |
2 |
DriverPackageType 彈性
類型:uint8
定義於 fuchsia.driver.framework/driver_info.fidl
驅動程式庫元件所在的 Fuchsia 套件類型。如要進一步瞭解各種套件類別,請前往: https://fuchsia.dev/fuchsia-src/concepts/packages/package#types_of_packages
名稱 | 值 | 說明 |
---|---|---|
BOOT |
0 |
BOOT 套件位於 Zircon 開機映像檔中。 |
BASE |
1 |
BASE 套件以靜態本機套件的形式包含在 Fuchsia 版本中。 |
已達到目標 |
2 |
CACHED 套件是 BASE 套件,在有完整的套件解析器可用時可在解析期間更新。 |
無 |
3 |
UNIVERSE 套件只有在完整套件解析器解決後,才會加到裝置中。 |
NodeError 彈性
類型:uint32
定義於 fuchsia.driver.framework/topology.fidl
節點通訊協定的錯誤代碼。
名稱 | 值 | 說明 |
---|---|---|
僅限內部 |
1 |
|
NODE_REMOVED |
2 |
|
NAME_MISSING |
3 |
|
NAME_INVALID |
4 |
節點名稱無效。具體來說,其名稱中不得包含半形句號。 |
NAME_ALREADY_EXISTS |
5 |
同層級節點使用相同的名稱。 |
OFFER_SOURCE_NAME_MISSING |
6 |
這個節點的優惠缺少來源名稱。 |
OFFER_REF_EXISTS |
7 |
這個節點的優惠不應有來源或目標。 |
SYMBOL_NAME_MISSING |
8 |
這個節點的符號缺少名稱。 |
SYMBOL_ADDRESS_MISSING |
9 |
這個節點的符號缺少地址。 |
SYMBOL_ALREADY_EXISTS |
10 |
這個節點也有另一個名稱相同的符號。 |
UNBIND_CHILDREN_IN_PROGRESS |
11 |
節點正在取消繫結其所有子項。 新增日期:20 位
|
資料表
CompositeDriverInfo
定義於 fuchsia.driver.framework/driver_info.fidl
複合驅動程式庫的資訊。
序數 | 廣闊 | 類型 | 說明 |
---|---|---|---|
1 |
composite_name |
string
|
驅動程式庫的複合式繫結規則中指定的複合名稱。 |
2 |
driver_info |
DriverInfo
|
驅動程式庫的一般資訊。 |
CompositeDriverMatch
定義於 fuchsia.driver.framework/driver_info.fidl
與複合驅動程式庫程式相符的資訊。
序數 | 廣闊 | 類型 | 說明 |
---|---|---|---|
1 |
composite_driver |
CompositeDriverInfo
|
相符的複合驅動程式庫的資訊。 |
2 |
parent_names |
vector<string>
|
所有父項名稱的清單,並依索引排序。 這些名稱取自驅動程式庫的複合式繫結規則中的節點定義。 |
3 |
primary_parent_index |
uint32
|
主要節點索引。由驅動程式庫的複合式繫結規則中的主要節點識別。 |
CompositeInfo
定義於 fuchsia.driver.framework/driver_info.fidl
由複合式節點規格定義的複合式資訊。
序數 | 廣闊 | 類型 | 說明 |
---|---|---|---|
1 |
spec |
CompositeNodeSpec
|
建立這個複合式節點規格時使用的規格資訊。 |
2 |
matched_driver |
CompositeDriverMatch
|
只有在驅動程式庫與此規格父項屬性相符的屬性時,才能使用的節點規格資訊。 |
CompositeNodeSpec
定義於 fuchsia.driver.framework/composite_node_spec.fidl
代表複合式節點規格的結構。
序數 | 廣闊 | 類型 | 說明 |
---|---|---|---|
1 |
name |
string
|
複合式節點規格的名稱。 |
2 |
parents |
vector<ParentSpec>
|
複合式節點規格中的節點,不得留空。第一個節點是主要節點 |
CompositeParent
定義於 fuchsia.driver.framework/driver_info.fidl
由複合式節點規格定義的複合式父項。
序數 | 廣闊 | 類型 | 說明 |
---|---|---|---|
1 |
composite |
CompositeInfo
|
其父項的複合相關資訊。 |
2 |
index |
uint32
|
此父項在規格父項中的索引。 |
DevfsAddArgs 資源
定義於 fuchsia.driver.framework/topology.fidl
序數 | 廣闊 | 類型 | 說明 |
---|---|---|---|
1 |
connector |
fuchsia.device.fs/Connector
|
這是要在 devfs 中安裝的連接器。用戶端連線至檔案系統中的這個節點時,系統會呼叫 |
2 |
class_name |
string[255]
|
這是在 devfs 中安裝此節點的類別名稱。這個節點會放在 /dev/class/{class_name} 中。如果 /dev/class/ 中沒有 |
3 |
inspect |
handle<vmo>
|
這是將安裝在 devfs 中的檢查資料 vmo。選用:如未提供這個欄位,Devfs 的檢查資料將是空白的。 |
4 |
connector_supports |
fuchsia.device.fs/ConnectionType
|
由提供的 |connector| 支援的連線類型。 驅動程式庫架構應處理連接器不支援的連線類型。如未提供,系統只會假設連接器支援的裝置類型。 新增時間:16 天
|
5 |
controller_connector |
fuchsia.device.fs/Connector
|
這是要安裝在 devfs 中的控制器連接器。當用戶端針對檔案系統中的這個節點連線至 device_controller 連線時,系統就會呼叫 已新增:HEAD
|
DeviceCategory
定義於 fuchsia.driver.framework/driver_info.fidl
驅動程式庫元件資訊清單中提供的裝置類別。
序數 | 廣闊 | 類型 | 說明 |
---|---|---|---|
1 |
category |
string
|
|
2 |
subcategory |
string
|
DriverInfo
定義於 fuchsia.driver.framework/driver_info.fidl
驅動程式庫的一般資訊,用於複合型驅動程式和一般驅動程式。
序數 | 廣闊 | 類型 | 說明 |
---|---|---|---|
1 |
url |
string[4096]
|
驅動程式庫元件的網址。 |
2 |
name |
string
|
驅動程式庫的名稱,擷取自驅動程式庫 |
3 |
colocate |
bool
|
如果為 true,驅動程式庫應置於父項的 DriverHost 中。 |
4 |
package_type |
DriverPackageType
|
這項驅動程式庫所在的套件類型。 |
5 |
is_fallback |
bool
|
如果條件是如此,則驅動程式庫是備用驅動程式庫。備用驅動程式的繫結優先順序較低,因此只有在沒有相符的非備用驅動程式庫時,系統才會選擇其進行繫結。 |
6 |
device_categories |
vector<DeviceCategory>
|
裝置類別 |
7 |
bind_rules_bytecode |
vector<uint8>
|
繫結規則,宣告一組要評估的限制,以便判定驅動程式庫索引器是否應將此驅動程式庫繫結至裝置。 |
8 |
driver_framework_version |
uint8
|
此驅動程式庫使用的驅動程式庫架構版本。支援的值為 1 (DFv1) 和 2 (DFv2)。如未提供,1 是假設的版本。 |
9 |
is_disabled |
bool
|
是否停用驅動程式庫。如果為 true,此驅動程式庫就不會選擇繫結至節點。 新增時間:17 天
|
DriverStartArgs 資源
定義於 fuchsia.driver.framework/driver_start_args.fidl
啟動驅動程式庫的引數。
序數 | 廣闊 | 類型 | 說明 |
---|---|---|---|
1 |
node |
Node
|
驅動程式庫繫結的節點。 |
2 |
symbols |
vector<NodeSymbol>[64]
|
提供給驅動程式庫符號,針對 |node|。這些符號來自已新增 |node| 的驅動程式庫,且系統會篩選掉在繫結程式中要求的符號。 |
3 |
url |
fuchsia.url/Url
|
包含驅動程式庫的套件網址。這些資訊僅供參考,只會用於提供檢查資料。 |
4 |
program |
fuchsia.data/Dictionary
|
啟動驅動程式庫的相關資訊。目前支援下列項目:
|
5 |
incoming |
vector<fuchsia.component.runner/ComponentNamespaceEntry>[32]
|
提供給驅動程式庫的命名空間。 |
6 |
outgoing_dir |
server_end<fuchsia.io/Directory>
|
驅動程式庫提供的外送目錄。 |
7 |
config |
handle<vmo>
|
已將設定傳遞至驅動程式庫。 |
8 |
node_name |
string
|
驅動程式庫所繫結的節點名稱。 |
9 |
node_properties |
NodePropertyDictionary
|
驅動程式庫所繫結節點的節點屬性。如果節點為非複合節點,則「預設」項目會包含節點本身的屬性。如果節點是複合節點,則每個父項都會有一個項目,且「預設」項目會參照主要複合式父項節點的屬性。 新增時間:19 歲
|
NodeAddArgs 資源
定義於 fuchsia.driver.framework/topology.fidl
用於新增節點的引數。
序數 | 廣闊 | 類型 | 說明 |
---|---|---|---|
1 |
name |
NodeName
|
節點名稱。 |
2 |
offers |
vector<fuchsia.component.decl/Offer>[128]
|
提供給驅動程式庫繫結至這個節點的功能。驅動程式必須先確認這些功能已新增至傳出目錄,再新增子節點。 已移除:19 已淘汰:18
|
3 |
symbols |
vector<NodeSymbol>[64]
|
要提供給繫結至此節點的驅動程式庫的函式。 |
4 |
properties |
NodePropertyVector
|
節點的屬性。 |
5 |
devfs_args |
DevfsAddArgs
|
這個節點應如何新增至 devfs 的引數。 |
6 |
offers2 |
vector<Offer>[128]
|
提供給驅動程式庫繫結至這個節點的功能。驅動程式必須先確認這些功能已新增至傳出目錄,再新增子節點。 新增時間:18 歲
|
NodeControllerRequestBindRequest
定義於 fuchsia.driver.framework/topology.fidl
序數 | 廣闊 | 類型 | 說明 |
---|---|---|---|
1 |
force_rebind |
bool
|
如果為 true,節點會在嘗試透過一般繫結程序進行繫結之前,先與相符的驅動程式庫解除繫結。 |
2 |
driver_url_suffix |
string
|
如果設定了這項政策,系統只會將符合此網址尾碼的驅動程式視為繫結。 例如:「gpt.cm」、「meta/gpt.cm」、「fuchsia-boot:///#meta/gpt.cm」。 |
NodeSymbol
定義於 fuchsia.driver.framework/topology.fidl
驅動程式庫為節點提供的符號定義。符號代表驅動程式代管程序的本機。
序數 | 廣闊 | 類型 | 說明 |
---|---|---|---|
1 |
name |
string[128]
|
符號的名稱。 |
2 |
address |
uint64
|
符號的虛擬地址,位於驅動程式代管程序的程序中。 |
聯合國
CompositeNodeManager_AddSpec_Result 嚴格
定義於 fuchsia.driver.framework/composite_node_spec.fidl
序數 | Variant | 類型 | 說明 |
---|---|---|---|
1 |
response |
CompositeNodeManager_AddSpec_Response
|
|
2 |
err |
CompositeNodeSpecError
|
|
3 |
framework_err |
internal
|
Driver_Start_Result 嚴格
定義於 fuchsia.driver.framework/driver.fidl
序數 | Variant | 類型 | 說明 |
---|---|---|---|
1 |
response |
Driver_Start_Response
|
|
2 |
err |
zx/Status
|
|
3 |
framework_err |
internal
|
NodeController_RequestBind_Result 嚴格
定義於 fuchsia.driver.framework/topology.fidl
序數 | Variant | 類型 | 說明 |
---|---|---|---|
1 |
response |
NodeController_RequestBind_Response
|
|
2 |
err |
zx/Status
|
|
3 |
framework_err |
internal
|
NodePropertyKey 嚴格
定義於 fuchsia.driver.framework/topology.fidl
序數 | Variant | 類型 | 說明 |
---|---|---|---|
1 |
int_value |
NodePropertyKeyUint
|
|
2 |
string_value |
NodePropertyKeyString
|
NodePropertyValue 彈性
定義於 fuchsia.driver.framework/topology.fidl
序數 | Variant | 類型 | 說明 |
---|---|---|---|
1 |
int_value |
NodePropertyValueUint
|
|
2 |
string_value |
NodePropertyValueString
|
|
3 |
bool_value |
NodePropertyValueBool
|
|
4 |
enum_value |
NodePropertyValueEnum
|
Node_AddChild_Result 嚴格
定義於 fuchsia.driver.framework/topology.fidl
序數 | Variant | 類型 | 說明 |
---|---|---|---|
1 |
response |
Node_AddChild_Response
|
|
2 |
err |
NodeError
|
|
3 |
framework_err |
internal
|
提供彈性方案
定義於 fuchsia.driver.framework/topology.fidl
序數 | Variant | 類型 | 說明 |
---|---|---|---|
1 |
zircon_transport |
fuchsia.component.decl/Offer
|
|
2 |
driver_transport |
fuchsia.component.decl/Offer
|
業者
名稱 | 值 | 類型 | 說明 |
---|---|---|---|
MAX_NAMESPACE_COUNT |
fuchsia.component.runner/MAX_NAMESPACE_COUNT
|
uint32 |
|
MAX_NODE_NAME_LENGTH |
128
|
uint8 |
|
MAX_OFFER_COUNT |
fuchsia.component/MAX_DYNAMIC_OFFER_COUNT
|
uint32 |
|
MAX_PROPERTY_COUNT |
64
|
uint8 |
|
MAX_RESOURCE_NAME_LENGTH |
128
|
uint8 |
新增時間:18 歲
|
MAX_SYMBOL_COUNT |
64
|
uint8 |
|
MAX_SYMBOL_NAME_LENGTH |
128
|
uint8 |
別名
名稱 | 值 | 說明 |
---|---|---|
NodeName |
string [MAX_NODE_NAME_LENGTH ] |
|
NodePropertyDictionary |
vector [fidl/MAX ] |
新增時間:19 歲
|
NodePropertyKeyString |
string [256 ] |
|
NodePropertyKeyUint |
uint32 |
|
NodePropertyValueBool |
bool |
|
NodePropertyValueEnum |
string [256 ] |
|
NodePropertyValueString |
string [256 ] |
|
NodePropertyValueUint |
uint32 |
|
NodePropertyVector |
vector [MAX_PROPERTY_COUNT ] |