📄 paramanage.c
字号:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include "datatype.h"
#include "flsblock.h"
#include "paramanage.h"
#include "flash.h"
#include "debug_out.h"
//#define MAX_PARA_IN_BLOCK 30
#define MAX_PARA_IN_BLOCK ((BLOCK_SIZE-sizeof(block_head_t))/sizeof(param_t)-1)
typedef struct {
BYTE *start; /* 参数存储在FLASH块的开始地址 */
WORD last; /* 最后位置 */
WORD block; /* 块号 */
} para_block_t;
static para_block_t gParaBlock;
param_t gDevicePara; /* 1800 bytes */
static void SetDefaultPara(void)
{
memset(&gDevicePara, 0, sizeof(param_t));
// gDevicePara.flag = 0xAA;
// gDevicePara.defPrior = 0xFF; /* 未定义 */
// gDevicePara.idleTime = 3; /* 分钟 */
// gDevicePara.ringType = 5;
// gDevicePara.ringVol = MAX_VOLUMN;
// gDevicePara.talkVol = MAX_VOLUMN;
gDevicePara.work.debug |= DM_RUNINFO;//输出调试信息
gDevicePara.work.debug |= DM_MODULEIN;// 0x02 /* 发送给模块的数据 */
gDevicePara.work.debug |= DM_MODULEOUT;// 0x04 /* 模块发送的数据 */
gDevicePara.sysdata.MICAGC=15;
gDevicePara.dev.RingVol=3;//默认3
gDevicePara.dev.SmsLifetime=7; //一天 SmsLifet
//yu add
strcpy(gDevicePara.dev.devicePwd, "1234");
gDevicePara.dev.contrast=0x30;
gDevicePara.dev.idleTime=5;//s
//=0 禁止=TRUE启用or 允许
//gDevicePara.factoryData.Serve_ID [8];
//gDevicePara.factoryData.Sim_LOCK;//默认禁止
gDevicePara.factoryData.Auto_PIN=TRUE;//默认启用
//gDevicePara.factoryData.Language;
//====================
strcpy(gDevicePara.factoryData.Logo[0].LogoID,"46003");
strcpy(gDevicePara.factoryData.Logo[0].LogoName,"中国联通") ;
strcpy(gDevicePara.factoryData.Logo[LOGOMAX].LogoID,"0");
strcpy(gDevicePara.factoryData.Logo[LOGOMAX].LogoName," ") ;
//====================
//gDevicePara.sysdata.area[8]; //
strcpy (&gDevicePara.sysdata.D112[0][0],"112");
strcpy (&gDevicePara.sysdata.D112[1][0],"195");
strcpy (&gDevicePara.sysdata.D112[2][0],"198");
strcpy (&gDevicePara.sysdata.D112[3][0],"199");
strcpy (&gDevicePara.sysdata.D112[4][0],"189");
strcpy (&gDevicePara.sysdata.D112[5][0],"060");
strcpy (&gDevicePara.sysdata.D112[6][0],"911");
//gDevicePara.sysdata.D112[10][5];//紧急呼叫号码10个
//默认112
//gDevicePara.sysdata.checkArea;//默认禁止
//gDevicePara.sysdata.baseArea[3][8];//基站区号3个
//gDevicePara.sysdata.baseNum[30][8];//基站编码30个
//gDevicePara.sysdata.en_MobileAreaIP;//异地号码加IP头;
gDevicePara.sysdata.en_RecieveCAll = TRUE;//默认允许
//memset(&gDevicePara.Callastrict,0,sizeof(part_astrict_t));//呼叫限制参数
//====================
//memset(&gDevicePara.AlarmClk,0,sizeof(part_AlarmClock_t));//闹钟清零
//====================
//memset(&gDevicePara.AllTKtimeRec,0,sizeof(part_AllTKtimeRec_t));//通话记录初始化
//====================
}
run_control_t gRunParam;
void InitParaData(void)
{
// int num;
BYTE *pos;
// num = sizeof(param_t);
SetDefaultPara();
gParaBlock.block = CONFIG_BLOCK;
pos = (BYTE*)FBgetPhiAddr(CONFIG_BLOCK);
if (pos == NULL) {
FlashNewBlankBlock(CONFIG_BLOCK);
gParaBlock.last = 0;
gParaBlock.start= (BYTE*)FBgetPhiAddr(CONFIG_BLOCK);
Para_Store(&gDevicePara);
return;
}
else {
gParaBlock.start = pos;
gParaBlock.last = 0;
while (1) {
Flash_Read(pos, &gDevicePara, sizeof(param_t));
if (gDevicePara.dev.flag == (char)0xFF)
break;
gParaBlock.last++;
pos += sizeof(param_t);
if (gParaBlock.last > MAX_PARA_IN_BLOCK) {
FlashDevLogicBlockDel(CONFIG_BLOCK);
FlashNewBlankBlock(CONFIG_BLOCK);
gParaBlock.last = 0;
gParaBlock.start= (BYTE*)FBgetPhiAddr(CONFIG_BLOCK);
Para_Store(&gDevicePara);
return;
}
}
if (gParaBlock.last == 0) {
Para_Store(&gDevicePara);
}
else {
pos -= sizeof(param_t);
Flash_Read(pos, &gDevicePara, sizeof(param_t));
if (gDevicePara.dev.flag != (char)0xAA) {
Para_Store(&gDevicePara);
}
}
}
debug_print_str(DM_RUNINFO, (info_buffer, "InitSmsData MAX_PARA_IN_BLOCK=%d,sizeof(PHONE_CARD)=%d",MAX_PARA_IN_BLOCK,sizeof(param_t)));
// strcpy(gDevicePara.dev.devicePwd, "123456"); ???
}
int Para_Store(param_t *para)
{
BYTE *pBlock;
WORD block;
para->dev.flag = (char)0xAA;
if (gParaBlock.last >= MAX_PARA_IN_BLOCK) {
pBlock = (BYTE*)FlashNewBlock(&block);
if (pBlock == NULL)
return -1;
Flash_Write(pBlock, para, sizeof(param_t));
WriteBlockHeadOK(pBlock, CONFIG_BLOCK); /* 写头 */
FB_EraseBlock((char*)gParaBlock.start); /*delete old */
gParaBlock.start = pBlock;
gParaBlock.last = 1;
replacePhiBlock(CONFIG_BLOCK, block);
}
else {
pBlock = gParaBlock.start + gParaBlock.last * sizeof(param_t);
Flash_Write(pBlock, para, sizeof(param_t));
if (gParaBlock.last) {
param_t tmpParam_t;
memset(&tmpParam_t,0,sizeof(param_t)); //para->dev.flag = 0x00;
pBlock -= sizeof(param_t);
Flash_Write(pBlock, &tmpParam_t, sizeof(param_t));
}
gParaBlock.last++;
}
if (para != &gDevicePara)
memcpy(&gDevicePara, para, sizeof(param_t));
return 0;
}
int Para_Restore(param_t *para)
{
BYTE *pBlock;
pBlock = gParaBlock.start + (gParaBlock.last-1) * sizeof(param_t);
Flash_Read(pBlock, para, sizeof(param_t));
return 0;
}
void Para_SetToDefault(void)
{
SetDefaultPara();
Para_Store(&gDevicePara);
}
/*
void Para_TEST_fLASH(void)
{
static int number=0;
int adloop;
int ret;
for(adloop=0;adloop<10;adloop++)
{
gDevicePara.sysdata.bak=number;
number++;
ret=Para_Store(&gDevicePara);
debug_print_str(DM_RUNINFO, (info_buffer, "number=%d; ret= %d", number,ret));
}
}*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -