ReadAndWriteVoterAllocation.java 3.48 KB
package com.sunvote.cmd.push;

import com.sunvote.cmd.ICmd;

import java.io.ByteArrayOutputStream;
import java.util.Arrays;

/**
 * Created by Elvis on 2017/8/23.
 * Email:Eluis@psunsky.com
 * 版权所有:长沙中天电子设计开发有限公司
 * Description:平板模块键盘投票功能模块
 * ReadAndWriteVoterAllocation
 *
 * 用于读取或修改表决器的基本参数,例如表决器编号。
 发送给表决器的指令结构如下:
 字节	标识符	描述
 1	KEYCMD	0x30 表决器下载单包类指令
 2-3	KEYID	表决器编号,或0x0000广播
 4	KCMD	1 读表决器配置
 2 写表决器配置
 5-6	NEWID	写表决器配置操作时候有效
 新表决器编号,2字节,高位在前
 7	OFFTIME	写表决器配置操作时候有效
 表决器自动关机时间,以分钟为单位,0xFF不自动关机
 某些型号不支持修改
 8	LOCKBASE	固定配对模式还是自由配对模式
 目前暂应用在教育系列
 1 固定配对 2自由配对(可搜寻基站)
 9	FIXCHAN	锁频模式
 0和 1自动锁频 2固定锁频
 10-24		参数无意义

 表决器回应表决器配置信息:
 字节	标识符	描述
 1	KEYCMD	0xB0 表决器遥控指令应答
 2-3	KEYID	表决器编号,2字节,高位在前
 4	KCMD	1 表决器配置信息
 5-6	KEYID	表决器编号
 7	OFFTIME	表决器自动关机时间
 8	LOCKBASE	固定配对模式还是自由配对模式
 9-24		参数无意义
 */
public class ReadAndWriteVoterAllocation extends DownloadSingletonPkg {

    private byte[] newid = new byte[2];

    private byte offtime;

    private byte lockbase;

    private byte fixchan;

    private byte[] datas = new byte[15];

    @Override
    public byte[] toBytes() {
        try {
            ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
            outputStream.write(getKeycmd());
            outputStream.write(getKeyid());
            outputStream.write(getKcmd());
            outputStream.write(getNewid());
            outputStream.write(getOfftime());
            outputStream.write(getLockbase());
            outputStream.write(getFixchan());
            outputStream.write(getDatas());
            return outputStream.toByteArray();
        }catch (Exception ex){
            return new byte[0];
        }
    }

    @Override
    public ICmd parseCmd(byte[] source, int start) {
        if(source != null && source.length >= start + CMD_LENGTH){
            setKeycmd(source[start+0]);
            setKeyid(Arrays.copyOfRange(source,start+1,start+3));
            setKcmd(source[start+3]);
            setNewid(Arrays.copyOfRange(source,start+4,start+6));
            setOfftime(source[start+6]);
            setLockbase(source[start+7]);
            setFixchan(source[8]);
            setDatas(Arrays.copyOfRange(source,start+9,start+24));
        }
        return this;
    }

    public byte[] getNewid() {
        return newid;
    }

    public void setNewid(byte[] newid) {
        this.newid = newid;
    }

    public byte getOfftime() {
        return offtime;
    }

    public void setOfftime(byte offtime) {
        this.offtime = offtime;
    }

    public byte getLockbase() {
        return lockbase;
    }

    public void setLockbase(byte lockbase) {
        this.lockbase = lockbase;
    }

    public byte getFixchan() {
        return fixchan;
    }

    public void setFixchan(byte fixchan) {
        this.fixchan = fixchan;
    }

    public void setDatas(byte[] datas) {
        this.datas = datas;
    }

    public byte[] getDatas() {
        return datas;
    }
}