#ifndef _MASTERRD_H_
#define _MASTERRD_H_


/**********************************************************
    库的返回值，一般的情况>=0为成功
    而<0 为失败，具体的值指出失败的原因
**********************************************************/
#define LIB_SUCCESS        0
#define LIB_PARAM_ERR     -1  //参数错误
#define LIB_OS_ERR        -2  //操作系统错误
#define LIB_NETWORK_ERR   -3  //网络错误(socket不能分配，不能建立连接) 
#define LIB_TIMEOUT       -4  //操作超时
#define LIB_FAILED        -5  //失败
#define LIB_BUS_EXIST     -6  //总线已经存在
#define LIB_READER_EXIST  -7  //读卡器已经存在

#define MAX_RF_BUFFER     1024

#define _SAM_TIMEOUT_          1500
#define _ISO14443_4_TIMEOUT_   5100
#define _FAST_FUN_TIMEOUT_     100

#define SAM_CMD_INIT_BAUD      0x90
#define SAM_CMD_RST            0x91
#define SAM_CMD_SET_PPS        0x92
#define SAM_CMD_COS            0x93
#define ISO14443A_CMD_ANTICOLLISION_AND_SELECT 0x94

// 串口属性
typedef struct tagCommPortProperty
{
	UINT nPort; // 端口
	UINT nBaud; // 波特率
} CommPortProperty;

// 网口属性
typedef struct tagTCPPortProperty
{
	char szAddr[16]; // ip地址, 例:192.168.8.88
	WORD nPort;       // 端口
} TCPPortProperty;


/**********************************************************
    功能:初始化MasterRD库
    参数:phInstMaster 用来指向库的指针
    返回:TURE为成功
    说明:一般用在程序开始
**********************************************************/
BOOL MasterRD_Load_rfLib(HINSTANCE *phInstMaster);

/**********************************************************
    功能:释放MasterRD库
    参数:phInstMaster 用来指向库的指针
    返回:TURE为成功
    说明:一般用在程序结束时
**********************************************************/
BOOL MasterRD_Free_rfLib(HINSTANCE *phInstMaster);


/**********************************************************
  功能: 获取动态库版本号 2字节, 高字节为主版本号, 低字节为副版本号
  返回: 成功返回0
**********************************************************/
extern int    (WINAPI *rf_GetVer)(UINT *pnVer);

/**********************************************************
  功能: DES 算法加密函数
  参数: szOut:   加密结果，长度等于加密数据长度
        szIn:    加密数据
        inlen:   加密数据长度,8字节的整数倍
        key:     密钥
        keylen:  密钥长度,如果大于8字节，是3des,如果小于等于8字节单des.不足补零
  返回:  成功返回0
**********************************************************/
extern int    (WINAPI *rf_DES_Encrypt)(BYTE *pcOut, BYTE *pcIn, UINT nInLen, BYTE *pcKey, UINT nKeyLen);

/**********************************************************
  功能: DES 算法解密函数
  参数: szOut:   解密结果，长度等于解密数据长度
        szIn:    解密数据
        inlen:   解密数据长度,8字节的整数倍
        key:     密钥
        keylen:  密钥长度,如果大于8字节，是3des,如果小于等于8字节单des.不足补零
返回:  成功返回0
**********************************************************/
extern int    (WINAPI *rf_DES_Decrypt)(BYTE *pcOut, BYTE *pcIn, UINT nInLen, BYTE *pcKey, UINT nKeyLen);

/**********************************************************
  功能: 打开串口
  参数: port: 串口号，取值串口1 ~ 256 
        baud:  指定是读卡器的波特率
  返回: 成功则返回0
**********************************************************/
extern int    (WINAPI *rf_COM_Open)(UINT port, long baud);

/**********************************************************
  功能: 关闭串口
  参数: port: 已经打开的串口号，取值串口1 ~ 256 
  返回: 成功则返回0
  说明: 这将关闭该串口上挂有的所有读卡器
**********************************************************/
extern int    (WINAPI *rf_COM_Close)(UINT port);

/**********************************************************
  功能: 查看串口是否已经打开
  参数: port: 要判断的串口号，取值串口1 ~ 256 
  返回: 已打开则返回 1 (TRUE);
        未打开则所回 0 (FALSE);
**********************************************************/
extern BOOL   (WINAPI *rf_COM_IsOpen)(UINT port);

/**********************************************************
  功能: 获得串口的波特率
  参数: port: 串口号，取值串口1 ~ 256 
  返回: 波特率
**********************************************************/
extern int    (WINAPI *rf_COM_GetBaud)(UINT port);

/**********************************************************
  功能: 打开网口
  参数: ipaddr: 网络IP地址,比如"192.168.1.2"
        port:   网络端口
  返回: 成功则返回0 
**********************************************************/
extern int    (WINAPI *rf_Net_Open)(LPCSTR szIPAddr, UINT port);

/**********************************************************
  功能: 关闭网口
  参数: ipaddr: 网络IP地址,比如"192.168.1.2"
        port:   网络端口
  返回: 成功则返回0 
  说明: 这将关闭该网口上挂有的所有读卡器
**********************************************************/
extern int    (WINAPI *rf_Net_Close)(LPCSTR szIPAddr, UINT port);

/**********************************************************
  功能: 查看网口是否已经打开
  参数: ipaddr: 网络IP地址,比如"192.168.1.2"
        port:   网络端口
  返回: 已打开则返回 1 (TRUE);
        未打开则所回 0 (FALSE);
**********************************************************/
extern int   (WINAPI *rf_Net_IsOpen)(LPCSTR szIPAddr, UINT port);

/**********************************************************
  功能: 打开挂在网络口上的读卡器
  参数: ipaddr: 网络IP地址,比如"192.168.1.2"
        port:   网络端口
  返回: 成功则返回0 
  说明: 要求先打开网络口, 否则出错,
        一个网口上可以挂载多个读卡器, 读卡器通过nReaderID区分

**********************************************************/
extern int    (WINAPI *rf_Reader_TcpOpen)(LPCSTR szIPAddr, UINT port, WORD nReaderID);



/**********************************************************
  功能: 打开挂在COM口上的读卡器
  参数: port:  串口号
        nReaderID: 读卡器的设备标识
  返回: 成功则返回0 
  说明: 要求先打开COM口, 否则出错,
        一个串口上可以挂载多个读卡器, 读卡器通过nReaderID区分

**********************************************************/
extern int    (WINAPI *rf_Reader_ComOpen)(UINT port, WORD nReaderID);

/**********************************************************
  功能: 关闭Reader
  参数: nReaderID 为打开的设备的标识 
  返回: 成功则返回0
**********************************************************/
extern int    (WINAPI *rf_Reader_Close)(WORD nReaderID);

/**********************************************************
  功能: 查看读卡器是否已经打开
  参数: nReaderID 为打开的设备的标识 
  返回: 已打开则返回 1 (TRUE)
        未打开则所回 0 (FALSE)
**********************************************************/
extern BOOL    (WINAPI *rf_Reader_IsOpen)(WORD nReaderID);

/*********************************************************
  功能: 设置读卡器的设备编号 
  参数: nReaderID 为打开的设备的标识，其中低8位字节为设备编号
  返回: 成功则返回0
  说明: 最大接入读卡设备为256个，所以设备nReaderID取值范围是
        0x0000～0x00FF
**********************************************************/
extern int    (WINAPI *rf_Reader_SetID)(WORD nReaderID, WORD nNewReaderID);

/**********************************************************
  功能: 获得指定设备标识
  参数: nReaderID: 打开的Reader的标识
  返回: 成功返回0      
**********************************************************/
extern int    (WINAPI *rf_Reader_GetID)(WORD *pnReaderID);

/********************************************************
  功能: 取得读写卡器硬件版本号
  参数: nReaderID:   读卡器标识符
        Version: 存放返回版本信息
  返回: 成功则返回0
*********************************************************/
extern int    (WINAPI *rf_Reader_GetFirmwareVer)(WORD nReaderID, WORD *pnVersion);

/*********************************************************
  功能: 取得读写卡器产品序列号(8 字节 ) 
  参数: nReaderID: 读卡器标识符
        Snr:   存放返回读写卡器产品序列号
  返回: 成功则返回0
*********************************************************/
extern int    (WINAPI *rf_Reader_GetSN)(WORD nReaderID, BYTE *pcSNR);

