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

📄 nvram.c

📁 通过车载终端采集GPS数据
💻 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 + -