DownloadSingletonPkg.java
2.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
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》
* <p>
* 发送给SDK的指令结构如下
* <p>
* 字节 标识符 描述
* 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;
}
}