/*********************************************************
  功能: 蜂鸣操作  
  参数: nReaderID: 读卡器标识符
        msec:  蜂鸣时限，单位是10 毫秒
  返回: 成功则返回0
*********************************************************/
extern int    (WINAPI *rf_Reader_SetBeep)(WORD nReaderID, BYTE cTmie);

/*********************************************************
  功能: 控制灯的颜色  
    参数: nReaderID: 读卡器标识符
	        color:  0 ,熄灯
					1 ,红灯
					2 ,绿灯
					3 ,黄灯
			  返回: 成功则返回0
*********************************************************/
extern int    (WINAPI *rf_Reader_SetLight)(WORD nReaderID, BYTE cColor);
/*********************************************************
  功能: 关闭或启动读写卡器天线发射  // 不导出 
  参数: nReaderID: 读卡器标识符
        model: 天线状态
  返回: 成功则返回0
  说明: mode=0: 关闭天线
        mode=1: 开启天线
*********************************************************/
extern int    (WINAPI *rf_Reader_SetAntenna)(WORD nReaderID, BYTE state);

/*********************************************************
  功能: 启动读写卡器天线发射   
  参数: nReaderID: 读卡器标识符
  返回: 成功则返回0
*********************************************************/
extern int    (WINAPI *rf_Reader_AntennaON)(WORD nReaderID);

/*********************************************************
  功能: 关闭读写卡器天线发射   
  参数: nReaderID: 读卡器标识符
  返回: 成功则返回0
*********************************************************/
extern int    (WINAPI *rf_Reader_AntennaOFF)(WORD nReaderID);
// Seek Baudrate ID 不导出
extern BYTE   (WINAPI *rf_SAM_GetBaudID)(UINT baud);
/*********************************************************
  功能: 设置读写卡器sam 卡通讯波特率
  参数: nReaderID: 读卡器标识符
  	samNo: SAM卡逻辑编号
        baud:  sam 卡波特率，取值为9600, 19200, 38400, 55800, 57600, 115200, 230400
  返回: 成功则返回0
*********************************************************/
extern int    (WINAPI *rf_SAM_InitBaudrate)(WORD nReaderID, BYTE cSamNo, UINT nBaudRate);

/*********************************************************
  功能: 复位sam 卡
  参数: nReaderID:  读卡器标识符
  	samNo: SAM卡逻辑编号
        pData:  返回的复位信息内容
        pDataLength: 返回复位信息的长度
  返回: 成功则返回0
*********************************************************/
extern int    (WINAPI *rf_SAM_RST)(WORD nReaderID, BYTE cSamNo, BYTE *pcRstInfo, BYTE *pcDataLen);

/*********************************************************
  功能: 向SAM 卡发送COS 命令  
  参数: nReaderID:   读卡器标识符
  	samNo: SAM卡逻辑编号
        command: cos 命令
        cmdLen:   cos 命令长度
        pDate:   卡片返回的数据，含SW1、SW2
        pDataLength:  返回数据长度
  返回: 成功则返回0
*********************************************************/
extern int    (WINAPI *rf_SAM_COS)(WORD nReaderID, BYTE cSamNo, BYTE *pcApduIn, BYTE cApduLen, BYTE *pcResultOut, BYTE *pcResultLen, DWORD dwTimeOut);

/*********************************************************
  功能:  设置读写卡器与sam 卡通讯波特率
  参数:  nReaderID:  读卡器标识符
    	samNo: SAM卡逻辑编号，取值1，2，3……
         baud:       SAM 卡波特率
		       9600, 19200, 38400, 55800 
			   57600,76800, 115200
  返回:  成功则返回0
  说明: 
		1. 默认baud是9600
		2. 并不是所有sam都支持每种baud。
*********************************************************/
extern int    (WINAPI *rf_SAM_SetPPS)(WORD nReaderID, BYTE cSamNo, UINT nBaudRate);


/*********************************************************
  功能: 设置读写卡器非接触工作方式
  参数: nReaderID: 读卡器标识符
        type:   读写卡器工作方式
  返回: 成功则返回0
  说明: type='A': 设置为TYPE_A方式（mifare one、mifareplus，ultralight等)
        type='B': 设置为TYPE_B方式（ISO14443-4TypeB)
        type='r': 设置为AT88RF020卡方式
        type='s': 设置SR176
        type='1': 设置为ISO15693
*********************************************************/
extern int    (WINAPI *rf_Reader_SetISOType)(WORD nReaderID, BYTE cType);

/*********************************************************
  功能：寻符合ISO14443 TypeA 卡片并且选定这张卡片
  参数：nReaderID： 读卡器标识符
        cModel：寻卡模式
        pData： 返回数据
        pLen：  返回数据长度
        pUidLength： UID长度
  返回：成功则返回0
  说明：
  1、 mode=0x26:寻未进入休眠状态的卡
      mode=0x52:寻所有状态的卡
  2、pData：ATQA(2Byte)+SAK(1Byte)+SNR(4/7/10 Byte)
*********************************************************/
extern int    (WINAPI *rf_ISO14443A_GetCard)(WORD nReaderID, BYTE cMode, BYTE *pcDataOut, BYTE *pcDataLen);

/*********************************************************
  功能: 寻ISO14443 TYPE_A 卡  
  参数: nReaderID:   读卡器标识符
        model:   寻卡模式
        TagType: 返回卡类型值
  返回: 成功则返回0
  说明: 
       mode=0x26: 寻未进入休眠状态的卡
       mode=0x52: 寻所有状态的卡
*********************************************************/
extern int    (WINAPI *rf_ISO14443A_Request)(WORD nReaderID, BYTE cMode, USHORT *cpATQA);

// 功能：反碰撞且选卡，返回卡号
/*********************************************************
  功能: 反碰撞且选卡
  参数: nReaderID:     读卡器标识符
        pData:     返回数据
        pDataLen:  返回数据长度
  返回: 成功则返回0
  说明: 
        pData: SAK(1Byte)+snLen(1Byte) + SNR(snLen(4/7/10) Byte)
*********************************************************/
extern int    (WINAPI *rf_ISO14443A_AnticollisionAndSelect)(WORD nReaderID, BYTE *pcOutData, BYTE *pcDataLen);

/*********************************************************
  功能: ISO14443 TYPE_A 卡防冲撞级别1 
  参数: nReaderID:   读卡器标识符
        pSnr:    返回的卡序列号
  返回: 成功则返回0
*********************************************************/
extern int    (WINAPI *rf_ISO14443A_AnticollisionLevel1)(WORD nReaderID, BYTE *pcSNR);

/*********************************************************
  功能: ISO14443 TYPE_A 卡防冲撞级别2 
  参数: nReaderID:   读卡器标识符
        pSnr:    返回的卡序列号
  返回: 成功则返回0
*********************************************************/
extern int    (WINAPI *rf_ISO14443A_AnticollisionLevel2)(WORD nReaderID, BYTE *pcSNR);

/*********************************************************
  功能: ISO14443 TYPE_A 卡防冲撞级别3 
  参数: nReaderID:   读卡器标识符
        pSnr:    返回的卡序列号
  返回: 成功则返回0
*********************************************************/
extern int    (WINAPI *rf_ISO14443A_AnticollisionLevel3)(WORD nReaderID, BYTE *pcSNR);

/*********************************************************
  功能: 选择一张ISO14443 TYPE_A 卡Level1
  参数: nReaderID: 读卡器标识符
        pSnr:  卡序列号
        sak:  sak
  返回: 成功则返回0
*********************************************************/
extern int    (WINAPI *rf_ISO14443A_SelectLevel1)(WORD nReaderID, BYTE *pcSNR, BYTE *pcSAK);

/*********************************************************
  功能: 选择一张ISO14443 TYPE_A 卡Level2
  参数: nReaderID: 读卡器标识符
        pSnr:  卡序列号
        sak:  sak
  返回: 成功则返回0
*********************************************************/
extern int    (WINAPI *rf_ISO14443A_SelectLevel2)(WORD nReaderID, BYTE *pcSNR, BYTE *pcSAK);

/*********************************************************
  功能: 选择一张ISO14443 TYPE_A 卡Level3
  参数: nReaderID: 读卡器标识符
        pSnr:  卡序列号
        sak:  sak
  返回: 成功则返回0
*********************************************************/
extern int    (WINAPI *rf_ISO14443A_SelectLevel3)(WORD nReaderID, BYTE *pcSNR, BYTE *pcSAK);


