/* Get the device request data and dispatch to individual process.  */
uint8_t USB_ProcessSetup0(void)
/* Get the device request data and dispatch to individual process.  */
uint8_t USB_ProcessSetup0(void)
{
    union
    {
        uint8_t* b;
        uint16_t* w;
    } pBuf;
    uint16_t offset = 1;
    pBuf.b = PMAAddr + (uint8_t*)(_GetEPRxAddr(ENDP0) * 2); 
    if (pInformation->CtrlState != Pause)
    {
        pInformation->bmRequestType = *pBuf.b++;
        pInformation->bRequest      = *pBuf.b++;
        pBuf.w += offset;
        pInformation->USBwValue = USB_ByteSwap(*pBuf.w++);
        pBuf.w += offset;
        pInformation->USBwIndex = USB_ByteSwap(*pBuf.w++);
        pBuf.w += offset;
        pInformation->USBwLength = *pBuf.w;
    }
    pInformation->CtrlState = SettingUp;
    if (pInformation->USBwLength == 0)
    {
        NoData_Setup0();
    }
    else
    {
        Data_Setup0();
    }
    return USB_ProcessPost0();
}