/**********************************************************************
 *****  COMMON FILE FOR EVERY GILD-SYSTEM PROJECTS               *****
 *****  (WARNING: do not change main routines except user areas)  *****
 *****                                                            *****
 *****  Name: _core_def.h                                         *****
 *****  Ver.: 1.0                                                 *****
 *****  Date: 01/2011		                                      *****
 *****  Auth: Martin Mechacek		                              *****
 *****  Comp: ESTELAR s.r.o.									  *****
 *****                                                            *****
 *****  Copyright ESTELAR s.r.o. (c) 2010, all rights reserved    *****
 **********************************************************************/ 


#ifndef __CORE_DEF_H

#define __CORE_DEF_H



// HW definition for module GR-U01 ////////////////////////////////////

#ifdef CORE_GR_U01

  #include "def_GR-U01.h"

#endif

#define TYPE_IDENTIFICATOR_GR_U01		0x30

// rozsireni definice pro spodni byte - podtyp 
#define TYPE_MODIFICATION_NONE			0x00	// zakladni provedení 2012
#define TYPE_MODIFICATION_MODBUS 		0x01	// úprava pro připojení MODBUS
#define TYPE_MODIFICATION_HW4 			0x02 	// provedení HW verze 4 (2015)



// HW definition for sub-RS485 on main unit GL-C700 ///////////////////

#ifdef CORE_GL_C700

  #include "def_GL-C700.h"

#endif

#define TYPE_IDENTIFICATOR_GL_C700		0x48



// HW definition for module DH485  ////////////////////////////////////

#ifdef CORE_DH485

  #include "def_DH485.h"

#endif

#define TYPE_IDENTIFICATOR_GR_DH		0x0B		



#ifdef CORE_AL20

  #include "def_al20.h"

// v pojektu pridat definic prekladu: __CORE_CPU_ATMEL
  
#endif

#define TYPE_IDENTIFICATOR_GL_AL20		0x09		
#define TYPE_IDENTIFICATOR_GL_SL20		0x38



// **************************************************
// HW definition for module EDK READER  
// **************************************************
#if defined CORE_EDK
  #include "def_EDK4.h"
#endif

#if defined CORE_POW
  #include "def_POW.h"
#endif

// HW definition for module LOG4	  ////////////////////////////////////
#if defined CORE_LOG
  #include "def_LOG4.h"
#endif


#define TYPE_IDENTIFICATOR_GL_EDK3		0x50

#define TYPE_IDENTIFICATOR_GL_EDK4		0x40

#define TYPE_IDENTIFICATOR_GL_EDK4_2	0x60


// DEFINICE NOVEHO TYPU - ERIK VANCO
#define TYPE_IDENTIFICATOR_GL_EXT8		0x99


// **************************************************
// HW definition for module POW12-3   
// **************************************************
#define TYPE_IDENTIFICATOR_GL_POW		0x10 

// varianty zdroju POW
#define TYPE_MODIFICATION_12_3			0x01
#define TYPE_MODIFICATION_12_5			0x02
#define TYPE_MODIFICATION_12_7			0x04
#define TYPE_MODIFICATION_24			0x80


// HW definition for module GR-DR1  ////////////////////////////////////

#ifdef CORE_GR_DR1

  #include "def_GR-DR1.h"

#endif

#define TYPE_IDENTIFICATOR_GR_DR1		0x58	

//	převodník GR-DR1 (nahrazuje GR-DH1)
//	specifikace (spodní byte):	0x00 – základní provedení 2016


//////////////////////////////////////////////////////////////////////////////////////////////////////////////

// rozliseni jestli se adresuje vstup nebo vystup

// platne ve spodnim byte adresy (ADDR_IO)

#define ADDR_INPUT				0x00

#define ADDR_OUTPUT				0x80

#define ADDR_ADDINP				0x40		// rozsirujici vstupy na jednotce samotne





//////////////////////////////////////////////////////////////////////////////////////////////////////////////

// define of hw execute function

// bity 0-3 = ovladani vstupem nebo vystupem (kartou), pokud je adresovan vystup musi by v ovladaci adrese nastaven nejvyssi bit (ADDR_OUTPUT)

// bity 4-5 = casova funkce - odpocet casu

// bit  6 - zaznam je platny pro kartu

// bit  7 - zpusob rekce na zmeny





// funkce se nacitaji z eeprom do tabulky ConnectTable jako funkce (druha cast)

#define HWX_BASEFUNC_MASK			0x0f		// bitova maska pro pristup

#define HWX_NO_EVENT				0x00

#define HWX_ON_FROM_IO				0x01		// vzdy zapne vystup definovanou adresou ktera zmenila stav dle HWX_STATE_ (vstup i vystupy)

#define HWX_OFF_FROM_IO				0x02		// vzdy vypne vystup definovanou adresou ktera zmenila stav dle HWX_STATE_ (vstup i vystupy)

