📄 public.c.bak
字号:
#include <api.h>
#include <console.h>
#include <mifare530.h>
#include "CPOS.h"
void CheckBatteryStatus()
{
unsigned short shBatteryLevel;
unsigned short shPower[]=
{
0x42,0x4A,0x52,0x5A,0x61,0x68,0x6F,0x76,0x7D,0x83,
0x89,0x8F,0x95,0x9B,0xA0,0xA6,0xAB,0xB0//,0xB5,0xBA,
// 0xBF,0xC3,0xC8,0xCC,0xD1,0xD5,0xD9,0xDD,0xE1,0xE5,
// 0xE9,0xED,0xF1,0xF5,0xF8,0xFC,0xFFFF
};
unsigned char i, j;
shBatteryLevel = BATT_check_level();
j = 0;
for(i=0;i<sizeof(shPower)/2-1;i++)
{
if(shBatteryLevel>=shPower[i])
j ++;
}
BATT_set_sys_level(10*j/sizeof(shPower));
}
unsigned char CheckPOSStatus(unsigned char cRFStatus)
{
unsigned char cChargerStatus;
Disp_icon_customize(DISP_ICON_C_CONNECT|DISP_ICON_C_ANTENNA);
Disp_init(DISP_INIT_ON);
// clr_scr();
Disp_icon_read((unsigned long *)gcIconData);
cChargerStatus = Charger_state();
if (cChargerStatus == 0)
{
gcIconData[ICON_LINK_SEG] &= ICON_LINK_MASK;
}
else
{
gcIconData[ICON_LINK_SEG] |= ICON_LINK;
}
if (cRFStatus == 0)
{
gcIconData[ICON_ANTENNA_SEG] &= ICON_ANTENNA_MASK;
}
else if(cRFStatus == 1)
{
gcIconData[ICON_ANTENNA_SEG] |= ICON_ANTENNA;
}
Disp_icon_set((unsigned long *)gcIconData);
return cChargerStatus;
}
void delay_n_ms(int mscnt)
{
for(;mscnt>0;mscnt--)
delay_1ms();
}
void DebugString(unsigned char *cBuffer)
{
unsigned char cUARTBuffer[300];
unsigned char cLength;
memset(cUARTBuffer,0,sizeof(cUARTBuffer));
cLength = strlen(cBuffer);
memcpy(cUARTBuffer, cBuffer, cLength);
UART_init(UART_232_ON | UART_ON | UART_8_DATA_BITS | UART_BAUD_115200);
UART_fcntl(UART_fcntl(UART_F_INQ) | UART_F_NO_CTS);
delay_n_ms(3);
cUARTBuffer[cLength+1] = '\n';
UART_puts(cUARTBuffer, cLength+1);
UART_disconnect();
getch();
}
void DebugBCD(unsigned char *cValueName, unsigned char *cBuffer, unsigned int iLength)
{
unsigned char cUARTBuffer[300];
unsigned int i, s;
memset(cUARTBuffer,0,sizeof(cUARTBuffer));
s = strlen(cValueName);
memcpy(cUARTBuffer, cValueName, s);
cUARTBuffer[s] = ':';
cUARTBuffer[s+1] = ' ';
s+=2;
for(i=0;i<iLength;i++)
{
sprintf(cUARTBuffer+s+2*i, "%02x", cBuffer[i]);
}
DebugString(cUARTBuffer);
}
void DebugInt(unsigned char *cValueName, unsigned int iValue)
{
unsigned char cUARTBuffer[300];
memset(cUARTBuffer,0,sizeof(cUARTBuffer));
sprintf(cUARTBuffer, "%s:%d", cValueName, iValue);
DebugString(cUARTBuffer);
}
void DebugLong(unsigned char *cValueName, unsigned long lValue)
{
unsigned char cUARTBuffer[300];
memset(cUARTBuffer,0,sizeof(cUARTBuffer));
sprintf(cUARTBuffer, "%s:%ld", cValueName, lValue);
DebugString(cUARTBuffer);
}
unsigned char cStringBuffer[200];
unsigned char *BCD2ASC(unsigned char *strBCD, unsigned char cLenBCD)
{
unsigned char i;
memset(cStringBuffer, 0, sizeof(cStringBuffer));
for(i=0;i<cLenBCD;i++)
{
cStringBuffer[i+i] = (*(strBCD+i))>>4;
cStringBuffer[i+i+1] = (*(strBCD+i))&0x0f;
}
for(i=0;i<cLenBCD*2;i++)
{
if (cStringBuffer[i] < 10)
cStringBuffer[i] += '0';
else
cStringBuffer[i] = cStringBuffer[i] + 'A' - 10;
}
return cStringBuffer;
}
unsigned char *ASC2BCD(unsigned char *strASC, unsigned char cLenASC)
{
unsigned char i, tmpbuff[200];
memset(cStringBuffer, 0, sizeof(cStringBuffer));
memcpy(tmpbuff, strASC, cLenASC);
for(i=0;i<cLenASC;i++)
{
if ((tmpbuff[i] >= '0') && (tmpbuff[i] <= '9'))
*(tmpbuff+i) -= '0';
else if ((tmpbuff[i] >= 'a') && (tmpbuff[i] < 'g'))
*(tmpbuff+i) = *(tmpbuff+i) - 'a' + 10;
else if ((tmpbuff[i] >= 'A') && (tmpbuff[i] < 'G'))
*(tmpbuff+i) = *(tmpbuff+i) - 'A' + 10;
}
for(i=0;i<cLenASC;i+=2)
{
cStringBuffer[i/2] = (*(tmpbuff+i))<<4;
cStringBuffer[i/2] += (*(tmpbuff+i+1))&0x0f;
}
return cStringBuffer;
}
unsigned char IsValidDate(unsigned char *DateTime)
{
unsigned char time[7], i;
unsigned char DayPerMonth[12] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
for(i=0;i<7;i++)
{
time[i] = (DateTime[i]>>4)*10 + (DateTime[i]&0x0f);
}
if(time[0]> 99) return 0;
if((time[0] == 20) && (time[1] < 2)) return 0;
if(time[1]> 99) return 0;
if((time[2]> 12)||(time[2] == 0)) return 0;
if((time[3]> DayPerMonth[time[2]-1])||(time[3] == 0)) return 0;
if(time[4]> 24) return 0;
if(time[5]> 60) return 0;
if(time[6]> 60) return 0;
return 1;
}
unsigned char CompareDate(unsigned char* cDate1, unsigned char* cDate2)
{
unsigned char i;
unsigned char buf1[5], buf2[5];
for(i=0;i<4;i++)
{
buf1[i] = (cDate1[i] >> 4) * 10 + (cDate1[i] & 0x0f);
buf2[i] = (cDate2[i] >> 4) * 10 + (cDate2[i] & 0x0f);
}
for(i=0;i<4;i++)
{
if (buf1[i] < buf2[i])
return 0;
else if (buf1[i] > buf2[i])
return 2;
}
return 1;
}
//显示菜单
//
//
unsigned char SelectMenu(unsigned char *strMenuHead,unsigned char *strMenuItem[],unsigned char cMenuNum,unsigned char *cMenuPosition)
{
unsigned char cPressKey,h=0,cState=1,i,cTop;
set_console_chinese();
set_normal_disp();
if(*strMenuHead) h=1;
for(;;)
{
if(cState)
{
cState=0;
clr_scr();
set_console_chinese();
set_normal_disp();
if(h)
{
move_cursor(0,0);
puts(strMenuHead);
}
cTop=((*cMenuPosition/(4-h))*(4-h));
for(i=cTop;i<cTop+4-h;i++)
if(i<cMenuNum)
{
move_cursor(0,2*((i-cTop)+h));
puts(strMenuItem[i]);
}
}
i=((*cMenuPosition)%(4-h));
set_inversed_disp();
move_cursor(0,2*(i+h));
puts(strMenuItem[*cMenuPosition]);
cPressKey = getch();
set_normal_disp();
move_cursor(0,2*(i+h));
puts(strMenuItem[*cMenuPosition]);
switch(cPressKey)
{
case KEY_CLR:
return cPressKey;
case KEY_AUX4:
if(*cMenuPosition)
{
(*cMenuPosition)--;
if(((*cMenuPosition)%(4-h))==(3-h))
cState=1;
}
else
{
(*cMenuPosition) = cMenuNum-1;
cState=1;
}
break;
case KEY_AUX3:
if(*cMenuPosition<(cMenuNum-1))
{
(*cMenuPosition)++;
if(((*cMenuPosition)%(4-h))==0)
cState=1;
}
else
{
(*cMenuPosition) = 0;
cState=1;
}
break;
case KEY_ENTER:
return KEY_ENTER;
break;
default:
if(cPressKey<=cMenuNum)
{
(*cMenuPosition) = cPressKey - 1;
return KEY_ENTER;
}
break;
}
}
}
unsigned char DisplayReport(unsigned char *strReportHead,unsigned char *strReportItem[],unsigned char cReportNum,unsigned char *cReportPosition)
{
unsigned char i, cPressKey;
set_console_chinese();
do
{
clr_scr();
move_cursor(0,0);
set_inversed_disp();
puts(strReportHead);
set_normal_disp();
for(i=0;i<3;i++)
{
if(strReportItem[i+(*cReportPosition)] == 0 )
break;
move_cursor(0, 2*(i+1));
puts(strReportItem[i+(*cReportPosition)]);
}
cPressKey = getch();
if(cPressKey==KEY_AUX4)
{
if ((*cReportPosition)>0)
*cReportPosition = *cReportPosition - 1;
else
// *cReportPosition = cReportNum - 1;
break;
}
else if(cPressKey==KEY_AUX3)
{
if ((*cReportPosition)<(cReportNum-1))
*cReportPosition = *cReportPosition + 1;
else
// *cReportPosition = 0;
break;
}
else if((cPressKey==KEY_F1)||(cPressKey==KEY_F2))
break;
}while((cPressKey!=KEY_CLR)&&(cPressKey!=KEY_ENTER));
return cPressKey;
}
void OverTurnString(void *strTarge, void *strSource, unsigned char cLength)
{
unsigned char i;
for(i=0;i<cLength;i++)
*((unsigned char*)strTarge+i) = *((unsigned char*)strSource+cLength-1-i);
}
void ErrorMsg(unsigned char ErrorNo)
{
unsigned char strErrorMessage1[64];
unsigned char strErrorMessage2[64];
memset(strErrorMessage1,0,sizeof(strErrorMessage1));
memset(strErrorMessage2,0,sizeof(strErrorMessage2));
switch(ErrorNo)
{
case ERR_MIF_AUTEN://M1密码认证错误
strcpy(strErrorMessage1, "M1密码认证错误");
break;
case ERR_MIF_READ://M1读卡错误
strcpy(strErrorMessage1, "M1读卡错误");
break;
case ERR_MIF_WRITE://M1写卡错误
strcpy(strErrorMessage1, "M1写卡错误");
break;
case ERR_MIF_INBLACK://M1卡号在黑名单上
strcpy(strErrorMessage1, "M1卡号在黑名单");
strcpy(strErrorMessage2, "上");
break;
case ERR_COM_TIMEOUT://超时错误
strcpy(strErrorMessage1, "超时错误");
break;
case ERR_COM_SEND://发送命令错误
strcpy(strErrorMessage1, "发送命令错误");
break;
case ERR_CHG_CANNOTCHARGEN://无法冲正
strcpy(strErrorMessage1, "无法冲正");
break;
case ERR_CHG_FULLEEPROM://存储区满
strcpy(strErrorMessage1, "存储区满");
break;
case ERR_CHG_READEEPROM://读存储区错误
strcpy(strErrorMessage1, "读存储区错误");
break;
case ERR_CHG_WRITEEEPROM://写存储区错误
strcpy(strErrorMessage1, "写存储区错误");
break;
case ERR_PSAM_PINAUTH://SAM卡PIN认证错误
strcpy(strErrorMessage1, "SAM卡PIN认");
strcpy(strErrorMessage2, "证错误");
break;
case ERR_PSAM_AUTHEN://SAM卡认证出错
strcpy(strErrorMessage1, "SAM卡认证出错");
break;
case ERR_PSAM_FUNC://SAM卡功能不支持
strcpy(strErrorMessage1, "SAM卡功能不支");
strcpy(strErrorMessage2, "持");
break;
case ERR_PSAM_SPKEY://SAM卡密钥索引不支持
strcpy(strErrorMessage1, "SAM卡密钥索引");
strcpy(strErrorMessage2, "不支持");
break;
case ERR_POS_GETCARDINFO://读卡信息错
strcpy(strErrorMessage1, "读卡信息错");
break;
case ERR_POS_NOTSAMECARD://非同一张卡
strcpy(strErrorMessage1, "非同一张卡");
break;
case ERR_POS_NOTCHKSERBL://未检查服务器黑名单
strcpy(strErrorMessage1, "未检查服务器黑名");
strcpy(strErrorMessage2, "单");
break;
case ERR_POS_INSERVERBL://存在于服务器黑名单内
strcpy(strErrorMessage1, "存在于服务器黑名");
strcpy(strErrorMessage2, "单内");
break;
case ERR_POS_NOTCUMSCARD://非同一张卡
strcpy(strErrorMessage1, "非同一张卡");
break;
case ERR_POS_BLCARD://黑名单卡
strcpy(strErrorMessage1, "黑名单卡");
break;
case ERR_POS_CARDNOTSTART://卡未启用
strcpy(strErrorMessage1, "卡未启用");
break;
case ERR_POS_OUTOFLIMIT://卡过期
strcpy(strErrorMessage1, "卡过期");
break;
case ERR_POS_FULLTIMESBLOCK://月票充次时无空块储存
strcpy(strErrorMessage1, "月票充次时无空块");
strcpy(strErrorMessage2, "储存");
break;
case ERR_POS_RECHARGETIMES://月票充次时该月已经充了月票
strcpy(strErrorMessage1, "月票充次时该月已");
strcpy(strErrorMessage2, "经充了月票");
break;
case ERR_POS_DISCHARGETIMES://月票冲正时该月未充月票
strcpy(strErrorMessage1, "月票冲正时该月未");
strcpy(strErrorMessage2, "充月票");
break;
case ERR_POS_WRITECHRSTEP://写交易进程标记出错
strcpy(strErrorMessage1, "写交易进程标记出");
strcpy(strErrorMessage2, "错");
break;
case ERR_POS_WRITECHRPOINT://写交易指针出错
strcpy(strErrorMessage1, "写交易指针出错");
break;
case ERR_POS_COPYTO2BLOCK://复制正本到副本出错
strcpy(strErrorMessage1, "复制正本到副本出");
strcpy(strErrorMessage2, "错");
break;
case ERR_POS_MODIFYMONEY://充值或冲正时改变钱包出错
strcpy(strErrorMessage1, "充值或冲正时改变");
strcpy(strErrorMessage2, "钱包出错");
break;
case ERR_POS_BUILDRECORD://写记录出错
strcpy(strErrorMessage1, "写记录出错");
break;
case ERR_POS_TIMESPARM://充次时的参数出错
strcpy(strErrorMessage1, "充次时所选月份小");
strcpy(strErrorMessage2, "于当前月");
break;
case ERR_POS_NOCARD://无卡
strcpy(strErrorMessage1, "无卡");
break;
case ERR_POS_NOTWHITECARD://非白卡
strcpy(strErrorMessage1, "非白卡");
break;
case ERR_POS_CARDALRSTART://卡已经启用
strcpy(strErrorMessage1, "卡已经启用");
break;
case ERR_POS_MODIFYSTARTFLAG://修改卡启用标记错误
strcpy(strErrorMessage1, "修改卡启用标记错");
strcpy(strErrorMessage2, "误");
break;
case ERR_POS_ALREADYBLCARD://该卡已经是黑名单卡
strcpy(strErrorMessage1, "该卡已经是黑名单");
strcpy(strErrorMessage2, "卡");
break;
case ERR_POS_NOTBLCARD://不是黑名单卡
strcpy(strErrorMessage1, "不是黑名单卡");
break;
case ERR_POS_UNKOWNCMD://无效命令
strcpy(strErrorMessage1, "无效命令");
break;
case ERR_POS_BLISFULL://黑名单数溢出
strcpy(strErrorMessage1, "黑名单数溢出");
break;
case ERR_POS_HAVENTTIMESBLK://无月票区
strcpy(strErrorMessage1, "无月票区");
break;
case ERR_POS_ERRORPARM://错误参数
strcpy(strErrorMessage1, "错误参数");
break;
case ERR_POS_ERRORCHKCARD://验卡错误
strcpy(strErrorMessage1, "验卡错误");
break;
case ERR_POS_ALREADYAUTH://设备已经认证
strcpy(strErrorMessage1, "设备已经认证");
break;
case ERR_POS_NOAUTHREQUEST://没有收到认证请求
strcpy(strErrorMessage1, "没有收到认证请求");
break;
case ERR_POS_NOTSAMERANDOM://数据与随机数不匹配
strcpy(strErrorMessage1, "数据与随机数不匹");
strcpy(strErrorMessage2, "配");
break;
case ERR_POS_GETRANDOM://取随机数错误
strcpy(strErrorMessage1, "取随机数错误");
break;
case ERR_POS_DEVICENOTAUTH://设备未认证
strcpy(strErrorMessage1, "设备未认证");
break;
case ERR_POS_LIMITDATE://错误的有效期数据
strcpy(strErrorMessage1, "错误的有效期数据");
break;
case ERR_POS_SAMELIMITDATE://相同的有效期数据
strcpy(strErrorMessage1, "相同的有效期数据");
break;
case ERR_POS_MUCHMOREMONEY://充值数值太大
strcpy(strErrorMessage1, "充值数值太大");
break;
default:
memcpy(strErrorMessage1, "未知错误", 9);
memcpy(strErrorMessage1+8, BCD2ASC(&ErrorNo, 1), 2);
strErrorMessage1[10] = 0;
break;
}
clr_scr();
set_inversed_disp();
move_cursor(0,0);
puts("错误:");
set_normal_disp();
move_cursor(0,2);
puts(strErrorMessage1);
move_cursor(0,4);
puts(strErrorMessage2);
move_cursor(0,6);
puts("按任意键返回");
getch();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -