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

📄 set_safe.c

📁 本程序是使用CDMA450模块开发的一个无线公话完整程序
💻 C
字号:
#ifdef  _MNT_
  #include <assert.h>
#else
  #define  assert(x)
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "datatype.h"
#include "mmalloc.h"
#include "at.h"
#include "METAWNDO1.H"
#include "para_def.h"
#include "paramanage.h"
#include "windows.h"

#include "translate.h"

#include "Message.h"
#include "debug_out.h"
#define  COMPILE_OK  1
#define  COMPILING	 0

void Waiting(int);
#if COMPILE_OK

#define  MAX_CFG_ITEM    3 // 5
const static char *cfgName[] = {
	"关闭PIN码保护",//已经翻译
	"开启PIN码保护",
	"修改PIN码",

	//"修改话机密码",
	//"开启密码保护",
	//"关闭密码保护",
};

typedef struct {
	window_t	wnd;
	listbox_t	lbox;
	int			sel;
} cfg_param_t;
cfg_param_t	*gCfgParamWnd;

static int OnDrawMainItem(listbox_t *lb, rect *rc, int num)
{
	if (num >= MAX_CFG_ITEM)
		return -1;
	
	MoveTo(rc->Xmin + 2, rc->Ymax);
	if (num == 4) {
		if (gDevicePara.dev.openGuard != 0)
			num = 5;
	}
	DrawString((BYTE*)TranslateChar(cfgName[num]));
	return 0;
}

static int cfgMainProc(XMSG *msg)
{
	switch (msg->message) {
	case MSG_KEYDOWN:
		switch (msg->param1) {
		case KEY_UP:
		case KEY_DOWN:
			XListBoxKeyHandle(&gCfgParamWnd->lbox, msg->param1);
			v_WriteLcdBuff();
			break;
		//case KEY_MENU://yu add 1
		case KEY_OK:
			gCfgParamWnd->sel = XListBoxGetSelect(&gCfgParamWnd->lbox);
			XPostQuitMessage(&gCfgParamWnd->wnd);
			break;
		case KEY_CANCEL:
			gCfgParamWnd->sel = -1;
			XPostQuitMessage(&gCfgParamWnd->wnd);
			break;
		}
		break;
		default:
			XDefaultWindowProc(msg);
			break;
	}
	return 0;
}

static int cfgMainWnd(int defsel)
{
	rect		area;
	XMSG		msg;
	int			ret;
	
	gCfgParamWnd = (cfg_param_t*)malloc(sizeof(cfg_param_t));
	if (NULL == gCfgParamWnd)
		return -1;
	
	SetRect(&area, 0, LCD_ICONEND+1, LCD_WIDTH-1, LCD_HEIGHT-1);
	XCreateWindow(NULL, &gCfgParamWnd->wnd, &area, NULL, cfgMainProc, FALSE);
	
	XCreateListBox(&gCfgParamWnd->wnd.comp, \
		&gCfgParamWnd->lbox, &area, \
		MAX_CFG_ITEM, HZ_MAIN, OnDrawMainItem);
	XListBoxSetCurrent(&gCfgParamWnd->lbox, defsel);
	
	XShowComponent(&gCfgParamWnd->wnd.comp);
	v_WriteLcdBuff();
	
	gCfgParamWnd->sel = -2;
	while (XGetMessage(&msg) != -1)
		XDispatchMessage(&msg);
	
	XDestroyWindow(&gCfgParamWnd->wnd);
	
	ret = gCfgParamWnd->sel;
	
	free(gCfgParamWnd);
	gCfgParamWnd = NULL;
	return ret;
}

/*--------------------------------------*/ 
#endif



static void showCmdResult(int id)
{
	if (id == 0)
		XTipWndShow(TranslateChar("操作成功"),1);
	else
		XTipWndShow(TranslateChar("操作失败"),1);
}
static void configPinStatus(int id)
{
	int		ret;
	rect	area;
	char	pin[8];

	memset(pin, 0, 8);
	SetRect(&area, 10, LCD_ICONEND+2, LCD_WIDTH-10, LCD_HEIGHT-17);
	ret = InputLine(&area, TranslateChar("输入PIN码"), (BYTE*)pin, 4, INPUT_DIGITAL | INPUT_FIXED | INPUT_PWD);
	if (ret < 0)
		return;

	ret = AT_SetPinStatus(pin, id);
	showCmdResult(ret);
}

