void USB_State_Machine(void)
{
        /*** USB Stage ***/      
        if(gu8USB_Mode==USB_DEVICE_MODE_INIT)
        {
            DISABLE_USB_5V;
            USB_Device_Init();
            gu8USB_Mode=USB_DEVICE_MODE;
        }
        if(gu8USB_Mode==USB_DEVICE_MODE)
        {
            USB_Device_Task();
        }
        
        if(gu8USB_Mode==USB_HOST_MODE_INIT)
        {
            USB_Host_Free_Memory();
            USB_Host_Init();
            gu8USB_Mode=USB_HOST_MODE;
            ENABLE_USB_5V;        
        }
        if(gu8USB_Mode==USB_HOST_MODE)
        {
            USB_Host_Task();
        }      
}
Example #2
0
/**************************************************************************//*!
 *
 * @name  USB_Class_CDC_Init
 *
 * @brief The funtion initializes the Device and Controller layer
 *
 * @param controller_ID:        Controller ID
 * @param cdc_class_callback:   CDC Class Callback
 * @param vendor_req_callback:  vendor specific class request callback
 * @param param_callback:       PSTN Callback
 *
 * @return status
 *         USB_OK           : When Successfull
 *         Others           : Errors
 ******************************************************************************
 * This function initializes the CDC Class layer and layers it is dependent upon
 *****************************************************************************/
uint_8 USB_Class_CDC_Init (
    uint_8    controller_ID,                /* [IN] Controller ID */
    USB_CLASS_CALLBACK cdc_class_callback,  /* [IN] CDC Class Callback */
    USB_REQ_FUNC       vendor_req_callback, /* [IN] Vendor Request Callback */
    USB_CLASS_CALLBACK pstn_callback        /* [IN] PSTN Callback */
)
{
    uint_8 index;
    USB_ENDPOINTS *usb_ep_data =
        (USB_ENDPOINTS *)USB_Desc_Get_Endpoints(controller_ID);
    /* Initialize the device layer*/
    uint_8 status = USB_Device_Init(controller_ID,
        (uint_8)(usb_ep_data->count+1));
    /* +1 is for Control Endpoint */

    if(status == USB_OK)
    {
        /* Initialize the generic class functions */
        status = USB_Class_Init(controller_ID,USB_Class_CDC_Event,
            USB_Other_Requests);
#if IMPLEMENT_QUEUING
            for(index = 0; index < usb_ep_data->count; index++)
            {
                g_cdc_ep[index].endpoint = usb_ep_data->ep[index].ep_num;
                g_cdc_ep[index].type = usb_ep_data->ep[index].type;
                g_cdc_ep[index].bin_consumer = 0x00;
                g_cdc_ep[index].bin_producer = 0x00;
            }
#endif
#if PSTN_SUBCLASS_NOTIF_SUPPORT
        /* Initialize the pstn subclass functions */
        status = USB_Class_CDC_Pstn_Init(controller_ID,pstn_callback);
#endif
        if(status == USB_OK)
        {
           /* save the callback pointer */
           g_cdc_class_callback = cdc_class_callback;

           /* save the callback pointer */
           g_vendor_req_callback = vendor_req_callback;
        }
    }
    return status;
}