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

📄 paramanage.c

📁 本程序是使用CDMA450模块开发的一个无线公话完整程序
💻 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 + -