sys.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 + -