⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 eeprom.c

📁 IT projecotr reference design.
💻 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 + -