协议
设备
在 fuchsia.hardware.hrtimer/hrtimer.fidl 中定义
提供高分辨率计时器支持的驱动程序。 此 API 适用于由独立于 CPU 的硬件提供的计时器。例如,此驱动程序可以抽象化由 SoC 提供的硬件。
GetProperties
获取驱动程序属性。
请求
<EMPTY>
响应
| 名称 | 类型 |
|---|---|
payload |
Device_GetProperties_Result
|
GetTicksLeft
获取计时器 id 距离到期还剩的当前时间(以 tick 为单位)。
如果指定的 id 无效,则此调用将返回 INVALID_ARGS。
请求
| 名称 | 类型 |
|---|---|
id |
uint64
|
响应
| 名称 | 类型 |
|---|---|
payload |
Device_GetTicksLeft_Result
|
ReadClock
读取当前计时器的时钟值。
返回的 tick 采用相对于给定分辨率的时间单位。
使用 GetProperties() 确定可用的分辨率。
错误:
BAD_STATE:当前没有时钟在运行。
INVALID_ARGS:id 或 resolution 是无效或不受支持的值。
NOT_SUPPORTED:如果 supports_read 为 false,或者该方法未以其他方式实现。
INTERNAL_ERROR:内部运行时错误。
请求
| 名称 | 类型 |
|---|---|
id |
uint64
|
resolution |
Resolution
|
响应
| 名称 | 类型 |
|---|---|
payload |
Device_ReadClock_Result
|
ReadTimer
读取当前计时器的设置值或超时值。
返回的 tick 采用相对于给定分辨率的时间单位。
使用 GetProperties() 确定可用的分辨率。
错误:
BAD_STATE:当前不存在可读的计时器。
INVALID_ARGS:id 或 resolution 是无效或不受支持的值。
NOT_SUPPORTED:如果 supports_read 为 false,或者该方法未以其他方式实现。
INTERNAL_ERROR:内部运行时错误。
请求
| 名称 | 类型 |
|---|---|
id |
uint64
|
resolution |
Resolution
|
响应
| 名称 | 类型 |
|---|---|
payload |
Device_ReadTimer_Result
|
SetEvent
设置一个 Zircon 事件,以便在计时器到期时收到通知。
系统会通过 ZX_EVENT_SIGNALED 信号通知计时器到期。客户端负责清除 ZX_EVENT_SIGNALED 信号。
之前为特定 id 设置的所有事件都会被替换。请注意,这可能会与已启动的计时器到期时发出的事件信号发生竞态。
为确保在计时器到期时传递事件,必须在调用 Start 之前调用此方法。
如果指定的 id 无效,则此调用将返回 INVALID_ARGS。
如果给定 id 不支持此方法,则此调用将返回 NOT_SUPPORTED。
如果驱动程序遇到内部错误,则此调用将返回 INTERNAL_ERROR。
请求
| 名称 | 类型 |
|---|---|
id |
uint64
|
event |
handle<event>
|
响应
| 名称 | 类型 |
|---|---|
payload |
Device_SetEvent_Result
|
开始
启动定时器 id,让其在 ticks后到期。
如果 ticks 为 0,则计时器将在 0 个 tick(立即)后到期。
如果计时器 id 已启动,则之前的 Start 会被取消,并且驱动程序会重启计时器。请注意,这可能会与上一个计时器的到期时间发生冲突,例如,通知过程可能已经开始,而新的 Start 调用将无法停止正在进行的通知。
如果指定的 id 无效,则此调用将返回 INVALID_ARGS。
如果 GetProperties 提供的 resolutions 不支持指定的 resolution,则此调用将返回 INVALID_ARGS。如果指定的 ticks 超出 GetProperties 提供的计时器支持的范围,则此调用将返回 INVALID_ARGS。如果驱动程序遇到内部错误,则此调用将返回 INTERNAL_ERROR。
请求
| 名称 | 类型 |
|---|---|
id |
uint64
|
resolution |
Resolution
|
ticks |
uint64
|
响应
| 名称 | 类型 |
|---|---|
payload |
Device_Start_Result
|
StartAndWait
启动计时器 id,使其在 ticks 后到期,并等待计时器到期,同时支持通过电源框架防止暂停。
使用 ZX_EVENT_SIGNALED 信号设置计时器后,驱动程序将发出 setup_event 事件信号。这样,客户端便可以知道允许系统暂停是安全的。客户端负责清除此事件。
在计时器触发之前,驱动程序不会响应此调用(挂起)。
对计时器调用 Stop 会中止此调用并返回 CANCELED。请注意,这可能会与计时器到期发生竞态。
支持此调用的驱动程序必须能够获取电源元件上的租约,以防止系统挂起。此租约通过 keep_alive LeaseToken 渠道字段返回给客户端。当 keep_alive 关闭时,阻止系统挂起的驱动程序租约将被丢弃。因此,为确保系统不会被电源框架挂起,客户端必须在系统需要不挂起的时间内保留此 keep_alive 令牌,或者客户端必须从电源框架获取自己的租约,以防止在丢弃 keep_alive 之前挂起。
如果指定的 id 无效,则此调用将返回 INVALID_ARGS。
如果给定 id 不支持此方法,则此调用将返回 NOT_SUPPORTED。
如果司机没有可提供给客户端的 keep_alive 令牌,则此调用将返回 BAD_STATE。如果驱动程序遇到内部错误,则此调用将返回 INTERNAL_ERROR。
请求
| 名称 | 类型 |
|---|---|
id |
uint64
|
resolution |
Resolution
|
ticks |
uint64
|
setup_event |
handle<event>
|
响应
| 名称 | 类型 |
|---|---|
payload |
Device_StartAndWait_Result
|
StartAndWait2
启动计时器 id,并等待其在 ticks 个 tick 后到期。
在计时器触发之前,驱动程序不会响应此调用(挂起)。
对计时器调用 Stop 会中止此调用并返回 CANCELED。请注意,这可能会与计时器到期发生竞态。
此方法会在使用强制传入的 setup_keep_alive LeaseToken 设置计时器时使系统保持唤醒状态(防止挂起)。当计时器到期时,此方法会返回第二个 expiration_keep_alive
LeaseToken,以防止在到期时暂停。这些保持唤醒状态的唤醒租用令牌由电源框架的系统活动调节器提供。支持此调用的驱动程序必须能够从系统活动调节器获取 expiration_keep_alive。
当 expiration_keep_alive 关闭时,此驱动程序创建的唤醒租约(用于防止系统在计时器到期时挂起)将被丢弃。因此,为确保系统不会被电源框架挂起,客户端必须在系统需要保持唤醒状态期间一直保留此 expiration_keep_alive,或者必须在丢弃 expiration_keep_alive 之前从电源框架获取自己的唤醒租约,以防止挂起。
错误:
- INVALID_ARGS:指定的
id无效。 - NOT_SUPPORTED:指定的
id不支持此方法。 - BAD_STATE:驱动程序处于不良状态,例如,它没有可提供给客户端的
expiration_keep_alive令牌。 - INTERNAL_ERROR:驱动程序遇到内部错误。
请求
| 名称 | 类型 |
|---|---|
id |
uint64
|
resolution |
Resolution
|
ticks |
uint64
|
setup_keep_alive |
fuchsia.power.system/LeaseToken
|
响应
| 名称 | 类型 |
|---|---|
payload |
Device_StartAndWait2_Result
|
停止
停止定时器 id。
请注意,这可能会与计时器到期发生竞态,例如,通过使用 SetEvent 设置的事件进行的通知可能已经在传输中。
如果指定的 id 无效,则此调用将返回 INVALID_ARGS。
如果驱动程序遇到内部错误,则此调用将返回 INTERNAL_ERROR。
请求
| 名称 | 类型 |
|---|---|
id |
uint64
|
响应
| 名称 | 类型 |
|---|---|
payload |
Device_Stop_Result
|
STRUCTS
Device_GetProperties_Response 资源
在 fuchsia.hardware.hrtimer/hrtimer.fidl 中定义
| 字段 | 类型 | 说明 | 默认 |
|---|---|---|---|
properties |
Properties
|
无默认应用 |
Device_GetTicksLeft_Response
在 fuchsia.hardware.hrtimer/hrtimer.fidl 中定义
| 字段 | 类型 | 说明 | 默认 |
|---|---|---|---|
ticks |
uint64
|
无默认应用 |
Device_ReadClock_Response
在 fuchsia.hardware.hrtimer/hrtimer.fidl 中定义
| 字段 | 类型 | 说明 | 默认 |
|---|---|---|---|
ticks |
uint64
|
无默认应用 |
Device_ReadTimer_Response
在 fuchsia.hardware.hrtimer/hrtimer.fidl 中定义
| 字段 | 类型 | 说明 | 默认 |
|---|---|---|---|
ticks |
uint64
|
无默认应用 |
Device_SetEvent_Response
在 fuchsia.hardware.hrtimer/hrtimer.fidl 中定义
<EMPTY>
Device_StartAndWait2_Response 资源
在 fuchsia.hardware.hrtimer/hrtimer.fidl 中定义
| 字段 | 类型 | 说明 | 默认 |
|---|---|---|---|
expiration_keep_alive |
fuchsia.power.system/LeaseToken
|
无默认应用 |
Device_StartAndWait_Response 资源
在 fuchsia.hardware.hrtimer/hrtimer.fidl 中定义
| 字段 | 类型 | 说明 | 默认 |
|---|---|---|---|
keep_alive |
fuchsia.power.system/LeaseToken
|
无默认应用 |
Device_Start_Response
在 fuchsia.hardware.hrtimer/hrtimer.fidl 中定义
<EMPTY>
Device_Stop_Response
在 fuchsia.hardware.hrtimer/hrtimer.fidl 中定义
<EMPTY>
枚举
DriverError flexible
类型:uint32
在 fuchsia.hardware.hrtimer/hrtimer.fidl 中定义
此驱动程序可能返回的错误。
| 名称 | 值 | 说明 |
|---|---|---|
INTERNAL_ERROR |
1 |
驱动程序在执行操作时遇到了未指明的错误。 |
NOT_SUPPORTED |
2 |
该操作未实现、不受支持或未启用。 |
INVALID_ARGS |
3 |
参数无效。 |
BAD_STATE |
4 |
操作失败,因为驱动程序的当前状态不允许执行该操作,或者未满足该操作的前提条件。 |
CANCELED |
5 |
正在进行的操作已取消。 |
PowerUpState flexible
类型:uint32
在 fuchsia.hardware.hrtimer/hrtimer.fidl 中定义
指示启动时计时器硬件的启动状态。
| 名称 | 值 | 说明 |
|---|---|---|
未知 |
0 |
开机状态未知或硬件未报告。 |
核心观众 |
1 |
硬件正常启动(备用电源正常供电)。 |
BATTERY_DRAIN |
2 |
硬件在电池电量耗尽或完全断电后开机(备份域寄存器已重置)。 |
TABLES
媒体资源资源
在 fuchsia.hardware.hrtimer/hrtimer.fidl 中定义
驱动程序属性。
| 序数 | 字段 | 类型 | 说明 |
|---|---|---|---|
1 |
timers_properties |
vector<TimerProperties>:64
|
检索支持的定时器属性。 可选。 |
2 |
driver_node_token |
handle<event>
|
司机节点令牌。 如果驱动程序提供此值,调用方可以使用它来请求有关驱动程序的其他信息。 可选。司机可能没有可提供的令牌。 |
TimerProperties
在 fuchsia.hardware.hrtimer/hrtimer.fidl 中定义
由驱动程序抽象化的特定计时器的属性。
| 序数 | 字段 | 类型 | 说明 |
|---|---|---|---|
1 |
id |
uint64
|
此计时器的唯一标识符。
必填。 |
2 |
supported_resolutions |
vector<Resolution>:64
|
检索此计时器支持的分辨率。 必填。 |
3 |
max_ticks |
uint64
|
范围(以刻度为单位)。 这是启动计时器时可以设置的最长时间(以 tick 为单位)。实际时间(例如纳秒)的最大范围取决于所用的分辨率。 注意:此处报告的值无需与硬件实际支持的值相同。驱动程序可以提供对所报告 必填。 |
4 |
supports_event |
bool
|
如果为 true,则表示支持 可选。 已弃用:HEAD
|
5 |
supports_wait |
bool
|
如果为 true,则支持 可选。 |
6 |
supports_read |
bool
|
如果为 true,则支持 可选。 |
7 |
power_up_state |
PowerUpState
|
指示启动时计时器硬件的启动状态。 如果不存在,则开机状态为 可选。 |
UNIONS
Device_GetProperties_Result strict resource
在 fuchsia.hardware.hrtimer/hrtimer.fidl 中定义
| 序数 | 变体 | 类型 | 说明 |
|---|---|---|---|
1 |
response |
Device_GetProperties_Response
|
|
3 |
framework_err |
internal
|
Device_GetTicksLeft_Result strict
在 fuchsia.hardware.hrtimer/hrtimer.fidl 中定义
| 序数 | 变体 | 类型 | 说明 |
|---|---|---|---|
1 |
response |
Device_GetTicksLeft_Response
|
|
2 |
err |
DriverError
|
|
3 |
framework_err |
internal
|
Device_ReadClock_Result strict
在 fuchsia.hardware.hrtimer/hrtimer.fidl 中定义
| 序数 | 变体 | 类型 | 说明 |
|---|---|---|---|
1 |
response |
Device_ReadClock_Response
|
|
2 |
err |
DriverError
|
|
3 |
framework_err |
internal
|
Device_ReadTimer_Result strict
在 fuchsia.hardware.hrtimer/hrtimer.fidl 中定义
| 序数 | 变体 | 类型 | 说明 |
|---|---|---|---|
1 |
response |
Device_ReadTimer_Response
|
|
2 |
err |
DriverError
|
|
3 |
framework_err |
internal
|
Device_SetEvent_Result strict
在 fuchsia.hardware.hrtimer/hrtimer.fidl 中定义
| 序数 | 变体 | 类型 | 说明 |
|---|---|---|---|
1 |
response |
Device_SetEvent_Response
|
|
2 |
err |
DriverError
|
|
3 |
framework_err |
internal
|
Device_StartAndWait2_Result strict resource
在 fuchsia.hardware.hrtimer/hrtimer.fidl 中定义
| 序数 | 变体 | 类型 | 说明 |
|---|---|---|---|
1 |
response |
Device_StartAndWait2_Response
|
|
2 |
err |
DriverError
|
|
3 |
framework_err |
internal
|
Device_StartAndWait_Result strict resource
在 fuchsia.hardware.hrtimer/hrtimer.fidl 中定义
| 序数 | 变体 | 类型 | 说明 |
|---|---|---|---|
1 |
response |
Device_StartAndWait_Response
|
|
2 |
err |
DriverError
|
|
3 |
framework_err |
internal
|
Device_Start_Result strict
在 fuchsia.hardware.hrtimer/hrtimer.fidl 中定义
| 序数 | 变体 | 类型 | 说明 |
|---|---|---|---|
1 |
response |
Device_Start_Response
|
|
2 |
err |
DriverError
|
|
3 |
framework_err |
internal
|
Device_Stop_Result strict
在 fuchsia.hardware.hrtimer/hrtimer.fidl 中定义
| 序数 | 变体 | 类型 | 说明 |
|---|---|---|---|
1 |
response |
Device_Stop_Response
|
|
2 |
err |
DriverError
|
|
3 |
framework_err |
internal
|
分辨率灵活
在 fuchsia.hardware.hrtimer/hrtimer.fidl 中定义
计时器一个刻度的时间。
| 序数 | 变体 | 类型 | 说明 |
|---|---|---|---|
1 |
duration |
zx/Duration
|
为单个刻度指定的分辨率。 |
常量
| 名称 | 值 | 类型 | 说明 |
|---|---|---|---|
| MAX_COUNT_RESOLUTIONS |
64
|
uint32 |
给定计时器支持的分辨率数量上限,任意。 |
| MAX_COUNT_TIMERS |
64
|
uint32 |
此协议支持的定时器数量上限,任意。 |
服务
服务
在 fuchsia.hardware.hrtimer/hrtimer.fidl 中定义
| 名称 | 类型 | 传输 |
|---|---|---|
| 设备 |
fuchsia.hardware.hrtimer/Device
|
渠道 |