diff options
| author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2022-04-16 01:55:21 +0000 |
|---|---|---|
| committer | GitHub <[email protected]> | 2022-04-16 01:55:21 +0000 |
| commit | 1c9adec3c59da48f8084c29b4ece083100a703e3 (patch) | |
| tree | 848a28f4a2dfcad860073360c36f0e4ad7a52088 /examples | |
| parent | 3a90a8eb4a5ef61aef034025ac882255c94260dc (diff) | |
| parent | f35bde684acb736fd4d5b709833b8c2a47146fa8 (diff) | |
Merge #721
721: USB HID: simplify API r=Dirbaio a=Dirbaio
Following the discussion from #720 and [matrix](https://matrix.to/#/!YoLPkieCYHGzdjUhOK:matrix.org/$PcPr8E_JbodEPuUUKI2PzIC9sx7nF3y0kV2T5O4UWj8?via=matrix.org&via=converser.eu&via=braun-odw.eu), this is a second take on simplifying the HID API.
Split into a separate PR so it can be reviewed separately.
See individual commit messages for details.
cc `@alexmoon`
Co-authored-by: Dario Nieuwenhuis <[email protected]>
Diffstat (limited to 'examples')
| -rw-r--r-- | examples/nrf/src/bin/usb_hid_keyboard.rs | 27 | ||||
| -rw-r--r-- | examples/nrf/src/bin/usb_hid_mouse.rs | 22 |
2 files changed, 24 insertions, 25 deletions
diff --git a/examples/nrf/src/bin/usb_hid_keyboard.rs b/examples/nrf/src/bin/usb_hid_keyboard.rs index 5f03f5126..a2d78b08e 100644 --- a/examples/nrf/src/bin/usb_hid_keyboard.rs +++ b/examples/nrf/src/bin/usb_hid_keyboard.rs | |||
| @@ -18,7 +18,7 @@ use embassy_nrf::usb::Driver; | |||
| 18 | use embassy_nrf::Peripherals; | 18 | use embassy_nrf::Peripherals; |
| 19 | use embassy_usb::control::OutResponse; | 19 | use embassy_usb::control::OutResponse; |
| 20 | use embassy_usb::{Config, DeviceStateHandler, UsbDeviceBuilder}; | 20 | use embassy_usb::{Config, DeviceStateHandler, UsbDeviceBuilder}; |
| 21 | use embassy_usb_hid::{HidClass, ReportId, RequestHandler, State}; | 21 | use embassy_usb_hid::{HidReaderWriter, ReportId, RequestHandler, State}; |
| 22 | use futures::future::join; | 22 | use futures::future::join; |
| 23 | use usbd_hid::descriptor::{KeyboardReport, SerializedDescriptor}; | 23 | use usbd_hid::descriptor::{KeyboardReport, SerializedDescriptor}; |
| 24 | 24 | ||
| @@ -75,7 +75,7 @@ async fn main(_spawner: Spawner, p: Peripherals) { | |||
| 75 | let request_handler = MyRequestHandler {}; | 75 | let request_handler = MyRequestHandler {}; |
| 76 | let device_state_handler = MyDeviceStateHandler::new(); | 76 | let device_state_handler = MyDeviceStateHandler::new(); |
| 77 | 77 | ||
| 78 | let mut state = State::<8, 1>::new(); | 78 | let mut state = State::new(); |
| 79 | 79 | ||
| 80 | let mut builder = UsbDeviceBuilder::new( | 80 | let mut builder = UsbDeviceBuilder::new( |
| 81 | driver, | 81 | driver, |
| @@ -88,14 +88,13 @@ async fn main(_spawner: Spawner, p: Peripherals) { | |||
| 88 | ); | 88 | ); |
| 89 | 89 | ||
| 90 | // Create classes on the builder. | 90 | // Create classes on the builder. |
| 91 | let hid = HidClass::with_output_ep( | 91 | let config = embassy_usb_hid::Config { |
| 92 | &mut builder, | 92 | report_descriptor: KeyboardReport::desc(), |
| 93 | &mut state, | 93 | request_handler: Some(&request_handler), |
| 94 | KeyboardReport::desc(), | 94 | poll_ms: 60, |
| 95 | Some(&request_handler), | 95 | max_packet_size: 64, |
| 96 | 60, | 96 | }; |
| 97 | 64, | 97 | let hid = HidReaderWriter::<_, 1, 8>::new(&mut builder, &mut state, config); |
| 98 | ); | ||
| 99 | 98 | ||
| 100 | // Build the builder. | 99 | // Build the builder. |
| 101 | let mut usb = builder.build(); | 100 | let mut usb = builder.build(); |
| @@ -135,7 +134,7 @@ async fn main(_spawner: Spawner, p: Peripherals) { | |||
| 135 | 134 | ||
| 136 | let mut button = Input::new(p.P0_11.degrade(), Pull::Up); | 135 | let mut button = Input::new(p.P0_11.degrade(), Pull::Up); |
| 137 | 136 | ||
| 138 | let (mut hid_in, hid_out) = hid.split(); | 137 | let (reader, mut writer) = hid.split(); |
| 139 | 138 | ||
| 140 | // Do stuff with the class! | 139 | // Do stuff with the class! |
| 141 | let in_fut = async { | 140 | let in_fut = async { |
| @@ -153,7 +152,7 @@ async fn main(_spawner: Spawner, p: Peripherals) { | |||
| 153 | modifier: 0, | 152 | modifier: 0, |
| 154 | reserved: 0, | 153 | reserved: 0, |
| 155 | }; | 154 | }; |
| 156 | match hid_in.serialize(&report).await { | 155 | match writer.write_serialize(&report).await { |
| 157 | Ok(()) => {} | 156 | Ok(()) => {} |
| 158 | Err(e) => warn!("Failed to send report: {:?}", e), | 157 | Err(e) => warn!("Failed to send report: {:?}", e), |
| 159 | }; | 158 | }; |
| @@ -167,7 +166,7 @@ async fn main(_spawner: Spawner, p: Peripherals) { | |||
| 167 | modifier: 0, | 166 | modifier: 0, |
| 168 | reserved: 0, | 167 | reserved: 0, |
| 169 | }; | 168 | }; |
| 170 | match hid_in.serialize(&report).await { | 169 | match writer.write_serialize(&report).await { |
| 171 | Ok(()) => {} | 170 | Ok(()) => {} |
| 172 | Err(e) => warn!("Failed to send report: {:?}", e), | 171 | Err(e) => warn!("Failed to send report: {:?}", e), |
| 173 | }; | 172 | }; |
| @@ -175,7 +174,7 @@ async fn main(_spawner: Spawner, p: Peripherals) { | |||
| 175 | }; | 174 | }; |
| 176 | 175 | ||
| 177 | let out_fut = async { | 176 | let out_fut = async { |
| 178 | hid_out.run(false, &request_handler).await; | 177 | reader.run(false, &request_handler).await; |
| 179 | }; | 178 | }; |
| 180 | 179 | ||
| 181 | let power_irq = interrupt::take!(POWER_CLOCK); | 180 | let power_irq = interrupt::take!(POWER_CLOCK); |
diff --git a/examples/nrf/src/bin/usb_hid_mouse.rs b/examples/nrf/src/bin/usb_hid_mouse.rs index fe27e76fb..1e98dd1ae 100644 --- a/examples/nrf/src/bin/usb_hid_mouse.rs +++ b/examples/nrf/src/bin/usb_hid_mouse.rs | |||
| @@ -13,7 +13,7 @@ use embassy_nrf::usb::Driver; | |||
| 13 | use embassy_nrf::Peripherals; | 13 | use embassy_nrf::Peripherals; |
| 14 | use embassy_usb::control::OutResponse; | 14 | use embassy_usb::control::OutResponse; |
| 15 | use embassy_usb::{Config, UsbDeviceBuilder}; | 15 | use embassy_usb::{Config, UsbDeviceBuilder}; |
| 16 | use embassy_usb_hid::{HidClass, ReportId, RequestHandler, State}; | 16 | use embassy_usb_hid::{HidWriter, ReportId, RequestHandler, State}; |
| 17 | use futures::future::join; | 17 | use futures::future::join; |
| 18 | use usbd_hid::descriptor::{MouseReport, SerializedDescriptor}; | 18 | use usbd_hid::descriptor::{MouseReport, SerializedDescriptor}; |
| 19 | 19 | ||
| @@ -52,7 +52,7 @@ async fn main(_spawner: Spawner, p: Peripherals) { | |||
| 52 | let mut control_buf = [0; 16]; | 52 | let mut control_buf = [0; 16]; |
| 53 | let request_handler = MyRequestHandler {}; | 53 | let request_handler = MyRequestHandler {}; |
| 54 | 54 | ||
| 55 | let mut control = State::<5, 0>::new(); | 55 | let mut state = State::new(); |
| 56 | 56 | ||
| 57 | let mut builder = UsbDeviceBuilder::new( | 57 | let mut builder = UsbDeviceBuilder::new( |
| 58 | driver, | 58 | driver, |
| @@ -65,14 +65,14 @@ async fn main(_spawner: Spawner, p: Peripherals) { | |||
| 65 | ); | 65 | ); |
| 66 | 66 | ||
| 67 | // Create classes on the builder. | 67 | // Create classes on the builder. |
| 68 | let mut hid = HidClass::new( | 68 | let config = embassy_usb_hid::Config { |
| 69 | &mut builder, | 69 | report_descriptor: MouseReport::desc(), |
| 70 | &mut control, | 70 | request_handler: Some(&request_handler), |
| 71 | MouseReport::desc(), | 71 | poll_ms: 60, |
| 72 | Some(&request_handler), | 72 | max_packet_size: 8, |
| 73 | 60, | 73 | }; |
| 74 | 8, | 74 | |
| 75 | ); | 75 | let mut writer = HidWriter::<_, 5>::new(&mut builder, &mut state, config); |
| 76 | 76 | ||
| 77 | // Build the builder. | 77 | // Build the builder. |
| 78 | let mut usb = builder.build(); | 78 | let mut usb = builder.build(); |
| @@ -94,7 +94,7 @@ async fn main(_spawner: Spawner, p: Peripherals) { | |||
| 94 | wheel: 0, | 94 | wheel: 0, |
| 95 | pan: 0, | 95 | pan: 0, |
| 96 | }; | 96 | }; |
| 97 | match hid.input().serialize(&report).await { | 97 | match writer.write_serialize(&report).await { |
| 98 | Ok(()) => {} | 98 | Ok(()) => {} |
| 99 | Err(e) => warn!("Failed to send report: {:?}", e), | 99 | Err(e) => warn!("Failed to send report: {:?}", e), |
| 100 | } | 100 | } |
