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(); } }
/**************************************************************************//*! * * @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; }