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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? card.c

?? RC522完整程序無需修改可放心使用
?? C
字號(hào):
#include "my_head.H"
#include "RfModuleFunc.H"
#include "DataFlash.H"

//#define _DEBUG
#ifdef _DEBUG
#include "Debug.h"
#endif

#define YES		1
#define NO		0

#define COMPANY_INFO_SECTOR			2	//公司信息
#define CARDHOLDER_INFO_SECTOR		3	//持卡人信息
#define PUBLIC_MONEY_SECTOR			4	//公共錢包
#define BUSINESS_INFO_SECTOR		5	//交易信息
#define TIME_COUNT_SECTOR			6	//計(jì)時(shí)信息
#define ORDER_DINNER_SECTOR			7	//訂餐信息
#define BUSINESS_LIMIT_INFO_SECTOR	8	//交易特別限制信息

#define   SYSTEMCARD_SECTOR   0
#define   SEEDCARD_SECTOR     1

#define   MAKER_CODE_SECT     0
#define   SYSTEM_SECT_1       1
#define   SYSTEM_SECT_2       2
#define   YSN_SYSPWD_SECT     3

#define   SEED_CARD_SECT      4   //UNIT_INFO_SECT
#define   OPUSER_CARD_SECT    5   //管理員或操作員
//UNIT(SEED) INFO
#define   CARD_LEVEL_DDR      0
#define   UNIT_CODE_ADDR      1   //1-3
#define   UNIT_PWD_ADDR       4   //4-6
#define   PUBLIC_SECTOR_ADDR  7
#define   FUC_TYPE_ADDR       8   //子功能類型
#define   FUC_SECTOR_ADDR     9   //子功能占用扇區(qū)
#define   SEED_DATE_ADDR      10  //10-12
#define   SEEDUSECOUNTS_ADDR  13  //13-14
//===============================================
//卡級(jí)別定義
#define   CONUSER_CARD        3  //- 普通用戶卡,
#define   MANAGE_CARD         6  //- 維護(hù)管理卡,
#define   SEED_CARD           7  //- 系統(tǒng)子卡,
#define   SYSTEM_CARD         8  //- 系統(tǒng)母卡,
#define   EMPTYUSER_CARD      0x3f //-  單位白卡

