/*    mija 2008 
      demo for LCD NOKIA5110 and MCP9800 and GPS modul

	  CPU ATMEGA644P
      fcpu = 1MHz

	  !! define PIN,PORT,DDR for IOpin !!
*/

#include <stdint.h>

#define MAX_RX_BUF				150
#define MAX_NMEA_LOAD			100

// PIN TL1
#define TL1 		PB4		// input 
 #define TL1_DDR	DDRB
 #define TL1_PORT	PORTB
 #define TL1_PIN	PINB

// PIN TL2
#define TL2 		PB2		// input //int2
 #define TL2_DDR	DDRB
 #define TL2_PORT	PORTB
 #define TL2_PIN	PINB

// PIN TL3
#define TL3 		PB3		// input  
 #define TL3_DDR	DDRB
 #define TL3_PORT	PORTB
 #define TL3_PIN	PINB

// PIN GPS
#define GPS 		PD4		
 #define GPS_DDR	DDRD
 #define GPS_PORT	PORTD

// UART SW
#define USB			PD5		// input 
 #define USB_DDR	DDRD
 #define USB_PORT	PORTD
 #define USB_PIN	PIND

// i2C SW
#define SDA			PC1
 #define SDA_PORT	PORTC
 #define SDA_DDR	DDRC
 #define SDA_PIN	PINC

#define SCL			PC0
 #define SCL_PORT	PORTC
 #define SCL_DDR	DDRC

// LED
#define LED   		PD7
 #define LED_PORT	PORTD
 #define LED_DDR	DDRD

// Vref
#define REF			PA0
 #define REF_PORT	PORTA
 #define REF_DDR	DDRA

// interni
#define TL1_INIT	TL1_DDR &= ~(_BV(TL1))
#define TL1_INPUT	(TL1_PIN & _BV(TL1))
#define TL1_PULLUP	TL1_PORT |= _BV(TL1)

#define TL2_INIT	TL2_DDR &= ~(_BV(TL2))
#define TL2_INPUT	(TL2_PIN & _BV(TL2))
#define TL2_PULLUP	TL2_PORT |= _BV(TL2)

#define TL3_INIT	TL3_DDR &= ~(_BV(TL3))
#define TL3_INPUT	(TL3_PIN & _BV(TL3))
#define TL3_PULLUP	TL3_PORT |= _BV(TL3)

#define GPS_OFF		GPS_PORT |= _BV(GPS)
#define GPS_ON		GPS_PORT &= (~(_BV(GPS)))
#define GPS_INIT	GPS_DDR |= _BV(GPS)
#define GPS_INPUT   (!(GPS_PORT & _BV(GPS)))

#define USB_INIT	USB_DDR &= ~(_BV(USB))
#define USB_INPUT	(USB_PIN & _BV(USB))
#define USB_PULLUP	USB_PORT |= _BV(USB)

#define SCL_INIT	SCL_DDR |= _BV(SCL)
#define SCL_L		SCL_PORT &= ~(_BV(SCL))
#define SCL_H		SCL_PORT |= _BV(SCL)

#define SDA_OUT		SDA_DDR |= _BV(SDA)
#define SDA_L		SDA_PORT &= ~(_BV(SDA))
#define SDA_H		SDA_PORT |= _BV(SDA)
#define SDA_IN		SDA_DDR &= ~(_BV(SDA))
#define SDA_INPUT	(SDA_PIN & _BV(SDA))
#define SDA_FLOAT	SDA_IN;SDA_L

#define LED_ON		LED_PORT |= _BV(LED)
#define LED_OFF		LED_PORT &= (~(_BV(LED)))
#define LED_INIT	LED_DDR |= _BV(LED)
#define LED_INPUT   (LED_PORT & _BV(LED))

#define REF_ON		REF_PORT |= _BV(REF)
#define REF_OFF		REF_PORT &= (~(_BV(REF)))
#define REF_INIT	REF_DDR |= _BV(REF)

#define ADC_ON		ADCSRA |= _BV(ADEN)
#define ADC_OFF		ADCSRA &= ~(_BV(ADEN))

#define USART_PC_ON	UCSR1B = _BV(RXCIE1)  | _BV(RXEN1) | _BV(TXEN1)
#define USART_PC_OFF		UCSR1B = 0

#define KEY1		0
#define KEY2		1
#define KEY3		2

#define KEY1_LONG  	1
#define KEY2_LONG	2
#define KEY3_LONG	3
#define KEY1_SHORT	4
#define KEY2_SHORT	5
#define KEY3_SHORT	6

#define ID_OFF		100
#define ID_START	101
#define ID_SETUP	102

#ifndef TYPEDEF_OK
	//typedef struct{uint8_t a; uint8_t b}GPS_SEND;
	typedef struct
	{
		uint8_t sec;
		uint8_t min;
		uint8_t hour;
	}TIME_T;

	typedef struct
	{
		uint8_t day;
		uint8_t mon;
		uint8_t year;
	}DATE_T;

typedef struct
{
	double lat;
	double lon;
	double alt;
	double speed;
	double course;
	int16_t temperature;
	TIME_T time;
	DATE_T date;
}POINT_T;

typedef struct
{
	uint8_t id;
	uint8_t elevation;
	uint16_t azimut;
	uint8_t SNR;
}SATELITE_DETAIL;

typedef struct
{
	//GGA
	uint8_t fix_position;
	uint8_t satelites_used;
	double altitude;
	double geoid;
	uint16_t age_diff_corr;
	uint16_t diff_id;
	//GSA
	char mode1;
	char mode2;
	uint8_t satelite_id[12];
	double PDOP;
	double HDOP;
	double VDOP;
	//GSV
	uint8_t gsv_num_msg;
	uint8_t gsv_msg; 
	uint8_t gsv_satelites_view;
	SATELITE_DETAIL satelit_detail[12];
	//RMC
	uint8_t second;
	uint8_t minute;
	uint8_t hour;
	uint8_t day;
	uint8_t month;
	uint8_t year;
	double latitude;
	double longitude;
	char ns_indicator;
	char we_indicator;
	char status;
	//VTG
	double course;
	double speed;
}DATA_GPS;

#endif

#define TYPEDEF_OK
