欢迎来到虫虫下载站 | 资源下载 资源专辑 关于我们
虫虫下载站

sys.c

this the application program in uClinux must compliled under linux
C
字号:

/********************************************************************/
/*								    */
/********************************************************************/
#include <fcntl.h>
#include <stdio.h>
#include "api.h"
#include "posapi.h"
#include "dot.h"
#include "key.h"
#include <asm/MC68VZ328.h>



void  waitkey(void)
{
	int key;
	for(;;)
	{
		key = Key_WaitKey();
		if((key == KEYOK) || (key == KEYEXIT))
			break;
	}
}

/********************************************************************/
void  clear_screen(void)
{
	int i,fd;
	unsigned short lcd[9 * 128];

	fd = open("/dev/lcd",O_RDWR);
	if (fd < 0)
	{
		printf("\nCannot open /dev/lcd!");
		return;
	}
	for(i=0;i<9*128;i++)
		lcd[i] = 0;

	write(fd,lcd,9*128);
	close(fd);	
}

int  getpwd(unsigned char *string,int len,unsigned int point)
{
	int i,key,state = -1;

	unsigned char buf[256];


	if(len >250)  return -1;

	memset(string,0x20,len);

	buf[0]='[';
	buf[len + 1] = ']';
	buf[len + 2] = '\0';
	
	for(;;)
	{

		for(i=0;i<len;i++)
		{
			buf[i + 1] = 0x20;
			if(string[i] != 0x20)
			{
				buf[i + 1] = '*';
			}
	
		}

		putstring(buf,point);

		key = Key_WaitKey();
		if ((key< 0)   || (key == KEYEXIT))
			break;
		if ((key <= '9') && (key >= '0'))
		{
			for(i=0;i<len;i++)
			{
				if(string[i] == 0x20)
				{
					string[i] = key;
					break;
				}
			}
		}

		if (key == KEYDEL)
		{
			for(i=0;i<len;i++)
			{
				if (string[len-i-1] != 0x20)
				{
					string[len-i-1] = 0x20;
					break;
				}
			}
		}		
		if (key == KEYOK)
		{
			state = 0;
			break;
		}

	}
	return state;
} 

/********************************************************************/


int  getstring(unsigned char *string,int len,unsigned int point)
{
	int i,key,state = -1;

	unsigned char buf[256];

	
	if (len > 250)  return -1;
	

	memset(string,0x20,len);

	buf[0]='[';
	buf[len + 1] = ']';
	buf[len + 2] = '\0';
	
	for(;;)
	{
		memcpy(buf+1,string,len);

		putstring(buf,point);

		key = Key_WaitKey();
		if ((key< 0)   || (key == KEYEXIT))
			break;
		if ((key <= '9') && (key >= '0'))
		{
			for(i=0;i<len;i++)
			{
				if(string[i] == 0x20)
				{
					string[i] = key;
					break;
				}
			}
		}

		if (key == KEYDEL)
		{
			for(i=0;i<len;i++)
			{
				if (string[len-i-1] != 0x20)
				{
					string[len-i-1] = 0x20;
					break;
				}
			}
		}		
		if (key == KEYOK)
		{
			state = 0;
			break;
		}

	}
	return state;
} 

/********************************************************************/

