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

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

?? hid_usb.c

?? HID-Ukey底層源碼實現(st72651芯片) windows上層驅動
?? C
字號:
/**************** (c) 2001  STMicroelectronics **********************

PROJECT : USB - ST7 FS
VERSION :  V 0.96
CREATION DATE :  04/05/2000
AUTHOR : MICROCONTROLLER DIVISION / ST Rousset

-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
LAST MODIFICATION  :

******************************************************************************/


// #include "hidef.h"   // not used because of 'NULL' redefinition
#include "usb_lib.h"
#include "Descript.h"
#include "HID_usb.h"
#include "mcu_conf.h"
#include "usb_def.h"      
#include "UARTT0.h"

#pragma DATA_SEG CLASS_RAM
extern unsigned char Current_Operation;
#define RBC_OP_IDLE		0x00

#pragma DATA_SEG SHORT CRD_BIT_RAM
unsigned char *pUsbMessageBuffer;
unsigned char	ShiftBitFlag;

#pragma DATA_SEG	CRD_MESSAGE_BUFFER
unsigned char UsbMessageBuffer[200];

#pragma DATA_SEG	CRD_RAM
unsigned char CardStateFlag;
unsigned char CardCommandFlag;
unsigned char	ReportStatus;
unsigned char UsbMessageFlags;
unsigned char ReceiveDataLength;
unsigned char ATRBuffer[ATRLENGTH];
unsigned char IccCommandINS;
struct
	{
	unsigned char cla;
	unsigned char ins;
	unsigned char p1;
	unsigned char p2;
	unsigned char lc;
	unsigned char le;
} IccCommandHead;				      //@jin0320   


/************************************************************************/
/*ROUTINE	void HID_XfrApdu();@jin0320								*/
/*Return an error code: 0x00 == OK										*/
/************************************************************************/
#pragma CODE_SEG	CRD_ROM
void HID_XfrApdu(void)                //解析APDU命令
{
	if (bTxOutCompleteFlag) {

		CardCommandFlag = SENDINS;

		IccCommandINS = UsbMessageBuffer[INS];		// record INS

		IccCommandHead.ins = UsbMessageBuffer[INS];
		IccCommandHead.cla	= UsbMessageBuffer[CLA];
		IccCommandHead.p1	= UsbMessageBuffer[P1];
		IccCommandHead.p2 = UsbMessageBuffer[P2];
		IccCommandHead.lc = UsbMessageBuffer[Lc];

	
		if (( UsbMessageBuffer[ReportID] == 0x01 ) && ( UsbMessageBuffer[Command] == 0xFF )) {
			CardStateFlag = CARDPOWERON;		// It's a command for power on smart card
		}
		else if (( UsbMessageBuffer[ReportID] == 0x01 ) && (UsbMessageBuffer[Command] == 0xFE )) {
			CardStateFlag = CARDGETATR;			// It's a command for get ATR
		}
		else if ( UsbMessageBuffer[MessageLength] == 0x04 )	{
			UsbMessageBuffer[Lc] = 0x00;				// supply the length of lc data and le data  
			CardStateFlag = CARDCOMMAND1;		// It's a command that no LC & LE data 
		}
		else if (( UsbMessageBuffer[MessageLength] == 0x05 ) && (UsbMessageBuffer[Lc] == 0 )) {
			CardStateFlag = CARDCOMMAND1;			// It's a command that no LC & LE data 
		}
		else if ( UsbMessageBuffer[MessageLength] == 0x05 ) {
			CardStateFlag = CARDCOMMAND2;		// It's a command that no LC but have LE data to receive
		}
		else if ( UsbMessageBuffer[MessageLength] - UsbMessageBuffer[Lc] == 5 ) {
			CardStateFlag = CARDCOMMAND3;		// It's a command that have LC data to send but no LE data to receive
		}
		else {
			CardStateFlag = CARDCOMMAND4;		// It's a command that not only have LC data to send but also have LE data to receive
		}

		Reset_bTxOutCompleteFlag;							// dispatch command is complete
	}
}

