summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsakumisu <[email protected]>2026-05-21 20:56:58 +0800
committersakumisu <[email protected]>2026-05-21 20:57:24 +0800
commit76be95a3528695653dafe0921eb34ed12e2cd07f (patch)
tree83c8b1258f8e0b542f7fda91a8bc19cfe9a32fc6
parente51f0b38ef7ff9cd1d066645c1bd1d9541830e7f (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.c14
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);