void  TestRTC(void)
{
	unsigned char *ReadRTC  = "1 读取时钟";
	unsigned char *WriteRTC = "2 设置时钟";
	
	unsigned char *CurrentTime    = "当前时间:";

	unsigned char *SetDate     = "请设置日期(yymmdd):";
	unsigned char *SetTime     = "请设置时间(hhmmss):";

	unsigned char *date   = "    年  月  日";
	unsigned char *time   = "  时  分  秒";

	unsigned char InputKey[6],RTC[18];
	unsigned char *RTCIs = "03/09/10,00:00:00";

	unsigned char  *OpenErr		= "GPRS模块工作异常!";

	unsigned char *p;

	int fd,ret,key;

	unsigned char *string[2]={ReadRTC,WriteRTC};
	unsigned int  point[2] = {10 + 16 * 128,10 + 35 * 128};

	clear_screen();
	putstring("请稍候...",20 + 26 * 128);

	fd = open_GPRS();

	if (fd < 0)
	{

		putstring(OpenErr, 26 * 128);		
		printf("\nopen_GPRS error!\n");
		Key_WaitKey();

		return;
	}

	for(;;)
	{

		putscreen(string,point,2);
			
		do
		{
			key = Key_WaitKey();

			if ((key==KEYOK) || (key==KEYEXIT)) 
				break;
		}while ((key != KEY1) && (key != KEY2));
	
		if (key == KEYEXIT)
		{
			close(fd);
			return;
		}
		if ((key == KEY1) || (key == KEYOK))
		{

			gettime(fd,RTC);
			clear_screen();
			putstring(CurrentTime, + 13 * 128);
			putstring(RTC, 26 * 128);

			Key_WaitKey();		
		}
		else
		{
			clear_screen();
			putstring(SetDate,10);
			ret = getstring(InputKey,6,20 + 13 * 128);
			if (ret == 0)
			{
				p = RTCIs;
				memcpy(p,InputKey,2);
				p = p + 3;
				memcpy(p,InputKey + 2,2);
				p = p + 3;
				memcpy(p,InputKey + 4,2);
				
				putstring(SetTime,10 + 26 * 128);
				ret = getstring(InputKey,6,20 + 39 * 128);
			}
			if (ret == 0)
			{
				p = p + 3;
				memcpy(p,InputKey,2);
				p = p + 3;
				memcpy(p,InputKey + 2,2);
				p = p + 3;
				memcpy(p,InputKey + 4,2);

				printf("RTCIs = %s\n",RTCIs);
				settime(fd,RTCIs);						
			}
		
		}
   	}
}
//***********************************************************************
void  DownUser(void)
{
	BYTE_REF(0x007e0002) = 1;
	clear_screen();
	putstring("请稍候...",10 + 26 * 128);
}
//***********************************************************************
void  RemoveUser(void)
{	
	unsigned char *confirm="确定要删除应用程序?";
	unsigned char *select="1 取消   2 确定";
	int key;

	clear_screen();
	
	putstring(confirm,13 * 128);
	
	putstring(select,10 + 26 * 128);

	for(;;)
	{

		key = Key_WaitKey();
		if ((key == '1') || (key == KEYOK) || (key == KEYEXIT))
		{
			break;
		
		}
		if (key == '2')
		{
			BYTE_REF(0x007e0004) = 1;
			clear_screen();
			putstring("请稍候...",10 + 26 * 128);
			break;
		}
	}
}
//***********************************************************************
void  Reboot(void)
{
	BYTE_REF(0x007e0006) = 0;
	BYTE_REF(0x007e0008) = 0;
	BYTE_REF(0x007e000a) = 0;

	clear_screen();
	putstring("请稍候...",10 + 26 * 128);
}
//***********************************************************************
void  HardwareInfo(void)
{
	unsigned char  *cpu="处理器:MC68VZ328";
	unsigned char  *ram="内存:8M字节";
	unsigned char  *flash1="程序flash:4M字节";
	unsigned char  *flash2="数据flash:512K字节";
        unsigned char  *gprs="无线通讯模块";
	

	unsigned char *MENU[5]={cpu,ram,flash1,flash2,gprs};

	unsigned int point[5]={6,6+13*128,6+26*128,6 + 39*128,6 + 52 * 128};


	putscreen(MENU,point,5);
	waitkey();
	
}
//***********************************************************************
void  SoftwareInfo(void)
{
	clear_screen();
	putstring("嵌入式Linux",10 + 26 * 128);
	waitkey();
	
}
//***********************************************************************
void  ChangePwd(void)
{
	unsigned char *input ="输入新密码:";
	unsigned char *input2="再输入一次:";
	unsigned char *different="两次密码不同";
	unsigned char *setok="密码设置成功!";
	unsigned char *seterror="密码设置失败!";
	unsigned char InputPwd1[8],InputPwd2[8];

	clear_screen();
	putstring(input,10 + 6 * 128);
	if (getpwd(InputPwd1,8,10 + 19 * 128) != 0)
		return;
	putstring(input2,10 + 32* 128);
	if (getpwd(InputPwd2,8,10 + 45 * 128) != 0)
		return;

	clear_screen();
	if(memcmp(InputPwd1,InputPwd2,8) == 0)
	{

		if (Pwd_Set(InputPwd1) == 0)
		{
			putstring(setok,10 + 26 * 128);
		}
		else
		{
			putstring(seterror,10 + 26 * 128);
		}
	}
	else
	{
		putstring(different,10 + 20 * 128);
		putstring(seterror,10 + 33 * 128);
	}

	waitkey();
}

//***********************************************************************
void  sys(void)
{

	int key,flag;
	unsigned char *title 	="    系统模式" ;	//system mode
	unsigned char *down	= "1 下载程序";   	//down
	unsigned char *remove	= "2 清除程序";   	//remove
	unsigned char *restart	= "3 重起POS" ;  	//restart
	unsigned char *time	= "4 设置时钟";  	//clock
	unsigned char *hinfo	= "5 POS机硬件信息";    //hardware info.
	unsigned char *sinfo	= "6 POS机软件信息";    //software info.
	unsigned char *pwd	= "7 修改系统密码";	//change pwd

	unsigned char *MENU0[5]={title,down,remove,restart,time};
	unsigned char *MENU1[4]={title,hinfo,sinfo,pwd};

	unsigned int point[5]={10,10+13*128,10+26*128,10 + 39*128,10 + 52 * 128};

	int MenuNo =0;


	for(flag = 0;flag == 0;)
	{
		if(MenuNo == 0)
		{
			putscreen(MENU0,point,5);
		}
		else
		{
			putscreen(MENU1,point,4);
		}
		
		
		key = Key_WaitKey();
		
		switch(key)
		{

			case '1':
				DownUser();
				flag = 1;
				break;
			case '2':
				RemoveUser();
				MenuNo = 0;
				break;
			case '3':
				Reboot();
				flag = 1;
				break;
			case '4':
				TestRTC();
				MenuNo = 0;
				break;
			case '5':
				HardwareInfo();
				MenuNo = 1;
				break;
			case '6':
				SoftwareInfo();
				MenuNo = 1;
				break;
			case '7':
				ChangePwd();
				MenuNo = 1;
				break;
			case KEYUP:
				MenuNo = 0;
				break;

			case KEYDW:
				MenuNo = 1;
				break;
			default:
				break;
		}
		
		if(BYTE_REF(0x007e0004) == 1)
				break;
	}
}
//***********************************************************************
int  main(void)
{
	
	sys();
	reboot(0x1234567);

	return 0;
}


⌨️ 快捷键说明

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