Эх сурвалжийг харах

fix(class/rndis/usbd_rndis): add dummy byte for tx not zlp when txlen is a multiply of mps

Signed-off-by: sakumisu <1203593632@qq.com>
sakumisu 5 цаг өмнө
parent
commit
76be95a352

+ 7 - 7
class/wireless/usbd_rndis.c

@@ -489,13 +489,8 @@ void rndis_bulk_in(uint8_t busid, uint8_t ep, uint32_t nbytes)
 {
     (void)busid;
 
-    if ((nbytes % usbd_get_ep_mps(0, ep)) == 0 && nbytes) {
-        /* send zlp */
-        usbd_ep_start_write(0, ep, NULL, 0);
-    } else {
-        usbd_rndis_data_send_done(g_rndis_tx_data_length);
-        g_rndis_tx_data_length = 0;
-    }
+    usbd_rndis_data_send_done(g_rndis_tx_data_length);
+    g_rndis_tx_data_length = 0;
 }
 
 void rndis_int_in(uint8_t busid, uint8_t ep, uint32_t nbytes)
@@ -517,6 +512,11 @@ int usbd_rndis_start_write(uint8_t *buf, uint32_t len)
         return -USB_ERR_BUSY;
     }
 
+    if((len % usbd_get_ep_mps(0, rndis_ep_data[RNDIS_IN_EP_IDX].ep_addr)) == 0) {
+        /* If the data length is a multiple of the endpoint max packet size, add one byte to indicate the end of the transfer. */
+        len += 1;
+    }
+
     g_rndis_tx_data_length = len;
 
     USB_LOG_DBG("txlen:%d\r\n", g_rndis_tx_data_length);