读卡扫描接口使用文档
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
历途读卡扫描接口(Version 1.0)
修订历史
日期版本说明作者2014-12-25 1.0 第一版,初稿吕贤鸿
一、接口说明:(具体请查看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: 扫描出错代码
二、接口使用说明:把读卡扫描接口\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
10.单RFID模块使用的串口号为:/dev/ttyMT0,波特率为9600
11.RFID+扫描机器使用的串口号为: /dev/ttyMT1,波特率为115200。