Modify MessageLength in usbh_rndis_eth_tx

This commit is contained in:
songyanguang 2024-07-23 18:17:59 +08:00
parent 46d67a2115
commit 1d7bcb479d
3 changed files with 13 additions and 10 deletions

View File

@ -17,6 +17,10 @@ Modification: Modify rndis_host.c according to
2. Date: 2024-07-23
Author: AIIT XUOS Lab
Modification: rndis bulk transfer buffer uses physical addresses.
3. Date: 2024-07-23
Author: AIIT XUOS Lab
Modification: Modify MessageLength in usbh_rndis_eth_tx, see https://github.com/cherry-embedded/CherryUSB.
*************************************************/
#include <usb_osal.h>
#include "usbh_core.h"
@ -42,9 +46,6 @@ Modification: rndis bulk transfer buffer uses physical addresses.
/* The maximum number of concatenated REMOTE_NDIS_PACKET_MSG messages in a single bus transfer to it, see MaxPacketsPerTransfer in REMOTE_NDIS_INITIALIZE_CMPLT. */
#define RNDIS_RXETH_BUFFER_LEN (RNDIS_ETH_BUFFER_LEN * 1)
#define RT_TRUE 1 /**< boolean true */
#define RT_FALSE 0 /**< boolean fails */
/* Static Variable Definition*/
static struct usbh_rndis *s_rndis_class_ptr;
@ -99,12 +100,12 @@ static void usbh_rndis_data_recv_entry(void *pdata)
}
if (NDIS_MEDIA_STATE_CONNECTED == data[0]) {
s_rndis_class_ptr->link_status = true;
eth_device_linkchange(RT_TRUE);
eth_device_linkchange(true);
printf("linkup, drop pkg\r\n");
break;
} else {
s_rndis_class_ptr->link_status = false;
eth_device_linkchange(RT_FALSE);
eth_device_linkchange(false);
}
usb_osal_msleep(100);
}
@ -211,12 +212,12 @@ int usbh_rndis_eth_tx(void *dataptr, size_t tot_len)
}
if (NDIS_MEDIA_STATE_CONNECTED == data[0]) {
s_rndis_class_ptr->link_status = true;
eth_device_linkchange(RT_TRUE);
eth_device_linkchange(true);
printf("linkup, drop pkg\r\n");
break;
} else {
s_rndis_class_ptr->link_status = false;
eth_device_linkchange(RT_FALSE);
eth_device_linkchange(false);
}
usb_osal_msleep(100);
}
@ -239,11 +240,11 @@ int usbh_rndis_eth_tx(void *dataptr, size_t tot_len)
buffer = (uint8_t *)(tx_buffer + sizeof(rndis_data_packet_t));
memcpy(buffer, dataptr, tot_len);
/* send */
if ((hdr->MessageLength & 0x1FF) == 0) {
/* pad a dummy. */
/* if message length is the multiple of wMaxPacketSize, we should add a short packet to tell device transfer is over. */
if (!(hdr->MessageLength % s_rndis_class_ptr->ep_mps)) {
hdr->MessageLength += 1;
}
return rndis_msg_data_send(s_rndis_class_ptr, (uint8_t *)tx_buffer_phy, hdr->MessageLength);
}

View File

@ -321,6 +321,7 @@ static int usbh_rndis_connect(struct usbh_hubport *hport, uint8_t intf)
usbh_hport_activate_epx(&rndis_class->bulkin, hport, ep_desc);
} else {
usbh_hport_activate_epx(&rndis_class->bulkout, hport, ep_desc);
rndis_class->ep_mps = ep_desc->wMaxPacketSize;
}
}

View File

@ -37,6 +37,7 @@ struct usbh_rndis {
struct usbh_urb bulkout_urb; /* Bulk OUT urb */
uint32_t request_id;
uint32_t ep_mps;
uint32_t link_speed;
bool link_status;
uint8_t mac[6];