package com.co.lane.card.jni;
/**
* C中参数类型变换(重点是传址的时候)
*
* @author Xuyd
*
*/
public class RFCard {
// class Card{
// public long cardNo = 0;
// }
//
// class TransferData{
// public String data = "";
// }
/**
* 初始化串口<br>
* e.g: int icdev; icdev = rfInit(0, 115200);//初始化串口1,波特率115200
*
* @param port
* 串口号,取值为0~3
* @param baud
* 为通讯波特率9600~115200
* @return 成功则返回串口标识符>0,失败返回负值
*/
public native int rfInit(int port, int baud);
/**
* 寻卡,能返回在工作区域内某张卡的序列号<br>
*
* @param icdev
* 通讯设备标识符
* @param mode
* 寻卡模式,寻卡模式分三种情况:IDLE模式、ALL模式及指定卡模式。<br>
* 0——表示IDLE模式,一次只对一张卡操作;<br>
* 1——表示ALL模式,一次可对多张卡操作;<br>
* 2——表示指定卡模式,只对序列号等于snr的卡操作(高级函数才有)<br>
* @param snr
* 需要返回的卡序列号
* @return 成功则返回 0
*/
public native int rfCard(int icdev, int mode, long[] snr);
/**
* 向读写器中装入十六进制密码<br>
* e.g: 装入1扇区的A密码|0套<br>
* if((rfLoadKeyHex(icdev, 0, 1,"a0a1a2a3a4a5"))!=0)
*
* @param icdev
* 通讯设备标识符
* @param mode
* 密码验证模式
* @param secNr
* 扇区号(0~15)
* @param nKey
* 写入读写器中的卡密码
* @return 成功则返回 0
*/
public native int rfLoadKeyHex(int icdev, int mode, int secNr, String nKey);
/**
* 验证某一扇区密码 <br>
* 卡上每个扇区有A密码和B密码,可根据实际需要确定是否使用B密码,这由该扇区的存取控制位来决定。<br>
* 此外,读写器中可以存放三套密码,可用rf_load_key()rf_load_key来分别装入,<br>
* 只有装入后才能使用验证密码函数验证。<br>
* 此函数也可用于验证ML卡,扇区号为0。
*
* e.g: int st; st = rfAuthentication(icdev,0,0);
*
* @param icdev
* 通讯设备标识符
* @param mode
* 密码验证模式
* @param secNr
* 要验证密码的扇区号(0~15)
* @return 成功则返回 0
*/
public native int rfAuthentication(int icdev, int mode, int secNr);
/**
* 向卡中写入数据<br>
* 对于M1卡,一次必须写一个块,为16个字节<br>
* 对于ML卡,一次必须写一页,为4个字节<br>
* 例:写第四块,int st; String data="1234567890123456"; st=rfWrite(icdev, 4,
* data);
*
* @param icdev
* 通讯设备标识符
* @param addr
* M1卡——块地址(0~63),ML卡——页地址(2~11)
* @param data
* 要写入的数据
* @return 成功则返回 0
*/
public native int rfWriteHex(int icdev, int addr, String data);
/**
* 验证指定数据是否写入卡中
*
* @param icdev
* 通讯设备标识符
* @param snr
* 卡序列号
* @param authmode
* 上一次写操作时使用的密码验证模式mode_auth
* @param addr
* M1卡——块地址(0~63),ML卡——页地址(2~11)
* @param strHex
* 要验证的数据
* @return 成功则返回 0
*/
public native int rfCheckWritehex(int icdev, long snr, int authmode, int addr, String strHex);
/**
* 读取卡中数据<br>
* 对于M1卡,一次读一个块的数据,为16个字节;<br>
* 对于ML卡,一次读出相同属性的两页(0和1,2和3,...),为8个字节<br>
* 例:String data=rfRead(icdev,4); //读第四块
*
* @param icdev
* 通讯设备标识符
* @param addr
* M1卡——块地址(0~63),ML卡——页地址(0~11)
*
* @return 要读取的数据
*/
public native String rfReadHex(int icdev, int addr);
/**
* 读取卡中数据<br>
* 对于M1卡,一次读一个块的数据,为16个字节;<br>
* 对于ML卡,一次读出相同属性的两页(0和1,2和3,...),为8个字节<br>
* 例:String data=rfRead(icdev,4); //读第四块
*
* @param icdev
* 通讯设备标识符
* @param addr
* M1卡——块地址(0~63),ML卡——页地址(0~11)
* @param dataHex
* 要读取的数据16进制字节数组
*
* @return 成功则返回 0
*/
public native int rfReadByteHex(int icdev, int addr, String[] dataHex);
/**
* 中止对该卡操作<br>
* 执行该命令后如果是ALL寻卡模式则必须重新寻卡才能够对该卡操作,<br>
* 如果是IDLE模式则必须把卡移开感应区再进来才能寻得这张卡。<br>
* e.g: rf_halt(icdev);
*
* @param icdev
* 通讯设备标识符
* @return 成功则返回 0
*/
public native int rfHalt(int icdev);
/**
* 蜂鸣<br>
*
* @param icdev
* 通讯设备标识符
* @param msec
* 蜂鸣时间,单位是10毫秒
* @return 成功则返回 0
*/
public native int rfBeep(int icdev, int msec);
/**
* 释放串口,在WIN32环境下icdev为串口的设备句柄,必须释放后才可以再次连接。<br>
* e.g: rfExit(icdev);
*
* @param icdev
* 通讯设备标识符
* @return 成功则返回 0
*/
public native int rfExit(int icdev);
}