/*
   Copyright (c) 2011, Peter Barrett
   Copyright (c) 2015, Arduino LLC

   Permission to use, copy, modify, and/or distribute this software for
   any purpose with or without fee is hereby granted, provided that the
   above copyright notice and this permission notice appear in all copies.

   THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
   WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
   WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR
   BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES
   OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
   WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
   ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
   SOFTWARE.
 */

#define PLUGGABLE_USB_ENABLED

#if defined(EPRST6)
#define USB_ENDPOINTS 7 // AtMegaxxU4
#else
#define USB_ENDPOINTS 5 // AtMegaxxU2
#endif

#define ISERIAL_MAX_LEN     20

#define CDC_INTERFACE_COUNT	2
#define CDC_ENPOINT_COUNT	3

// kai:begin
#undef CDC_ACM_INTERFACE
#undef CDC_DATA_INTERFACE
#undef CDC_FIRST_ENDPOINT
#undef CDC_ENDPOINT_ACM
#undef CDC_ENDPOINT_OUT
#undef CDC_ENDPOINT_IN
#undef CDC_RX
#undef CDC_TX

#define CDC_ACM_INTERFACE1	0	// CDC ACM
#define CDC_DATA_INTERFACE1	1	// CDC Data
#define CDC_FIRST_ENDPOINT1	1
#define CDC_ENDPOINT_ACM1	(CDC_FIRST_ENDPOINT1)							// CDC First
#define CDC_ENDPOINT_OUT1	(CDC_FIRST_ENDPOINT1+1)
#define CDC_ENDPOINT_IN1		(CDC_FIRST_ENDPOINT1+2)

#define CDC_ACM_INTERFACE2  2 // CDC ACM
#define CDC_DATA_INTERFACE2  3 // CDC Data
#define CDC_FIRST_ENDPOINT2  4 
#define CDC_ENDPOINT_ACM2  (CDC_FIRST_ENDPOINT2)              // CDC First
#define CDC_ENDPOINT_OUT2  (CDC_FIRST_ENDPOINT2+1)
#define CDC_ENDPOINT_IN2  (CDC_FIRST_ENDPOINT2+2)

// only one of both interfaces is functional:
#define ACTIVE_INTERFACE 1

#if ACTIVE_INTERFACE == 1
# define CDC_CLASS_INTERFACE CDC_ACM_INTERFACE1
# define CDC_RX              CDC_ENDPOINT_OUT1
# define CDC_TX              CDC_ENDPOINT_IN1
#else
# define CDC_CLASS_INTERFACE CDC_ACM_INTERFACE2
# define CDC_RX              CDC_ENDPOINT_OUT2
# define CDC_TX              CDC_ENDPOINT_IN2
#endif

#undef USB_VID
#define USB_VID 0x2342
// kai:end

#define INTERFACE_COUNT    (MSC_INTERFACE + MSC_INTERFACE_COUNT)

#define IMANUFACTURER   1
#define IPRODUCT        2
#define ISERIAL         3
