📄 eeprom.c
字号:
/****************************************************************************/
/* TEXAS INSTRUMENTS PROPRIETARY INFORMATION */
/* */
/* (c) Copyright, Texas Instruments Incorporated, 2006. */
/* All Rights Reserved. */
/* */
/* Property of Texas Instruments Incorporated. Restricted Rights - */
/* Use, duplication, or disclosure is subject to restrictions set */
/* forth in TI's program license agreement and associated documentation. */
/****************************************************************************/
/****************************************************************************/
/* eeprom.c */
/* */
/* EEPROM data manager. */
/****************************************************************************/
#include <stddef.h>
#include <string.h>
#include "common.h"
#include "global.h"
#include "app_Cfg.h"
#include "dbmessage.h"
#include "sysmon.h"
#include "eeprom.h"
#include "eeprom_24cXX.h"
BOOL _eeGetVarValid( void *offset, size_t size, void *pValue );
#define EE_VALIDATE( parm, value ) ( _eeGetVarValid( &tsp->parm, sizeof( tsp->parm ), &value ) )
/****************************************************************************/
/* Local data. */
/****************************************************************************/
static const EEPROM_INITSTRUCT eeInitStruct =
{
I2C_PORT0, /* API i2c Port number */
EE_24C32, /* device type */
0xa8, /* default base i2c device address << 1 */
10 /* 1.0 seconds operational timeout */
};
SettingsStruct *tsp = (SettingsStruct*)0;
/****************************************************************************/
/* Initialize content of EEPROM. */
/* */
/* pSet: Pointer to EEPROM settingsstruct in FROM. */
/* retain: if TRUE: retain values of UserSystem systemdatastruct. */
/* if FALSE: rewrite UserSystem systemdatastruct. */
/* */
/* - return FALSE: Initialization did not occur. */
/* TRUE: Success. */
/****************************************************************************/
BOOL eeprom_start( SettingsStruct *pSet, BOOL retain )
{
struct systemdatastruct tempSUS; /* current Settings.UserSystem */
if( retain ) /* if system data is to be retained */
if( !EE_VALIDATE( UserSystem, tempSUS )) /* if sys data not valid */
retain = FALSE; /* can't retain */
if( !retain )
dbmsg_trace( DBM_ALWAYS, "Can't retain UserSystem settings...\r\n" );
if( EEPROM_PASS != EEPROM_PutData( TRUE, 0, sizeof( *pSet ), pSet ))
return FALSE; /* could not put */
if( retain ) /* if system data was retained */
if( !EE_PUTVAR( UserSystem, tempSUS )) /* write */
return FALSE; /* could not put */
return TRUE;
}
/****************************************************************************/
/* Module reset function. */
/* */
/* - return exec. completion code. */
/****************************************************************************/
EXEC_CC_ENUM eeprom_init( void )
{
struct layoutversionstruct verStruct;
EEPROM_CC cc; /* driver completion code */
if( EEPROM_PASS != ( cc = EEPROM_Open( &eeInitStruct )))
{
dbmsg_trace( DBM_ALWAYS, "Can't open EEPROM driver\r\n" );
return EXEC_CC_FATAL;
}
/****************************************************/
/* Validate content of EEPROM by reading entire */
/* content and discarding data. */
/****************************************************/
cc = EEPROM_GetData( TRUE, 0, sizeof( *gpSettings ), NULL );/* validate */
if( cc != EEPROM_PASS ) /* if validation error */
{
dbmsg_ftrace( DBM_ALWAYS, "EEPROM content validation error %d\r\n", cc );
if( !eeprom_start( gpSettings, TRUE )) /* if initialization error */
{
dbmsg_trace( DBM_ALWAYS, "Can't re-initialize EEPROM\r\n" );
return EXEC_CC_FATAL;
}
}
else
{
dbmsg_trace( DBM_ALWAYS, "EEPROM content is valid\r\n" );
}
/****************************************************/
/* Examine EEPROM and app config version number and */
/* re-initialize if versions are different. */
/****************************************************/
EE_GETVAR( Version, verStruct ); /* version from EEPROM */
if( memcmp( &verStruct, &gpSettings -> Version, sizeof( verStruct )))
{
dbmsg_trace( DBM_ALWAYS, "EEPROM version mismatch:\r\n" );
dbmsg_ftrace( DBM_ALWAYS, " EEPROM ver. %02d.%02d.%02d\r\n",
verStruct.Major, verStruct.Minor, verStruct.Subminor );
dbmsg_ftrace( DBM_ALWAYS, " Config ver. %02d.%02d.%02d\r\n",
gpSettings -> Version.Major, gpSettings -> Version.Minor, gpSettings -> Version.Subminor );
if( verStruct.Major != gpSettings -> Version.Major )
eeprom_start( gpSettings, FALSE );
else
eeprom_start( gpSettings, TRUE );
}
return EXEC_CC_PASS;
}
/****************************************************************************/
/* Restore default EEPROM settings from flash ROM to EEPROM. */
/* - The lamp life counters and CW calibration constant are retained. */
/* */
/* - return FALSE: Restore failed. */
/* TRUE: Success. */
/****************************************************************************/
BOOL eeprom_restoreDefault( void )
{
return eeprom_start( gpSettings, TRUE );
}
/****************************************************************************/
/* Get a scalar constant from EEPROM. */
/* */
/* WARNING: No error report to calling function. */
/****************************************************************************/
int _eeGetConstFromEEPROM( void *offset, size_t size )
{
EEPROM_CC cc; /* completion code */
int cons = 0xffffffff;
if( EEPROM_PASS != ( cc = EEPROM_GetData( FALSE, (uint32)offset, size, &cons )))
{
dbmsg_ftrace( DBM_EEPROM, "EEPROM read error %d\r\n", cc );
return 0;
}
return cons; /* success */
}
/****************************************************************************/
/* Put a scalar constant to EEPROM. */
/* - return FALSE: Write did not succeed. */
/* TRUE: Success. */
/****************************************************************************/
BOOL _eePutConstToEEPROM( void *offset, size_t size, int cons )
{
EEPROM_CC cc; /* completion code */
if( EEPROM_PASS != ( cc = EEPROM_PutData( TRUE, (uint32)offset, size, &cons )))
{
dbmsg_ftrace( DBM_EEPROM, "EEPROM write error %d\r\n", cc );
return FALSE;
}
return TRUE; /* success */
}
/****************************************************************************/
/* Get a scalar or application-defined object from EEPROM. */
/* - return FALSE: Read did not succeed. */
/* TRUE: Success. */
/****************************************************************************/
BOOL _eeGetVarFromEEPROM( void *offset, size_t size, void *pValue )
{
EEPROM_CC cc; /* completion code */
if( EEPROM_PASS != ( cc = EEPROM_GetData( FALSE, (uint32)offset, size, pValue )))
{
dbmsg_ftrace( DBM_EEPROM, "EEPROM read error %d\r\n", cc );
return FALSE;
}
return TRUE; /* success */
}
/****************************************************************************/
/* Put a scalar or application-defined object from EEPROM. */
/* - return FALSE: Write did not succeed. */
/* TRUE: Success. */
/****************************************************************************/
BOOL _eePutVarToEEPROM( void *offset, size_t size, void *pValue )
{
EEPROM_CC cc; /* completion code */
if( EEPROM_PASS != ( cc = EEPROM_PutData( TRUE, (uint32)offset, size, pValue )))
{
dbmsg_ftrace( DBM_EEPROM, "EEPROM write error %d\r\n", cc );
return FALSE;
}
return TRUE; /* success */
}
/****************************************************************************/
/* Determine if a Settings object is valid. */
/* - return FALSE: Object not valid. */
/* TRUE: Object is valid. */
/****************************************************************************/
BOOL _eeGetVarValid( void *offset, size_t size, void *pValue )
{
EEPROM_CC cc; /* completion code */
if( EEPROM_PASS != ( cc = EEPROM_GetData( TRUE, (uint32)offset, size, pValue )))
{
dbmsg_ftrace( DBM_EEPROM, "EEPROM read validate error %d\r\n", cc );
return FALSE;
}
return TRUE; /* success */
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -