/*******************************************************************************
*                                                                              *
* Copyright 2010 Rheinmetall Canada Inc.                                  	   *
*                                                                              *
* No part of this document may be reproduced, stored in                        *
* a retrieval system, or transmitted, in any form or by any means,             *
* electronic, mechanical, photocopying, recording, or otherwise,               *
* without the prior written permission of Rheinmetall Canada Inc.              *
*                                                                              *
*******************************************************************************/
/* ¤Revision:
000 20100616 HCAM,
	Original version.
	
                                                                                                                          
		  ,----..                                            ,----..                                                              
		 /   /   \                                          /   /   \    ,--,                                                     
		|   :     :   __  ,-.   ,---.                      |   :     : ,--.'|         ,---,                                       
		.   |  ;. / ,' ,'/ /|  '   ,'\   .--.--.           .   |  ;. / |  |,      ,-+-. /  |                                      
		.   ; /--`  '  | |' | /   /   | /  /    '          .   ; /--`  `--'_     ,--.'|'   |                                      
		;   | ;  __ |  |   ,'.   ; ,. :|  :  /`./          ;   | ;  __ ,' ,'|   |   |  ,"' |                                      
		|   : |.' .''  :  /  '   | |: :|  :  ;_            |   : |.' .''  | |   |   | /  | |                                      
		.   | '_.' :|  | '   '   | .; : \  \    `.         .   | '_.' :|  | :   |   | |  | |                                      
		'   ; : \  |;  : |   |   :    |  `----.   \        '   ; : \  |'  : |__ |   | |  |/                                       
		'   | '/  .'|  , ;    \   \  /  /  /`--'  /        '   | '/  .'|  | '.'||   | |--'                                        
		|   :    /   ---'      `----'  '--'.     /         |   :    /  ;  :    ;|   |/                                            
		 \   \ .'                        `--'---'           \   \ .'   |  ,   / '---'                                             
		  `---`                                              `---`      ---`-'                                                    

### YYYYMMDD Initial, Bug Identification
	Change description.
 */
 
 
 
 
 /****************************** NOTES ***************************************
-> Timers assignment <-
 
- Timer1 used by TCP Stack (tick.c) 
- Timer2 used by general timer module (timer.c) (see GP_TIMER_USE_TIMER_X definition below)
 - timer3 used by input capture to detect PWM
 - timer4 used by hall acquisition module (HallAcquisition.c)
 - timer5 used by FPGAInterface to time-base SPI the transfer to the FPGA
 
 
 -> Interrupt priority assignment <-
  
 Priority.SubPriority - Assignment
HIGHEST	
		7.3
		7.2
		7.1 
		7.0 
		6.3 
		6.2 
		6.1
		6.0 
		5.3 
		5.2 
		5.1
		5.0
		4.3 
		4.2 
		4.1 
		4.0
		3.3
		3.2
		3.1
		3.0 - Wifi chip IRQ (Ext INT 0)
		2.3 - TIMER2 (General purpose timer)
		2.2 
		2.1 - Ext Interrupt 1 (Led dimming knob)  NOT USED!!!
		1.0		
		1.3
		1.2
		1.1
		1.0
LOWEST
 
 *****************************************************************************/

#ifndef DEFINE_H
#define DEFINE_H

/* ************************************************************************** */
/* Includes */
#include <plib.h>

//#include "CUHelperFcns.h"
 
enum eWiFiState
{
    WIFI_MODULE_OFF_STATE = 0,
    WIFI_CONNECTED_STATE,
    WIFI_DISCONNECTED_STATE,
    WIFI_INIT_ERROR_STATE,
    WIFI_UNKNOWN_STATE
};

#define WIFI_MODULE_SPI_BAUDRATE 15000000

#define WIFI_CONNECT_TIMEOUT 10000 //The delay we allow the module to establish a connection.

/* ************************************************************************** */
/* Defines */