/**********************************************************
  功能: 命令已激活的ISO14443-3 TYPE_A卡进入休眠状态
  参数: nReaderID: 读卡器标识符
  返回: 成功则返回0
**********************************************************/
extern int    (WINAPI *rf_ISO14443A_Halt)(WORD nReaderID);

/**************************************************************
  功能: 设定Mifare卡片加密标准 
  参数nReaderID:    读卡器标识符
        cStandard: 
                  0x00: NXP标准
                  0x01: 上海标准
***************************************************************/
extern int    (WINAPI *rf_Reader_SetAuthenticationStandard)(WORD nReaderID, BYTE cStandard);

/*********************************************************
  功能: 用当前指定的密钥对卡片授权认证
  参数: nReaderID:  读卡器标识符
        mode:  密码验证模式
        block: 要验证密码的绝对块号
        key:    下载的密钥(6Byte)
  返回: 成功则返回0
  说明: model=0x60: 验证A密钥
        model=0x61: 验证B密钥
*********************************************************/
extern int    (WINAPI *rf_M1_Authentication)(WORD nReaderID, BYTE cMode, BYTE cBlock, BYTE *pcKey);

/*************************************************************** 
  功能: 向读写卡器下载Mifare One 卡密钥
  参数: nReaderID:    读卡器标识符
        KeyIndex:  存储密钥索引(0~31);
        key:      密钥，6 字节
  返回: 成功则返回0
***************************************************************/
extern int    (WINAPI *rf_M1_DownloadKeyToReader )(WORD nReaderID, BYTE cKeyIndex, BYTE *pcKey);

/**********************************************************
  功能: 用指定的密钥验证Mifare One 卡
  参数: nReaderID: 读卡器标识符
        model: 密码验证模式
        block: 要验证密码的绝对块号
        keyIndex: 存储在RC5XX中的密钥索引
  返回: 成功则返回0
  说明: model=0x60: 验证A密钥
        model=0x61: 验证B密钥
**********************************************************/
extern int    (WINAPI *rf_M1_AuthenticateByDownloadedKey)(WORD nReaderID, BYTE cMode, BYTE cBlock, BYTE cKeyIndex);

/*********************************************************  
  功能: 从Mifare One 卡中读出一块数据
  参数: nReaderID: 读卡器标识符
        block: M1卡绝对块号
        pData:  读出的数据
        pLen:  读出数据长度
  返回: 成功则返回0
*********************************************************/
extern int    (WINAPI *rf_M1_Read)(WORD nReaderID, BYTE cBlock, BYTE *pData/*, BYTE* pLen*/);

/*********************************************************  
  功能: 从Mifare One 卡中读出多块数据 // 不导出
        read multi blocks of mifareone
  参数: nReaderID: 读卡器标识符
        StartBlock: 开始块号
		BlockCount: 要读的块数
        pData:  读出的数据
        pLen:   读出数据长度
  返回: 成功则返回0
*********************************************************/

extern int 	  (WINAPI *rf_M1_MultiRead)(WORD nReaderID, BYTE StartBlock, BYTE BlockCount, BYTE *pData, BYTE* pLen);

/********************************************************* 
  功能: 向Mifare One 卡中写入一块数据
  参数: nReaderID:  读卡器标识符
        block:      块号
        data:       写入的数据，16 字节
        返回:       成功则返回0
*********************************************************/
extern int    (WINAPI *rf_M1_Write)(WORD nReaderID, BYTE cBlock, BYTE *pData/*, BYTE len*/);

/*********************************************************  
  功能: 向Mifare One 卡中写入多块数据 // 不导出
        read multi blocks of mifareone
  参数: nReaderID: 读卡器标识符
        StartBlock: 开始块号
		BlockCount: 要写入的块数
        pData:      要写入的数据
  返回: 成功则返回0
*********************************************************/
extern int    (WINAPI *rf_M1_MultiWrite)(WORD nReaderID, BYTE StartBlock, BYTE BlockCount, BYTE *pData);

/********************************************************* 
  功能: 将Mifare One 卡某一扇区初始化为钱包
  参数: nReaderID: 读卡器标识符
        block: M1卡绝对块号
        value: 初始值
        返回: 成功则返回0
*********************************************************/
extern int    (WINAPI *rf_M1_PurseCreate)(WORD nReaderID, BYTE cBlock, int iValue);

/*********************************************************
  功能: 读Mifare One 钱包值
  参数: nReaderID:  读卡器标识符
        block:  M1卡绝对块号
        pValue: 返回的值
        返回: 成功则返回0
*********************************************************/
extern int    (WINAPI *rf_M1_PurseRead)(WORD nReaderID, BYTE cBlock, int *piValue);

/********************************************************* 
  功能: Mifare One 扣款
  参数: nReaderID: 读卡器标识符
        block: M1卡绝对块号
        value: 要扣的值
  返回: 成功则返回0
*********************************************************/
extern int    (WINAPI *rf_M1_PurseDecrement)(WORD nReaderID, BYTE cBlock, int iValue);

/*********************************************************
  功能: Mifare One 充值
  参数: nReaderID: 读卡器标识符
        block: M1卡绝对块号
        value: 要增加的值
        返回: 成功则返回0
*********************************************************/
extern int    (WINAPI *rf_M1_PurseIncrement)(WORD nReaderID, BYTE cBlock, int iValue);



/*********************************************************
  功能: Mifare One 卡值回传
  参数: nReaderID: 读卡器标识符
        block: M1卡绝对块号
  返回: 成功则返回0
  说明: 用此函数将指定的块内容传入卡的buffer，然后可用
        rf_M1transfer()函数将buffer 中数据再传送到另一块中去
*********************************************************/
extern int    (WINAPI *rf_M1_PurseRestore)(WORD nReaderID, BYTE cBlock);

/*********************************************************
  功能: 将Mifare One数据传送
  参数: nReaderID: 读卡器标识符
        block: M1卡绝对块号
  返回: 成功则返回0
  说明: 该函数仅在increment、decrement和restore 命令之后调用。
*********************************************************/
extern int    (WINAPI *rf_M1_PurseTransfer)(WORD nReaderID, BYTE cBlock);

/*********************************************************
  功能: 备份钱包
  参数: nReaderID:       读卡器标识符
        SrcBlock:    钱包源块
        DestBlock:   钱包目的块
  返回: 成功则返回0
  说明: 把SrcBlock块上的钱包备份到DestBlock块
*********************************************************/
extern int    (WINAPI *rf_M1_PurseBackup)(WORD nReaderID, BYTE cSrcBlock, BYTE cDestBlock);

/*********************************************************
  功能: 向ultra light卡中写入一块数据
  参数: nReaderID:  读卡器标识符
        block:   ultra light卡页地址（0～0x0f）
        data:   写入的数据，4字节
  返回: 成功则返回0
*********************************************************/
extern int    (WINAPI *rf_UltraLight_Write)(WORD nReaderID, BYTE cBlock, BYTE *pcData);

/*********************************************************
  功能: 从ultra light卡中读出一块数据
  参数: nReaderID:  读卡器标识符
        block:   ultra light卡页地址（0～0x0f）
        pData:   读出数据缓存
        pLen:    读出数据的长度
  返回: 成功则返回0
*********************************************************/
extern int    (WINAPI *rf_UltraLight_Read)(WORD nReaderID, BYTE cBlock, BYTE *pcData/*, BYTE* pcLen*/);

/*********************************************************
    Funciton:   Ultralight C card Authentication
    Parameter:  pcKey: 16 byte Key
    return:     0 is successful
    Description:	if start block number is 0x0F, then read 4 blocks: 0x0F, 0x00, 0x01 and 0x02
*********************************************************/
extern int    (WINAPI *rf_UltraLightC_Authentication)(WORD nReaderID, BYTE *pcKey);


/********************************************************* 
 功能:  符合ISO14443-4 TypeA 寻卡并且复位 // 被取消 不再导出
 参数:  nReaderID:  读卡器标识符
       model:  寻卡模式(0x26-REQA,0x52-WUPA)
       pData:  返回数据
       pMsgLg: 返回数据长度
 返回: 成功则返回0
*********************************************************/
extern int    (WINAPI *rf_ISO14443A_RST)(WORD nReaderID,BYTE model,BYTE *pData,BYTE* pMsgLg);