/************************************************************************/
/*ROUTINE	void IFD_XfrT0();@jin0320										*/
/*Return an error code: 0x00 == OK											*/
/************************************************************************/
void IFD_XfrT0(void)
{
unsigned char tempcount;
	
if ( !bDataReadyFlag ) {														// if data is not ready
	switch ( CardStateFlag )	{

	case NOCOMMAND:
		break;

	case CARDPOWERON:
		switch ( CardCommandFlag )	{
			case SENDINS: 
				CardCommandFlag = RECEIVESW;
				CardPowerOn();																//reset card
				break;
			case RECEIVESW:
				if ( bCommunicateEndFlag ) {			// if communicate end or waiting time over
					for (tempcount = 0; tempcount!= CardDataNum; tempcount++ )
						 UsbMessageBuffer[LeData + tempcount] = ATRBuffer[tempcount];		// copy data from ATR Buffer to Message Buffer
					UsbMessageBuffer[RecDataLength] = CardDataNum;
					Set_bDataReadyFlag;														// indicate that data is ready 
					CardCommandFlag = SENDINS;  
					asm nop;
					CardStateFlag = NOCOMMAND;  
					asm nop;
				}
				break;
			default:
				break;
		}
		break;

	case CARDGETATR:
			for (tempcount=0; tempcount!=4; tempcount++)
				UsbMessageBuffer[LeData + tempcount] = ATRBuffer[tempcount];
			UsbMessageBuffer[RecDataLength] = ATRLENGTH; 
			Set_bDataReadyFlag;
			CardStateFlag = NOCOMMAND;
		break;

	case CARDCOMMAND1:		// It's a command that no LC & LE data
		switch ( CardCommandFlag ) {
			case SENDINS:
				CardSend(INSHeadLength, &UsbMessageBuffer[CLA]);						// send command head
				ReceiveDataLength = 2;																			//Receive two status bytes
				CardCommandFlag = WAITRECEIVESW;
				break;
			case WAITRECEIVESW:
				if (bCommunicateEndFlag ) {			// if communicate end or waiting time over
					UsbMessageBuffer[RecDataLength] = CardDataNum;
					Set_bDataReadyFlag;														// indicate that data is ready 
					CardCommandFlag = SENDINS;
					CardStateFlag = NOCOMMAND;
				}
				break;
			default:
				break;
		}
		break;

	case CARDCOMMAND2:								// It's a command that no LC but have LE data to receive
		switch ( CardCommandFlag ) {
			case SENDINS:
				ReceiveDataLength = UsbMessageBuffer[Lc] +2 +1;								//Receive two status bytes + 1INS + LEDATA
				CardSend(INSHeadLength, &UsbMessageBuffer[CLA]);						// send command head
				CardCommandFlag = WAITRECEIVELEDATA;
				break;
			case WAITRECEIVELEDATA:
				if (bCommunicateEndFlag ) {			// if communicate end or waiting time over
					UsbMessageBuffer[RecDataLength] = CardDataNum;
					Set_bDataReadyFlag;														// indicate that data is ready 
					CardCommandFlag = SENDINS;
					CardStateFlag = NOCOMMAND;
				}
				break;
			default:
				break;
		}
		break;

	case CARDCOMMAND3:							// It's a command that only LC data to send but no LE data to receive
		switch ( CardCommandFlag ) {
			case SENDINS:
				ReceiveDataLength = 1;																	//Receive two status bytes
				CardSend(INSHeadLength, &UsbMessageBuffer[CLA]);				// send command head
				CardCommandFlag = WAITRECEIVEINS;
				break;
			case WAITRECEIVEINS:
				if (bCommunicateEndFlag ) {			// if communicate end or waiting time over
					if ( CardDataNum == 1 ) {												// receive INS correctly
						CardCommandFlag = SENDLCDATA;
					}
					else {																				// receive INS fail
						UsbMessageBuffer[RecDataLength] = CardDataNum;
						Set_bDataReadyFlag;														// indicate that data is ready 
						CardCommandFlag = SENDINS;									// return error information
						CardStateFlag = NOCOMMAND;
					}
				}
				break;
			case SENDLCDATA:
				ReceiveDataLength = 2;
				CardSend( UsbMessageBuffer[Lc], &UsbMessageBuffer[LcData] );
				CardCommandFlag = WAITRECEIVESW;
				break;
			case WAITRECEIVESW:
				if (bCommunicateEndFlag ) {			// if communicate end or waiting time over
					UsbMessageBuffer[RecDataLength] = CardDataNum;
					Set_bDataReadyFlag;														// indicate that data is ready 
					CardCommandFlag = SENDINS;
					CardStateFlag = NOCOMMAND;
				}
				break;
			default:
				break;
		}
		break;

	case CARDCOMMAND4:													// Lc data send and le data receive
		switch ( CardCommandFlag ) {
			case SENDINS:
				ReceiveDataLength = 1;																	//Receive two status bytes
				CardSend(INSHeadLength, &UsbMessageBuffer[CLA]);				// send command head
				CardCommandFlag = WAITRECEIVEINS;
				break;
			case WAITRECEIVEINS:
				if (bCommunicateEndFlag ) {			// if communicate end or waiting time over
					if ( CardDataNum == 1 ) {												// receive INS correctly
						CardCommandFlag = SENDLCDATA;
					}
					else {																				// receive INS fail
						UsbMessageBuffer[RecDataLength] = CardDataNum;
						Set_bDataReadyFlag;														// indicate that data is ready 
						CardCommandFlag = SENDINS;									// return error information
						CardStateFlag = NOCOMMAND;
					}
				}
				break;
			case SENDLCDATA:
				ReceiveDataLength = 2;
				CardSend( UsbMessageBuffer[Lc], &UsbMessageBuffer[LcData] );
				CardCommandFlag = WAITRECEIVELEDATA;
				break;
			case WAITRECEIVELEDATA:
				if (bCommunicateEndFlag ) {			// if communicate end or waiting time over
					if ( UsbMessageBuffer[LeData] == 0x61 ) {
						UsbMessageBuffer[Lc] = UsbMessageBuffer[LeData + 1];
						UsbMessageBuffer[CLA]= 0x00;
						UsbMessageBuffer[INS] = 0xC0;
						UsbMessageBuffer[P1] = UsbMessageBuffer[P2] = 0x00;
						CardCommandFlag = SENDGETRES;
					}
					else {
						UsbMessageBuffer[RecDataLength] = CardDataNum;
						Set_bDataReadyFlag;														// indicate that data is ready 
						CardCommandFlag = SENDINS;									// return error information
						CardStateFlag = NOCOMMAND;
					}
				}
				break;
			case SENDGETRES:
				IccCommandINS = 0xC0;													// record new INS
				ReceiveDataLength = UsbMessageBuffer[Lc] + 2 + 1; // receive length = data length + 2 SW +1 INS
				CardSend(INSHeadLength, &UsbMessageBuffer[CLA]);				// send GetResponse Command
				CardCommandFlag = WAITRECEIVERES;
				break;
			case WAITRECEIVERES:
				if (bCommunicateEndFlag ) {			// if communicate end or waiting time over
					UsbMessageBuffer[RecDataLength] = CardDataNum;
					Set_bDataReadyFlag;														// indicate that data is ready 
					CardCommandFlag = SENDINS;									// return error information
					CardStateFlag = NOCOMMAND;
				}
				break;
			default:
				break;
		}
		break;

	default:
		break;
	}
}
}           


