diff options
| author | Dario Nieuwenhuis <[email protected]> | 2023-07-07 03:41:27 +0200 |
|---|---|---|
| committer | Dario Nieuwenhuis <[email protected]> | 2023-07-07 03:55:57 +0200 |
| commit | f8d608093f51ab6fe97b32c7a23bf131a10b6f9c (patch) | |
| tree | 21739c58a3aedc716d28b485b4c94c3158227426 | |
| parent | ffeb40ff43ea52d0df5d5e6e807ecb87eafdf0c8 (diff) | |
stm32/otg: implement `EndpointError::Disabled` for reads.
It was implemented only for writes.
| -rw-r--r-- | embassy-stm32/src/usb_otg/usb.rs | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/embassy-stm32/src/usb_otg/usb.rs b/embassy-stm32/src/usb_otg/usb.rs index 492b77585..d0284746c 100644 --- a/embassy-stm32/src/usb_otg/usb.rs +++ b/embassy-stm32/src/usb_otg/usb.rs | |||
| @@ -1154,14 +1154,22 @@ impl<'d, T: Instance> embassy_usb_driver::EndpointOut for Endpoint<'d, T, Out> { | |||
| 1154 | trace!("read start len={}", buf.len()); | 1154 | trace!("read start len={}", buf.len()); |
| 1155 | 1155 | ||
| 1156 | poll_fn(|cx| { | 1156 | poll_fn(|cx| { |
| 1157 | let r = T::regs(); | ||
| 1157 | let index = self.info.addr.index(); | 1158 | let index = self.info.addr.index(); |
| 1158 | let state = T::state(); | 1159 | let state = T::state(); |
| 1159 | 1160 | ||
| 1160 | state.ep_out_wakers[index].register(cx.waker()); | 1161 | state.ep_out_wakers[index].register(cx.waker()); |
| 1161 | 1162 | ||
| 1163 | let doepctl = r.doepctl(index).read(); | ||
| 1164 | trace!("read ep={:?}: doepctl {:08x}", self.info.addr, doepctl.0,); | ||
| 1165 | if !doepctl.usbaep() { | ||
| 1166 | trace!("read ep={:?} error disabled", self.info.addr); | ||
| 1167 | return Poll::Ready(Err(EndpointError::Disabled)); | ||
| 1168 | } | ||
| 1169 | |||
| 1162 | let len = state.ep_out_size[index].load(Ordering::Relaxed); | 1170 | let len = state.ep_out_size[index].load(Ordering::Relaxed); |
| 1163 | if len != EP_OUT_BUFFER_EMPTY { | 1171 | if len != EP_OUT_BUFFER_EMPTY { |
| 1164 | trace!("read done len={}", len); | 1172 | trace!("read ep={:?} done len={}", self.info.addr, len); |
| 1165 | 1173 | ||
| 1166 | if len as usize > buf.len() { | 1174 | if len as usize > buf.len() { |
| 1167 | return Poll::Ready(Err(EndpointError::BufferOverflow)); | 1175 | return Poll::Ready(Err(EndpointError::BufferOverflow)); |
| @@ -1214,7 +1222,12 @@ impl<'d, T: Instance> embassy_usb_driver::EndpointIn for Endpoint<'d, T, In> { | |||
| 1214 | 1222 | ||
| 1215 | let diepctl = r.diepctl(index).read(); | 1223 | let diepctl = r.diepctl(index).read(); |
| 1216 | let dtxfsts = r.dtxfsts(index).read(); | 1224 | let dtxfsts = r.dtxfsts(index).read(); |
| 1217 | trace!("diepctl {:08x} ftxfsts {:08x}", diepctl.0, dtxfsts.0); | 1225 | trace!( |
| 1226 | "write ep={:?}: diepctl {:08x} ftxfsts {:08x}", | ||
| 1227 | self.info.addr, | ||
| 1228 | diepctl.0, | ||
| 1229 | dtxfsts.0 | ||
| 1230 | ); | ||
| 1218 | if !diepctl.usbaep() { | 1231 | if !diepctl.usbaep() { |
| 1219 | trace!("write ep={:?} wait for prev: error disabled", self.info.addr); | 1232 | trace!("write ep={:?} wait for prev: error disabled", self.info.addr); |
| 1220 | Poll::Ready(Err(EndpointError::Disabled)) | 1233 | Poll::Ready(Err(EndpointError::Disabled)) |
