RFIDWithUHF706

com.rscja.deviceapi

## Class RFIDWithUHF706

- java.lang.Object
- - com.rscja.deviceapi.RFIDWithUHF706

-     public class RFIDWithUHF706
      extends java.lang.Object

  UHF 706所模块操作类

  注意：
  1、使用前请确认您的机器已安装此模块。
  2、要正常使用模块需要在\libs\armeabi\目录放置libDeviceAPI.so文件
  3、在操作设备前需要调用 `init()` 打开设备，使用完后调用 `free()` 关闭设备

  Author:
    liuruifeng

- - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `int` | `Auth_CertificationChain(byte jlevel, byte jlevels, int jlen, byte[] jbuf)`
    `int` | `EventReport()` 停止读
    `boolean` | `free()` 关闭UHF模块
    `byte[]` | `getAccess()` 获取权限表
    `static RFIDWithUHF706` | `getInstance()` 获取UHF操作实例
    `byte[]` | `getPara(int type)` 获取参数设置
    `long` | `getRTC()` 获取RTC时间
    `boolean` | `init()` 初始化UHF模块
    `boolean` | `isPowerOn()` 判断设备是否上电 Judge the device is powered on or not.
    `byte[]` | `readInfo()` 安全模块主动向设备上传识读信息
    `byte[]` | `requestRandom()` 向安全模块请求随机数
    `int` | `requsetReadPart(byte speed, byte des, byte flag, byte partnum, byte ptr, byte len)` 读分区请求
    `int` | `requsetWritePart(byte[] tid, byte num, byte startaddr, byte[] buf)` 写分区请求
    `int` | `sendActiveFile(byte transmode, byte[] deviceid, byte[] reverse, byte[] transbuf)` 向安全模块发送激活文件
    `int` | `sendAuthData(byte[] hrandom, byte[] srandom, byte[] devid, byte[] reserve, byte[] signature, byte[] certbuf)` 向安全模块发送认证数据
    `byte[]` | `sendUserInfo(byte[] province, byte[] city, byte[] jw, byte[] usage, byte[] type1, byte[] com_name, byte[] people, byte[] tel1, byte[] tel2, byte[] email, byte[] data, byte[] ps)` 向安全模块发送 用户信息数据
    `int` | `setFrequency(int freq)`
    `int` | `SetInventorySper(int flag)` 开始读 flag：0 表示定频 1：表跳频
    `int` | `setPara(int type, byte[] data)` 设置参数
    `int` | `setPower(byte[] buf)` 两个字节长度的功率
    `int` | `setRTC(long time)` 设置RTC时间
    `int` | `SetTestMode()` 设置为测试模式
    `int` | `setWorkMode(int nums, byte[] modebuf)` 设置安全模块的工作模式
    `byte[]` | `TransBuf(byte oper, byte[] buf)` 数据转发透传
    `byte[]` | `TransData(byte[] tbuf, int tlen, byte flag)`
    `int` | `writeSpecialPart(byte[] buf)` 专用指定标签写分区

    - ### Methods inherited from class java.lang.Object

      `equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Method Detail

    - #### getInstance

          public static RFIDWithUHF706 getInstance()
                                            throws ConfigurationException

      获取UHF操作实例
      Returns:
        UHF操作实例
      Throws:
        `ConfigurationException` - 配置错误异常

    - #### init

          public boolean init()

      初始化UHF模块

    - #### free

          public boolean free()

      关闭UHF模块
      Returns:
        true成功，false失败

    - #### setRTC

          public int setRTC(long time)

      设置RTC时间
      Parameters:
        `time` - 1970年 至今的毫秒数
      Returns:
        0为成功，非0为失败

    - #### getRTC

          public long getRTC()

      获取RTC时间
      Returns:
        1970年 至今的毫秒数，失败返回-1

    - #### setPara

          public int setPara(int type,
                             byte[] data)

      设置参数
      Parameters:
        `type` - 参数类型
        `data` - 参数内容
      Returns:
        0为成功，非0为失败

    - #### getPara

          public byte[] getPara(int type)

      获取参数设置
      Parameters:
        `type` - 参数类型
      Returns:
        参数内容

    - #### getAccess

          public byte[] getAccess()

      获取权限表
      Returns:
        返回12字节 权限表 索引 0 :表示读上半区的权限 索引 1 :表示读下半区的权限 索引 2 :表示写上半区的权限 索引 3 :表示写下半区的权限 索引 4 :表示 上半区明码权限 索引 5 :表示 下半区明码权限 其他暂未说明

    - #### setWorkMode

          public int setWorkMode(int nums,
                                 byte[] modebuf)

      设置安全模块的工作模式
      Parameters:
        `nums` - 要设置的分区数量
        `modebuf` - 设置分区的数据，长度为 7*nums(根据分区的数量 改变长度， 每个分区 用7个字节表示) 索引0: 分区号 0-5 索引1: 0为读分区下半区，1为读分区上半区， 2为 读全区 ，3为分两次读全区 ，4为国标指令读全区（目前不支持国标读） 索引2: 高半字节 0:读取的数据是密文 1： 读取的数据是明文，低半字节 0：高速读取 1：非高速读取 索引3-索引4: 国标读时，表示读取字地址， 行标读时，置0 索引5-索引6: 国标读时， 表示读取字长度， 行标读时，置0
      Returns:
        0为成功，非0为失败

    - #### SetTestMode

          public int SetTestMode()

      设置为测试模式
      Returns:

    - #### requestRandom

          public byte[] requestRandom()

      向安全模块请求随机数
      Returns:
        随机数,null为失败

    - #### sendAuthData

          public int sendAuthData(byte[] hrandom,
                                  byte[] srandom,
                                  byte[] devid,
                                  byte[] reserve,
                                  byte[] signature,
                                  byte[] certbuf)

      向安全模块发送认证数据
      Parameters:
        `hrandom` - 主机PDA产生8字节随机数
        `srandom` - 安全模块返回的8字节随机数
        `devid` - 主机8字节设备序列号（2字节厂家代码+6字节序列号）
        `reserve` - 保留区 8字节
        `signature` - 对上面32字节数据的签名，签名数据共64字节
        `certbuf` - 密钥管理中心 颁发给厂家的 数字证书 X509 格式
      Returns:
        0：认证通过; 1：签名数据验签失败; 2：随机数验证失败; 3：安全模块未激活; 4：安全模块与其它设备激活过; 10：厂家代码错误

    - #### sendUserInfo

          public byte[] sendUserInfo(byte[] province,
                                     byte[] city,
                                     byte[] jw,
                                     byte[] usage,
                                     byte[] type1,
                                     byte[] com_name,
                                     byte[] people,
                                     byte[] tel1,
                                     byte[] tel2,
                                     byte[] email,
                                     byte[] data,
                                     byte[] ps)

      向安全模块发送 用户信息数据
      Parameters:
        `province` - 省，10字节
        `city` - 市，10字节
        `jw` - 经纬度，6字节
        `usage` - 用途，20字节
        `type1` - 设备型号，8字节
        `com_name` - 公司名称，40字节
        `people` - 联系人 ,10字节
        `tel1` - 联系电话1，5字节
        `tel2` - 联系电话2， 5字节
        `email` - 邮箱 ，30字节
        `data` - 登记日期，5字节
        `ps` - 备注，75字节
      Returns:
        索引0: 通讯状态 0成功 索引1: 8(安全模块待激活) 9（安全模块重新激活） 索引2-3: 需要转发的数据长度 索引4: 传输方式 1字节 索引5-12: 设备序列号 8字节 索引13-17: 保留 5 字节 索引18-441: 转发给密钥管理中心的数据 424字节 索引442- :由CA签发的 安全模块数字证书

    - #### sendActiveFile

          public int sendActiveFile(byte transmode,
                                    byte[] deviceid,
                                    byte[] reverse,
                                    byte[] transbuf)

      向安全模块发送激活文件
      Parameters:
        `transmode` - 传输方式 1字节
        `deviceid` - 设备序列号 8字节
        `reverse` - 保留 5字节
        `transbuf` - 转发给安全模块的数据 200字节
      Returns:
        0：激活成功；1：激活授权数据解密失败；2：验签失败； 3：序列号不一致

    - #### readInfo

          public byte[] readInfo()

      安全模块主动向设备上传识读信息
      Returns:
        byte[0]：返回的结果； 通讯状态 0成功; 索引1: 后续数据的长度 索引2: 操作标识，1:TID上报， 2：读分区数据上报 索引3: 错误类型 0：无错误， 1：TID校验错误 2：读数据类型错误 3：盘点结果通知帧错误 4：用户数据校验错误 索引4--: byte[1]：数据长度；从byte[2]开始计算 byte[2]：flag； 操作标识，1:TID上报， 2：读分区数据上报 索引 byte[3]：err； byte[4-n]：数据

    - #### requsetReadPart

          public int requsetReadPart(byte speed,
                                     byte des,
                                     byte flag,
                                     byte partnum,
                                     byte ptr,
                                     byte len)

      读分区请求
      Parameters:
        `speed` - 1:高速读 ，0：普通读
        `des` - 1:明文返回 ，0：密文返回
        `flag` - 分区访问指示 0：下半区，1:上半区 2：全区 3：国标指令
        `partnum` - 分区号
        `ptr` - 指针 2字节（只有国标指令时 使用）
        `len` - 长度 2字节（只有国标指令时 使用）
      Returns:
        0成功；非0失败

    - #### requsetWritePart

          public int requsetWritePart(byte[] tid,
                                      byte num,
                                      byte startaddr,
                                      byte[] buf)

      写分区请求
      Parameters:
        `tid` - 实际标签的TID 8字节
        `num` - 分区 1字节
        `startaddr` - 开始写入的地址
        `buf` - 数据
      Returns:
        0 写分区成功;1 权限不足;2 写分区失败;

    - #### writeSpecialPart

          public int writeSpecialPart(byte[] buf)

      专用指定标签写分区
      Parameters:
        `buf` - 数据
      Returns:
        0专用写指令配置成功;1 权限不足

    - #### TransBuf

          public byte[] TransBuf(byte oper,
                                 byte[] buf)

      数据转发透传
      Parameters:
        `oper` - 操作标识
        `jbuf` - 数据
      Returns:
        模块应答数据

    - #### setPower

          public int setPower(byte[] buf)

      两个字节长度的功率
      Returns:

    - #### SetInventorySper

          public int SetInventorySper(int flag)

      开始读 flag：0 表示定频 1：表跳频
      Returns:

    - #### EventReport

          public int EventReport()

      停止读
      Returns:

    - #### setFrequency

          public int setFrequency(int freq)

    - #### Auth_CertificationChain

          public int Auth_CertificationChain(byte jlevel,
                                             byte jlevels,
                                             int jlen,
                                             byte[] jbuf)

    - #### TransData

          public byte[] TransData(byte[] tbuf,
                                  int tlen,
                                  byte flag)

    - #### isPowerOn

          public boolean isPowerOn()

      判断设备是否上电
      Judge the device is powered on or not.
      Returns: