OUR_MIFARE.dll动15693卡部分使用说明
-
动态库简介
动态库OUR_MIFARE.dll用VC开发,编译成32位Release实体或64位Release实体,适用于WIN2000、XP、2003、win7的32或64位、win8编译和运行环境。本文档下面的源代码例子是C++的调用格式。
本动态库是本公司USB接口IC卡读写器的配套文件,必须和读写器一起使用。
OUR_MIFARE.dll支持在软件运行中可以随时更换USB接口。本公司免驱型和有驱型读写器使用的OUR_MIFARE.dll文件不同,但函数的调用一样,如果客户程序开发好了,免驱型和有驱型互换时,只需更换对应的OUR_MIFARE.dll。
。
推荐使用动态调用的方法使用本动态库。
15693卡内部存储结构知识:
本读写器支持ISO15693 系列卡。由于各个厂商生产的15693卡的容量及功能各有一些不同,其价格及供货情况也会不一样,故用户在选用某一厂商的卡片时,应综合考虑自己的要求进行选择。目前较为多的卡片为:PHILIPS公司生产的ICODE SL20系列卡片,TI公司生产的TAG-IT卡片以及INFINEON公司生产的卡片。我公司15693读写器均支持以上卡片的所有操作。相对于各厂家的15693卡,调用函数的输入参数中会有细微的差别,开发中稍加了解即可。各卡片的特别命令,都有相对应的函数。以方便用户的使用。
15693卡没有密码认证这一功能,全部数据都可以读取。但用户仍可以用UID来加上算法来加密各块数据,以确保在非法改动各块数据时将被发现。
标签内最多可以有256个数据块,每个数据块最大可以有32字节。数据块的内容可以锁定以防止修改。
15693卡的内部结构:
数据空间 |
长度 |
锁定位 |
块1 |
4个字节 |
|
块2 |
4个字节 |
|
. |
4个字节 |
|
. |
4个字节 |
|
. |
4个字节 |
|
块64 |
4个字节 |
|
UID |
8个字节 |
厂商出厂时已锁定 |
DSFID |
1字节 |
|
AFI |
1字节 |
|
IC版本 |
3个字节 |
厂商出厂时已锁定 |
说明:
1、 UID: 全球唯一标识符,每张卡都不一样,8个字节,读写器可以用UID号来操作指定的卡。UID[0]..UID[7],其中UID[7]为E0是固定的,UID[6]为卡制造商编码(如NXP公司为04,TI公司为07,上海贝岭为23),UID[5]为产品类别代码,比如ICODE SL2 ICS20是01H,Tag-it HF-I Plus Chip为80H,Tag-it HF-I Plus Inlay为00H。UID[4]..UID[0]才是真正卡号,是制造商内部分配的号码。
2、 AFI:应用标识,可以标识一部分卡,读写器可以用AFI来选择某一部分卡。
国标中关于AFI的规定如下:
3、 DSFID:卡数据存储格式标识。
卡片的四种状态:
状态 |
说明 |
Power off |
在标签未进入到有效磁场区域时标签处于Power off状态 |
Ready |
被**后选择表示未设立时,处理任何请求 |
Quiet |
不处理任何标签搜录指令,仅可接受直接寻址的命令 |
Select |
仅响应选择标识符设置的请求 |
关于函数调用中flags值的说明
说明:VICC(vicinity integrated circuit card)表示卡,VCD (vicinity coupling device)读写卡设备。
flags参数典型选值及说明
值(16进制) |
说明 |
值(16进制) |
说明 |
36 |
操作单张卡,需要AFI参数,低数据速率 |
02 |
不需UID,(任何select状态的卡),低数据速率 |
16 |
操作多张卡,需要AFI参数,低数据速率 |
12或32 |
不需UID,仅select状态的卡,低数据速率 |
26 |
操作单张卡, (任何AFI的卡),低数据速率 |
62 |
写卡时卡必须等待卡写成功后才返回成功,需要指定UID,(任何select状态的卡),低数据速率 |
06 |
操作单张卡, (任何AFI的卡),低数据速率 |
|
|
22 |
写卡时卡接到的指令时马上返回成功,需要指定UID,(任何select状态的卡),低数据速率 |
|
|
我公司增加了一条通用的可应用卡片供应商定制功能函数,同时也提供直接从读卡器本上开发出来配合卡片供应商特殊定制功能的服务。
二、易用函数
大部份软件、一卡通公司,只要使用以下二个函数完全可以达到软件需求,比如读取信息、写入信息等等。
轻松读卡:
函数名:iso15693readex
功能 |
超强读卡,使用函数可以一次性读出最多12个块的信息,并且返回卡***。 |
|
原始声明 |
unsigned char __stdcall iso15693readex(unsigned char ctrlword, unsigned char afi, unsigned char startblock,unsigned char blocknum, unsigned char *uid, unsigned char *revbuf) |
|
输入 |
1、ctrlword读卡的控制字,ctrlword是一个字节,相当于八个位,每个位只有0和1两种状态: 推荐使用方法如下: //先定义以下常量 #define NEEDUID 0x08 #define #define STAYQUIET 0x20
举例: //以下控制字含义:仅读指定UID号的卡,读成功后静止该卡 ctrlword = NEEDUID + STAYQUIET //以下控制字含义:可操作任何卡,操作成功后不静止该卡 ctrlword = 0
2、afi一般只需置为0。 3、startblock起始块。 4、blocknum 本次操作的块数量。
5、* uid 返回的卡***数组。
6、* revbuf 是指向字节数大于49的字节数组,用于存放块的数据,其中第0个字节为本次返回的有效字节数,其余为数据 |
|
返回 |
返回unsigned char值,并将卡本块的数据传值到* uid及*revbuf指向的数组中。 |
|
返 回 值 说 明 |
0 |
操作成功,读出的数据有效。 |
8 |
寻卡错误,根本就没有卡在感应区,*serial无效。 |
|
22 |
动态库或驱动程序异常,解决方法是退出程序,拔出IC卡读写器,重装驱动程序再插上IC卡读写器重试,或者重新拷贝动态库OUR_MIFARE.dll到正确的位置。 |
|
24 |
操作超时。可能是电脑中毒导致USB帧传递调度缓慢,或者是IC卡读写器有问题,解决方法是重启电脑或重新拔插IC卡读写器。 |
|
27 |
USB传输不稳定导致传输的字符不全。不需理会这个错误,因为基本上是不会出现这个错误的。 |
|
28 |
USB传输不稳定导致CRC校验错。不需理会这个错误,因为基本上是不会出现这个错误的。 |
|
其他 |
未知错误 |
|
例子及注释 |
请要本公司网站下载各种开发工具的例子源代码,本函数的声明和输入参数格式可以直接套用,谢谢使用 |
轻松写卡:
函数名:Piccwriteex15693
功能 |
超强写卡,使用些函数可以一次性写整个区的第0块、第1块、第2块信息。 |
|
原始声明 |
unsigned char __stdcall piccwriteex15693(unsigned char ctrlword, unsigned char afi, unsigned char startblock,unsigned char blocknum, unsigned char *uid, unsigned char *writebuf) |
|
输入 |
1、ctrlword读卡的控制字,ctrlword是一个字节,相当于八个位,每个位只有0和1两种状态: 推荐使用方法如下: //先定义以下常量 #define NEEDUID 0x08 #define STAYQUIET 0x20 举例: //以下控制字含义:仅读指定UID号的卡,读成功后静止该卡 Ctrlword = NEEDUID + STAYQUIET //以下控制字含义:可操作任何卡,操作成功后不静止该卡 Ctrlword = 0
2、afi一般只需置为0。 3、startblock起始块。 4、blocknum 本次操作的块数量。
5、* uid 返回的卡***数组。
6、* revbuf 是指向字节数大于49的字节数组,用于存放块的数据,其中第0个字节为本次写入的有效字节数,其余为数据 |
|
返回 |
返回unsigned char值,并将卡本块的数据传值到*uid指向的数组中。 |
|
返 回 值 说 明 |
0 |
操作成功,写卡数据有效。 |
8 |
寻卡错误,根本就没有卡在感应区,*serial无效。 |
|
21 |
本函数需要引用的动态库ICUSB.DLL不在当前目录下。 |
|
22 |
动态库或驱动程序异常,解决方法是退出程序,拔出IC卡读写器,重装驱动程序再插上IC卡读写器重试,或者重新拷贝动态库OUR_MIFARE.dll到正确的位置。 |
|
24 |
操作超时。可能是电脑中毒导致USB帧传递调度缓慢,或者是IC卡读写器有问题,解决方法是重启电脑或重新拔插IC卡读写器。 |
|
27 |
USB传输不稳定导致传输的字符不全。不需理会这个错误,因为基本上是不会出现这个错误的。 |
|
28 |
USB传输不稳定导致CRC校验错。不需理会这个错误,因为基本上是不会出现这个错误的。 |
|
其他 |
未知错误 |
|
例子及注释 |
请要本公司网站下载各种开发工具的例子源代码,本函数的声明和输入参数格式可以直接套用,谢谢使用 |
让读写器发出声音
函数名:pcdbeep
功能 |
让读写器发出声响。(暂不开放对指示灯的控制,如果有特殊要求请致电本公司) |
|
原始声明 |
unsigned char __stdcall pcdbeep(unsigned long xms) |
|
输入 |
xms为响声的时间长度,单位为2毫秒 |
|
返回 |
返回unsigned char值。 |
|
返 回 值 说 明 |
0 |
操作成功,。 |
21 |
本函数需要引用的动态库ICUSB.DLL不在当前目录下。 |
|
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数组中的数据有效。 |
|
21 |
本函数需要引用的动态库ICUSB.DLL不在当前目录下。 |
|
22 |
动态库或驱动程序异常,解决方法是退出程序,拔出IC卡读写器,重装驱动程序再插上IC卡读写器重试,或者重新拷贝动态库OUR_MIFARE.dll到正确的位置。 |
|
24 |
操作超时。可能是电脑中毒导致USB帧传递调度缓慢,或者是IC卡读写器有问题,解决方法是重启电脑或重新拔插IC卡读写器。 |
|
28 |
USB传输不稳定导致CRC校验错。不需理会这个错误,因为基本上是不会出现这个错误的。 |
|
其他 |
未知错误 |
|
例子及注释 |
请要本公司网站下载各种开发工具的例子源代码,本函数的声明和输入参数格式可以直接套用,谢谢使用 |
- 其他函数一般情况下用不上,如果确实需要请咨询我公司