#ifndef USB_HARDWARE_PROFILE_H
#define USB_HARDWARE_PROFILE_H

#if 0
#include "config.h"
//#define CLOCK_FREQ 48000000
//#define BAUDCLOCK_FREQ 12000000 // (48000000 /4) required for baud rate calculations
//#define UART_BAUD_setup(x)  SPBRG = x & 0xFFu; SPBRGH = (x >> 8) & 0xFFu
//#define CDC_FLUSH_MS 4 // how many ms timeout before cdc in to host is sent

#define USB_VID (0x4d8U)
#define USB_PID (0x000aU)  // Microchip CDC  
#define USB_DEV 0x0002U

#define USB_NUM_CONFIGURATIONS          1u
#define USB_NUM_INTERFACES              2u
#define USB_NUM_ENDPOINTS               3u


#define MAX_EPNUM_USED                  2u

#define USB_BUS_POWERED 1
#define USB_INTERNAL_TRANSCIEVER 1
#define USB_INTERNAL_PULLUPS 1
#define USB_INTERNAL_VREG 1
#define USB_FULL_SPEED_DEVICE 1

/* PingPong Buffer Mode
 * Valid values
 * 0 - No PingPong Buffers
 * 1 - PingPong on EP0
 * 2 - PingPong on all EP
 * 3 - PingPong on all except EP0
 */
#define USB_PP_BUF_MODE 0
#define USB_EP0_BUFFER_SIZE 8u
#define CDC_NOTICE_BUFFER_SIZE 10u

/* Low Power Request
 * Optional user supplied subroutine to set the circuit
 * into low power mode during usb suspend.
 * Probably needed when bus powered as only 2.5mA should
 * be drawn from bus i suspend mode */
//#define usb_low_power_request() Nop()

#endif

/*Choose your hardware configuration
*
*  Defaults are:
*	PIC18F2550 - PiedUsb
*/
#define PIEDUSB

#ifdef PIEDUSB
	#define __18F2550

	#define CDC_BUFFER_SIZE 64u
	
	#define CLOCK_FREQ 48000000
	#define BAUDCLOCK_FREQ 12000000 // (48000000 /4) required for baud rate calculations
	#define UART_BAUD_setup(x) // SPBRG = x & 0xFFu; SPBRGH = (x >> 8) & 0xFFu
	#define CDC_FLUSH_MS 4 // how many ms timeout before cdc in to host is sent
	
	/*// LED A0 (2)
	#define LED_LAT  LATA
	#define LED_TRIS TRISA
	#define LED_PIN  0b1
	
	#define LedOff()  LED_LAT &=(~LED_PIN)  //JTR TODO uncomment
	#define LedOn() LED_LAT|=LED_PIN //JTR TODO uncomment
	#define LedToggle() LED_LAT ^=LED_PIN*/
	#define USB_INTERRUPTS //use interrupts instead of polling

	/** L E D ***********************************************************/
	/* On UBW, LED1 = RC0, LED2 = RC1, SW = RC2		 					*/

	#define mInitAllLEDs()      LATC &= 0xFC; TRISC &= 0xFC;

	#define mLED_1              LATCbits.LATC0
	#define mLED_2              LATCbits.LATC1

	#define mLED_1_On()         mLED_1 = 1;
	#define mLED_2_On()         mLED_2 = 1;

	#define mLED_1_Off()        mLED_1 = 0;
	#define mLED_2_Off()        mLED_2 = 0;

	#define mLED_1_Toggle()     mLED_1 = !mLED_1;
	#define mLED_2_Toggle()     mLED_2 = !mLED_2;

	/** S W I T C H *****************************************************/
	#define mInitSwitch()		TRISCbits.TRISC2 = 1;
	#define UserSW				PORTCbits.RC2

	#define mLED_Both_Off()     {mLED_1_Off(); mLED_2_Off();}
	#define mLED_Both_On()      {mLED_1_On(); mLED_2_On();}
	#define mLED_Only_1_On()    {mLED_1_On(); mLED_2_Off();}
	#define mLED_Only_2_On()    {mLED_1_Off(); mLED_2_On();}

	/** SERIAL DRIVER *****************************************************/
	#ifdef OldPied // 0 //oldPiedUsb=1 newone(seeed one)=0
	#define	mSerDrv	LATBbits.LATB0
	#define	mInitSerDrv()	{TRISBbits.TRISB0=0;}
	#define	mSerDrv_On()	{mSerDrv=1;}
	#define	mSerDrv_Off()	{mSerDrv=0;}
	#define	mSerDrv_isOn()	(mSerDrv!=0)
	#else
	#define	mSerDrv	LATCbits.LATC0
	#define	mInitSerDrv()	{TRISCbits.TRISC0=0;}
	#define	mSerDrv_On()	{mSerDrv=0;}
	#define	mSerDrv_Off()	{mSerDrv=1;}
	#define	mSerDrv_isOn()	(mSerDrv==0)
	#endif

	
#endif //end processor setup


#endif
