diff --git a/drivers/usbdev/adb.c b/drivers/usbdev/adb.c index 83633f4d7a5..39166711627 100644 --- a/drivers/usbdev/adb.c +++ b/drivers/usbdev/adb.c @@ -866,6 +866,7 @@ static int16_t usbclass_mkcfgdesc(FAR uint8_t *buf, static int usbclass_mkstrdesc(uint8_t id, FAR struct usb_strdesc_s *strdesc) { + FAR uint8_t *data = (FAR uint8_t *)(strdesc + 1); FAR const char *str; int len; int ndata; @@ -878,10 +879,10 @@ static int usbclass_mkstrdesc(uint8_t id, FAR struct usb_strdesc_s *strdesc) { /* Descriptor 0 is the language id */ - strdesc->len = 4; - strdesc->type = USB_DESC_TYPE_STRING; - strdesc->data[0] = LSBYTE(USBADB_STR_LANGUAGE); - strdesc->data[1] = MSBYTE(USBADB_STR_LANGUAGE); + strdesc->len = 4; + strdesc->type = USB_DESC_TYPE_STRING; + data[0] = LSBYTE(USBADB_STR_LANGUAGE); + data[1] = MSBYTE(USBADB_STR_LANGUAGE); return 4; } @@ -928,8 +929,8 @@ static int usbclass_mkstrdesc(uint8_t id, FAR struct usb_strdesc_s *strdesc) for (i = 0, ndata = 0; i < len; i++, ndata += 2) { - strdesc->data[ndata] = str[i]; - strdesc->data[ndata + 1] = 0; + data[ndata] = str[i]; + data[ndata + 1] = 0; } strdesc->len = ndata + 2; diff --git a/drivers/usbdev/cdcacm_desc.c b/drivers/usbdev/cdcacm_desc.c index ee7bc5dfce4..a97a2356205 100644 --- a/drivers/usbdev/cdcacm_desc.c +++ b/drivers/usbdev/cdcacm_desc.c @@ -115,12 +115,12 @@ static const struct usb_qualdesc_s g_qualdesc = * ****************************************************************************/ -int cdcacm_mkstrdesc(uint8_t id, struct usb_strdesc_s *strdesc) +int cdcacm_mkstrdesc(uint8_t id, FAR struct usb_strdesc_s *strdesc) { #if !defined(CONFIG_CDCACM_COMPOSITE) || defined(CONFIG_CDCACM_NOTIFSTR) || \ defined(CONFIG_CDCACM_DATAIFSTR) - - const char *str; + FAR uint8_t *data = (FAR uint8_t *)(strdesc + 1); + FAR const char *str; int len; int ndata; int i; @@ -132,10 +132,10 @@ int cdcacm_mkstrdesc(uint8_t id, struct usb_strdesc_s *strdesc) { /* Descriptor 0 is the language id */ - strdesc->len = 4; - strdesc->type = USB_DESC_TYPE_STRING; - strdesc->data[0] = LSBYTE(CDCACM_STR_LANGUAGE); - strdesc->data[1] = MSBYTE(CDCACM_STR_LANGUAGE); + strdesc->len = 4; + strdesc->type = USB_DESC_TYPE_STRING; + data[0] = LSBYTE(CDCACM_STR_LANGUAGE); + data[1] = MSBYTE(CDCACM_STR_LANGUAGE); return 4; } @@ -188,8 +188,8 @@ int cdcacm_mkstrdesc(uint8_t id, struct usb_strdesc_s *strdesc) for (i = 0, ndata = 0; i < len; i++, ndata += 2) { - strdesc->data[ndata] = str[i]; - strdesc->data[ndata + 1] = 0; + data[ndata] = str[i]; + data[ndata + 1] = 0; } strdesc->len = ndata + 2; diff --git a/drivers/usbdev/cdcecm.c b/drivers/usbdev/cdcecm.c index 15b6107d382..d67201c3d9d 100644 --- a/drivers/usbdev/cdcecm.c +++ b/drivers/usbdev/cdcecm.c @@ -1365,7 +1365,8 @@ static int cdcecm_setinterface(FAR struct cdcecm_driver_s *self, static int cdcecm_mkstrdesc(uint8_t id, FAR struct usb_strdesc_s *strdesc) { - const char *str; + FAR uint8_t *data = (FAR uint8_t *)(strdesc + 1); + FAR const char *str; int len; int ndata; int i; @@ -1377,10 +1378,10 @@ static int cdcecm_mkstrdesc(uint8_t id, FAR struct usb_strdesc_s *strdesc) { /* Descriptor 0 is the language id */ - strdesc->len = 4; - strdesc->type = USB_DESC_TYPE_STRING; - strdesc->data[0] = LSBYTE(CDCECM_STR_LANGUAGE); - strdesc->data[1] = MSBYTE(CDCECM_STR_LANGUAGE); + strdesc->len = 4; + strdesc->type = USB_DESC_TYPE_STRING; + data[0] = LSBYTE(CDCECM_STR_LANGUAGE); + data[1] = MSBYTE(CDCECM_STR_LANGUAGE); return 4; } @@ -1426,8 +1427,8 @@ static int cdcecm_mkstrdesc(uint8_t id, FAR struct usb_strdesc_s *strdesc) for (i = 0, ndata = 0; i < len; i++, ndata += 2) { - strdesc->data[ndata] = str[i]; - strdesc->data[ndata + 1] = 0; + data[ndata] = str[i]; + data[ndata + 1] = 0; } strdesc->len = ndata + 2; diff --git a/drivers/usbdev/composite.c b/drivers/usbdev/composite.c index 20eb9121214..cb7bda3b24f 100644 --- a/drivers/usbdev/composite.c +++ b/drivers/usbdev/composite.c @@ -601,7 +601,7 @@ static int composite_setup(FAR struct usbdevclass_driver_s *driver, buf->len = 18; buf->type = USB_DESC_TYPE_STRING; - memcpy(buf->data, msft_response, 16); + memcpy(buf + 1, msft_response, 16); ret = buf->len; } #endif diff --git a/drivers/usbdev/composite_desc.c b/drivers/usbdev/composite_desc.c index b8cfd753c18..d052036c7f0 100644 --- a/drivers/usbdev/composite_desc.c +++ b/drivers/usbdev/composite_desc.c @@ -118,9 +118,10 @@ static const struct usb_qualdesc_s g_qualdesc = * ****************************************************************************/ -int composite_mkstrdesc(uint8_t id, struct usb_strdesc_s *strdesc) +int composite_mkstrdesc(uint8_t id, FAR struct usb_strdesc_s *strdesc) { - const char *str; + FAR uint8_t *data = (FAR uint8_t *)(strdesc + 1); + FAR const char *str; int len; int ndata; int i; @@ -131,10 +132,10 @@ int composite_mkstrdesc(uint8_t id, struct usb_strdesc_s *strdesc) { /* Descriptor 0 is the language id */ - strdesc->len = 4; - strdesc->type = USB_DESC_TYPE_STRING; - strdesc->data[0] = LSBYTE(COMPOSITE_STR_LANGUAGE); - strdesc->data[1] = MSBYTE(COMPOSITE_STR_LANGUAGE); + strdesc->len = 4; + strdesc->type = USB_DESC_TYPE_STRING; + data[0] = LSBYTE(COMPOSITE_STR_LANGUAGE); + data[1] = MSBYTE(COMPOSITE_STR_LANGUAGE); return 4; } @@ -169,8 +170,8 @@ int composite_mkstrdesc(uint8_t id, struct usb_strdesc_s *strdesc) len = strlen(str); for (i = 0, ndata = 0; i < len; i++, ndata += 2) { - strdesc->data[ndata] = str[i]; - strdesc->data[ndata + 1] = 0; + data[ndata] = str[i]; + data[ndata + 1] = 0; } strdesc->len = ndata + 2; diff --git a/drivers/usbdev/dfu.c b/drivers/usbdev/dfu.c index ca27059b9c8..565d900e1be 100644 --- a/drivers/usbdev/dfu.c +++ b/drivers/usbdev/dfu.c @@ -271,7 +271,7 @@ static int usbclass_mkstrdesc(uint8_t id, FAR struct usb_strdesc_s *strdesc) return -EINVAL; } - strdesc->len = 2 + convert_to_utf16(strdesc->data, str); + strdesc->len = 2 + convert_to_utf16((FAR uint8_t *)(strdesc + 1), str); strdesc->type = USB_DESC_TYPE_STRING; return strdesc->len; } diff --git a/drivers/usbdev/pl2303.c b/drivers/usbdev/pl2303.c index dbd526afc5a..956883ea141 100644 --- a/drivers/usbdev/pl2303.c +++ b/drivers/usbdev/pl2303.c @@ -828,9 +828,10 @@ static void usbclass_freereq(FAR struct usbdev_ep_s *ep, * ****************************************************************************/ -static int usbclass_mkstrdesc(uint8_t id, struct usb_strdesc_s *strdesc) +static int usbclass_mkstrdesc(uint8_t id, FAR struct usb_strdesc_s *strdesc) { - const char *str; + FAR uint8_t *data = (FAR uint8_t *)(strdesc + 1); + FAR const char *str; int len; int ndata; int i; @@ -841,10 +842,10 @@ static int usbclass_mkstrdesc(uint8_t id, struct usb_strdesc_s *strdesc) { /* Descriptor 0 is the language id */ - strdesc->len = 4; - strdesc->type = USB_DESC_TYPE_STRING; - strdesc->data[0] = LSBYTE(PL2303_STR_LANGUAGE); - strdesc->data[1] = MSBYTE(PL2303_STR_LANGUAGE); + strdesc->len = 4; + strdesc->type = USB_DESC_TYPE_STRING; + data[0] = LSBYTE(PL2303_STR_LANGUAGE); + data[1] = MSBYTE(PL2303_STR_LANGUAGE); return 4; } @@ -884,8 +885,8 @@ static int usbclass_mkstrdesc(uint8_t id, struct usb_strdesc_s *strdesc) for (i = 0, ndata = 0; i < len; i++, ndata += 2) { - strdesc->data[ndata] = str[i]; - strdesc->data[ndata + 1] = 0; + data[ndata] = str[i]; + data[ndata + 1] = 0; } strdesc->len = ndata + 2; diff --git a/drivers/usbdev/rndis.c b/drivers/usbdev/rndis.c index 8ab6d20bd2f..234fb649e15 100644 --- a/drivers/usbdev/rndis.c +++ b/drivers/usbdev/rndis.c @@ -1897,6 +1897,7 @@ static FAR struct usbdev_req_s *usbclass_allocreq(FAR struct usbdev_ep_s *ep, static int usbclass_mkstrdesc(uint8_t id, FAR struct usb_strdesc_s *strdesc) { + FAR uint8_t *data = (FAR uint8_t *)(strdesc + 1); FAR const char *str; int len; int ndata; @@ -1909,10 +1910,10 @@ static int usbclass_mkstrdesc(uint8_t id, FAR struct usb_strdesc_s *strdesc) { /* Descriptor 0 is the language id */ - strdesc->len = 4; - strdesc->type = USB_DESC_TYPE_STRING; - strdesc->data[0] = LSBYTE(RNDIS_STR_LANGUAGE); - strdesc->data[1] = MSBYTE(RNDIS_STR_LANGUAGE); + strdesc->len = 4; + strdesc->type = USB_DESC_TYPE_STRING; + data[0] = LSBYTE(RNDIS_STR_LANGUAGE); + data[1] = MSBYTE(RNDIS_STR_LANGUAGE); return 4; } @@ -1949,8 +1950,8 @@ static int usbclass_mkstrdesc(uint8_t id, FAR struct usb_strdesc_s *strdesc) for (i = 0, ndata = 0; i < len; i++, ndata += 2) { - strdesc->data[ndata] = str[i]; - strdesc->data[ndata + 1] = 0; + data[ndata] = str[i]; + data[ndata + 1] = 0; } strdesc->len = ndata + 2; diff --git a/drivers/usbdev/usbmsc_desc.c b/drivers/usbdev/usbmsc_desc.c index 02c4480368c..320b5d9df07 100644 --- a/drivers/usbdev/usbmsc_desc.c +++ b/drivers/usbdev/usbmsc_desc.c @@ -128,9 +128,10 @@ const char g_mscserialstr[] = CONFIG_USBMSC_SERIALSTR; * ****************************************************************************/ -int usbmsc_mkstrdesc(uint8_t id, struct usb_strdesc_s *strdesc) +int usbmsc_mkstrdesc(uint8_t id, struct FAR usb_strdesc_s *strdesc) { - const char *str; + FAR uint8_t *data = (FAR uint8_t *)(strdesc + 1); + FAR const char *str; int len; int ndata; int i; @@ -142,10 +143,10 @@ int usbmsc_mkstrdesc(uint8_t id, struct usb_strdesc_s *strdesc) { /* Descriptor 0 is the language id */ - strdesc->len = 4; - strdesc->type = USB_DESC_TYPE_STRING; - strdesc->data[0] = LSBYTE(USBMSC_STR_LANGUAGE); - strdesc->data[1] = MSBYTE(USBMSC_STR_LANGUAGE); + strdesc->len = 4; + strdesc->type = USB_DESC_TYPE_STRING; + data[0] = LSBYTE(USBMSC_STR_LANGUAGE); + data[1] = MSBYTE(USBMSC_STR_LANGUAGE); return 4; } @@ -188,8 +189,8 @@ int usbmsc_mkstrdesc(uint8_t id, struct usb_strdesc_s *strdesc) for (i = 0, ndata = 0; i < len; i++, ndata += 2) { - strdesc->data[ndata] = str[i]; - strdesc->data[ndata + 1] = 0; + data[ndata] = str[i]; + data[ndata + 1] = 0; } strdesc->len = ndata + 2; diff --git a/include/nuttx/usb/usb.h b/include/nuttx/usb/usb.h index e352d3493a9..8c4a23e4ceb 100644 --- a/include/nuttx/usb/usb.h +++ b/include/nuttx/usb/usb.h @@ -336,7 +336,8 @@ struct usb_strdesc_s { uint8_t len; /* Descriptor length */ uint8_t type; /* Descriptor type */ - uint8_t data[2]; + + /* uint8_t data[]; */ }; /* Interface descriptor */