diff options
| author | Dario Nieuwenhuis <[email protected]> | 2023-02-07 22:49:14 +0100 |
|---|---|---|
| committer | Dario Nieuwenhuis <[email protected]> | 2023-02-08 00:17:08 +0100 |
| commit | 3af991ab63d14cfad6f50d28bfb944d1895d1c70 (patch) | |
| tree | 575fecf6f47fbfd7116070aff2ffd5f4e84c7cf1 /examples/nrf52840/src/bin | |
| parent | 1d841cc8ac74feacc4d231958ce2c46419ae3bda (diff) | |
usb: unify ControlHandler+DeviceStateHandler, route all control requests to all handlers.
- Allows classes to handle vendor requests.
- Allows classes to use a single handler for multiple interfaces.
- Allows classes to access the other events (previously only `reset` was available).
Diffstat (limited to 'examples/nrf52840/src/bin')
| -rw-r--r-- | examples/nrf52840/src/bin/usb_ethernet.rs | 1 | ||||
| -rw-r--r-- | examples/nrf52840/src/bin/usb_hid_keyboard.rs | 25 | ||||
| -rw-r--r-- | examples/nrf52840/src/bin/usb_hid_mouse.rs | 1 | ||||
| -rw-r--r-- | examples/nrf52840/src/bin/usb_serial.rs | 1 | ||||
| -rw-r--r-- | examples/nrf52840/src/bin/usb_serial_multitask.rs | 1 | ||||
| -rw-r--r-- | examples/nrf52840/src/bin/usb_serial_winusb.rs | 1 |
6 files changed, 13 insertions, 17 deletions
diff --git a/examples/nrf52840/src/bin/usb_ethernet.rs b/examples/nrf52840/src/bin/usb_ethernet.rs index 699666cee..979780896 100644 --- a/examples/nrf52840/src/bin/usb_ethernet.rs +++ b/examples/nrf52840/src/bin/usb_ethernet.rs | |||
| @@ -82,7 +82,6 @@ async fn main(spawner: Spawner) { | |||
| 82 | &mut singleton!([0; 256])[..], | 82 | &mut singleton!([0; 256])[..], |
| 83 | &mut singleton!([0; 256])[..], | 83 | &mut singleton!([0; 256])[..], |
| 84 | &mut singleton!([0; 128])[..], | 84 | &mut singleton!([0; 128])[..], |
| 85 | None, | ||
| 86 | ); | 85 | ); |
| 87 | 86 | ||
| 88 | // Our MAC addr. | 87 | // Our MAC addr. |
diff --git a/examples/nrf52840/src/bin/usb_hid_keyboard.rs b/examples/nrf52840/src/bin/usb_hid_keyboard.rs index 017cac197..3d8a114cd 100644 --- a/examples/nrf52840/src/bin/usb_hid_keyboard.rs +++ b/examples/nrf52840/src/bin/usb_hid_keyboard.rs | |||
| @@ -16,7 +16,7 @@ use embassy_sync::blocking_mutex::raw::CriticalSectionRawMutex; | |||
| 16 | use embassy_sync::signal::Signal; | 16 | use embassy_sync::signal::Signal; |
| 17 | use embassy_usb::class::hid::{HidReaderWriter, ReportId, RequestHandler, State}; | 17 | use embassy_usb::class::hid::{HidReaderWriter, ReportId, RequestHandler, State}; |
| 18 | use embassy_usb::control::OutResponse; | 18 | use embassy_usb::control::OutResponse; |
| 19 | use embassy_usb::{Builder, Config, DeviceStateHandler}; | 19 | use embassy_usb::{Builder, Config, Handler}; |
| 20 | use usbd_hid::descriptor::{KeyboardReport, SerializedDescriptor}; | 20 | use usbd_hid::descriptor::{KeyboardReport, SerializedDescriptor}; |
| 21 | use {defmt_rtt as _, panic_probe as _}; | 21 | use {defmt_rtt as _, panic_probe as _}; |
| 22 | 22 | ||
| @@ -52,7 +52,7 @@ async fn main(_spawner: Spawner) { | |||
| 52 | let mut bos_descriptor = [0; 256]; | 52 | let mut bos_descriptor = [0; 256]; |
| 53 | let mut control_buf = [0; 64]; | 53 | let mut control_buf = [0; 64]; |
| 54 | let request_handler = MyRequestHandler {}; | 54 | let request_handler = MyRequestHandler {}; |
| 55 | let device_state_handler = MyDeviceStateHandler::new(); | 55 | let mut device_handler = MyDeviceHandler::new(); |
| 56 | 56 | ||
| 57 | let mut state = State::new(); | 57 | let mut state = State::new(); |
| 58 | 58 | ||
| @@ -63,9 +63,10 @@ async fn main(_spawner: Spawner) { | |||
| 63 | &mut config_descriptor, | 63 | &mut config_descriptor, |
| 64 | &mut bos_descriptor, | 64 | &mut bos_descriptor, |
| 65 | &mut control_buf, | 65 | &mut control_buf, |
| 66 | Some(&device_state_handler), | ||
| 67 | ); | 66 | ); |
| 68 | 67 | ||
| 68 | builder.handler(&mut device_handler); | ||
| 69 | |||
| 69 | // Create classes on the builder. | 70 | // Create classes on the builder. |
| 70 | let config = embassy_usb::class::hid::Config { | 71 | let config = embassy_usb::class::hid::Config { |
| 71 | report_descriptor: KeyboardReport::desc(), | 72 | report_descriptor: KeyboardReport::desc(), |
| @@ -164,20 +165,20 @@ impl RequestHandler for MyRequestHandler { | |||
| 164 | } | 165 | } |
| 165 | } | 166 | } |
| 166 | 167 | ||
| 167 | struct MyDeviceStateHandler { | 168 | struct MyDeviceHandler { |
| 168 | configured: AtomicBool, | 169 | configured: AtomicBool, |
| 169 | } | 170 | } |
| 170 | 171 | ||
| 171 | impl MyDeviceStateHandler { | 172 | impl MyDeviceHandler { |
| 172 | fn new() -> Self { | 173 | fn new() -> Self { |
| 173 | MyDeviceStateHandler { | 174 | MyDeviceHandler { |
| 174 | configured: AtomicBool::new(false), | 175 | configured: AtomicBool::new(false), |
| 175 | } | 176 | } |
| 176 | } | 177 | } |
| 177 | } | 178 | } |
| 178 | 179 | ||
| 179 | impl DeviceStateHandler for MyDeviceStateHandler { | 180 | impl Handler for MyDeviceHandler { |
| 180 | fn enabled(&self, enabled: bool) { | 181 | fn enabled(&mut self, enabled: bool) { |
| 181 | self.configured.store(false, Ordering::Relaxed); | 182 | self.configured.store(false, Ordering::Relaxed); |
| 182 | SUSPENDED.store(false, Ordering::Release); | 183 | SUSPENDED.store(false, Ordering::Release); |
| 183 | if enabled { | 184 | if enabled { |
| @@ -187,17 +188,17 @@ impl DeviceStateHandler for MyDeviceStateHandler { | |||
| 187 | } | 188 | } |
| 188 | } | 189 | } |
| 189 | 190 | ||
| 190 | fn reset(&self) { | 191 | fn reset(&mut self) { |
| 191 | self.configured.store(false, Ordering::Relaxed); | 192 | self.configured.store(false, Ordering::Relaxed); |
| 192 | info!("Bus reset, the Vbus current limit is 100mA"); | 193 | info!("Bus reset, the Vbus current limit is 100mA"); |
| 193 | } | 194 | } |
| 194 | 195 | ||
| 195 | fn addressed(&self, addr: u8) { | 196 | fn addressed(&mut self, addr: u8) { |
| 196 | self.configured.store(false, Ordering::Relaxed); | 197 | self.configured.store(false, Ordering::Relaxed); |
| 197 | info!("USB address set to: {}", addr); | 198 | info!("USB address set to: {}", addr); |
| 198 | } | 199 | } |
| 199 | 200 | ||
| 200 | fn configured(&self, configured: bool) { | 201 | fn configured(&mut self, configured: bool) { |
| 201 | self.configured.store(configured, Ordering::Relaxed); | 202 | self.configured.store(configured, Ordering::Relaxed); |
| 202 | if configured { | 203 | if configured { |
| 203 | info!("Device configured, it may now draw up to the configured current limit from Vbus.") | 204 | info!("Device configured, it may now draw up to the configured current limit from Vbus.") |
| @@ -206,7 +207,7 @@ impl DeviceStateHandler for MyDeviceStateHandler { | |||
| 206 | } | 207 | } |
| 207 | } | 208 | } |
| 208 | 209 | ||
| 209 | fn suspended(&self, suspended: bool) { | 210 | fn suspended(&mut self, suspended: bool) { |
| 210 | if suspended { | 211 | if suspended { |
| 211 | info!("Device suspended, the Vbus current limit is 500µA (or 2.5mA for high-power devices with remote wakeup enabled)."); | 212 | info!("Device suspended, the Vbus current limit is 500µA (or 2.5mA for high-power devices with remote wakeup enabled)."); |
| 212 | SUSPENDED.store(true, Ordering::Release); | 213 | SUSPENDED.store(true, Ordering::Release); |
diff --git a/examples/nrf52840/src/bin/usb_hid_mouse.rs b/examples/nrf52840/src/bin/usb_hid_mouse.rs index a5849129a..d7c9d55b7 100644 --- a/examples/nrf52840/src/bin/usb_hid_mouse.rs +++ b/examples/nrf52840/src/bin/usb_hid_mouse.rs | |||
| @@ -55,7 +55,6 @@ async fn main(_spawner: Spawner) { | |||
| 55 | &mut config_descriptor, | 55 | &mut config_descriptor, |
| 56 | &mut bos_descriptor, | 56 | &mut bos_descriptor, |
| 57 | &mut control_buf, | 57 | &mut control_buf, |
| 58 | None, | ||
| 59 | ); | 58 | ); |
| 60 | 59 | ||
| 61 | // Create classes on the builder. | 60 | // Create classes on the builder. |
diff --git a/examples/nrf52840/src/bin/usb_serial.rs b/examples/nrf52840/src/bin/usb_serial.rs index 18b6f25b9..102d7ea60 100644 --- a/examples/nrf52840/src/bin/usb_serial.rs +++ b/examples/nrf52840/src/bin/usb_serial.rs | |||
| @@ -59,7 +59,6 @@ async fn main(_spawner: Spawner) { | |||
| 59 | &mut config_descriptor, | 59 | &mut config_descriptor, |
| 60 | &mut bos_descriptor, | 60 | &mut bos_descriptor, |
| 61 | &mut control_buf, | 61 | &mut control_buf, |
| 62 | None, | ||
| 63 | ); | 62 | ); |
| 64 | 63 | ||
| 65 | // Create classes on the builder. | 64 | // Create classes on the builder. |
diff --git a/examples/nrf52840/src/bin/usb_serial_multitask.rs b/examples/nrf52840/src/bin/usb_serial_multitask.rs index 3532d3f82..558d4ba60 100644 --- a/examples/nrf52840/src/bin/usb_serial_multitask.rs +++ b/examples/nrf52840/src/bin/usb_serial_multitask.rs | |||
| @@ -83,7 +83,6 @@ async fn main(spawner: Spawner) { | |||
| 83 | &mut res.config_descriptor, | 83 | &mut res.config_descriptor, |
| 84 | &mut res.bos_descriptor, | 84 | &mut res.bos_descriptor, |
| 85 | &mut res.control_buf, | 85 | &mut res.control_buf, |
| 86 | None, | ||
| 87 | ); | 86 | ); |
| 88 | 87 | ||
| 89 | // Create classes on the builder. | 88 | // Create classes on the builder. |
diff --git a/examples/nrf52840/src/bin/usb_serial_winusb.rs b/examples/nrf52840/src/bin/usb_serial_winusb.rs index f4b828de6..ade6af527 100644 --- a/examples/nrf52840/src/bin/usb_serial_winusb.rs +++ b/examples/nrf52840/src/bin/usb_serial_winusb.rs | |||
| @@ -65,7 +65,6 @@ async fn main(_spawner: Spawner) { | |||
| 65 | &mut bos_descriptor, | 65 | &mut bos_descriptor, |
| 66 | &mut msos_descriptor, | 66 | &mut msos_descriptor, |
| 67 | &mut control_buf, | 67 | &mut control_buf, |
| 68 | None, | ||
| 69 | ); | 68 | ); |
| 70 | 69 | ||
| 71 | builder.msos_descriptor(windows_version::WIN8_1, 2); | 70 | builder.msos_descriptor(windows_version::WIN8_1, 2); |
