optical/NxFuncs/norparas/norparas.c

712 lines
16 KiB
C
Raw Permalink Normal View History

2025-09-04 01:45:08 +00:00
#define _IN_NORPARAS_C
#include "norparas.h"
#if (MAX_PARA_BLOCK > 0)
#include "norflash.h"
#include "inout.h"
#include "shell.h"
#include "delay.h"
//----------------------------------------------------
#define NORPARA_BEG_ADDR (SNF_PARAS_BEGIN) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ,ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռһ<D5BC><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>16<31><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define NP_BLOCK_BYTES SNF_BYTES_PER_PAGE // ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3>С(һҳ)
#define NP_SAVE_BYTES_PER_BLOCK SNF_BYTES_PER_SEC // ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С(һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
#define NP_SAVE_BLOCKS_PER_SEC 16 // ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3>,<2C><>һҳ<D2BB><EFBFBD><E6B4A2><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3>Ч<EFBFBD><D0A7>־,ʵ<>ʹ<EFBFBD>15<31><35>ҳ<EFBFBD><D2B3><EFBFBD>ڴ洢<DAB4><E6B4A2><EFBFBD><EFBFBD>
#define GET_NORPARA_BLOCK_ADDR(bidx) (NORPARA_BEG_ADDR+(bidx)*NP_SAVE_BYTES_PER_BLOCK) // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ
//----------------------------------------------------
typedef struct
{
int paraEn; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>־
NorParaBlock norParaBlock; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
s32 * pParaList; // <20><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>С<EFBFBD><D0A1><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>Ĭ<EFBFBD><C4AC>ֵ)
char * pParasName; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
// <20>
u32 pageFlag[NP_SAVE_BLOCKS_PER_SEC]; // <20><><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3>־
}NorParaBlockCtrl;
NorParaBlockCtrl g_norParaBlockList[MAX_PARA_BLOCK];
//----------------------------------------------------
const char * SHOWP_STR =
"\t" " <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> " "\r\n"
"\t" " p1 p2" "\r\n"
"\t" " 0 0 <09><>ʾȫ<CABE><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> " "\r\n"
"\t" " b001 0 <09><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>b " "\r\n"
"\t" " b002 0 <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>b<EFBFBD><62><EFBFBD><EFBFBD>Ĭ<EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD> " "\r\n"
"\t" " b003 0 <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>b<EFBFBD><62><EFBFBD>¼<EFBFBD><C2BC>ز<EFBFBD><D8B2><EFBFBD> " "\r\n"
;
void ShowPara(char * para1, char * para2);
const char * SETP_STR =
"\t" "<EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><EFBFBD><EFBFBD> " "\r\n"
"\t" " p1 p2" "\r\n"
"\t" " b00x val <09><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>b, <20><><EFBFBD><EFBFBD>ID x, <20><><EFBFBD><EFBFBD>ֵ val " "\r\n"
"\t" " 10b000 0 <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>b " "\r\n"
;
void SetPara(char * para1, char * para2);
//----------------------------------------------------
void InitNorParas(void)
{
static int g_inited = 0;
if (g_inited == 0)
{
g_inited = 1;
InitNorSpi(); // <20><>ʼ<EFBFBD><CABC> nor flash <20><><EFBFBD><EFBFBD> SPI
SNFlashInit(SetNorSpiNssOn, SetNorSpiNssOff, NorSpiReadByte, NorSpiWriteByte); // <20><>ʼ<EFBFBD><CABC>nor flash <20><>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
for(int i = 0; i < MAX_PARA_BLOCK; i++)
{
memset(&g_norParaBlockList[i], 0, sizeof(NorParaBlockCtrl));
LoadNorParas(i);
}
AddShellCmd("SHOWPARA", SHOWP_STR, ShowPara);
AddShellCmd("SETPARA", SETP_STR, SetPara);
}
}
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>־
int GetNorParaEn(int bIdx)
{
if (bIdx < 0 || bIdx >= MAX_PARA_BLOCK)
{
return -1;
}
return g_norParaBlockList[bIdx].paraEn;
}
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>ҳ<EFBFBD><D2B3>Ч<EFBFBD><D0A7>־
int LoadParaPageFlag(int bIdx)
{
NorParaBlockCtrl * pCtrl;
if (bIdx < 0 || bIdx >= MAX_PARA_BLOCK)
{
return -1;
}
pCtrl = &g_norParaBlockList[bIdx];
return DatFlashRdData(GET_NORPARA_BLOCK_ADDR(bIdx), (u8 *)(&pCtrl->pageFlag[0]), NP_SAVE_BLOCKS_PER_SEC*sizeof(u32));
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3>Ч<EFBFBD><D0A7>־
int SaveParaPageFlag(int bIdx)
{
NorParaBlockCtrl * pCtrl;
if (bIdx < 0 || bIdx >= MAX_PARA_BLOCK)
{
return -1;
}
pCtrl = &g_norParaBlockList[bIdx];
return DatFlashWrData(GET_NORPARA_BLOCK_ADDR(bIdx), (u8 *)(&pCtrl->pageFlag[0]), NP_SAVE_BLOCKS_PER_SEC*sizeof(u32));
}
// <20><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>ҳ<EFBFBD><D2B3>Ч<EFBFBD><D0A7>־
int SetParaPageFlagValue(int bIdx, int pIdx, int enFlag)
{
if (bIdx < 0 || bIdx >= MAX_PARA_BLOCK || pIdx < 0 || pIdx >= NP_SAVE_BLOCKS_PER_SEC)
{
return -1;
}
if (enFlag == 0)
{
g_norParaBlockList[bIdx].pageFlag[pIdx] = 0; // ʧЧ,0xffffffffδʹ<CEB4><CAB9>ҳ
}
else
{
g_norParaBlockList[bIdx].pageFlag[pIdx] = PARA_VALID+pIdx; // <20><>Ч
}
return 0;
}
// <20>Ӳ<EFBFBD><D3B2><EFBFBD>ҳ<EFBFBD><D2B3>־<EFBFBD>õ<EFBFBD><C3B5><EFBFBD>ǰ<EFBFBD><C7B0>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD>ҳ
int GetSaveIdxFromPageFlag(int bIdx)
{
int i;
NorParaBlockCtrl * pCtrl;
if (bIdx < 0 || bIdx >= MAX_PARA_BLOCK)
{
return -1;
}
pCtrl = &g_norParaBlockList[bIdx];
for(i = 1; i < NP_SAVE_BLOCKS_PER_SEC; i++)
{
if (pCtrl->pageFlag[i] == PARA_VALID+i)
{
return i;
}
}
return -2;
}
// <20>õ<EFBFBD><C3B5><EFBFBD>һ<EFBFBD><D2BB>δʹ<CEB4><CAB9>ҳ
int GetNextSaveIdxFromPageFlag(int bIdx)
{
int i;
NorParaBlockCtrl * pCtrl;
if (bIdx < 0 || bIdx >= MAX_PARA_BLOCK)
{
return -1;
}
pCtrl = &g_norParaBlockList[bIdx];
for (i = 1; i < NP_SAVE_BLOCKS_PER_SEC; i++)
{
if (pCtrl->pageFlag[i] == 0xffffffff)
{
return i;
}
}
return -2;
}
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
// bIdx:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID
// return: -1:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD><D8B4><EFBFBD>,<2C><><EFBFBD>в<EFBFBD><D0B2><EFBFBD>ҳ<EFBFBD><D2B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><>ҵ<EFBFBD><D2B5><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD>
// 0:<3A><>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>ֵ
int LoadNorParas(int bIdx)
{
u32 addr; //
NorParaBlockCtrl * pCtrl;
int idx, rslt;
if (bIdx < 0 || bIdx >= MAX_PARA_BLOCK)
{
return -1;
}
pCtrl = &g_norParaBlockList[bIdx];
memset(pCtrl, 0, sizeof(NorParaBlockCtrl));
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>־
rslt = LoadParaPageFlag(bIdx);
if (rslt < 0)
{
return -1;
}
idx = GetSaveIdxFromPageFlag(bIdx); // <20>õ<EFBFBD><C3B5><EFBFBD>ǰ<EFBFBD><C7B0>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD>ҳid
if (idx < 0)
{
printf("load nor para error, code=%d\r\n", idx);
return -1;
}
printf("load nor para block %d, page is %d\r\n", bIdx, idx);
addr = GET_NORPARA_BLOCK_ADDR(bIdx) + (idx * NP_BLOCK_BYTES);
DatFlashRdData(addr, (u8*)&pCtrl->norParaBlock, sizeof(NorParaBlock));
g_norParaBlockList[bIdx].paraEn = PARA_VALID; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
return 0;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//bIdx <20><><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>ID
int SaveNorParas(int bIdx)
{
u32 addr;
int cidx, nidx;
if (bIdx < 0 || bIdx >= MAX_PARA_BLOCK)
{
return -1;
}
cidx = GetSaveIdxFromPageFlag(bIdx);
nidx = GetNextSaveIdxFromPageFlag(bIdx);
if (cidx < 0)
{
cidx = 0;
}
if (nidx < 0) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
printf("overflow, erase 4k\r\n");
DatFlash4kErase(GET_NORPARA_BLOCK_ADDR(bIdx), 1); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
LoadParaPageFlag(bIdx);
cidx = 0;
nidx = GetNextSaveIdxFromPageFlag(bIdx);
}
if (nidx < 0) //
{
printf("SaveNorParas error\r\n");
return -2;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B4A2>֮<EFBFBD><D6AE><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3>
addr = GET_NORPARA_BLOCK_ADDR(bIdx) + ((nidx) * NP_BLOCK_BYTES);
DatFlashWrDataWithErase(addr, (u8 *)&g_norParaBlockList[bIdx].norParaBlock, sizeof(NorParaBlock));
SetParaPageFlagValue(bIdx, nidx, 1); // <20><><EFBFBD><EFBFBD><EFBFBD>²<EFBFBD><C2B2><EFBFBD><EFBFBD>洢ҳ<E6B4A2><D2B3>Ч
SetParaPageFlagValue(bIdx, cidx, 0); // <20><><EFBFBD><EFBFBD><EFBFBD>ɵIJ<C9B5><C4B2><EFBFBD><EFBFBD>洢ҳ
SaveParaPageFlag(bIdx); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3>־
g_norParaBlockList[bIdx].paraEn = PARA_VALID; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
printf("save nor para successful, page is %d \r\n", nidx);
return 0;
}
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><D8B2><EFBFBD><EFBFBD><EFBFBD>
NorParaBlock * GetNorParaBlock(int bIdx)
{
if (bIdx < 0 || bIdx >= MAX_PARA_BLOCK)
{
return NULL;
}
return &g_norParaBlockList[bIdx].norParaBlock;
}
// <20><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void SetNorParaNameString(int bIdx, void * pName)
{
if (bIdx < 0 || bIdx >= MAX_PARA_BLOCK )
{
return;
}
g_norParaBlockList[bIdx].pParasName = pName;
}
// <20><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD>б<EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>С<EFBFBD><D0A1><EFBFBD><EFBFBD>ֵĬ<D6B5><C4AC>ֵ)
void SetNorParaList(int bIdx, void * pPara)
{
if (bIdx < 0 || bIdx >= MAX_PARA_BLOCK )
{
return;
}
g_norParaBlockList[bIdx].pParaList = pPara;
}
// <20><><EFBFBD><EFBFBD>Ĭ<EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD>
void LoadNorDefPara(int bIdx)
{
if (bIdx < 0 || bIdx >= MAX_PARA_BLOCK || g_norParaBlockList[bIdx].pParaList == NULL)
{
return;
}
for(int i = 0; i < PARA_NUM_PER_BLK; i++)
{
int offset = i * 4 + 3;
g_norParaBlockList[bIdx].norParaBlock.buff[i] = * ( g_norParaBlockList[bIdx].pParaList + offset );
}
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
void CheckParaRange(int bIdx)
{
if (bIdx < 0 || bIdx >= MAX_PARA_BLOCK || g_norParaBlockList[bIdx].pParaList == NULL)
{
return;
}
for(int i = 0; i < PARA_NUM_PER_BLK; i++)
{
int paratype, minOffset, maxOffset; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>С<EFBFBD><D0A1><EFBFBD><EFBFBD>ֵָ<D6B5><D6B8>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD>
paratype = (i * 4);
minOffset = (i * 4 + 1);
maxOffset = (i * 4 + 2);
if ((*(g_norParaBlockList[bIdx].pParaList + paratype)) == PTYPE_S)
{
if (g_norParaBlockList[bIdx].norParaBlock.buff[i] < (*(g_norParaBlockList[bIdx].pParaList + minOffset)) )
{
g_norParaBlockList[bIdx].norParaBlock.buff[i] = (*( g_norParaBlockList[bIdx].pParaList + minOffset));
printf("less than min, equal min, block %d, id is %d\r\n", bIdx, i+1);
}
else if (g_norParaBlockList[bIdx].norParaBlock.buff[i] > (*( g_norParaBlockList[bIdx].pParaList + maxOffset)) )
{
g_norParaBlockList[bIdx].norParaBlock.buff[i] = (*( g_norParaBlockList[bIdx].pParaList + maxOffset));
printf("more than max, equal max, block %d, id is %d\r\n", bIdx, i+1);
}
}
else if ((*(g_norParaBlockList[bIdx].pParaList + paratype)) == PTYPE_U)
{
if ((u32)g_norParaBlockList[bIdx].norParaBlock.buff[i] < (u32)(*(g_norParaBlockList[bIdx].pParaList + minOffset)) )
{
g_norParaBlockList[bIdx].norParaBlock.buff[i] = (*( g_norParaBlockList[bIdx].pParaList + minOffset));
printf("less than min, equal min, block %d, id is %d\r\n", bIdx, i+1);
}
else if ((u32)g_norParaBlockList[bIdx].norParaBlock.buff[i] > (u32)(*( g_norParaBlockList[bIdx].pParaList + maxOffset)) )
{
g_norParaBlockList[bIdx].norParaBlock.buff[i] = (*( g_norParaBlockList[bIdx].pParaList + maxOffset));
printf("more than max, equal max, block %d, id is %d\r\n", bIdx, i+1);
}
}
}
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>ij<EFBFBD><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
void CheckAParaRange(int bIdx, int id)
{
if (bIdx < 0 || bIdx >= MAX_PARA_BLOCK || g_norParaBlockList[bIdx].pParaList == NULL)
{
return;
}
if (id >= 0 && id < PARA_NUM_PER_BLK)
{
int paratype, minOffset, maxOffset; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>С<EFBFBD><D0A1><EFBFBD><EFBFBD>ֵָ<D6B5><D6B8>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD>
paratype = (id * 4);
minOffset = (id * 4 + 1);
maxOffset = (id * 4 + 2);
if ((*(g_norParaBlockList[bIdx].pParaList + paratype)) == PTYPE_S)
{
if (g_norParaBlockList[bIdx].norParaBlock.buff[id] < (*( g_norParaBlockList[bIdx].pParaList + minOffset)) )
{
g_norParaBlockList[bIdx].norParaBlock.buff[id] = (*( g_norParaBlockList[bIdx].pParaList + minOffset));
printf("less than min, equal min\r\n");
}
else if (g_norParaBlockList[bIdx].norParaBlock.buff[id] > (*( g_norParaBlockList[bIdx].pParaList + maxOffset)) )
{
g_norParaBlockList[bIdx].norParaBlock.buff[id] = (*( g_norParaBlockList[bIdx].pParaList + maxOffset));
printf("more than max, equal max\r\n");
}
}
else if ((*(g_norParaBlockList[bIdx].pParaList + paratype)) == PTYPE_U)
{
if ((u32)g_norParaBlockList[bIdx].norParaBlock.buff[id] < (u32)(*( g_norParaBlockList[bIdx].pParaList + minOffset)) )
{
g_norParaBlockList[bIdx].norParaBlock.buff[id] = (*( g_norParaBlockList[bIdx].pParaList + minOffset));
printf("less than min, equal min\r\n");
}
else if ((u32)g_norParaBlockList[bIdx].norParaBlock.buff[id] > (u32)(*( g_norParaBlockList[bIdx].pParaList + maxOffset)) )
{
g_norParaBlockList[bIdx].norParaBlock.buff[id] = (*( g_norParaBlockList[bIdx].pParaList + maxOffset));
printf("more than max, equal max\r\n");
}
}
}
}
// <20><>ȡһ<C8A1><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
s32 GetANorPara(int bIdx, int id)
{
if (bIdx < 0 || bIdx >= MAX_PARA_BLOCK )
{
return -1;
}
if (GetNorParaEn(bIdx) == PARA_VALID)
{
int idx = id - 1;
if (idx >= 0 && idx < PARA_NUM_PER_BLK)
{
return g_norParaBlockList[bIdx].norParaBlock.buff[idx];
}
}
return 0;
}
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B9A9><EFBFBD><EFBFBD><E6B9A6>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><C9BA>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD>
// ע:norflash<73><68><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5>д
void SetANorPara(int bIdx, int id, s32 val)
{
if (bIdx < 0 || bIdx >= MAX_PARA_BLOCK )
{
return;
}
char * pInfo = NULL;
int idx = id - 1;
if (idx >= 0 && idx < PARA_NUM_PER_BLK)
{
if ((*(g_norParaBlockList[bIdx].pParaList + idx*4)) == PTYPE_S)
{
s32 old;
pInfo = (g_norParaBlockList[bIdx].pParasName+(idx)*PARA_STR_LEN);
printf("set para block %d\r\n", bIdx+1);
old = g_norParaBlockList[bIdx].norParaBlock.buff[idx];
g_norParaBlockList[bIdx].norParaBlock.buff[idx] = val;
CheckAParaRange(bIdx, idx);
if (pInfo == NULL)
{
pInfo = "";
}
printf("%d. (%s) = %d, oldvalue=%d\r\n", (id), pInfo, val, old);
}
else
{
u32 old;
pInfo = (g_norParaBlockList[bIdx].pParasName+(idx)*PARA_STR_LEN);
printf("set para block %d\r\n", bIdx+1);
old = (u32)g_norParaBlockList[bIdx].norParaBlock.buff[idx];
g_norParaBlockList[bIdx].norParaBlock.buff[idx] = val;
CheckAParaRange(bIdx, idx);
if (pInfo == NULL)
{
pInfo = "";
}
printf("%d. (%s) = %d, oldvalue=%d\r\n", (id), pInfo, (u32)val, old);
}
}
}
/*
* p1 p2
* 1001 val // <20><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>1,<2C><><EFBFBD><EFBFBD>ID 1,<2C><><EFBFBD><EFBFBD>ֵval
* 1002 val // <20><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>1,<2C><><EFBFBD><EFBFBD>ID 2,<2C><><EFBFBD><EFBFBD>ֵval
......
* 2001 val // <20><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>2,<2C><><EFBFBD><EFBFBD>ID 1,<2C><><EFBFBD><EFBFBD>ֵval
* 2002 val // <20><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>2,<2C><><EFBFBD><EFBFBD>ID 2,<2C><><EFBFBD><EFBFBD>ֵval //<2F><><EFBFBD><EFBFBD><E1B9A9><EFBFBD><EFBFBD><E6B9A6>
......
* 101000 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1
* 102000 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2
*/
void SetPara(char * para1, char * para2)
{
int p1, p2, p3;
if (para1 == NULL || para2 == NULL)
{
return;
}
printf("para1=%s, para2=%s\r\n", para1, para2);
p1 = 0;
p2 = 0;
if (strcmp(para1, "") != 0)
{
p1 = atoi(para1);
}
if (strcmp(para2, "") != 0)
{
p2 = atoi(para2);
}
if (p1 == p2)
{
}
p3 = p1 / 1000; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>id
p1 = p1 % 1000; // <20><><EFBFBD><EFBFBD>id
// p2:<3A><><EFBFBD><EFBFBD>ֵ
if (p3 > 0 && p3 <= MAX_PARA_BLOCK)
{
SetANorPara(p3-1, p1, p2);
}
else if (p3 > 100 && p3 <= 116)
{
p3 -= 101;
printf("save block %d\r\n", p3+1);
SaveNorParas(p3);
}
}
/*
* p1 p2
* // <20><>ʾȫ<CABE><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* 1001 // <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1
* 2001 // <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2
* 1002 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD>Ĭ<EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD>
* 2002 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD>Ĭ<EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD>
* 1003 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD>¼<EFBFBD><C2BC>ز<EFBFBD><D8B2><EFBFBD>
* 2003 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD><32><EFBFBD>¼<EFBFBD><C2BC>ز<EFBFBD><D8B2><EFBFBD>
*/
void ShowPara(char * para1, char * para2)
{
int p1, p2, p3;
if (para1 == NULL || para2 == NULL)
{
return;
}
printf("para1=%s, para2=%s\r\n", para1, para2);
p1 = 0;
p2 = 0;
if (strcmp(para1, "") != 0)
{
p1 = atoi(para1);
}
if (strcmp(para2, "") != 0)
{
p2 = atoi(para2);
}
if (p1 == p2)
{
}
p3 = p1 / 1000; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>id
p1 = p1 % 1000; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// p2: <20><><EFBFBD><EFBFBD>ID
if (p3 <= MAX_PARA_BLOCK)
{
switch(p1)
{
case 0:
{
// <20><>ʾȫ<CABE><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
for (int j = 0; j < MAX_PARA_BLOCK; j++)
{
printf("\r\npara block %d:\r\n", j+1);
if (g_norParaBlockList[j].pParasName == NULL)
{
continue;
}
for(int i = 0; i < PARA_NUM_PER_BLK; i++)
{
char * pStr;
pStr = g_norParaBlockList[j].pParasName + (i*PARA_STR_LEN);
if (pStr == NULL)
{
pStr = "";
}
if ( strcmp(pStr, "") != 0 )
{
if ((*(g_norParaBlockList[j].pParaList+i*4)) == PTYPE_S)
{
printf("%d. (%s) val=%d, min=%d, max=%d, def=%d\r\n", i+1, pStr,
GetANorPara(j, i+1),
*(g_norParaBlockList[j].pParaList+ i*4+1),
*(g_norParaBlockList[j].pParaList+ i*4+2),
*(g_norParaBlockList[j].pParaList+ i*4+3) );
}
else
{
printf("%d. (%s) val=%d, min=%d, max=%d, def=%d\r\n", i+1, pStr,
(u32)GetANorPara(j, i+1),
(u32)(*(g_norParaBlockList[j].pParaList+ i*4+1)),
(u32)(*(g_norParaBlockList[j].pParaList+ i*4+2)),
(u32)(*(g_norParaBlockList[j].pParaList+ i*4+3)) );
}
}
DelayMs(1);
}
}
break;
}
case 1:
{
// <20><>ʾij<CABE><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
printf("\r\npara block %d:\r\n", p3);
if (g_norParaBlockList[p3-1].pParasName != NULL)
{
for(int i = 0; i < PARA_NUM_PER_BLK; i++)
{
char * pStr;
pStr = g_norParaBlockList[p3-1].pParasName + (i*PARA_STR_LEN);
if (pStr == NULL)
{
pStr = "";
}
if ( strcmp(pStr, "") != 0 )
{
if ((*(g_norParaBlockList[j].pParaList+i*4)) == PTYPE_S)
{
printf("%d. (%s) val=%d, min=%d, max=%d, def=%d\r\n", i+1, pStr,
GetANorPara(p3-1, i+1),
*(g_norParaBlockList[p3-1].pParaList+ i*4+1),
*(g_norParaBlockList[p3-1].pParaList+ i*4+2),
*(g_norParaBlockList[p3-1].pParaList+ i*4+3) );
}
else
{
printf("%d. (%s) val=%d, min=%d, max=%d, def=%d\r\n", i+1, pStr,
(u32)GetANorPara(p3-1, i+1),
(u32)(*(g_norParaBlockList[p3-1].pParaList+ i*4+1)),
(u32)(*(g_norParaBlockList[p3-1].pParaList+ i*4+2)),
(u32)(*(g_norParaBlockList[p3-1].pParaList+ i*4+3)) );
}
}
DelayMs(1);
}
}
break;
}
case 2:
{
int bidx = p3 - 1;
// <20><><EFBFBD><EFBFBD>Ĭ<EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD>
if (bidx >= 0)
{
printf("load def para block %d:\r\n", p3);
LoadNorDefPara(bidx);
}
break;
}
case 3:
{
int bidx = p3 - 1;
if (bidx >= 0)
{
printf("load para block %d:\r\n", p3);
// <20><><EFBFBD>¼<EFBFBD><C2BC>ز<EFBFBD><D8B2><EFBFBD>
LoadNorParas(bidx);
}
break;
}
default:
break;
}
}
}
#endif