📄 usbcore.c
字号:
EP0Data.pData = EP0Buf;
goto class_ok;
case HID_REQUEST_GET_IDLE:
if (HID_GetIdle()) {
EP0Data.pData = EP0Buf;
USB_DataInStage();
goto class_ok;
}
break;
case HID_REQUEST_SET_IDLE:
if (HID_SetIdle()) {
USB_StatusInStage();
goto class_ok;
}
break;
case HID_REQUEST_GET_PROTOCOL:
if (HID_GetProtocol()) {
EP0Data.pData = EP0Buf;
USB_DataInStage();
goto class_ok;
}
break;
case HID_REQUEST_SET_PROTOCOL:
if (HID_SetProtocol()) {
USB_StatusInStage();
goto class_ok;
}
break;
}
}
#endif /* USB_HID */
#if USB_MSC
if (SetupPacket.wIndex.WB.L == USB_MSC_IF_NUM) {
switch (SetupPacket.bRequest) {
case MSC_REQUEST_RESET:
if (MSC_Reset()) {
USB_StatusInStage();
goto class_ok;
}
break;
case MSC_REQUEST_GET_MAX_LUN:
if (MSC_GetMaxLUN()) {
EP0Data.pData = EP0Buf;
USB_DataInStage();
goto class_ok;
}
break;
}
}
#endif /* USB_MSC */
#if USB_AUDIO
if ((SetupPacket.wIndex.WB.L == USB_ADC_CIF_NUM) ||
(SetupPacket.wIndex.WB.L == USB_ADC_SIF1_NUM) ||
(SetupPacket.wIndex.WB.L == USB_ADC_SIF2_NUM)) {
if (SetupPacket.bmRequestType.BM.Dir) {
if (ADC_IF_GetRequest()) {
EP0Data.pData = EP0Buf;
USB_DataInStage();
goto class_ok;
}
} else {
EP0Data.pData = EP0Buf;
goto class_ok;
}
}
#endif /* USB_AUDIO */
#if USB_CDC
if ((SetupPacket.wIndex.WB.L == USB_CDC_CIF_NUM) ||
(SetupPacket.wIndex.WB.L == USB_CDC_DIF_NUM)) {
switch (SetupPacket.bRequest) {
case CDC_SEND_ENCAPSULATED_COMMAND:
EP0Data.pData = EP0Buf; /* data to be stored, see USB_EVT_OUT */
goto class_ok;
break;
case CDC_GET_ENCAPSULATED_RESPONSE:
if (CDC_GetEncapsulatedResponse()) {
EP0Data.pData = EP0Buf; /* data to be sent */
USB_DataInStage(); /* send data */
goto class_ok;
}
break;
case CDC_SET_COMM_FEATURE:
EP0Data.pData = EP0Buf; /* data to be stored, see USB_EVT_OUT */
goto class_ok;
break;
case CDC_GET_COMM_FEATURE:
if (CDC_GetCommFeature(SetupPacket.wValue.W)) {
EP0Data.pData = EP0Buf; /* data to be sent */
USB_DataInStage(); /* send data */
goto class_ok;
}
break;
case CDC_CLEAR_COMM_FEATURE:
if (CDC_ClearCommFeature(SetupPacket.wValue.W)) {
USB_StatusInStage(); /* send Acknowledge */
goto class_ok;
}
break;
case CDC_SET_LINE_CODING:
EP0Data.pData = EP0Buf; /* data to be stored, see USB_EVT_OUT */
goto class_ok;
break;
case CDC_GET_LINE_CODING:
if (CDC_GetLineCoding()) {
EP0Data.pData = EP0Buf; /* data to be sent */
USB_DataInStage(); /* send data */
goto class_ok;
}
break;
case CDC_SET_CONTROL_LINE_STATE:
if (CDC_SetControlLineState(SetupPacket.wValue.W)) {
USB_StatusInStage(); /* send Acknowledge */
goto class_ok;
}
break;
case CDC_SEND_BREAK:
if (CDC_SendBreak(SetupPacket.wValue.W)) {
USB_StatusInStage(); /* send Acknowledge */
goto class_ok;
}
break;
}
}
#endif /* USB_CDC */
#if USB_UVC
if ((SetupPacket.wIndex.WB.L == USB_UVC_VCIF_NUM) ||
(SetupPacket.wIndex.WB.L == USB_UVC_VSIF_NUM)) {
switch (SetupPacket.bRequest) {
case SET_CUR:
EP0Data.pData = EP0Buf; /* data to be stored, see USB_EVT_OUT */
USB_DataOutStage();
goto class_ok;
break;
case GET_CUR:
if (UVC_GetCur()) {
EP0Data.pData = EP0Buf; /* data to be sent */
USB_DataInStage(); /* send data */
goto class_ok;
}
break;
case GET_MIN:
if (UVC_GetMin()) {
EP0Data.pData = EP0Buf; /* data to be sent */
USB_DataInStage(); /* send data */
goto class_ok;
}
break;
case GET_MAX:
if (UVC_GetMax()) {
EP0Data.pData = EP0Buf; /* data to be sent */
USB_DataInStage(); /* send data */
goto class_ok;
}
break;
case GET_RES:
if (UVC_GetRes()) {
EP0Data.pData = EP0Buf; /* data to be sent */
USB_DataInStage(); /* send data */
goto class_ok;
}
break;
case GET_LEN:
if (UVC_GetLen()) {
EP0Data.pData = EP0Buf; /* data to be sent */
USB_DataInStage(); /* send data */
goto class_ok;
}
break;
case GET_INFO:
if (UVC_GetInfo()) {
EP0Data.pData = EP0Buf; /* data to be sent */
USB_DataInStage(); /* send data */
goto class_ok;
}
break;
case GET_DEF:
if (UVC_GetDef()) {
EP0Data.pData = EP0Buf; /* data to be sent */
USB_DataInStage(); /* send data */
goto class_ok;
}
break;
}
}
#endif /* USB_UVC */
goto stall_i;
#if USB_AUDIO
case REQUEST_TO_ENDPOINT:
if (SetupPacket.bmRequestType.BM.Dir) {
if (ADC_EP_GetRequest()) {
EP0Data.pData = EP0Buf;
USB_DataInStage();
goto class_ok;
}
} else {
EP0Data.pData = EP0Buf;
goto class_ok;
}
goto stall_i;
#endif /* USB_AUDIO */
default:
goto stall_i;
}
class_ok: break;
#else
goto stall_i;
#endif /* USB_CLASS */
case REQUEST_VENDOR:
goto stall_i;
default:
stall_i: USB_SetStallEP(0x80);
EP0Data.Count = 0;
break;
}
break;
case USB_EVT_OUT:
if (SetupPacket.bmRequestType.BM.Dir == 0) {
if (EP0Data.Count) {
USB_DataOutStage(); /* receive data */
if (EP0Data.Count == 0) {
USB_StatusInStage(); /* send Acknowledge */
switch (SetupPacket.bmRequestType.BM.Type) {
case REQUEST_STANDARD:
goto stall_i;
#if (USB_CLASS)
case REQUEST_CLASS:
switch (SetupPacket.bmRequestType.BM.Recipient) {
case REQUEST_TO_INTERFACE:
#if USB_HID
if (SetupPacket.wIndex.WB.L == USB_HID_IF_NUM) {
if (!HID_SetReport()) {
goto stall_i;
}
break;
}
#endif /* USB_HID */
#if USB_AUDIO
if ((SetupPacket.wIndex.WB.L == USB_ADC_CIF_NUM) ||
(SetupPacket.wIndex.WB.L == USB_ADC_SIF1_NUM) ||
(SetupPacket.wIndex.WB.L == USB_ADC_SIF2_NUM)) {
if (!ADC_IF_SetRequest()) {
goto stall_i;
}
break;
}
#endif /* USB_AUDIO */
#if USB_CDC
if ((SetupPacket.wIndex.WB.L == USB_CDC_CIF_NUM) ||
(SetupPacket.wIndex.WB.L == USB_CDC_DIF_NUM)) {
switch (SetupPacket.bRequest) {
case CDC_SEND_ENCAPSULATED_COMMAND:
if (!CDC_SendEncapsulatedCommand()) {
goto stall_i;
}
break;
case CDC_SET_COMM_FEATURE:
if (!CDC_SetCommFeature(SetupPacket.wValue.W)) {
goto stall_i;
}
break;
case CDC_SET_LINE_CODING:
if (!CDC_SetLineCoding()) {
goto stall_i;
}
break;
} /* end switch (SetupPacket.bRequest) */
break;
}
#endif /* USB_CDC */
#if USB_UVC
if ((SetupPacket.wIndex.WB.L == USB_UVC_VCIF_NUM) ||
(SetupPacket.wIndex.WB.L == USB_UVC_VSIF_NUM)) {
switch (SetupPacket.bRequest) {
case SET_CUR:
if (!UVC_SetCur()) {
goto stall_i;
}
break;
} /* end switch (SetupPacket.bRequest) */
break;
}
#endif /* USB_UVC */
goto stall_i;
case REQUEST_TO_ENDPOINT:
#if USB_AUDIO
if (ADC_EP_SetRequest()) break;
#endif /* USB_AUDIO */
goto stall_i;
default:
goto stall_i;
}
break;
#endif /* USB_CLASS */
default:
goto stall_i;
}
// USB_StatusInStage(); /* send Acknowledge */
}
}
}
break;
case USB_EVT_IN:
if (SetupPacket.bmRequestType.BM.Dir == 1) {
if ( EP0Data.Count ) {
USB_DataInStage();
}
else {
USB_StatusOutStage();
}
}
break;
case USB_EVT_IN_STALL:
USB_ClrStallEP(0x80);
break;
case USB_EVT_OUT_STALL:
USB_ClrStallEP(0x00);
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -