diff options
| -rw-r--r-- | embassy-rp/src/usb.rs | 37 |
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) { |
