Merge pull request #1626 from embassy-rs/otg-read-disable
stm32/otg: implement `EndpointError::Disabled` for reads.
This commit is contained in:
commit
e196387e69
@ -1154,14 +1154,22 @@ impl<'d, T: Instance> embassy_usb_driver::EndpointOut for Endpoint<'d, T, Out> {
|
|||||||
trace!("read start len={}", buf.len());
|
trace!("read start len={}", buf.len());
|
||||||
|
|
||||||
poll_fn(|cx| {
|
poll_fn(|cx| {
|
||||||
|
let r = T::regs();
|
||||||
let index = self.info.addr.index();
|
let index = self.info.addr.index();
|
||||||
let state = T::state();
|
let state = T::state();
|
||||||
|
|
||||||
state.ep_out_wakers[index].register(cx.waker());
|
state.ep_out_wakers[index].register(cx.waker());
|
||||||
|
|
||||||
|
let doepctl = r.doepctl(index).read();
|
||||||
|
trace!("read ep={:?}: doepctl {:08x}", self.info.addr, doepctl.0,);
|
||||||
|
if !doepctl.usbaep() {
|
||||||
|
trace!("read ep={:?} error disabled", self.info.addr);
|
||||||
|
return Poll::Ready(Err(EndpointError::Disabled));
|
||||||
|
}
|
||||||
|
|
||||||
let len = state.ep_out_size[index].load(Ordering::Relaxed);
|
let len = state.ep_out_size[index].load(Ordering::Relaxed);
|
||||||
if len != EP_OUT_BUFFER_EMPTY {
|
if len != EP_OUT_BUFFER_EMPTY {
|
||||||
trace!("read done len={}", len);
|
trace!("read ep={:?} done len={}", self.info.addr, len);
|
||||||
|
|
||||||
if len as usize > buf.len() {
|
if len as usize > buf.len() {
|
||||||
return Poll::Ready(Err(EndpointError::BufferOverflow));
|
return Poll::Ready(Err(EndpointError::BufferOverflow));
|
||||||
@ -1214,7 +1222,12 @@ impl<'d, T: Instance> embassy_usb_driver::EndpointIn for Endpoint<'d, T, In> {
|
|||||||
|
|
||||||
let diepctl = r.diepctl(index).read();
|
let diepctl = r.diepctl(index).read();
|
||||||
let dtxfsts = r.dtxfsts(index).read();
|
let dtxfsts = r.dtxfsts(index).read();
|
||||||
trace!("diepctl {:08x} ftxfsts {:08x}", diepctl.0, dtxfsts.0);
|
trace!(
|
||||||
|
"write ep={:?}: diepctl {:08x} ftxfsts {:08x}",
|
||||||
|
self.info.addr,
|
||||||
|
diepctl.0,
|
||||||
|
dtxfsts.0
|
||||||
|
);
|
||||||
if !diepctl.usbaep() {
|
if !diepctl.usbaep() {
|
||||||
trace!("write ep={:?} wait for prev: error disabled", self.info.addr);
|
trace!("write ep={:?} wait for prev: error disabled", self.info.addr);
|
||||||
Poll::Ready(Err(EndpointError::Disabled))
|
Poll::Ready(Err(EndpointError::Disabled))
|
||||||
|
Loading…
Reference in New Issue
Block a user