diff options
| -rw-r--r-- | embassy-usb/src/class/hid.rs | 24 | ||||
| -rw-r--r-- | examples/nrf52840/src/bin/usb_hid_keyboard.rs | 14 | ||||
| -rw-r--r-- | examples/nrf52840/src/bin/usb_hid_mouse.rs | 12 | ||||
| -rw-r--r-- | examples/rp/src/bin/usb_hid_keyboard.rs | 14 | ||||
| -rw-r--r-- | examples/rp/src/bin/usb_hid_mouse.rs | 14 | ||||
| -rw-r--r-- | examples/stm32f4/src/bin/usb_hid_keyboard.rs | 14 | ||||
| -rw-r--r-- | examples/stm32f4/src/bin/usb_hid_mouse.rs | 12 | ||||
| -rw-r--r-- | examples/stm32l5/src/bin/usb_hid_mouse.rs | 12 |
8 files changed, 58 insertions, 58 deletions
diff --git a/embassy-usb/src/class/hid.rs b/embassy-usb/src/class/hid.rs index 0000b5b2b..6d9e0aced 100644 --- a/embassy-usb/src/class/hid.rs +++ b/embassy-usb/src/class/hid.rs | |||
| @@ -37,7 +37,7 @@ pub struct Config<'d> { | |||
| 37 | pub report_descriptor: &'d [u8], | 37 | pub report_descriptor: &'d [u8], |
| 38 | 38 | ||
| 39 | /// Handler for control requests. | 39 | /// Handler for control requests. |
| 40 | pub request_handler: Option<&'d dyn RequestHandler>, | 40 | pub request_handler: Option<&'d mut dyn RequestHandler>, |
| 41 | 41 | ||
| 42 | /// Configures how frequently the host should poll for reading/writing HID reports. | 42 | /// Configures how frequently the host should poll for reading/writing HID reports. |
| 43 | /// | 43 | /// |
| @@ -299,7 +299,7 @@ impl<'d, D: Driver<'d>, const N: usize> HidReader<'d, D, N> { | |||
| 299 | /// | 299 | /// |
| 300 | /// If `use_report_ids` is true, the first byte of the report will be used as | 300 | /// If `use_report_ids` is true, the first byte of the report will be used as |
| 301 | /// the `ReportId` value. Otherwise the `ReportId` value will be 0. | 301 | /// the `ReportId` value. Otherwise the `ReportId` value will be 0. |
| 302 | pub async fn run<T: RequestHandler>(mut self, use_report_ids: bool, handler: &T) -> ! { | 302 | pub async fn run<T: RequestHandler>(mut self, use_report_ids: bool, handler: &mut T) -> ! { |
| 303 | let offset = self.offset.load(Ordering::Acquire); | 303 | let offset = self.offset.load(Ordering::Acquire); |
| 304 | assert!(offset == 0); | 304 | assert!(offset == 0); |
| 305 | let mut buf = [0; N]; | 305 | let mut buf = [0; N]; |
| @@ -378,13 +378,13 @@ pub trait RequestHandler { | |||
| 378 | /// Reads the value of report `id` into `buf` returning the size. | 378 | /// Reads the value of report `id` into `buf` returning the size. |
| 379 | /// | 379 | /// |
| 380 | /// Returns `None` if `id` is invalid or no data is available. | 380 | /// Returns `None` if `id` is invalid or no data is available. |
| 381 | fn get_report(&self, id: ReportId, buf: &mut [u8]) -> Option<usize> { | 381 | fn get_report(&mut self, id: ReportId, buf: &mut [u8]) -> Option<usize> { |
| 382 | let _ = (id, buf); | 382 | let _ = (id, buf); |
| 383 | None | 383 | None |
| 384 | } | 384 | } |
| 385 | 385 | ||
| 386 | /// Sets the value of report `id` to `data`. | 386 | /// Sets the value of report `id` to `data`. |
| 387 | fn set_report(&self, id: ReportId, data: &[u8]) -> OutResponse { | 387 | fn set_report(&mut self, id: ReportId, data: &[u8]) -> OutResponse { |
| 388 | let _ = (id, data); | 388 | let _ = (id, data); |
| 389 | OutResponse::Rejected | 389 | OutResponse::Rejected |
| 390 | } | 390 | } |
| @@ -394,7 +394,7 @@ pub trait RequestHandler { | |||
| 394 | /// If `id` is `None`, get the idle rate for all reports. Returning `None` | 394 | /// If `id` is `None`, get the idle rate for all reports. Returning `None` |
| 395 | /// will reject the control request. Any duration at or above 1.024 seconds | 395 | /// will reject the control request. Any duration at or above 1.024 seconds |
| 396 | /// or below 4ms will be returned as an indefinite idle rate. | 396 | /// or below 4ms will be returned as an indefinite idle rate. |
| 397 | fn get_idle_ms(&self, id: Option<ReportId>) -> Option<u32> { | 397 | fn get_idle_ms(&mut self, id: Option<ReportId>) -> Option<u32> { |
| 398 | let _ = id; | 398 | let _ = id; |
| 399 | None | 399 | None |
| 400 | } | 400 | } |
| @@ -403,7 +403,7 @@ pub trait RequestHandler { | |||
| 403 | /// | 403 | /// |
| 404 | /// If `id` is `None`, set the idle rate of all input reports to `dur`. If | 404 | /// If `id` is `None`, set the idle rate of all input reports to `dur`. If |
| 405 | /// an indefinite duration is requested, `dur` will be set to `u32::MAX`. | 405 | /// an indefinite duration is requested, `dur` will be set to `u32::MAX`. |
| 406 | fn set_idle_ms(&self, id: Option<ReportId>, duration_ms: u32) { | 406 | fn set_idle_ms(&mut self, id: Option<ReportId>, duration_ms: u32) { |
| 407 | let _ = (id, duration_ms); | 407 | let _ = (id, duration_ms); |
| 408 | } | 408 | } |
| 409 | } | 409 | } |
| @@ -411,7 +411,7 @@ pub trait RequestHandler { | |||
| 411 | struct Control<'d> { | 411 | struct Control<'d> { |
| 412 | if_num: InterfaceNumber, | 412 | if_num: InterfaceNumber, |
| 413 | report_descriptor: &'d [u8], | 413 | report_descriptor: &'d [u8], |
| 414 | request_handler: Option<&'d dyn RequestHandler>, | 414 | request_handler: Option<&'d mut dyn RequestHandler>, |
| 415 | out_report_offset: &'d AtomicUsize, | 415 | out_report_offset: &'d AtomicUsize, |
| 416 | hid_descriptor: [u8; 9], | 416 | hid_descriptor: [u8; 9], |
| 417 | } | 417 | } |
| @@ -420,7 +420,7 @@ impl<'d> Control<'d> { | |||
| 420 | fn new( | 420 | fn new( |
| 421 | if_num: InterfaceNumber, | 421 | if_num: InterfaceNumber, |
| 422 | report_descriptor: &'d [u8], | 422 | report_descriptor: &'d [u8], |
| 423 | request_handler: Option<&'d dyn RequestHandler>, | 423 | request_handler: Option<&'d mut dyn RequestHandler>, |
| 424 | out_report_offset: &'d AtomicUsize, | 424 | out_report_offset: &'d AtomicUsize, |
| 425 | ) -> Self { | 425 | ) -> Self { |
| 426 | Control { | 426 | Control { |
| @@ -468,7 +468,7 @@ impl<'d> Handler for Control<'d> { | |||
| 468 | trace!("HID control_out {:?} {=[u8]:x}", req, data); | 468 | trace!("HID control_out {:?} {=[u8]:x}", req, data); |
| 469 | match req.request { | 469 | match req.request { |
| 470 | HID_REQ_SET_IDLE => { | 470 | HID_REQ_SET_IDLE => { |
| 471 | if let Some(handler) = self.request_handler { | 471 | if let Some(handler) = self.request_handler.as_mut() { |
| 472 | let id = req.value as u8; | 472 | let id = req.value as u8; |
| 473 | let id = (id != 0).then_some(ReportId::In(id)); | 473 | let id = (id != 0).then_some(ReportId::In(id)); |
| 474 | let dur = u32::from(req.value >> 8); | 474 | let dur = u32::from(req.value >> 8); |
| @@ -477,7 +477,7 @@ impl<'d> Handler for Control<'d> { | |||
| 477 | } | 477 | } |
| 478 | Some(OutResponse::Accepted) | 478 | Some(OutResponse::Accepted) |
| 479 | } | 479 | } |
| 480 | HID_REQ_SET_REPORT => match (ReportId::try_from(req.value), self.request_handler) { | 480 | HID_REQ_SET_REPORT => match (ReportId::try_from(req.value), self.request_handler.as_mut()) { |
| 481 | (Ok(id), Some(handler)) => Some(handler.set_report(id, data)), | 481 | (Ok(id), Some(handler)) => Some(handler.set_report(id, data)), |
| 482 | _ => Some(OutResponse::Rejected), | 482 | _ => Some(OutResponse::Rejected), |
| 483 | }, | 483 | }, |
| @@ -513,7 +513,7 @@ impl<'d> Handler for Control<'d> { | |||
| 513 | match req.request { | 513 | match req.request { |
| 514 | HID_REQ_GET_REPORT => { | 514 | HID_REQ_GET_REPORT => { |
| 515 | let size = match ReportId::try_from(req.value) { | 515 | let size = match ReportId::try_from(req.value) { |
| 516 | Ok(id) => self.request_handler.and_then(|x| x.get_report(id, buf)), | 516 | Ok(id) => self.request_handler.as_mut().and_then(|x| x.get_report(id, buf)), |
| 517 | Err(_) => None, | 517 | Err(_) => None, |
| 518 | }; | 518 | }; |
| 519 | 519 | ||
| @@ -524,7 +524,7 @@ impl<'d> Handler for Control<'d> { | |||
| 524 | } | 524 | } |
| 525 | } | 525 | } |
| 526 | HID_REQ_GET_IDLE => { | 526 | HID_REQ_GET_IDLE => { |
| 527 | if let Some(handler) = self.request_handler { | 527 | if let Some(handler) = self.request_handler.as_mut() { |
| 528 | let id = req.value as u8; | 528 | let id = req.value as u8; |
| 529 | let id = (id != 0).then_some(ReportId::In(id)); | 529 | let id = (id != 0).then_some(ReportId::In(id)); |
| 530 | if let Some(dur) = handler.get_idle_ms(id) { | 530 | if let Some(dur) = handler.get_idle_ms(id) { |
diff --git a/examples/nrf52840/src/bin/usb_hid_keyboard.rs b/examples/nrf52840/src/bin/usb_hid_keyboard.rs index 52f081487..e33ee5866 100644 --- a/examples/nrf52840/src/bin/usb_hid_keyboard.rs +++ b/examples/nrf52840/src/bin/usb_hid_keyboard.rs | |||
| @@ -54,7 +54,7 @@ async fn main(_spawner: Spawner) { | |||
| 54 | let mut bos_descriptor = [0; 256]; | 54 | let mut bos_descriptor = [0; 256]; |
| 55 | let mut msos_descriptor = [0; 256]; | 55 | let mut msos_descriptor = [0; 256]; |
| 56 | let mut control_buf = [0; 64]; | 56 | let mut control_buf = [0; 64]; |
| 57 | let request_handler = MyRequestHandler {}; | 57 | let mut request_handler = MyRequestHandler {}; |
| 58 | let mut device_handler = MyDeviceHandler::new(); | 58 | let mut device_handler = MyDeviceHandler::new(); |
| 59 | 59 | ||
| 60 | let mut state = State::new(); | 60 | let mut state = State::new(); |
| @@ -73,7 +73,7 @@ async fn main(_spawner: Spawner) { | |||
| 73 | // Create classes on the builder. | 73 | // Create classes on the builder. |
| 74 | let config = embassy_usb::class::hid::Config { | 74 | let config = embassy_usb::class::hid::Config { |
| 75 | report_descriptor: KeyboardReport::desc(), | 75 | report_descriptor: KeyboardReport::desc(), |
| 76 | request_handler: Some(&request_handler), | 76 | request_handler: None, |
| 77 | poll_ms: 60, | 77 | poll_ms: 60, |
| 78 | max_packet_size: 64, | 78 | max_packet_size: 64, |
| 79 | }; | 79 | }; |
| @@ -137,7 +137,7 @@ async fn main(_spawner: Spawner) { | |||
| 137 | }; | 137 | }; |
| 138 | 138 | ||
| 139 | let out_fut = async { | 139 | let out_fut = async { |
| 140 | reader.run(false, &request_handler).await; | 140 | reader.run(false, &mut request_handler).await; |
| 141 | }; | 141 | }; |
| 142 | 142 | ||
| 143 | // Run everything concurrently. | 143 | // Run everything concurrently. |
| @@ -148,21 +148,21 @@ async fn main(_spawner: Spawner) { | |||
| 148 | struct MyRequestHandler {} | 148 | struct MyRequestHandler {} |
| 149 | 149 | ||
| 150 | impl RequestHandler for MyRequestHandler { | 150 | impl RequestHandler for MyRequestHandler { |
| 151 | fn get_report(&self, id: ReportId, _buf: &mut [u8]) -> Option<usize> { | 151 | fn get_report(&mut self, id: ReportId, _buf: &mut [u8]) -> Option<usize> { |
| 152 | info!("Get report for {:?}", id); | 152 | info!("Get report for {:?}", id); |
| 153 | None | 153 | None |
| 154 | } | 154 | } |
| 155 | 155 | ||
| 156 | fn set_report(&self, id: ReportId, data: &[u8]) -> OutResponse { | 156 | fn set_report(&mut self, id: ReportId, data: &[u8]) -> OutResponse { |
| 157 | info!("Set report for {:?}: {=[u8]}", id, data); | 157 | info!("Set report for {:?}: {=[u8]}", id, data); |
| 158 | OutResponse::Accepted | 158 | OutResponse::Accepted |
| 159 | } | 159 | } |
| 160 | 160 | ||
| 161 | fn set_idle_ms(&self, id: Option<ReportId>, dur: u32) { | 161 | fn set_idle_ms(&mut self, id: Option<ReportId>, dur: u32) { |
| 162 | info!("Set idle rate for {:?} to {:?}", id, dur); | 162 | info!("Set idle rate for {:?} to {:?}", id, dur); |
| 163 | } | 163 | } |
| 164 | 164 | ||
| 165 | fn get_idle_ms(&self, id: Option<ReportId>) -> Option<u32> { | 165 | fn get_idle_ms(&mut self, id: Option<ReportId>) -> Option<u32> { |
| 166 | info!("Get idle rate for {:?}", id); | 166 | info!("Get idle rate for {:?}", id); |
| 167 | None | 167 | None |
| 168 | } | 168 | } |
diff --git a/examples/nrf52840/src/bin/usb_hid_mouse.rs b/examples/nrf52840/src/bin/usb_hid_mouse.rs index 5d2837793..8076ac283 100644 --- a/examples/nrf52840/src/bin/usb_hid_mouse.rs +++ b/examples/nrf52840/src/bin/usb_hid_mouse.rs | |||
| @@ -47,7 +47,7 @@ async fn main(_spawner: Spawner) { | |||
| 47 | let mut bos_descriptor = [0; 256]; | 47 | let mut bos_descriptor = [0; 256]; |
| 48 | let mut msos_descriptor = [0; 256]; | 48 | let mut msos_descriptor = [0; 256]; |
| 49 | let mut control_buf = [0; 64]; | 49 | let mut control_buf = [0; 64]; |
| 50 | let request_handler = MyRequestHandler {}; | 50 | let mut request_handler = MyRequestHandler {}; |
| 51 | 51 | ||
| 52 | let mut state = State::new(); | 52 | let mut state = State::new(); |
| 53 | 53 | ||
| @@ -63,7 +63,7 @@ async fn main(_spawner: Spawner) { | |||
| 63 | // Create classes on the builder. | 63 | // Create classes on the builder. |
| 64 | let config = embassy_usb::class::hid::Config { | 64 | let config = embassy_usb::class::hid::Config { |
| 65 | report_descriptor: MouseReport::desc(), | 65 | report_descriptor: MouseReport::desc(), |
| 66 | request_handler: Some(&request_handler), | 66 | request_handler: Some(&mut request_handler), |
| 67 | poll_ms: 60, | 67 | poll_ms: 60, |
| 68 | max_packet_size: 8, | 68 | max_packet_size: 8, |
| 69 | }; | 69 | }; |
| @@ -105,21 +105,21 @@ async fn main(_spawner: Spawner) { | |||
| 105 | struct MyRequestHandler {} | 105 | struct MyRequestHandler {} |
| 106 | 106 | ||
| 107 | impl RequestHandler for MyRequestHandler { | 107 | impl RequestHandler for MyRequestHandler { |
| 108 | fn get_report(&self, id: ReportId, _buf: &mut [u8]) -> Option<usize> { | 108 | fn get_report(&mut self, id: ReportId, _buf: &mut [u8]) -> Option<usize> { |
| 109 | info!("Get report for {:?}", id); | 109 | info!("Get report for {:?}", id); |
| 110 | None | 110 | None |
| 111 | } | 111 | } |
| 112 | 112 | ||
| 113 | fn set_report(&self, id: ReportId, data: &[u8]) -> OutResponse { | 113 | fn set_report(&mut self, id: ReportId, data: &[u8]) -> OutResponse { |
| 114 | info!("Set report for {:?}: {=[u8]}", id, data); | 114 | info!("Set report for {:?}: {=[u8]}", id, data); |
| 115 | OutResponse::Accepted | 115 | OutResponse::Accepted |
| 116 | } | 116 | } |
| 117 | 117 | ||
| 118 | fn set_idle_ms(&self, id: Option<ReportId>, dur: u32) { | 118 | fn set_idle_ms(&mut self, id: Option<ReportId>, dur: u32) { |
| 119 | info!("Set idle rate for {:?} to {:?}", id, dur); | 119 | info!("Set idle rate for {:?} to {:?}", id, dur); |
| 120 | } | 120 | } |
| 121 | 121 | ||
| 122 | fn get_idle_ms(&self, id: Option<ReportId>) -> Option<u32> { | 122 | fn get_idle_ms(&mut self, id: Option<ReportId>) -> Option<u32> { |
| 123 | info!("Get idle rate for {:?}", id); | 123 | info!("Get idle rate for {:?}", id); |
| 124 | None | 124 | None |
| 125 | } | 125 | } |
diff --git a/examples/rp/src/bin/usb_hid_keyboard.rs b/examples/rp/src/bin/usb_hid_keyboard.rs index 710be8d13..a7cb322d8 100644 --- a/examples/rp/src/bin/usb_hid_keyboard.rs +++ b/examples/rp/src/bin/usb_hid_keyboard.rs | |||
| @@ -41,7 +41,7 @@ async fn main(_spawner: Spawner) { | |||
| 41 | // You can also add a Microsoft OS descriptor. | 41 | // You can also add a Microsoft OS descriptor. |
| 42 | let mut msos_descriptor = [0; 256]; | 42 | let mut msos_descriptor = [0; 256]; |
| 43 | let mut control_buf = [0; 64]; | 43 | let mut control_buf = [0; 64]; |
| 44 | let request_handler = MyRequestHandler {}; | 44 | let mut request_handler = MyRequestHandler {}; |
| 45 | let mut device_handler = MyDeviceHandler::new(); | 45 | let mut device_handler = MyDeviceHandler::new(); |
| 46 | 46 | ||
| 47 | let mut state = State::new(); | 47 | let mut state = State::new(); |
| @@ -60,7 +60,7 @@ async fn main(_spawner: Spawner) { | |||
| 60 | // Create classes on the builder. | 60 | // Create classes on the builder. |
| 61 | let config = embassy_usb::class::hid::Config { | 61 | let config = embassy_usb::class::hid::Config { |
| 62 | report_descriptor: KeyboardReport::desc(), | 62 | report_descriptor: KeyboardReport::desc(), |
| 63 | request_handler: Some(&request_handler), | 63 | request_handler: None, |
| 64 | poll_ms: 60, | 64 | poll_ms: 60, |
| 65 | max_packet_size: 64, | 65 | max_packet_size: 64, |
| 66 | }; | 66 | }; |
| @@ -114,7 +114,7 @@ async fn main(_spawner: Spawner) { | |||
| 114 | }; | 114 | }; |
| 115 | 115 | ||
| 116 | let out_fut = async { | 116 | let out_fut = async { |
| 117 | reader.run(false, &request_handler).await; | 117 | reader.run(false, &mut request_handler).await; |
| 118 | }; | 118 | }; |
| 119 | 119 | ||
| 120 | // Run everything concurrently. | 120 | // Run everything concurrently. |
| @@ -125,21 +125,21 @@ async fn main(_spawner: Spawner) { | |||
| 125 | struct MyRequestHandler {} | 125 | struct MyRequestHandler {} |
| 126 | 126 | ||
| 127 | impl RequestHandler for MyRequestHandler { | 127 | impl RequestHandler for MyRequestHandler { |
| 128 | fn get_report(&self, id: ReportId, _buf: &mut [u8]) -> Option<usize> { | 128 | fn get_report(&mut self, id: ReportId, _buf: &mut [u8]) -> Option<usize> { |
| 129 | info!("Get report for {:?}", id); | 129 | info!("Get report for {:?}", id); |
| 130 | None | 130 | None |
| 131 | } | 131 | } |
| 132 | 132 | ||
| 133 | fn set_report(&self, id: ReportId, data: &[u8]) -> OutResponse { | 133 | fn set_report(&mut self, id: ReportId, data: &[u8]) -> OutResponse { |
| 134 | info!("Set report for {:?}: {=[u8]}", id, data); | 134 | info!("Set report for {:?}: {=[u8]}", id, data); |
| 135 | OutResponse::Accepted | 135 | OutResponse::Accepted |
| 136 | } | 136 | } |
| 137 | 137 | ||
| 138 | fn set_idle_ms(&self, id: Option<ReportId>, dur: u32) { | 138 | fn set_idle_ms(&mut self, id: Option<ReportId>, dur: u32) { |
| 139 | info!("Set idle rate for {:?} to {:?}", id, dur); | 139 | info!("Set idle rate for {:?} to {:?}", id, dur); |
| 140 | } | 140 | } |
| 141 | 141 | ||
| 142 | fn get_idle_ms(&self, id: Option<ReportId>) -> Option<u32> { | 142 | fn get_idle_ms(&mut self, id: Option<ReportId>) -> Option<u32> { |
| 143 | info!("Get idle rate for {:?}", id); | 143 | info!("Get idle rate for {:?}", id); |
| 144 | None | 144 | None |
| 145 | } | 145 | } |
diff --git a/examples/rp/src/bin/usb_hid_mouse.rs b/examples/rp/src/bin/usb_hid_mouse.rs index e8b399cb1..cce344fb0 100644 --- a/examples/rp/src/bin/usb_hid_mouse.rs +++ b/examples/rp/src/bin/usb_hid_mouse.rs | |||
| @@ -44,7 +44,7 @@ async fn main(_spawner: Spawner) { | |||
| 44 | // You can also add a Microsoft OS descriptor. | 44 | // You can also add a Microsoft OS descriptor. |
| 45 | let mut msos_descriptor = [0; 256]; | 45 | let mut msos_descriptor = [0; 256]; |
| 46 | let mut control_buf = [0; 64]; | 46 | let mut control_buf = [0; 64]; |
| 47 | let request_handler = MyRequestHandler {}; | 47 | let mut request_handler = MyRequestHandler {}; |
| 48 | let mut device_handler = MyDeviceHandler::new(); | 48 | let mut device_handler = MyDeviceHandler::new(); |
| 49 | 49 | ||
| 50 | let mut state = State::new(); | 50 | let mut state = State::new(); |
| @@ -63,7 +63,7 @@ async fn main(_spawner: Spawner) { | |||
| 63 | // Create classes on the builder. | 63 | // Create classes on the builder. |
| 64 | let config = embassy_usb::class::hid::Config { | 64 | let config = embassy_usb::class::hid::Config { |
| 65 | report_descriptor: MouseReport::desc(), | 65 | report_descriptor: MouseReport::desc(), |
| 66 | request_handler: Some(&request_handler), | 66 | request_handler: None, |
| 67 | poll_ms: 60, | 67 | poll_ms: 60, |
| 68 | max_packet_size: 64, | 68 | max_packet_size: 64, |
| 69 | }; | 69 | }; |
| @@ -106,7 +106,7 @@ async fn main(_spawner: Spawner) { | |||
| 106 | }; | 106 | }; |
| 107 | 107 | ||
| 108 | let out_fut = async { | 108 | let out_fut = async { |
| 109 | reader.run(false, &request_handler).await; | 109 | reader.run(false, &mut request_handler).await; |
| 110 | }; | 110 | }; |
| 111 | 111 | ||
| 112 | // Run everything concurrently. | 112 | // Run everything concurrently. |
| @@ -117,21 +117,21 @@ async fn main(_spawner: Spawner) { | |||
| 117 | struct MyRequestHandler {} | 117 | struct MyRequestHandler {} |
| 118 | 118 | ||
| 119 | impl RequestHandler for MyRequestHandler { | 119 | impl RequestHandler for MyRequestHandler { |
| 120 | fn get_report(&self, id: ReportId, _buf: &mut [u8]) -> Option<usize> { | 120 | fn get_report(&mut self, id: ReportId, _buf: &mut [u8]) -> Option<usize> { |
| 121 | info!("Get report for {:?}", id); | 121 | info!("Get report for {:?}", id); |
| 122 | None | 122 | None |
| 123 | } | 123 | } |
| 124 | 124 | ||
| 125 | fn set_report(&self, id: ReportId, data: &[u8]) -> OutResponse { | 125 | fn set_report(&mut self, id: ReportId, data: &[u8]) -> OutResponse { |
| 126 | info!("Set report for {:?}: {=[u8]}", id, data); | 126 | info!("Set report for {:?}: {=[u8]}", id, data); |
| 127 | OutResponse::Accepted | 127 | OutResponse::Accepted |
| 128 | } | 128 | } |
| 129 | 129 | ||
| 130 | fn set_idle_ms(&self, id: Option<ReportId>, dur: u32) { | 130 | fn set_idle_ms(&mut self, id: Option<ReportId>, dur: u32) { |
| 131 | info!("Set idle rate for {:?} to {:?}", id, dur); | 131 | info!("Set idle rate for {:?} to {:?}", id, dur); |
| 132 | } | 132 | } |
| 133 | 133 | ||
| 134 | fn get_idle_ms(&self, id: Option<ReportId>) -> Option<u32> { | 134 | fn get_idle_ms(&mut self, id: Option<ReportId>) -> Option<u32> { |
| 135 | info!("Get idle rate for {:?}", id); | 135 | info!("Get idle rate for {:?}", id); |
| 136 | None | 136 | None |
| 137 | } | 137 | } |
diff --git a/examples/stm32f4/src/bin/usb_hid_keyboard.rs b/examples/stm32f4/src/bin/usb_hid_keyboard.rs index 7067d15a3..d48ae4a17 100644 --- a/examples/stm32f4/src/bin/usb_hid_keyboard.rs +++ b/examples/stm32f4/src/bin/usb_hid_keyboard.rs | |||
| @@ -88,7 +88,7 @@ async fn main(_spawner: Spawner) { | |||
| 88 | let mut msos_descriptor = [0; 256]; | 88 | let mut msos_descriptor = [0; 256]; |
| 89 | let mut control_buf = [0; 64]; | 89 | let mut control_buf = [0; 64]; |
| 90 | 90 | ||
| 91 | let request_handler = MyRequestHandler {}; | 91 | let mut request_handler = MyRequestHandler {}; |
| 92 | let mut device_handler = MyDeviceHandler::new(); | 92 | let mut device_handler = MyDeviceHandler::new(); |
| 93 | 93 | ||
| 94 | let mut state = State::new(); | 94 | let mut state = State::new(); |
| @@ -107,7 +107,7 @@ async fn main(_spawner: Spawner) { | |||
| 107 | // Create classes on the builder. | 107 | // Create classes on the builder. |
| 108 | let config = embassy_usb::class::hid::Config { | 108 | let config = embassy_usb::class::hid::Config { |
| 109 | report_descriptor: KeyboardReport::desc(), | 109 | report_descriptor: KeyboardReport::desc(), |
| 110 | request_handler: Some(&request_handler), | 110 | request_handler: None, |
| 111 | poll_ms: 60, | 111 | poll_ms: 60, |
| 112 | max_packet_size: 8, | 112 | max_packet_size: 8, |
| 113 | }; | 113 | }; |
| @@ -160,7 +160,7 @@ async fn main(_spawner: Spawner) { | |||
| 160 | }; | 160 | }; |
| 161 | 161 | ||
| 162 | let out_fut = async { | 162 | let out_fut = async { |
| 163 | reader.run(false, &request_handler).await; | 163 | reader.run(false, &mut request_handler).await; |
| 164 | }; | 164 | }; |
| 165 | 165 | ||
| 166 | // Run everything concurrently. | 166 | // Run everything concurrently. |
| @@ -171,21 +171,21 @@ async fn main(_spawner: Spawner) { | |||
| 171 | struct MyRequestHandler {} | 171 | struct MyRequestHandler {} |
| 172 | 172 | ||
| 173 | impl RequestHandler for MyRequestHandler { | 173 | impl RequestHandler for MyRequestHandler { |
| 174 | fn get_report(&self, id: ReportId, _buf: &mut [u8]) -> Option<usize> { | 174 | fn get_report(&mut self, id: ReportId, _buf: &mut [u8]) -> Option<usize> { |
| 175 | info!("Get report for {:?}", id); | 175 | info!("Get report for {:?}", id); |
| 176 | None | 176 | None |
| 177 | } | 177 | } |
| 178 | 178 | ||
| 179 | fn set_report(&self, id: ReportId, data: &[u8]) -> OutResponse { | 179 | fn set_report(&mut self, id: ReportId, data: &[u8]) -> OutResponse { |
| 180 | info!("Set report for {:?}: {=[u8]}", id, data); | 180 | info!("Set report for {:?}: {=[u8]}", id, data); |
| 181 | OutResponse::Accepted | 181 | OutResponse::Accepted |
| 182 | } | 182 | } |
| 183 | 183 | ||
| 184 | fn set_idle_ms(&self, id: Option<ReportId>, dur: u32) { | 184 | fn set_idle_ms(&mut self, id: Option<ReportId>, dur: u32) { |
| 185 | info!("Set idle rate for {:?} to {:?}", id, dur); | 185 | info!("Set idle rate for {:?} to {:?}", id, dur); |
| 186 | } | 186 | } |
| 187 | 187 | ||
| 188 | fn get_idle_ms(&self, id: Option<ReportId>) -> Option<u32> { | 188 | fn get_idle_ms(&mut self, id: Option<ReportId>) -> Option<u32> { |
| 189 | info!("Get idle rate for {:?}", id); | 189 | info!("Get idle rate for {:?}", id); |
| 190 | None | 190 | None |
| 191 | } | 191 | } |
diff --git a/examples/stm32f4/src/bin/usb_hid_mouse.rs b/examples/stm32f4/src/bin/usb_hid_mouse.rs index 0d04d2a9c..c35f4b002 100644 --- a/examples/stm32f4/src/bin/usb_hid_mouse.rs +++ b/examples/stm32f4/src/bin/usb_hid_mouse.rs | |||
| @@ -81,7 +81,7 @@ async fn main(_spawner: Spawner) { | |||
| 81 | let mut bos_descriptor = [0; 256]; | 81 | let mut bos_descriptor = [0; 256]; |
| 82 | let mut control_buf = [0; 64]; | 82 | let mut control_buf = [0; 64]; |
| 83 | 83 | ||
| 84 | let request_handler = MyRequestHandler {}; | 84 | let mut request_handler = MyRequestHandler {}; |
| 85 | 85 | ||
| 86 | let mut state = State::new(); | 86 | let mut state = State::new(); |
| 87 | 87 | ||
| @@ -97,7 +97,7 @@ async fn main(_spawner: Spawner) { | |||
| 97 | // Create classes on the builder. | 97 | // Create classes on the builder. |
| 98 | let config = embassy_usb::class::hid::Config { | 98 | let config = embassy_usb::class::hid::Config { |
| 99 | report_descriptor: MouseReport::desc(), | 99 | report_descriptor: MouseReport::desc(), |
| 100 | request_handler: Some(&request_handler), | 100 | request_handler: Some(&mut request_handler), |
| 101 | poll_ms: 60, | 101 | poll_ms: 60, |
| 102 | max_packet_size: 8, | 102 | max_packet_size: 8, |
| 103 | }; | 103 | }; |
| @@ -139,21 +139,21 @@ async fn main(_spawner: Spawner) { | |||
| 139 | struct MyRequestHandler {} | 139 | struct MyRequestHandler {} |
| 140 | 140 | ||
| 141 | impl RequestHandler for MyRequestHandler { | 141 | impl RequestHandler for MyRequestHandler { |
| 142 | fn get_report(&self, id: ReportId, _buf: &mut [u8]) -> Option<usize> { | 142 | fn get_report(&mut self, id: ReportId, _buf: &mut [u8]) -> Option<usize> { |
| 143 | info!("Get report for {:?}", id); | 143 | info!("Get report for {:?}", id); |
| 144 | None | 144 | None |
| 145 | } | 145 | } |
| 146 | 146 | ||
| 147 | fn set_report(&self, id: ReportId, data: &[u8]) -> OutResponse { | 147 | fn set_report(&mut self, id: ReportId, data: &[u8]) -> OutResponse { |
| 148 | info!("Set report for {:?}: {=[u8]}", id, data); | 148 | info!("Set report for {:?}: {=[u8]}", id, data); |
| 149 | OutResponse::Accepted | 149 | OutResponse::Accepted |
| 150 | } | 150 | } |
| 151 | 151 | ||
| 152 | fn set_idle_ms(&self, id: Option<ReportId>, dur: u32) { | 152 | fn set_idle_ms(&mut self, id: Option<ReportId>, dur: u32) { |
| 153 | info!("Set idle rate for {:?} to {:?}", id, dur); | 153 | info!("Set idle rate for {:?} to {:?}", id, dur); |
| 154 | } | 154 | } |
| 155 | 155 | ||
| 156 | fn get_idle_ms(&self, id: Option<ReportId>) -> Option<u32> { | 156 | fn get_idle_ms(&mut self, id: Option<ReportId>) -> Option<u32> { |
| 157 | info!("Get idle rate for {:?}", id); | 157 | info!("Get idle rate for {:?}", id); |
| 158 | None | 158 | None |
| 159 | } | 159 | } |
diff --git a/examples/stm32l5/src/bin/usb_hid_mouse.rs b/examples/stm32l5/src/bin/usb_hid_mouse.rs index 9d30205bb..3f8c52b82 100644 --- a/examples/stm32l5/src/bin/usb_hid_mouse.rs +++ b/examples/stm32l5/src/bin/usb_hid_mouse.rs | |||
| @@ -54,7 +54,7 @@ async fn main(_spawner: Spawner) { | |||
| 54 | let mut config_descriptor = [0; 256]; | 54 | let mut config_descriptor = [0; 256]; |
| 55 | let mut bos_descriptor = [0; 256]; | 55 | let mut bos_descriptor = [0; 256]; |
| 56 | let mut control_buf = [0; 64]; | 56 | let mut control_buf = [0; 64]; |
| 57 | let request_handler = MyRequestHandler {}; | 57 | let mut request_handler = MyRequestHandler {}; |
| 58 | 58 | ||
| 59 | let mut state = State::new(); | 59 | let mut state = State::new(); |
| 60 | 60 | ||
| @@ -70,7 +70,7 @@ async fn main(_spawner: Spawner) { | |||
| 70 | // Create classes on the builder. | 70 | // Create classes on the builder. |
| 71 | let config = embassy_usb::class::hid::Config { | 71 | let config = embassy_usb::class::hid::Config { |
| 72 | report_descriptor: MouseReport::desc(), | 72 | report_descriptor: MouseReport::desc(), |
| 73 | request_handler: Some(&request_handler), | 73 | request_handler: Some(&mut request_handler), |
| 74 | poll_ms: 60, | 74 | poll_ms: 60, |
| 75 | max_packet_size: 8, | 75 | max_packet_size: 8, |
| 76 | }; | 76 | }; |
| @@ -112,21 +112,21 @@ async fn main(_spawner: Spawner) { | |||
| 112 | struct MyRequestHandler {} | 112 | struct MyRequestHandler {} |
| 113 | 113 | ||
| 114 | impl RequestHandler for MyRequestHandler { | 114 | impl RequestHandler for MyRequestHandler { |
| 115 | fn get_report(&self, id: ReportId, _buf: &mut [u8]) -> Option<usize> { | 115 | fn get_report(&mut self, id: ReportId, _buf: &mut [u8]) -> Option<usize> { |
| 116 | info!("Get report for {:?}", id); | 116 | info!("Get report for {:?}", id); |
| 117 | None | 117 | None |
| 118 | } | 118 | } |
| 119 | 119 | ||
| 120 | fn set_report(&self, id: ReportId, data: &[u8]) -> OutResponse { | 120 | fn set_report(&mut self, id: ReportId, data: &[u8]) -> OutResponse { |
| 121 | info!("Set report for {:?}: {=[u8]}", id, data); | 121 | info!("Set report for {:?}: {=[u8]}", id, data); |
| 122 | OutResponse::Accepted | 122 | OutResponse::Accepted |
| 123 | } | 123 | } |
| 124 | 124 | ||
| 125 | fn set_idle_ms(&self, id: Option<ReportId>, dur: u32) { | 125 | fn set_idle_ms(&mut self, id: Option<ReportId>, dur: u32) { |
| 126 | info!("Set idle rate for {:?} to {:?}", id, dur); | 126 | info!("Set idle rate for {:?} to {:?}", id, dur); |
| 127 | } | 127 | } |
| 128 | 128 | ||
| 129 | fn get_idle_ms(&self, id: Option<ReportId>) -> Option<u32> { | 129 | fn get_idle_ms(&mut self, id: Option<ReportId>) -> Option<u32> { |
| 130 | info!("Get idle rate for {:?}", id); | 130 | info!("Get idle rate for {:?}", id); |
| 131 | None | 131 | None |
| 132 | } | 132 | } |
