diff options
| author | Rob Pilling <[email protected]> | 2024-04-22 22:16:25 +0100 |
|---|---|---|
| committer | Rob Pilling <[email protected]> | 2024-05-10 16:27:08 +0100 |
| commit | 94b38449bd1e6d04a009700689d34ce1adf72c07 (patch) | |
| tree | fa5db15d8440f749c6850a13f656379b667d6219 | |
| parent | 9cbbedef793d619c659c6a81080675282690a8af (diff) | |
rp usb: add stall implementation
| -rw-r--r-- | embassy-rp/src/usb.rs | 34 |
1 files changed, 30 insertions, 4 deletions
diff --git a/embassy-rp/src/usb.rs b/embassy-rp/src/usb.rs index 37d37d6d9..99cba2d82 100644 --- a/embassy-rp/src/usb.rs +++ b/embassy-rp/src/usb.rs | |||
| @@ -412,12 +412,38 @@ 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)); | ||
| 417 | } | 435 | } |
| 418 | 436 | ||
| 419 | fn endpoint_is_stalled(&mut self, _ep_addr: EndpointAddress) -> bool { | 437 | fn endpoint_is_stalled(&mut self, ep_addr: EndpointAddress) -> bool { |
| 420 | todo!(); | 438 | let n = ep_addr.index(); |
| 439 | |||
| 440 | let ctrl = if ep_addr.is_in() { | ||
| 441 | T::dpram().ep_in_buffer_control(n) | ||
| 442 | } else { | ||
| 443 | T::dpram().ep_out_buffer_control(n) | ||
| 444 | }; | ||
| 445 | |||
| 446 | ctrl.read().stall() | ||
| 421 | } | 447 | } |
| 422 | 448 | ||
| 423 | fn endpoint_set_enabled(&mut self, ep_addr: EndpointAddress, enabled: bool) { | 449 | fn endpoint_set_enabled(&mut self, ep_addr: EndpointAddress, enabled: bool) { |
