源代碼如下
#ifndef _EXPORT_FUNC_H_
#define _EXPORT_FUNC_H_
//return successful result
#define LIB_SUCCESS 0
//return failed result
#define LIB_FAILED 1
#define MAX_RF_BUFFER 1024
/******** 功能:擷取動态庫版本号 2位元組 *******************/
// 傳回: 成功傳回0
/*********************************************************/
int WINAPI lib_ver(unsigned int *nVer);
/******** 功能:DES 算法加密函數 *************************/
// 參數:szOut: 加密結果,長度等于加密資料長度
// szIn: 加密資料
// inlen: 加密資料長度,8位元組的整數倍
// key: 密鑰
// keylen: 密鑰長度,如果大于8位元組,是3des,如果小于等于8位元組單des.不足補零
int (WINAPI* des_encrypt)(unsigned char *szOut,unsigned char *szIn , unsigned int inlen,unsigned char *key,unsigned int keylen);
/******** 功能:DES 算法解密函數 *************************/
// 參數:szOut: 解密結果,長度等于解密資料長度
// szIn: 解密資料
// inlen: 解密資料長度,8位元組的整數倍
int (WINAPI* des_decrypt)(unsigned char *szOut,unsigned char *szIn , unsigned int inlen,unsigned char *key,unsigned int keylen);
/******** 功能:初始化序列槽 *******************************/
// 參數:port:序列槽号,取值為1~4
// baud:為通訊波特率4800~115200
// 傳回:成功則傳回0
int WINAPI rf_init_com(int port,long baud);
/******** 功能:指定裝置辨別 *****************************/
// 參數:icdev:通訊裝置辨別符,0-65536
// 傳回:成功傳回0
int WINAPI rf_init_device_number(unsigned short icdev);
/******** 功能:讀取裝置辨別 *****************************/
// 參數:Icdev:通訊裝置辨別符
int WINAPI rf_get_device_number(unsigned short *Icdev);
/******** 功能:取得讀寫卡器硬體版本号,2 位元組 ***********/
// 參數:icdev: 通訊裝置辨別符
// Version:存放傳回版本資訊
int WINAPI rf_get_model(unsigned short icdev,unsigned short *Version);
/******** 功能:取得讀寫卡器産品序列号,8 位元組 ***********/
// 參數:icdev:通訊裝置辨別符
// Snr: 存放傳回讀寫卡器産品序列号
int WINAPI rf_get_snr(unsigned short icdev,unsigned char *Snr);
/******** 功能:蜂鳴 *************************************/
// msec: 蜂鳴時限,機關是10 毫秒
int WINAPI rf_beep(unsigned short icdev,unsigned char msec);
/******** 功能:設定讀寫卡器sam 卡通訊波特率 *************/
// bound: sam 卡波特率,取值為9600、38400
// 說明:bound=0:9600
// bound=1:38400
int WINAPI rf_init_sam(unsigned short icdev,unsigned char bound);
/******* 功能:複位sam 卡 ********************************/
// 參數:icdev: 通訊裝置辨別符
// pData: 傳回的複位資訊内容
// pMsgLg:傳回複位資訊的長度
int WINAPI rf_sam_rst(unsigned short icdev, unsigned char *pData,unsigned char *pMsgLg);
/*例:
unsigned int icdev;
unsigned char pData[MAX_RF_BUFFER];
unsigned char len;
status = rf_sam_rst(icdev,pData,&len);
*/
/******** 功能:向SAM 卡發送COS 指令 *********************/
// command:cos 指令
// cmdLen: cos 指令長度
// pDate: 卡片傳回的資料,含SW1、SW2
// pMsgLg: 傳回資料長度
int WINAPI rf_sam_cos(unsigned short icdev, unsigned char *command,unsigned char cmdLen ,unsigned char *pData,unsigned char* Length);
unsigned char icdev;
unsigned char* cmd;
status = rf_sam_cos(icdev,cmd,sizeof(cmd),pData,&len);
/******* 功能:設定讀寫卡器非接觸工作方式為 *************/
// ISO14443 TYPE A OR ISO14443 TYPE B
// type: 讀寫卡器工作方式
// 說明:type='A':設定為TYPE_A方式
// type='B':設定為TYPE_B方式
// type='r':設定為AT88RF020卡方式
int WINAPI rf_init_type(unsigned short icdev,unsigned char type);
/******* 功能:關閉或啟動讀寫卡器天線發射 ***************/
// model:天線狀态
// 說明:model=0:關閉天線
// model=1:開啟天線
int WINAPI rf_antenna_sta(unsigned short icdev, unsigned char model);
/******** 功能:尋ISO14443-3 TYPE_A 卡 *******************/
// model: 尋卡模式
// TagType:傳回卡類型值
// 說明:mode=0x26:尋未進入休眠狀态的卡
// mode=0x52:尋所有狀态的卡
int WINAPI rf_request(unsigned short icdev, unsigned char model, unsigned short *TagType);
/********* 功能:ISO14443-3 TYPE_A 卡防沖撞 **************/
// bcnt: 卡序列号位元組數,取值4、7、10,Mifare 卡取值4
// pSnr: 傳回的卡序列号
// pRLength:卡序列号長度
int WINAPI rf_anticoll(unsigned short icdev, unsigned char bcnt, unsigned char *pSnr,unsigned char* pRLength);
/*例:int status
unsigned char icdev;
unsigned char snr[MAX_RF_BUFFER];
unsigned char len;
status = rf_anticoll(icdev,4,snr,&len);
/******** 功能:鎖定一張ISO14443-3 TYPE_A 卡 *************/
// pSnr: 卡序列号
// srcLen:卡序列号長度,MifareOne卡該值等于4
// Size: 傳回卡容量
int WINAPI rf_select(unsigned short icdev,unsigned char *pSnr,unsigned char srcLen,unsigned char *Size);
/******* 功能:指令已激活的ISO14443-3 TYPE_A卡進入休眠狀态*/
/**********************************************************/
int WINAPI rf_halt(unsigned short icdev);
/***** 功能:用指定的密鑰驗證Mifare One 卡*****************/
// model:密碼驗證模式
// block:要驗證密碼的絕對塊号
// key: 密鑰内容,6 位元組
// 說明:model=0x60:驗證A密鑰
// model=0x61:驗證B密鑰
int WINAPI rf_M1_authentication2(unsigned short icdev,unsigned char model,unsigned char block,unsigned char *key);
/******* 功能:讀取Mifare One 卡一塊資料 ****************/
// block: M1卡絕對塊号
// pData: 讀出資料
// pLen: 讀出資料的長度
int WINAPI rf_M1_read(unsigned short icdev, unsigned char block, unsigned char *pData,unsigned char *pLen);
unsigned short icdev
unsigned char pData[MAX_RF_BUFFER];
status = rf_M1_read(icdev,0,pData,&len);
/******* 功能:向Mifare One 卡中寫入一塊資料 ************/
// block:M1卡絕對塊号
// data: 寫入的資料,16 位元組
int WINAPI rf_M1_write(unsigned short icdev, unsigned char block, unsigned char *data);
/******* 功能:将Mifare One 卡某一扇區初始化為錢包 *******/
// block:M1 卡塊位址
// value:初始值
int WINAPI rf_M1_initval(unsigned short icdev, unsigned char block, long value);
/******* 功能:讀Mifare One 錢包值 **********************/
// block: M1 卡塊位址
// pValue:傳回的值
int WINAPI rf_M1_readval(unsigned short icdev, unsigned char block,long* pValue);
/******* 功能:Mifare One 扣款 **************************/
// value:要扣的值
// 說明:此函數執行成功後,結果儲存在卡片的BUFFER 内,
// 尚未改寫相應塊的内容,若要将結果儲存到卡片
// 相應塊中需緊跟執行rf_M1_restore 函數
int WINAPI rf_M1_decrement(unsigned short icdev, unsigned char block,long value);
/******** 功能:Mifare One 充值 **************************/
// value:要增加的值
int WINAPI rf_M1_increment(unsigned short icdev, unsigned char block,long value);
/******** 功能:Mifare One 卡值回傳 **********************/
// 說明:用此函數将指定的塊内容傳入卡的buffer,然後可用
// rf_M1transfer()函數将buffer 中資料再傳送到另一塊中去
int WINAPI rf_M1_restore(unsigned short icdev, unsigned char block);
/****** 功能:将Mifare One資料傳送 ***********************/
// 說明:該函數僅在increment、decrement和restore 指令之後調用。
int WINAPI rf_M1_transfer(unsigned short icdev, unsigned char block);
/******** 功能:複位符合ISO14443-A 标準的CPU 卡 **********/
// model: 尋卡方式
// pDate: 傳回的資料(CSN + 複位資訊内容)
// pMsgLg:傳回資料的長度
int WINAPI rf_typea_rst(unsigned short icdev,unsigned char model,unsigned char *pData,unsigned char *pMsgLg);
status = rf_typea_rst(icdev,0,pData,&len);
/******** 功能:向符合ISO14443-4标準的CPU卡發送COS 指令***/
int WINAPI rf_cos_command(unsigned short icdev,unsigned char *command,unsigned char cmdLen,unsigned char *pData,unsigned char* pMsgLg);
unsigned char* cmd;
status = rf_typea_cos(icdev,cmd,sizeof(cmd),pData,&len);
/******** 功能:激活符合ISO14443 TYPE_B 标準的卡 *********/
// model: 尋卡方式0=REQB,1=WUPB
// pDate: 卡片傳回的資料
int WINAPI rf_atqb(unsigned short icdev,unsigned char model,unsigned char *pData,unsigned char *pMsgLg);
int icdev
unsigned char msglg
unsigned char pDate[MAX_RF_BUFFER];
status = rf_atqb(icdev,0,pDate,&msglg);
/******** 功能:指令一選中的TYPE_B卡進入HALT 狀态*********/
// PUPI: 卡片唯一辨別符
int WINAPI rf_hltb(unsigned short icdev,unsigned long PUPI);
/******** 功能:驗證AT88RF020 卡密碼 *********************/
// key: 密碼,8 位元組
int WINAPI rf_at020_check(unsigned short icdev, unsigned char *key);
//******* 功能:讀AT88RF020 卡一頁資料 *******************/
// page: 頁位址,(0~31)
// pDate: 傳回的資料
// pMsgLen:傳回資料的長度
int WINAPI rf_at020_read(unsigned short icdev, unsigned char page, unsigned char *pData,unsigned char* pMsgLen);
/*
例:int status
int icdev
unsigned char pData[MAX_RF_BUFFER];
unsigned char len;
status = rf_at020_read(icdev,0,pData,&len);
/******** 功能:寫AT88RF020 卡一頁資料 *******************/
// page: 頁位址,(0~31)
// date: 要寫入的資料,8 位元組
int WINAPI rf_at020_write(unsigned short icdev, unsigned char page, unsigned char *data);
/******** 功能:LOCK AT88RF020卡**************************/
// date: 資料,4 位元組
int WINAPI rf_at020_lock(unsigned short icdev,unsigned char *data);
/******** 功能:AT88RF020卡計數函數 **********************/
// date: 資料,6 位元組
int WINAPI rf_at020_count(unsigned short icdev,unsigned char *data);
/******** 功能:指令AT88RF020 卡進入HALT 狀态 ************/
int WINAPI rf_at020_deselect(unsigned short icdev);