drivers/usbdev_fs: update ctrlreq buffer len base on longest string descriptor
nuttx/mm/kasan/kasan.c:117 kasan_report nuttx/mm/kasan/kasan.c:111 composite_mkstrdesc nuttx/drivers/usbdev/composite.c:404 sunxi_ep0_disptach nuttx/arch/arm/src/chip/drivers/rtos-hal/hal/source/usb/udc/udc.c:1287 up_common_handler nuttx/arch/arm/src/chip/drivers/osal/src/hal_interrupt.c:10 Signed-off-by: dongjiuzhu1 <dongjiuzhu1@xiaomi.com>
This commit is contained in:
parent
070ecb480a
commit
1355302036
@ -298,8 +298,6 @@ static int16_t composite_mkcfgdesc(FAR struct usbdevclass_driver_s *driver,
|
||||
memcpy(buf, priv->descs->cfgdesc, sizeof(struct usb_cfgdesc_s));
|
||||
|
||||
cfgdesc = (FAR struct usb_cfgdesc_s *)buf;
|
||||
cfgdesc->totallen[0] = LSBYTE(priv->cfgdescsize);
|
||||
cfgdesc->totallen[1] = MSBYTE(priv->cfgdescsize);
|
||||
cfgdesc->ninterfaces = priv->ninterfaces;
|
||||
|
||||
/* Increment the size and buf to point right behind the information
|
||||
@ -329,6 +327,9 @@ static int16_t composite_mkcfgdesc(FAR struct usbdevclass_driver_s *driver,
|
||||
#endif
|
||||
}
|
||||
|
||||
cfgdesc->totallen[0] = LSBYTE(total);
|
||||
cfgdesc->totallen[1] = MSBYTE(total);
|
||||
|
||||
return total;
|
||||
}
|
||||
|
||||
@ -1016,6 +1017,7 @@ FAR void *composite_initialize(FAR const struct usbdev_devdescs_s *devdescs,
|
||||
FAR struct composite_devdesc_s *pdevices,
|
||||
uint8_t ndevices)
|
||||
{
|
||||
FAR const struct usbdev_strdesc_s *strdesc;
|
||||
FAR struct composite_alloc_s *alloc;
|
||||
FAR struct composite_dev_s *priv;
|
||||
FAR struct composite_driver_s *drvr;
|
||||
@ -1073,6 +1075,26 @@ FAR void *composite_initialize(FAR const struct usbdev_devdescs_s *devdescs,
|
||||
priv->ninterfaces += devobj->compdesc.devinfo.ninterfaces;
|
||||
}
|
||||
|
||||
/* Update cfgdescsize based on the longest string descriptor */
|
||||
|
||||
#ifdef CONFIG_BOARD_USBDEV_SERIALSTR
|
||||
ret = sizeof(struct usb_strdesc_s) + strlen(board_usbdev_serialstr()) * 2;
|
||||
if (priv->cfgdescsize < ret)
|
||||
{
|
||||
priv->cfgdescsize = ret;
|
||||
}
|
||||
#endif
|
||||
|
||||
strdesc = devdescs->strdescs->strdesc;
|
||||
for (i = 0; strdesc[i].string != NULL; i++)
|
||||
{
|
||||
ret = sizeof(struct usb_strdesc_s) + strlen(strdesc[i].string) * 2;
|
||||
if (priv->cfgdescsize < ret)
|
||||
{
|
||||
priv->cfgdescsize = ret;
|
||||
}
|
||||
}
|
||||
|
||||
priv->ndevices = ndevices;
|
||||
|
||||
/* Initialize the USB class driver structure */
|
||||
|
Loading…
x
Reference in New Issue
Block a user