/**************************************************************************************
** AVR DCF77 Clock
*/
#ifndef _CLOCK_H
#define _CLOCK_H

#include <avr/io.h>
#include <avr/interrupt.h>

// Definitionen in der Makefile !!!!!!!!!!!!
// DCF FLASH ein oder aus
// #define DCF_FLASH
// DCF_RECEIVER  Receiver vorhanden
// #define DCF_RECEIVER

                             // dcf_flag bits:
#define PARITY      0x01     // .... ...1  Parity Bit
#define DCF_UPD     0x02     // .... ..1.  Zeit update
#define DCF_READ    0x08     // .... 1...  READ DCF77 Signal
#define DCF_RX      0x10     // ...1 ....  Es wurde ein Impuls empfangen
#define DCF_SYNC    0x20     // ..1. ....  Zeit Signal parity ok
#define DCF_SYNC2   0x40     // .1.. ....  Zeit Signal parity ok fuer 1 Stunde
#define UPD_ZEILE1  0x80     // 1... ....  Zeile 1 neu aufbereitet

typedef struct
{
   unsigned char tim2ovf;       //
   unsigned char sleep_over;    // overflow je 900 sek.
   unsigned char display_time;  // zeit fertig angezeigt
   unsigned char time_trace;
   unsigned char Sleep_Sw;      // sleep switch
   unsigned char dcf_flag;      // siehe oben
   unsigned char ss;            // Sekunden
   unsigned char dmm;           // Minute
   unsigned char dhh;           // Stunde
   unsigned char day;           // Tag
   unsigned char wday;          // Wochentag
   unsigned char mon;           // Monat
   unsigned char year;          // Jahr
   unsigned char dmz;           // MEZ oder MESZ
   unsigned char display_flag;  // 1 = zeile 1 , 2 = zeile2 , 3 = beide zeilen
   int sa;                      // Sonnenaufgang
   int su;                      // Sonnenuntergang
   int sa1;                     // Sonnenaufgang morgen
   int su1;                     // Sonnenuntergang morgen
   int sleep;                   // dcf_sleep
#ifdef C_GEOVAR	
	long geolen;                 // geo Laenge * 10000 = 4 stellen hinter dem komma   
	long geobre;                 // geo Breite * 10000 = 4 stellen hinter dem komma	
#endif
   unsigned char gflag;         // 21.5.2011 wenn Änderungen, gflag auf 0 setzen.	
} S_CLOCK;

void start_clock( void );           // Startet die DCF77 Uhr
void stopp_clock(void);             // DCF77 Uhr anhalten
void timer2_signal(void);           // timer2 10 mSek trigger
void display_Zeit(unsigned char s); // Zeit anzeigen

                                    // Interrupt, DCF77 Modul am INT0
#define INT0_FALLING_EDGE  0x02
#define INT0_RISING_EDGE   0x03

#endif //_CLOCK_H