unsigned char code Nkey_a[6] = {'Y', 's','n', 'O', 'y', 's'};
unsigned char code Nkey_b[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
sttCardholderInfo xdata stCardholderInfo;	//持卡人信息
sttBusinessInfo xdata stBusinessInfo;		//交易信息
unsigned char xdata CardSerialNo[4];		//作為最后一次操作的卡系列號(hào)存貯用(必須全局)
unsigned char xdata CardOperateStep;		//卡操作步驟標(biāo)志(必須全局)
unsigned char xdata gcDateTime[7];		//全局時(shí)鐘
extern void ReadClock(unsigned char ClockData[]);
extern sttOtherTableInfo xdata stOtherTableInfo;
extern Equip_Addr      pdata  equip_addr;

//====================================================
void  Count_Sector_PWD(unsigned char  pbuf[],
					   unsigned char card_snr[4],
					   unsigned char  sector)
{
   memcpy(pbuf,Nkey_a,6);
   pbuf[0] *= card_snr[0]+sector*1;
   pbuf[1] *= card_snr[1]+sector*2;
   pbuf[2] *= card_snr[2]+sector*3;
   pbuf[3] *= card_snr[3]+sector*4;
   pbuf[4] *= pbuf[0]+sector*5;
   pbuf[5] *= pbuf[1]+sector*6;
}

//讀系統(tǒng)卡
BYTE   GetSEEDCardTest(SeedCard_Info  *card)
{
	BYTE  idata  tt[2];
	BYTE  idata  card_snr[4];
	BYTE  idata  bankdata[16];
	BYTE  size,err;
	int   i=0;
	//Init_Rfic();
    mifs_reset(20);
	for(i=45;--i;)
	  {
	   if(!mifs_request(ALL_CARD,tt))break;
	  }
	if(!i)return(CARD_NO_FINED);
	for(i=45;--i;)
	  {
	   if((mifs_request(IDLE_CARD,tt))!=MI_OK)continue;
	   if((mifs_anticoll(0,card_snr))!=MI_OK)continue;
	   if((mifs_select(card_snr,&size))!=MI_OK)continue;
	   break;
	  }
	if(!i)return(CARD_ERR_CODE);//return(40+err);
    Count_Sector_PWD(bankdata,card_snr,SEEDCARD_SECTOR);
	err=mifs_load_key(KEYA,SEEDCARD_SECTOR,bankdata);
    //err=mifs_load_key(KEYA,SEEDCARD_SECTOR,Nkey_b);
	if(err!=MI_OK)return(50+err);
	for(i=15;--i;)
	  {
	   if((mifs_authentication(KEYA,SEEDCARD_SECTOR))!=MI_OK)continue;
	   //if((mifs_authKey(KEYA,SEEDCARD_SECTOR,Nkey_b))!=MI_OK)continue;
	   if((mifs_read(SEED_CARD_SECT,bankdata))!=MI_OK)continue;
	   break;
	  }
	if(!i)return(CARD_ERR_CODE);//return(40+err);
    //do_buzzer(1);
    mifs_halt();
	//mifs_close();

	if(bankdata[CARD_LEVEL_DDR] != SEED_CARD)
	{
	   return(CARD_NO_SEED);
	}
    memcpy(card->unit_code,&bankdata[UNIT_CODE_ADDR],3);
    memcpy(card->unit_password,&bankdata[UNIT_PWD_ADDR],3);
	card->fuc_type=bankdata[FUC_TYPE_ADDR];
	card->fuc_sector=bankdata[FUC_SECTOR_ADDR];
    card->public_sector=bankdata[PUBLIC_SECTOR_ADDR];
    memcpy(card->date,&bankdata[SEED_DATE_ADDR],3);  //6

	return(SUCCESS);
}

unsigned char  Check_Card_Event(unsigned char  cardmode)
{
    unsigned char  idata  tt[2];
	if(cardmode)
	  {
	   if(mifs_request(ALL_CARD,tt))return(1);
	  }
	else
	  {
	   if(mifs_request(IDLE_CARD,tt))return(1);
	  }
	Stop_Timer(DIS_CLOCKEVENT_Tevent);//must!
	Stop_Timer(WAIT_CARD_Tevent);
    PostMessage(FIND_CARD_EVENT,0);
    return(0);
}

//===============================
char RfModule_Init()
{
	unsigned char i,rst;
	sttCardStruct xdata stCardStruct;

	Rf_Init();
	memset(&stCardStruct,0xFF,16);
	stCardStruct.cCompanyInfoSector = COMPANY_INFO_SECTOR;
	stCardStruct.cCardholderInfoSector = CARDHOLDER_INFO_SECTOR;
	stCardStruct.cPublicMoneySector = PUBLIC_MONEY_SECTOR;
	stCardStruct.cBusinessInfoSector = BUSINESS_INFO_SECTOR;
	stCardStruct.cTimeCounterSector = TIME_COUNT_SECTOR;
	stCardStruct.cOrderDinnerSector = ORDER_DINNER_SECTOR;
	stCardStruct.cBusinessLimitInfoSector = BUSINESS_LIMIT_INFO_SECTOR;
	i=10;
	while(i--)
	{
		if((rst=SetCardApplicationSector(&stCardStruct))== MI_OK) 
			break;
#ifdef _DEBUG
		DebugString("Set Card Application Sector Value Result:");
		DebugData(1,1,&rst);
#endif
	}
	return rst;
}


//充值操作
char FillMoneyOrTime()
{
	unsigned char result;
	unsigned long idata lSerialNo;
	unsigned char xdata Buffer[18];
	unsigned int  iOffSet;
	sttFillPara xdata stFillPara;	//充值信息表數(shù)據(jù)
	sttFillLimitInfo xdata stFillLimitInfo;//充值限制信息

	//讀取充值時(shí)間限制表
	result = ReadFillLimitInfo(&stFillLimitInfo);
	if(result != SUCCESS) return result;
#ifdef _DEBUG
	DebugString("Read Fill Limit Info OK, the Data:");
	DebugData(12,12,(unsigned char *)&stFillLimitInfo);
#endif
	//讀系統(tǒng)時(shí)鐘
	ReadClock(gcDateTime);
#ifdef _DEBUG
	DebugString("Read Clock OK, the Data:");
	DebugData(7,7,gcDateTime);
#endif
	if(memcmp(stFillLimitInfo.cStartTime,gcDateTime,6) > 0)
		return NO_IN_CONSUMETIME;	//未到充值時(shí)間
	if(memcmp(stFillLimitInfo.cEndTime,gcDateTime,6) < 0)
		return NO_IN_CONSUMETIME;	//已過充值時(shí)間
#ifdef _DEBUG
	DebugString("\r\n\r\nBegin Order Dinner Operate \r\n");
#endif
	//檢查是否有卡
	result=mifs_anticoll(0,Buffer);	
	if(result != MI_OK) return FAILURE;
#ifdef _DEBUG
	DebugString("Anticoll OK\r\n");
#endif
	result=mifs_select(Buffer,&Buffer[4]);	
	if(result != MI_OK) return FAILURE;
#ifdef _DEBUG
	DebugString("Select OK\r\n");
#endif
	//判斷是否為最后操作的那張卡
	if(memcmp(CardSerialNo,Buffer,4)!=0)	//若不是同一張卡
	{
		CardOperateStep = 0;	//清卡操作步驟,即另一張卡需重頭開始
		memcpy(CardSerialNo,Buffer,4);	//保存當(dāng)前卡系列號(hào)
#ifdef _DEBUG
		DebugString("A New Card In\r\n");
#endif
	} 
#ifdef _DEBUG
	else //若是同一張卡,則看上次完成操作的步驟
	{
		DebugString("Last Operation Card In\r\n");
	}
#endif
	//具體分步操作讀寫卡
	switch(CardOperateStep)	
	{
	case 0:	//讀持卡人信息
#ifdef _DEBUG
		DebugString("Read Cardholder Info...\r\n");
#endif
		Count_Sector_PWD(Buffer,CardSerialNo,CARDHOLDER_INFO_SECTOR);	//計(jì)算密鑰
		//memset(Buffer,0xFF,6);
		result=ReadCardholderInfo(CardSerialNo,KEYA,Buffer,&stCardholderInfo);
#ifdef _DEBUG
		DebugString("Read Cardholder Info Result:");
		DebugData(1,1,&result);
#endif
		if(result != MI_OK) return FAILURE;
#ifdef _DEBUG
		DebugString("Read Cardholder Info OK, the Data:");
		DebugData(41,28,(unsigned char *)&stCardholderInfo);
#endif
		CardOperateStep = 1;
	case 1:	//判斷卡狀態(tài)、啟用日期、有效期等
#ifdef _DEBUG
		DebugString("Check Cardholder Info...\r\n");
#endif
		//1、判斷卡狀態(tài)標(biāo)志
		if(stCardholderInfo.cState)	//無效卡
		{
			mifs_halt();
#ifdef _DEBUG
			DebugString("Current Card Status is Invalid\r\n");
#endif
			return CARD_LOSTED_CODE;
		}
		//2、檢查卡啟用日期、有效期
		ReadClock(gcDateTime);	//讀時(shí)鐘
#ifdef _DEBUG
		DebugString("Read Clock OK, the Data:");
		DebugData(7,7,gcDateTime);
#endif
		if(memcmp(gcDateTime,stCardholderInfo.cActiveDate,3) < 0)
		{
			mifs_halt();
#ifdef _DEBUG
			DebugString("未到使用期\r\n");
#endif
			return CARD_OVERDUE_CODE;	//未到啟用日期
		}
		if(memcmp(gcDateTime,stCardholderInfo.cInvalidDate,3) > 0)
		{
			mifs_halt();
#ifdef _DEBUG
			DebugString("已過有效期\r\n");
#endif
			return CARD_OVERDUE_CODE;	//未已過有效日期
		}
		//3、檢查卡狀態(tài)表
		memcpy(&lSerialNo,CardSerialNo,4);
		result = FoundCardStatusTable(lSerialNo);
#ifdef _DEBUG
		DebugString("Found Card Status Table Result:");
		DebugData(1,1,&result);
#endif
		switch(result)
		{
		case SUCCESS:	//找到
			result = SetCardState(CardSerialNo,KEYA,Buffer,2);
			if(result==MI_OK)
				return CARD_LOSTED_CODE;
			else
				return FAILURE;
		case FAILURE:	//未找到
			CardOperateStep = 2;
			break;
		default:
			return result;
		}
	case 2:	//查找充值信息數(shù)據(jù)
#ifdef _DEBUG
		DebugString("Read Fill Para Info...\r\n");
#endif
		memcpy(stFillPara.CardIndex,stCardholderInfo.cSerialNo,3);
		result = FoundFillPara(&stFillPara,&iOffSet);
#ifdef _DEBUG
		DebugString("stFillPara Data:");
		DebugData(8,8,(unsigned char *)&stFillPara);
#endif
		if(result != SUCCESS) return result;
		if(stFillPara.cCurrentStatus == 0)
			return KQ_REPEAT_CODE;	//已充過值
		CardOperateStep = 3;
	case 3: //讀卡上交易數(shù)據(jù)
#ifdef _DEBUG
		DebugString("Read Cardholder Info...\r\n");
#endif
		Count_Sector_PWD(&Buffer[0],CardSerialNo,PUBLIC_MONEY_SECTOR);	//計(jì)算密鑰
		Count_Sector_PWD(&Buffer[6],CardSerialNo,BUSINESS_INFO_SECTOR);	//計(jì)算密鑰
		Count_Sector_PWD(&Buffer[12],CardSerialNo,BUSINESS_LIMIT_INFO_SECTOR);	//計(jì)算密鑰
		//memset(Buffer,0xFF,18);
		result=ReadBusinessInfo(CardSerialNo,KEYA,Buffer,&stBusinessInfo);
		if(result != MI_OK) return FAILURE;
#ifdef _DEBUG
		DebugString("Read Business Info OK, the Data:");
		DebugData(44,44,(unsigned char *)&stBusinessInfo);
#endif
		CardOperateStep = 4;
	case 4:	//判斷卡上充值記錄是否為當(dāng)前充值段內(nèi)
		if(stFillPara.cCurrentStatus == stBusinessInfo.stFillInfo.cMode)
		{
			if(!((memcmp(stBusinessInfo.stFillInfo.cDateTime,stFillLimitInfo.cStartTime,6) < 0)
				|| (memcmp(stBusinessInfo.stFillInfo.cDateTime,stFillLimitInfo.cEndTime,6) > 0)))
			{
				UpdateFillParaStatus(iOffSet);	//補(bǔ)更新充值參數(shù)標(biāo)記
				return KQ_REPEAT_CODE;			//已充過值
			}
		}
		CardOperateStep = 5;
	case 5:	//準(zhǔn)備充值數(shù)據(jù)
		memcpy(stBusinessInfo.stFillInfo.cDateTime,gcDateTime,6);	//充值日期時(shí)間,格式:YY MM DD HH MM SS
		if(stFillPara.cCurrentStatus==FILL_MONEY)	//充錢
		{
			stBusinessInfo.stFillInfo.lMoney=stFillPara.Value;	//充值金額
			stBusinessInfo.stFillInfo.iTimes=0;					//充值次數(shù)
		}else 
			if(stFillPara.cCurrentStatus==FILL_TIMES)//充次
			{
				stBusinessInfo.stFillInfo.lMoney=0;					//充值金額
				stBusinessInfo.stFillInfo.iTimes=stFillPara.Value;	//充值次數(shù)
			}
		memcpy(stBusinessInfo.stFillInfo.cDeviceNo,(unsigned char*)&equip_addr.number_addr,2);	//設(shè)備編號(hào)
		stBusinessInfo.stFillInfo.cMode=stFillPara.cCurrentStatus;	//充值類別
		CardOperateStep = 6;
	case 6: //進(jìn)行充值
		result = Fill(CardSerialNo,&stBusinessInfo);
#ifdef _DEBUG
		DebugString("Fill Result:");
		DebugData(1,1,&result);
		DebugString("Read Business Info OK, the Data:");
		DebugData(44,44,(unsigned char *)&stBusinessInfo);
#endif
		if(result ==ERROR_NO_COMPLITE) return 60;
		if(result != MI_OK) return FAILURE;
		mifs_halt();
		CardOperateStep = 2;	//若下次也是當(dāng)前這張卡,則直接跳到讀卡上訂餐數(shù)據(jù)
		UpdateFillParaStatus(iOffSet);
	}
	return result;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
bt7086福利一区国产| 成人国产在线观看| www..com久久爱| 精品国产免费人成在线观看| 一区二区三区免费看视频| 国v精品久久久网| 麻豆精品新av中文字幕| 欧美日韩国产大片| 日韩欧美亚洲一区二区| 一区二区三区 在线观看视频| 国产成人综合在线| 国产日韩欧美亚洲| 成人午夜电影久久影院| 国产精品美女久久久久aⅴ | 99国产精品久久久久| 亚洲国产激情av| 色婷婷久久一区二区三区麻豆| 亚洲免费观看高清完整版在线观看 | 亚洲国产综合91精品麻豆| 色偷偷成人一区二区三区91 | 国产精品伦理一区二区| 99久久综合国产精品| 亚洲国产精品一区二区www | 色综合久久久久| 奇米色777欧美一区二区| 国产亚洲一二三区| 99久久国产综合精品色伊| 亚洲国产日日夜夜| 久久这里都是精品| 欧美人与z0zoxxxx视频| 国产黄色91视频| 日本免费在线视频不卡一不卡二 | 久久人人爽人人爽| 91久久一区二区| 国产91清纯白嫩初高中在线观看| 亚洲自拍偷拍图区| 国产精品免费人成网站| 欧美一区二区视频免费观看| av男人天堂一区| 国产真实乱子伦精品视频| 亚洲二区在线视频| 成人免费在线观看入口| wwwwxxxxx欧美| 欧美精品v日韩精品v韩国精品v| 国产69精品一区二区亚洲孕妇| 丝袜脚交一区二区| 香蕉成人啪国产精品视频综合网| 欧美韩国日本不卡| 中文字幕精品一区| 国产免费成人在线视频| 久久久五月婷婷| 国产亚洲一区字幕| 日本一区二区三区高清不卡| 日韩精品一区二区三区中文精品| 欧美日韩专区在线| 在线播放/欧美激情| 在线成人av影院| 日韩一区二区中文字幕| 日韩欧美国产综合| 日韩精品在线网站| 久久久91精品国产一区二区精品 | 久久网站热最新地址| 欧美精品一区二区在线观看| 2023国产精品自拍| 中文字幕va一区二区三区| 成人免费在线视频观看| 一个色在线综合| 老司机免费视频一区二区三区| 青青草伊人久久| 国产一区二区在线观看免费| 岛国一区二区三区| 欧美日韩国产另类一区| 精品国产成人在线影院 | 中文字幕一区二区5566日韩| 亚洲精品中文在线影院| 日本亚洲视频在线| 99热在这里有精品免费| 欧美日韩一区国产| 中文字幕一区二区三区四区不卡| 亚洲高清不卡在线观看| 国产精品自拍av| 欧美主播一区二区三区| 精品入口麻豆88视频| 一个色妞综合视频在线观看| 美女视频网站久久| 国产亚洲视频系列| 亚洲三级电影网站| 精品一区二区在线播放| 欧美精品三级在线观看| 国产精品电影一区二区| 久久精品二区亚洲w码| 欧美三级资源在线| 国产精品久久久久久久岛一牛影视 | 国产精品自在在线| 日韩欧美在线综合网| 亚洲国产精品久久艾草纯爱| 成人av在线看| 国产精品区一区二区三| 国产麻豆精品久久一二三| 日韩一级完整毛片| 蜜臀av亚洲一区中文字幕| 在线成人高清不卡| 麻豆精品在线观看| 精品国产一区二区精华| 国内精品视频一区二区三区八戒| 欧美一区二区三区男人的天堂| 五月婷婷色综合| 欧美一级一区二区| 精品在线一区二区| 国产日韩一级二级三级| av爱爱亚洲一区| 一区二区在线观看不卡| 欧美日韩在线三区| 另类小说欧美激情| 国产女人aaa级久久久级| 99国产精品久久久久久久久久久| 亚洲精品亚洲人成人网在线播放| 91国产免费看| 国产乱人伦偷精品视频不卡| 亚洲免费观看高清完整版在线观看| 色哟哟在线观看一区二区三区| 丝袜美腿亚洲色图| 欧美国产综合一区二区| 欧美性感一类影片在线播放| 日韩成人午夜电影| 日韩一区在线免费观看| 欧美日韩黄视频| 菠萝蜜视频在线观看一区| 日韩精品一二区| 亚洲欧洲成人av每日更新| 日韩欧美高清在线| 欧美人妇做爰xxxⅹ性高电影 | 色偷偷成人一区二区三区91| 欧美aⅴ一区二区三区视频| 国产精品国产三级国产普通话三级 | 麻豆久久久久久| 五月婷婷久久丁香| ●精品国产综合乱码久久久久| 在线综合亚洲欧美在线视频| 成人一区二区三区中文字幕| 欧美日韩美女一区二区| 偷窥少妇高潮呻吟av久久免费| 欧美日韩中文国产| 91色.com| 欧美色图12p| 在线看国产一区| 欧美最猛性xxxxx直播| 99久久精品一区二区| 成人免费不卡视频| 成人黄色在线视频| 懂色av一区二区在线播放| 国产成人综合网| 成av人片一区二区| 色婷婷综合激情| 精品视频色一区| 日韩欧美你懂的| 国产欧美日韩视频一区二区| 国产色产综合色产在线视频| 中日韩av电影| 一区二区三区在线播放| 五月综合激情日本mⅴ| 日韩精品一卡二卡三卡四卡无卡| 日本91福利区| 成人avav在线| 欧美在线影院一区二区| 91精品国产综合久久蜜臀| 久久久精品蜜桃| 亚洲精品成人精品456| 性欧美疯狂xxxxbbbb| 久久国产乱子精品免费女| 国产成人av资源| 欧美日韩中文字幕一区| 欧美精品一区二区三区一线天视频 | 久久疯狂做爰流白浆xx| 成年人网站91| 日韩欧美不卡一区| 亚洲激情网站免费观看| 青青草原综合久久大伊人精品优势| 麻豆91在线看| 91 com成人网| 亚洲黄色片在线观看| 国产高清亚洲一区| 欧美日韩第一区日日骚| 国产精品第四页| 美女精品自拍一二三四| 在线观看日韩电影| 中文字幕av免费专区久久| 麻豆视频一区二区| 欧美另类久久久品| 亚洲黄色性网站| 成人毛片在线观看| 国产清纯白嫩初高生在线观看91 | 日韩av中文在线观看| 91女人视频在线观看| 国产清纯白嫩初高生在线观看91| 日韩高清电影一区| 日韩午夜在线播放| 久久精品久久综合| 精品美女一区二区三区| 日产欧产美韩系列久久99|