QueryOnlineStateResponse.java 5.03 KB
package com.sunvote.cmd.state;

import com.sunvote.cmd.BaseCmd;
import com.sunvote.cmd.ICmd;

/**
 * Created by Elvis on 2017/8/11.
 * Email:Eluis@psunsky.com
 * Description:
 * 模块应答:
 * 字节	标识符	描述
 * 1	REQUEST_CMD	0xF0 状态类指令应答
 * 2	CMD1	命令类型
 * 7 返回当前在线状态
 * 3	ONLINE	键盘是否在线
 * 1 在线
 * 2 离线
 * 4	IDMODE	基站的识别模式
 * 定义同信标变化通知里面的,APP可以不处理此信息
 * 5	CHAN	当前频点号
 * 6	RSSI	接收到基站的信号强度RSSI值,负数,越小表示信号越大
 * 7	TX	1表示刚才1秒内有提交数据过
 * 0 表示没有
 * 8	RX	1 表示刚才1秒内收到过基站的投票指令(特指投票中)
 * 0 表示没有
 * 9	BaseID	基站编号
 * 10,11	KEYID	当前键盘编号,高位在前(便于改编号时候app获得信息)
 * 12-17	KEYSN	6字节键盘SN
 */

public class QueryOnlineStateResponse extends StateBaseCmd {

    public final static byte CMD1 = 0x07 ;

    public static final int CMD_LENGTH = 17 ;

    public QueryOnlineStateResponse(){}

    public QueryOnlineStateResponse(QueryOnlineStateRequest request){
        parseCmd(request.toBytes());
        setCmd(RESPONSE_CMD);
    }
    /**
     * REQUEST_CMD	0xF0 状态类指令应答
     */
    private byte cmd = RESPONSE_CMD;

    /**
     * 命令类型
     * 7 返回当前在线状态
     */
    private byte cmd1 = 0x07 ;

    /**
     * ONLINE	键盘是否在线
     * 1 在线
     * 2 离线
     */
    private byte online;

    /**
     * IDMODE	基站的识别模式
     * 定义同信标变化通知里面的,APP可以不处理此信息
     */
    private byte idmode;

    /**
     * 当前频点号
     */
    private byte chan;

    /**
     * 接收到基站的信号强度RSSI值,负数,越小表示信号越大
     */
    private byte rssi;

    /**
     * TX	1表示刚才1秒内有提交数据过
     * 0 表示没有
     */
    private byte tx;

    /**
     * RX	1 表示刚才1秒内收到过基站的投票指令(特指投票中)
     * 0 表示没有
     */
    private byte rx;

    /**
     * BaseID	基站编号
     */
    private byte baseID;

    /**
     * KEYID	当前键盘编号,高位在前(便于改编号时候app获得信息)
     */
    private byte[] keyId = new byte[2];

    /**
     * KEYSN	6字节键盘SN
     */
    private byte[] keySn = new byte[6];

    public byte getCmd() {
        return cmd;
    }

    public void setCmd(byte cmd) {
        this.cmd = cmd;
    }

    public byte getCmd1() {
        return cmd1;
    }

    public void setCmd1(byte cmd1) {
        this.cmd1 = cmd1;
    }

    public byte getOnline() {
        return online;
    }

    public void setOnline(byte online) {
        this.online = online;
    }

    public byte getIdmode() {
        return idmode;
    }

    public void setIdmode(byte idmode) {
        this.idmode = idmode;
    }

    public byte getChan() {
        return chan;
    }

    public void setChan(byte chan) {
        this.chan = chan;
    }

    public byte getRssi() {
        return rssi;
    }

    public void setRssi(byte rssi) {
        this.rssi = rssi;
    }

    public byte getTx() {
        return tx;
    }

    public void setTx(byte tx) {
        this.tx = tx;
    }

    public byte getRx() {
        return rx;
    }

    public void setRx(byte rx) {
        this.rx = rx;
    }

    public byte getBaseID() {
        return baseID;
    }

    public void setBaseID(byte baseID) {
        this.baseID = baseID;
    }

    public byte[] getKeyId() {
        return keyId;
    }

    public void setKeyId(byte[] keyId) {
        this.keyId = keyId;
    }

    public byte[] getKeySn() {
        return keySn;
    }

    public void setKeySn(byte[] keySn) {
        this.keySn = keySn;
    }

    @Override
    public byte[] toBytes() {
        byte[] result = new byte[CMD_LENGTH];
        result[0] = cmd;
        result[1] = cmd1;
        result[2] = online;
        result[3] = idmode;
        result[4] = chan ;
        result[5] = rssi;
        result[6] = tx;
        result[7] = rx ;
        result[8] = baseID ;
        for(int i =0 ; i < 2;i++) {
            result[9+i] = keyId[i];
        }
        if(keySn != null) {
            for (int i = 0; i < 6; i++) {
                result[11 + i] = keySn[i];
            }
        }

        return result;
    }

    @Override
    public ICmd parseCmd(byte[] source, int start) {

        if(source != null && source.length > CMD_LENGTH + start){
            cmd = source[start + 0];
            cmd1 = source[start + 1];
            online = source[start + 2];
            idmode = source[start + 3];
            chan = source[start + 4] ;
            rssi = source[start + 5];
            tx = source[start + 6];
            rx  = source[start +7];
            baseID = source[start + 8];
            for(int i =0 ; i < 2;i++) {
                keyId[i] = source[start + 9+i];
            }
            for(int i=0;i<6;i++){
                keySn[i] = source[start + 11 + i];
            }
        }

        return this;
    }
}