亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mifare.c

?? 是上一個SMS消費機的充值機程序
?? C
?? 第 1 頁 / 共 5 頁
字號:
		for(i=0;i<15;i++)
			gcMifBuffer[15] ^= gcMifBuffer[i];
		if(CardMFCWrite16Bytes(gcBlock, gcMifBuffer)!=MI_OK) return ERR_MIF_WRITE;
		gcBlock++;
		for(i=0;i<16;i++)
			gcMifBuffer[i] = ~gcMifBuffer[i];
		if(CardMFCWrite16Bytes(gcBlock, gcMifBuffer)!=MI_OK) return ERR_MIF_WRITE;
		for(i = 0;i<9;i++)
		{
			gcSector = i / 3;
			gcBlock = i % 3;
			gcSector = gstWorkCardInfomation.stCardStruct.cHistorySector[gcSector];
			gcBlock += gcSector * 4;
			if(!AuthenCard(&lSerialNo, gcSector, MIF_WRITE)) return ERR_MIF_AUTEN;
			memset(gcMifBuffer, 0, 16);
			if(CardMFCWrite16Bytes(gcBlock, gcMifBuffer)!=MI_OK) return ERR_MIF_WRITE;
		}
		gstWorkCardInfomation.cGetInfoFinished &= MASK_SECTOR_ALL;
		GetCardInformation(lSerialNo, SECTOR_ALL);
	}
	else
		return ERR_POS_NOCARD;
	return ST_OK;
}

//生成控制卡
unsigned char NewControlCard(unsigned long lSerialNo, unsigned char cNewCardType, unsigned char *cControlBuf)
{
	unsigned char  i, k;
	unsigned long llSerialNo;	

	if(gcAuthenMode !=2) return ERR_POS_DEVICENOTAUTH;
	SPT_set(64);
	for(i = 10;i;)
	{
		if (!SPT_read())
		{
			SPT_set(64);
			i --;
		}
		if(CardTypeARequest(PICC_REQIDL,gcATQ) == MI_OK)
			break;
	}
	if(i!=0)
	{
		CardTypeAAnticollLevel1((unsigned char*)&llSerialNo);
		CardTypeASelectLevel1((unsigned char*)&llSerialNo, gcATS);
		if ((llSerialNo != glSerialNo)||(gcGetKeyFinished != 4))
		{
			GetCardKey(llSerialNo);			
		}
		if (gstWorkCardInfomation.cGetInfoFinished != SECTOR_ALL)
			if (GetCardInformation(llSerialNo, SECTOR_ALL)!=1)
				return ERR_POS_GETCARDINFO;
//			gstWorkCardInfomation.cGetInfoFinished = 0;			
		if (lSerialNo != llSerialNo)
			return ERR_POS_NOTSAMECARD;

		if(gstWorkCardInfomation.cCardType != CARD_NEW_CARD)
			return ERR_POS_NOTCUMSCARD;
//			guDate.l_word = RTC_read_date();
//			guTime.l_word = RTC_read_time();
//			sprintf(gcASCDateTime, "%04d%02d%02d%02d%02d%02d", guDate.fields.year, guDate.fields.month, guDate.fields.day, guTime.fields.hour, guTime.fields.minute, guTime.fields.second);
		getBCDDateTime(gcASCDateTime);
		memcpy(gcNowTime, ASC2BCD(gcASCDateTime,14), 7);
		for(i=0;i<3;i++)
			gcHexNowTime[i] = (gcNowTime[i] >> 4) * 10 + (gcNowTime[i] & 0x0f);
		i = CompareDate(gcNowTime, (unsigned char*)gstWorkCardInfomation.cLimitDate);

		if (i == 2)
			return ERR_POS_OUTOFLIMIT;

		gcSector = gstWorkCardInfomation.stCardStruct.cPublishSector;
		gcBlock = gcSector*4;
		if(!AuthenCard(&lSerialNo, gcSector, MIF_WRITE)) return ERR_MIF_AUTEN;
		for(k=0;k<3;k++)
			if(CardMFCRead16Bytes(gcBlock, gcMifBuffer)==MI_OK) break;
		if(k==3) return ERR_MIF_READ;
		gcMifBuffer[0x0d] = cNewCardType;
		gcMifBuffer[15] = 0;
		for(i=0;i<15;i++)
			gcMifBuffer[15]^=gcMifBuffer[i];
		for(k=0;k<3;k++)
			if(CardMFCWrite16Bytes(gcBlock, gcMifBuffer)==MI_OK) break;
		if(k==3) return ERR_MIF_WRITE;

		gcSector = gstWorkCardInfomation.stCardStruct.cPublicSector;
		gcBlock = gcSector*4;
		if(!AuthenCard(&lSerialNo, gcSector, MIF_WRITE)) return ERR_MIF_AUTEN;
		for(k=0;k<3;k++)
			if(CardMFCRead16Bytes(gcBlock, gcMifBuffer)==MI_OK) break;
		if(k==3) return ERR_MIF_READ;
		memcpy(gcMifBuffer, cControlBuf, 8);
		for(k=0;k<3;k++)
			if(CardMFCWrite16Bytes(gcBlock, gcMifBuffer)==MI_OK) break;
		if(k==3) return ERR_MIF_WRITE;
		for(i=0;i<16;i++)
			gcMifBuffer[i]= 0xff - gcMifBuffer[i];
		for(k=0;k<3;k++)
			if(CardMFCWrite16Bytes(gcBlock+1, gcMifBuffer)==MI_OK) break;
		if(k==3) return ERR_MIF_WRITE;
		gstWorkCardInfomation.cGetInfoFinished &= MASK_SECTOR_PUBLIC;
		GetCardInformation(lSerialNo, SECTOR_PUBLIC);
	}
	else
		return ERR_POS_NOCARD;
	return ST_OK;
}

