SingerUploadPkg.java
3.17 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
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;
    }
}