/*
 * packet_lib.h
 *
 * Definicia konstant a makier, struktur pre pracu s packetom 
 *
 * Created: 1.3.2012 16:41:39
 *  Author: JIRKO
 */ 


#ifndef PACKET_LIB_H_
#define PACKET_LIB_H_

//******* Definicia k packetom zariadenia ****************************
	#define PACKET_DATA_MAX_LENGHT			42
	#define PACKET_LENGHT_WITHAUT_DATA 		8			// dlzka packetubez dat
	#define MAX_PACKET_LENGHT				PACKET_DATA_MAX_LENGHT + PACKET_LENGHT_WITHAUT_DATA
	#define BROCAST_PACKET					0
	#define	LENGHT_OUTPUTS_DATA				8			// dlzka outputs dat
		
//****************   Definicia comandov v strukturrach  *********************************************** 	
	#define START_OF_PACKET					0x01
	// pre priate packety
	#define	C_SET_OUTPUTS_PACKET			0x21			// nastav vystupy na pozadovanu hodnotu ak je sign 0 tak sa nastavuju aktualne(manual)  ale je 1 tak z eeprom
	#define C_SEL_SETTINGS_PACKET			0x23			// nastav bunku eeprom na vystupy	// ak je 0 tak je to manual ak je 1 tak z eeprom ak je viac tak demo

	#define C_SET_ID_PACKET					0x1a			// nastav nove ID zariadenia id je v data
	#define C_SET_MASTER_ID_PACKET			0x19			// nastav nove master ID
	#define C_WISO_PACKET					0x10			// who is online moze bit brocast alebo s id
	
	// pre odosielane packety
	#define C_OK_PACKET						0x06			// odpoved OK data je sprava
	#define C_NACK_ERR_PACKET				0x15			// prikaz 0x15 NAK pre odpoved	kopiruje sa PN
	#define C_ERR_PACKET					0x07			// prikaz 0x07 BELL pre oznamenie generuje sa PN a caka sa na odpoved
															// pre err su data sprava
	//#define c_Im_online_ID_packet			0x11			// odozva ze som online data su sprava sign moje id
	#define C_SEND_DEVICE_SETTINGS			0x62			// odosle stav najskor aktual a potom eeprom
	#define C_MY_SETTINGS					0x63			// odosle stav najskor je nastavene a potom z eeprom
	
//****************   Definicia paketovych struktur  *********************************************** 

	// sablona struktury packetu 
	typedef struct{
		uint8_t	start_of_packet;			// znak zaciatok packetu
		uint8_t	dest_ID;					// moje alebo jeho
		uint8_t	sorce_ID;					// jeho alebo moje
		uint8_t lenght;						// dlzka packetu celkova dlzka paketu od dest_ID po crc 
		uint8_t	packet_number;				// cislo paketu		
		uint8_t	comand;						// prikaz
		uint8_t sign;						// priznak 
		uint8_t data[PACKET_DATA_MAX_LENGHT];					// data mozu mat rozu ndlzku
		uint8_t	crc;					// na konci je crc
	}t_packet;	
	
//****************   Definicie funkcii   ***********************************************
	uint8_t	my_ID(void);								// vracia hodnotu my_ID vicitanu z eeprom
	void	save_my_ID(uint8_t ID);						// uklada hodnotu my_ID do eeprom
	uint8_t	master_ID(void);							// vracia hodnotu master_ID vycitanu z eeprom
	void	save_master_ID(uint8_t ID);					// uklabam hodnotu mastr_ID do eeprom
	void	init_packet_lib(void);						// inicializacia kniznice packet_lib
	uint8_t	gen_packet_n(void);							// generuje PN pre toto zariadenie	
	void fill_out_packet(t_packet *out_packet, uint8_t dest_ID, uint8_t sorce_ID, uint8_t lenght, uint8_t packet_number, uint8_t comand, uint8_t sign); // naplnenie struktury

#endif /* PACKET_LIB_H_ */