// --- [ global.h ] -----------------------------------------------------------
//       30.11.09
//       tab = 3
//
// ----------------------------------------------------------------------------

#ifndef EXTERN
#define EXTERN extern
#endif

#define M168									// Register für den ATMEGA168
//#define M8
#define WATCHDOG
#define LOG_RS232								// Log-Datei auf RS232 ausgeben

#define LCD										// ohne LCD Ausgaben ist der Code 1250 Byte kürzer
#define DEBUG									// lässt den Fehlercounter im LCD stehen, sofern > 0
													// und zeigt auch Ankündigungsbits des DCF-Signals an
#define SUN_INCLUDE							// Sonnenstände berechnen
#define DAY_LIGHT								// Setzt/Löscht PD.7, wenn Sonnenaufgang/Sonnenuntergang erreicht
#define TWI_ADR_ZEIT_ZEICHEN	10			// Slave-Adr, an die Zeitzeichen gesendet werden
#define ZEIT_ZEICHEN							// sendet alle 15 Minuten ein Signal an einen Slave, der Töne erzeugt
#define SHOW_ERRORS							// Zeigt die über einen Tag kummulierte Anzahl von Fehlern
													// sowie die DCF-Zusatzsbits (sofern ausser Z1/Z2 Bits gesetzt waren)
#define TWI_ADR_CHANGE						// Erlaubt, die TWI-Adresse von aussen zu ändern und
													// dauerhaft im eeprom zu speichern -> dann MUSS EEPROM_START > 1 sein !
#define ALARMPORT		PORTD					// frei: PORTD.0.1.4.5.6.7
#define DAYLIGHT_PIN PD7					// benutzt wird zur Zeit nur PIN 7 !
#define EEPROM_START	8						// die ersten 8 Byte im Eeprom sind für die TWI-Adresse freigehalten
#define ALARMDEFS		63						// 63!! Anzahl der definierten Schaltarrays (mehr passt nicht ins eeprom)
													// es wird auch noch die TWI-Adresse im Eeprom gespeichert !!
#define ALARMPINS		63 + 1				// Anzahl der adressierbaren Schalter (8 * 8 + 1 am mc)
													// die Zählung beginnt mit 0 .. 63, 64
#define TIMEBYTES		8						// Anzahl der Bytes in jedem Schalt/timearray
													// Index auf das Array time[x][8]
#define CLK				0						// die für die Anzeige massgebliche Zeit der Uhr (+ 1Byte Sekunde)
#define DCF				1						// die Zeit des DCF-Signals
#define UTC   			2						// die Zeit für Längengrad 0, cet - 1h, cest - 2h
#define SUN				3						// Sonnendaten: Elevation, Azimuth, Uhrzeit von Sonnenauf-/Untergang
//#define BITS			4						// hier ist eine Kopie des DCF-Signals der aktuellen Minute abgelegt
#define BK2				4						// eine Kopie der vorletzten Minute
#define CMP				5						// die um 1 Minute incremenierte Zeit für Plausibilätsprüfung
#define BAK				6						// eine Kopie der letzten Minute für Plausibilitätsprüfung
#define BK1				6
#define CLK_ARRAYS	7						// die Anzahl der Arrays von CLK bis BAK

#define LAST_STATE	0						// Index für schalter / letzte Schalterstellung
#define NEW_STATE		1						// Index für schalter / neue   Schalterstellung

#define TWI1 			64						// die TWI-Adresse für die Schalter 0  - 7
#define TWI2 			66						// die TWI-Adresse für die Schalter 8  - 15
#define TWI3 			68						// die TWI-Adresse für die Schalter 16 - 23
#define TWI4 			70						// die TWI-Adresse für die Schalter 24 - 31
#define TWI5 			72						// die TWI-Adresse für die Schalter 32 - 39
#define TWI6 			74						// die TWI-Adresse für die Schalter 40 - 47
#define TWI7 			76						// die TWI-Adresse für die Schalter 48 - 55
#define TWI8 			78						// die TWI-Adresse für die Schalter 56 - 63
													// Schalter > 63 sind freie PINs am Controller

EXTERN uint8_t time[ALARMDEFS + CLK_ARRAYS][TIMEBYTES];// Anzahl der Schaltdefinitionen + aktuelle Zeit (7 Arrays)
EXTERN uint16_t day_of_year(uint8_t *time);
EXTERN volatile uint8_t TWI_slave_mode;
EXTERN uint8_t twi_msg[5];					// zum Vorbereiten von TWI-Übertragungen
EXTERN char msg[4];							// für die Umwandlung von Zahlen in Ziffernfolge


#define MINUTE			0						// Index für alle Zeitarrays
#define STUNDE 		1
#define DOW				2
#define TAG				3						// Wochentag (Bit.0 ... Bit.6) + Sommerzeit !! (= Bit.7)
#define MONAT			4
#define JAHR   		5
													// jeweils das 7./8. Element in den Arrays:
#define SEKUNDE		6						// time[CLK][x] - die aktuelle Sekunde
#define ZBITS			6						// time[DCF][x] - die Zusatzbits des DCF-Signal
#define SWITCH       6						// time[schalter][x] - Schalternr
#define MODUS			7						// time[schalter][x] - der Schaltmodus in den Schaltdefinitionen

#define TRUE			1
#define FALSE			0

#define SYNCH_TIME	29						// Die Anzahl der Minuten, die die Uhr ohne Synchronisation mit dem DCF-Signal
													// nur nach dem XTL-Takt läuft

// --- [ eof ] ----------------------------------------------------------------