Blame view

C5/xpadprotocal/src/main/java/com/sunvote/cmd/push/DownloadSingletonPkg.java 2.9 KB
fac86401   孙向锦   初始化C5 Vote
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;
      }
  }