/*****************************************************************
  功能:  向符合ISO14443-TypeA/B 标准的CPU 卡发送COS 命令
  参数:  nReaderID:    读卡器标识符
        command:  cos 命令
        MsgLg:    返回数据长度
        Date:    卡片返回的数据，含SW1、SW2
  返回:  成功则返回0
*****************************************************************/
extern int    (WINAPI *rf_ISO14443_4_COS)(WORD nReaderID, BYTE *pcApduIn, BYTE cApduLen, BYTE *pcResultOut, BYTE* pcResultLen, DWORD dwTimeOut);

/********************************************************* 
  功能: ISO14443-4 TypeA 复位
  参数: nReaderID:   读卡器标识符
        pBuffer: 返回数据
		pLen:    返回数据长度
  返回:成功则返回0
*********************************************************/
extern int    (WINAPI *rf_ISO14443_4_TypeA_RATS)(WORD nReaderID, BYTE *pcATS, BYTE *pcLen);

/*****************************************************************
  功能:  寻符合ISO14443-TypeB 标准的卡
  参数:  nReaderID:  读卡器标识符
        model:  寻卡模式(0-REQB,1-WUPB)
        pData:  返回的数据
        MsgLg:  返回数据长度
  返回:  成功则返回0
*****************************************************************/
extern int    (WINAPI *rf_ISO14443B_Request)(WORD nReaderID, BYTE cMode, BYTE *pcATQB/*, BYTE *pDataLen*/);

/*****************************************************************
	Funciton:	request ISO14443 type B card and set ATTRIB
	Parameter:	nReaderID: reader ID
			cMode : request mode; 0: REQB; 1: WUPB
			cAFI  : Application Family Identifier
			cNSlot: Number of slots for anticollision process
			pcATQB: pointer to ATQB output(12 bytes)
	return:		0 is successful
	Description:	
*****************************************************************/
extern int    (WINAPI *rf_ISO14443B_GetCard)(WORD nReaderID, BYTE cMode, BYTE cAFI, BYTE cNSlot, BYTE *pcATQB);



/*****************************************************************
  功能:  激活已寻到的符合ISO14443-B 标准的卡 // 不导出, 已经取消
  参数:  nReaderID: 读卡器标识符
        PUPI:  卡片唯一标识符
        CID:   指定该卡片使用的逻辑地址,取值0～14 且小于slotmax
  返回:  成功则返回0
*****************************************************************/
extern int    (WINAPI *rf_ISO14443B_Attribute)(WORD nReaderID, unsigned char *pcPUPI, BYTE CID);


/***************************************************************** 
  功能: 命令一选中的TYPE_B 卡进入HALT 状态
  参数: nReaderID: 读卡器标识符
        PUPI:  卡片唯一标识符
  返回: 成功则返回0
*****************************************************************/
extern int    (WINAPI *rf_ISO14443B_Halt)(WORD nReaderID, unsigned char *pcPUPI);

/*****************************************************************
  功能: 验证AT88RF020 卡密码
  参数: nReaderID: 读卡器标识符
        key:   密码，8 字节
  返回: 成功则返回0
*****************************************************************/
extern int    (WINAPI *rf_AT88RF020_Check)(WORD nReaderID, BYTE *pcKey);

/*****************************************************************
  功能: 读AT88RF020 卡一页数据
  参数: nReaderID: 读卡器标识符
        adr: 页地址，（0～31）
        Date: 返回的数据，8 字节
  返回: 成功则返回0
*****************************************************************/
extern int    (WINAPI *rf_AT88RF020_Read)(WORD nReaderID, BYTE cPageAddr, BYTE *pDataOut/*, BYTE* pMsgLen*/);

/*********************************************************  
  功能: 从AT88RF020 卡中读多块数据 // 不导出, 已取消, 上面那个函数已包含这个功能
  参数: nReaderID:  读卡器标识符
        StartBlock: 开始块号
		BlockCount: 要读的块数
        pData:      读出数据缓存
		pLen:       缓存长度
  返回: 成功则返回0
*********************************************************/
extern int    (WINAPI *rf_AT88RF020_MultiRead)(WORD nReaderID, BYTE StartBlock, BYTE BlockCount, BYTE *pData, BYTE* pLen);

/*****************************************************************
  功能: 写AT88RF020 卡一页数据
  参数: nReaderID: 读卡器标识符
        adr: 页地址，（0～31）
        pData: 要写入的数据，8 字节
  返回: 成功则返回0
*****************************************************************/
extern int    (WINAPI *rf_AT88RF020_write)(WORD nReaderID, BYTE cPageAddr, BYTE *pDataIn/*,BYTE len*/);

/*********************************************************  
  功能: 向AT88RF020 卡中写入多块数据 // 不导出
  参数: nReaderID:  读卡器标识符
        StartBlock: 开始块号
		BlockCount: 要写入的块数
        pData:      要写入的数据
  返回: 成功则返回0
*********************************************************/
extern int    (WINAPI *rf_AT88RF020_MultiWrite)(WORD nReaderID, BYTE StartBlock, BYTE BlockCount, BYTE *pData);

/***************************************************************** 
  功能: AT88F020页锁存配置
  参数: nReaderID: 读卡器标识符
        pData:  数据，4 字节
  返回: 成功则返回0
*****************************************************************/
extern int    (WINAPI *rf_AT88RF020_Lock)(WORD nReaderID, BYTE *pDataIn/*,BYTE len*/);

/***************************************************************** 
  功能: count
  参数: nReaderID: 读卡器标识符
        pData:  数据，6 字节
  返回: 成功则返回0
*****************************************************************/
extern int    (WINAPI *rf_AT88RF020_Count)(WORD nReaderID, BYTE *pDataIn/*, BYTE len*/);

/***************************************************************** 
  功能: 命令AT88RF020 卡进入HALT 状态
  参数: nReaderID: 读卡器标识符
  返回: 成功则返回0
*****************************************************************/
extern int    (WINAPI *rf_AT88RF020_Deselect)(WORD nReaderID);

/*********************************************************
  功能: Initial and select一张ST卡
  参数: nReaderID:  读卡器标识符
        pCardID:    卡返回的ID号
  返回: 成功则返回0
*********************************************************/
extern int    (WINAPI *rf_ST_GetCard)(WORD nReaderID, BYTE *pcCardID);

/*********************************************************
  功能: 命令ST卡进入DESACTIVED状态
  参数: nReaderID:   读卡器标识符
  返回: 成功则返回0
*********************************************************/
extern int    (WINAPI *rf_ST_Completion)(WORD nReaderID);

/*********************************************************
  功能: Initial and select一张ST_SR176卡
  参数: nReaderID:  通讯设备标识符
        Chip_ID: 卡返回的ID号
  返回: 成功则返回0
*********************************************************/
extern int    (WINAPI *rf_ST_SR176_Select)(WORD nReaderID, BYTE* pcCardID);

/*********************************************************
  功能: 命令ST_SR176卡进入DESACTIVED状态
  参数: nReaderID:   通讯设备标识符
  返回: 成功则返回0
*********************************************************/
extern int    (WINAPI *rf_ST_SR176_Completion)(WORD nReaderID);

/*********************************************************
  功能: 读SR176卡1块数据
  参数: nReaderID:  读卡器标识符
        block:  块地址
        pData:  读出数据
        pLen:    读出数据的长度
  返回: 成功则返回0
*********************************************************/
extern int    (WINAPI *rf_ST_SR176_ReadBlock)(WORD nReaderID, BYTE cBlock, BYTE *pcDataOut/*, BYTE *pcDataLen*/);
//read multi blocks of sr176 // 不导出
extern int    (WINAPI *rf_ST_SR176_MultiRead)(WORD nReaderID, BYTE cStartBlock, BYTE cBlockCount, BYTE *pData,BYTE* pLen);

/*********************************************************  
  功能: 写SR176卡1块数据
  参数: nReaderID: 读卡器标识符
        block: 块地址
        data:  要写入的数据，2字节
  返回: 成功则返回0
*********************************************************/
extern int    (WINAPI *rf_ST_SR176_WriteBlock)(WORD nReaderID, BYTE cBlock, BYTE *pcDataIn);
//write multi blocks of sr176 // 不导出
extern int    (WINAPI *rf_ST_SR176_MultiWrite)(WORD nReaderID, BYTE cStartBlock, BYTE cBlockCount, BYTE *data);

