mirror of
https://github.com/XIVN1987/DAPLink.git
synced 2026-09-26 22:16:11 +00:00
fix usb non-standard request processing
This commit is contained in:
@@ -441,16 +441,7 @@ void USBHS_IRQHandler( void )
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case HID_GET_REPORT:
|
case HID_GET_REPORT:
|
||||||
if(USBHS_DevSpeed == USBHS_USB_SPEED_HIGH)
|
error = 0xFF;
|
||||||
{
|
|
||||||
len = (USBHS_Setup.wLength >= USB_MAX_EP0_SZ) ? USB_MAX_EP0_SZ : USBHS_Setup.wLength;
|
|
||||||
memcpy(USBHS_EP0_Buf, HID_ReportDesc_HS, len);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
len = (USBHS_Setup.wLength >= USB_MAX_EP0_SZ) ? USB_MAX_EP0_SZ : USBHS_Setup.wLength;
|
|
||||||
memcpy(USBHS_EP0_Buf, HID_ReportDesc_FS, len);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HID_SET_IDLE:
|
case HID_SET_IDLE:
|
||||||
@@ -459,7 +450,6 @@ void USBHS_IRQHandler( void )
|
|||||||
|
|
||||||
case HID_GET_IDLE:
|
case HID_GET_IDLE:
|
||||||
USBHS_EP0_Buf[0] = USBHS_HID_Idle;
|
USBHS_EP0_Buf[0] = USBHS_HID_Idle;
|
||||||
len = 1;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HID_SET_PROTOCOL:
|
case HID_SET_PROTOCOL:
|
||||||
@@ -468,15 +458,13 @@ void USBHS_IRQHandler( void )
|
|||||||
|
|
||||||
case HID_GET_PROTOCOL:
|
case HID_GET_PROTOCOL:
|
||||||
USBHS_EP0_Buf[0] = USBHS_HID_Protocol;
|
USBHS_EP0_Buf[0] = USBHS_HID_Protocol;
|
||||||
len = 1;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CDC_SET_LINE_CODING:
|
case CDC_SET_LINE_CODING:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CDC_GET_LINE_CODING:
|
case CDC_GET_LINE_CODING:
|
||||||
pUSBHS_Descr = (uint8_t *)&LineCfg;
|
memcpy(USBHS_EP0_Buf, (uint8_t *)&LineCfg, 7);
|
||||||
len = 7;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CDC_SET_LINE_CTLSTE:
|
case CDC_SET_LINE_CTLSTE:
|
||||||
@@ -493,6 +481,15 @@ void USBHS_IRQHandler( void )
|
|||||||
{
|
{
|
||||||
pUSBHS_Descr = MS_OS_20_DescriptorSet;
|
pUSBHS_Descr = MS_OS_20_DescriptorSet;
|
||||||
len = MS_OS_20_DescriptorSet[8];
|
len = MS_OS_20_DescriptorSet[8];
|
||||||
|
|
||||||
|
/* Copy Descriptors to Endp0 DMA buffer */
|
||||||
|
if(USBHS_Setup.wLength > len)
|
||||||
|
{
|
||||||
|
USBHS_Setup.wLength = len;
|
||||||
|
}
|
||||||
|
len = (USBHS_Setup.wLength >= USB_MAX_EP0_SZ) ? USB_MAX_EP0_SZ : USBHS_Setup.wLength;
|
||||||
|
memcpy(USBHS_EP0_Buf, pUSBHS_Descr, len);
|
||||||
|
pUSBHS_Descr += len;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
error = 0xFF;
|
error = 0xFF;
|
||||||
@@ -501,11 +498,6 @@ void USBHS_IRQHandler( void )
|
|||||||
{
|
{
|
||||||
error = 0xFF;
|
error = 0xFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Copy Descriptors to Endp0 DMA buffer */
|
|
||||||
len = (USBHS_Setup.wLength >= USB_MAX_EP0_SZ) ? USB_MAX_EP0_SZ : USBHS_Setup.wLength;
|
|
||||||
memcpy(USBHS_EP0_Buf, pUSBHS_Descr, len);
|
|
||||||
pUSBHS_Descr += len;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(error == 0xFF)
|
if(error == 0xFF)
|
||||||
@@ -519,8 +511,8 @@ void USBHS_IRQHandler( void )
|
|||||||
if(USBHS_Setup.bRequestType & USB_EPT_IN)
|
if(USBHS_Setup.bRequestType & USB_EPT_IN)
|
||||||
{
|
{
|
||||||
len = (USBHS_Setup.wLength > USB_MAX_EP0_SZ) ? USB_MAX_EP0_SZ : USBHS_Setup.wLength;
|
len = (USBHS_Setup.wLength > USB_MAX_EP0_SZ) ? USB_MAX_EP0_SZ : USBHS_Setup.wLength;
|
||||||
|
|
||||||
USBHS_Setup.wLength -= len;
|
USBHS_Setup.wLength -= len;
|
||||||
|
|
||||||
USBHSD->UEP0_TX_LEN = len;
|
USBHSD->UEP0_TX_LEN = len;
|
||||||
USBHSD->UEP0_TX_CTRL = USBHS_UEP_T_TOG_DATA1 | USBHS_UEP_T_RES_ACK;
|
USBHSD->UEP0_TX_CTRL = USBHS_UEP_T_TOG_DATA1 | USBHS_UEP_T_RES_ACK;
|
||||||
}
|
}
|
||||||
@@ -578,7 +570,6 @@ void USBHS_IRQHandler( void )
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifndef DAP_FW_V1
|
|
||||||
else if((USBHS_Setup.bRequestType & USB_REQ_TYP_MASK) == USB_REQ_TYP_VENDOR)
|
else if((USBHS_Setup.bRequestType & USB_REQ_TYP_MASK) == USB_REQ_TYP_VENDOR)
|
||||||
{
|
{
|
||||||
len = USBHS_Setup.wLength >= USB_MAX_EP0_SZ ? USB_MAX_EP0_SZ : USBHS_Setup.wLength;
|
len = USBHS_Setup.wLength >= USB_MAX_EP0_SZ ? USB_MAX_EP0_SZ : USBHS_Setup.wLength;
|
||||||
@@ -589,7 +580,6 @@ void USBHS_IRQHandler( void )
|
|||||||
USBHSD->UEP0_TX_LEN = len;
|
USBHSD->UEP0_TX_LEN = len;
|
||||||
USBHSD->UEP0_TX_CTRL ^= USBHS_UEP_T_TOG_DATA1;
|
USBHSD->UEP0_TX_CTRL ^= USBHS_UEP_T_TOG_DATA1;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Non-standard request endpoint 0 Data upload */
|
/* Non-standard request endpoint 0 Data upload */
|
||||||
@@ -643,10 +633,6 @@ void USBHS_IRQHandler( void )
|
|||||||
|
|
||||||
VCOM_LineCoding(&LineCfg);
|
VCOM_LineCoding(&LineCfg);
|
||||||
}
|
}
|
||||||
else if(USBHS_Setup.bRequest == HID_SET_REPORT)
|
|
||||||
{
|
|
||||||
error = 0xFF;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(USBHS_Setup.wLength == 0)
|
if(USBHS_Setup.wLength == 0)
|
||||||
|
|||||||
Reference in New Issue
Block a user