aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDario Nieuwenhuis <[email protected]>2024-05-13 01:38:47 +0200
committerGitHub <[email protected]>2024-05-13 01:38:47 +0200
commit763b57449fef31b2ca5205542e2c0a52e6b786c1 (patch)
treec5d7f1092b65490efe415c96d309e45342e0343a
parentaaf4cb0cb2bdfc8ce7104d323ea8a364139c3a18 (diff)
parent84cd0c672b2dd3754a36ae632bbe25845dbeeabc (diff)
Merge pull request #2928 from bobrippling/feat/usb-stall
rp: implement usb stall
-rw-r--r--embassy-rp/src/usb.rs37
1 files changed, 33 insertions, 4 deletions
diff --git a/embassy-rp/src/usb.rs b/embassy-rp/src/usb.rs
index 37d37d6d9..512271ae4 100644
--- a/embassy-rp/src/usb.rs
+++ b/embassy-rp/src/usb.rs
@@ -412,12 +412,41 @@ impl<'d, T: Instance> driver::Bus for Bus<'d, T> {
412 .await 412 .await
413 } 413 }
414 414
415 fn endpoint_set_stalled(&mut self, _ep_addr: EndpointAddress, _stalled: bool) { 415 fn endpoint_set_stalled(&mut self, ep_addr: EndpointAddress, stalled: bool) {
416 todo!(); 416 let n = ep_addr.index();
417
418 if n == 0 {
419 T::regs().ep_stall_arm().modify(|w| {
420 if ep_addr.is_in() {
421 w.set_ep0_in(stalled);
422 } else {
423 w.set_ep0_out(stalled);
424 }
425 });
426 }
427
428 let ctrl = if ep_addr.is_in() {
429 T::dpram().ep_in_buffer_control(n)
430 } else {
431 T::dpram().ep_out_buffer_control(n)
432 };
433
434 ctrl.modify(|w| w.set_stall(stalled));
435
436 let wakers = if ep_addr.is_in() { &EP_IN_WAKERS } else { &EP_OUT_WAKERS };
437 wakers[n].wake();
417 } 438 }
418 439
419 fn endpoint_is_stalled(&mut self, _ep_addr: EndpointAddress) -> bool { 440 fn endpoint_is_stalled(&mut self, ep_addr: EndpointAddress) -> bool {
420 todo!(); 441 let n = ep_addr.index();
442
443 let ctrl = if ep_addr.is_in() {
444 T::dpram().ep_in_buffer_control(n)
445 } else {
446 T::dpram().ep_out_buffer_control(n)
447 };
448
449 ctrl.read().stall()
421 } 450 }
422 451
423 fn endpoint_set_enabled(&mut self, ep_addr: EndpointAddress, enabled: bool) { 452 fn endpoint_set_enabled(&mut self, ep_addr: EndpointAddress, enabled: bool) {