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

📄 public.c.bak

📁 是上一个SMS消费机的充值机程序
💻 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 + -