//命令執行
unsigned char POSExecuteCommand(unsigned char cCommand, unsigned short iLength, unsigned char *cBuffer, unsigned short *iReturnLength, unsigned char *cReturnBuffer)
{
	struct sttSysRunTime srt;
	unsigned char cReturnVal;
	unsigned long lSerialNo;
	unsigned long lChargeMoney;
	unsigned char cTempBuffer[1000];
	unsigned char i;
	int isrl;
	short shRet;
	unsigned short recLen;	
	struct sttPacketHead pHead;
	struct sttBlackListHead pBLHead;
		
	switch(cCommand)
	{
	case CMD_AUTHEN:
		if (gcAuthenMode == 2) 
		{
			cReturnBuffer[0] = ERR_POS_ALREADYAUTH;
			*iReturnLength = 1;
			return CMD_ERROR;
		}
		if(cBuffer[0] == 0)
		{
			if(!GetChallenge(gcRandom))
			{
				cReturnBuffer[0] = ERR_POS_GETRANDOM;
				*iReturnLength = 1;
				return CMD_ERROR;
			}
			memcpy(cReturnBuffer, gcSAMNo, 8);
			memcpy(cReturnBuffer+8, gcRandom, 8);
			gcAuthenMode = 1;
			*iReturnLength = 16;

		}
		else if(cBuffer[0] ==1)
		{
			if (gcAuthenMode == 1)
			{
				if(memcmp(gcRandom, cBuffer+1, 8)!=0)
				{
					cReturnBuffer[0] = ERR_POS_NOTSAMERANDOM;
					gcAuthenMode = 0;
					*iReturnLength = 1;
					return CMD_ERROR;
				}

				memcpy(gcWorkerNo, cBuffer+17, 8);
				if(ExternalAuth(cBuffer+9, 0x02))
				{
					gcAuthenMode = 2;
					*iReturnLength = 0;
				}
				else
				{
					gcAuthenMode = 0;
					cReturnBuffer[0] = ERR_PSAM_AUTHEN;
					//beep(1, 5);
					*iReturnLength = 1;
					return CMD_ERROR;
				}
			}
			else
			{
				cReturnBuffer[0] = ERR_POS_NOAUTHREQUEST;
				*iReturnLength = 1;
				return CMD_ERROR;
			}				
		}		
		break;
	case CMD_LOGON:
		if(VerifyPIN(cBuffer[0], cBuffer+1))
		{
			//操作員編號
			memcpy(&gstWorkCardInfomation.lMoney, ASC2BCD(gcWorkerNo, 8), 4);
			//機具編號
			memcpy(&glChargeMoney, "\x00\x00\x01", 3); // for debug
			
			gcChargeType = CHARGETYPE_LOGON;
			if(BuildRecord()!=ST_OK) return ERR_POS_BUILDRECORD;	
// for debug
//			gcSector = gstWorkCardInfomation.stCardStruct.cPublicSector;
//			gcBlock = gcSector * 4;
//			if(!AuthenCard(&glSerialNo, gcSector, MIF_WRITE)) return 0;
//			for(i=0;i<3;i++)
//			if(CardMFCRead16Bytes(gcBlock, gcMifBuffer)==MI_OK) break;
//			if(i==3)
//			{
//				gcAuthenMode = 0;
//				cReturnBuffer[0] = ERR_MIF_READ;
//				*iReturnLength = 1;
//				return CMD_ERROR;
//			}	
//			gstWorkCardInfomation.iMoneyTotleTimes++;
//			OverTurnString(gcMifBuffer+1, &gstWorkCardInfomation.iMoneyTotleTimes, 2);
//			gcMifBuffer[15] = 0;
//			for(i=0;i<15;i++)
//				gcMifBuffer[15] ^= gcMifBuffer[i];
//			for(i=0;i<3;i++)
//				if(CardMFCWrite16Bytes(gcBlock, gcMifBuffer)==MI_OK) break;
//			if(i==3)
//			{
//				gcAuthenMode = 0;
//				cReturnBuffer[0] = ERR_MIF_WRITE;
//				*iReturnLength = 1;
//				return CMD_ERROR;
//			}	
// for debug			
			gcAuthenMode = 2;
			memcpy(gcWorkerNo, cBuffer+9, 8);
			*iReturnLength = 0;
		}
		else
		{
			gcAuthenMode = 0;
			cReturnBuffer[0] = ERR_PSAM_PINAUTH;
			*iReturnLength = 1;
			return CMD_ERROR;
		}	
		break;
	case CMD_M1PASS:
		memcpy(&lSerialNo, cBuffer,4);
		if(GetCardKey(lSerialNo))
		{
			*iReturnLength = 0;
		}
		else
		{
			cReturnBuffer[0] = ERR_POS_GETCARDKEY;
			*iReturnLength = 1;
			return CMD_ERROR;
		}
		break;
	case CMD_M1INFO:
		cReturnBuffer[0] = ReturnCardInfomation(cReturnBuffer+1, iReturnLength);
		if(cReturnBuffer[0]==ST_OK)
		{
			memcpy(cReturnBuffer, cReturnBuffer+1, *iReturnLength);
		}
		else
		{
			*iReturnLength = 1;
			return CMD_ERROR;
		}	
		break;
	case CMD_PURCHASE:
	case CMD_CHARGE:
//		clr_scr();
//		move_cursor(0,0);
//		set_console_english();
//		puts("CMD_CHARGE");
//		getch();
//		set_console_chinese();
		memcpy(&lSerialNo, cBuffer,4);
//		memcpy(&lChargeMoney, cBuffer+5,4);
		OverTurnString(&lChargeMoney, cBuffer+5,4);
		cReturnBuffer[0] = ChargeMoneyOrTimes(cBuffer[4], lSerialNo, lChargeMoney, cBuffer+9);
		if(cReturnBuffer[0]!=ST_OK)
		{
			*iReturnLength = 1;
			return CMD_ERROR;
		}
		else
		{
			memcpy(cReturnBuffer, &gstWorkChargeRecord, 40);
			*iReturnLength = 40;
		}
		break;
	case CMD_GETDATA:
//		clr_scr();	
//		move_cursor(0,0);
//		puts("CMD_GETDATA");
//		getch();
	
		isrl = 0;
		shRet = 0;
		do
		{
			memset(cTempBuffer, 0, sizeof(cTempBuffer));
			shRet = wrapTradeRecord(cTempBuffer, isrl, &srt);
			for(i=0;i<3;i++)
			{
				if(UART_send(cTempBuffer, shRet*40+sizeof(pHead))==0)
					break;
			}
			if(i==3)
			{
				shRet = -2;
				break;
			}
			if(updateSysRunTime(&srt)!=0)                    //回寫系統運行時參數
			{
				shRet = -1;
				break;
			}			
			isrl ++;
		}while(shRet>0);
		if(shRet<0)
		{
			if(shRet==-2)
			{
				cReturnBuffer[0] = ERR_COM_TIMEOUT;
			}
			else if(shRet==-1)
			{
				cReturnBuffer[0] = ERR_CHG_READEEPROM;
			}
			*iReturnLength = 1;
			return CMD_ERROR;
		}
		else
		{
			*iReturnLength = 0;
		}	
		break;
	case CMD_SETBLACKLIST:
		memcpy(cTempBuffer, cBuffer, iLength);
		shRet = updateBlackList(cTempBuffer);
//		if(shRet ==0)
//		{
//			do
//			{
//				memset(cTempBuffer, 0, sizeof(cTempBuffer));
//				for(i=0;i<3;i++)
//				{
//					if(UART_receive(cTempBuffer, &recLen)==0)
//						break;
//				}
//				if(i==3)
//				{
//					shRet = -2;
//					break;
//				}
//				iLength = 0;
//				memcpy(&recLen, cTempBuffer+1, 2);
//				memcpy(cTempBuffer, cTempBuffer+4, recLen);				
//				shRet = updateBlackList(cTempBuffer);
//				if(recLen==sizeof(pBLHead)) break;
//			}while(shRet>0);
//		}
		if(shRet<0)
		{
			if(shRet==-2)
			{
				cReturnBuffer[0] = ERR_COM_TIMEOUT;
			}
			else if(shRet==-1)
			{
				cReturnBuffer[0] = ERR_CHG_WRITEEEPROM;
			}
			*iReturnLength = 1;
			return CMD_ERROR;
		}
		else
		{
			*iReturnLength = 0;
		}	
		break;
	case CMD_RESTORECARD:
		if(CardRestore(cBuffer[0])==1)
		{
			*iReturnLength = 0;
		}
		else
		{
			cReturnBuffer[0] = ERR_POS_CARDRESTORE;
			*iReturnLength = 1;
			return CMD_ERROR;
		}
		break;
	case CMD_SALECARD:
		memcpy(&lSerialNo, cBuffer,4);
//		memcpy(&lChargeMoney, cBuffer+4,4);
		OverTurnString(&lChargeMoney, cBuffer+4,4);
		cReturnBuffer[0] = SaleCard(lSerialNo, lChargeMoney, cBuffer[8], cBuffer+9);
		if(cReturnBuffer[0]!=ST_OK)
		{
			*iReturnLength = 1;
			return CMD_ERROR;
		}
		else
		{
			memcpy(cReturnBuffer, &gstWorkChargeRecord, 40);
			*iReturnLength = 40;
		}
		break;
	case CMD_GETDATETIME:
		guDate.l_word = RTC_read_date();
		guTime.l_word = RTC_read_time();
		sprintf(gcASCDateTime, "%04d%02d%02d%02d%02d%02d", guDate.fields.year, guDate.fields.month, guDate.fields.day, guTime.fields.hour, guTime.fields.minute, guTime.fields.second);
//		getBCDDateTime(gcASCDateTime);
		memcpy(gcNowTime, ASC2BCD(gcASCDateTime,14), 7);
		memcpy(cReturnBuffer, gcNowTime, 7);
		*iReturnLength = 7;
		break;
	case CMD_SETDATETIME:
		memcpy(gcNowTime, cBuffer, 7);
		if(!IsValidDate(gcNowTime))
		{
			cReturnBuffer[0] = ERR_POS_TIMESPARM;
			*iReturnLength = 1

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美性猛交xxxxxxxx| 国产欧美综合色| 精品电影一区二区三区| 国产精品久久久久婷婷| 午夜欧美一区二区三区在线播放| 国产又粗又猛又爽又黄91精品| 91在线观看免费视频| 日韩免费福利电影在线观看| 亚洲色图另类专区| 国产精品亚洲第一区在线暖暖韩国 | 久久综合色鬼综合色| 一区二区三区国产豹纹内裤在线| 国精产品一区一区三区mba桃花| 欧美性色黄大片手机版| 国产精品污污网站在线观看| 日韩av一级电影| 一本色道久久综合亚洲aⅴ蜜桃| 精品sm在线观看| 美女免费视频一区二区| 欧美日韩精品免费| 亚洲bt欧美bt精品777| 一本大道久久精品懂色aⅴ | 国产一区中文字幕| 91精品国产综合久久福利软件| 亚洲激情中文1区| 99久久精品国产麻豆演员表| 国产午夜亚洲精品不卡| 激情综合色播五月| 日韩欧美一区二区不卡| 日韩成人一级片| 在线不卡中文字幕播放| 午夜久久久影院| 欧美精品 日韩| 日本视频中文字幕一区二区三区| 欧美精品乱人伦久久久久久| 亚洲国产精品综合小说图片区| 欧美又粗又大又爽| 亚洲图片有声小说| 欧美日韩激情在线| 日韩激情在线观看| 日韩一区二区在线看| 另类小说图片综合网| 精品久久久久久久久久久院品网| 美女任你摸久久| 国产午夜精品久久久久久免费视| 国内精品伊人久久久久av影院| 精品久久久久久久久久久久久久久 | a在线欧美一区| 国产精品国产馆在线真实露脸| 成人精品视频一区| 亚洲精品一二三| 777奇米四色成人影色区| 日韩va亚洲va欧美va久久| 欧美一卡2卡三卡4卡5免费| 麻豆精品一区二区| 国产拍揄自揄精品视频麻豆| 99久久亚洲一区二区三区青草| 麻豆国产精品777777在线| 欧美哺乳videos| 成人视屏免费看| 一区二区三区毛片| 日韩一区二区在线观看视频播放| 国产剧情一区在线| 亚洲男人的天堂在线aⅴ视频| 欧美在线一区二区| 国产一区二区在线观看视频| 国产精品你懂的| 9191国产精品| 99这里都是精品| 蜜臀av性久久久久av蜜臀妖精| 国产欧美一区二区三区网站 | 国产精品午夜春色av| 精品视频一区 二区 三区| 极品瑜伽女神91| 亚洲人成网站精品片在线观看 | 美女网站色91| 国产精品二区一区二区aⅴ污介绍| 欧美午夜精品电影| 国产毛片精品国产一区二区三区| 亚洲精品亚洲人成人网 | 麻豆精品精品国产自在97香蕉| 久久久久国产精品麻豆 | 成人av网址在线| 青娱乐精品视频在线| 国产精品久久久久久户外露出| 欧美日韩亚洲丝袜制服| 豆国产96在线|亚洲| 视频一区二区中文字幕| 国产精品高潮久久久久无| 欧美一区中文字幕| 色94色欧美sute亚洲13| 国产成人精品在线看| 蜜臀av性久久久久蜜臀aⅴ流畅| 国产精品电影一区二区三区| 日韩精品最新网址| 欧洲生活片亚洲生活在线观看| 精品在线你懂的| 亚洲不卡av一区二区三区| 国产精品三级久久久久三级| 91精品久久久久久蜜臀| 在线免费观看日本一区| 成人晚上爱看视频| 国产精品乡下勾搭老头1| 蜜臀av性久久久久蜜臀aⅴ四虎| 亚洲欧美国产高清| 国产精品丝袜一区| 中文字幕第一页久久| 精品久久久久久久久久久院品网| 欧美久久久久久久久| 色狠狠色噜噜噜综合网| av电影天堂一区二区在线观看| 激情国产一区二区 | 国产电影精品久久禁18| 久久激情综合网| 麻豆久久久久久| 久久99久久99精品免视看婷婷| 免费观看一级欧美片| 日韩激情视频网站| 亚洲国产欧美日韩另类综合| 一级中文字幕一区二区| 亚洲综合在线电影| 亚洲女同ⅹxx女同tv| 亚洲视频免费看| 一区二区三区在线视频免费观看| 亚洲欧美色一区| 亚洲国产日韩精品| 日日摸夜夜添夜夜添亚洲女人| 天使萌一区二区三区免费观看| 午夜视频在线观看一区二区| 婷婷国产在线综合| 免费看黄色91| 国产一区不卡在线| 成人h精品动漫一区二区三区| 成人性色生活片| 一本大道久久a久久精品综合| 在线欧美日韩国产| 91精品午夜视频| 国产午夜一区二区三区| 中文字幕中文乱码欧美一区二区| 中文字幕在线视频一区| 夜夜爽夜夜爽精品视频| 美日韩一级片在线观看| 国产成人av一区二区三区在线| 国产成人av福利| 色综合久久久久综合体| 宅男噜噜噜66一区二区66| 精品少妇一区二区三区在线播放 | 国产精品免费看片| 亚洲影院在线观看| 国产在线视频不卡二| 99久久伊人久久99| 欧美精品18+| 国产欧美日韩在线观看| 一区二区三区欧美亚洲| 精品一区二区三区欧美| www.亚洲精品| 日韩欧美成人激情| 亚洲精品一卡二卡| 国产综合色产在线精品| 欧美色精品天天在线观看视频| 日韩美女视频在线| 亚洲猫色日本管| 国产精品系列在线播放| 在线观看av一区二区| 久久青草国产手机看片福利盒子| 亚洲精品国产第一综合99久久 | 一区二区久久久久| 国产一区高清在线| 欧美日韩久久久| 中文文精品字幕一区二区| 天天免费综合色| 91美女在线视频| 久久蜜桃av一区二区天堂| 丝袜美腿成人在线| 色综合视频一区二区三区高清| 精品三级在线观看| 亚洲国产综合人成综合网站| 成人动漫av在线| 国产亚洲成av人在线观看导航| 日韩影院在线观看| 在线观看国产日韩| 亚洲桃色在线一区| 丁香婷婷综合色啪| 久久婷婷一区二区三区| 日本大胆欧美人术艺术动态| 色综合天天综合网国产成人综合天| 欧美变态tickling挠脚心| 一区二区三区波多野结衣在线观看| 国产精品亚洲午夜一区二区三区| 欧美一区二区三区人| 亚洲成人午夜影院| 色综合久久久久综合99| 欧美韩日一区二区三区四区| 国精产品一区一区三区mba视频| 91精品中文字幕一区二区三区| 亚洲在线一区二区三区| 91国产福利在线| 夜夜揉揉日日人人青青一国产精品 | 日本va欧美va欧美va精品| 在线视频观看一区|