static void changePinCode(void)
{
	int		ret;
	rect	area;
	char	oldpin[8], newpin[8],newpin2[8];
	
	memset(oldpin, 0, 8);
	memset(newpin, 0, 8);
	memset(newpin2, 0, 8);
	SetRect(&area, 10, LCD_ICONEND+2, LCD_WIDTH-10, LCD_HEIGHT-17);
	ret = InputLine(&area, TranslateChar("旧的PIN码"), (BYTE*)oldpin, 4, INPUT_DIGITAL | INPUT_FIXED | INPUT_PWD);
	if (ret < 0)
		return;
	
	ret = InputLine(&area, TranslateChar("新的PIN码"), (BYTE*)newpin, 4, INPUT_DIGITAL | INPUT_FIXED | INPUT_PWD);
	if (ret < 0)
		return;
	ret = InputLine(&area, TranslateChar("再次输入"), (BYTE*)newpin2, 4, INPUT_DIGITAL | INPUT_FIXED | INPUT_PWD);
	if (ret < 0)
		return;
	if(0 != strcmp(newpin,newpin2))
		{
		XTipWndShow(TranslateChar("密码不一致"),1);
		return ;
		}

	ret = AT_ChangePwd(oldpin, newpin);
	showCmdResult(ret);
}

int checkPassword(void)
{
	int		ret;
	rect	area;
	char	oldpwd[8];
	
	memset(oldpwd, 0, 8);
	
//	debug_out_str(DM_RUNINFO, "\ngDevicePara.dev.devicePwd=");
//	debug_out_str(DM_RUNINFO, gDevicePara.dev.devicePwd);
	
	SetRect(&area, 10, LCD_ICONEND+2, LCD_WIDTH-10, LCD_HEIGHT-17);
	ret = InputLine(&area, TranslateChar("请输入密码"), (BYTE*)oldpwd, 6, INPUT_DIGITAL | INPUT_FIXED | INPUT_PWD);
	if (ret < 0)
		return -1;
//	debug_out_str(DM_RUNINFO, "\noldpwd=");
//	debug_out_str(DM_RUNINFO, oldpwd);
	
	if (strcmp(oldpwd, gDevicePara.dev.devicePwd) != 0) {
		XTipWndShow(TranslateChar("密码错误"),1);
		return -1;
	}
	return 0;
}

int setNewPassword(char *pwd)
{
	int		ret;
	rect	area;
	char	newpwd[8], cfmpwd[8];
	
	memset(newpwd, 0, 8);
	memset(cfmpwd, 0, 8);
	
	SetRect(&area, 10, LCD_ICONEND+2, LCD_WIDTH-10, LCD_HEIGHT-17);
redo:
	ret = InputLine(&area, TranslateChar("输入新密码"), (BYTE*)newpwd, 6, INPUT_DIGITAL | INPUT_FIXED | INPUT_PWD);
	if (ret < 0)
		return -1;
	
	if (*newpwd == 0) 
		goto redo;
	
	ret = InputLine(&area, TranslateChar("再次输入"), (BYTE*)cfmpwd, 6, INPUT_DIGITAL | INPUT_FIXED | INPUT_PWD);
	if (ret < 0)
		return -1;
	
	if (strcmp(newpwd, cfmpwd) != 0) {
		XTipWndShow(TranslateChar("密码不一致"),1);
		return -1;
	}
	strcpy(pwd, newpwd);
	return 0;
}

int Safe_Config(void *argv)
{
	int		selMenu,id = 1;
	selMenu=0;
	while (id) {
		id = cfgMainWnd(selMenu);
		if (id < 0)
			break;
		selMenu = id;

		if(id<3)
		{
		if((1==gDevicePara.factoryData.Sim_LOCK)||(1==gDevicePara.factoryData.Auto_PIN))
			id=100;
		}
		switch (id) {
//------------			
		case 0:
		case 1:
			configPinStatus(id);
//			v_WriteLcdBuff();
			id=1;
			break;
		case 2:
			changePinCode();
//			v_WriteLcdBuff();
			id=1;
			break;
//------------			
/*		case 3:
			changeDevPwd();
			id=1;
			break;
		case 4:
			passwordActive();
			id=1;
			break;
*/			
		case 100:
			XTipWndShow(TranslateChar("禁止操作"),1);
			id=1;
			break;
		default:
			id = 0;
			break;
		}
		id = 1;
	}
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -