Explorar el Código

revert previous changes, edpt stall also clear any pending (not complete) transfer

hathach hace 4 años
padre
commit
90dc9bc289
Se han modificado 2 ficheros con 5 adiciones y 7 borrados
  1. 1 5
      src/class/msc/msc_device.c
  2. 4 2
      src/device/usbd.c

+ 1 - 5
src/class/msc/msc_device.c

@@ -323,11 +323,7 @@ bool mscd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t
         if ( p_msc->stage == MSC_STAGE_CMD )
         if ( p_msc->stage == MSC_STAGE_CMD )
         {
         {
           // part of reset recovery (probably due to invalid CBW) -> prepare for new command
           // part of reset recovery (probably due to invalid CBW) -> prepare for new command
-          // Note: skip if already queued previously
-          if ( usbd_edpt_ready(rhport, p_msc->ep_out) )
-          {
-            TU_ASSERT( prepare_cbw(rhport, p_msc) );
-          }
+          TU_ASSERT( prepare_cbw(rhport, p_msc) );
         }
         }
       }
       }
     }
     }

+ 4 - 2
src/device/usbd.c

@@ -1214,12 +1214,12 @@ bool usbd_edpt_claim(uint8_t rhport, uint8_t ep_addr)
 
 
 #if CFG_TUSB_OS != OPT_OS_NONE
 #if CFG_TUSB_OS != OPT_OS_NONE
   // pre-check to help reducing mutex lock
   // pre-check to help reducing mutex lock
-  TU_VERIFY( usbd_edpt_ready(rhport, ep_addr) && (_usbd_dev.ep_status[epnum][dir].claimed == 0));
+  TU_VERIFY( (_usbd_dev.ep_status[epnum][dir].busy == 0) && (_usbd_dev.ep_status[epnum][dir].claimed == 0));
   osal_mutex_lock(_usbd_mutex, OSAL_TIMEOUT_WAIT_FOREVER);
   osal_mutex_lock(_usbd_mutex, OSAL_TIMEOUT_WAIT_FOREVER);
 #endif
 #endif
 
 
   // can only claim the endpoint if it is not busy and not claimed yet.
   // can only claim the endpoint if it is not busy and not claimed yet.
-  bool const ret = usbd_edpt_ready(rhport, ep_addr) && (_usbd_dev.ep_status[epnum][dir].claimed == 0);
+  bool const ret = (_usbd_dev.ep_status[epnum][dir].busy == 0) && (_usbd_dev.ep_status[epnum][dir].claimed == 0);
   if (ret)
   if (ret)
   {
   {
     _usbd_dev.ep_status[epnum][dir].claimed = 1;
     _usbd_dev.ep_status[epnum][dir].claimed = 1;
@@ -1340,6 +1340,7 @@ void usbd_edpt_stall(uint8_t rhport, uint8_t ep_addr)
 
 
   dcd_edpt_stall(rhport, ep_addr);
   dcd_edpt_stall(rhport, ep_addr);
   _usbd_dev.ep_status[epnum][dir].stalled = true;
   _usbd_dev.ep_status[epnum][dir].stalled = true;
+  _usbd_dev.ep_status[epnum][dir].busy = true;
 }
 }
 
 
 void usbd_edpt_clear_stall(uint8_t rhport, uint8_t ep_addr)
 void usbd_edpt_clear_stall(uint8_t rhport, uint8_t ep_addr)
@@ -1351,6 +1352,7 @@ void usbd_edpt_clear_stall(uint8_t rhport, uint8_t ep_addr)
 
 
   dcd_edpt_clear_stall(rhport, ep_addr);
   dcd_edpt_clear_stall(rhport, ep_addr);
   _usbd_dev.ep_status[epnum][dir].stalled = false;
   _usbd_dev.ep_status[epnum][dir].stalled = false;
+  _usbd_dev.ep_status[epnum][dir].busy = false;
 }
 }
 
 
 bool usbd_edpt_stalled(uint8_t rhport, uint8_t ep_addr)
 bool usbd_edpt_stalled(uint8_t rhport, uint8_t ep_addr)