void USB_StdReq_Handler(void) { switch(Setup_Pkt->bRequest) { case mSET_ADDRESS: EP_IN_Transfer(EP0,0,0); gu8USB_State=uADDRESS; break; case mGET_DESC: switch(Setup_Pkt->wValue_h) { case mDEVICE: EP_IN_Transfer(EP0,(uint8*)Device_Descriptor,sizeof(Device_Descriptor)); break; case mCONFIGURATION: EP_IN_Transfer(EP0,(uint8*)Configuration_Descriptor,sizeof(Configuration_Descriptor)); break; case mSTRING: EP_IN_Transfer(EP0,(uint8*)String_Table[Setup_Pkt->wValue_l],String_Table[Setup_Pkt->wValue_l][0]); gu8USB_State=uENUMERATED; break; default: USB_EP0_Stall(); break; } break; case mSET_CONFIG: gu8Dummy=Setup_Pkt->wValue_h+Setup_Pkt->wValue_l; if(Setup_Pkt->wValue_h+Setup_Pkt->wValue_l) { USB_Set_Interface(); EP_IN_Transfer(EP0,0,0); gu8USB_State=uENUMERATED; } break; case mGET_CONFIG: EP_IN_Transfer(EP0,(uint8*)&gu8Dummy,1); break; case mGET_STATUS: gu8Status=0; EP_IN_Transfer(EP0,(uint8*)&gu8Status,2); break; default: USB_EP0_Stall(); break; } }
void USB_Setup_Handler(void) { UINT8 u8State; FLAG_CLR(0,gu8USB_Toogle_flags); switch(Setup_Pkt->bmRequestType & 0x1F) { case DEVICE_REQ: if((Setup_Pkt->bmRequestType & 0x1F)== STANDARD_REQ) { //tBDTtable[bEP0IN_ODD].Stat._byte= kUDATA1; USB_StdReq_Handler(); } tBDTtable[bEP0OUT_ODD].Stat._byte= kUDATA0; break; case INTERFACE_REQ: u8State=USB_InterfaceReq_Handler(); if(u8State==uSETUP) tBDTtable[bEP0OUT_ODD].Stat._byte= kUDATA0; else tBDTtable[bEP0OUT_ODD].Stat._byte= kUDATA1; break; case ENDPOINT_REQ: USB_Endpoint_Setup_Handler(); tBDTtable[bEP0OUT_ODD].Stat._byte= kUDATA0; break; default: USB_EP0_Stall(); break; } //USB_CTL&=!USB_CTL_TXSUSPENDTOKENBUSY_MASK; //CTL_TXSUSPEND_TOKENBUSY=0; FLAG_CLR(USB_CTL_TXSUSPENDTOKENBUSY_SHIFT,USB0_CTL); }