#define HWX_FLIP_FROM_IO			0x03		// prepne (zmeni stav) vystupu definovanou adresou ktera zmenila stav dle HWX_STATE_ (vstup i vystupy)

#define HWX_SET_VALUE				0x04		// nastavi vystupni hodnotu dle parametru funkce, pro AD

#define HWX_INC_VALUE				0x05		// zvysi vystupni hodnotu o krok dle parametru funkce, pro AD

#define HWX_DEC_VALUE				0x06		// snizi vystupni hodnotu o krok dle parametru funkce, pro AD

#define HWX_COPY_FROM_IO			0x07		// sleduje stav jineho vstupu nebo vystupu


// funkce >= HWX_PROP_OFS se nacitaji do tabulky ConnectTable jako vlastnosti (prvni cast)

// pouziva se pri cteni ve funkci HwxSciMessage pro potrebu knvertovat casove hodnoty ktere jsou v ConnectTable ulozeny jinak nez v EEPROM

// pri nacitani z EEPROM je to pokud je ADDR_IO==0 

#define HWX_PROP_OFS				0x0A		// od teto hodnoty se nacita jako vlastnost

#define HWX_ON_FROM_TIME			0x0A		// vzdy zapne vystup v dany cas ulozeny v poli DATA, den v tydnu je ulozen v parametru jako bitova maska

#define HWX_OFF_FROM_TIME			0x0B		// vzdy vypne vystup v dany cas ulozeny v poli DATA, den v tydnu je ulozen v parametru jako bitova maska

#define HWX_FLIP_FROM_TIME			0x0C		// prepne (zmeni stav) v dany cas ulozeny v poli DATA, den v tydnu je ulozen v parametru jako bitova maska

#define HWX_ON_EVERY_TIME			0x0D		// zapne vystup pokazde po uplynuti casu 

// pri kontrole vProcessTimerOutputs by se pri zapnuti zapsal aktualni cas do vyssich 2 bytu a kontroloval by se az nastaven rozdil > pozadavek ve spodnich 32 bytech

// fungovalo by to na interval max 12hod, ovsem co s presahujicim bitem realneho casu pri ukladani do hornich 2 bytu, muselo by to byt bez sekund
// muze byt i se sekundama pokud se bude to bude max 12 hod. 
// toto mozna supluje odlozene zapnuti ktere se aktivuje vypnutim - promyslet jestli to ma smysl

// promyslet jestli zapisovat a uchovavat cas nebo vteriny
// a taky jak a kdy se bude zapisovat referencni cas ?

//#define HWX_ON_FROM_DATE			0x0E		// bude probihat od urciteho datumu dokud to neprebije dalsi podobny zaznam ??





#define HWX_STATE_MASK				0x80		// bitova maska pro pristup k parametru

#define HWX_STATE_GO_ON				0x00		// zmena na IO portech na zapnuto/tlacitko stisknuto/priblizeni karty

#define HWX_STATE_GO_OFF			0x80		// zmena na IO portech na vypnuto/tlacitko uvolneno/oddaleni karty


#define HWX_CARD_READER				0x40		// zaznam pro obsluhu karty

#define HWX_STATE_HOLD				0x30		// zaznam pro dlouhy stisk


// funkce DELAY je mozno scitat s jinymi funkcemi a dosahnou tak napr zpozdeneho vypnuti po zapnuti vstupem HWX_ON_FROM_IO | HWX_OFF_WITH_DELAY

// hodnoty kodu delay se nesmi bitove prekryvat s kody funkci se kterymi s budou scitat !!!

// pokud se kombinuje se zakladnimi funkcemi plati pro casovani hodnota v parametru funkce

// pri pouziti samostatne se prebira hodnota z tabulky

// opakovana aktivace funkce DELAY vzdy znovu zahaji odpocet od zacatku

// odpocet se rusi jakoukoliv neDELAY funkci

#define HWX_DELAY_MASK				0x30

#define HWX_ON_WITH_DELAY			0x10		// odlozene zapnuti - zapne az po uplynuti casu 

#define HWX_OFF_WITH_DELAY			0x20		// odlozene vypnuti - vypne az po uplynuti casu

#define HWX_FLIP_WITH_DELAY			0x30		// prepne (zmeni stav) po uplynuti casu

// 



/*

reakce na cas muze byt dalsi funkce HWX_ON_FROM_...

ale v parametru musi byt pro ktere dny plati, takze uz nepujde s nicim kombinovat ??

*/



// domyslet maskovani casovych funkci pres RTC jestli bude treba maskovat

//definice pro RTC vlastnosti vystupu



//pro ad/da moduly definovat vlastnosti limitu

//napr> udalost kdy hodnota je mensi nebo rovno nez parametr 

//	  udalost kdy hodnota je vetsi nebo rovno nez parametr 

// o co se jedna je rozliseno adresou a novou hodnotou v dalsich parametrech zpravy









#endif 		// __CORE_DEF_H

