Subversion Repositories HomeAutomation

Rev

Blame | Last modification | View Log | SVN | RSS feed

  1. #ifndef ACT_MULTISWITCH_EEPROM
  2. #define ACT_MULTISWITCH_EEPROM
  3.  
  4. #include "act_multiSwitch.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_act_multiSwitch.Data
  11.     #define EEDATA16        (uint16_t*)&eeprom_act_multiSwitch.Data
  12.     #define EEDATA32        (uint32_t*)&eeprom_act_multiSwitch.Data
  13.     #define EEDATA_CALC_CRC     eeprom_crc8((uint8_t*)&eeprom_act_multiSwitch.Data,sizeof(struct act_multiSwitch_Data))
  14.  
  15. #if ((__AVR_LIBC_MAJOR__ == 1  && __AVR_LIBC_MINOR__ == 6 && __AVR_LIBC_REVISION__ >= 7)||(__AVR_LIBC_MAJOR__ == 1  && __AVR_LIBC_MINOR__ > 6)||__AVR_LIBC_MAJOR__ > 1)
  16.     #define EEDATA_UPDATE_CRC   eeprom_update_byte((uint8_t*)&eeprom_act_multiSwitch.crc,eeprom_crc8((uint8_t*)&eeprom_act_multiSwitch.Data,sizeof(struct act_multiSwitch_Data)))
  17. #else
  18.     #define EEDATA_UPDATE_CRC   eeprom_write_byte((uint8_t*)&eeprom_act_multiSwitch.crc,eeprom_crc8((uint8_t*)&eeprom_act_multiSwitch.Data,sizeof(struct act_multiSwitch_Data)))
  19. #endif
  20.  
  21.     #define EEDATA_OK       EEDATA_CALC_CRC == EEDATA_STORED_CRC
  22.     #define EEDATA_STORED_CRC   eeprom_read_byte((uint8_t*)&eeprom_act_multiSwitch.crc)
  23.    
  24.     struct eeprom_act_multiSwitch{
  25.         struct act_multiSwitch_Data Data;
  26.         uint8_t crc;
  27.     };
  28.     extern struct eeprom_act_multiSwitch EEMEM eeprom_act_multiSwitch;
  29.    
  30.     #define WITH_CRC    1
  31.     #define WITHOUT_CRC 0
  32.  
  33.  
  34. #if ((__AVR_LIBC_MAJOR__ == 1  && __AVR_LIBC_MINOR__ == 6 && __AVR_LIBC_REVISION__ >= 7)||(__AVR_LIBC_MAJOR__ == 1  && __AVR_LIBC_MINOR__ > 6)||__AVR_LIBC_MAJOR__ > 1)
  35.     static __inline__ void eeprom_write_byte_crc(uint8_t *__p, uint8_t __value, uint8_t crc) {
  36.         eeprom_update_byte(__p, __value);
  37.         if (crc == WITH_CRC)
  38.         {
  39.           EEDATA_UPDATE_CRC;
  40.         }
  41.     }
  42.     static __inline__ void eeprom_write_word_crc(uint16_t *__p, uint16_t __value, uint8_t crc) {
  43.         eeprom_update_word(__p, __value);
  44.         if (crc == WITH_CRC)
  45.         {
  46.           EEDATA_UPDATE_CRC;
  47.         }
  48.     }
  49.     static __inline__ void eeprom_write_dword_crc(uint32_t *__p, uint32_t __value, uint8_t crc) {
  50.         eeprom_update_dword(__p, __value);
  51.         if (crc == WITH_CRC)
  52.         {
  53.           EEDATA_UPDATE_CRC;
  54.         }
  55.     }
  56. #else
  57.     static __inline__ void eeprom_write_byte_crc(uint8_t *__p, uint8_t __value, uint8_t crc) {
  58.       if (__value != eeprom_read_byte(__p))
  59.       {
  60.         eeprom_write_byte(__p, __value);
  61.         if (crc == WITH_CRC)
  62.         {
  63.           EEDATA_UPDATE_CRC;
  64.         }
  65.       }
  66.     }
  67.     static __inline__ void eeprom_write_word_crc(uint16_t *__p, uint16_t __value, uint8_t crc) {
  68.       if (__value != eeprom_read_word(__p))
  69.       {
  70.         eeprom_write_word(__p, __value);
  71.         if (crc == WITH_CRC)
  72.         {
  73.           EEDATA_UPDATE_CRC;
  74.         }
  75.       }
  76.     }
  77.     static __inline__ void eeprom_write_dword_crc(uint32_t *__p, uint32_t __value, uint8_t crc) {
  78.       if (__value != eeprom_read_dword(__p))
  79.       {
  80.         eeprom_write_dword(__p, __value);
  81.         if (crc == WITH_CRC)
  82.         {
  83.           EEDATA_UPDATE_CRC;
  84.         }
  85.       }
  86.     }
  87. #endif
  88.  
  89. #endif
  90.