/////////////////////////////////////////////////////////////////////////////
// CLIFUSBDlg dialog
#ifndef _RFIDMSR_U_INCLUDE_
#define _RFIDMSR_U_INCLUDE_

extern "C" {
// Declare the C libraries used
#include "setupapi.h"		// Must link in setupapi.lib
#include "hidsdi.h"		// Must link in hid.lib
//******************************************************
//函数原形：int32_t WINAPI Hid_Init()
//功能：打开LIF-MF通讯端口
//返回：0		=	成功
//		其他值	=	失败
//******************************************************
int32_t WINAPI Hid_Init();

//******************************************************
//函数原形：void WINAPI Hid_Close()
//功能：关闭LIF-MF通讯端口
//******************************************************
void WINAPI Hid_Close();

/*************************************************************
	函数原形：void WINAPI getVersion(int8_t * outVer,int32_t *outVerLen)
	函数功能：获取动态库版本号
	出口参数：
			  int8_t * outVer				 版本号字符串
			  int32_t *outVerLen			 版本号字符串长度
	**************************************************************/
	void WINAPI getVersion(int8_t * outVer,int32_t *outVerLen);

	/*************************************************************
	函数原形：int32_t WINAPI RFID_Init()
	函数功能：RFID射频开关
	出口参数：
			  int inMode					0打开射频天线  1关闭射频天线
	返回：	
			  0								 成功
			  其他值						 失败
	**************************************************************/
	int32_t WINAPI RFID_Init(int inMode);

	/*************************************************************
	函数原形：int32_t WINAPI RFID_M1_Search(int8_t * outCardNo,int32_t *outCardNoLen)
	函数功能：搜索磁场范围内的M1卡
	入口参数：
			  int32_t inTimeOut				 超时时间
	出口参数：
			  int8_t * outCardNo			 读到的卡号
			  int32_t *outCardNoLen			 读到的卡号长度
	返回：	
			  0								 成功
			  其他值						 失败
	**************************************************************/
	int32_t WINAPI RFID_M1_Search(int8_t * outCardNo,int32_t *outCardNoLen,int32_t inTimeOut);

	/*************************************************************
	函数原形：int32_t WINAPI RFID_M1_Authentication(int32_t inBlock,int8_t* inCardNo,int32_t inCardNoLen,int8_t* inCardKey,int32_t inCardKeyLen,int32_t inTimeOut)
	函数功能：验证密钥
	入口参数：
			  int32_t inBlock				 块号
			  int8_t* inCardNo				 寻卡中获取的卡号
			  int32_t inCardNoLen			 寻卡中获取的卡号长度
			  int8_t* inCardKey				 秘钥串
			  int32_t inCardKeyLen			 秘钥串长度
			  int32_t inTimeOut				 超时时间
	返回：	
			  0								 成功
			  其他值						 失败
	*************************************************************/
	int32_t WINAPI RFID_M1_Authentication(int32_t inBlock,int8_t* inCardNo,int32_t inCardNoLen,int8_t* inCardKey,int32_t inCardKeyLen,int32_t inTimeOut);

	/*************************************************************
	函数原形：int32_t WINAPI RFID_M1_Read(int32_t inBlock, int8_t * outCardData,int32_t *outCardDataLen,int32_t inTimeOut)
	函数功能：读M1卡的指定块号的数据
	入口参数：
			  int32_t inBlock				 块号
			  int32_t inTimeOut				 读卡超时时间
	出口参数：
			  int8_t * outCardData			 读到的卡号数据
			  int32_t *outCardDataLen		 读到的卡号数据长度
	返回：	
			  0								 成功
			  其他值						 失败
	**************************************************************/
	int32_t WINAPI RFID_M1_Read(int32_t inBlock, int8_t * outCardData,int32_t *outCardDataLen,int32_t inTimeOut);

	/*************************************************************
	函数原形：int32_t WINAPI RFID_M1_Write(int32_t inBlock,int8_t * inCardData,int32_t inCardDataLen,int32_t inTimeOut)
	函数功能：写M1卡的指定块号
	入口参数：
			  int32_t inBlock				 块号
			  int32_t inTimeOut				 读卡超时时间
			  int8_t * inCardData			 写入的卡号数据
			  int32_t inCardDataLen			写入的卡号数据长度
	返回：	
			  0								 成功
			  其他值						 失败
	**************************************************************/
	int32_t WINAPI RFID_M1_Write(int32_t inBlock,int8_t * inCardData,int32_t inCardDataLen,int32_t inTimeOut);

	/*************************************************************
	函数原形：int32_t WINAPI RFID_M1_PurseInit(int32_t inBlock,int32_t inAmount,int32_t inTimeOut)
	函数功能：M1卡初始化钱包
	入口参数：
			  int32_t inBlock				 块号
			  int32_t inAmount				 初始化金额
			  int32_t inTimeOut				 读卡超时时间

	返回：	
			  0								 成功
			  其他值						 失败
	**************************************************************/
	int32_t WINAPI RFID_M1_PurseInit(int32_t inBlock,int32_t inAmount,int32_t inTimeOut);

	/*************************************************************
	函数原形：int32_t WINAPI RFID_M1_PurseBalance(int32_t inBlock,int32_t *inAmount,int32_t inTimeOut)
	函数功能：读M1卡钱包
	入口参数：
			  int32_t inBlock				 块号
			  
			  int32_t inTimeOut				 读卡超时时间
	出口参数：
			  int32_t *inAmount				 读到的钱包余额		  
	返回：	
			  0								 成功
			  其他值						 失败
	**************************************************************/
	int32_t WINAPI RFID_M1_PurseBalance(int32_t inBlock,int32_t *inAmount,int32_t inTimeOut);

	/*************************************************************
	函数原形：int32_t WINAPI RFID_M1_PurseIncrease(int32_t inBlock,int32_t inAmount,int32_t inTimeOut)
	函数功能：M1卡钱包充值
	入口参数：
			  int32_t inBlock				 块号
			  int32_t inAmount				 充值金额
			  int32_t inTimeOut				 读卡超时时间

	返回：	
			  0								 成功
			  其他值						 失败
	**************************************************************/
	int32_t WINAPI RFID_M1_PurseIncrease(int32_t inBlock,int32_t inAmount,int32_t inTimeOut);


	/*************************************************************
	函数原形：int32_t WINAPI RFID_M1_PurseDecrease(int32_t inBlock,int32_t inAmount,int32_t inTimeOut)
	函数功能：M1卡钱包扣款
	入口参数：
			  int32_t inBlock				 块号
			  int32_t inAmount				 扣款金额
			  int32_t inTimeOut				 读卡超时时间

	返回：	
			  0								 成功
			  其他值						 失败
	**************************************************************/
	int32_t WINAPI RFID_M1_PurseDecrease(int32_t inBlock,int32_t inAmount,int32_t inTimeOut);

	/*************************************************************
	函数原形：int32_t WINAPI RFID_CPU_Search(int32_t inTimeOut)
	函数功能：搜索磁场范围内的14443ACPU卡
	返回：	
			  0								 成功
			  其他值						 失败
	**************************************************************/
	int32_t WINAPI RFID_CPU_Search(int32_t inTimeOut);

	/*************************************************************
	函数原形：int32_t WINAPI RFID_CPU_APDU(int8_t * inApduData,int32_t inApduDataLen,int8_t* outApduData,int32_t *outApduDataLen,int32_t inTimeOut)
	函数功能：CPU卡 APDU指令
	入口参数：
			  int32_t inTimeOut				 APDU通信超时时间
			  int8_t * inApduData			 APDU的指令数据
			  int32_t inApduDataLen			 APDU的指令数据长度
	出口参数：
			  int8_t* outApduData			 APDU返回的数据
			  int32_t *outApduDataLen		 APDU返回的数据长度
			  
	返回：	
			  0								 成功
			  其他值						 失败
	**************************************************************/
	int32_t WINAPI RFID_CPU_APDU(int8_t * inApduData,int32_t inApduDataLen,int8_t* outApduData,int32_t *outApduDataLen,int32_t inTimeOut);

	/*************************************************************
	函数原形：int32_t WINAPI RFID_14443B_Search(int32_t inTimeOut)
	函数功能：搜索磁场范围内的14443BCPU卡
	返回：	
			  0								 成功
			  其他值						 失败
	**************************************************************/
	int32_t WINAPI RFID_14443B_Search(int32_t inTimeOut);


	/*************************************************************
	函数原形：int32_t WINAPI RFID_14443B_APDU(int8_t * inApduData,int32_t inApduDataLen,int8_t* outApduData,int32_t *outApduDataLen,int32_t inTimeOut)
	       
	函数功能：CPU卡 APDU指令
	入口参数：
			  int32_t inTimeOut				 APDU通信超时时间
			  int8_t * inApduData			 APDU的指令数据
			  int32_t inApduDataLen			 APDU的指令数据长度
	出口参数：
			  int8_t* outApduData			 APDU返回的数据
			  int32_t *outApduDataLen		 APDU返回的数据长度
			  
	返回：	
			  0								 成功
			  其他值						 失败
	**************************************************************/
	int32_t WINAPI RFID_14443B_APDU(int8_t * inApduData,int32_t inApduDataLen,int8_t* outApduData,int32_t *outApduDataLen,int32_t inTimeOut);

	/*************************************************************
	函数原形：int32_t WINAPI NFC_F_Search(int32_t inTimeOut)
	函数功能：搜索磁场范围内的FELICA
	返回：	
			  0								 成功
			  其他值						 失败
	**************************************************************/
	int32_t WINAPI NFC_F_Search(int32_t inTimeOut);

	/*************************************************************
	函数原形：int32_t WINAPI NFC_F_Read_Block(int32_t inBlock, int8_t * outCardData,int32_t *outCardDataLen)
	       
	函数功能：Felica卡 读卡
	入口参数：
			  int32_t inBlock				 块号
	出口参数：
			  int8_t* outApduData			 读到的卡片数据
			  int32_t *outApduDataLen		 读到的卡片数据长度
			  
	返回：	
			  0								 成功
			  其他值						 失败
	**************************************************************/
	int32_t WINAPI NFC_F_Read_Block(int32_t inBlock, int8_t * outCardData,int32_t *outCardDataLen);

	/*************************************************************
	函数原形：int32_t WINAPI NFC_F_Read_Block_EX(int32_t inStartBlock,int32_t inBlockNum, int8_t * outCardData,int32_t *outCardDataLen)
	       
	函数功能：Felica卡 读卡
	入口参数：
			  int32_t inStartBlock			 开始读的块号
			  int32_t inBlockNum			 想要的的块数量
	出口参数：
			  int8_t* outApduData			 读到的卡片数据
			  int32_t *outApduDataLen		 读到的卡片数据长度
			  
	返回：	
			  0								 成功
			  其他值						 失败
	**************************************************************/
	int32_t WINAPI NFC_F_Read_Block_EX(int32_t inStartBlock,int32_t inBlockNum, int8_t * outCardData,int32_t *outCardDataLen);

	/*************************************************************
	函数原形：int32_t WINAPI NFC_V_Search(int32_t inTimeOut)
	函数功能：搜索磁场范围内的15693卡片
	返回：	
			  0								 成功
			  其他值						 失败
	**************************************************************/
	int32_t WINAPI NFC_V_Search(int32_t inTimeOut);

	/*************************************************************
	函数原形：int32_t WINAPI NFC_V_Read_Block(int32_t inBlock, int8_t * outCardData,int32_t *outCardDataLen)
	       
	函数功能：15693卡 读卡
	入口参数：
			  int32_t inBlock				 块号
	出口参数：
			  int8_t* outApduData			 读到的卡片数据
			  int32_t *outApduDataLen		 读到的卡片数据长度
			  
	返回：	
			  0								 成功
			  其他值						 失败
	**************************************************************/
	int32_t WINAPI NFC_V_Read_Block(int32_t inBlock, int8_t * outCardData,int32_t *outCardDataLen);

	
	/*************************************************************
	函数原形：int32_t WINAPI NFC_V_Read_Block_EX(int32_t inStartBlock,int32_t inBlockNum, int8_t * outCardData,int32_t *outCardDataLen)
	       
	函数功能：15693卡 读卡
	入口参数：
			  int32_t inStartBlock			 开始读的块号
			  int32_t inBlockNum			 想要的的块数量
	出口参数：
			  int8_t* outApduData			 读到的卡片数据
			  int32_t *outApduDataLen		 读到的卡片数据长度
			  
	返回：	
			  0								 成功
			  其他值						 失败
	**************************************************************/	
	int32_t WINAPI NFC_V_Read_Block_EX(int32_t inStartBlock,int32_t inBlockNum, int8_t * outCardData,int32_t *outCardDataLen);
	
	
	
	/*************************************************************
	函数原形：int32_t WINAPI NFC_V_Read_Block_lock_state(int32_t inStartBlock,int32_t inBlockNum, int8_t * outCardData,int32_t *outCardDataLen)
	       
	函数功能：15693卡 读取卡片锁保护状态
	入口参数：
			  int32_t inStartBlock			 开始读的块号
			  int32_t inBlockNum			 想要的的块数量
	出口参数：
			  int8_t* outApduData			 读到的卡片数据
			  int32_t *outApduDataLen		 读到的卡片数据长度
			  
	返回：	
			  0								 成功
			  其他值						 失败
	**************************************************************/	
	int32_t WINAPI NFC_V_Read_Block_lock_state(int32_t inStartBlock,int32_t inBlockNum, int8_t * outCardData,int32_t *outCardDataLen);

	/*************************************************************
	函数原形：int32_t WINAPI NFC_V_Read_Block_lock_state(int32_t inStartBlock,int32_t inBlockNum, int8_t * outCardData,int32_t *outCardDataLen)
	       
	函数功能：15693卡 带锁保护读卡
	入口参数：
			  int32_t inStartBlock			 开始读的块号
			  int32_t inBlockNum			 想要的的块数量
	出口参数：
			  int8_t* outApduData			 读到的卡片数据
			  int32_t *outApduDataLen		 读到的卡片数据长度
			  
	返回：	
			  0								 成功
			  其他值						 失败
	**************************************************************/	
	int32_t WINAPI NFC_V_Read_lock_state_block(int32_t inStartBlock,int32_t inBlockNum, int8_t * outCardData,int32_t *outCardDataLen);

	//20231225 威霸要求加入felica写卡
	/*************************************************************
	函数原形：int32_t WINAPI NFC_F_Write_Block(int32_t inBlock, int8_t * inCardData,int32_t inCardData)
	       
	函数功能：Felica卡 写卡
	入口参数：
			  int32_t inBlock				 块号
			  int8_t* inCardData			 写到的卡片数据
			  int32_t inCardData			 写到的卡片数据长度
			  
	返回：	
			  0								 成功
			  其他值						 失败
	**************************************************************/
	int32_t WINAPI NFC_F_Write_Block(int32_t inBlock, int8_t * inCardData,int32_t inCardDataLen);




}


#define BYTE unsigned char


#define SUCCESS					0			//操作成功
#define	PARAMETER_ERR		 -1001			//数据包格式错误
#define READ_ERR			 -1002			//读数据错误
#define WRITE_ERR			 -1003			//写数据错误
#define GET_HIDSTRUCT_ERR	 -1004			//获取HID设备描述错误
#define FORMART_ERR			 -1005			//数据包格式错误
#define HIDINIT_ERR     	 -1006			//打开RFID失败
#define HID_TIMEOUT		     -1007			//通信超时
#define AUTHENTICATION_ERR   -1008			//验证密钥失败
#define READ_FORMAT_ERR		 -1009			//读取返回的数据格式错误
#define READ_CARD_ERR		 -1010			//读卡返回状态错误
#define PURSE_FORMAT_ERR	 -1011			//钱包格式错误
#define TRANSFER_ERR		 -1012			//钱包扣款充值完成之后的transfer指令失败
#define CARD_OF_OTHER_TYPE   -1013			//放上的卡片和调用的API的类型不匹配(调用其他的API来操作这张卡片)
#define WRITE_CARD_ERR		 -1014			//写卡返回状态错误  //威霸要求写felica加入




HIDP_CAPS	Capabilities;
HANDLE HIDHandle;
#endif