FM1208CPU卡讀寫函數說明

  • 動態庫簡介

動態庫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卡的內部機制,我們將它封裝成五個函數:1CPUCPU卡激活;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,該密碼將鎖死,無法再認證"

 

"未知錯誤"

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章