大家好,欢迎来到IT知识分享网。
最近接触到一个使用Felica卡的项目,在开发Felica卡的读写过程中遇到的一些问题,将这些问题整理并记录下来,方便各位在开发Felica卡读写应用的过程中进行参考。
什么是Felica卡
反正就是Felica卡对于我们来说用的地方很多少,是个另类。
关于支持Felica 的读卡器选择
由于Felica卡在我们这里基本上没有被使用。所以,支持Felica卡的智能卡读写器就比较少了。买了很多个读卡器均不支持Felica卡的读写,好在皇天不负有心人,找到了诺塔斯智能科技的NTS-12-2823这款读卡器。
首先,它支持ISO14443 TYPE A、ISO14443 TYPE B和ISO15693等多种协议,可以与多种类型的非接触式智能卡和电子标签进行通信,从而满足用户在不同场景下的需求。
此外,诺塔斯L12-2823读写器提供了多种平台和多语言的二次开发包,包括丰富的函数接口和范例源码,使得用户在进行二次开发时能够轻松照搬范例,大大降低了开发难度,提高了开发效率。
目前这个项目中采用的是Dephi进行开发,诺塔斯提供的开发范例也比较齐全基本上照搬即可。以下是代码部分。
首先,初始化一下 unit LotusCardDriver;,这是里面定义了设备的各种参数,需要引用进来。windows环境中还需要引用LotusCardDriver.dll;这个文件分为32位和64位,这个要根据自己项目运行的操作系统选择正确的版本。
打开设备
{ / * 打开设备 * * @param strDeviceName * 串口设备名称 * @param nVID * USB设备VID * @param nPID * USB设备PID * @param unRecvTimeOut * 接收等待长度 * @param nUsbDeviceIndex * USB设备索引 * @return 句柄 */} function LotusCardOpenDevice(pszDeviceName:PAnsiChar;nVID, nPID, nUsbDeviceIndex, unRecvTimeOut:Integer;pExtendReadWrite:TLotusCardExtendReadWriteCallBackFunc):Integer;stdcall; external DLL_NAME;
设置卡类型和寻卡。
/ * 设置卡片类型 * @param nDeviceHandle * 设备句柄 * @param cCardType 卡片类型 A='A'/'a' B='B'/'b' F='F'/'f' C='C'/'c' * @return true = 成功 */} function LotusCardSetCardType( nDeviceHandle:Integer; cCardType:AnsiChar):BOOL; stdcall; external DLL_NAME; { / * Felica寻卡 * @param nDeviceHandle * 设备句柄 * @param unTimerSlot timer slot 0x00 0x01 0x03 0x07 0x0F * @param tLotusCardParam 参数(读写缓冲) * @return true = 成功 */} function LotusCardFelicaPolling(nDeviceHandle:Integer; unTimerSlot:Byte; sttpLotusCardParam:PLotusCardParamStruct):BOOL; stdcall; external DLL_NAME; {
读卡和写卡
function LotusCardNfcVWriteNBlock(nDeviceHandle:Integer; unBlockIndex:DWORD; unBlockCount:DWORD; pUid:PByte; pBuffer:PByte; unBufferLength:DWORD):BOOL; stdcall; external DLL_NAME; { / * Felica寻卡 * @param nDeviceHandle * 设备句柄 * @param pUid 参数 UID 8字节 * @param pPMM 参数 PMM * @param pPSC 参数 Primary System Code * @return true = 成功 */} function LotusCardNfcFRequest(nDeviceHandle:Integer; pUid, pPMM, pPSC:PByte):BOOL; stdcall; external DLL_NAME; { / * Felica读卡 * @param nDeviceHandle * 设备句柄 * @param unBlockIndex 参数 块索引 * @param pUid 参数 UID 8字节 * @param pBuffer 参数 缓冲 * @param punBufferLength 参数 缓冲长度 返回结果长度 * @return true = 成功 */} function LotusCardNfcFReadBlock(nDeviceHandle:Integer; unBlockIndex:DWORD; pUid, pBuffer:PByte; punBufferLength:PDWORD):BOOL; stdcall; external DLL_NAME; { / * Felica读卡 * @param nDeviceHandle * 设备句柄 * @param unBlockIndex 参数 块索引 * @param unBlockCount 参数 块数量 * @param pUid 参数 UID 8字节 * @param pBuffer 参数 缓冲 * @param punBufferLength 参数 缓冲长度 返回结果长度 * @return true = 成功 */} function LotusCardNfcFReadNBlock(nDeviceHandle:Integer; unBlockIndex:DWORD; unBlockCount:DWORD; pUid, pBuffer:PByte; punBufferLength:PDWORD):BOOL; stdcall; external DLL_NAME; { / * Felica写卡 * @param unBlockIndex 参数 块索引 * @param pUid 参数 UID 8字节 * @param pBuffer 参数 缓冲 * @param punBufferLength 参数 缓冲长度 返回结果长度 * @return true = 成功 */} function LotusCardNfcFWriteBlock( nDeviceHandle:Integer; unBlockIndex:DWORD; pUid, pBuffer:PByte; punBufferLength:PDWORD):BOOL; stdcall; external DLL_NAME; { / * Felica写卡 * @param unBlockIndex 参数 块索引 * @param unBlockCount 参数 块数量 * @param pUid 参数 UID 8字节 * @param pBuffer 参数 缓冲 * @param punBufferLength 参数 缓冲长度 返回结果长度 * @return true = 成功 */} function LotusCardNfcFWriteNBlock( nDeviceHandle:Integer; unBlockIndex, unBlockCount:DWORD; pUid, pBuffer:PByte; punBufferLength:PDWORD):BOOL; stdcall; external DLL_NAME;
关闭设备
/ * 关闭设备 * * @param nDeviceHandle * 设备句柄 */} procedure LotusCardCloseDevice(nDeviceHandle:Integer);stdcall; external DLL_NAME;//'LotusCardDriver.dll';
以上是关于使用NTS-L12-2823读写器读写Felica智能卡的相关操作,仅供参考!开发过程中遇到技术问题也可以联系诺塔斯,还是比较方便。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/140596.html