- 動態庫簡介
動態庫OUR_MIFARE.dll用VC開發,編譯成32位Release實體或64位Release實體,適用於WIN2000、XP、2003、win7的32或64位、win8編譯和運行環境。本文檔下面的源代碼例子是C++的調用格式。
本動態庫是本公司USB接口FM1208CPU卡讀寫器的配套文件,必須和讀寫器一起使用。
OUR_MIFARE.dll支持在軟件運行中可以隨時更換USB接口。本公司免驅型和有驅型讀寫器使用的OUR_MIFARE.dll不同,但函數的調用一樣,如果客戶程序開發好了,免驅型和有驅型互換時,只需更換對應的OUR_MIFARE.dll。
推薦使用動態調用的方法使用本動態庫。
二、易用函數
我們把複雜的CPU卡認證、讀、寫過程集成轉化爲更簡單的函數調用操作,即使是從未接觸過一卡通開發的軟件開發人員,寫起程序來也毫不困難,一點都不浪費開發時間。開發人員不再需要花大量時間去了解CPU卡的內部機制,我們將它封裝成五個函數:1、CPU卡CPU卡激活;2、初始化CPU卡;3、創建文件和刪除文件;4、修改文件密碼;5、讀寫文件。全國首創,只需十分鐘就可輕鬆搞定CPU卡!。
第一步:CPU卡激活
函數名:cpurequest
功能 |
復位CPU卡成功,CPU卡進入14443A-4的協議模式,可以接着重複操作第二步進行調試了。 |
|
VB聲明 |
Declare Function cpurequest Lib "OUR_MIFARE.dll" (ByVal serial As Long, ByVal param As Long, ByVal cosver As Long, ByVal code As Long) As Byte |
|
輸入 |
1、serial只需指向一個至少已分配了4個char空間的可寫數組 unsigned char *指針, serial的下標由0開始。如果在控制字中沒有指定NEEDSERIAL ,則Serial數組的內容無需賦值,因爲此數組僅用於返回值。如果指定了NEEDSERIAL,則必須爲數組的內容賦值。 2、param只需指向一個至少已分配了4個char空間的可寫數組 unsigned char *指針, param的下標由0開始。如果在控制字中沒有指定NEEDSERIAL ,則param數組的內容無需賦值,因爲此數組僅用於返回值。如果指定了NEEDSERIAL,則必須爲數組的內容賦值。 3、myver一個字節空間,返回版本號。 4、myver一個字節空間,返回廠商代碼號。
|
|
返回 |
|
|
返 回 值 說 明 |
0 |
復位CPU卡成功。 |
8 |
尋卡錯誤,根本就沒有卡在感應區,*serial無效。 |
|
50 |
RATS錯誤,廠家調試代碼,用戶不需理會。 |
|
51 |
PPS錯誤,廠家調試代碼,用戶不需理會 |
|
52 |
已進入了14443-4協議狀態,可進行CPU卡功能所有操作了。 |
|
|
53 |
CPU卡功能通訊錯誤。 |
|
其他 |
見函數返回代碼表: |
第二步:初始化CPU卡:
函數名:cpursinit
功能 |
初始化函數,(ctrlword是否需要先清空卡,不需要清空的話,可以需輸入卡密碼,卡密碼長度)ctrlword_0是否先清空卡,分配空間(字節數) |
|
VB聲明 |
Declare Function cpursinit Lib "OUR_MIFARE.dll" (ByVal ctrlword As Byte, ByVal key As Long, ByVal keylen As Byte, ByVal customsize As Long) As Byte |
|
輸入 |
1、ctrlword 0表示不清空已創建的文件,1表示將已創建的文件清除。 2、key 卡密碼, (卡密碼和文件沒有任何關係,卡密碼只是用來清空卡,讀和寫 文件是無效的)。是指向下標個數≤16的字節數組,用於存放卡密碼。 3、keylen卡密碼的長度。 4、customsize 設定應用空間的大小,要≤6121 。 |
|
返回 |
返回unsigned char值,並將卡分配成可用區間爲customsize 個字節,並可以在此空間內創建文件,所有創建的文件大小總和不能大於customsize。 |
|
返 回 值 說 明 |
0 |
操作成功,寫卡數據有效。 |
其他 |
見函數返回代碼表:
|
|
例子及註釋 |
請要本公司網站下載各種開發工具的例子源代碼,本函數的聲明和輸入參數格式可以直接套用,謝謝使用 |
第三步:創建文件
函數名:cpursfileadd
功能 |
創建好的文件不能刪除,只能重新初始化卡來清除所有文件, |
|
VB聲明 |
Declare Function cpursfileadd Lib "OUR_MIFARE.dll" (ByVal fileno As Byte, ByVal readonlykey As Long, ByVal readonlykeylen As Byte, ByVal writekey As Long, ByVal writekeylen As Byte, ByVal customsize As Long) As Byte |
|
輸入 |
fileno爲文件號,取值0-5; readonlykey指向存放只讀密碼的數組(≥readonlykeylen個char的密碼數組); readonlykeylen 只讀密碼的長度; writekey指向存放讀寫密碼的數組(≥writekeylen個char的密碼數組); writekeylen 讀寫密碼長度 customsize 文件大小; |
|
返回 |
返回unsigned char值。 |
|
返 回 值 說 明 |
0 |
操作成功,。 |
60 |
當前文件號已經存在,不能再次創建。 |
|
|
|
|
|
|
|
|
|
|
其他 |
見函數返回代碼表:
|
第四步:修改文件密碼
函數名:cpursfilekeychg
功能 |
修改文件密碼,修改後,請妥慎記住,否則該文件將無法再用。 |
|
VB聲明 |
Declare Function cpursfilekeychg Lib "OUR_MIFARE.dll" (ByVal fileno As Byte, ByVal keytype As Byte, ByVal oldkey As Long, ByVal oldkeylen As Byte, ByVal newkey As Long, ByVal newkeylen As Byte) As Byte |
|
輸入 |
Fileno爲文件號,取值0-5; Keytype 認證密碼 + 更改密碼類型,0更改只讀密碼,1 更改讀寫密碼,0 用只讀密碼認證,2 用讀寫密碼認證; Oldkey指向存放舊文件密碼的數組(≥Oldkeylen個char的密碼數組); Oldkeylen 舊密碼長度 Newkey指向存放新文件密碼的數組(≥Newkeylen個char的密碼數組); Newkeylen 新密碼長度 |
|
返回 |
返回unsigned char值。 |
|
返 回 值 說 明 |
0 |
操作成功,。 |
|
|
|
|
|
|
|
|
|
|
|
|
其他 |
見函數返回代碼表:
|
第五步:讀寫文件內容
一、讀卡函數名:cpursfiledataread
功能 |
讀文件數據。 |
|
VB聲明 |
Declare Function cpursfiledataread Lib "OUR_MIFARE.dll" (ByVal fileno As Byte, ByVal keytype As Byte, ByVal key As Long, ByVal keylen As Byte, ByVal startaddr As Long, ByVal databuf As Long, ByVal datalen As Long) As Byte |
|
輸入 |
Fileno爲文件號,取值0-5; Keytype 認證密碼類型,0用只讀密碼認證,2 用讀寫密碼認證; Key指向存放文件密碼的數組(≥Keylen個char的密碼數組); Keylen 文件密碼長度; Startaddr 文件起始地址,≥0 Databuf是指向下標個數大於Datalen的字節數組,用於存放讀取上來的數據, Datalen本次讀取的長度,≥1 |
|
返回 |
返回unsigned char值。 |
|
返 回 值 說 明 |
0 |
操作成功。 |
|
|
|
|
|
|
|
|
|
|
|
|
其他 |
見函數返回代碼表:
|
二、寫卡函數名:cpursfiledatawrite
功能 |
讀文件數據。 |
|
VB聲明 |
Declare Function cpursfiledatawrite Lib "OUR_MIFARE.dll" (ByVal fileno As Byte, ByVal keytype As Byte, ByVal key As Long, ByVal keylen As Byte, ByVal startaddr As Long, ByVal databuf As Long, ByVal datalen As Long) As Byte |
|
輸入 |
Fileno爲文件號,取值0-5; Keytype 認證密碼類型,0用只讀密碼認證,2 用讀寫密碼認證; Key指向存放文件密碼的數組(≥Keylen個char的密碼數組); Keylen 文件密碼長度; Startaddr 文件起始地址,≥0 Databuf是指向下標個數大於Datalen的字節數組,用於存放要寫入的數據, Datalen本次寫卡的長度,≥1 |
|
返回 |
返回unsigned char值。 |
|
返 回 值 說 明 |
0 |
操作成功。 |
|
|
|
|
|
|
|
|
|
|
|
|
其他 |
見函數返回代碼表:
|
讓讀寫器發出聲音
函數名:pcdbeep
功能 |
讓讀寫器發出聲響。(暫不開放對指示燈的控制,如果有特殊要求請致電本公司) |
|
原始聲明 |
unsigned char __stdcall pcdbeep(unsigned long xms) |
|
輸入 |
xms爲響聲的時間長度,單位爲2毫秒 |
|
返回 |
返回unsigned char值。 |
|
返 回 值 說 明 |
0 |
操作成功,。 |
22 |
動態庫或驅動程序異常,解決方法是退出程序,拔出IC卡讀寫器,重裝驅動程序再插上IC卡讀寫器重試,或者重新拷貝動態庫OUR_MIFARE.dll到正確的位置。 |
|
24 |
操作超時。可能是電腦中毒導致USB幀傳遞調度緩慢,或者是IC卡讀寫器有問題,解決方法是重啓電腦或重新拔插IC卡讀寫器。 |
|
27 |
USB傳輸不穩定導致傳輸的字符不全。不需理會這個錯誤,因爲基本上是不會出現這個錯誤的。 |
|
28 |
USB傳輸不穩定導致CRC校驗錯。不需理會這個錯誤,因爲基本上是不會出現這個錯誤的。 |
|
其他 |
未知錯誤 |
|
例子及註釋 |
請要本公司網站下載各種開發工具的例子源代碼,本函數的聲明和輸入參數格式可以直接套用,謝謝使用 |
- 可作爲軟件加密狗,輕鬆實現自己軟件的產權保護。
函數名:pcdgetdevicenumber
功能 |
返回本讀寫器獨一無二的設備編號,此編號固化在芯片中,並通過加密的方式傳輸。根據此編號可在本公司網站查詢是否真正爲本公司的質保產品。因爲可以返回全球唯一的設備編號,所以只需增加少量的算法,本讀寫器也可作軟件加密狗用。 |
|
原始聲明 |
unsigned char __stdcall pcdgetdevicenumber(unsigned char *devicenumber) |
|
輸入 |
devicenumber只需指向一個至少已分配了4個char空間的可寫數組 unsigned char *指針, serial的下標由0開始。因爲此數組僅用於返回設備編號。 |
|
返回 |
返回unsigned char值,並將尋到的卡的序列號傳值到*serial數組。 |
|
返 回 值 說 明 |
0 |
操作成功,* devicenumber數組中的數據有效。 |
12 |
讀取設備編號失敗。 |
|
9 |
有多張卡在感應區,尋卡過程中防衝突失敗,*serial無效。 |
|
10 |
該卡可能已被休眠,無法選中,但卡序列號已被讀出,*serial數組中的數據有效。 |
|
22 |
動態庫或驅動程序異常,解決方法是退出程序,拔出IC卡讀寫器,重裝驅動程序再插上IC卡讀寫器重試,或者重新拷貝動態庫OUR_MIFARE.dll到正確的位置。 |
|
24 |
操作超時。可能是電腦中毒導致USB幀傳遞調度緩慢,或者是IC卡讀寫器有問題,解決方法是重啓電腦或重新拔插IC卡讀寫器。 |
|
28 |
USB傳輸不穩定導致CRC校驗錯。不需理會這個錯誤,因爲基本上是不會出現這個錯誤的。 |
|
其他 |
未知錯誤 |
|
例子及註釋 |
請要本公司網站下載各種開發工具的例子源代碼,本函數的聲明和輸入參數格式可以直接套用,謝謝使用 |
函數返回代碼表:
RetCode = 0 "操作成功"
RetCode = 8 "請重新拿開卡後再放到感應區"
RetCode = 50 "RATS錯誤,廠家調試代碼,用戶不需理會"
RetCode = 51 "PPS錯誤,廠家調試代碼,用戶不需理會"
RetCode = 52 "已進入了14443-4協議狀態,可進行CPU卡功能所有操作了"
RetCode = 53 "CPU卡功能通訊錯誤"
RetCode = 54 "數據不足,需要接着發送未完成的數據至卡上"
RetCode = 55 "發送ACK指令給卡,讓卡接着發送數據回來"
RetCode = 56 "清空根目錄失敗"
RetCode = 57 "卡片不支持功能"
RetCode = 58 "卡片初始化失敗"
RetCode = 59 "分配的空間不足"
RetCode = 60 "本次操作的實體已存在"
RetCode = 61 "無足夠空間"
RetCode = 62 "文件不存在"
RetCode = 63 "權限不足,有可能是用只讀密碼認證,導致無法更改讀寫密碼或無法寫文件"
RetCode = 64 "密碼不存在,或密鑰文件未創建"
RetCode = 65 "傳送長度錯誤"
RetCode = 66 "Le錯誤,即接收的數據長度指定過大"
RetCode = 67 "功能不支持或卡中無MF 或卡片已鎖定"
RetCode = 68 "密碼認證錯識次數過多,該密碼已被鎖死"
RetCode = 86 "更改後的密碼長度必須和創建時的長度一致"
RetCode = 87 "應用目錄不存在"
RetCode = 88 "應用文件不存在"
RetCode = 89 "文件號不能超過5"
RetCode = 90 "讀取文件時返回的長度不足,數據可能不正確"
RetCode = 91 "一次讀文件的長度不能超過255"
RetCode = 92 "一次寫文件的長度不能超過247"
RetCode >= 70 And RetCode <= 85
"密碼錯誤,剩餘次數爲" & CStr(RetCode - 70) & ",如果爲0,該密碼將鎖死,無法再認證"
"未知錯誤"