You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
1.6 KiB
86 lines
1.6 KiB
/** @file eeprom.c
|
|
@author M. P. Hayes, UCECE
|
|
@date 15 May 2007
|
|
@brief
|
|
*/
|
|
#include "system.h"
|
|
#include "eeprom.h"
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
|
|
|
|
#define EEPROM_SIZE 512
|
|
#define EEPROM_FILENAME "ucfk_eeprom.dat"
|
|
|
|
|
|
static void
|
|
eeprom_file_write (void *buffer, eeprom_size_t size)
|
|
{
|
|
FILE *fp;
|
|
|
|
fp = fopen (EEPROM_FILENAME, "w");
|
|
if (fp)
|
|
{
|
|
fwrite (buffer, size, 1, fp);
|
|
fclose (fp);
|
|
}
|
|
}
|
|
|
|
|
|
static void
|
|
eeprom_file_read (void *buffer, eeprom_size_t size)
|
|
{
|
|
FILE *fp;
|
|
|
|
fp = fopen (EEPROM_FILENAME, "r");
|
|
if (!fp)
|
|
{
|
|
/* If file not present assume EEPROM is erased and thus
|
|
contains the values 0xff. */
|
|
memset (buffer, 0xff, size);
|
|
eeprom_file_write (buffer, size);
|
|
}
|
|
else
|
|
{
|
|
fread (buffer, size, 1, fp);
|
|
fclose (fp);
|
|
}
|
|
}
|
|
|
|
|
|
/* Read SIZE bytes from ADDR into BUFFER. */
|
|
eeprom_size_t
|
|
eeprom_read (eeprom_addr_t addr, void *buffer, eeprom_size_t size)
|
|
{
|
|
eeprom_size_t i;
|
|
uint8_t *data = buffer;
|
|
uint8_t eeprom[EEPROM_SIZE];
|
|
|
|
eeprom_file_read (eeprom, EEPROM_SIZE);
|
|
|
|
for (i = 0; i < size && addr < EEPROM_SIZE; i++)
|
|
data[i] = eeprom[addr++];
|
|
|
|
return i;
|
|
|
|
}
|
|
|
|
|
|
/* Write SIZE bytes to ADDR from BUFFER. */
|
|
eeprom_size_t
|
|
eeprom_write (eeprom_addr_t addr, const void *buffer, eeprom_size_t size)
|
|
{
|
|
eeprom_size_t i;
|
|
const uint8_t *data = buffer;
|
|
uint8_t eeprom[EEPROM_SIZE];
|
|
|
|
eeprom_file_read (eeprom, EEPROM_SIZE);
|
|
|
|
for (i = 0; i < size && addr < EEPROM_SIZE; i++)
|
|
eeprom[addr++] = data[i];
|
|
|
|
eeprom_file_write (eeprom, EEPROM_SIZE);
|
|
|
|
return i;
|
|
}
|