/**************** (c) 2001  STMicroelectronics **********************/    


////////////////////////////////////////////////dy
   
   
extern unsigned char MSL_Param_Buffer[]; 
 
char uic_pass_verify()                 //檢驗密碼
 {   
    char PassBackup[10];	
    char DataLen ;   
    Set_bTxOutCompleteFlag;    
    //UsbMessageBuffer[ReportID] = 0x01;
    UsbMessageBuffer[CLA]= 0x00;
    UsbMessageBuffer[INS] = 0x20;
    UsbMessageBuffer[P1] = UsbMessageBuffer[P2] = 0x00; 
    UsbMessageBuffer[Lc] = 6;   
    
    for(DataLen = 0; DataLen < 6 ;DataLen++)
       {
         PassBackup[DataLen] = UsbMessageBuffer[Lc +1+ DataLen] = MSL_Param_Buffer[2+DataLen*2];
    
       }     
    
     
    if(pUsbMessageBuffer[0] ==0x90 && pUsbMessageBuffer[1] == 0x00)
       {
         return    APDU_Ture;   
       }
    else 
         return    APDU_False;
  }
                                    
                                    
char uic_creat_file()
 {         
 
    Set_bTxOutCompleteFlag;    
    UsbMessageBuffer[CLA]= 0x80;
    UsbMessageBuffer[INS] = 0xe0;
    UsbMessageBuffer[P1] = 0x3f;
    UsbMessageBuffer[P2] = 0x01; 
    UsbMessageBuffer[Lc] = 0x0a;
    UsbMessageBuffer[0x07] = 0x38;
    UsbMessageBuffer[0x08] = 0xff;                                  
    UsbMessageBuffer[0x09] = 0xff;
    UsbMessageBuffer[0x0a] = 0x02;
    UsbMessageBuffer[0x0b] = 0x80;
    UsbMessageBuffer[0x0c] = 0x80;
    UsbMessageBuffer[0x0d] = 0x81;
    UsbMessageBuffer[0x0e] = 0x00; 
    UsbMessageBuffer[0x0f] = 0xa1;
    UsbMessageBuffer[0x10] = 0x01; 
    
    HID_XfrApdu();
    IFD_XfrT0();
   
    if(pUsbMessageBuffer[0] ==0x90 && pUsbMessageBuffer[1] == 0x00)
       {
         return    APDU_Ture;   
       }
    else 
         return    APDU_False;
  }

                                     
