/* ---------------------------------------------------------------------------- * ATMEL Microcontroller Software Support * ---------------------------------------------------------------------------- * Copyright (c) 2008, Atmel Corporation * * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the disclaimer below. * * Atmel's name may not be used to endorse or promote products derived from * this software without specific prior written permission. * * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * ---------------------------------------------------------------------------- */ //! @brief This file manages the USB task either device/host or both. //! //! The USB task selects the correct USB task (usb_device task or usb_host task //! to be executed depending on the current mode available. //! //! This module also contains the general USB interrupt subroutine. This subroutine is used //! to detect asynchronous USB events. //! //! Note: //! - The usb_task belongs to the scheduler, the usb_device_task and usb_host do not, they are called //! from the general usb_task //! - See conf_usb.h file for more details about the configuration of this module #ifndef _USB_TASK_H_ #define _USB_TASK_H_ #include //------------------------------------------------------------------------------ // Definitions //------------------------------------------------------------------------------ /// Definitions of B-Device states #define B_IDLE 0 //#define B_SRP_INIT 1 #define B_PERIPHERAL 2 //#define B_WAIT_ACON 3 #define B_HOST 4 #define B_END_HNP_SUSPEND 5 // OTG B-Device SRP protocole specific states or events //! Is the current session a result of a SRP ? //#define Start_session_with_srp() (otg_device_sessions |= 0x01) #define End_session_with_srp() (otg_device_sessions &= ~0x01) #define Is_session_started_with_srp() (((otg_device_sessions&0x01) != 0) ? TRUE : FALSE) //! Has a SRP been sent, and waiting for an answer //#define Srp_sent_and_waiting_answer() (otg_device_sessions |= 0x02) //#define Ack_srp_sent_and_answer() (otg_device_sessions &= ~0x02) #define Is_srp_sent_and_waiting_answer() (((otg_device_sessions&0x02) != 0) ? TRUE : FALSE) //! Is the Tb_Srp counter enabled ? Cleared by timer if Tb_Srp_Fail elapsed //! Tb_Srp_Fail must be between 5 and 6 sec. With an interrupt routine executed each 2ms, its value becomes 2500 (used:5.2sec) // 0x0A28 = 2600, 2600x2 = 5200 => 5s //#define TB_SRP_FAIL_MIN 0x0A28 //extern U16 otg_tb_srp_cpt; //#define Init_tb_srp_counter() (otg_tb_srp_cpt = 0) //#define Is_tb_srp_counter_overflow() ((otg_tb_srp_cpt > TB_SRP_FAIL_MIN) ? TRUE : FALSE) // usb_task USB task entry point module //! usb_software_evts USB software Events Management //! Macros to manage USB events detected under interrupt #define Usb_send_event(x) g_usb_event |= (1<