OUR_MIFARE.dll动态库NTAG21x系列卡读写函数说明
动态库OUR_MIFARE.dll用VC开发,编译成32位Release实体或64位Release实体,适用于WIN2000、XP、2003、win7的32或64位、win8编译和运行环境。本文档下面的源代码例子是C++的调用格式。
本动态库是本公司USB接口NTAG21x系列卡读写器的配套文件,必须和读写器一起使用。
OUR_MIFARE.dll支持在软件运行中可以随时更换USB接口。本公司免驱型和有驱型读写器使用的OUR_MIFARE.dll不同,但函数的调用一样,如果客户程序开发好了,免驱型和有驱型互换时,只需更换对应的OUR_MIFARE.dll。
推荐使用动态调用的方法使用本动态库。
二、易用函数
我们把复杂的NTAG21x卡认初始化、读、写过程集成转化为更简单的函数调用操作,即使是从未接触过一卡通开发的软件开发人员,写起程序来也毫不困难,一点都不浪费开发时间。开发人员不再需要花大量时间去了解NTAG21x卡的内部机制,我们将它封装成三个函数:1、初始化NTAG21x卡;2、轻松读NTAG21x卡;3、轻松写NTAG21x卡,只需十分钟就可轻松搞定NTAG21x卡!。
初始化NTAG21x卡
函数名:piccinit_ntag
功能 |
设置NTAG21x是否要认证卡密码才能读写卡。 |
|
VB声明 |
Declare Function piccinit_ntag Lib "OUR_MIFARE.dll" (ByVal ctrlword As Byte, ByVal serial As Long, ByVal picckey As Long, ByVal piccdata As Long) As Byte |
|
输入 |
1、ctrlword 控制字。 2、serial只需指向一个至少已分配了7个char空间的可写数组 unsigned char *指针,serial的下标由0开始。。 3、picckey指向存放认证密码的数组4个字节。 4、piccdata初始化卡的信息共16个字节。
|
|
返回 |
|
|
返 回 值 说 明 |
0 |
|
8 |
|
|
50 |
|
|
51 |
|
|
52 |
|
|
|
53 |
|
|
其他 |
见函数返回代码表: |
轻松读NTAG21x卡:
函数名:piccreadex_ntag
功能 |
初始化函数,(ctrlword是否需要先清空卡,不需要清空的话,可以需输入卡密码,卡密码长度)ctrlword_0是否先清空卡,分配空间(字节数) |
|
VB声明 |
Declare Function piccreadex_ntag Lib "OUR_MIFARE.dll" (ByVal ctrlword As Byte, ByVal serial As Long, ByVal picckey As Long, ByVal blockaddr As Byte, ByVal blocksize As Byte, ByVal piccdata As Long) As Byte |
|
输入 |
1、ctrlword 0表示不清空已创建的文件,1表示将已创建的文件清除。 2、key 卡密码, (卡密码和文件没有任何关系,卡密码只是用来清空卡,读和写 文件是无效的)。是指向下标个数≤16的字节数组,用于存放卡密码。 3、keylen卡密码的长度。 4、customsize 设定应用空间的大小,要≤6121 。 |
|
返回 |
返回unsigned char值,并将卡分配成可用区间为customsize 个字节,并可以在此空间内创建文件,所有创建的文件大小总和不能大于customsize。 |
|
返 回 值 说 明 |
0 |
操作成功,写卡数据有效。 |
其他 |
见函数返回代码表:
|
|
例子及注释 |
请要本公司网站下载各种开发工具的例子源代码,本函数的声明和输入参数格式可以直接套用,谢谢使用 |
轻松写NTAG21x卡
函数名:piccwriteex_ntag
功能 |
创建好的文件不能删除,只能重新初始化卡来清除所有文件, |
|
VB声明 |
Declare Function piccwriteex_ntag Lib "OUR_MIFARE.dll" (ByVal ctrlword As Byte, ByVal serial As Long, ByVal picckey As Long, ByVal blockaddr As Byte, ByVal blocksize As Byte, ByVal piccdata 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,该密码将锁死,无法再认证"
"未知错误"