common/util/hal_eeprom.c (36 lines of code) (raw):
#include <stdio.h>
#include "hal_eeprom.h"
#include "hal_i2c.h"
#include <string.h>
uint8_t eeprom_write(EEPROM_ENTRY *entry)
{
I2C_MSG msg;
uint8_t retry = 5;
msg.bus = entry->config.port;
msg.slave_addr = entry->config.slave_addr;
msg.tx_len = entry->data_len + 2; // write 2 byte offset to EEPROM
msg.data[0] = ((entry->config.start_offset + entry->offset) >> 8) & 0xFF; // offset msb
msg.data[1] = (entry->config.start_offset + entry->offset) & 0xFF; // offset lsb
memcpy(&msg.data[2], &entry->data[0], entry->data_len);
if (i2c_master_write(&msg, retry)) {
return false;
}
return true;
}
uint8_t eeprom_read(EEPROM_ENTRY *entry)
{
I2C_MSG msg;
uint8_t retry = 5;
msg.bus = entry->config.port;
msg.slave_addr = entry->config.slave_addr;
msg.tx_len = 2; // write 2 byte offset to EEPROM
msg.rx_len = entry->data_len;
msg.data[0] = ((entry->config.start_offset + entry->offset) >> 8) & 0xFF; // offset msb
msg.data[1] = (entry->config.start_offset + entry->offset) & 0xFF; // offset lsb
if (i2c_master_read(&msg, retry)) {
return false;
}
entry->data_len = msg.rx_len;
memcpy(&entry->data, &msg.data, msg.rx_len);
return true;
}