You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by ac...@apache.org on 2023/03/28 22:44:02 UTC
[nuttx] 01/05: rndis: refactor usbdev_rndis_get_composite_devdesc to make it more like in other composite drivers
This is an automated email from the ASF dual-hosted git repository.
acassis pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git
commit 9b70e010dca45e0d2e449d9bed51b564ff09231f
Author: raiden00pl <ra...@railab.me>
AuthorDate: Tue Mar 21 10:16:59 2023 +0100
rndis: refactor usbdev_rndis_get_composite_devdesc to make it more like in other composite drivers
---
drivers/usbdev/rndis.c | 76 +++++++++++++++++++++++++++++++++++---------------
1 file changed, 54 insertions(+), 22 deletions(-)
diff --git a/drivers/usbdev/rndis.c b/drivers/usbdev/rndis.c
index 4e3f205235..afc3c78573 100644
--- a/drivers/usbdev/rndis.c
+++ b/drivers/usbdev/rndis.c
@@ -2056,27 +2056,31 @@ static int16_t usbclass_mkcfgdesc(FAR uint8_t *buf,
*/
totallen = sizeof(g_rndis_cfgdesc);
- memcpy(dest, &g_rndis_cfgdesc, totallen);
- usbclass_copy_epdesc(RNDIS_EP_INTIN_IDX, &dest->epintindesc,
- devinfo, hispeed);
- usbclass_copy_epdesc(RNDIS_EP_BULKIN_IDX, &dest->epbulkindesc,
- devinfo, hispeed);
- usbclass_copy_epdesc(RNDIS_EP_BULKOUT_IDX, &dest->epbulkoutdesc,
- devinfo, hispeed);
+ if (dest != NULL)
+ {
+ memcpy(dest, &g_rndis_cfgdesc, totallen);
+
+ usbclass_copy_epdesc(RNDIS_EP_INTIN_IDX, &dest->epintindesc,
+ devinfo, hispeed);
+ usbclass_copy_epdesc(RNDIS_EP_BULKIN_IDX, &dest->epbulkindesc,
+ devinfo, hispeed);
+ usbclass_copy_epdesc(RNDIS_EP_BULKOUT_IDX, &dest->epbulkoutdesc,
+ devinfo, hispeed);
#ifndef CONFIG_RNDIS_COMPOSITE
- /* For a stand-alone device, just fill in the total length */
+ /* For a stand-alone device, just fill in the total length */
- dest->cfgdesc.totallen[0] = LSBYTE(totallen);
- dest->cfgdesc.totallen[1] = MSBYTE(totallen);
+ dest->cfgdesc.totallen[0] = LSBYTE(totallen);
+ dest->cfgdesc.totallen[1] = MSBYTE(totallen);
#else
- /* For composite device, apply possible offset to the interface numbers */
+ /* For composite device, apply possible offset to the interface numbers */
- dest->assoc_desc.firstif += devinfo->ifnobase;
- dest->comm_ifdesc.ifno += devinfo->ifnobase;
- dest->data_ifdesc.ifno += devinfo->ifnobase;
+ dest->assoc_desc.firstif += devinfo->ifnobase;
+ dest->comm_ifdesc.ifno += devinfo->ifnobase;
+ dest->data_ifdesc.ifno += devinfo->ifnobase;
#endif
+ }
return totallen;
}
@@ -3016,21 +3020,49 @@ void usbdev_rndis_get_composite_devdesc(struct composite_devdesc_s *dev)
{
memset(dev, 0, sizeof(struct composite_devdesc_s));
+ /* The callback functions for the RNDIS class.
+ *
+ * classobject() and uninitialize() must be provided by board-specific
+ * logic
+ */
+
dev->mkconfdesc = usbclass_mkcfgdesc;
dev->mkstrdesc = usbclass_mkstrdesc;
dev->classobject = usbclass_classobject;
dev->uninitialize = usbclass_uninitialize;
- dev->nconfigs = RNDIS_NCONFIGS;
- dev->configid = RNDIS_CONFIGID;
- dev->cfgdescsize = sizeof(g_rndis_cfgdesc);
+
+ dev->nconfigs = RNDIS_NCONFIGS; /* Number of configurations supported */
+ dev->configid = RNDIS_CONFIGID; /* The only supported configuration ID */
+
+ /* Let the construction function calculate the size of config descriptor */
+
+#ifdef CONFIG_USBDEV_DUALSPEED
+ dev->cfgdescsize = usbclass_mkcfgdesc(NULL, NULL, USB_SPEED_UNKNOWN, 0);
+#else
+ dev->cfgdescsize = usbclass_mkcfgdesc(NULL, NULL);
+#endif
+
+ /* Board-specific logic must provide the device minor */
+
+ /* Interfaces.
+ *
+ * ifnobase must be provided by board-specific logic
+ */
+
dev->devinfo.ninterfaces = RNDIS_NINTERFACES;
+
+ /* Strings.
+ *
+ * strbase must be provided by board-specific logic
+ */
+
dev->devinfo.nstrings = 0;
- dev->devinfo.nendpoints = RNDIS_NUM_EPS;
- /* Default endpoint indexes, board-specific logic can override these */
+ /* Endpoints.
+ *
+ * Endpoint numbers must be provided by board-specific logic.
+ */
- dev->devinfo.epno[RNDIS_EP_INTIN_IDX] = USB_EPNO(RNDIS_EPINTIN_ADDR);
- dev->devinfo.epno[RNDIS_EP_BULKIN_IDX] = USB_EPNO(RNDIS_EPBULKIN_ADDR);
- dev->devinfo.epno[RNDIS_EP_BULKOUT_IDX] = USB_EPNO(RNDIS_EPBULKOUT_ADDR);
+ dev->devinfo.nendpoints = RNDIS_NUM_EPS;
}
#endif