Blame view

C5/xpadprotocal/src/main/java/com/sunvote/cmd/upload/SingerUploadPkg.java 3.17 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
  package com.sunvote.cmd.upload;
  
  import com.sunvote.cmd.BaseCmd;
  import com.sunvote.cmd.ICmd;
  
  import java.io.ByteArrayOutputStream;
  
  /**
   * Created by Elvis on 2017/8/19.
   * Email:Eluis@psunsky.com
   * 版权所有:长沙中天电子设计开发有限公司
   * Description:平板模块键盘投票功能模块
   * 上传单包类主要是上传简单的投票结果、状态、申请等。一般情况下,表决器如果有数据要上传,在收到基站的基础信标或取包信标后,根据防冲突算法,在一定的时序里发送数据包。基站接收到完整数据包后,给出数据确认应答,让表决器知道数据已经上传,不再多次发送。可参考《表决系统通讯协议-应用文档-基础原理》。
   * 键盘使用序列号标识模式,请看3.6节。
   * 键盘使用键盘ID模式,上传单包的数据格式是:
   * 字节	标识符	描述
   * 1	ANSCMD	0x91
   * 2-3	KEYID	表决器编号,2字节,高位在前,1开始
   * 4	ANSTYPE	数据包类型
   * 0状态
   * 1 结果是单值(签到、表决、评议)
   * 2 单选多选
   * 3 评分
   * 4 排序
   * 5 填空
   * 6 按键游戏结果
   * <p>
   * 15 多包申请
   * 16 登录信息
   * <p>
   * 21 批次单值结果
   * 22 批次单选多选结果
   * 23 批次评分值结果
   * 24 批次排序结果
   * 25 批次填空结果
   * 26 另选他人结果
   * <p>
   * 33服务申请
   * 34主席控制
   * 35发言控制
   * <p>
   * 40 对码
   * 41 防丢
   * <p>
   * 5-24	ANSDATA	根据结果类型ANSTYPE的不同,有不同的数据长度和含义
   */
  public class SingerUploadPkg extends BaseCmd {
  
      public static final byte CMD = (byte) 0x91;
  
      private byte anscmd = CMD;
  
      private byte[] keyid = new byte[2];
  
      public byte getAnscmd() {
          return anscmd;
      }
  
      public void setAnscmd(byte anscmd) {
          this.anscmd = anscmd;
      }
  
      public byte[] getKeyid() {
          return keyid;
      }
  
      public void setKeyid(byte[] keyid) {
          this.keyid = keyid;
      }
  
      private byte anstype;
  
      private byte[] ansdata = new byte[20];
  
      public byte getAnstype() {
          return anstype;
      }
  
      public void setAnsdata(byte[] ansdata) {
          this.ansdata = ansdata;
      }
  
      public byte[] getAnsdata() {
          return ansdata;
      }
  
      public void setAnstype(byte anstype) {
          this.anstype = anstype;
      }
  
      @Override
      public byte[] toBytes() {
          ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
          try {
              outputStream.write(getAnscmd());
              outputStream.write(getKeyid());
              outputStream.write(getAnstype());
              outputStream.write(getAnsdata());
              return outputStream.toByteArray();
          }catch (Exception ex){
              return new byte[0];
          }
      }
  
      @Override
      public ICmd parseCmd(byte[] source, int start) {
          if (source != null && source.length > start + 24) {
              setAnscmd(source[start]);
              setKeyid(new byte[]{source[start + 1], source[start + 2]});
              setAnstype(source[start + 3]);
              for (int i = start + 4; i < start + 24; i++) {
                  ansdata[i - 4 - start] = source[i];
              }
          }
          return this;
      }
  }