瀏覽代碼

Merge pull request #451 from duempel/fix_synopsys_short_packet

Fix receiving of short packet data (Synopsys)
Ha Thach 5 年之前
父節點
當前提交
e4391c32a6
共有 1 個文件被更改,包括 9 次插入0 次删除
  1. 9 0
      src/portable/st/synopsys/dcd_synopsys.c

+ 9 - 0
src/portable/st/synopsys/dcd_synopsys.c

@@ -576,6 +576,15 @@ static void handle_rxflvl_ints(USB_OTG_OUTEndpointTypeDef * out_ep) {
 
         // Increment pointer to xfer data
         xfer->buffer += bcnt;
+
+        // Truncate transfer length in case of short packet
+        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];
+            ep0_pending[TUSB_DIR_OUT] = 0;
+          }
+        }
       }
       break;
     case 0x03: // Out packet done (Interrupt)