?? 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://發(fā)送命令錯誤
strcpy(strErrorMessage1, "發(fā)送命令錯誤");
break;
case ERR_CHG_CANNOTCHARGEN://無法沖正
strcpy(strErrorMessage1, "無法沖正");
break;
case ERR_CHG_FULLEEPROM://存儲區(qū)滿
strcpy(strErrorMessage1, "存儲區(qū)滿");
break;
case ERR_CHG_READEEPROM://讀存儲區(qū)錯誤
strcpy(strErrorMessage1, "讀存儲區(qū)錯誤");
break;
case ERR_CHG_WRITEEEPROM://寫存儲區(qū)錯誤
strcpy(strErrorMessage1, "寫存儲區(qū)錯誤");
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://未檢查服務(wù)器黑名單
strcpy(strErrorMessage1, "未檢查服務(wù)器黑名");
strcpy(strErrorMessage2, "單");
break;
case ERR_POS_INSERVERBL://存在于服務(wù)器黑名單內(nèi)
strcpy(strErrorMessage1, "存在于服務(wù)器黑名");
strcpy(strErrorMessage2, "單內(nèi)");
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://月票充次時該月已經(jīng)充了月票
strcpy(strErrorMessage1, "月票充次時該月已");
strcpy(strErrorMessage2, "經(jīng)充了月票");
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://復(fù)制正本到副本出錯
strcpy(strErrorMessage1, "復(fù)制正本到副本出");
strcpy(strErrorMessage2, "錯");
break;
case ERR_POS_MODIFYMONEY://充值或沖正時改變錢包出錯
strcpy(strErrorMessage1, "充值或沖正時改變");
strcpy(strErrorMessage2, "錢包出錯");
break;
case ERR_POS_BUILDRECORD://寫記錄出錯
strcpy(strErrorMessage1, "寫記錄出錯");
break;
case ERR_POS_TIMESPARM://充次時的參數(shù)出錯
strcpy(strErrorMessage1, "充次時所選月份小");
strcpy(strErrorMessage2, "于當前月");
break;
case ERR_POS_NOCARD://無卡
strcpy(strErrorMessage1, "無卡");
break;
case ERR_POS_NOTWHITECARD://非白卡
strcpy(strErrorMessage1, "非白卡");
break;
case ERR_POS_CARDALRSTART://卡已經(jīng)啟用
strcpy(strErrorMessage1, "卡已經(jīng)啟用");
break;
case ERR_POS_MODIFYSTARTFLAG://修改卡啟用標記錯誤
strcpy(strErrorMessage1, "修改卡啟用標記錯");
strcpy(strErrorMessage2, "誤");
break;
case ERR_POS_ALREADYBLCARD://該卡已經(jīng)是黑名單卡
strcpy(strErrorMessage1, "該卡已經(jīng)是黑名單");
strcpy(strErrorMessage2, "卡");
break;
case ERR_POS_NOTBLCARD://不是黑名單卡
strcpy(strErrorMessage1, "不是黑名單卡");
break;
case ERR_POS_UNKOWNCMD://無效命令
strcpy(strErrorMessage1, "無效命令");
break;
case ERR_POS_BLISFULL://黑名單數(shù)溢出
strcpy(strErrorMessage1, "黑名單數(shù)溢出");
break;
case ERR_POS_HAVENTTIMESBLK://無月票區(qū)
strcpy(strErrorMessage1, "無月票區(qū)");
break;
case ERR_POS_ERRORPARM://錯誤參數(shù)
strcpy(strErrorMessage1, "錯誤參數(shù)");
break;
case ERR_POS_ERRORCHKCARD://驗卡錯誤
strcpy(strErrorMessage1, "驗卡錯誤");
break;
case ERR_POS_ALREADYAUTH://設(shè)備已經(jīng)認證
strcpy(strErrorMessage1, "設(shè)備已經(jīng)認證");
break;
case ERR_POS_NOAUTHREQUEST://沒有收到認證請求
strcpy(strErrorMessage1, "沒有收到認證請求");
break;
case ERR_POS_NOTSAMERANDOM://數(shù)據(jù)與隨機數(shù)不匹配
strcpy(strErrorMessage1, "數(shù)據(jù)與隨機數(shù)不匹");
strcpy(strErrorMessage2, "配");
break;
case ERR_POS_GETRANDOM://取隨機數(shù)錯誤
strcpy(strErrorMessage1, "取隨機數(shù)錯誤");
break;
case ERR_POS_DEVICENOTAUTH://設(shè)備未認證
strcpy(strErrorMessage1, "設(shè)備未認證");
break;
case ERR_POS_LIMITDATE://錯誤的有效期數(shù)據(jù)
strcpy(strErrorMessage1, "錯誤的有效期數(shù)據(jù)");
break;
case ERR_POS_SAMELIMITDATE://相同的有效期數(shù)據(jù)
strcpy(strErrorMessage1, "相同的有效期數(shù)據(jù)");
break;
case ERR_POS_MUCHMOREMONEY://充值數(shù)值太大
strcpy(strErrorMessage1, "充值數(shù)值太大");
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();
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -