From d596a1091d25e89533d08a1f96678f1c1182dc40 Mon Sep 17 00:00:00 2001 From: djstrickland <96876452+dstric-aqueduct@users.noreply.github.com> Date: Wed, 13 Dec 2023 10:17:07 -0500 Subject: [PATCH] add `susependable` field to `embassy_usb::builder::Config` - allow for optional override of `Suspend` event for a UsbDevice --- embassy-usb/src/builder.rs | 10 ++++++++++ embassy-usb/src/lib.rs | 8 +++++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/embassy-usb/src/builder.rs b/embassy-usb/src/builder.rs index c4705d04..ebc1283e 100644 --- a/embassy-usb/src/builder.rs +++ b/embassy-usb/src/builder.rs @@ -94,6 +94,15 @@ pub struct Config<'a> { /// Default: 100mA /// Max: 500mA 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> { @@ -114,6 +123,7 @@ impl<'a> Config<'a> { supports_remote_wakeup: false, composite_with_iads: false, max_power: 100, + suspendable: true, } } } diff --git a/embassy-usb/src/lib.rs b/embassy-usb/src/lib.rs index 241e33a7..ff329587 100644 --- a/embassy-usb/src/lib.rs +++ b/embassy-usb/src/lib.rs @@ -471,9 +471,11 @@ impl<'d, D: Driver<'d>> Inner<'d, D> { } Event::Suspend => { trace!("usb: suspend"); - self.suspended = true; - for h in &mut self.handlers { - h.suspended(true); + if self.config.suspendable { + self.suspended = true; + for h in &mut self.handlers { + h.suspended(true); + } } } Event::PowerDetected => {