return correct length of LangID string to host
This commit is contained in:
parent
3f74a95663
commit
376a08d89a
|
@ -100,13 +100,13 @@ static rt_err_t _get_string_descriptor(struct udevice* device, ureq_t setup)
|
||||||
str_desc.type = USB_DESC_TYPE_STRING;
|
str_desc.type = USB_DESC_TYPE_STRING;
|
||||||
index = setup->value & 0xFF;
|
index = setup->value & 0xFF;
|
||||||
|
|
||||||
if(index > USB_STRING_INTERFACE_INDEX)
|
if (index > USB_STRING_INTERFACE_INDEX)
|
||||||
{
|
{
|
||||||
rt_kprintf("unknown string index\n");
|
rt_kprintf("unknown string index\n");
|
||||||
dcd_ep_stall(device->dcd, 0);
|
dcd_ep_stall(device->dcd, 0);
|
||||||
return -RT_ERROR;
|
return -RT_ERROR;
|
||||||
}
|
}
|
||||||
if(index == 0)
|
if (index == 0)
|
||||||
{
|
{
|
||||||
str_desc.bLength = 4;
|
str_desc.bLength = 4;
|
||||||
str_desc.String[0] = 0x09;
|
str_desc.String[0] = 0x09;
|
||||||
|
@ -117,14 +117,14 @@ static rt_err_t _get_string_descriptor(struct udevice* device, ureq_t setup)
|
||||||
len = rt_strlen(device->str[index]);
|
len = rt_strlen(device->str[index]);
|
||||||
str_desc.bLength = len*2 + 2;
|
str_desc.bLength = len*2 + 2;
|
||||||
|
|
||||||
for(i=0; i<len; i++)
|
for (i=0; i<len; i++)
|
||||||
{
|
{
|
||||||
str_desc.String[i*2] = device->str[index][i];
|
str_desc.String[i*2] = device->str[index][i];
|
||||||
str_desc.String[i*2 + 1] = 0;
|
str_desc.String[i*2 + 1] = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(setup->length > len)
|
if (setup->length > str_desc.bLength)
|
||||||
len = str_desc.bLength;
|
len = str_desc.bLength;
|
||||||
else
|
else
|
||||||
len = setup->length;
|
len = setup->length;
|
||||||
|
@ -149,7 +149,7 @@ static rt_err_t _get_descriptor(struct udevice* device, ureq_t setup)
|
||||||
RT_ASSERT(device != RT_NULL);
|
RT_ASSERT(device != RT_NULL);
|
||||||
RT_ASSERT(setup != RT_NULL);
|
RT_ASSERT(setup != RT_NULL);
|
||||||
|
|
||||||
if(setup->request_type == USB_REQ_TYPE_DIR_IN)
|
if (setup->request_type == USB_REQ_TYPE_DIR_IN)
|
||||||
{
|
{
|
||||||
switch(setup->value >> 8)
|
switch(setup->value >> 8)
|
||||||
{
|
{
|
||||||
|
@ -250,7 +250,7 @@ static rt_err_t _set_interface(struct udevice* device, ureq_t setup)
|
||||||
setting = intf->curr_setting;
|
setting = intf->curr_setting;
|
||||||
|
|
||||||
/* start all endpoints of the interface alternate setting */
|
/* start all endpoints of the interface alternate setting */
|
||||||
for(i=setting->ep_list.next; i != &setting->ep_list; i=i->next)
|
for (i=setting->ep_list.next; i != &setting->ep_list; i=i->next)
|
||||||
{
|
{
|
||||||
ep = (uep_t)rt_list_entry(i, struct uendpoint, list);
|
ep = (uep_t)rt_list_entry(i, struct uendpoint, list);
|
||||||
dcd_ep_stop(device->dcd, ep);
|
dcd_ep_stop(device->dcd, ep);
|
||||||
|
|
Loading…
Reference in New Issue