Bladeren bron

When unstalling, EP must be marked as not busy. Also, mark EP as busy when stalling as xfer requests should fail.

Nathan Conrad 6 jaren geleden
bovenliggende
commit
a187f0268c
1 gewijzigde bestanden met toevoegingen van 2 en 0 verwijderingen
  1. 2 0
      src/device/usbd.c

+ 2 - 0
src/device/usbd.c

@@ -870,6 +870,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_stall_map[dir] = (uint8_t) tu_bit_set(_usbd_dev.ep_stall_map[dir], epnum);
   _usbd_dev.ep_stall_map[dir] = (uint8_t) tu_bit_set(_usbd_dev.ep_stall_map[dir], epnum);
+  _usbd_dev.ep_busy_map[dir] = (uint8_t) tu_bit_set(_usbd_dev.ep_busy_map[dir], epnum);
 }
 }
 
 
 void usbd_edpt_clear_stall(uint8_t rhport, uint8_t ep_addr)
 void usbd_edpt_clear_stall(uint8_t rhport, uint8_t ep_addr)
@@ -878,6 +879,7 @@ void usbd_edpt_clear_stall(uint8_t rhport, uint8_t ep_addr)
   uint8_t const dir   = tu_edpt_dir(ep_addr);
   uint8_t const dir   = tu_edpt_dir(ep_addr);
 
 
   dcd_edpt_clear_stall(rhport, ep_addr);
   dcd_edpt_clear_stall(rhport, ep_addr);
+  _usbd_dev.ep_busy_map[dir] = (uint8_t) tu_bit_clear(_usbd_dev.ep_busy_map[dir], epnum);
   _usbd_dev.ep_stall_map[dir] = (uint8_t) tu_bit_clear(_usbd_dev.ep_stall_map[dir], epnum);
   _usbd_dev.ep_stall_map[dir] = (uint8_t) tu_bit_clear(_usbd_dev.ep_stall_map[dir], epnum);
 }
 }