协议
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
返回可用的状态客户端端点以及由组件管理的每个元素的稳定标识符。如果无法返回任何端点(即没有任何元素能够实现状态通道),则返回错误。
请求
<EMPTY>
响应
| 名称 | 类型 |
|---|---|
payload |
ElementInfoProvider_GetStatusEndpoints_Result
|
ElementRunner
在 fuchsia.power.broker/broker.fidl 中定义
元素的运行器或运算符。 所有元素所有者都应实现此方法。 客户端通过 ElementSchema.element_runner 传递给 Power Broker。 Power Broker 会在初始阶段调用 SetLevel,之后每当元素的所需级别发生变化时,都会调用 SetLevel。
SetLevel
设置电源元素的级别。
服务器在进行关卡转换时会阻塞。一旦完成向新要求的级别转换,它就会返回。如果元素无法转换到新的必需级别,并且无法重试,则通道将关闭。
请求
| 名称 | 类型 |
|---|---|
level |
PowerLevel
|
响应
| 名称 | 类型 |
|---|---|
payload |
ElementRunner_SetLevel_Result
|
LeaseControl
在 fuchsia.power.broker/broker.fidl 中定义
提供对先前通过 Lessor.Lease 获取的租约可执行的操作的租约范围访问权限。关闭此控制通道会丢弃租用。 TODO(https://fxbug.dev/339474151): Switch from a protocol to an 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 Broker 通信的主要初始协议。电源元件所有者应通过 AddElement 将其拥有的元件添加到电源拓扑中。与 Power Broker 的所有进一步交互都是通过 AddElement 调用打开的通道完成的,这些通道的作用域限定为添加的元素。
AddElement
由电源元件所有者调用,用于注册新的电源元件并为该元件打开控制通道。
请求
| 名称 | 类型 |
|---|---|
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 资源
在 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 |
strict 类型的 BinaryPowerLevel
类型:uint8
在 fuchsia.power.broker/broker.fidl 中定义
BinaryPowerLevel 是一组众所周知的 PowerLevel,只有两种状态:OFF 和 ON。
| 名称 | 值 | 说明 |
|---|---|---|
关闭 |
0 |
|
开启 |
1 |
ElementInfoProviderError flexible
类型:uint32
在 fuchsia.power.broker/broker.fidl 中定义
| 名称 | 值 | 说明 |
|---|---|---|
未知 |
0 |
|
失败 |
1 |
LeaseError flexible
类型:uint32
在 fuchsia.power.broker/broker.fidl 中定义
| 名称 | 值 | 说明 |
|---|---|---|
INTERNAL |
1 |
|
NOT_AUTHORIZED |
2 |
|
INVALID_LEVEL |
3 |
|
INVALID_ARGUMENT |
4 |
LeaseStatus flexible
类型:uint32
在 fuchsia.power.broker/broker.fidl 中定义
| 名称 | 值 | 说明 |
|---|---|---|
未知 |
0 |
|
PENDING |
1 |
Power Broker 已收到租约,并且已开始向上功率转换,但尚未完成。也就是说,租用的 |
满意 |
2 |
租用的 |
POWERING_DOWN |
3 |
客户端已放弃租用,Power Broker 已确认,并且已开始向下功率转换,但尚未完成。 |
VACATED |
4 |
租约已被移除,并且所有由此产生的电源转换均已完成。 |
ModifyDependencyError flexible
类型:uint32
在 fuchsia.power.broker/broker.fidl 中定义
| 名称 | 值 | 说明 |
|---|---|---|
ALREADY_EXISTS |
1 |
|
无效 |
2 |
|
NOT_AUTHORIZED |
3 |
|
NOT_FOUND |
4 |
RegisterDependencyTokenError flexible
类型:uint32
在 fuchsia.power.broker/broker.fidl 中定义
| 名称 | 值 | 说明 |
|---|---|---|
ALREADY_IN_USE |
1 |
|
INTERNAL |
2 |
StatusError flexible
类型: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 向量映射到电源元素。名称在元素之间应是唯一的,并且在同一 build 的重新启动过程中保持不变,但不同 build 之间不保证一致。
| 序数 | 字段 | 类型 | 说明 |
|---|---|---|---|
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 中定义
状态客户端端点和特定电源元素的明文名称。名称在元素之间应是唯一的,并且在同一 build 的重新启动过程中保持不变,但无法保证在不同 build 之间保持一致。
| 序数 | 字段 | 类型 | 说明 |
|---|---|---|---|
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需要整数值,而不是字符串。)
此结构体中未指定依赖元素的身份,必须在请求中将其指定为单独的参数,或进行推断(可能是因为通道的作用域限定为依赖元素)。
| 序数 | 字段 | 类型 | 说明 |
|---|---|---|---|
1 |
dependent_level |
PowerLevel
|
此 |
2 |
requires_token |
DependencyToken
|
必须提供通过所需元素的 ElementControl 协议的 RegisterDependencyToken 调用注册的令牌。 |
3 |
requires_level_by_preference |
vector<PowerLevel>:256
|
按优先顺序降序排列的级别列表,电源代理应尝试将这些级别设为必需级别,以满足此依赖项。 列表中第一个有效的级别将成为必需级别。 平台客户端可以使用此列表来保持与依赖项的向后兼容性,方法是提供依赖项可能已在较低 API 级别中实现的多个级别。 |
4 |
remove_with_required_element |
bool
|
如果为 true,则在移除所需元素时,系统会自动移除此依赖项。 |
PowerLevelName
在 fuchsia.power.broker/broker.fidl 中定义
明文名称到 PowerLevel 的映射。名称在元素之间应是唯一的,并且在同一 build 的重新启动过程中保持不变,但无法保证不同 build 之间的一致性。
| 序数 | 字段 | 类型 | 说明 |
|---|---|---|---|
1 |
level |
PowerLevel
|
|
2 |
name |
string:16
|
UNIONS
ElementControl_AddDependency_Result strict
在 fuchsia.power.broker/broker.fidl 中定义
| 序数 | 变体 | 类型 | 说明 |
|---|---|---|---|
1 |
response |
ElementControl_AddDependency_Response
|
|
2 |
err |
ModifyDependencyError
|
|
3 |
framework_err |
internal
|
ElementControl_RegisterDependencyToken_Result strict
在 fuchsia.power.broker/broker.fidl 中定义
| 序数 | 变体 | 类型 | 说明 |
|---|---|---|---|
1 |
response |
ElementControl_RegisterDependencyToken_Response
|
|
2 |
err |
RegisterDependencyTokenError
|
|
3 |
framework_err |
internal
|
ElementControl_UnregisterDependencyToken_Result strict
在 fuchsia.power.broker/broker.fidl 中定义
| 序数 | 变体 | 类型 | 说明 |
|---|---|---|---|
1 |
response |
ElementControl_UnregisterDependencyToken_Response
|
|
2 |
err |
UnregisterDependencyTokenError
|
|
3 |
framework_err |
internal
|
ElementInfoProvider_GetElementPowerLevelNames_Result strict resource
在 fuchsia.power.broker/broker.fidl 中定义
| 序数 | 变体 | 类型 | 说明 |
|---|---|---|---|
1 |
response |
ElementInfoProvider_GetElementPowerLevelNames_Response
|
|
2 |
err |
ElementInfoProviderError
|
|
3 |
framework_err |
internal
|
ElementInfoProvider_GetStatusEndpoints_Result strict resource
在 fuchsia.power.broker/broker.fidl 中定义
| 序数 | 变体 | 类型 | 说明 |
|---|---|---|---|
1 |
response |
ElementInfoProvider_GetStatusEndpoints_Response
|
|
2 |
err |
ElementInfoProviderError
|
|
3 |
framework_err |
internal
|
ElementRunner_SetLevel_Result strict
在 fuchsia.power.broker/broker.fidl 中定义
| 序数 | 变体 | 类型 | 说明 |
|---|---|---|---|
1 |
response |
ElementRunner_SetLevel_Response
|
|
3 |
framework_err |
internal
|
LeaseControl_WatchStatus_Result strict
在 fuchsia.power.broker/broker.fidl 中定义
| 序数 | 变体 | 类型 | 说明 |
|---|---|---|---|
1 |
response |
LeaseControl_WatchStatus_Response
|
|
3 |
framework_err |
internal
|
Lessor_Lease_Result strict resource
在 fuchsia.power.broker/broker.fidl 中定义
| 序数 | 变体 | 类型 | 说明 |
|---|---|---|---|
1 |
response |
Lessor_Lease_Response
|
|
2 |
err |
LeaseError
|
|
3 |
framework_err |
internal
|
Status_WatchPowerLevel_Result strict resource
在 fuchsia.power.broker/broker.fidl 中定义
| 序数 | 变体 | 类型 | 说明 |
|---|---|---|---|
1 |
response |
Status_WatchPowerLevel_Response
|
|
2 |
err |
StatusError
|
|
3 |
framework_err |
internal
|
Topology_AddElement_Result strict
在 fuchsia.power.broker/broker.fidl 中定义
| 序数 | 变体 | 类型 | 说明 |
|---|---|---|---|
1 |
response |
Topology_AddElement_Response
|
|
2 |
err |
AddElementError
|
|
3 |
framework_err |
internal
|
Topology_Lease_Result strict
在 fuchsia.power.broker/broker.fidl 中定义
| 序数 | 变体 | 类型 | 说明 |
|---|---|---|---|
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
|
渠道 |