📄 nvram.c
字号:
#include "nvram.h"
#include "24c512.h"
#include "typedef.h"
#include "common_function.h"
typedef struct _nvram_info
{
unsigned char nvLen;
unsigned int nvAddr;
}NVRAM_INFO;
NVRAM_INFO gNvramInfo[NVRAM_INFOSIZE] = {
{NVRAM_VALID_LEN, NVRAM_VALID_ADDR},
{NVRAM_COLD_RESET_LEN, NVRAM_COLD_RESET_ADDR},
{NVRAM_AUTO_SEND_LEN, NVRAM_AUTO_SEND_ADDR},
{NVRAM_ONLINE_LEN, NVRAM_ONLINE_ADDR},
{NVRAM_ARRIVE_METER_LEN, NVRAM_ARRIVE_METER_ADDR},
{NVRAM_LEFT_METER_LEN, NVRAM_LEFT_METER_ADDR},
{NVRAM_VOICE_VOLUME_LEN, NVRAM_VOICE_VOLUME_ADDR},
{NVRAM_UPDATE_TIME_LEN, NVRAM_UPDATE_TIME_ADDR},
{NVRAM_BUS_WORKMODE_LEN, NVRAM_BUS_WORKMODE_ADDR},
{NVRAM_BUS_LINEMODE_LEN, NVRAM_BUS_LINEMODE_ADDR},
{NVRAM_BUS_LINENUM_LEN, NVRAM_BUS_LINENUM_ADDR},
{NVRAM_BUS_LINEDIRRECTION_LEN, NVRAM_BUS_LINEDIRRECTION_ADDR},
{NVRAM_STATION_NUM_LEN, NVRAM_STATION_NUM_ADDR},
{NVRAM_STATION_ATTR_LEN, NVRAM_STATION_ATTR_ADDR},
{NVRAM_TELEPHONE_LIST_LEN, NVRAM_TELEPHONE_LIST_ADDR}
};
static unsigned int nvram_addr;
unsigned char nvram_len;
static nvram_cmd_info(unsigned char cmdId)
{
if (cmdId >= NVRAM_INFOSIZE)
nvram_len = 0;
else
{
nvram_addr = gNvramInfo[cmdId].nvAddr;
nvram_len = gNvramInfo[cmdId].nvLen;
}
}
void nvram_read(unsigned char cmdId, void *ptr)
{
nvram_cmd_info(cmdId);
if( nvram_len )
{
c512_config_read(nvram_addr, ptr, nvram_len );
}
}
void nvram_writestationData(void *ptr)
{
c512_config_write(NVRAM_BUS_LINEDIRRECTION_ADDR, ptr, 3);
}
void nvram_write(unsigned char cmdId,void *ptr)
{
nvram_cmd_info(cmdId);
if( nvram_len > 128 )
{
c512_config_write(nvram_addr, ptr, 128 );
nvram_addr += 128;
ptr += 128;
nvram_len -= 128;
delayMs(10);
}
if( nvram_len )
{
c512_config_write(nvram_addr, ptr, nvram_len );
}
}
#define LAST_PAGEADDR 511
/******************************需要考虑不在要写的地址不在一页******/
/*
unsigned char write_firmware(unsigned int addr, unsigned char* pBuf, unsigned char nLen)
{
unsigned int pageAddr, nTmp;//页地址
unsigned char writeLen, leftLen;
pageAddr = addr/128;
leftLen = nLen;
nTmp = nLen;
if ((0xffff-addr) < nTmp)
return KO;
while (leftLen > 0)
{
if (LAST_PAGEADDR == pageAddr)
writeLen = leftLen;
else
{
if ((addr+leftLen) > ((pageAddr+1)*128))
writeLen = (pageAddr+1)*128-addr;
else
writeLen = leftLen;
}
c512_firmware_write(addr, pBuf, writeLen);
leftLen -= writeLen;
addr += writeLen;
pBuf += writeLen;
pageAddr++;
delayMs(10);
}
return OK;
}*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -