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

📄 cpos.c.bak

📁 是上一个SMS消费机的充值机程序
💻 BAK
字号:
#include <api.h>
#include <console.h>
#include <database.h>
#include <mifare530.h>
#include "CPOS.h"

extern short initDb();

void InitMenu()
{
}

void DispInt(unsigned char col, unsigned char row, unsigned int iValue)
{
	unsigned char tmpbuf[100];

	move_cursor(col,row);
	memset(tmpbuf, 0, 10);
	sprintf(tmpbuf, "%5d", iValue);
	puts(tmpbuf);
	getch();
}

void DispLong(unsigned char col, unsigned char row, unsigned long lValue)
{
	unsigned char tmpbuf[100];

	move_cursor(col,row);
	memset(tmpbuf, 0, 10);
	sprintf(tmpbuf, "%8ld", lValue);
	puts(tmpbuf);
	getch();
}

void Dispbcd(unsigned char col, unsigned char row, unsigned char *buff, unsigned char len)
{
	unsigned char i, x, y;
	unsigned char tmpbuf[100];
	
	for(i=0;i<len;i++)
	{
		x = col+(i*2)%16;
		y = row+(i*2)/16;
		move_cursor(x,y);
		memset(tmpbuf, 0, 10);
		sprintf(tmpbuf, "%02x", buff[i]);
		puts(tmpbuf);
	}
	getch();
}

void DisplayCardInfomation(unsigned long lSerialNo)
{
	unsigned char sw, i;
	unsigned long l;
	typ_msg_word msg_buffer;

	clr_scr();
	move_cursor(0,0);
// for debug
//	if((gstWorkCardInfomation.cKeyVerision==0xff)||(gstWorkCardInfomation.cKeyVerision==0xA0))
//	{
//		puts("提示:");
//		move_cursor(0,2);
//		puts("该卡是出厂卡!");
//	}
//	else 
// for debug
	{
		gcSector = gstWorkCardInfomation.stCardStruct.cPublicSector;
		gcBlock = gcSector * 4;
		if (AuthenCard(&lSerialNo, gcSector, MIF_READ))
		{
			i = CompareBlock(gcSector, gcBlock, gcBlock+1, 1);
			if (GetCardInformation(lSerialNo, SECTOR_ALL)!=1) return;	
			if(gstWorkCardInfomation.cCardType<32)
			{
				switch(gstWorkCardInfomation.cChargeStep)
				{
				case 0x01:
					i = CardRestore('A');
					break;
				case 0x02:
					i = CardRestore('B');
					break;
				default:
					if (i==2)
						i = CardRestore('B');
					else
						i = CardRestore('C');
					break;
				}
			}
			else
				i=1;

			if (i==0)
			{											
				puts("错误:");
				move_cursor(0,2);
				puts("卡恢复失败!");
			}
			else if (i == 2)
			{
				puts("错误:");
				move_cursor(0,2);
				puts("钱包非法!");
			}
			else
			{
				sw = GetCardInformation(lSerialNo, SECTOR_ALL);
				if(sw == 1)
				{
					move_cursor(0,0);
					puts("卡号:");
					move_cursor(0,2);
					printf("%02x%02x%02x%02x%08lx", gstWorkCardInfomation.cCityCode[0], gstWorkCardInfomation.cCityCode[1], gstWorkCardInfomation.cTradeCode[0], gstWorkCardInfomation.cTradeCode[1], gstWorkCardInfomation.lCardNo);
					if(gstWorkCardInfomation.cUsageFlag == 0x01)
					{
						move_cursor(0,4);
						puts("该卡未启用!");
					}
					else if(gstWorkCardInfomation.cUsageFlag == 0x03)
					{
						move_cursor(0,4);
						puts("该卡已经被停用!");
					}
					else if (gstWorkCardInfomation.cUsageFlag == 0x04)
					{
						move_cursor(0,4);
						puts("该卡是黑名单卡!");
					}
					else
					{
						if(gstWorkCardInfomation.cCardType<0x20)
						{
							if (gstWorkCardInfomation.cChargeStep==0x02)
							{
								l = gstWorkCardInfomation.lMoney;
							}
							move_cursor(0,4);
							puts("金额:");
							move_cursor(0,6);
							printf("%5.2f元", (float)l/100);
						}
						else
						{
							move_cursor(0,4);
							switch(gstWorkCardInfomation.cCardType)
							{
							case CARD_NEW_CARD:
								puts("该卡为白卡!");
								break;
							case CARD_DATA_GATHER:		
								puts("数据采集卡!");
								break;
							case CARD_DEV_SET:			
								puts("设备设置卡!");
								break;
							case CARD_LINE_SET:		
								puts("线路设置卡!");
								break;
							case CARD_NUMBER_SET:		
								puts("数码设置卡!");
								break;
							case CARD_DELAY_SET:		
								puts("该卡为延时卡!");
								break;
							case CARD_TOLL_START:
								puts("收费启动卡!");
								break;
							case CARD_TIME_SET:
								puts("该卡为设置卡!");
								break;
							case CARD_LEV_BUS:
								puts("该卡为发车卡!");
								break;
							case CARD_ARV_BUS:
								puts("该卡为到站卡!");
								break;
							case CARD_DRIVER_BUS:
								puts("该卡为司机卡!");
								break;
							case CARD_CLERK_BUS:
								puts("该卡为站务员卡!");
								break;
							case CARD_AUTHEN_DEV:
								puts("该卡为空调卡!");
								break;
							case CARD_MONTH_STA:
								puts("月票启动卡!");
								break;
							default:
								puts("未知卡类型!");
								break;
							}
						}
					}
				}
				else if (sw == 2)
				{
					move_cursor(0,2);
					puts("提示:");
					move_cursor(0,2);
					puts("该卡是出厂卡!");
				}
				else
				{
					move_cursor(0,2);
					puts("提示:");
					move_cursor(0,2);
					puts("读卡片信息错误!");
				}
			}
		}
	}
	i = 0;
	SPT_set(2);
	do
	{
		msg_buffer.s_word = sys_msg(SM_STAY_AWAKE);
		if (msg_buffer.bits.comm_data)
			break;
		i++;
		if(CardTypeARequest(PICC_REQIDL,gcATQ) == MI_OK)
			if(CardTypeASelectLevel1((unsigned char*)&glSerialNo, gcATS)==MI_OK)
				i=0;
//		move_cursor(0,0);
//		printf("%d", i);
	}while(i<7);				
}

main(void)
{
	struct sttSysRunTime srt;
	void *p;
	char flag;
	unsigned long toPos;
	unsigned long totalNum;
	
	unsigned char cCommand;
	unsigned char cPressKey;
	unsigned short iLength;
	unsigned char cBuffer[1024];
	unsigned short iRLength;
	unsigned char cRBuffer[1024];
	typ_msg_word msg_buffer;
	unsigned char cCmdBuff[1024];
	unsigned short iCmdBuffLength;
	unsigned char i;
	unsigned long l=0;
	
	UART_init(UART_OFF);	
	init_console(CONSOLE_CHINESE);
	sm_setting(MSK_KEY_AVAILABLE|MSK_COMM_DATA|MSK_TIME_OUT);

	InitMenu();
	gcAuthenMode = 0;
	set_console_chinese();
	set_normal_disp();
	clr_scr();	
	move_cursor(0,0);
	if(!initDb())
	{
		puts("初始化数据库成功");
	}
	else
	{
		puts("初始化数据库失败");
		while(1);
	}
	
	move_cursor(0,2);
        if(ResetResponse(cCmdBuff, &i))
        {
		puts("SAM复位应答成功!");
		delay_n_ms(2000);
		memset(cCmdBuff,0, 10);
		ReadBinary(0x16, 0, 6, cCmdBuff);
		memset(gcSAMNo, 0x30, sizeof(gcSAMNo));
		memcpy(gcSAMNo + 2, cCmdBuff, 6);
        }
        else
        {
		puts("SAM复位应答失败!");
		while(1);
        }
 /*	
	guDate.fields.year = 2003;
	guDate.fields.month = 7;
	guDate.fields.day = 28;
	guTime.fields.hour = 9;
	guTime.fields.minute = 23;
	guTime.fields.second = 0;
	RTC_set_date(guDate.l_word);
	RTC_set_time(guTime.l_word);
   */    
	cCmdBuff[0] = 6;
	memcpy(cCmdBuff+1, "123456", 6);	//for debug					
	memcpy(cCmdBuff+9, "00000001", 8);
					
	if(POSExecuteCommand(CMD_LOGON, 15, cCmdBuff, &iCmdBuffLength, cCmdBuff)==CMD_OK)
	{
		clr_scr();
		move_cursor(0,0);
    		set_inversed_disp();
		puts("    系统登录    ");
		set_normal_disp();
		move_cursor(0,2);
		puts("系统登录成功!");
		move_cursor(0,6);
		puts("按任意键返回");
	//	getch();
	}
	else
	{
		clr_scr();
		move_cursor(0,0);
    		set_inversed_disp();
		puts("错误:");
		set_normal_disp();
		move_cursor(0,2);
		puts("系统登录失败,重");
		move_cursor(0,4);
		puts("新刷卡或按取消键");
		move_cursor(0,6);
		puts("返回!");
		getch();
	}		
	clr_scr();	
	move_cursor(0,0);
	puts("    欢迎使用    ");
	gcCommMsgRow = 2;
	UART_open();
	InitMC530(TYPE_A_ISO14443);
	do
	{
		//move_cursor(0, 0);
		//printf("%05d",l);
		//l++;
		//UART_open();
		cCommand = 0x00;
		if(UART_receive(cCmdBuff, &iCmdBuffLength)==0)
		{
//			clr_scr();
//			move_cursor(0,0);
//			set_console_english();
//			DispInt(0,0, iCmdBuffLength);
//			clr_scr();
//			Dispbcd(0,0, cCmdBuff, iCmdBuffLength);
//			set_console_chinese();
			cCommand = cCmdBuff[3];
			if((cCommand!=CMD_GETDATA)&&(cCommand!=CMD_SETBLACKLIST))
			{	
				delay_n_ms(10);		
				UART_disconnect();
			}			
			iLength = 0;
			memcpy(&iLength, cCmdBuff+1, 2);
			memcpy(cBuffer, cCmdBuff+4, iLength);
			i = POSExecuteCommand(cCommand, iLength, cBuffer, &iRLength, cRBuffer);
//			clr_scr();
//			move_cursor(0,0);
//			set_console_english();
//			DispInt(0,0, iRLength);
//			clr_scr();
//			Dispbcd(0,0, cRBuffer, iRLength);
//			set_console_chinese();
			cCmdBuff[0] = i;
			memcpy(cCmdBuff+1, cRBuffer, iRLength);
			if((cCommand!=CMD_GETDATA)&&(cCommand!=CMD_SETBLACKLIST))
			{
				delay_n_ms(10);
				UART_open();
			}			
			UART_send(cCmdBuff, iRLength+1);
		}
		//UART_disconnect();
		
		//if(InitMC530(TYPE_A_ISO14443)==MI_OK)
		//{
//			clr_scr();
//			move_cursor(0,0);
//			puts("InitMC530");
//			getch();
			if(CardTypeARequest(PICC_REQIDL,gcATQ) == MI_OK)
			{
//			clr_scr();
//			move_cursor(0,0);
//			puts("CardTypeARequest");
//			getch();
//			delay_n_ms(10);
	//			if(CardTypeARequest(PICC_REQIDL,gcATQ) == MI_OK)
	//			{
	//		clr_scr();
	//		move_cursor(0,0);
	//		puts("CardTypeARequest");
	//		getch();
					if(CardTypeAAnticollLevel1((unsigned char*)&glSerialNo)==MI_OK)
					{
//			clr_scr();
//			move_cursor(0,0);
//			puts("CardTypeAAnticollLevel1");
//			getch();
						if(CardTypeASelectLevel1((unsigned char*)&glSerialNo, gcATS)==MI_OK)
						{
//			clr_scr();
//			move_cursor(0,0);
//			puts("CardTypeASelectLevel1");
//			getch();
							if(GetCardKey(glSerialNo))
							{
//			clr_scr();
//			move_cursor(0,0);
//			puts("GetCardKey");
//			getch();
								if(gcAuthenMode==2)
									DisplayCardInfomation(glSerialNo);
								clr_scr();	
								move_cursor(0,0);
								puts("    欢迎使用    ");
								gcCommMsgRow = 2;
							}
						}
					}
//				}
			}
		//	MC530Off;
		//}
	}while(1);
}

⌨️ 快捷键说明

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