/* This file has been prepared for Doxygen automatic documentation generation.*/
/*! \file conf_usb.h **********************************************************
 *
 * \brief
 *      This file contains the possible external configuration of the USB.
 *
 * \addtogroup usbstick
 *
 * \author
 *      Atmel Corporation: http://www.atmel.com \n
 *      Support email: avr@atmel.com
 *
 ******************************************************************************/
/* 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 following disclaimer.
   * Redistributions in binary form must reproduce the above copyright
     notice, this list of conditions and the following disclaimer in
     the documentation and/or other materials provided with the
     distribution.
   * Neither the name of the copyright holders nor the names of
     contributors may be used to endorse or promote products derived
     from this software without specific prior written permission.

  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 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.
*/

#ifndef CONF_USB_H_
#define CONF_USB_H_



/**
   \ingroup usbstick
   \defgroup usbconf USB Configuration
   @{
*/


   // _________________ USB MODE CONFIGURATION ____________________________
   //! @ingroup usbconf
   //! @defgroup USB_op_mode USB operating modes configuration
   //! defines to enable device or host usb operating modes
   //! supported by the application
   //! @{

      //! @brief ENABLE to activate the host software library support
      //!
      //! Possible values ENABLE or DISABLE
      #define USB_HOST_FEATURE            DISABLED

      //! @brief ENABLE to activate the device software library support
      //!
      //! Possible values ENABLE or DISABLE
      #define USB_DEVICE_FEATURE          ENABLED

   //! @}

   // _________________ USB REGULATOR CONFIGURATION _______________________
   //! @ingroup usbconf
   //! @defgroup USB_reg_mode USB regulator configuration
   //! @{

   //! @brief Enable the internal regulator for USB pads
   //!
   //! When the application voltage is lower than 3.5V, to optimize power consumption
   //! the internal USB pads regulatr can be disabled.
#ifndef USE_USB_PADS_REGULATOR
   #define USE_USB_PADS_REGULATOR   ENABLE      // Possible values ENABLE or DISABLE
#endif
   //! @}

// _________________ DEVICE MODE CONFIGURATION __________________________

   //! @ingroup usbconf
   //! @defgroup USB_device_mode_cfg USB device operating mode configuration
   //!
   //! @{

/** USB RNDIS / Virtual com port setup **/

#ifndef CDC_ECM_USES_INTERRUPT_ENDPOINT
#define CDC_ECM_USES_INTERRUPT_ENDPOINT	0
#endif

#ifndef USB_ETH_EMULATE_WIFI
#define USB_ETH_EMULATE_WIFI	0
#endif

#define NB_ENDPOINTS        7  //!  number of endpoints in the application including control endpoint
#define VCP_RX_EP			0x06
#define VCP_TX_EP			0x05
#define VCP_INT_EP			0x04
#define TX_EP				0x01
#define RX_EP				0x02
#define INT_EP              0x03

/** USB Mass Storage Setup **/

#define NB_ENDPOINTS_MS     3 //!  number of endpoints in the application including control endpoint
#define MS_IN_EP            0x01
#define MS_OUT_EP           0x02

#define USB_LOW_SPEED_DEVICE DISABLE


#define Usb_unicode(a)			((U16)(a))

   //! @ingroup usbconf
   //! @defgroup device_cst_actions USB device custom actions
   //!
   //! @{
   // write here the action to associate to each USB event
   // be carefull not to waste time in order not disturbing the functions
#define Usb_sof_action()         /* sof_action(); */
#define Usb_wake_up_action()
#define Usb_resume_action()
#define Usb_suspend_action()     suspend_action();
#define Usb_reset_action()
#define Usb_vbus_on_action()
#define Usb_vbus_off_action()
#define Usb_set_configuration_action()


// write here the action to associate to each SCSI event
// be carefull not to waste time in order not disturbing the functions
#define Scsi_start_read_action()    Led1_on()
#define Scsi_stop_read_action()     Led1_off()
#define Scsi_start_write_action()   Led2_on()
#define Scsi_stop_write_action()    Led2_off()

   //! @}

extern void sof_action(void);
extern void suspend_action(void);
   //! @}


/** @}  */

#endif //CONF_USB_H_