/******************************************************************************* * Function Name : NoData_Setup0. * Description : Proceed the processing of setup request without data stage. * Input : None. * Output : None. * Return : None. *******************************************************************************/ void NoData_Setup0(void) { RESULT Result = USB_UNSUPPORT; uint32_t RequestNo = pInformation->USBbRequest; uint32_t ControlState; if(Type_Recipient == (STANDARD_REQUEST | DEVICE_RECIPIENT)) { /* Device Request*/ /* SET_CONFIGURATION*/ if(RequestNo == SET_CONFIGURATION) { Result = Standard_SetConfiguration(); } /*SET ADDRESS*/ else if(RequestNo == SET_ADDRESS) { if((pInformation->USBwValue0 > 127) || (pInformation->USBwValue1 != 0) || (pInformation->USBwIndex != 0) || (pInformation->Current_Configuration != 0)) /* Device Address should be 127 or less*/ { ControlState = STALLED; goto exit_NoData_Setup0; } else { Result = USB_SUCCESS; #ifdef STM32F10X_CL SetDeviceAddress(pInformation->USBwValue0); #endif /* STM32F10X_CL */ } } /*SET FEATURE for Device*/ else if(RequestNo == SET_FEATURE) { if((pInformation->USBwValue0 == DEVICE_REMOTE_WAKEUP) && (pInformation->USBwIndex == 0)) { Result = Standard_SetDeviceFeature(); } else { Result = USB_UNSUPPORT; } } /*Clear FEATURE for Device */ else if(RequestNo == CLEAR_FEATURE) { if(pInformation->USBwValue0 == DEVICE_REMOTE_WAKEUP && pInformation->USBwIndex == 0 && ValBit(pInformation->Current_Feature, 5)) { Result = Standard_ClearFeature(); } else { Result = USB_UNSUPPORT; } } } /* Interface Request*/ else if(Type_Recipient == (STANDARD_REQUEST | INTERFACE_RECIPIENT)) { /*SET INTERFACE*/ if(RequestNo == SET_INTERFACE) { Result = Standard_SetInterface(); } } /* EndPoint Request*/ else if(Type_Recipient == (STANDARD_REQUEST | ENDPOINT_RECIPIENT)) { /*CLEAR FEATURE for EndPoint*/ if(RequestNo == CLEAR_FEATURE) { Result = Standard_ClearFeature(); } /* SET FEATURE for EndPoint*/ else if(RequestNo == SET_FEATURE) { Result = Standard_SetEndPointFeature(); } } else { Result = USB_UNSUPPORT; } if(Result != USB_SUCCESS) { Result = (*pProperty->Class_NoData_Setup)(RequestNo); if(Result == USB_NOT_READY) { ControlState = PAUSE; goto exit_NoData_Setup0; } } if(Result != USB_SUCCESS) { ControlState = STALLED; goto exit_NoData_Setup0; } ControlState = WAIT_STATUS_IN; /* After no data stage SETUP */ USB_StatusIn(); exit_NoData_Setup0: pInformation->ControlState = ControlState; return; }
/******************************************************************************* * Function Name : NoData_Setup0. * Description : Proceed the processing of setup request without data stage. * Input : None. * Output : None. * Return : None. *******************************************************************************/ void NoData_Setup0(void) { RESULT Result = USB_UNSUPPORT; uint32_t RequestNo = pInformation->USBbRequest; uint32_t ControlState; if (Type_Recipient == (STANDARD_REQUEST | DEVICE_RECIPIENT)) { // Device Request // SET_CONFIGURATION if (RequestNo == SET_CONFIGURATION) Result = Standard_SetConfiguration(); // SET ADDRESS else if (RequestNo == SET_ADDRESS) { if ((pInformation->USBwValue0 > 127) || (pInformation->USBwValue1 != 0) || (pInformation->USBwIndex != 0) || (pInformation->Current_Configuration != 0)) { // Device Address should be 127 or less ControlState = STALLED; pInformation->ControlState = ControlState; return; } else Result = USB_SUCCESS; } else if (RequestNo == SET_FEATURE) { // SET FEATURE for Device if ((pInformation->USBwValue0 == DEVICE_REMOTE_WAKEUP) && (pInformation->USBwIndex == 0)) { Result = Standard_SetDeviceFeature(); } else { Result = USB_UNSUPPORT; } } else if (RequestNo == CLEAR_FEATURE) { // Clear FEATURE for Device if (pInformation->USBwValue0 == DEVICE_REMOTE_WAKEUP && pInformation->USBwIndex == 0 && ValBit(pInformation->Current_Feature, 5)) { Result = Standard_ClearFeature(); } else { Result = USB_UNSUPPORT; } } } else if (Type_Recipient == (STANDARD_REQUEST | INTERFACE_RECIPIENT)) { // Interface Request // SET INTERFACE if (RequestNo == SET_INTERFACE) Result = Standard_SetInterface(); } else if (Type_Recipient == (STANDARD_REQUEST | ENDPOINT_RECIPIENT)) { // EndPoint Request // CLEAR FEATURE for EndPoint if (RequestNo == CLEAR_FEATURE) { Result = Standard_ClearFeature(); } else if (RequestNo == SET_FEATURE) { // SET FEATURE for EndPoint Result = Standard_SetEndPointFeature(); } } else Result = USB_UNSUPPORT; if (Result != USB_SUCCESS) { Result = (*pProperty->Class_NoData_Setup)(RequestNo); if (Result == USB_NOT_READY) { ControlState = PAUSE; pInformation->ControlState = ControlState; return; } } if (Result != USB_SUCCESS) { ControlState = STALLED; pInformation->ControlState = ControlState; return; } ControlState = WAIT_STATUS_IN; // After no data stage SETUP SetEPTxCount(ENDP0,0); SaveTState = EP_TX_VALID; pInformation->ControlState = ControlState; return; }