eeprom.h
Go to the documentation of this file.00001
00043 #ifndef DRV_EEPROM_H
00044 #define DRV_EEPROM_H
00045
00046 #include "cfg/cfg_eeprom.h"
00047
00048 #include <cfg/compiler.h>
00049 #include <cfg/debug.h>
00050
00051 #include <drv/i2c.h>
00052
00053 #include <io/kblock.h>
00054 #include <io/kfile.h>
00055 #include <io/kfile_block.h>
00056
00057 #include <cpu/attr.h>
00058
00059 #if COMPILER_C99
00060 #define eeprom_init(...) PP_CAT(eeprom_init ## _, COUNT_PARMS(__VA_ARGS__)) (__VA_ARGS__)
00061 #define eeprom_verify(...) PP_CAT(eeprom_verify ## _, COUNT_PARMS(__VA_ARGS__)) (__VA_ARGS__)
00062 #else
00063 #define eeprom_init(args...) PP_CAT(eeprom_init ## _, COUNT_PARMS(args)) (args)
00064 #define eeprom_verify(args...) PP_CAT(eeprom_verify ## _, COUNT_PARMS(args)) (args)
00065 #endif
00066
00067
00071 typedef enum EepromType
00072 {
00073 EEPROM_24XX08,
00074 EEPROM_24XX16,
00075 EEPROM_24XX256,
00076 EEPROM_24XX512,
00077 EEPROM_24XX1024,
00078 EEPROM_CNT,
00079 } EepromType;
00080
00086 typedef uint8_t e2dev_addr_t;
00087
00092 typedef struct Eeprom
00093 {
00094 KBlock blk;
00095 I2c *i2c;
00096 EepromType type;
00097 e2dev_addr_t addr;
00098 bool verify;
00099 #if !CONFIG_EEPROM_DISABLE_OLD_API
00100 union {
00101 KFile fd;
00102 KFileBlock fdblk;
00103 } DEPRECATED;
00104 #endif
00105 } Eeprom;
00106
00107 #if !CONFIG_EEPROM_DISABLE_OLD_API
00108 STATIC_ASSERT(offsetof(Eeprom, fd) == offsetof(Eeprom, fdblk.fd));
00109 #endif
00110
00114 #define KBT_EEPROM MAKE_ID('E', 'E', 'P', 'R')
00115
00119 INLINE Eeprom * EEPROM_CAST_KBLOCK(KBlock *blk)
00120 {
00121 ASSERT(blk->priv.type == KBT_EEPROM);
00122 return (Eeprom *)blk;
00123 }
00124
00126 typedef uint16_t e2addr_t;
00127
00137 #define e2addr(type, field) ((e2addr_t)&(((type *)0)->field))
00138
00142 typedef uint16_t e2blk_size_t;
00143
00147 typedef uint32_t e2_size_t;
00148
00153 typedef struct EepromInfo
00154 {
00155 bool has_dev_addr;
00156 e2blk_size_t blk_size;
00157 e2_size_t e2_size;
00158 } EepromInfo;
00159
00160 bool eeprom_erase(Eeprom *eep, e2addr_t addr, e2_size_t count);
00161 bool eeprom_verify_4(Eeprom *eep, e2addr_t addr, const void *buf, size_t count);
00162 void eeprom_init_5(Eeprom *eep, I2c *i2c, EepromType type, e2dev_addr_t addr, bool verify);
00163
00164 #if !CONFIG_EEPROM_DISABLE_OLD_API
00165
00166 DEPRECATED INLINE bool eeprom_verify_3(Eeprom *eep, const void *buf, size_t count)
00167 {
00168 return eeprom_verify_4(eep, (e2addr_t)eep->fdblk.fd.seek_pos, buf, count);
00169 }
00170 DEPRECATED INLINE void eeprom_init_4(Eeprom *eep, EepromType type, e2dev_addr_t addr, bool verify)
00171 {
00172 eeprom_init_5(eep, &local_i2c_old_api, type, addr, verify);
00173 kfileblock_init(&eep->fdblk, &eep->blk);
00174 }
00175 #endif
00176
00177 #endif