为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

读卡扫描接口使用文档

2019-05-06 10页 doc 32KB 18阅读

用户头像

is_890199

暂无简介

举报
读卡扫描接口使用文档历途读卡扫描接口 (Version 1.0) 修订历史 日期 版本 说明 作者 2014-12-25 1.0 第一版,初稿 吕贤鸿                                                 1、接口说明:(具体请查看API文档说明,路径:读卡扫描接口\doc\index.html) (A) RFID读卡: 1. RfidManager :该类提供了读卡号、读扇区的块、写数据到扇区的块。 1)getInsta...
读卡扫描接口使用文档
历途读卡扫描接口 (Version 1.0) 修订历史 日期 版本 作者 2014-12-25 1.0 第一版,初稿 吕贤鸿                                                 1、接口说明:(具体请查看API文档说明,路径:读卡扫描接口\doc\index.html) (A) RFID读卡: 1. RfidManager :该类提供了读卡号、读扇区的块、写数据到扇区的块。 1)getInstance(String serialPort , int baudrate) :获取RfidManager实例,以对卡片进行读写操作 a) serialPort :Rfid模块连接到硬件串口号如/dev/ttyS0 b) Baudrate :Rfid模块通讯使用的波特率如115200 2)recyle() :RfidManager资源回收,客户端软件结束时调用 3)setOnRfidDataListener(RfidDataListener listener):设置Rfid数据监听器,用于监听Rfid模块操作是否已完成并通知用户获取相应的数据 a)listener :Rfid数据监听器 4)requestUID() :读卡号,请求读取卡号。 5)requestWrite(int whichBlock , int whichKeyMode ,int[] keyBuf , int[] dataBuf):写数据到某个扇区的某块上,参数说明: a) whiBlock: 卡上块的地址,从0x00开始; b) whichKeyMode: 码模式,0x60—KeyA, x61—KeyB,默认KeyA ; c) keyBuf: 的密码,长度6个字节,卡的出厂密码是6个0xff ; d) dataBuf: 写到卡里的数据,长度为16个字节; 6)requestRead(int whichBlock , int whichKeyMode ,int[] keyBuf):读扇区的块,请求读取某个扇区的某块上的数据,参数说明: a)whiBlock: 卡上块的地址,从0x00开始; b)whichKeyMode: 码模式,0x60—KeyA, x61—KeyB,默认KeyA ; c)keyBuf: 的密码,长度6个字节,卡的出厂密码是6个0xff ; 2. RfidDataListener: 1) onError(int request , int code):Rfid操作出错回调 a) request: 请求Rfid操作类型,RfidRequest.RFID_REQUEST_GET_UID请求读卡卡片的UID;RfidRequest.RFID_REQUEST_READ请求Rfid读取卡片上块的数据;RfidRequest.RFID_REQUEST_WRITE请求Rfid写数据到卡片上块。 b) code: 请求Rfid操作出错的代码,具体代码说明请查看RfidError 2) onRfidDataReady(int request , byte[] data):Rfid操作成功回调数,写卡成功会返回长度为1的data byte数组,并且值为-1。 a) request:请求Rfid操作类型 b) Data : Rfid操作返回的数据,如请求读取uid则返回byte数据的uid数据 3. RfidError: 请求Rfid操作出错返回的代码 4. RfidRequest: 请求Rfid操作的类型:获取卡片Uid;读卡片块的数据;写数据到卡片 (B) 扫描: 1. ScanManager: 该类提供了扫描头扫描的方法 1) getInstance(String serialPort , int baudrate ):获取ScanManager实例,以触发扫描头进行扫描操作。 a) serialPort :Rfid模块连接到硬件串口号如/dev/ttyS0 c) Baudrate :Rfid模块通讯使用的波特率如115200 2) setOnScanDataListener(ScanDataListener listener) :设置扫描数据监听器 a) listener:扫描数据监听器 3) requestScan():触发扫描头进行触发操作。 4) recyle() :ScanManager资源回收,客户端软件结束时调用 2. ScanDataListener:扫描数据监听器,当扫描结束会通过监听器通知用户获取扫描数据。 1) onError(int error):扫描操作出错回调方法。 a) error:扫描出错代码,具体查看ScanError。 2) onDataReceived(final byte[] buffer): 扫描成功回调方法 B) buffer : 扫描数据 3. ScanError: 扫描出错代码 2、接口使用说明:把读卡扫描接口\libs拷贝到对应的工程目录,(具体请查阅demo源码,路径:读卡扫描接口\demo) (A) RFID读卡: 1 .获取RfidManager实例 mRfidManager=RfidManager.getInstance("/dev/ttyMT0",    SerialConstant.SERIAL_CONSTANT_BAUDRATE_115200) ; 2. 设置RfidManager数据监听器 mRfidManager.setOnRfidDataListener(new RfidDataListener() { @Override public void onRfidDataReady(int request, byte[] data) { } @Override public void onError(int request, int code) { } }); 3. 请求RfidManager操作 1).请求读取UID: mRfidManager.requestUID(); 2).请求读取卡片上块的数据:如读取卡片数据块2上的数据,块访问密码为6个0xff,密钥模式为0x60则 int[] keyBuf = {0xff,0xff,0xff,0xff,0xff,0xff}; mRfidManager.requestRead(0x02, 0x60, keyBuf); 3). 请求写数据到卡片上的块:如写16个字节到数据块2,块访问密码为6个0xff,密钥模式为0x60 int[] keyBuf = {0xff,0xff,0xff,0xff,0xff,0xff}; int[] dataBuf = {0x38 , 0x17 ,0x38 , 0x17 ,0x38 , 0x17 ,0x38 ,             0x17 ,0x38 , 0x17 ,0x38 , 0x17 ,0x38 , 0x17 ,0x38 , 0x17}; mRfidManager.requestWrite(0x02,0x60,keyBuf, dataBuf); 4. RfidManager关闭回收 mRfidManager.recyle(); (B) 扫描: 1. 获取ScanManager实例 mScanManager=ScanManager.getInstance("/dev/ttyMT1", SerialConstant.SERIAL_CONSTANT_BAUDRATE_9600); 2. 设置ScanManager数据监听器 mScanManager.setOnScanDataListener(new ScanDataListener() { @Override public void onError(int error) { } @Override public void onDataReceived(byte[] buffer) {        } }); 3. 触发扫描 mScanManager.requestScan(); 4. ScanManager关闭回收操作 mScanManager.recyle(); 三.备注 1. Mifare 1卡片的存储容量为8192 BIT X 1位字长(即1K X 8位字长),采用EEPROM作为存储介质,整个结构划分为16个扇区,编为扇区0 ~~ 15。每个扇区有4个块(Block),分别为块0,块1,块2和块3。每个块有16个字节。一个扇区共有 16 Byte X 4 = 64 Byte 2. 扇区0的块0是特殊的,是厂商代码,已固化,不可改写。其中:第0~4个字节为卡片的序列号,第5个字节为序列号的校验码;第6个字节为卡片的容量“SIZE”字节;第7,8个字节为卡片的类型号字节,即Tagtype字节;其他字节由厂商另加定义 4. Key_Mode : 0x60 --KeyA            0x61 --KeyB 5.块地址: 0X00-----0X3F,如扇区0的4个块的地址分别是0x00,0x01,0x02,0x03 扇区1的4个块的地址分别是0x04,0x05,0x06,0x07 6. 擦除块就是把16个0x00写到块里 7. 每种卡的块的数量不同,S50为0~63 ,S70为0~255 8. 错误列表 Status code         Meaning 0xF1        LRC error 0xF2        NO THIS CMD 0xF3        SET_ERRO 0xF4        PARA_ERRO 0xB1        NO_CARD 0xB2        ANTICOLL_ERROR 0xB3        SELECT_ERROR 0xB4        HALT_ERROR 0xB6        AUTH_ERROR 0xB7        READ_ERROR 0xB8        WRITE_ERROR 0xB9        VALUEOPER_ERROR 0xBA        VALUEBAK_ERROR 0xBC        RATS_ERROR 0xBE        TPCL_ERROR 0xD1        POWERUP_ERROR 0xD2        POWEROFF_ERROR 0xD3        APDU_ERRO 0xD4        PTS_ERRO 0xD5        NO_SLOT 0xD6        CHACK_ERRO 9. 扇区密码:每个扇区的第4块是用来存放当前扇区的密码,并且只能用来存放密码不能存放其它数据,修改密码跟写块操作时一样的,只不过16个字节的数据时有固定的格式的,6个字节密码A + 4个字节控制字 + 6个字节密码B ,一般卡用的密码模式是密码A ,控制字一定要遵守该块上的控制字,如果搞错控制字会写坏当前扇区。4个字节控制字(可以读该扇区的块3来获取),  6个字节密码B(可以读该扇区的块3来获取) 例子:读某个扇区的块3返回来的数据是:0,0, 0,0,0,0,  255,7,128,105  255,255,255,255,255,255  前6个0是密码A ,密码A是不能通过读卡读出来的,所以0不是密码A ;255,7,128,105 是4个字节的控制字,如果想修改该扇区的密码则把这4个控制字填到相应的位置,;255,255,255,255,255,255是密码B,修改密码是也把这6个字节填到相应的位置,比如我想改修改该扇区的密码为6个1,那16个字节的数据构成为:1,1,1,1,1,1  255,7,128,105  255,255,255,255,255,255。卡片出厂默认密码是6个255
/
本文档为【读卡扫描接口使用文档】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索