aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--embassy-usb/src/class/hid.rs24
-rw-r--r--examples/nrf52840/src/bin/usb_hid_keyboard.rs14
-rw-r--r--examples/nrf52840/src/bin/usb_hid_mouse.rs12
-rw-r--r--examples/rp/src/bin/usb_hid_keyboard.rs14
-rw-r--r--examples/rp/src/bin/usb_hid_mouse.rs14
-rw-r--r--examples/stm32f4/src/bin/usb_hid_keyboard.rs14
-rw-r--r--examples/stm32f4/src/bin/usb_hid_mouse.rs12
-rw-r--r--examples/stm32l5/src/bin/usb_hid_mouse.rs12
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 {
411struct Control<'d> { 411struct 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) {
148struct MyRequestHandler {} 148struct MyRequestHandler {}
149 149
150impl RequestHandler for MyRequestHandler { 150impl 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) {
105struct MyRequestHandler {} 105struct MyRequestHandler {}
106 106
107impl RequestHandler for MyRequestHandler { 107impl 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) {
125struct MyRequestHandler {} 125struct MyRequestHandler {}
126 126
127impl RequestHandler for MyRequestHandler { 127impl 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) {
117struct MyRequestHandler {} 117struct MyRequestHandler {}
118 118
119impl RequestHandler for MyRequestHandler { 119impl 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) {
171struct MyRequestHandler {} 171struct MyRequestHandler {}
172 172
173impl RequestHandler for MyRequestHandler { 173impl 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) {
139struct MyRequestHandler {} 139struct MyRequestHandler {}
140 140
141impl RequestHandler for MyRequestHandler { 141impl 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) {
112struct MyRequestHandler {} 112struct MyRequestHandler {}
113 113
114impl RequestHandler for MyRequestHandler { 114impl 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 }