#define PIN_INPUT 1
#define PIN_OUTPUT 0
#define LED_ON 0
#define LED_OFF 1
#define false 0
#define true 1
#define MSB8(x)     ((x >> 8) & 0xFF)
#define LSB8(x)     (x & 0xFF)

#define RET_OK true
#define RET_ERROR false

#define bool unsigned int

#define PI 3.1415926536

//#define ENABLE_DEBUG_LOG
#ifdef ENABLE_DEBUG_LOG
	#include "util.h"
#endif

////#define USE_HALL_ACQ_SIMULATOR	//Use this switch for development to test hall acquisition traces
//#define USE_ENGINEERING_MODE	//Use this switch to disable speed, position and halls traces and traces buffer allocation (all traces !)
////#define USE_TRACE_SIMULATOR		//Use this switch to simulate trace data for development
////#define USE_SPI_DONGLE_SIMULATOR	//Use this switch if you use the CUMUX as a SPI dongle instead of the CS16IS74 dongle.
////#define USE_PMP_AUTOINCREMENT		//Use to speed-up AD2S data transfer
////#define USE_PWM_DETECTION			//Use PWM detection to enable/disable bridge
////#define USE_AUTO_BRIDGE_CONTROL  	//Execute drive bridge control
////#define FORCE_BRIDGE_ON
////#define DRIVE_BOARD_NOT_INSTALLED
//#define DISABLE_PRINT_FAULT
//#define SPI_FAST
////#define USE_DMA_WITH_PMP
////#define USE_RESOLVER_STATEMACHINE
////#define DISABLE_DRIVE_PARAM_MGMT 	// uncomment to avoid setting the drive at power-up
#define NO_EXTERNAL_UART

//Choose which timer to use for general purpose timer 
#define GP_TIMER_USE_TIMER_1


//#define POLL_UART1_RX
//#define POLL_UART2_RX


//#define NO_WIFI

//Define the com port assignations
//----------------------------
#define NETWORK_UART_PORT 	UART_1

#ifndef NO_WIFI
#define WIFI_MODULE_UART_PORT 	UART_2
#endif

//
//----------------------------
//Enable only one of those 3 options
//#define USE_BLOCKING_PRINTF
//#define USE_UART_PRINTF
#define USE_SYSLOG

#ifdef USE_UART_PRINTF 
#ifdef USE_SYSLOG
#error "USE_UART_PRINTF and USE_SYSLOG defined simultaneously"
#endif
#endif
//#error test

#ifdef USE_SYSLOG
#ifdef NO_WIFI
#undef USE_SYSLOG
#error "USE_SYSLOG defined with NO_WIFI"
#endif
#endif

#ifdef USE_UART_PRINTF
	#define PRINTF(n, a...)  printf(n, ## a)
#elif defined USE_SYSLOG
    #define PRINTF(n, a...)  printf(n, ## a)
#else
    #define PRINTF(n, a...)
#endif

#ifndef NO_WIFI
  //  #define USE_WIFI_PRINTF
#endif

    //#define USE_UART_PRINTF
//#else
//	
//	#define NO_EXTERNAL_UART
//#endif

//#define CONNECT_DEVICE_TO_NETWORK
//#define TERMINAL_USE_TELNET
//#define TERMINAL_USE_TCP_SERVER


/* ************************************************************************** */
/* Type definitions */


//----- STDINT.H TYPE DEFINITIONS -----
//(Valid for XC16 & XC32 microchip PIC compilers)
#ifndef uint8_t
typedef unsigned char uint8_t;
#endif

#ifndef int8_t
typedef signed char int8_t;
#endif

#ifndef uint16_t
typedef unsigned short uint16_t;
#endif

#ifndef int16_t
typedef signed short int16_t;
#endif

/*
#ifndef uint32_t
typedef unsigned long uint32_t;
#endif

#ifndef int32_t
typedef signed long int32_t;
#endif
*/

#ifndef uint64_t
typedef unsigned long long uint64_t;
#endif

#ifndef int64_t
typedef signed long long int64_t;
#endif





#endif
//EOF

