Просмотр исходного кода

Clear ep0_pending if rx short packet

Jan Dümpelmann 5 лет назад
Родитель
Сommit
378e6aab8c
1 измененных файлов с 5 добавлено и 2 удалено
  1. 5 2
      src/portable/st/synopsys/dcd_synopsys.c

+ 5 - 2
src/portable/st/synopsys/dcd_synopsys.c

@@ -578,9 +578,12 @@ static void handle_rxflvl_ints(USB_OTG_OUTEndpointTypeDef * out_ep) {
         xfer->buffer += bcnt;
 
         // Truncate transfer length in case of short packet
-        if(bcnt < xfer->max_size){
+        if(bcnt < xfer->max_size) {
           xfer->total_len -= (out_ep[epnum].DOEPTSIZ & USB_OTG_DOEPTSIZ_XFRSIZ_Msk) >> USB_OTG_DOEPTSIZ_XFRSIZ_Pos;
-          if(epnum == 0) xfer->total_len -= ep0_pending[TUSB_DIR_OUT];
+          if(epnum == 0) {
+            xfer->total_len -= ep0_pending[TUSB_DIR_OUT];
+            ep0_pending[TUSB_DIR_OUT] = 0;
+          }
         }
       }
       break;