aboutsummaryrefslogtreecommitdiff
path: root/examples/nrf52840/src
diff options
context:
space:
mode:
authorDario Nieuwenhuis <[email protected]>2023-02-07 22:49:14 +0100
committerDario Nieuwenhuis <[email protected]>2023-02-08 00:17:08 +0100
commit3af991ab63d14cfad6f50d28bfb944d1895d1c70 (patch)
tree575fecf6f47fbfd7116070aff2ffd5f4e84c7cf1 /examples/nrf52840/src
parent1d841cc8ac74feacc4d231958ce2c46419ae3bda (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')
-rw-r--r--examples/nrf52840/src/bin/usb_ethernet.rs1
-rw-r--r--examples/nrf52840/src/bin/usb_hid_keyboard.rs25
-rw-r--r--examples/nrf52840/src/bin/usb_hid_mouse.rs1
-rw-r--r--examples/nrf52840/src/bin/usb_serial.rs1
-rw-r--r--examples/nrf52840/src/bin/usb_serial_multitask.rs1
-rw-r--r--examples/nrf52840/src/bin/usb_serial_winusb.rs1
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;
16use embassy_sync::signal::Signal; 16use embassy_sync::signal::Signal;
17use embassy_usb::class::hid::{HidReaderWriter, ReportId, RequestHandler, State}; 17use embassy_usb::class::hid::{HidReaderWriter, ReportId, RequestHandler, State};
18use embassy_usb::control::OutResponse; 18use embassy_usb::control::OutResponse;
19use embassy_usb::{Builder, Config, DeviceStateHandler}; 19use embassy_usb::{Builder, Config, Handler};
20use usbd_hid::descriptor::{KeyboardReport, SerializedDescriptor}; 20use usbd_hid::descriptor::{KeyboardReport, SerializedDescriptor};
21use {defmt_rtt as _, panic_probe as _}; 21use {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
167struct MyDeviceStateHandler { 168struct MyDeviceHandler {
168 configured: AtomicBool, 169 configured: AtomicBool,
169} 170}
170 171
171impl MyDeviceStateHandler { 172impl 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
179impl DeviceStateHandler for MyDeviceStateHandler { 180impl 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);