Subversion Repositories HomeAutomation

Rev

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

  1. #ifndef ACT_HWPWM_EEPROM
  2. #define ACT_HWPWM_EEPROM
  3.  
  4. #include "act_hwPWM.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_hwPWM.Data
  11.     #define EEDATA16        (uint16_t*)&eeprom_act_hwPWM.Data
  12.     #define EEDATA_CALC_CRC     eeprom_crc8((uint8_t*)&eeprom_act_hwPWM.Data,sizeof(struct act_hwPWM_Data))
  13.     #define EEDATA_UPDATE_CRC   eeprom_write_byte((uint8_t*)&eeprom_act_hwPWM.crc,eeprom_crc8((uint8_t*)&eeprom_act_hwPWM.Data,sizeof(struct act_hwPWM_Data)))
  14.     #define EEDATA_OK       EEDATA_CALC_CRC == EEDATA_STORED_CRC
  15.     #define EEDATA_STORED_CRC   eeprom_read_byte((uint8_t*)&eeprom_act_hwPWM.crc)
  16.    
  17.     struct eeprom_act_hwPWM{
  18.         struct act_hwPWM_Data Data;
  19.         uint8_t crc;
  20.     };
  21.     extern struct eeprom_act_hwPWM EEMEM eeprom_act_hwPWM;
  22.    
  23.     #define WITH_CRC    1
  24.     #define WITHOUT_CRC 0
  25.     static __inline__ void eeprom_write_byte_crc(uint8_t *__p, uint8_t __value, uint8_t crc) {
  26.       if (__value != eeprom_read_byte(__p))
  27.       {
  28.         eeprom_write_byte(__p, __value);
  29.         if (crc == WITH_CRC)
  30.         {
  31.           EEDATA_UPDATE_CRC;
  32.         }
  33.       }
  34.     }
  35.     static __inline__ void eeprom_write_word_crc(uint16_t *__p, uint16_t __value, uint8_t crc) {
  36.       if (__value != eeprom_read_word(__p))
  37.       {
  38.         eeprom_write_word(__p, __value);
  39.         if (crc == WITH_CRC)
  40.         {
  41.           EEDATA_UPDATE_CRC;
  42.         }
  43.       }
  44.     }
  45. #endif