ACR122智能读写器二次开发

上传人:oq****t 文档编号:2654101 上传时间:2017-07-26 格式:DOCX 页数:15 大小:491.88KB
返回 下载 相关 举报
ACR122智能读写器二次开发_第1页
第1页 / 共15页
ACR122智能读写器二次开发_第2页
第2页 / 共15页
ACR122智能读写器二次开发_第3页
第3页 / 共15页
ACR122智能读写器二次开发_第4页
第4页 / 共15页
ACR122智能读写器二次开发_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《ACR122智能读写器二次开发》由会员分享,可在线阅读,更多相关《ACR122智能读写器二次开发(15页珍藏版)》请在金锄头文库上搜索。

1、说明:此文档基于手机端扫描 NFC(Mifare Ultralight)卡的功能来介绍 ACR122U 智能卡读写器的二次开发过程实现。其他类卡的细节说明请参照官网的接口说明,官网地址:http:/.hk/cn/读写器交互流程:一、 连接读写器1、 创建资源管理器的上下文。函数原型:LONG SCardEstablishContext(DWORD dwScope, LPCVOID pvReserved1, LPCVOID pvReserved2, LPSCARDCONTEXT phContext );/*各个参数的含义:(1 ) dwScope:输入类型;资源管理上下文范围。(2 ) pvRe

2、served1:输入类型;保留 1。为 0/null。(3 ) pvReserved2:输入类型;保留 2。为 0/null。(4 ) phContext:输出类型;建立的资源管理器上下文的句柄。返回值:成功:SCARD_S_SUCCESS。失败:错误信息。*/2、 获取命名读写器组中读写器列表,并去除重复名称。函数原型:LONG SCardListReaders(SCARDCONTEXT hContext, LPCTSTR mszGroups, LPTSTR mszReaders, LPDWORD pcchReaders );/*各个参数的含义:(1 ) hContext:输入类型;管理上下

3、文句柄。SCardEstablishContext() 获得。(2 ) mszGroups:输入类型;读写器组名称。CE 中可以为 NULL 获取所有读写器。(3 ) mszReaders:输入类型;多字符串读写器名称,可为 null。(4 ) pcchReaders:输出类型;缓冲区字符个数,返回实际填充的字符个数。返回值:成功:SCARD_S_SUCCESS。失败:错误信息。*/二、 读取智能卡信息1、 建立智能卡连接函数原型:LONG SCardConnect(SCARDCONTEXT hContext, LPCTSTR szReader, DWORD dwShareMode, DWOR

4、D dwPreferredProtocols, LPSCARDHANDLE phCard, LPDWORD pdwActiveProtocol );/*各个参数的含义:(1 ) hContext:输入类型;管理上下文句柄。SCardEstablishContext() 获得。(2 ) szReaderName:输入类型;包含目标卡的读写器字符串指针。(3 ) dwShareMode:输入类型;其他应用程序是否可以建立连接。(3 ) dwPrefProtocol:输入类型;可接受的连接协议。(3 ) phCard:输出类型;连接句柄指针。(4 ) pdwActiveProtocol:输出类型;活

5、动协议的指针。返回值:成功:SCARD_S_SUCCESS。失败:错误信息。*/2、 向智能卡发送指令函数原型:LONG SCardTransmit(SCARDHANDLE hCard, LPCSCARD_I0_REQUEST pioSendPci, LPCBYTE pbSendBuffer, DWORD cbSendLength, LPSCARD_IO_REQUEST pioRecvPci, LPBYTE pbRecvBuffer, LPDWORD pcbRecvLength); /*各个参数的含义:(1 ) hCard:输入类型;由函数 SCardConnect 返回的连接句柄。(2 )

6、pioSendPci:输入类型;指令的协议头结构的指针,由 SCARD_IO_REQUEST 结构定义。后面是使用的协议的协议控制信息。一般使用系统定义的结构,SCARD_PCI_T0(T=0 协议) 、SCARD_PCI_T1(T=1 协议) 、SCARD_PCI_RAW(原始协议) 。(3 ) pbSendBuffer:输入类型;要发送到智能卡的数据的指针。(4 ) cbSendLength:输入类型;pbSendBuffer 的字节数目。(5 ) pioRecvPci:输入输出类型;指令协议头结构的指针,后面是使用的协议的协议控制信息,如果不返回协议控制信息,可以为 NULL。(6 )

7、pbRecvBuffer:输入输出类型;从智能卡返回的数据的指针。(7 ) pcbRecvLength:输入输出类型;pbRecvBuffer 的大小和实际大小。返回值:成功:SCARD_S_SUCCESS。失败:错误信息。*/三、 关闭读写器连接1、 断开智能卡连接函数原型:LONG SCardDisconnect(SCARDHANDLE hCard, DWORD dwDisposition );/*各个参数的含义:(1 ) hCard:输入类型;由函数 SCardConnect 返回的连接句柄。(2 ) dwDisposition:输入类型;断开连接时对智能卡的操作。取值:SCARD_EJ

8、ECT_CARD-弹出智能卡;SCARD_LEAVE_CARD- 不做任何操作;SCARD_RESET_CARD-复位智能卡;SCARD_UNPOWER_CARD-给智能卡掉电。返回值:成功:SCARD_S_SUCCESS。失败:错误信息。*/2、 关闭建立的资源管理器上下文函数原型:LONG SCardReleaseContext(SCARDCONTEXT hContext );/*各个参数的含义:(1 ) hContext:输入类型;管理上下文句柄。SCardEstablishContext() 获得。返回值:成功:SCARD_S_SUCCESS。失败:错误信息。*/读写器驱动安装:读写器

