PROTOCOLS
Device
Defined in fuchsia.hardware.hrtimer/hrtimer.fidl
A driver providing high resolution timers support. This API is intended for timers that are provided by hardware separate from the CPU For instance this driver may abstract hardware provided by an SoC.
GetProperties
Get driver properties.
Request
<EMPTY>
Response
Name | Type |
---|---|
payload |
Device_GetProperties_Result
|
GetTicksLeft
Get the current time in ticks left in timer id
until expiration.
If the specified id
is invalid, then this call will return INVALID_ARGS
.
Request
Name | Type |
---|---|
id |
uint64
|
Response
Name | Type |
---|---|
payload |
Device_GetTicksLeft_Result
|
SetEvent
Sets a Zircon Event to be notified of the timer expiration.
The timer expiration will be notified via the ZX_EVENT_SIGNALED signal.
The client is responsible for clearing the ZX_EVENT_SIGNALED signal.
Any previously event set for the specific id
is replaced. Note that this may race with
the event signaling from the expiration of a timer already started.
To guarantee that an event is delivered upon timer expiration, this method must be
called before calling Start
.
If the specified id
is invalid, then this call will return INVALID_ARGS
.
If this method is not supported for the given id
, then this call will return
NOT_SUPPORTED
.
If the driver encounters an internal error, then this call will return INTERNAL_ERROR
.
Request
Name | Type |
---|---|
id |
uint64
|
event |
handle<event>
|
Response
Name | Type |
---|---|
payload |
Device_SetEvent_Result
|
Start
Start the timer id
to expire after ticks
.
If ticks
is 0 then the timer will expire in 0 ticks (immediately).
If the timer id
was already started, then the previous Start
is canceled and the driver
will restart the timer. Note that this may race with the expiration of the previous timer,
for instance the notification process may be already started and a new Start
call won't
be able to stop a notification that is already in flight.
If the specified id
is invalid, then this call will return INVALID_ARGS
.
If the specified resolution
is not supported per the resolutions
provided by
GetProperties
, then this call will return INVALID_ARGS
.
If the specified ticks
is beyond the range supported for the timer as provided by
GetProperties
, then this call will return INVALID_ARGS
.
If the driver encounters an internal error, then this call will return INTERNAL_ERROR
.
Request
Name | Type |
---|---|
id |
uint64
|
resolution |
Resolution
|
ticks |
uint64
|
Response
Name | Type |
---|---|
payload |
Device_Start_Result
|
StartAndWait
Start the timer id
to expire after ticks
and waits until the timer expires with
support for preventing suspension via the Power Framework.
The driver will signal the setup_event
event once the timer has been setup using the
ZX_EVENT_SIGNALED signal. This allows a client to know that it is safe to allow the
system to suspend. The client is responsible for clearing this event.
The driver will not respond to this call (hang) until the timer has triggered.
Calling Stop
on the timer will abort this call and return CANCELED
. Note that this
may race with the expiration of the timer.
A driver supporting this call must be able to get a lease on a power element that keeps
the system from suspending. This lease is returned to the client via the keep_alive
LeaseToken channel field. When keep_alive
is closed, then the driver lease keeping the
system from suspending will be dropped. Hence, to guarantee that the system is not
suspended by the Power Framework a client must either keep this keep_alive
token for
as long as the system needs to not suspend, or a client must get its own lease from the
Power Framework to prevent suspension before it drops keep_alive
.
If the specified id
is invalid, then this call will return INVALID_ARGS
.
If this method is not supported for the given id
, then this call will return
NOT_SUPPORTED
.
If the driver does not have a keep_alive
token to provide to the client, then this
call will return BAD_STATE
.
If the driver encounters an internal error, then this call will return INTERNAL_ERROR
.
Request
Name | Type |
---|---|
id |
uint64
|
resolution |
Resolution
|
ticks |
uint64
|
setup_event |
handle<event>
|
Response
Name | Type |
---|---|
payload |
Device_StartAndWait_Result
|
StartAndWait2
Start timer id
and wait for it to expire after ticks
ticks.
The driver will not respond to this call (hang) until the timer has triggered.
Calling Stop
on the timer will abort this call and return CANCELED
. Note that this
may race with the expiration of the timer.
This method keeps the system awake (prevents suspension) while the timer is setup using the
mandatory passed-in setup_keep_alive
LeaseToken
.
When the timer expires this method returns a second expiration_keep_alive
LeaseToken
to prevent suspension at the time of expiration.
These keep alive wake lease tokens are provided by the Power Framework's System Activity
Governor. A driver supporting this call must be able to get expiration_keep_alive
from
System Activity Governor.
When expiration_keep_alive
is closed, then this driver created wake lease keeping the
system from suspending at the time of the timer expiration is dropped. Hence, to guarantee
that the system is not suspended by the Power Framework a client must either keep this
expiration_keep_alive
for as long as the system needs to stay awake, or a client must
get its own wake lease from the Power Framework before it drops expiration_keep_alive
to
prevent suspension.
Errors:
- INVALID_ARGS: The specified
id
is invalid. - NOT_SUPPORTED: This method is not supported for the given
id
. - BAD_STATE: The driver is in a bad state, for instance it does not have an
expiration_keep_alive
token to provide to the client. - INTERNAL_ERROR: The driver encountered an internal error.
Request
Name | Type |
---|---|
id |
uint64
|
resolution |
Resolution
|
ticks |
uint64
|
setup_keep_alive |
fuchsia.power.system/LeaseToken
|
Response
Name | Type |
---|---|
payload |
Device_StartAndWait2_Result
|
Stop
Stops the timer id
.
Note that this may race with the expiration of the timer, for instance notification via
an event set with SetEvent
may be already in flight.
If the specified id
is invalid, then this call will return INVALID_ARGS
.
If the driver encounters an internal error, then this call will return INTERNAL_ERROR
.
Request
Name | Type |
---|---|
id |
uint64
|
Response
Name | Type |
---|---|
payload |
Device_Stop_Result
|
STRUCTS
Device_GetProperties_Response resource
Defined in fuchsia.hardware.hrtimer/hrtimer.fidl
Field | Type | Description | Default |
---|---|---|---|
properties |
Properties
|
No default |
Device_GetTicksLeft_Response
Defined in fuchsia.hardware.hrtimer/hrtimer.fidl
Field | Type | Description | Default |
---|---|---|---|
ticks |
uint64
|
No default |
Device_SetEvent_Response
Defined in fuchsia.hardware.hrtimer/hrtimer.fidl
<EMPTY>
Device_StartAndWait2_Response resource
Defined in fuchsia.hardware.hrtimer/hrtimer.fidl
Field | Type | Description | Default |
---|---|---|---|
expiration_keep_alive |
fuchsia.power.system/LeaseToken
|
No default |
Device_StartAndWait_Response resource
Defined in fuchsia.hardware.hrtimer/hrtimer.fidl
Field | Type | Description | Default |
---|---|---|---|
keep_alive |
fuchsia.power.system/LeaseToken
|
No default |
Device_Start_Response
Defined in fuchsia.hardware.hrtimer/hrtimer.fidl
<EMPTY>
Device_Stop_Response
Defined in fuchsia.hardware.hrtimer/hrtimer.fidl
<EMPTY>
ENUMS
DriverError flexible
Type: uint32
Defined in fuchsia.hardware.hrtimer/hrtimer.fidl
Errors that this driver may return.
Name | Value | Description |
---|---|---|
INTERNAL_ERROR |
1 |
The driver encountered an otherwise unspecified error while performing the operation. |
NOT_SUPPORTED |
2 |
The operation is not implemented, supported, or enabled. |
INVALID_ARGS |
3 |
An argument is invalid. |
BAD_STATE |
4 |
The operation failed because the current state of the driver does not allow it, or a precondition of the operation is not satisfied. |
CANCELED |
5 |
The in-progress operation has been canceled. |
TABLES
Properties resource
Defined in fuchsia.hardware.hrtimer/hrtimer.fidl
Driver properties.
Ordinal | Field | Type | Description |
---|---|---|---|
1 |
timers_properties |
vector<TimerProperties>:64
|
Retrieves the supported timers properties. Optional. |
TimerProperties
Defined in fuchsia.hardware.hrtimer/hrtimer.fidl
Properties for a specific timer abstracted by the driver.
Ordinal | Field | Type | Description |
---|---|---|---|
1 |
id |
uint64
|
Unique identifier for this timer. The Required. |
2 |
supported_resolutions |
vector<Resolution>:64
|
Retrieves the resolutions supported by this timer. Required. |
3 |
max_ticks |
uint64
|
Range in ticks. This is the maximum amount of time that can be set in terms of ticks when a timer is started. The maximum range in actual time (e.g. nanoseconds) depends on the resolution used. NOTE: The value reported here does not need to be identical to what
the hardware actually supports. The driver MAY provide the support for
the reported Required. |
4 |
supports_event |
bool
|
If true then the Optional. |
5 |
supports_wait |
bool
|
If true then the Optional. |
UNIONS
Device_GetProperties_Result strict resource
Defined in fuchsia.hardware.hrtimer/hrtimer.fidl
Ordinal | Variant | Type | Description |
---|---|---|---|
1 |
response |
Device_GetProperties_Response
|
|
3 |
framework_err |
internal
|
Device_GetTicksLeft_Result strict
Defined in fuchsia.hardware.hrtimer/hrtimer.fidl
Ordinal | Variant | Type | Description |
---|---|---|---|
1 |
response |
Device_GetTicksLeft_Response
|
|
2 |
err |
DriverError
|
|
3 |
framework_err |
internal
|
Device_SetEvent_Result strict
Defined in fuchsia.hardware.hrtimer/hrtimer.fidl
Ordinal | Variant | Type | Description |
---|---|---|---|
1 |
response |
Device_SetEvent_Response
|
|
2 |
err |
DriverError
|
|
3 |
framework_err |
internal
|
Device_StartAndWait2_Result strict resource
Defined in fuchsia.hardware.hrtimer/hrtimer.fidl
Ordinal | Variant | Type | Description |
---|---|---|---|
1 |
response |
Device_StartAndWait2_Response
|
|
2 |
err |
DriverError
|
|
3 |
framework_err |
internal
|
Device_StartAndWait_Result strict resource
Defined in fuchsia.hardware.hrtimer/hrtimer.fidl
Ordinal | Variant | Type | Description |
---|---|---|---|
1 |
response |
Device_StartAndWait_Response
|
|
2 |
err |
DriverError
|
|
3 |
framework_err |
internal
|
Device_Start_Result strict
Defined in fuchsia.hardware.hrtimer/hrtimer.fidl
Ordinal | Variant | Type | Description |
---|---|---|---|
1 |
response |
Device_Start_Response
|
|
2 |
err |
DriverError
|
|
3 |
framework_err |
internal
|
Device_Stop_Result strict
Defined in fuchsia.hardware.hrtimer/hrtimer.fidl
Ordinal | Variant | Type | Description |
---|---|---|---|
1 |
response |
Device_Stop_Response
|
|
2 |
err |
DriverError
|
|
3 |
framework_err |
internal
|
Resolution flexible
Defined in fuchsia.hardware.hrtimer/hrtimer.fidl
Amount of time for one tick of a timer.
Ordinal | Variant | Type | Description |
---|---|---|---|
1 |
duration |
zx/Duration
|
The resolution specified for one tick. |
CONSTANTS
Name | Value | Type | Description |
---|---|---|---|
MAX_COUNT_RESOLUTIONS |
64
|
uint32 |
Maximum count of resolutions supported by a given timer, arbitrary. |
MAX_COUNT_TIMERS |
64
|
uint32 |
Maximum count of timers supported by this protocol, arbitrary. |
SERVICES
Service
Defined in fuchsia.hardware.hrtimer/hrtimer.fidl
Name | Type | Transport |
---|---|---|
device |
fuchsia.hardware.hrtimer/Device
|
Channel |