X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=drv%2Feeprom.h;h=5e3f78a280aa090c580ae1ba8667ebca827a4042;hb=dd4c57ad1010a2347247fd6bbcce30956d3de791;hp=ffc971ce981abdcf4ef82561b0e5c7fa2ea7242c;hpb=af9c555446161016fdd76c1cdff96ce76bb6cba2;p=bertos.git diff --git a/drv/eeprom.h b/drv/eeprom.h old mode 100755 new mode 100644 index ffc971ce..5e3f78a2 --- a/drv/eeprom.h +++ b/drv/eeprom.h @@ -1,8 +1,33 @@ -/*! +/** * \file * * * \version $Id$ @@ -13,34 +38,13 @@ * \brief Driver for the 24xx16 and 24xx256 I2C EEPROMS (interface) */ -/*#* - *#* $Log$ - *#* Revision 1.6 2005/04/11 19:10:27 bernie - *#* Include top-level headers from cfg/ subdir. - *#* - *#* Revision 1.5 2004/11/02 17:50:02 bernie - *#* CONFIG_EEPROM_VERIFY: New config option. - *#* - *#* Revision 1.4 2004/08/25 14:12:08 rasky - *#* Aggiornato il comment block dei log RCS - *#* - *#* Revision 1.3 2004/08/10 06:57:22 bernie - *#* eeprom_erase(): New function. - *#* - *#* Revision 1.2 2004/07/29 22:57:09 bernie - *#* Add 24LC16 support. - *#* - *#* Revision 1.1 2004/07/20 17:11:18 bernie - *#* Import into DevLib. - *#* - *#*/ #ifndef DRV_EEPROM_H #define DRV_EEPROM_H #include -#include +#include -/*! +/** * \name Values for CONFIG_EEPROM_TYPE * \{ */ @@ -49,18 +53,29 @@ /*\}*/ #if CONFIG_EEPROM_TYPE == EEPROM_24XX16 - #define EEPROM_BLKSIZE 0x10 //!< Eeprom block size (16byte) - #define EEPROM_SIZE 0x800 //!< Eeprom total size (2kB) + #define EEPROM_BLKSIZE 0x10 ///< Eeprom block size (16byte) + #define EEPROM_SIZE 0x800 ///< Eeprom total size (2kB) #elif CONFIG_EEPROM_TYPE == EEPROM_24XX256 - #define EEPROM_BLKSIZE 0x40 //!< Eeprom block size (64byte) - #define EEPROM_SIZE 0x8000 //!< Eeprom total size (32kB) + #define EEPROM_BLKSIZE 0x40 ///< Eeprom block size (64byte) + #define EEPROM_SIZE 0x8000 ///< Eeprom total size (32kB) #else #error Unsupported EEPROM type. #endif -//! Type for EEPROM addresses +/// Type for EEPROM addresses typedef uint16_t e2addr_t; +/** + * Macro for E2Layout offset calculation + * + * \note We can't just use offsetof() here because we could use + * non-constant expressions to access array elements. + * + * \note E2Layout is a structure that must be defined in user files. + */ +#define e2addr(x) ((e2addr_t)&(((struct E2Layout *)0)->x)) + + bool eeprom_write(e2addr_t addr, const void *buf, size_t count); bool eeprom_read(e2addr_t addr, void *buf, size_t count); bool eeprom_write_char(e2addr_t addr, char c);