Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions embedded-service/src/power/policy/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,13 @@ pub enum Error {
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub struct DeviceId(pub u8);

#[cfg(not(feature = "defmt"))]
impl core::fmt::Display for DeviceId {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
write!(f, "DeviceId({})", self.0)
}
}

/// Amount of power that a device can provider or consume
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
Expand Down
8 changes: 4 additions & 4 deletions examples/std/src/bin/type_c/basic.rs
Original file line number Diff line number Diff line change
Expand Up @@ -72,14 +72,14 @@ mod test_controller {
async fn process_ucsi_command(&self, command: &lpm::GlobalCommand) -> ucsi::GlobalResponse {
match command.operation() {
lpm::CommandData::ConnectorReset => {
info!("Reset for port {:#?}", command.port());
info!("Reset for {}", command.port());
ucsi::Response {
cci: ucsi::cci::Cci::new_cmd_complete(),
data: None,
}
}
rest => {
info!("UCSI command {:#?} for port {:#?}", rest, command.port());
info!("UCSI command {:#?} for {}", rest, command.port());
ucsi::Response {
cci: ucsi::cci::Cci::new_cmd_complete(),
data: None,
Expand All @@ -94,11 +94,11 @@ mod test_controller {
) -> Result<controller::PortResponseData, Error> {
Ok(match command.data {
controller::PortCommandData::PortStatus(Cached(true)) => {
info!("Port status for port {}", command.port.0);
info!("Port status for {}", command.port);
controller::PortResponseData::PortStatus(PortStatus::new())
}
_ => {
info!("Port command for port {}", command.port.0);
info!("Port command for {}", command.port);
controller::PortResponseData::Complete
}
})
Expand Down
6 changes: 3 additions & 3 deletions examples/std/src/bin/type_c/service.rs
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,9 @@ mod debug {
fn receive(&self, message: &comms::Message) -> Result<(), comms::MailboxDelegateError> {
if let Some(message) = message.data.get::<DebugAccessoryMessage>() {
if message.connected {
info!("Port{}: Debug accessory connected", message.port.0);
info!("{}: Debug accessory connected", message.port);
} else {
info!("Port{}: Debug accessory disconnected", message.port.0);
info!("{}: Debug accessory disconnected", message.port);
}
}

Expand Down Expand Up @@ -88,7 +88,7 @@ async fn controller_task(state: &'static mock_controller::ControllerState) {

let output = output.unwrap();
if let Output::PdAlert(OutputPdAlert { port, ado }) = &output {
info!("Port{}: PD alert received: {:?}", port.0, ado);
info!("{}: PD alert received: {:?}", port, ado);
}

if let Err(e) = wrapper.finalize(output).await {
Expand Down
32 changes: 16 additions & 16 deletions examples/std/src/lib/type_c/mock_controller.rs
Original file line number Diff line number Diff line change
Expand Up @@ -182,10 +182,10 @@ impl embedded_services::type_c::controller::Controller for Controller<'_> {
async fn get_pd_alert(&mut self, port: LocalPortId) -> Result<Option<Ado>, Error<Self::BusError>> {
let pd_alert = self.state.pd_alert.lock().await;
if let Some(ado) = *pd_alert {
debug!("Port{}: Get PD alert: {ado:#?}", port.0);
debug!("{}: Get PD alert: {ado:#?}", port);
Ok(Some(ado))
} else {
debug!("Port{}: No PD alert", port.0);
debug!("{}: No PD alert", port);
Ok(None)
}
}
Expand Down Expand Up @@ -224,32 +224,32 @@ impl embedded_services::type_c::controller::Controller for Controller<'_> {
port: LocalPortId,
voltage_mv: Option<u16>,
) -> Result<(), Error<Self::BusError>> {
debug!("Set max sink voltage for port {}: {:?}", port.0, voltage_mv);
debug!("Set max sink voltage for {}: {:?}", port, voltage_mv);
Ok(())
}

async fn reconfigure_retimer(&mut self, port: LocalPortId) -> Result<(), Error<Self::BusError>> {
debug!("reconfigure_retimer(port: {port:?})");
debug!("reconfigure_retimer(port: {port})");
Ok(())
}

async fn clear_dead_battery_flag(&mut self, port: LocalPortId) -> Result<(), Error<Self::BusError>> {
debug!("clear_dead_battery_flag(port: {port:?})");
debug!("clear_dead_battery_flag(port: {port})");
Ok(())
}

async fn get_other_vdm(&mut self, port: LocalPortId) -> Result<OtherVdm, Error<Self::BusError>> {
debug!("Get other VDM for port {port:?}");
debug!("Get other VDM for {port}");
Ok(OtherVdm::default())
}

async fn get_attn_vdm(&mut self, port: LocalPortId) -> Result<AttnVdm, Error<Self::BusError>> {
debug!("Get attention VDM for port {port:?}");
debug!("Get attention VDM for {port}");
Ok(AttnVdm::default())
}

async fn send_vdm(&mut self, port: LocalPortId, tx_vdm: SendVdm) -> Result<(), Error<Self::BusError>> {
debug!("Send VDM for port {port:?}: {tx_vdm:?}");
debug!("Send VDM for {port}: {tx_vdm:?}");
Ok(())
}

Expand All @@ -259,14 +259,14 @@ impl embedded_services::type_c::controller::Controller for Controller<'_> {
config: UsbControlConfig,
) -> Result<(), Error<Self::BusError>> {
debug!(
"set_usb_control(port: {port:?}, usb2: {}, usb3: {}, usb4: {})",
"set_usb_control(port: {port}, usb2: {}, usb3: {}, usb4: {})",
config.usb2_enabled, config.usb3_enabled, config.usb4_enabled
);
Ok(())
}

async fn get_dp_status(&mut self, port: LocalPortId) -> Result<DpStatus, Error<Self::BusError>> {
debug!("Get DisplayPort status for port {port:?}");
debug!("Get DisplayPort status for {port}");
Ok(DpStatus {
alt_mode_entered: false,
dfp_d_pin_cfg: DpPinConfig::default(),
Expand All @@ -275,19 +275,19 @@ impl embedded_services::type_c::controller::Controller for Controller<'_> {

async fn set_dp_config(&mut self, port: LocalPortId, config: DpConfig) -> Result<(), Error<Self::BusError>> {
debug!(
"Set DisplayPort config for port {port:?}: enable={}, pin_cfg={:?}",
"Set DisplayPort config for {port}: enable={}, pin_cfg={:?}",
config.enable, config.dfp_d_pin_cfg
);
Ok(())
}

async fn execute_drst(&mut self, port: LocalPortId) -> Result<(), Error<Self::BusError>> {
debug!("Execute PD Data Reset for port {port:?}");
debug!("Execute PD Data Reset for {port}");
Ok(())
}

async fn set_tbt_config(&mut self, port: LocalPortId, config: TbtConfig) -> Result<(), Error<Self::BusError>> {
debug!("Set Thunderbolt config for port {port:?}: {config:?}");
debug!("Set Thunderbolt config for {port}: {config:?}");
Ok(())
}

Expand All @@ -296,7 +296,7 @@ impl embedded_services::type_c::controller::Controller for Controller<'_> {
port: LocalPortId,
config: PdStateMachineConfig,
) -> Result<(), Error<Self::BusError>> {
debug!("Set PD State Machine config for port {port:?}: {config:?}");
debug!("Set PD State Machine config for {port}: {config:?}");
Ok(())
}

Expand All @@ -305,15 +305,15 @@ impl embedded_services::type_c::controller::Controller for Controller<'_> {
port: LocalPortId,
state: TypeCStateMachineState,
) -> Result<(), Error<Self::BusError>> {
debug!("Set Type-C State Machine state for port {port:?}: {state:?}");
debug!("Set Type-C State Machine state for {port}: {state:?}");
Ok(())
}

async fn execute_ucsi_command(
&mut self,
command: lpm::LocalCommand,
) -> Result<Option<lpm::ResponseData>, Error<Self::BusError>> {
debug!("Execute UCSI command for port {:?}: {command:?}", command.port());
debug!("Execute UCSI command for {}: {command:?}", command.port());
match command.operation() {
lpm::CommandData::GetConnectorStatus => Ok(Some(lpm::ResponseData::GetConnectorStatus(
lpm::get_connector_status::ResponseData::default(),
Expand Down
46 changes: 23 additions & 23 deletions type-c-service/src/driver/tps6699x.rs
Original file line number Diff line number Diff line change
Expand Up @@ -294,21 +294,21 @@ impl<M: RawMutex, B: I2c> Controller for Tps6699x<'_, M, B> {
}

let status = self.tps6699x.get_port_status(port).await?;
trace!("Port{} status: {:#?}", port.0, status);
trace!("{} status: {:#?}", port, status);

let pd_status = self.tps6699x.get_pd_status(port).await?;
trace!("Port{} PD status: {:#?}", port.0, pd_status);
trace!("{} PD status: {:#?}", port, pd_status);

let port_control = self.tps6699x.get_port_control(port).await?;
trace!("Port{} control: {:#?}", port.0, port_control);
trace!("{} control: {:#?}", port, port_control);

let mut port_status = PortStatus::default();

let plug_present = status.plug_present();
port_status.connection_state = status.connection_state().try_into().ok();

debug!("Port{} Plug present: {}", port.0, plug_present);
debug!("Port{} Valid connection: {}", port.0, port_status.is_connected());
debug!("{} Plug present: {}", port, plug_present);
debug!("{} Valid connection: {}", port, port_status.is_connected());

if port_status.is_connected() {
// Determine current contract if any
Expand Down Expand Up @@ -339,7 +339,7 @@ impl<M: RawMutex, B: I2c> Controller for Tps6699x<'_, M, B> {

if num_sprs == 0 {
// USB PD spec requires at least one source PDO be present, something is really wrong
error!("Port{} no source PDOs found", port.0);
error!("{} no source PDOs found", port);
return Err(PdError::InvalidParams.into());
}

Expand All @@ -354,19 +354,19 @@ impl<M: RawMutex, B: I2c> Controller for Tps6699x<'_, M, B> {
} else if pd_status.is_source() {
// Implicit source contract
let current = TypecCurrent::try_from(port_control.typec_current()).map_err(Error::Pd)?;
debug!("Port{} type-C source current: {:#?}", port.0, current);
debug!("{} type-C source current: {:#?}", port, current);
let new_contract = Some(PowerCapability::from(current));
port_status.available_source_contract = new_contract;
} else {
// Implicit sink contract
let pull = pd_status.cc_pull_up();
let new_contract = if pull == PdCcPullUp::NoPull {
// No pull up means no contract
debug!("Port{} no pull up", port.0);
debug!("{} no pull up", port);
None
} else {
let current = TypecCurrent::try_from(pd_status.cc_pull_up()).map_err(Error::Pd)?;
debug!("Port{} type-C sink current: {:#?}", port.0, current);
debug!("{} type-C sink current: {:#?}", port, current);
Some(PowerCapability::from(current))
};
port_status.available_sink_contract = new_contract;
Expand All @@ -390,12 +390,12 @@ impl<M: RawMutex, B: I2c> Controller for Tps6699x<'_, M, B> {

// Update alt-mode status
let alt_mode = self.tps6699x.get_alt_mode_status(port).await?;
debug!("Port{} alt mode: {:#?}", port.0, alt_mode);
debug!("{} alt mode: {:#?}", port, alt_mode);
port_status.alt_mode = alt_mode;

// Update power path status
let power_path = self.tps6699x.get_power_path_status(port).await?;
trace!("Port{} power source: {:#?}", port.0, power_path);
trace!("{} power source: {:#?}", port, power_path);
port_status.power_path = match port {
PORT0 => PowerPathStatus::new(
power_path.pa_ext_vbus_sw() == PpExtVbusSw::EnabledInput,
Expand All @@ -407,7 +407,7 @@ impl<M: RawMutex, B: I2c> Controller for Tps6699x<'_, M, B> {
),
_ => Err(PdError::InvalidPort)?,
};
debug!("Port{} power path: {:#?}", port.0, port_status.power_path);
debug!("{} power path: {:#?}", port, port_status.power_path);
}

Ok(port_status)
Expand Down Expand Up @@ -449,7 +449,7 @@ impl<M: RawMutex, B: I2c> Controller for Tps6699x<'_, M, B> {
match self.tps6699x.execute_muxr(port, input).await? {
ReturnValue::Success => Ok(()),
r => {
debug!("Error executing MuxR on port {}: {:#?}", port.0, r);
debug!("Error executing MuxR on {}: {:#?}", port, r);
Err(Error::Pd(PdError::InvalidResponse))
}
}
Expand All @@ -459,19 +459,19 @@ impl<M: RawMutex, B: I2c> Controller for Tps6699x<'_, M, B> {
match self.tps6699x.execute_dbfg(port).await? {
ReturnValue::Success => Ok(()),
r => {
debug!("Error executing DBfg on port {}: {:#?}", port.0, r);
debug!("Error executing DBfg on {}: {:#?}", port, r);
Err(Error::Pd(PdError::InvalidResponse))
}
}
}

async fn enable_sink_path(&mut self, port: LocalPortId, enable: bool) -> Result<(), Error<Self::BusError>> {
debug!("Port{} enable sink path: {}", port.0, enable);
debug!("{} enable sink path: {}", port, enable);
match self.tps6699x.enable_sink_path(port, enable).await {
// Temporary workaround for autofet rejection
// Tracking bug: https://github.com/OpenDevicePartnership/embedded-services/issues/268
Err(Error::Pd(PdError::Rejected)) | Err(Error::Pd(PdError::Timeout)) => {
info!("Port{} autofet rejection, ignored", port.0);
info!("{} autofet rejection, ignored", port);
Ok(())
}
rest => rest,
Expand Down Expand Up @@ -638,7 +638,7 @@ impl<M: RawMutex, B: I2c> Controller for Tps6699x<'_, M, B> {
match self.tps6699x.send_vdms(port, input).await? {
ReturnValue::Success => Ok(()),
r => {
debug!("Error executing VDMs on port {}: {:#?}", port.0, r);
debug!("Error executing VDMs on {}: {:#?}", port, r);
Err(Error::Pd(PdError::InvalidResponse))
}
}
Expand Down Expand Up @@ -675,7 +675,7 @@ impl<M: RawMutex, B: I2c> Controller for Tps6699x<'_, M, B> {

async fn get_dp_status(&mut self, port: LocalPortId) -> Result<controller::DpStatus, Error<Self::BusError>> {
let dp_status = self.tps6699x.get_dp_status(port).await?;
debug!("Port{} DP status: {:#?}", port.0, dp_status);
debug!("{} DP status: {:#?}", port, dp_status);

let alt_mode_entered = dp_status.dp_mode_active() != 0;

Expand All @@ -694,7 +694,7 @@ impl<M: RawMutex, B: I2c> Controller for Tps6699x<'_, M, B> {
port: LocalPortId,
config: controller::DpConfig,
) -> Result<(), Error<Self::BusError>> {
debug!("Port{} setting DP config: {:#?}", port.0, config);
debug!("{} setting DP config: {:#?}", port, config);

let mut dp_config_reg = self.tps6699x.get_dp_config(port).await?;

Expand All @@ -712,14 +712,14 @@ impl<M: RawMutex, B: I2c> Controller for Tps6699x<'_, M, B> {
match self.tps6699x.execute_drst(port).await? {
ReturnValue::Success => Ok(()),
r => {
debug!("Error executing DRST on port {}: {:#?}", port.0, r);
debug!("Error executing DRST on {}: {:#?}", port, r);
Err(Error::Pd(PdError::InvalidResponse))
}
}
}

async fn set_tbt_config(&mut self, port: LocalPortId, config: TbtConfig) -> Result<(), Error<Self::BusError>> {
debug!("Port{} setting TBT config: {:#?}", port.0, config);
debug!("{} setting TBT config: {:#?}", port, config);

let mut config_reg = self.tps6699x.lock_inner().await.get_tbt_config(port).await?;

Expand All @@ -734,7 +734,7 @@ impl<M: RawMutex, B: I2c> Controller for Tps6699x<'_, M, B> {
port: LocalPortId,
config: controller::PdStateMachineConfig,
) -> Result<(), Error<Self::BusError>> {
debug!("Port{} setting PD state machine config: {:#?}", port.0, config);
debug!("{} setting PD state machine config: {:#?}", port, config);

let mut config_reg = self.tps6699x.lock_inner().await.get_port_config(port).await?;

Expand All @@ -748,7 +748,7 @@ impl<M: RawMutex, B: I2c> Controller for Tps6699x<'_, M, B> {
port: LocalPortId,
state: controller::TypeCStateMachineState,
) -> Result<(), Error<Self::BusError>> {
debug!("Port{} setting Type-C state machine state: {:#?}", port.0, state);
debug!("{} setting Type-C state machine state: {:#?}", port, state);

let mut config_reg = self.tps6699x.lock_inner().await.get_port_config(port).await?;
let typec_state = match state {
Expand Down
Loading
Loading