package com.sunvote.cmd.push; import com.sunvote.cmd.BaseCmd; import com.sunvote.cmd.ICmd; /** * Created by Elvis on 2017/8/8. * Email:Eluis@psunsky.com * Description:下载单包 * 表决器下载单包类指令主要用于控制表决器执行某种操作,例如修改编号、遥控关机等。 * 前面已经讨论过,采用透传的模式,所以指令结构和表决器协议的下载单包一样,不再重新定义,具体参考《通讯协议-政务商务-表决器部分-V5.0.docx》 *
* 发送给SDK的指令结构如下 *
* 字节 标识符 描述 * 1 KEYCMD 0x30 表决器管理类指令 * 2-3 KEYID 表决器编号,2字节,高位在前 * 0x0000时候是广播,所有表决器都接收和处理 * 其他值是指定编号执行,编号和KEYID相同的才执行命令 * 4 KCMD 执行命令的类型 * 5-24 KCMDS 根据KCMD值不同,有不同含义 */ public class DownloadSingletonPkg extends PushBaseCmd { public static final byte CMD = 0x30 ; public static final int CMD_LENGTH = 24 ; public DownloadSingletonPkg(){} /** * 表决器管理类指令 */ private byte keycmd = CMD; /** * 表决器编号,2字节,高位在前 * 0x0000时候是广播,所有表决器都接收和处理 * 其他值是指定编号执行,编号和KEYID相同的才执行命令 */ private byte[] keyid = new byte[2]; /** * 执行命令的类型 */ private byte kcmd; /** * 根据KCMD值不同,有不同含义 */ private byte[] kcmds = new byte[20]; public byte getKeycmd() { return keycmd; } public void setKeycmd(byte keycmd) { this.keycmd = keycmd; } public byte[] getKeyid() { return keyid; } public void setKeyid(byte[] keyid) { this.keyid[0] = keyid[0]; this.keyid[1] = keyid[1]; } public byte getKcmd() { return kcmd; } public void setKcmd(byte kcmd) { this.kcmd = kcmd; } public byte[] getKcmds() { return kcmds; } public void setKcmds(byte[] kcmds) { this.kcmds = kcmds; } @Override public byte[] toBytes() { byte[] result = new byte[CMD_LENGTH]; result[0] = keycmd; for(int i= 0 ;i < 2 ; i++) { result[1+i] = keyid[i]; } result[3] = kcmd; for(int i= 0 ;i < 20 ; i++) { result[4+i] = kcmds[i]; } return result; } @Override public ICmd parseCmd(byte[] source, int start) { if(source != null && source.length >= start + CMD_LENGTH){ keycmd = source[start+0]; for(int i= 0 ;i < 2 ; i++) { keyid[i] = source[start + 1+ i]; } kcmd = source[start+3]; for(int i= 0 ;i < 20 ; i++) { kcmds[i] = source[start + 4+i]; } } return this; } }