add susependable field to embassy_usb::builder::Config

- allow for optional override of `Suspend` event for a UsbDevice
This commit is contained in:
djstrickland 2023-12-13 10:17:07 -05:00
parent 915423fc63
commit d596a1091d
2 changed files with 15 additions and 3 deletions

View File

@ -94,6 +94,15 @@ pub struct Config<'a> {
/// Default: 100mA /// Default: 100mA
/// Max: 500mA /// Max: 500mA
pub max_power: u16, pub max_power: u16,
/// Allow the bus to be suspended.
///
/// If set to `true`, the bus will put itself in the suspended state
/// when it receives a `driver::Event::Suspend` bus event. If you wish
/// to override this behavior, set this field to `false`.
///
/// Default: `true`
pub suspendable: bool,
} }
impl<'a> Config<'a> { impl<'a> Config<'a> {
@ -114,6 +123,7 @@ impl<'a> Config<'a> {
supports_remote_wakeup: false, supports_remote_wakeup: false,
composite_with_iads: false, composite_with_iads: false,
max_power: 100, max_power: 100,
suspendable: true,
} }
} }
} }

View File

@ -471,11 +471,13 @@ impl<'d, D: Driver<'d>> Inner<'d, D> {
} }
Event::Suspend => { Event::Suspend => {
trace!("usb: suspend"); trace!("usb: suspend");
if self.config.suspendable {
self.suspended = true; self.suspended = true;
for h in &mut self.handlers { for h in &mut self.handlers {
h.suspended(true); h.suspended(true);
} }
} }
}
Event::PowerDetected => { Event::PowerDetected => {
trace!("usb: power detected"); trace!("usb: power detected");
self.bus.enable().await; self.bus.enable().await;