pub enum ControllerRequest {
SetControl {
options: ControlOptions,
responder: ControllerSetControlResponder,
},
ClearControl {
options: ControlOptions,
responder: ControllerClearControlResponder,
},
#[non_exhaustive] _UnknownMethod {
ordinal: u64,
control_handle: ControllerControlHandle,
method_type: MethodType,
},
}Expand description
Control interface for mutating charger hardware state.
§Single-Client Exclusivity (Hardware Driver) vs. Policy Arbitrator
On a hardware charger driver, this protocol mutates shared hardware state and admits a single
active client: while one client is connected, a second connection attempt is closed immediately
with a ZX_ERR_ALREADY_BOUND epitaph before any request is served. When served by a userspace
policy arbitrator (such as battery-manager), multiple policy clients may connect concurrently;
each connection owns an independent vote that is aggregated using minimum selection on limit
fields and Discharging > Passthrough > Charging precedence on operating_mode.
§Connection-Scoped Lifetime (Revert on Close)
The Controller channel encodes the lifetime of the constraints applied through it. When the
client closes the channel (or disconnects unexpectedly), all constraints set during that
session are withdrawn (equivalent to calling ClearControl with an empty ControlOptions).
§Debug Overrides
Fields overridden through Debug take precedence over this protocol. A request that sets an
overridden field is validated and accepted as usual, but the new constraint (like ClearControl
or revert on close) reaches the hardware only once the override is cleared. See Debug.
Variants§
SetControl
Applies operational and electrical constraints to the charger converter.
Validation is atomic: a request rejected with NOT_SUPPORTED or INVALID_ARGS leaves
hardware and session state untouched. The response is returned only after all corresponding
hardware register writes have completed and been acknowledged by the charger IC.
Parameters:
options: The constraints to apply. Present fields overwrite the constraints previously set on this connection for those fields; omitted fields leave this connection’s prior constraints for those fields unchanged.
Errors:
NOT_SUPPORTED: One or more requested constraints are not adjustable on this hardware/arbiter, or the requestedoperating_modeis absent fromSpec.supported_modes.INVALID_ARGS: A requested value is outside the range the hardware can program, or the requestedoperating_modeconflicts with the active power path state (for example, requestingOperatingMode::OTGwhile external input power is online on the same port).IO: Communication failure with the charger hardware (e.g. SPMI transfer failure).INTERNAL: Internal driver error.
ClearControl
Withdraws constraints applied through this connection for the fields present in options.
options acts as a field mask: only field presence (set vs. unset) is inspected, and the
field values themselves are ignored.
- If
optionsis empty (no fields set), all constraints applied through this connection are withdrawn. - If one or more fields are set in
options, only the constraints corresponding to those fields are withdrawn, leaving any other fields untouched.
Each cleared field reverts to the next active constraint, if any, or otherwise to the
autonomous hardware / board-configured default that [Controller] restores on close.
Succeeds without effect for any targeted field that is not currently constrained.
Parameters:
options: Mask ofControlOptionsfields whose constraints should be withdrawn, or an empty table to withdraw all constraints on this connection.
Errors:
IO: Communication failure with the charger hardware. Fields that could not be reverted retain their constraint, so the call can be retried.INTERNAL: Internal driver error.
#[non_exhaustive]_UnknownMethod
An interaction was received which does not match any known method.
Fields
This variant is marked as non-exhaustive
control_handle: ControllerControlHandlemethod_type: MethodTypeImplementations§
Source§impl ControllerRequest
impl ControllerRequest
pub fn into_set_control( self, ) -> Option<(ControlOptions, ControllerSetControlResponder)>
pub fn into_clear_control( self, ) -> Option<(ControlOptions, ControllerClearControlResponder)>
Sourcepub fn method_name(&self) -> &'static str
pub fn method_name(&self) -> &'static str
Name of the method defined in FIDL