45#define LOG_MODULE "EEPROM"
46#define LOG_LEVEL LOG_LEVEL_MAIN
48static FILE *eeprom_file;
52eeprom_fill(eeprom_addr_t
addr,
unsigned char value,
size_t size)
58 if(
addr > EEPROM_END_ADDR ||
addr + size > EEPROM_END_ADDR + 1) {
59 LOG_ERR(
"Bad address and/or size (addr = %04x, size = %zu)\n",
addr, size);
63 if(fseek(eeprom_file,
addr, SEEK_SET) < 0) {
64 LOG_ERR(
"fseek() failed: %s\n", strerror(errno));
69 if(fputc(value, eeprom_file) != value) {
70 LOG_ERR(
"fputc() failed\n");
82 LOG_WARN(
"Re-initializing EEPROM\n");
87 if(EEPROM_SIZE == 0) {
88 LOG_ERR(
"Cannot initialize EEPROM when EEPROM_SIZE is 0\n");
92 char *eeprom_filename = getenv(
"CONTIKI_EEPROM");
93 if(eeprom_filename != NULL) {
94 LOG_INFO(
"Using EEPROM file \"%s\"\n", eeprom_filename);
96 LOG_INFO(
"CONTIKI_EEPROM env is not set; using a temp file instead\n");
99 eeprom_file = eeprom_filename ? fopen(eeprom_filename,
"w+") : tmpfile();
101 if(eeprom_file == NULL) {
102 LOG_ERR(
"Unable to open the EEPROM file\n");
112 if(fseek(eeprom_file, 0, SEEK_END) == -1) {
113 LOG_ERR(
"fseek() failed: %s\n", strerror(errno));
117 off_t length = ftell(eeprom_file);
119 LOG_ERR(
"ftell() failed\n");
123 if(length < EEPROM_END_ADDR) {
125 if(eeprom_fill(length, 0xFF, EEPROM_SIZE - length) ==
false) {
133 if(eeprom_file != NULL) {
148 if(
addr > EEPROM_END_ADDR ||
addr + size > EEPROM_END_ADDR + 1) {
149 LOG_ERR(
"Bad address and/or size (addr = %04x, size = %zu)\n",
addr, size);
153 if(fseek(eeprom_file,
addr, SEEK_SET) < 0) {
154 LOG_ERR(
"fseek() failed: %s\n", strerror(errno));
158 if(fwrite(buf, 1, size, eeprom_file) != size) {
159 LOG_ERR(
"fwrite() failed\n");
174 if(
addr > EEPROM_END_ADDR ||
addr + size > EEPROM_END_ADDR + 1) {
175 LOG_ERR(
"Bad address and/or size (addr = %04x, size = %zu)\n",
addr, size);
179 if(fseek(eeprom_file,
addr, SEEK_SET) < 0) {
180 LOG_ERR(
"fseek() failed: %s\n", strerror(errno));
184 if(fread(buf, 1, size, eeprom_file) != size) {
185 LOG_ERR(
"fread() failed\n");
bool eeprom_write(eeprom_addr_t addr, const unsigned char *buf, size_t size)
Write a buffer into EEPROM.
bool eeprom_init(void)
Initialize the EEPROM module.
bool eeprom_read(eeprom_addr_t addr, unsigned char *buf, size_t size)
Read data from the EEPROM.
Header file for the logging system.
static uip_ds6_addr_t * addr
Pointer to a nbr cache entry.