/*********************************************************  
  功能: SR176卡块锁定
  参数: nReaderID:  读卡器标识符
        lockreg: LOCKREG
  返回: 成功则返回0
*********************************************************/
extern int    (WINAPI *rf_ST_SR176_ProtectBlock)(WORD nReaderID, BYTE cLockReg);

/*********************************************************  
  功能: SR176获取块锁定状态
  参数: nReaderID:  读卡器标识符
        lockreg: LOCKREG
  返回: 成功则返回0
*********************************************************/
extern int    (WINAPI *rf_ST_SR176_GetProtectReg)(WORD nReaderID, BYTE *cLockReg);

/*********************************************************
  功能: Initial and select一张ST_SRI卡
  参数: nReaderID:  通讯设备标识符
        Chip_ID: 卡ID号
  返回: 成功则返回0
*********************************************************/
extern int    (WINAPI *rf_ST_SRI_Select)(WORD nReaderID, BYTE *pcCardID);

/*********************************************************
  功能: 命令ST_SRI卡进入DESACTIVED状态
  参数: nReaderID:   通讯设备标识符
  返回: 成功则返回0
*********************************************************/
extern int    (WINAPI *rf_ST_SRI_Completion)(WORD nReaderID);

/*********************************************************
  功能: 获取SRIX4K卡UID
  参数: nReaderID: 读卡器标识符
        pUID:      UID
        pLen:      UID长度
  返回: 成功则返回0
*********************************************************/
extern int    (WINAPI *rf_ST_SRI_GetUID)(WORD nReaderID, BYTE *pcUID/*, BYTE *pLen*/);

/*********************************************************  
  功能: 读SRIX4K卡1块数据
  参数: nReaderID:  读卡器标识符
        block:  块地址
        pData:   读出的数据
        pLen:       读出数据的长度
  返回: 成功则返回0
*********************************************************/
extern int    (WINAPI *rf_ST_SRI_ReadBlock)(WORD nReaderID, BYTE cBlock, BYTE *pcData/*, BYTE *pLen*/);
extern int    (WINAPI *rf_ST_SRI_MultiRead)(WORD nReaderID, BYTE cStartBlock, BYTE cBlockCount, BYTE *pData,BYTE* pLen);

/********************************************************* 
  功能: 写SRIX4K卡1块数据
  参数: nReaderID: 读卡器标识符
        block: 块地址
        pData:  要写入的数据，4字节
  返回: 成功则返回0
*********************************************************/
extern int    (WINAPI *rf_ST_SRI_WriteBlock)(WORD nReaderID, BYTE cBlock, BYTE *pcData);
extern int    (WINAPI *rf_ST_SRI_MultiWrite)(WORD nReaderID, BYTE cStartBlock, BYTE cBlockCount, BYTE *data);

/*********************************************************
  功能: SRIX4K卡鉴别操作
  参数: nReaderID: 读卡器标识符
        pData:  RND，6字节
        pSIG:      SIG
        pLen:      SIG长度
  返回: 成功则返回0
*********************************************************/
extern int    (WINAPI *rf_ST_SRIX_Authenticate)(WORD nReaderID, BYTE *pcRND, BYTE *pcSIG/*, BYTE *pLen*/);

/********************************************************** 
  功 能: SRIX4K卡块锁定
  参 数: nReaderID:   读卡器标识符
         lockreg:  LOCKREG
**********************************************************/
extern int    (WINAPI *rf_ST_SRI_WriteLockReg)(WORD nReaderID, BYTE cLockReg);

/********************************************************* 
  功能: ISO15693_Inventory
  参数: nReaderID: 读卡器标识符
        pData:  返回的数据，1字节DSFID+8字节UID
        pLen:      pData长度
		返回: 成功则返回0



*********************************************************/
extern int    (WINAPI *rf_ISO15693_Inventory)(WORD nReaderID, BYTE *pData, BYTE *pLen);

/*********************************************************
  功能: ISO15693_MultiInventory 寻多卡
  参数: nReaderID: 读卡器标识符
        cAFIEnable:  是否使能AFI
        AFI:  AFI
        pData:  返回的数据，(1字节DSFID+8字节UID) * N
        pLen:      pData长度
  返回: 成功则返回0
*********************************************************/
extern int    (WINAPI *rf_ISO15693_MultiInventory)(WORD nReaderID, BYTE cAFIEnable, BYTE AFI, BYTE *pData, BYTE *pLen);

/*********************************************************
  功能: ISO15693_Stay_Quiet
  参数: nReaderID: 读卡器标识符
        UID:    UID 8字节
  返回: 成功则返回0
*********************************************************/
extern int    (WINAPI *rf_ISO15693_StayQuiet)(WORD nReaderID, BYTE *UID);

/*********************************************************
  功能: ISO15693_Select
  参数: nReaderID: 读卡器标识符
        UID:      UID 8字节
  返回: 成功则返回0
*********************************************************/
extern int    (WINAPI *rf_ISO15693_Select)(WORD nReaderID, BYTE *UID);

/********************************************************* 
  功能: ISO15693_Reset_To_Ready
  参数: nReaderID: 读卡器标识符
        model:  bit0=Select_flags,bit1=Addres_flags
        UID:      UID 8字节
  返回: 成功则返回0
*********************************************************/
extern int    (WINAPI *rf_ISO15693_ResetToReady)(WORD nReaderID, BYTE mode, BYTE *UID);

/*********************************************************
  功能: ISO15693_Read
  参数: nReaderID: 读卡器标识符
        model:  bit0=Select_flags,bit1=Addres_flags
        UID:      UID 8字节
        block:  块号
        number: 要读取的块数，< 0x10
        pData:  返回的数据
        pLen:   返回数据的长度
  返回: 成功则返回0
/*********************************************************/
extern int    (WINAPI *rf_ISO15693_Read)(WORD nReaderID, BYTE  model, BYTE  *UID, BYTE  block, BYTE  number, BYTE  *pData, BYTE  *pLen);

/*********************************************************
  功能: ISO15693_Write
  参数: nReaderID: 读卡器标识符
        model:  bit0=Select_flags,bit1=Addres_flags
        UID:      UID 8字节
        block:  块号
        data:   要写入的数据，4字节
  返回: 成功则返回0
/*********************************************************/
extern int    (WINAPI *rf_ISO15693_Write)(WORD nReaderID, BYTE  model, BYTE  *UID, BYTE  block, BYTE *data);

/********************************************************* 
  功能: ISO15693_Lock_Block
  参数: nReaderID: 读卡器标识符
        model:  bit0=Select_flags,bit1=Addres_flags
        UID:      UID 8字节
        block:  块号
  返回: 成功则返回0
/*********************************************************/
extern int    (WINAPI *rf_ISO15693_LockBlock)(WORD nReaderID, BYTE model, BYTE *UID, BYTE block);

/********************************************************* 
  功能: ISO15693_Write_AFI
  参数: nReaderID: 读卡器标识符
        model:  bit0=Select_flags,bit1=Addres_flags
        UID:      UID 8字节
        AFI:    要写入的AFI
  返回: 成功则返回0
/*********************************************************/
extern int    (WINAPI *rf_ISO15693_WriteAFI)(WORD nReaderID, BYTE model, BYTE *UID, BYTE AFI);

/********************************************************* 
  功能: ISO15693_Lock_AFI
  参数: nReaderID: 读卡器标识符
        model:  bit0=Select_flags,bit1=Addres_flags
        UID:      UID 8字节
  返回: 成功则返回0
/*********************************************************/
extern int    (WINAPI *rf_ISO15693_LockAFI)(WORD nReaderID, BYTE model, BYTE *UID);

/*********************************************************
  功能: ISO15693_Write_DSFID
  参数: nReaderID: 读卡器标识符
        model:  bit0=Select_flags,bit1=Addres_flags
        UID:      UID 8字节
        DSFID:  要写入的DSFID
  返回: 成功则返回0
/*********************************************************/
extern int    (WINAPI *rf_ISO15693_WriteDSFID)(WORD nReaderID, BYTE model, BYTE *UID, BYTE DSFID);

