
/////////////////////////////////////////////////////////////////////////////
// meinestruct.h File ///////////////////////////////////////////////////////

// Struct definieren, die im EEPROM gemerkt werden
typedef struct {
	volatile uint8_t ECHO;		// command echo on/off -> RS485
	volatile uint8_t KALIT;		// Ausgabe kalibriert = 1
} flag_t;

// physisch anlegen:
flag_t FLAG;

// irgendwo wird FLAG benutzt (RAM) ...


/////////////////////////////////////////////////////////////////////////////
// eprom.h File /////////////////////////////////////////////////////////////

void eprom_readflags(void);			// Flags aus EEPROM lesen
void eprom_writeflags(void);			// Flags ins EEPROM schreiben



/////////////////////////////////////////////////////////////////////////////
// eprom.c File /////////////////////////////////////////////////////////////

// u.U. im Umfeld nötig:
#include <stdint.h>		// uint8_t std-integers
#include <string.h>		// memcpy
#include <stdlib.h>		// strcpy, strcat, dtostrf
#include <stdio.h>		// sprintf
#include <avr/io.h>		// ports and pins
#include <avr/eeprom.h>		// EEMEM, eeprom_read_block...
#include <avr/interrupt.h>	// cli(), sei()
#include <avr/wdt.h>		// wdt_reset

#include "meinestruct.h"	// !!!!!

// falls nicht vorhanden:
#define eeprom_is_ready()	bit_is_clear (EECR, EEPE)	// ATmega328


// mit structtype flag_t zusätzlich im EEMEM anlegen:
flag_t EEMEM FLAGEE;


void eprom_readflags(void) {	// aus EEPROM laden
	cli();
	while (!eeprom_is_ready()) {;}	// wait until ready
	wdt_reset();			// watchdog reset
	eeprom_read_block( &FLAG, &FLAGEE, sizeof(flag_t));
			// 	(*dst, *src, n)
}


void eprom_writeflags(void) {	// ins EEPROM schreiben
	cli();
	while (!eeprom_is_ready()) {;}	// wait until ready
	wdt_reset();			// watchdog reset
	eeprom_write_block( &FLAG, &FLAGEE, sizeof(flag_t));
			// 	(*src, *dst, n)
}
