Subversion Repositories HomeAutomation

Rev

Rev 1449 | Blame | Compare with Previous | Last modification | View Log | SVN | RSS feed

  1. #ifndef SNS_SERIAL_EEPROM
  2. #define SNS_SERIAL_EEPROM
  3.  
  4. #include "sns_Serial.h"
  5. // Do not change anything below this line.
  6. // ----------------------------------------------------------------
  7.  
  8.     #include <drivers/misc/eeprom_crc8.h>
  9.     #include <avr/eeprom.h>
  10.     #define EEDATA          (uint8_t*)&eeprom_sns_Serial.Data
  11.     #define EEDATA16        (uint16_t*)&eeprom_sns_Serial.Data
  12.     #define EEDATA32        (uint32_t*)&eeprom_sns_Serial.Data
  13.     #define EEDATA_CALC_CRC     eeprom_crc8((uint8_t*)&eeprom_sns_Serial.Data,sizeof(struct sns_Serial_Data))
  14.     #define EEDATA_UPDATE_CRC   eeprom_write_byte((uint8_t*)&eeprom_sns_Serial.crc,eeprom_crc8((uint8_t*)&eeprom_sns_Serial.Data,sizeof(struct sns_Serial_Data)))
  15.     #define EEDATA_OK       EEDATA_CALC_CRC == EEDATA_STORED_CRC
  16.     #define EEDATA_STORED_CRC   eeprom_read_byte((uint8_t*)&eeprom_sns_Serial.crc)
  17.    
  18.     struct eeprom_sns_Serial{
  19.         struct sns_Serial_Data Data;
  20.         uint8_t crc;
  21.     };
  22.     extern struct eeprom_sns_Serial EEMEM eeprom_sns_Serial;
  23.    
  24.     #define WITH_CRC    1
  25.     #define WITHOUT_CRC 0
  26.     static __inline__ void eeprom_write_byte_crc(uint8_t *__p, uint8_t __value, uint8_t crc) {
  27.       if (__value != eeprom_read_byte(__p))
  28.       {
  29.         eeprom_write_byte(__p, __value);
  30.         if (crc == WITH_CRC)
  31.         {
  32.           EEDATA_UPDATE_CRC;
  33.         }
  34.       }
  35.     }
  36.     static __inline__ void eeprom_write_word_crc(uint16_t *__p, uint16_t __value, uint8_t crc) {
  37.       if (__value != eeprom_read_word(__p))
  38.       {
  39.         eeprom_write_word(__p, __value);
  40.         if (crc == WITH_CRC)
  41.         {
  42.           EEDATA_UPDATE_CRC;
  43.         }
  44.       }
  45.     }
  46.     static __inline__ void eeprom_write_dword_crc(uint32_t *__p, uint32_t __value, uint8_t crc) {
  47.       if (__value != eeprom_read_dword(__p))
  48.       {
  49.         eeprom_write_dword(__p, __value);
  50.         if (crc == WITH_CRC)
  51.         {
  52.           EEDATA_UPDATE_CRC;
  53.         }
  54.       }
  55.     }
  56. #endif
  57.