/********************************************************* 
  功能: ISO15693_Lock_DSFID
  参数: nReaderID: 读卡器标识符
        model:  bit0=Select_flags,bit1=Addres_flags
        UID:      UID 8字节
  返回: 成功则返回0
/*********************************************************/
extern int    (WINAPI *rf_ISO15693_LockDSFID)(WORD nReaderID, BYTE model, BYTE *UID);

/********************************************************* 
  功能: ISO15693_Get_System_Information
  参数: nReaderID: 读卡器标识符
        model:  bit0=Select_flags,bit1=Addres_flags
        UID:      UID 8字节
        pData:  返回的数据
        pLen:   返回数据的长度
  返回: 成功则返回0
/*********************************************************/
extern int    (WINAPI *rf_ISO15693_GetSystemInfomation)(WORD nReaderID, BYTE  model, BYTE  *UID, BYTE  *pData, BYTE  *pLen);
					      
/********************************************************* 
  功能: ISO15693_Get_Block_Security
  参数: nReaderID: 读卡器标识符
        model:  bit0=Select_flags,bit1=Addres_flags
        UID:      UID 8字节
        block:  块号
        number: 要读取的块数，< 0x40
        pData:  返回的数据
        pLen:   返回数据的长度
  返回: 成功则返回0
*********************************************************/
extern int    (WINAPI *rf_ISO15693_GetBlockSecurity)(WORD nReaderID, BYTE  model, BYTE  *UID, BYTE  block, BYTE  number, BYTE  *pData, BYTE  *pLen);

/********************************************************************
  功能: 在读卡器上显示数据
  参数: nReaderID: 读卡器标识符
        cDecodeModel: 显示解码方式
        cDpPosition: 在cDecodeModel为1时，小数点的位置，取值0～7
        cDisplayData: 显示数据
  返回: 0: 成功
        1: 失败
  说明: cDecodeModel=0: 显示数据为LED的7段信号，不必解码；
        cDecodeModel=1: 输入的每位数据为0～9的数据，由程序完成7段显示的
                        解码，如果输入的数据为10（0x0A）则显示为该位全熄灭
        cDisplayData 为8字节定长的显示数据
        当 cDecodeModel = 0 时的显示译码表: 
        显示        编码
        '0'        0x7E
        '1'        0x30
        '2'        0x6D
        '3'        0x79
        '4'        0x33
        '5'        0x5B
        '6'        0x5F
        '7'        0x70
        '8'        0x7F
        '9'        0x7B
********************************************************************/
extern int    (WINAPI *rf_Reader_DigtalDisplay)(WORD nReaderID, BYTE cDecodeModel, BYTE cDpPosition, BYTE * DisplayData);

/********************************************************************
  功能: 将数据写入读卡器的FLASH存储器中
  参数: nReaderID: 读卡器标识符
        iBlock: 写入FLASH的块号
        cStartAddress: 写入FLASH的块内起始地址
        cBytes: 写入FLASH的字节数
        WriteData: 写入数据
  返回: 0: 成功
        1: 失败
  说明: 单次写入字节不能超过224字节
        限制条件: cStartAddress + cBytes <= 256
********************************************************************/
extern int    (WINAPI *rf_Reader_FlashWrite)(WORD nReaderID, UINT iBlock, BYTE cStartAddress, BYTE cBytes, BYTE * WriteData);

/********************************************************************
  功能: 读取FLASH存储器中的数据
  参数: nReaderID: 读卡器标识符
        iBlock: 读取FLASH的块号
        cStartAddress: 读取FLASH的块内起始地址
        cBytes: 读取FLASH的字节数
        pData: 返回读取的数据
  返回: 0: 成功
        1: 失败
********************************************************************/
extern int    (WINAPI *rf_Reader_FlashRead)(WORD nReaderID, UINT iBlock, BYTE cStartAddress, BYTE cBytes, BYTE * pData);

/******** 功能: 寻AT88RF080卡片 *************************************
  参数: nReaderID: 读卡器标识符
        cAFI: AFI
        cParameter: Parameter
        pData: 返回的数据
        pLen: 返回的字节数
  返回: 0: 成功
        1: 失败
  说明: 详细的AFI和Paramenter设置请参考AT88RF080的数据手册
/********************************************************************/
extern int    (WINAPI *rf_AT88RF080_Request)(WORD nReaderID, BYTE cAFI, BYTE cParameter, BYTE *pData, BYTE *pLen);

/**********************************************************
  功能:  Level0 write perso
  参数:  nReaderID:  设备编号
        block:  块地址(2Byte)
        data:   写入的数据(16Byte)
  返回:  成功则返回0
  说明:  该功能仅仅在Security Level0使用
**********************************************************/
extern int    (WINAPI *rf_MFP_L0WritePerso)(WORD nReaderID,USHORT block,BYTE *data);

/**********************************************************
  功能:  Level0 Commit Perso
  参数:  nReaderID:  设备编号
  返回:  成功则返回0
  说明:  
        1、该功能仅仅在Security Level0使用
        2、Mifare Plus从Level0切换到Level1或Level3
        3、在使用此指令前需在LEVEL0 初始化完毕所有AES Key 及其块值
           只有执行完毕Write Perso指令，才能执行该指令
**********************************************************/
extern int    (WINAPI *rf_MFP_L0CommitPerso)(WORD nReaderID);

/**********************************************************
  功能:  Mifare Plus切换到Level2或Level3
  参数:  nReaderID:   设备编号
        cLevel:  mifareplus 所在Level(1 or 2)
        pcKey:  切换Level 的pcKey(16Byte)
  返回:  成功则返回0
  说明:  
        1、该功能仅仅在Security Level1或Security Level2使用
**********************************************************/
extern int    (WINAPI *rf_MFP_SwitchToHighLevel)(WORD nReaderID, BYTE cLevel,BYTE *pcKey);

/**********************************************************
  功能:  Mifare Plus对数据块授权(不包括其他的密钥和配置块等)
  参数:  nReaderID:    设备编号
        keytype:  密钥类型('A' or 'B')
        blockid:  数据绝对块号
        keydata:  密钥(16Byte)
  返回:  成功则返回0
  说明:  
        1、该功能仅仅在Security Level3
**********************************************************/
extern int    (WINAPI *rf_MFP_DataBlockAuthentication)(WORD nReaderID,BYTE cKeyType, WORD nBlock,BYTE *pcKey);

/**********************************************************
  功能:  Mifare Plus 读数据块
  参数:  nReaderID:   设备编号
         nBlock:      起始块号
         BlockCount:  所读块数 1到3个块
         pData:        块数据
  返回:  成功则返回0
  说明:  
		1、该功能仅仅在Security Level3
**********************************************************/
extern int    (WINAPI *rf_MFP_L3Read)(WORD nReaderID, WORD nBlock, BYTE BlockCount,BYTE *pData);
/**********************************************************
  功能:  Mifare Plus写数据块
  参数:  nReaderID:         设备编号
         nBlock:  起始块号
		 BlockCount:    所写块数 1到3个块
		 pData:          块数据
  返回:  成功则返回0
  说明:  
		1、该功能仅仅在Security Level3
**********************************************************/
extern int    (WINAPI *rf_MFP_L3Write)(WORD nReaderID, BYTE nBlock, BYTE BlockCount, BYTE *pData);

/**********************************************************
  功能:  Mifare Plus初始化钱包
  参数:  nReaderID:     设备编号
        nBlock:   块号
        nPurseValue:  初始钱包值
  返回:  成功则返回0
  说明:  
        1、该功能仅仅在Security Level3
**********************************************************/
extern int    (WINAPI *rf_MFP_L3PurseCreate)(WORD nReaderID, WORD nBlock, UINT nPurseValue);

/**********************************************************
  功能:  Mifare Plus读钱包
  参数:  nReaderID:     设备编号
        nBlock:   块号
        pPurseValue:  钱包值
  返回:  成功则返回0
  说明:  
        1、该功能仅仅在Security Level3
**********************************************************/
extern int    (WINAPI *rf_MFP_L3PurseRead)(WORD nReaderID, WORD nBlock, UINT *pPurseValue);

/**********************************************************
  功能:  Mifare Plus充值
  参数:  nReaderID:     设备编号
        nBlock:   块号
        nPurseInc:  钱包所加的值
  返回:  成功则返回0
  说明:  
        1、该功能仅仅在Security Level3
**********************************************************/
extern int    (WINAPI *rf_MFP_L3PurseIncrement)(WORD nReaderID, WORD nBlock, UINT nPurseInc);