9、的驱动安装过程略过,产品附带光盘自带 windowsXP、vista 等系统的安装驱动(也可 Internet 自动安装) , win7、win8 的系统驱动需要手动下载安装( Internet 自动更新会安装失败) 。读写器接口描述:一、读写器检测到 PICC 后,一个 ATR 会被发送到 PC/SC 驱动来识别 PICC。ATR 格式如下图:例如:Mifare Ultralight 卡的 ATR=3B 8F 80 01 80 4F 0C A0 00 00 03 06 03 00 03 00 00 00 00 6Ah二、Mifare Ultralight 卡的内存结构:Mifare Ultr

10、alight 卡可自由访问,不需要密钥验证。三、读取二进制块数据APDU 结构:P2:1 个字节,待访问的内存块。Le:1 个字节,最大为 16。响应状态码:例如:读取第 0x04 页 4 个字节 APDU=FF B0 00 04 04h读取 0x04、0x05 页数据 APDU=FF B0 00 04 08h最多可同时读取四页内容。四、 写二进制数据APDU 结构:P2:1 个字节,待更新的起始块。Le:1 个字节,最大为 4(Mifare 1K/4K 卡最大为 16) 。响应状态码:例如:更新第 0x04 页数据为01 01 02 02 ADPU=FF 06 00 04 04 01 01

11、02 02h代码实现:1、类(ModWinsCard.cs ):using System;using System.Text;using System.Runtime.InteropServices;using System.Security; namespace NFCpublic class ModWinsCardStructLayout(LayoutKind.Sequential)public struct SCARD_IO_REQUESTpublic int dwProtocol;public int cbPciLength; public const int SCARD_S_SUCC

12、ESS = 0;public const int SCARD_SCOPE_USER = 0;public const int SCARD_SHARE_SHARED = 2;public const int SCARD_PROTOCOL_T0 = 0x01; / T=0 is the active protocol.public const int SCARD_PROTOCOL_T1 = 0x02; / T=1 is the active protocol./*= 错误代码=*/public const int SCARD_F_INTERNAL_ERROR = -2146435071;publi

13、c const int SCARD_E_CANCELLED = -2146435070;public const int SCARD_E_INVALID_HANDLE = -2146435069;public const int SCARD_E_INVALID_PARAMETER = -2146435068;public const int SCARD_E_INVALID_TARGET = -2146435067;public const int SCARD_E_NO_MEMORY = -2146435066;public const int SCARD_F_WAITED_TOO_LONG =

14、 -2146435065;public const int SCARD_E_INSUFFICIENT_BUFFER = -2146435064;public const int SCARD_E_UNKNOWN_READER = -2146435063;public const int SCARD_E_TIMEOUT = -2146435062;public const int SCARD_E_SHARING_VIOLATION = -2146435061;public const int SCARD_E_NO_SMARTCARD = -2146435060;public const int S

15、CARD_E_UNKNOWN_CARD = -2146435059;public const int SCARD_E_CANT_DISPOSE = -2146435058;public const int SCARD_E_PROTO_MISMATCH = -2146435057;public const int SCARD_E_NOT_READY = -2146435056;public const int SCARD_E_INVALID_VALUE = -2146435055;public const int SCARD_E_SYSTEM_CANCELLED = -2146435054;public const int SCARD_F_COMM_ERROR = -2146435053;public const int SCARD_F_UNKNOWN_ERROR = -2146435052;public const int SCARD_E_INVALID_ATR = -2146435051;public const int SCARD_E_NOT_TRANSACTED = -2146435050;public const int SCARD_E_READER_UNAVAILABLE = -2146435049;public const int SCARD_P_S

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号