00001
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044 #ifndef _USB_TASK_H_
00045 #define _USB_TASK_H_
00046
00047 #include "modules/usb/usb_commun.h"
00048
00051
00052
00053
00054
00055
00056
00060 #define Usb_send_event(x) (g_usb_event |= (1<<x))
00061 #define Usb_ack_event(x) (g_usb_event &= ~(1<<x))
00062 #define Usb_clear_all_event() (g_usb_event = 0)
00063 #define Is_usb_event(x) ((g_usb_event & (1<<x)) ? TRUE : FALSE)
00064 #define Is_not_usb_event(x) ((g_usb_event & (1<<x)) ? FALSE: TRUE)
00065 #define Is_host_emergency_exit() (Is_usb_id_device()||(device_state==DEVICE_DISCONNECTED))
00066 #define Is_usb_device() (g_usb_mode==USB_MODE_DEVICE ? TRUE : FALSE)
00067 #define Is_usb_host() (g_usb_mode==USB_MODE_HOST ? TRUE : FALSE)
00068
00069 #define Otg_send_event(x) (g_otg_event |= (1<<x))
00070 #define Otg_ack_event(x) (g_otg_event &= ~(1<<x))
00071 #define Otg_clear_all_event() (g_otg_event = 0)
00072 #define Is_otg_event(x) ((g_otg_event & (1<<x)) ? TRUE : FALSE)
00073 #define Is_not_otg_event(x) ((g_otg_event & (1<<x)) ? FALSE: TRUE)
00074
00075 #define EVT_USB_POWERED 1 // USB plugged
00076 #define EVT_USB_UNPOWERED 2 // USB un-plugged
00077 #define EVT_USB_DEVICE_FUNCTION 3 // USB in device
00078 #define EVT_USB_HOST_FUNCTION 4 // USB in host
00079 #define EVT_USB_SUSPEND 5 // USB suspend
00080 #define EVT_USB_WAKE_UP 6 // USB wake up
00081 #define EVT_USB_RESUME 7 // USB resume
00082 #define EVT_USB_RESET 8 // USB reset
00083 #define EVT_HOST_SOF 9 // Host start of frame sent
00084 #define EVT_HOST_HWUP 10 // Host wakeup detected
00085 #define EVT_HOST_DISCONNECTION 11 // The target device is disconnected
00086 #define EVT_HOST_REMOTE_WAKEUP 12 // Remote WakeUp has been received (Host)
00087
00088 #define EVT_OTG_HNP_ERROR 1 // The HNP has failed (A has not responded)
00089 #define EVT_OTG_HNP_SUCCESS 2 // The HNP has succedeed
00090 #define EVT_OTG_SRP_RECEIVED 3 // A-Device received a SRP
00091 #define EVT_OTG_DEV_UNSUPPORTED 4 // An error occured while the device was enumerated
00092 #define EVT_OTG_DEVICE_CONNECTED 5 // B-Device has been configured
00094
00095 #define USB_MODE_UNDEFINED 0x00
00096 #define USB_MODE_HOST 0x01
00097 #define USB_MODE_DEVICE 0x02
00098
00099
00100 #define VBUS_PULSE 1
00101 #define DATA_PULSE 0
00102
00103 #define BDEV_HNP_NB_RETRY 3 // number of times that a B-Device retries a HNP with a failure as a result
00104
00105
00106
00110 #define USER_RQST_SRP 0x01
00111 #define USER_RQST_SUSPEND 0x02
00112 #define USER_RQST_VBUS 0x04 // Vbus TOGGLE
00113 #define USER_RQST_HNP 0x08
00114 #define USER_RQST_RESUME 0x10
00115 #define USER_RQST_RESET 0x20
00116 #define USER_RQST_DISCONNECT 0x40
00117
00118
00119 #define Is_user_requested_srp() (((otg_user_request&USER_RQST_SRP) != 0) ? TRUE : FALSE)
00120 #define Set_user_request_srp() (otg_user_request |= USER_RQST_SRP)
00121 #define Ack_user_request_srp() (otg_user_request &= ~USER_RQST_SRP)
00122
00123
00124 #define Is_user_requested_suspend() (((otg_user_request&USER_RQST_SUSPEND) != 0) ? TRUE : FALSE)
00125 #define Set_user_request_suspend() (otg_user_request |= USER_RQST_SUSPEND)
00126 #define Ack_user_request_suspend() (otg_user_request &= ~USER_RQST_SUSPEND)
00127
00128
00129 #define Is_user_requested_vbus() (((otg_user_request&USER_RQST_VBUS) != 0) ? TRUE : FALSE)
00130 #define Set_user_request_vbus() (otg_user_request |= USER_RQST_VBUS)
00131 #define Ack_user_request_vbus() (otg_user_request &= ~USER_RQST_VBUS)
00132
00133
00134 #define Is_user_requested_hnp() (((otg_user_request&USER_RQST_HNP) != 0) ? TRUE : FALSE)
00135 #define Set_user_request_hnp() (otg_user_request |= USER_RQST_HNP)
00136 #define Ack_user_request_hnp() (otg_user_request &= ~USER_RQST_HNP)
00137
00138
00139 #define Is_user_requested_disc() (((otg_user_request&USER_RQST_DISCONNECT) != 0) ? TRUE : FALSE)
00140 #define Set_user_request_disc() (otg_user_request |= USER_RQST_DISCONNECT)
00141 #define Ack_user_request_disc() (otg_user_request &= ~USER_RQST_DISCONNECT)
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156 #define Clear_all_user_request() (otg_user_request = 0)
00157
00158
00169 #define Otg_timer_init() (Timer16_select(OTG_USE_TIMER), Timer16_set_clock(TIMER16_CLKIO_BY_256), \
00170 Timer16_set_mode_output_a(TIMER16_COMP_MODE_NORMAL), \
00171 Timer16_set_waveform_mode(TIMER16_WGM_CTC_OCR), \
00172 Timer16_set_compare_a(62), Timer16_set_counter(0x0000), \
00173 Timer16_clear_compare_a_it(), Timer16_compare_a_it_enable())
00174
00175
00176
00177 extern volatile U16 g_usb_event;
00178 extern U8 g_usb_mode;
00179 extern U8 remote_wakeup_feature;
00180
00194 void usb_task_init (void);
00195
00206 void usb_task (void);
00207
00208 extern volatile U8 private_sof_counter;
00209
00210
00218 extern volatile U8 otg_features_supported;
00219 extern U8 otg_user_request;
00220
00221 extern volatile U16 g_otg_event;
00222
00223 #if (OTG_VBUS_AUTO_AFTER_A_PLUG_INSERTION == ENABLED)
00224 extern U8 id_changed_to_host_event;
00225 #endif
00226
00227 extern void otg_not_supported_device(void);
00228
00229 #if (USB_OTG_FEATURE == ENABLED)
00237 #ifndef OTG_COMPLIANCE_TRICKS
00238 #define OTG_COMPLIANCE_TRICKS DISABLED
00239 #endif
00240
00247 #ifndef OTG_VBUS_AUTO_AFTER_A_PLUG_INSERTION
00248 #define OTG_VBUS_AUTO_AFTER_A_PLUG_INSERTION DISABLED
00249 #endif
00250
00255 #ifndef OTG_B_DEVICE_AUTORUN_HNP_IF_REQUIRED
00256 #define OTG_B_DEVICE_AUTORUN_HNP_IF_REQUIRED ENABLED
00257 #endif
00258
00262 #ifndef OTG_RESET_LENGTH
00263 #define OTG_RESET_LENGTH 1
00264 #endif
00265 #endif
00266
00267
00271
00272 #define MSG_DISPLAY_NODELAY 0xFFFF
00273 #define OTG_TEMPO_1SEC 0x01F4 // 500 (x2ms)
00274 #define OTG_TEMPO_2SEC 0x03E8 // 1000
00275 #define OTG_TEMPO_3SEC 0x05DC // 1500
00276 #define OTG_TEMPO_4SEC 0x07D0 // 2000
00277 #define OTR_TEMPO_5SEC 0x09C4 // 2500
00278
00279
00280 #define OTGMSG_SRP_STARTED 1 // Event
00281 #define OTGMSG_SRP_A_NO_RESP 2 // FAILURE msg
00282 #define OTGMSG_A_RESPONDED 3 // Event
00283 #define OTGMSG_CONNECTED_TO_A 4 // Event
00284 #define OTGMSG_UNSUPPORTED 5 // FAILURE msg
00285 #define OTGMSG_UNSUPPORTED_HUB 6 // FAILURE msg
00286 #define OTGMSG_SRP_RECEIVED 7 // Event
00287 #define OTGMSG_DEVICE_NO_RESP 8 // FAILURE msg
00288 #define OTGMSG_VBUS_SURCHARGE 9 // Event
00289
00290
00291 #define OTGSTR_SRP_STARTED "SRP Initiated " // Event
00292 #define OTGSTR_SRP_A_NO_RESP "A-Dev No Response " // FAILURE
00293 #define OTGSTR_A_RESPONDED "A-Device Responded" // Event
00294 #define OTGSTR_CONNECTED_TO_A "Connected to A-Dev" // Event
00295 #define OTGSTR_UNSUPPORTED "Unsupported Device" // FAILURE
00296 #define OTGSTR_UNSUPPORTED_HUB "Hub Unsuppported " // FAILURE
00297 #define OTGSTR_SRP_RECEIVED "SRP Received " // Event
00298 #define OTGSTR_DEVICE_NO_RESP "Device No Response" // FAILURE
00299 #define OTGSTR_VBUS_SURCHARGE "VBUS OverCurrent !" // Event
00300
00301 extern U16 otg_msg_event_delay;
00302 extern U16 otg_msg_failure_delay;
00303
00304
00305 #define OTGMSG_NONE 0 // no messages displayed
00306 #define OTGMSG_FAIL 1 // only failure messages displayed
00307 #define OTGMSG_ALL 2 // all messages displayed
00308
00309 #if (OTG_MESSAGING_OUTPUT == OTGMSG_ALL) // ALL MESSAGES
00310 extern void Otg_messaging_init(void);
00311 extern void Otg_output_event_msg(U8);
00312 extern void Otg_output_failure_msg(U8);
00313 extern void Otg_output_event_clear(void);
00314 extern void Otg_output_failure_clear(void);
00316 #define Otg_print_new_event_message(str,tm) (Otg_output_event_msg(str), otg_msg_event_delay = tm)
00317 #define Otg_clear_event_message() Otg_output_event_clear()
00318 #define Get_event_msg_delay() (otg_msg_event_delay)
00319 #define Decrement_event_msg_delay() (otg_msg_event_delay--)
00321 #define Otg_print_new_failure_message(str,tm) (Otg_output_failure_msg(str), otg_msg_failure_delay = tm)
00322 #define Otg_clear_failure_message() Otg_output_failure_clear()
00323 #define Get_failure_msg_delay() (otg_msg_failure_delay)
00324 #define Decrement_failure_msg_delay() (otg_msg_failure_delay--)
00325 #elif (OTG_MESSAGING_OUTPUT == OTGMSG_FAIL) // ONLY FAILURE MESSAGES (NEEDED FOR COMPLIANCE)
00326 extern void Otg_messaging_init(void);
00327 extern void Otg_output_failure_msg(U8);
00328 extern void Otg_output_failure_clear(void);
00329 #define Otg_print_new_event_message(str,tm)
00330 #define Otg_clear_event_message()
00331 #define Get_event_msg_delay()
00332 #define Decrement_event_msg_delay()
00333 #define Otg_print_new_failure_message(str,tm) (Otg_output_failure_msg(str), otg_msg_failure_delay = tm)
00334 #define Otg_clear_failure_message() Otg_output_failure_clear()
00335 #define Get_failure_msg_delay() (otg_msg_failure_delay)
00336 #define Decrement_failure_msg_delay() (otg_msg_failure_delay--)
00337 #else // NOT OTG COMPLIANT
00338 #define Otg_messaging_init()
00339 #define Otg_print_new_event_message(str,tm)
00340 #define Otg_clear_event_message()
00341 #define Get_event_msg_delay()
00342 #define Decrement_event_msg_delay()
00343 #define Otg_print_new_failure_message(str,tm)
00344 #define Otg_clear_failure_message()
00345 #define Get_failure_msg_delay()
00346 #define Decrement_failure_msg_delay()
00347 #endif
00349
00350 #endif
00351