• 动态库简介

动态库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,该密码将锁死,无法再认证"

"未知错误"

vb6示例   https://download.csdn.net/download/zhangjin7422/2141877                      
                FM1208-CPU卡VB6示例源码.rar-VB文档类资源-CSDN下载
c#示例       FM1208-CPU卡易写版C#示例源码.rar-C#文档类资源-CSDN下载                   
                FM1208-CPU卡C#示例源码.rar-C#文档类资源-CSDN下载
python示例 FM1208-CPU卡Python示例源码.rar-Python文档类资源-CSDN下载
java示例     FM1208-CPU卡Java_Jna示例源码.rar-Java文档类资源-CSDN下载 
delphi示例  FM1208-CPU卡DELPHI示例源码.rar-Delphi文档类资源-CSDN下载

FM1208CPU卡读写函数说明相关推荐

  1. 射频卡读写原理及实现

    射频卡又称非接触式IC卡,它将RFID和IC技术完美结合,使卡片能够在不需要电源及与读卡器不接触的情况下正常工作.目前射频卡已经广泛使用在社会生活的各个领域,如银行卡.企业一卡通系统等.由于射频卡具有 ...

  2. android 6.0 sd卡读写权限,Android 6.0 读写SD卡权限问题

    一.问题描述## Android 6.0 下默认存储SD卡,使用原生FMRadio生成的文件保存到内部存储中 [预置条件]插入T卡[操作步骤]设置>存储设备和USB>选择SD卡为默认存储& ...

  3. java做的web系统 m1 读卡器 结合_IE浏览器接入IC卡读写器实现M1卡的读写功能

    基于ActiveX技术的ocx控件是实现网页上读写 IC卡的一个比较不错的方法,因为ocx是com组件,通过其发布的接口,IE可以实现所有的功能.ActiveX不仅能适应大部分编程语言,做到与编程语言 ...

  4. 简述sd卡2.0协议_【正点原子FPGA连载】第十二章SD卡读写TXT文本实验-领航者 ZYNQ 之嵌入式开发指南...

    1)实验平台:正点原子领航者ZYNQ开发板 2)平台购买地址:https://item.taobao.com/item.htm?&id=606160108761 3)全套实验源码+手册+视频下 ...

  5. sdhc 读写 扇区 linux,SD卡读写扇区注意事项(转)

    在调试SD卡时,大家都喜欢使用扇区进行验证.也就是说,一般都是通过读写扇区数据进行比较,或者读取第0扇区的数据,在通过WinHex软件打开启动扇区进行比较.这种方法对于1G的SD卡或部分2G的SD卡可 ...

  6. STM32-M3(野火)SD卡读写/移植znFAT文件访问系统

    设备: STM32F103VE-M3,板载SD卡读写模块. 源码: 野火的SD卡扇区读写驱动,振南FAT的STM32版本. 另有1G-16G SD卡若干张. 移植过程: SD卡扇区读写驱动测试,SD卡 ...

  7. STM32CubeMX系列09——SDIO(SD卡读写、SD卡移植FATFS文件系统)

    文章目录 1. 准备工作 1.1. 简单扫盲 1.1.1. SD卡 1.1.2. TF卡 1.1.3. SDIO接口 1.2. 所用硬件及原理图 2. 创建工程 2.1. 选择主控 2.2. 系统配置 ...

  8. ZYNQ-使用SD卡读写文本数据

    学习内容 本文主要关于SD卡相关内容,然后使用SD卡进行TXT文本读写,并用串口打印出读写数据. 开发环境 vivado 18.3&SDK,PYNQ-Z2开发板. SD卡简介 SD卡(Secu ...

  9. 一种射频卡读写原理及实现

    原文:http://bbs.dzsc.com/space/viewspacepost.aspx?postid=95408 非接触式IC卡又称射频卡,由IC芯片.感应天线组成,封装在一个标准的PVC卡片 ...

  10. SD卡提示函数不正确怎样办

    硬盘损坏怎么恢复?硬盘是我们工作.学习和生活中常用的信息存储工具,因为容量大.价格便宜而深受人们的喜爱,因此硬盘也成为了我们一些重要信息的信息载具.SD卡提示函数不正确怎样办这时我们该如何恢复我们丢失 ...

最新文章

  1. JavaScript语言基础13
  2. SQL Plan Management介绍
  3. [云炬创业基础笔记]第二章创业者测试23
  4. 史上最简单MySQL教程详解(进阶篇)之存储过程(一)
  5. EclipseIDEA使用经验
  6. PX4 代码中 position_estimator_inav(互补滤波)理解
  7. Autodesk 3ds Max 渲染之后保存页面卡死问题
  8. 系统修复专家—SREng
  9. 编一程序,将两个字符串连接起来,不要用strcat函数。C语言
  10. MacBook关闭系统更新
  11. 被国人误解了千年的七句话
  12. 回溯算法--LeetCode-46 全排列、LeetCode-47 全排列Ⅱ
  13. 递归算法中的时间复杂度分析
  14. python的字典-使用字典+遍历字典+字典嵌套
  15. 神经网络调参-warmup and decay
  16. 做玫瑰花的方法 用纸_用纸折玫瑰花步骤图
  17. c语言 /= 和 *= 是什么意思?
  18. 大数据数据仓库建设流程概述
  19. python django-blog-zinnia
  20. Centos中nginx安装步骤(在线/离线)

热门文章

  1. 基于Python的贪吃蛇游戏设计
  2. PyQt5的笔记(中-1)
  3. share 接口的使用
  4. 软件项目管理实用教程(人民邮电出版)第二章课后习题
  5. 吉利汽车:数字化转型从上云开始
  6. python将xml写入excel_Python实现将xml导入至excel
  7. 转速测试软件app,实时显示行车速度app手机版-手机实时行车速度显示app(gps车速表)v1.6最新版_新绿资源网...
  8. MySQL高级进阶(三)、InnoDB存储引擎详解
  9. Proteus仿真:流水灯
  10. 如何判断电脑是否中毒(转)