diff options
| author | sakumisu <[email protected]> | 2026-05-21 20:56:58 +0800 |
|---|---|---|
| committer | sakumisu <[email protected]> | 2026-05-21 20:57:24 +0800 |
| commit | 76be95a3528695653dafe0921eb34ed12e2cd07f (patch) | |
| tree | 83c8b1258f8e0b542f7fda91a8bc19cfe9a32fc6 | |
| parent | e51f0b38ef7ff9cd1d066645c1bd1d9541830e7f (diff) | |
fix(class/rndis/usbd_rndis): add dummy byte for tx not zlp when txlen is a multiply of mps
Signed-off-by: sakumisu <[email protected]>
| -rw-r--r-- | class/wireless/usbd_rndis.c | 14 |
1 files 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); |
