Xmega Application Note


usb_task.c

Go to the documentation of this file.
00001 /* This file has been prepared for Doxygen automatic documentation generation.*/
00050 #include "config.h"
00051 #include "conf_usb.h"
00052 #include "usb_task.h"
00053 #include "usb_drv.h"
00054 #include "usb_descriptors.h"
00055 #include "usb_device_task.h"
00056 
00057 
00058 
00059 volatile uint16_t g_usb_event=0;
00060 extern uint8_t usb_connected;
00061 extern uint8_t usb_configuration_nb;
00062 
00063 
00064 
00070 void usb_task_init(void)
00071 {
00072         Usb_force_device_mode();
00073         usb_device_task_init();
00074 }
00075 
00076 
00082 void usb_task(void)
00083 {
00084         usb_device_task();
00085         
00086 }
00087 
00088 
00107 ISR(USB_GEN_vect)
00108 {
00109         /* VBUS state detection */
00110         if (Is_usb_vbus_transition() && Is_usb_vbus_interrupt_enabled()){
00111                 Usb_ack_vbus_transition();
00112                 if (Is_usb_vbus_high()){
00113                         usb_connected = true;
00114                         Usb_vbus_on_action();
00115                         Usb_send_event(EVT_USB_POWERED);
00116                         Usb_enable_reset_interrupt();
00117                         usb_start_device();
00118                         Usb_attach();
00119                 }else{
00120                         Usb_vbus_off_action();
00121                         usb_connected = false;
00122                         Usb_send_event(EVT_USB_UNPOWERED);
00123                 }
00124         }
00125         /* Device start of frame received  */
00126         if (Is_usb_sof() && Is_sof_interrupt_enabled()){
00127                 Usb_ack_sof();
00128                 Usb_sof_action();
00129         }
00130         /* Device Suspend event (no more USB activity detected)  */
00131         if (Is_usb_suspend() && Is_suspend_interrupt_enabled()){
00132                 Usb_ack_suspend();
00133                 Usb_enable_wake_up_interrupt();
00134                 Usb_ack_wake_up();
00135                 Usb_freeze_clock();
00136                 Usb_send_event(EVT_USB_SUSPEND);
00137                 Usb_suspend_action();
00138         }
00139         /* Wake up event (USB activity detected): Used to resume  */
00140         if (Is_usb_wake_up() && Is_swake_up_interrupt_enabled()){
00141                 Usb_unfreeze_clock();
00142                 Usb_ack_wake_up();
00143                 Usb_disable_wake_up_interrupt();
00144                 Usb_wake_up_action();
00145                 Usb_send_event(EVT_USB_WAKE_UP);
00146         }
00147         
00148         /* Resume state bus detection  */
00149         if (Is_usb_resume() && Is_resume_interrupt_enabled()){
00150                 Usb_disable_wake_up_interrupt();
00151                 Usb_ack_resume();
00152                 Usb_disable_resume_interrupt();
00153                 Usb_resume_action();
00154                 Usb_send_event(EVT_USB_RESUME);
00155         }
00156         
00157         /* USB bus reset detection  */
00158         if (Is_usb_reset()&& Is_reset_interrupt_enabled()){
00159                 Usb_ack_reset();
00160                 usb_init_device();
00161                 Usb_reset_action();
00162                 Usb_send_event(EVT_USB_RESET);
00163         }
00164         
00165 }
00166 
00171 extern void suspend_action(void)
00172 {
00173         sei();
00174         //Enter_sleep(POWER_DOWN_MODE);
00175 }
@DOC_TITLE@
Generated on Mon Jan 18 09:26:08 2010 for AVR1907 Xplain USB Gateway by doxygen 1.5.5