通訊協定
ElementControl
定義於 fuchsia.power.broker/broker.fidl
提供元素範圍存取權,可存取先前透過 Topology.AddElement 新增的元素。
AddDependency
為現有元素新增依附元件。如果任何開放租約會納入這項依附元件,則必要元素和任何傳遞必要元素都必須完成所有必要轉換 (透過 ElementRunner.SetLevel 呼叫),這個方法才會傳回。
要求
| 名稱 | 類型 |
|---|---|
payload |
LevelDependency
|
回應
| 名稱 | 類型 |
|---|---|
payload |
ElementControl_AddDependency_Result
|
OpenStatusChannel
註冊新的狀態管道,Power Broker 會透過該管道傳送元素目前功率等級的唯讀更新。這個方法旨在讓元素擁有者透過開啟及轉移這個管道,將元素目前功率等級的唯讀存取權授予用戶端。
要求
| 名稱 | 類型 |
|---|---|
status_channel |
server_end:Status
|
RegisterDependencyToken
註冊權杖,允許持有者新增這個元素的依附元件。
要求
| 名稱 | 類型 |
|---|---|
token |
DependencyToken
|
回應
| 名稱 | 類型 |
|---|---|
payload |
ElementControl_RegisterDependencyToken_Result
|
UnregisterDependencyToken
取消註冊先前透過 RegisterDependencyToken 註冊的權杖。
要求
| 名稱 | 類型 |
|---|---|
token |
DependencyToken
|
回應
| 名稱 | 類型 |
|---|---|
payload |
ElementControl_UnregisterDependencyToken_Result
|
ElementInfoProvider
定義於 fuchsia.power.broker/broker.fidl
提供介面,可擷取元件管理的 PowerElement 相關資訊。
GetElementPowerLevelNames
傳回 PowerLevels 與元件管理各元素的明文名稱對應關係。如果無法傳回任何對應,則會傳回錯誤。
要求
<EMPTY>
回應
| 名稱 | 類型 |
|---|---|
payload |
ElementInfoProvider_GetElementPowerLevelNames_Result
|
GetStatusEndpoints
傳回可用的狀態用戶端端點,以及元件管理的每個元素穩定 ID。如果無法傳回任何端點 (即沒有任何元素能實作狀態管道),則會傳回錯誤。
要求
<EMPTY>
回應
| 名稱 | 類型 |
|---|---|
payload |
ElementInfoProvider_GetStatusEndpoints_Result
|
ElementRunner
定義於 fuchsia.power.broker/broker.fidl
元素的執行者或操作者。所有元素擁有者都應實作這個方法。用戶端端點會透過 ElementSchema.element_runner 傳遞至 Power Broker。Power Broker 會先呼叫 SetLevel,然後在元素所需等級變更時呼叫。
SetLevel
設定能量元素等級。
伺服器在轉換關卡時會封鎖。轉換至新的必要等級後,系統會傳回。如果元素無法轉換至新的必要層級,且無法重試,管道就會關閉。
要求
| 名稱 | 類型 |
|---|---|
level |
PowerLevel
|
回應
| 名稱 | 類型 |
|---|---|
payload |
ElementRunner_SetLevel_Result
|
LeaseControl
定義於 fuchsia.power.broker/broker.fidl
提供租約範圍的存取權,可對先前透過 Lessor.Lease 取得的租約執行動作。關閉這個控制管道會捨棄租約。TODO(https://fxbug.dev/339474151):從通訊協定切換至 eventpair。
WatchStatus
取得租約的目前狀態。如果 last_status 為 UNKNOWN,呼叫會立即傳回目前狀態。否則,呼叫會遭到封鎖,直到目前狀態與 last_status 不同。
要求
| 名稱 | 類型 |
|---|---|
last_status |
LeaseStatus
|
回應
| 名稱 | 類型 |
|---|---|
payload |
LeaseControl_WatchStatus_Result
|
出租人
定義於 fuchsia.power.broker/broker.fidl
已淘汰。請改用 Topology.Lease。提供元素範圍的存取權,可要求租約,提高先前透過 Topology.AddElement 新增的元素層級。
租賃
要求指出用戶端希望將元素提升至指定層級。呼叫傳回時,這「不」代表對應元素位於要求的層級,僅代表要求的層級有效,且要求正在處理中。
滿足要求後,所有直接和間接電源依附元件的層級都會提高到所需層級。當 LeaseControl.WatchStatus 回報 LeaseStatus::SATISFIED 時,表示指定元素位於租約指定的層級。
如果要求無效層級,系統會傳回 LeaseError::INVALID_LEVEL。
要求
| 名稱 | 類型 |
|---|---|
level |
PowerLevel
|
回應
| 名稱 | 類型 |
|---|---|
payload |
Lessor_Lease_Result
|
狀態
定義於 fuchsia.power.broker/broker.fidl
提供元素目前 PowerLevel 的唯讀存取權,以及監控元素功率等級變更的功能。如要取得這個通訊協定的新管道,請在元素的 ElementControl 管道上呼叫 OpenStatus,並傳遞給需要存取元素目前功率等級的其他用戶端。
WatchPowerLevel
傳回這個元素的目前電量。這個管道上的第一個呼叫會立即傳回。後續呼叫會遭到封鎖,直到目前的電量等級變更為止。
要求
<EMPTY>
回應
| 名稱 | 類型 |
|---|---|
payload |
Status_WatchPowerLevel_Result
|
拓撲學
定義於 fuchsia.power.broker/broker.fidl
這是 Power Element 擁有者與 Power Broker 通訊時,主要使用的初始通訊協定。電源元素擁有者應透過 AddElement,將擁有的元素新增至電源拓撲。與 Power Broker 的所有後續互動,都是透過 AddElement 呼叫開啟的管道進行,這些管道的範圍限定為新增的元素。
AddElement
由 Power Element 擁有者呼叫,用於註冊新的 Power Element,並開啟該元素的控制管道。
要求
| 名稱 | 類型 |
|---|---|
payload |
ElementSchema
|
回應
| 名稱 | 類型 |
|---|---|
payload |
Topology_AddElement_Result
|
租賃
由用戶端呼叫,直接在指定依附元件上開啟租約,不需建立及管理新元素。
要求
| 名稱 | 類型 |
|---|---|
payload |
LeaseSchema
|
回應
| 名稱 | 類型 |
|---|---|
payload |
Topology_Lease_Result
|
STRUCTS
ElementControl_AddDependency_Response
定義於 fuchsia.power.broker/broker.fidl
<EMPTY>
ElementControl_RegisterDependencyToken_Response
定義於 fuchsia.power.broker/broker.fidl
<EMPTY>
ElementControl_UnregisterDependencyToken_Response
定義於 fuchsia.power.broker/broker.fidl
<EMPTY>
ElementInfoProvider_GetElementPowerLevelNames_Response resource
定義於 fuchsia.power.broker/broker.fidl
| 欄位 | 類型 | 說明 | 預設 |
|---|---|---|---|
level_names |
vector<ElementPowerLevelNames>
|
無預設值 |
ElementInfoProvider_GetStatusEndpoints_Response 資源
定義於 fuchsia.power.broker/broker.fidl
| 欄位 | 類型 | 說明 | 預設 |
|---|---|---|---|
endpoints |
vector<ElementStatusEndpoint>
|
無預設值 |
ElementRunner_SetLevel_Response
定義於 fuchsia.power.broker/broker.fidl
<EMPTY>
LeaseControl_WatchStatus_Response
定義於 fuchsia.power.broker/broker.fidl
| 欄位 | 類型 | 說明 | 預設 |
|---|---|---|---|
status |
LeaseStatus
|
無預設值 |
Lessor_Lease_Response 資源
定義於 fuchsia.power.broker/broker.fidl
| 欄位 | 類型 | 說明 | 預設 |
|---|---|---|---|
lease_control |
client_end:LeaseControl
|
對租約採取行動的管道。這個管道關閉時,租約就會終止。 |
無預設值 |
Status_WatchPowerLevel_Response 資源
定義於 fuchsia.power.broker/broker.fidl
| 欄位 | 類型 | 說明 | 預設 |
|---|---|---|---|
current_level |
PowerLevel
|
無預設值 |
Topology_AddElement_Response
定義於 fuchsia.power.broker/broker.fidl
<EMPTY>
Topology_Lease_Response
定義於 fuchsia.power.broker/broker.fidl
<EMPTY>
列舉
AddElementError flexible
類型:uint32
定義於 fuchsia.power.broker/broker.fidl
| 名稱 | 值 | 說明 |
|---|---|---|
無效 |
1 |
|
NOT_AUTHORIZED |
2 |
BinaryPowerLevel strict
類型:uint8
定義於 fuchsia.power.broker/broker.fidl
BinaryPowerLevel 是一組知名的 PowerLevel,只有兩種狀態:OFF 和 ON。
| 名稱 | 值 | 說明 |
|---|---|---|
關閉 |
0 |
|
開啟 |
1 |
ElementInfoProviderError 彈性
類型:uint32
定義於 fuchsia.power.broker/broker.fidl
| 名稱 | 值 | 說明 |
|---|---|---|
不明 |
0 |
|
失敗 |
1 |
彈性 LeaseError
類型:uint32
定義於 fuchsia.power.broker/broker.fidl
| 名稱 | 值 | 說明 |
|---|---|---|
內部 |
1 |
|
NOT_AUTHORIZED |
2 |
|
INVALID_LEVEL |
3 |
|
INVALID_ARGUMENT |
4 |
LeaseStatus 彈性
類型:uint32
定義於 fuchsia.power.broker/broker.fidl
| 名稱 | 值 | 說明 |
|---|---|---|
不明 |
0 |
|
待處理 |
1 |
Power Broker 已收到租約,並已開始向上轉換功率,但尚未完成。也就是說,租用的 |
已滿足 |
2 |
租用的 |
POWERING_DOWN |
3 |
用戶端已捨棄租約,Power Broker 也已確認,且降低功率的轉換作業已開始,但尚未完成。 |
VACATED |
4 |
租約已移除,所有相關的電源轉換作業也已完成。 |
ModifyDependencyError 彈性
類型:uint32
定義於 fuchsia.power.broker/broker.fidl
| 名稱 | 值 | 說明 |
|---|---|---|
ALREADY_EXISTS |
1 |
|
無效 |
2 |
|
NOT_AUTHORIZED |
3 |
|
NOT_FOUND |
4 |
RegisterDependencyTokenError 彈性
類型:uint32
定義於 fuchsia.power.broker/broker.fidl
| 名稱 | 值 | 說明 |
|---|---|---|
ALREADY_IN_USE |
1 |
|
內部 |
2 |
StatusError 彈性
類型:uint32
定義於 fuchsia.power.broker/broker.fidl
| 名稱 | 值 | 說明 |
|---|---|---|
不明 |
1 |
UnregisterDependencyTokenError 彈性
類型:uint32
定義於 fuchsia.power.broker/broker.fidl
| 名稱 | 值 | 說明 |
|---|---|---|
NOT_AUTHORIZED |
1 |
|
NOT_FOUND |
2 |
TABLES
ElementPowerLevelNames
定義於 fuchsia.power.broker/broker.fidl
透過純文字名稱,將 fuchsia.power.broker/PowerLevelName 向量對應至電源元素。元素之間的名稱不得重複,且在重新啟動相同版本後仍會保留,但不同版本之間的名稱不一定會保持一致。
| 序數 | 欄位 | 類型 | 說明 |
|---|---|---|---|
1 |
identifier |
string:64
|
|
2 |
levels |
vector<PowerLevelName>:256
|
ElementSchema 資源
定義於 fuchsia.power.broker/broker.fidl
傳遞至 Topology.AddElement。
| 序數 | 欄位 | 類型 | 說明 |
|---|---|---|---|
1 |
element_name |
string:64
|
人類可讀的名稱,用於記錄和偵錯。 |
2 |
initial_current_level |
PowerLevel
|
元素初始的目前功率等級。與 |
3 |
valid_levels |
vector<PowerLevel>:256
|
這個元素的所有有效功率等級。未在此處指定的任何層級都會視為無效。 樓層必須從低到高遞增排序。請注意,層級是列舉,其整數值沒有固有意義。舉例來說,理論上,二進位 (關閉、開啟) 可以用 (0, 1)、(1, 0)、(17, 19) 或任何兩個數字的組合表示。(但請使用上方的 BinaryPowerLevel!) |
4 |
dependencies |
vector<LevelDependency>:128
|
這個元素功率等級的依附元件清單。注意:無法在此新增依附於此元素層級的依附元件。 |
8 |
lessor_channel |
server_end:Lessor
|
已移除:7:level_control_channels,請改用 已淘汰。請改用 |
9 |
element_control |
server_end:ElementControl
|
呼叫端提供的 ElementControl 管道,會傳遞至 Power Broker。如果捨棄這個管道,系統會從拓撲中移除該元素。與這個元素相關聯的所有管道都會關閉,且註冊至這個元素的所有權杖都會取消註冊。 |
10 |
element_runner |
client_end:ElementRunner
|
Power Broker 應使用的用戶端,用於設定這個元素的功率等級。應保留此項目的 server_end,並由元素的執行工具實作 ElementRunner 通訊協定。 |
11 |
initial_lease_token |
LeaseToken
|
如果設定 |
ElementStatusEndpoint 資源
定義於 fuchsia.power.broker/broker.fidl
狀態用戶端端點和特定 Power Element 的純文字名稱。名稱在元素之間應為不重複,且在相同建構作業重新啟動時保持不變,但不同建構作業之間不保證一致。
| 序數 | 欄位 | 類型 | 說明 |
|---|---|---|---|
1 |
identifier |
string:64
|
|
2 |
status |
client_end:Status
|
LeaseDependency 資源
定義於 fuchsia.power.broker/broker.fidl
| 序數 | 欄位 | 類型 | 說明 |
|---|---|---|---|
1 |
requires_token |
DependencyToken
|
必須提供透過必要元素的 ElementControl 通訊協定 RegisterDependencyToken 呼叫註冊的權杖。 |
2 |
requires_level |
PowerLevel
|
必須提供元素層級。大多數用戶端都會使用這個選項,但為了確保向前相容性,也可以改用 requires_level_by_preference。 |
3 |
requires_level_by_preference |
vector<PowerLevel>:256
|
進階選項 (選用) 為了確保向前相容性,請依偏好程度遞減的順序,列出電源代理程式應嘗試要求的層級,以滿足這項依附元件。清單中第一個有效層級會成為必要層級。如果設定這個屬性,系統會忽略 平台用戶端可以使用這份清單,提供依附元件在舊版 API 級別中可能實作的多個級別,藉此維持與依附元件的回溯相容性。 |
LeaseSchema 資源
定義於 fuchsia.power.broker/broker.fidl
傳遞至 Topology.Lease。
| 序數 | 欄位 | 類型 | 說明 |
|---|---|---|---|
1 |
lease_token |
LeaseToken
|
由 Power Broker 保留的事件配對半部。另一半則應由用戶端保留。如需更多使用詳情,請參閱下方的 |
2 |
lease_name |
string:64
|
人類可讀的名稱,用於記錄和偵錯。 |
3 |
dependencies |
vector<LeaseDependency>:128
|
這項租約的依附元件清單。不得留空或缺少;沒有依附元件的租約會遭到拒絕,並傳回 |
4 |
should_return_pending_lease |
bool
|
(選用) 根據預設, |
LevelDependency 資源
定義於 fuchsia.power.broker/broker.fidl
說明一個電源元素等級對另一個電源元素等級的依附元件。舉例來說,如果元素 PowerElement_A 的等級 PowerLevel_A3 取決於元素 PowerElement_B 位於 PowerLevel_B2,則我們會填寫結構體來傳達以下含義:
dependent_level=PowerLevel_A3requires_token=PowerElement_Brequires_level_by_preference=[PowerLevel_B2](請注意,上述值僅為象徵性,例如dependent_level必須是整數值,而非字串。
這個 struct 未指定依附元素的識別,必須在要求中指定為獨立引數,或由系統推論 (可能因為管道範圍限定為依附元素)。
| 序數 | 欄位 | 類型 | 說明 |
|---|---|---|---|
1 |
dependent_level |
PowerLevel
|
這個 |
2 |
requires_token |
DependencyToken
|
必須提供透過必要元素的 ElementControl 通訊協定 RegisterDependencyToken 呼叫註冊的權杖。 |
3 |
requires_level_by_preference |
vector<PowerLevel>:256
|
依偏好程度遞減排序的層級清單,Power Broker 應嘗試要求這些層級,以滿足這項依附元件。清單中第一個有效層級會成為必要層級。 平台用戶端可以使用這份清單,提供依附元件在舊版 API 級別中可能實作的多個級別,藉此維持與依附元件的回溯相容性。 |
4 |
remove_with_required_element |
bool
|
如果為 true,則在移除必要元素時,系統會自動移除這個依附元件。 |
PowerLevelName
定義於 fuchsia.power.broker/broker.fidl
將明文名稱對應至 PowerLevel。元素之間的名稱應不重複,且在重新啟動相同版本後仍會保留,但不同版本之間的名稱不一定會一致。
| 序數 | 欄位 | 類型 | 說明 |
|---|---|---|---|
1 |
level |
PowerLevel
|
|
2 |
name |
string:16
|
UNIONS
ElementControl_AddDependency_Result strict
定義於 fuchsia.power.broker/broker.fidl
| 序數 | Variant | 類型 | 說明 |
|---|---|---|---|
1 |
response |
ElementControl_AddDependency_Response
|
|
2 |
err |
ModifyDependencyError
|
|
3 |
framework_err |
internal
|
ElementControl_RegisterDependencyToken_Result strict
定義於 fuchsia.power.broker/broker.fidl
| 序數 | Variant | 類型 | 說明 |
|---|---|---|---|
1 |
response |
ElementControl_RegisterDependencyToken_Response
|
|
2 |
err |
RegisterDependencyTokenError
|
|
3 |
framework_err |
internal
|
ElementControl_UnregisterDependencyToken_Result strict
定義於 fuchsia.power.broker/broker.fidl
| 序數 | Variant | 類型 | 說明 |
|---|---|---|---|
1 |
response |
ElementControl_UnregisterDependencyToken_Response
|
|
2 |
err |
UnregisterDependencyTokenError
|
|
3 |
framework_err |
internal
|
ElementInfoProvider_GetElementPowerLevelNames_Result strict resource
定義於 fuchsia.power.broker/broker.fidl
| 序數 | Variant | 類型 | 說明 |
|---|---|---|---|
1 |
response |
ElementInfoProvider_GetElementPowerLevelNames_Response
|
|
2 |
err |
ElementInfoProviderError
|
|
3 |
framework_err |
internal
|
ElementInfoProvider_GetStatusEndpoints_Result strict resource
定義於 fuchsia.power.broker/broker.fidl
| 序數 | Variant | 類型 | 說明 |
|---|---|---|---|
1 |
response |
ElementInfoProvider_GetStatusEndpoints_Response
|
|
2 |
err |
ElementInfoProviderError
|
|
3 |
framework_err |
internal
|
ElementRunner_SetLevel_Result strict
定義於 fuchsia.power.broker/broker.fidl
| 序數 | Variant | 類型 | 說明 |
|---|---|---|---|
1 |
response |
ElementRunner_SetLevel_Response
|
|
3 |
framework_err |
internal
|
LeaseControl_WatchStatus_Result strict
定義於 fuchsia.power.broker/broker.fidl
| 序數 | Variant | 類型 | 說明 |
|---|---|---|---|
1 |
response |
LeaseControl_WatchStatus_Response
|
|
3 |
framework_err |
internal
|
Lessor_Lease_Result strict resource
定義於 fuchsia.power.broker/broker.fidl
| 序數 | Variant | 類型 | 說明 |
|---|---|---|---|
1 |
response |
Lessor_Lease_Response
|
|
2 |
err |
LeaseError
|
|
3 |
framework_err |
internal
|
Status_WatchPowerLevel_Result strict resource
定義於 fuchsia.power.broker/broker.fidl
| 序數 | Variant | 類型 | 說明 |
|---|---|---|---|
1 |
response |
Status_WatchPowerLevel_Response
|
|
2 |
err |
StatusError
|
|
3 |
framework_err |
internal
|
Topology_AddElement_Result strict
定義於 fuchsia.power.broker/broker.fidl
| 序數 | Variant | 類型 | 說明 |
|---|---|---|---|
1 |
response |
Topology_AddElement_Response
|
|
2 |
err |
AddElementError
|
|
3 |
framework_err |
internal
|
Topology_Lease_Result strict
定義於 fuchsia.power.broker/broker.fidl
| 序數 | Variant | 類型 | 說明 |
|---|---|---|---|
1 |
response |
Topology_Lease_Response
|
|
2 |
err |
LeaseError
|
|
3 |
framework_err |
internal
|
BITS
權限嚴格
類型:uint32
定義於 fuchsia.power.broker/broker.fidl
元素權限
| 名稱 | 值 | 說明 |
|---|---|---|
MODIFY_DEPENDENT |
1 | |
MODIFY_DEPENDENCY |
4 |
常數
| 名稱 | 值 | 類型 | 說明 |
|---|---|---|---|
| LEASE_SIGNAL_SATISFIED |
16777216
|
uint32 |
租約滿足時,Power Broker 在 LeaseToken 上傳送的信號。 |
| LEASE_TOKEN_RIGHTS | 代表開放租約的權杖。用戶端的控制代碼應捨棄,表示應關閉租約。如果租約會共用,這個控制代碼可能會重複;租約會保持開啟,直到最後一個控制代碼捨棄為止。 |
||
| MAX_DEPENDENCIES_IN_ADD_ELEMENT |
128
|
uint16 |
|
| MAX_ELEMENT_NAME_LEN |
64
|
uint8 |
|
| MAX_LEVEL_NAME_LEN |
16
|
uint16 |
PowerLevel 名稱長度有限制,可減少 Inspect 空間用量 |
| MAX_TOKENS_IN_ADD_ELEMENT |
128
|
uint16 |
|
| MAX_VALID_POWER_LEVELS |
256
|
uint16 |
別名
| 名稱 | 值 | 說明 |
|---|---|---|
| DependencyToken |
zx/Handle |
代表有權新增其他元素依附元件的權杖。應先透過必要元素的 ElementControl.RegisterDependencyToken 向 Power Broker 註冊。 |
| LeaseToken |
zx/Handle |
|
| PowerLevel |
uint8 |
用於描述元素的能量等級。可進一步擴充,支援其他類型的電源等級,例如 ACPI。 |
服務
ElementInfoProviderService
定義於 fuchsia.power.broker/broker.fidl
| 名稱 | 類型 | 傳輸 |
|---|---|---|
| status_provider |
fuchsia.power.broker/ElementInfoProvider
|
版本 |