From 76be95a3528695653dafe0921eb34ed12e2cd07f Mon Sep 17 00:00:00 2001 From: sakumisu <1203593632@qq.com> Date: Thu, 21 May 2026 20:56:58 +0800 Subject: 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> --- class/wireless/usbd_rndis.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/class/wireless/usbd_rndis.c b/class/wireless/usbd_rndis.c index dffeb20e..5fceb98f 100644 --- a/class/wireless/usbd_rndis.c +++ b/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); -- cgit v1.3.1