///////////////////////////////////////////////////dy

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩一卡二卡| 国产91精品露脸国语对白| 在线视频你懂得一区| 亚洲桃色在线一区| 日本久久一区二区三区| 亚洲精品国产无天堂网2021| 色一情一伦一子一伦一区| 亚洲欧洲www| 欧美三级日韩三级国产三级| 日韩国产精品久久| 精品国产1区二区| 国产91丝袜在线18| 亚洲综合色视频| 91精品久久久久久蜜臀| 麻豆一区二区99久久久久| 亚洲精品在线电影| 91亚洲国产成人精品一区二区三 | 777午夜精品免费视频| 日韩国产在线观看一区| 久久久噜噜噜久噜久久综合| 99九九99九九九视频精品| 色综合婷婷久久| 午夜精品福利在线| 国产午夜精品久久久久久免费视| 成人sese在线| 亚洲v精品v日韩v欧美v专区| 2023国产精华国产精品| 色播五月激情综合网| 免费的成人av| 国产精品电影一区二区| 欧美欧美欧美欧美| 成人在线综合网| 亚洲成人av在线电影| 国产亚洲欧美在线| 欧美三级电影在线看| 国产91综合网| 三级一区在线视频先锋| 国产精品你懂的在线| 69精品人人人人| 色偷偷88欧美精品久久久| 欧美在线观看视频一区二区三区 | 免费人成网站在线观看欧美高清| 国产欧美日韩久久| 欧美日韩免费观看一区三区| 国产91精品欧美| 老鸭窝一区二区久久精品| 欧美激情一区不卡| 日韩免费高清电影| 欧美日韩国产一区二区三区地区| 国产高清成人在线| 蜜桃av噜噜一区二区三区小说| 国产精品国产三级国产aⅴ无密码| 欧美一级片在线观看| 91尤物视频在线观看| 国模少妇一区二区三区| 婷婷国产v国产偷v亚洲高清| 在线一区二区观看| 成人av电影在线播放| 国精产品一区一区三区mba视频| 亚洲国产日韩av| 专区另类欧美日韩| 久久精品亚洲麻豆av一区二区| 欧美精品自拍偷拍| 欧美日韩精品三区| 91黄色激情网站| 91免费观看在线| 懂色av一区二区三区免费看| 久久99精品久久久久婷婷| 天天影视网天天综合色在线播放| 欧美在线一区二区| 99免费精品视频| 成人污污视频在线观看| 高清av一区二区| 丰满白嫩尤物一区二区| 国产成人免费在线视频| 国产精品亚洲专一区二区三区| 久久97超碰国产精品超碰| 日韩影院精彩在线| 蜜臀久久久久久久| 免费成人结看片| 精品一区二区精品| 日本视频免费一区| 国产亚洲视频系列| 久久一区二区视频| 国产欧美精品一区aⅴ影院| 2017欧美狠狠色| 国产欧美一区二区精品忘忧草| 国产自产高清不卡| 国产激情视频一区二区三区欧美| 国产麻豆91精品| 丁香婷婷综合色啪| 91免费国产视频网站| 欧美午夜免费电影| 日韩一区二区三区视频| 欧美xxx久久| 日本一区二区三区视频视频| 国产精品久久久久久久裸模| 又紧又大又爽精品一区二区| 亚洲va天堂va国产va久| 日本v片在线高清不卡在线观看| 蜜臀av一区二区三区| 国产成人免费视频网站| 99麻豆久久久国产精品免费优播| 91国偷自产一区二区三区观看| 欧美午夜精品久久久| 欧美va在线播放| 国产女人18水真多18精品一级做| 国产精品国产自产拍高清av| 亚洲精品国产无套在线观| 日韩女优电影在线观看| 中文字幕av在线一区二区三区| 亚洲人成网站色在线观看| 亚洲一级二级三级在线免费观看| 日韩精品五月天| 国产在线视频精品一区| 色乱码一区二区三区88| 日韩免费在线观看| 日韩理论片一区二区| 日韩影院精彩在线| 99精品久久免费看蜜臀剧情介绍| 欧美日韩另类一区| 精品国产乱码久久久久久夜甘婷婷 | 欧美一区二区观看视频| 中文字幕欧美日韩一区| 亚洲成va人在线观看| 国产盗摄视频一区二区三区| 欧洲激情一区二区| 亚洲精品在线电影| 亚洲午夜国产一区99re久久| 国产传媒久久文化传媒| 欧美美女直播网站| 国产精品久久久爽爽爽麻豆色哟哟| 亚洲国产综合色| 国产91清纯白嫩初高中在线观看| 欧美裸体一区二区三区| 日韩精品乱码av一区二区| 国产精品久久久久久一区二区三区 | 欧美精品一级二级| 中文字幕日韩精品一区| 久久不见久久见免费视频1| 色综合久久99| 国产肉丝袜一区二区| 日韩精品色哟哟| 欧美伊人久久久久久午夜久久久久| 久久久国产精品午夜一区ai换脸| 天天免费综合色| 色88888久久久久久影院按摩| 欧美经典一区二区三区| 美女在线观看视频一区二区| 欧美视频一区二区三区在线观看| 国产精品网友自拍| 国产美女精品一区二区三区| 欧美一区二区黄色| 蜜臀久久久久久久| 欧美一区二区三区在线观看| 亚洲在线中文字幕| 91精品福利视频| 亚洲三级电影网站| 色综合久久综合中文综合网| 久久精品夜色噜噜亚洲a∨| 日韩av在线免费观看不卡| 欧美日韩一级大片网址| 亚洲国产日韩精品| 欧美日韩久久不卡| 亚洲成人动漫在线免费观看| 欧美三级视频在线| 日韩av一区二区三区四区| 欧美性高清videossexo| 一区二区三区精品视频| 色综合天天综合网天天看片| 欧美日韩你懂的| 亚洲国产精品一区二区www在线| 在线观看亚洲成人| 亚洲黄色性网站| 91福利在线看| 亚洲在线视频一区| 精品视频免费看| 免费看精品久久片| 久久婷婷成人综合色| 国产福利一区在线| 亚洲日穴在线视频| 在线电影院国产精品| 蜜桃视频一区二区三区在线观看| 国产精品亚洲综合一区在线观看| 国产女人aaa级久久久级| 91丨porny丨蝌蚪视频| 亚洲激情中文1区| 欧美人妖巨大在线| 国产精品一二三区| 欧美中文一区二区三区| 亚洲午夜久久久久久久久久久 | 婷婷激情综合网| 日韩无一区二区| 国产精品主播直播| 亚洲免费大片在线观看| 色又黄又爽网站www久久| 日日噜噜夜夜狠狠视频欧美人| 精品国产乱子伦一区| 91网站在线观看视频| 三级成人在线视频|