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); }