/**********************************************************
  功能:  Mifare Plus扣款
  参数:  nReaderID:     设备编号
        nBlock:   块号
        nPurseDec:  钱包所减的值
  返回:  成功则返回0
  说明:  
        1、该功能仅仅在Security Level3
**********************************************************/
extern int    (WINAPI *rf_MFP_L3PurseDecrement)(WORD nReaderID, WORD nBlock, UINT nPurseDec);

/**********************************************************
  功能:  Mifare Plus备份钱包
  参数:  nReaderID:             设备编号
        nSrcBlock:     待备份钱包块号
        nDesBlock: 目标钱包块号
  返回:  成功则返回0
  说明:  
        1、该功能仅仅在Security Level3
**********************************************************/
extern int    (WINAPI *rf_MFP_L3PurseBackup)(WORD nReaderID, WORD nSrcBlock, WORD nDesBlock);

/**********************************************************
  功能:  Mifare Plus第一次授权操作
  参数:  nReaderID:        设备编号
        AES_keyaddr:  授权的AES密钥块号
        AES_keydata:  AES 密钥数据
  返回:  成功则返回0
  说明:  
        1、该功能仅仅在Security Level1/3
**********************************************************/
extern int    (WINAPI *rf_MFP_FirstAuthentication)(WORD nReaderID, WORD AES_keyaddr, BYTE *AES_keydata);

/**********************************************************
  功能:  Mifare Plus第二次授权操作
  参数:  nReaderID:        设备编号
        AES_keyaddr:  授权的AES密钥块号
        AES_keydata:  AES 密钥数据
  返回:  成功则返回0
  说明:  
        1、该功能仅仅在Security Level1/3
**********************************************************/
extern int    (WINAPI *rf_MFP_FollowingAuthentication)(WORD nReaderID, WORD AES_keyaddr, BYTE *AES_keydata);




/***************************************************************
  功能:  读取身份证信息(卡号及其复位信息);
  参数:  nReaderID:       设备编号
        cardinfo:    卡片返回信息
        infolen:     返回信息长度
  返回:  成功则返回0
***************************************************************/
extern int    (WINAPI *rf_IDCard_Request)(WORD nReaderID, BYTE *cardinfo, UINT *infolen);

/***************************************************************
  功能:  向身份证卡片发送COS指令
  参数:  nReaderID:       设备编号
        command:     待发送的COS指令
        cmdLen:         发送指令长度
        pData:         卡片返回信息
        Length:         返回信息长度
  返回:  成功则返回0
***************************************************************/
extern int    (WINAPI *rf_IDCard_COS)(WORD nReaderID, BYTE *command, UINT cmdLen, BYTE *pData, UINT *Length);

/*********************************************************
  功能：寻ICODE1卡
  参数：nReaderID： 通讯设备标识符
        pcDataOut:   ICODE1卡号, 8字节
  返回：成功则返回0
*********************************************************/
extern int    (WINAPI *rf_ICODE1_Request)(WORD nReaderID,  BYTE *pcDataOut);

/*********************************************************
  功能：ICODE1读卡
  参数：nReaderID： 通讯设备标识符
		cBlock   :  要读的块
        pcDataOut:  要读出的数据缓存 4字节
  返回：成功则返回0
*********************************************************/
extern int    (WINAPI *rf_ICODE1_Read)(WORD nReaderID,  BYTE cBlock, BYTE *pcDataOut);

/*********************************************************
  功能：ICODE1写卡
  参数：nReaderID: 通讯设备标识符
		cBlock   :  要写的块
        pcDataIn :  要写的数据 4字节
  返回：成功则返回0
*********************************************************/
extern int    (WINAPI *rf_ICODE1_Write)(WORD nReaderID,  BYTE cBlock, BYTE *pcDataIn);

/*********************************************************
  功能：ICODE1休眠
  参数：nReaderID: 通讯设备标识符
  返回：成功则返回0
*********************************************************/
extern int    (WINAPI *rf_ICODE1_Halt)(WORD nReaderID);

/*********************************************************
  功能：Desfire Authenticate
  参数：nReaderID: 通讯设备标识符
		ucKeyNum : 密钥号
		pucKey   : 密钥 16字节
		pucSessionKey: 16字节, 返回的过程密钥
  返回：成功则返回0
*********************************************************/
extern int    (WINAPI *rf_DF_Authenticat)(WORD nReaderID, BYTE ucKeyNum, BYTE *pucKey, BYTE *pucSessionKey);


/*********************************************************
  功能：Desfire ChangeKeySettings
  参数：nReaderID: 通讯设备标识符
		pucKeySettings   : 新的设置
  返回：成功则返回0
*********************************************************/
extern int    (WINAPI *rf_DF_ChangeKeySettings)(WORD nReaderID, BYTE *pucKeySettings);

/*********************************************************
  功能：Desfire GetKeySetting
  参数：nReaderID: 通讯设备标识符
		pucKeySettings: KeySettings (2字节);
  返回：成功则返回0
*********************************************************/
extern int    (WINAPI *rf_DF_GetKeySetting)(WORD nReaderID, BYTE *pucKeySettings);

/*********************************************************
  功能：Desfire ChangeKey
  参数：nReaderID: 通讯设备标识符
		pucKey   : 新的Key, 24字节
  返回：成功则返回0
*********************************************************/
extern int    (WINAPI *rf_DF_ChangeKey)(WORD nReaderID, BYTE ucKeyNum, BYTE *pucKey);

/*********************************************************
  功能：Desfire GetKeyVer
  参数：nReaderID: 通讯设备标识符
		pucKeyVer: KeyVer (1字节)
  返回：成功则返回0
*********************************************************/
extern int    (WINAPI *rf_DF_GetKeyVer)(WORD nReaderID, BYTE ucKeyNo, BYTE *pucKeyVer);

/*********************************************************
  功能：Desfire CreateApp
  参数：nReaderID: 通讯设备标识符
        nAID     : 应用标识(<= 0xFFFFFF)
		ucKeySettings:
		ucNumOfKeys:  
		pucKeyVer: KeyVer (1字节)
  返回：成功则返回0
*********************************************************/
extern int    (WINAPI *rf_DF_CreateApp)(WORD nReaderID, UINT nAID, BYTE ucKeySettings, BYTE ucNumOfKeys);

/*********************************************************
  功能：Desfire DeletApp
  参数：nReaderID: 通讯设备标识符
        nAID     : 应用标识(<= 0xFFFFFF)
  返回：成功则返回0
*********************************************************/
extern int    (WINAPI *rf_DF_DeletApp)(WORD nReaderID, UINT nAID);

/*********************************************************
  功能：Desfire Get Application IDs
  参数：nReaderID: 通讯设备标识符
		pucAids  : Application IDs
		pucAidNum: ID的个数
  返回：成功则返回0
*********************************************************/
extern int    (WINAPI *rf_DF_GetAppIDs)(WORD nReaderID, BYTE *pucAids, BYTE *pucAidNum);

/*********************************************************
  功能：Desfire Select Application
  参数：nReaderID: 通讯设备标识符
        nAID     : 应用标识(<= 0xFFFFFF)
  返回：成功则返回0
*********************************************************/
extern int    (WINAPI *rf_DF_SelectApp)(WORD nReaderID, UINT nAID);

/*********************************************************
  功能：Desfire Format PICC
  参数：nReaderID: 通讯设备标识符
  返回：成功则返回0
*********************************************************/
extern int    (WINAPI *rf_DF_FormatPICC)(WORD nReaderID);
/*********************************************************
  功能：Desfire Get Version
  参数：nReaderID: 通讯设备标识符
		pucVerInfo: 片制造业的相关数据, 长度为28字节
  返回：成功则返回0
*********************************************************/
extern int    (WINAPI *rf_DF_GetVer)(WORD nReaderID, BYTE *pucVerInfo);

/*********************************************************
  功能：Desfire  Get File IDs
  参数：nReaderID: 通讯设备标识符
		pucFileIDs  : File IDs
		pucFileIDNum: ID的个数
  返回：成功则返回0
*********************************************************/
extern int    (WINAPI *rf_DF_GetFileIDs)(WORD nReaderID, BYTE *pucFileIDs, BYTE *pucFileIDNum);

