Пример #1
0
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;
    }
}
Пример #2
0
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);
}