/*********************************************************
  功能：Desfire  Get File Settings
  参数：nReaderID: 通讯设备标识符
		pucFileIDs  : File Settings
		pucLen: 数据长度
  返回：成功则返回0
*********************************************************/
extern int    (WINAPI *rf_DF_GetFileSettings)(WORD nReaderID, BYTE ucFileNo, BYTE *pucFileSettings, BYTE *pucLen);

/*********************************************************
  功能：Desfire ChangeFileSettings
  参数：nReaderID: 通讯设备标识符
		ucFileNo : 文件标识
		pucKeySettings   : 新的设置
  返回：成功则返回0
*********************************************************/
extern int    (WINAPI *rf_DF_ChangeFileSettings)(WORD nReaderID, BYTE ucFileNo, BYTE *pucKeySettings, BYTE ucLen);

/*********************************************************
  功能：Desfire Create Std DataFile
  参数：nReaderID: 通讯设备标识符
		ucFileNo : 文件标识
		ucComSet : 通信设置
		pucAccessrights: 操作权限
		nFileLen : 文件长度
  返回：成功则返回0
*********************************************************/
extern int    (WINAPI *rf_DF_CreateStdDataFile)(WORD nReaderID, BYTE ucFileNo, BYTE ucComSet, BYTE *pucAccessRights, UINT32 nFileLen);

/*********************************************************
  功能：Desfire Create Backup DataFile
  参数：nReaderID: 通讯设备标识符
		ucFileNo : 文件标识
		ucComSet : 通信设置
		pucAccessrights: 操作权限
		nFileLen : 文件长度
  返回：成功则返回0
*********************************************************/
extern int    (WINAPI *rf_DF_CreateBackupDataFile)(WORD nReaderID, BYTE ucFileNo, BYTE ucComSet, BYTE *pucAccessRights, UINT32 nFileLen);

/*********************************************************
  功能：Desfire CreateValueFile
  参数：nReaderID: 通讯设备标识符
		ucFileNo : 文件标识
		ucComSet : 通信设置
		pucAccessrights: 操作权限
		nLowLimit: 最小值
		nUpperLimit: 最大值
		nValue   : 数值
		ucEnableCreditLimit: 是否限存
  返回：成功则返回0
*********************************************************/
extern int    (WINAPI *rf_DF_CreateValueFile)(WORD nReaderID, BYTE ucFileNo, BYTE ucComSet, BYTE *pucAccessRights, UINT32 nLowLimit, UINT32 nUpperLimit, UINT32 nValue, BYTE ucEnableCreditLimit);

/*********************************************************
  功能：Desfire CreateLinearRecordFile
  参数：nReaderID: 通讯设备标识符
		ucFileNo : 文件标识
		ucComSet : 通信设置
		pucAccessrights: 操作权限
		nRecordSize: 记录的大小
		nMaxNumOfRecord: 记录的最大个数
  返回：成功则返回0
*********************************************************/
extern int    (WINAPI *rf_DF_CreateLinearRecordFile)(WORD nReaderID, BYTE ucFileNo, BYTE ucComSet, BYTE *pucAccessRights, UINT32 nRecordSize, UINT32 nMaxNumOfRecord);

/*********************************************************
  功能：Desfire CreateCyclicRecordFile
  参数：nReaderID: 通讯设备标识符
		ucFileNo : 文件标识
		ucComSet : 通信设置
		pucAccessrights: 操作权限
		nRecordSize: 记录的大小
		nMaxNumOfRecord: 记录的最大个数
  返回：成功则返回0
*********************************************************/
extern int    (WINAPI *rf_DF_CreateCyclicRecordFile)(WORD nReaderID, BYTE ucFileNo, BYTE ucComSet, BYTE *pucAccessRights, UINT32 nRecordSize, UINT32 nMaxNumOfRecord);

/*********************************************************
  功能：Desfire DeleteFile
  参数：nReaderID: 通讯设备标识符
		ucFileNo : 文件标识
  返回：成功则返回0
*********************************************************/
extern int    (WINAPI *rf_DF_DeleteFile)(WORD nReaderID, BYTE ucFileNo);

/*********************************************************
  功能：Desfire  ReadData
  参数：nReaderID: 通讯设备标识符
		ucFileNo : 文件标识
		uiOffset : 偏移地址
		uiLen    : 数据长度
		pucDataOut: 读出的数据
		plDataLen: 读出数据的长度
  返回：成功则返回0
*********************************************************/
extern int    (WINAPI *rf_DF_ReadData)(WORD nReaderID, BYTE ucFileNo, UINT uiOffset, UINT uiLen, BYTE *pucDataOut, LONG *plDataLen);

/*********************************************************
  功能：Desfire WriteData
  参数：nReaderID: 通讯设备标识符
		ucFileNo : 文件标识
		uiOffset : 偏移地址
		uiLen    : 数据长度
		pucDataIn: 写入的数据
  返回：成功则返回0
*********************************************************/
extern int    (WINAPI *rf_DF_WriteData)(WORD nReaderID, BYTE ucFileNo, UINT uiOffset, UINT uiLen, BYTE *pucDataIn);

/*********************************************************
  功能：Desfire  Get Value
  参数：nReaderID: 通讯设备标识符
		ucFileNo : 文件标识
		puiValue : 返回的数据
  返回：成功则返回0
*********************************************************/
extern int    (WINAPI *rf_DF_GetValue)(WORD nReaderID, BYTE ucFileNo, UINT *puiValue);

/*********************************************************
  功能：Desfire  Credit
  参数：nReaderID: 通讯设备标识符
		ucFileNo : 文件标识
		uiValue  : 数值
  返回：成功则返回0
*********************************************************/
extern int    (WINAPI *rf_DF_Credit)(WORD nReaderID, BYTE ucFileNo, UINT uiValue);

/*********************************************************
  功能：Desfire  Debit
  参数：nReaderID: 通讯设备标识符
		ucFileNo : 文件标识
		uiValue  : 数值
  返回：成功则返回0
*********************************************************/
extern int    (WINAPI *rf_DF_Debit)(WORD nReaderID, BYTE ucFileNo, UINT uiValue);

/*********************************************************
  功能：Desfire  LimitedCredit
  参数：nReaderID: 通讯设备标识符
		ucFileNo : 文件标识
		uiValue  : 数值
  返回：成功则返回0
*********************************************************/
extern int    (WINAPI *rf_DF_LimitedCredit)(WORD nReaderID, BYTE ucFileNo, UINT uiValue);

/*********************************************************
  功能：Desfire  WriteRecord
  参数：nReaderID: 通讯设备标识符
		ucFileNo : 文件标识
		uiOffset : 起始记录
		uiLen    : 记录长度
		pucDataIn: 数据
  返回：成功则返回0
*********************************************************/
extern int    (WINAPI *rf_DF_WriteRecord)(WORD nReaderID, BYTE ucFileNo, UINT uiOffset, UINT uiLen, BYTE *pucDataIn);

/*********************************************************
  功能：Desfire  WriteRecord
  参数：nReaderID: 通讯设备标识符
		ucFileNo : 文件标识
		uiOffset : 起始记录
		uiCount  : 记录数目
		pucDataOut: 读出的数据
		puiDataLen: 读出的数据长度
  返回：成功则返回0
*********************************************************/
extern int    (WINAPI *rf_DF_ReadRecord)(WORD nReaderID, BYTE ucFileNo, UINT uiOffset, UINT uiCount, BYTE *pucDataOut, UINT *puiDataLen);

/*********************************************************
  功能：Desfire  Clear Record File
  参数：nReaderID: 通讯设备标识符
		ucFileNo : 文件标识
  返回：成功则返回0
*********************************************************/
extern int    (WINAPI *rf_DF_ClearRecordFile)(WORD nReaderID, BYTE ucFileNo);

/*********************************************************
  功能：Desfire  CommitTransaction
  参数：nReaderID: 通讯设备标识符
  返回：成功则返回0
*********************************************************/
extern int    (WINAPI *rf_DF_CommitTransaction)(WORD nReaderID);

/*********************************************************
  功能：Desfire  AbortTransaction
  参数：nReaderID: 通讯设备标识符
  返回：成功则返回0
*********************************************************/
extern int    (WINAPI *rf_DF_AbortTransaction)(WORD nReaderID);

#endif