Commit 9c35640df5a1c8748d1454bcafe384ddee261644
1 parent
4fcd0b08
V0.0.13
1、6.6.2.3.4 通用规则数据 调整数据位置,增加了一字节位域备用,
Showing
2 changed files
with
52 additions
and
41 deletions
readme.md
0 → 100644
通讯协议-教育新版-表决器部分.md
@@ -3100,7 +3100,7 @@ CMD 类型 | @@ -3100,7 +3100,7 @@ CMD 类型 | ||
3100 | ##### 6.6.2.3.2 通用题型数据 | 3100 | ##### 6.6.2.3.2 通用题型数据 |
3101 | | **字节** | **标识符** | **描述** | | 3101 | | **字节** | **标识符** | **描述** | |
3102 | | --- | --- | --- | | 3102 | | --- | --- | --- | |
3103 | -| 1 | CMD | 0x01,表示通用题型数据| | 3103 | +| 1 | CMD | 0x01,表示通用题型数据 | |
3104 | | 2 | LEN| 后续数据的总字节长度 ,高位在前 | | 3104 | | 2 | LEN| 后续数据的总字节长度 ,高位在前 | |
3105 | | 2 | Len_1 | 本单元的字节长度,高位在前 | | 3105 | | 2 | Len_1 | 本单元的字节长度,高位在前 | |
3106 | | Len_1 | TitleData | 题目文本字符串数据 | | 3106 | | Len_1 | TitleData | 题目文本字符串数据 | |
@@ -3120,8 +3120,8 @@ E:选项5\n | @@ -3120,8 +3120,8 @@ E:选项5\n | ||
3120 | 通用选项数据还是遵循表6.6.2.3-1结构,Data由若干个选项数据单元组成,具体见下表。 | 3120 | 通用选项数据还是遵循表6.6.2.3-1结构,Data由若干个选项数据单元组成,具体见下表。 |
3121 | | **字节** | **标识符** | **描述** | | 3121 | | **字节** | **标识符** | **描述** | |
3122 | | --- | --- | --- | | 3122 | | --- | --- | --- | |
3123 | -| 1 | CMD | 0x02,表示通用选项数据| | ||
3124 | -| 2 | LEN| 后续数据的总字节长度 ,高位在前| | 3123 | +| 1 | CMD | 0x02,表示通用选项数据 | |
3124 | +| 2 | LEN| 后续数据的总字节长度 ,高位在前 | | ||
3125 | | 2 | Len_1 | 本选项单元的字节长度,高位在前 | | 3125 | | 2 | Len_1 | 本选项单元的字节长度,高位在前 | |
3126 | | 1 | Number | 本单元选项数量 | | 3126 | | 1 | Number | 本单元选项数量 | |
3127 | | Len_1-1 | Option | 本单元选项文本字符串,有Number条字符串,每条字符串以\0结尾 | | 3127 | | Len_1-1 | Option | 本单元选项文本字符串,有Number条字符串,每条字符串以\0结尾 | |
@@ -3134,8 +3134,8 @@ E:选项5\n | @@ -3134,8 +3134,8 @@ E:选项5\n | ||
3134 | 通用规则数据还是遵循表6.6.2.3-1结构,Data由若干个规则数据单元组成,具体见下表。 | 3134 | 通用规则数据还是遵循表6.6.2.3-1结构,Data由若干个规则数据单元组成,具体见下表。 |
3135 | | **字节** | **标识符** | **描述** | | 3135 | | **字节** | **标识符** | **描述** | |
3136 | | --- | --- | --- | | 3136 | | --- | --- | --- | |
3137 | -| 1 | CMD | 0x03,表示通用规则数据| | ||
3138 | -| 2 | LEN | 后续数据的总字节长度 ,高位在前| | 3137 | +| 1 | CMD | 0x03,表示通用规则数据 | |
3138 | +| 2 | LEN | 后续数据的总字节长度 ,高位在前 | | ||
3139 | | 2 | Len_1 | 自定义规则数据字节长度,如选用通用规则数据则为0 | | 3139 | | 2 | Len_1 | 自定义规则数据字节长度,如选用通用规则数据则为0 | |
3140 | | Len_1 | Rule | 自定义规则文本字符串,有Number条字符串 | | 3140 | | Len_1 | Rule | 自定义规则文本字符串,有Number条字符串 | |
3141 | | ... | ... | ... | | 3141 | | ... | ... | ... | |
@@ -3147,38 +3147,42 @@ Rule: | @@ -3147,38 +3147,42 @@ Rule: | ||
3147 | 采用CMD+LEN+DATA 格式 ,基础规则1 | 3147 | 采用CMD+LEN+DATA 格式 ,基础规则1 |
3148 | | **字节** | **标识符** | **描述** | | 3148 | | **字节** | **标识符** | **描述** | |
3149 | | --- | --- | --- | | 3149 | | --- | --- | --- | |
3150 | -| 1 | CMD | 0x01,标准配置参数| | ||
3151 | -| 1 | LEN | 长度1字节| | ||
3152 | -| 1 | Mode | 输入模式<br>0 默认(单选选择)<br>1 纯数字组合 ,包含(上下键做负号与点号)<br>2 填空自由组合,键盘自己实现输入方式<br>3 多小题显示格式 <br>4 名单选举 | | ||
3153 | -| 1 | Maximum | 最大可供选择项目数,最大值为10| | ||
3154 | -| 1 | Maxoptions| 可选出数目,最小值是1,最大值不超出Maximum| | ||
3155 | -| 1 | ST1| BIT0 : 修改模式, 0 不允许修改,1 允许修改 <br>BIT1 : 保密模式,0 不保密,1 保密显示<br>BIT2 : 迫选,0 允许缺选,1 不允许缺选<br>BIT3 : 重复,0不限定,1单个选项只能选一次<br>BIT4 : 自动排序,0 保留输入顺序,1 选项自动排序<br>BIT5 :<br>BIT6 :<br>BIT7 :| | ||
3156 | -| 4 | 上限| 类型浮点| | ||
3157 | -| 4 | 下限| 类型浮点| | 3150 | +| 1 | CMD | 0x01,标准配置参数 | |
3151 | +| 1 | LEN | 长度1字节 | | ||
3152 | +| 1 | ST1 | BIT0 : 修改模式, 0 不允许修改,1 允许修改 <br>BIT1 : 保密模式,0 不保密,1 保密显示<br>BIT2 : 迫选,0 允许缺选,1 不允许缺选<br>BIT3 : 重复,0不限定,1单个选项只能选一次<br>BIT4 : 自动排序,0 保留输入顺序,1 选项自动排序<br>BIT5 :<br>BIT6 :<br>BIT7 :| | ||
3153 | +| 1 | ST2 | 备用控制位域 | | ||
3154 | +| 2 | MAX | 批次最大可选人数,高位在前 | | ||
3155 | +| 2 | MIN | 批次最小可选人数,高位在前 | | ||
3156 | +| 1 | Maximum | 选项数据,最大可供选择项目数,最大值为10 | | ||
3157 | +| 1 | Maxoptions | 选项数据,可选出数目,最小值是1,最大值不超出Maximum | | ||
3158 | +| 1 | Mode | 输入模式<br>0 默认(单选选择)<br>1 纯数字组合 ,包含(上下键做负号与点号)<br>2 填空自由组合,键盘自己实现输入方式<br>3 多小题显示格式 <br>4 批次表决、批次评议 <br>5 批次评分 <br>6 名单选举 <br>7 累计投票、股权投票 | | ||
3159 | +| 4 | 数字上限 | 类型浮点 | | ||
3160 | +| 4 | 数字下限 | 类型浮点 | | ||
3158 | 3161 | ||
3159 | 3162 | ||
3160 | 扩展规则2 | 3163 | 扩展规则2 |
3161 | | **字节** | **标识符** | **描述** | | 3164 | | **字节** | **标识符** | **描述** | |
3162 | | --- | --- | --- | | 3165 | | --- | --- | --- | |
3163 | -| 1 | CMD | 0x02,分段式数字选举配置参数| | ||
3164 | -| 1 | LEN | 长度1字节| | ||
3165 | -| 1 | ST1| BIT0 : 修改模式, 0 不允许修改,1 允许修改 <br>BIT1 : 保密模式,0 不保密,1 保密显示<br>BIT2 : 迫选,0 允许缺选,1 不允许缺选<br>BIT3 : 重复,0不限定,1单个选项只能选一次<br>BIT4 : 自动排序,0 保留输入顺序,1 选项自动排序<br>BIT5 :<br>BIT6 :<br>BIT7 :| | 3166 | +| 1 | CMD | 0x02,分段式数字选举配置参数 | |
3167 | +| 1 | LEN | 长度1字节 | | ||
3168 | +| 1 | ST1 | BIT0 : 修改模式, 0 不允许修改,1 允许修改 <br>BIT1 : 保密模式,0 不保密,1 保密显示<br>BIT2 : 迫选,0 允许缺选,1 不允许缺选<br>BIT3 : 重复,0不限定,1单个选项只能选一次<br>BIT4 : 自动排序,0 保留输入顺序,1 选项自动排序<br>BIT5 :<br>BIT6 :<br>BIT7 :| | ||
3169 | +| 1 | ST2 | 备用控制位域 | | ||
3166 | | 2 | MAX | 最大可选人数,高位在前 | | 3170 | | 2 | MAX | 最大可选人数,高位在前 | |
3167 | | 2 | MIN | 最小可选人数,高位在前 | | 3171 | | 2 | MIN | 最小可选人数,高位在前 | |
3168 | | 1 | RETAIN_NUM | 保留数字个数,表示后续有多少个保留数字,一般每个保留数字对应某个特殊功能,(如777表示弃权,999表示后面全空不填),不能用作一般的数字选举序号 | | 3172 | | 1 | RETAIN_NUM | 保留数字个数,表示后续有多少个保留数字,一般每个保留数字对应某个特殊功能,(如777表示弃权,999表示后面全空不填),不能用作一般的数字选举序号 | |
3169 | -| 2 | RETAIN_1| 保留数字1,高位在前 | | ||
3170 | -| ... | ...| ... | | ||
3171 | -| 2 | RETAIN_n| 保留数字n,高位在前 | | 3173 | +| 2 | RETAIN_1 | 保留数字1,高位在前 | |
3174 | +| ... | ... | ... | | ||
3175 | +| 2 | RETAIN_n | 保留数字n,高位在前 | | ||
3172 | | 1 | RANGE_NUM | 数字范围个数,表示后续有多少个start_end数据对,高位在前 | | 3176 | | 1 | RANGE_NUM | 数字范围个数,表示后续有多少个start_end数据对,高位在前 | |
3173 | -| 2 | RANGE1_START| 数字范围1 起始数字,高位在前 | | ||
3174 | -| 2 | RANGE1_END| 数字范围1 结束数字,高位在前 | | ||
3175 | -| 2 | RANGE2_START| 数字范围2 起始数字,高位在前 | | ||
3176 | -| 2 | RANGE2_END| 数字范围2 结束数字,高位在前 | | ||
3177 | -| 2 | RANGE3_START| 数字范围3 起始数字,高位在前 | | ||
3178 | -| 2 | RANGE3_END| 数字范围3 结束数字,高位在前 | | ||
3179 | -| ... | ...| ... | | ||
3180 | -| 2 | RANGEn_START| 数字范围n 起始数字,高位在前 | | ||
3181 | -| 2 | RANGEn_END| 数字范围n 起始数字,高位在前 | | 3177 | +| 2 | RANGE1_START | 数字范围1 起始数字,高位在前 | |
3178 | +| 2 | RANGE1_END | 数字范围1 结束数字,高位在前 | | ||
3179 | +| 2 | RANGE2_START | 数字范围2 起始数字,高位在前 | | ||
3180 | +| 2 | RANGE2_END | 数字范围2 结束数字,高位在前 | | ||
3181 | +| 2 | RANGE3_START | 数字范围3 起始数字,高位在前 | | ||
3182 | +| 2 | RANGE3_END | 数字范围3 结束数字,高位在前 | | ||
3183 | +| ... | ... | ... | | ||
3184 | +| 2 | RANGEn_START | 数字范围n 起始数字,高位在前 | | ||
3185 | +| 2 | RANGEn_END | 数字范围n 起始数字,高位在前 | | ||
3182 | 3186 | ||
3183 | 3187 | ||
3184 | ##### 6.6.2.3.6 通用控制权限名单 | 3188 | ##### 6.6.2.3.6 通用控制权限名单 |
@@ -3291,23 +3295,23 @@ Rule: | @@ -3291,23 +3295,23 @@ Rule: | ||
3291 |   对接收方,由于有两个Key,一种方案是先LinkKey解密后判断是否正确,不正确后用PublicKey解密,但必须都和通讯协议相关才能知道是否秘钥对。第2种方案是约定特殊状态,特殊状态下才用PublicKey解密,例如配对模式、离线后在广播频点等。我们采用第2种方式。 | 3295 |   对接收方,由于有两个Key,一种方案是先LinkKey解密后判断是否正确,不正确后用PublicKey解密,但必须都和通讯协议相关才能知道是否秘钥对。第2种方案是约定特殊状态,特殊状态下才用PublicKey解密,例如配对模式、离线后在广播频点等。我们采用第2种方式。 |
3292 |   秘钥的生成方法,根据随机数、硬件序列号等相关生成,具体看最后代码。 | 3296 |   秘钥的生成方法,根据随机数、硬件序列号等相关生成,具体看最后代码。 |
3293 |   秘钥包括公钥,在硬件上不能明文储存,避免破解。 | 3297 |   秘钥包括公钥,在硬件上不能明文储存,避免破解。 |
3294 | -###8.1.3 配对设计 | 3298 | +### 8.1.3 配对设计 |
3295 |   平常基站在广播频点,用公钥加密,广播原来的连接信息。键盘在广播频点接收,自动换公钥解密,所以所有基站的连接信息都能获取,所以键盘能按老体系跑起来。 | 3299 |   平常基站在广播频点,用公钥加密,广播原来的连接信息。键盘在广播频点接收,自动换公钥解密,所以所有基站的连接信息都能获取,所以键盘能按老体系跑起来。 |
3296 |   基站进入配对后,在广播频点发连接信息,外还发送特殊的私钥传输信息。 | 3300 |   基站进入配对后,在广播频点发连接信息,外还发送特殊的私钥传输信息。 |
3297 |   键盘手动操作进入都配对状态后,在广播频点监听连接,获取ATC码和频点、私钥后,然后切换到主频点,提交配对信息并收到确认,配对成功。如果是有组网过程的,先入网,再提交配对信息。 | 3301 |   键盘手动操作进入都配对状态后,在广播频点监听连接,获取ATC码和频点、私钥后,然后切换到主频点,提交配对信息并收到确认,配对成功。如果是有组网过程的,先入网,再提交配对信息。 |
3298 | -###8.1.4 免配对 | 3302 | +### 8.1.4 免配对 |
3299 |   工厂测试需要免配对,客户应用中快速更新秘钥,也需要免配对过程。 | 3303 |   工厂测试需要免配对,客户应用中快速更新秘钥,也需要免配对过程。 |
3300 | 基站进入免配对状态后,LinkKey暂时采用PublicKey,同时广播频点的连接信息,标注自己是免配对的。ATC码也改成免配对ATC码。 | 3304 | 基站进入免配对状态后,LinkKey暂时采用PublicKey,同时广播频点的连接信息,标注自己是免配对的。ATC码也改成免配对ATC码。 |
3301 |   键盘离线后,在广播频点用PublicKey监听,(可以加1秒收不到原先基站的连接信息后),听到基站连接信息并且是免配对的,也进入免配对模式,临时改用新的ATC码,LinkKey用PublicKey。 | 3305 |   键盘离线后,在广播频点用PublicKey监听,(可以加1秒收不到原先基站的连接信息后),听到基站连接信息并且是免配对的,也进入免配对模式,临时改用新的ATC码,LinkKey用PublicKey。 |
3302 | -###8.1.5 白名单 | 3306 | +### 8.1.5 白名单 |
3303 |   白名单键盘和基站,都在广播频点用PublicKey加密通讯。键盘提出申请后,如果有合适基站,基站发应答,应答里面要包含现在通讯的LinkKey、ATC码、频点。 | 3307 |   白名单键盘和基站,都在广播频点用PublicKey加密通讯。键盘提出申请后,如果有合适基站,基站发应答,应答里面要包含现在通讯的LinkKey、ATC码、频点。 |
3304 | -##8.2 传输层设计 | ||
3305 | -###8.2.1 防非法拷贝指令 | 3308 | +## 8.2 传输层设计 |
3309 | +### 8.2.1 防非法拷贝指令 | ||
3306 |   如果黑客用设备,在空中拷贝了一条指令,虽然是加密的密文,但如果黑客重发这条指令,基站和键盘端用LinkKey解密后,指令是正确的,就会错误执行。 | 3310 |   如果黑客用设备,在空中拷贝了一条指令,虽然是加密的密文,但如果黑客重发这条指令,基站和键盘端用LinkKey解密后,指令是正确的,就会错误执行。 |
3307 |   一般用指令中添加带时间特性的滚动码解决这个问题。接收到指令后,先判断滚动码是否合理,不合理,认为是非法指令。 | 3311 |   一般用指令中添加带时间特性的滚动码解决这个问题。接收到指令后,先判断滚动码是否合理,不合理,认为是非法指令。 |
3308 |   我们采用简单的2字节滚动码方案,首先,要求键盘提交的信息,滚动码和基站的滚动码相同(或在一定的范围,根据实际调试数据决定),基站才认为键盘提交信息是ok的。同时,基站发送的滚动码,是按一定时间依次递增的,这样,超过一定时间的滚动码,键盘不认,解决黑客重发一条指令的问题。 | 3312 |   我们采用简单的2字节滚动码方案,首先,要求键盘提交的信息,滚动码和基站的滚动码相同(或在一定的范围,根据实际调试数据决定),基站才认为键盘提交信息是ok的。同时,基站发送的滚动码,是按一定时间依次递增的,这样,超过一定时间的滚动码,键盘不认,解决黑客重发一条指令的问题。 |
3309 |   这个滚动码暂时定义为TimeCode,暂时0-32767之间变化,高位1做备用。基站变化间隔暂定每次发包都递增1。 | 3313 |   这个滚动码暂时定义为TimeCode,暂时0-32767之间变化,高位1做备用。基站变化间隔暂定每次发包都递增1。 |
3310 | -###8.2.2 单包 | 3314 | +### 8.2.2 单包 |
3311 |   添加TimeCode后,就占用了平常无线包32字节的空间,所以要考量原有协议体系,单包、多包怎么适配,包括多包上传、多包透传下载。 | 3315 |   添加TimeCode后,就占用了平常无线包32字节的空间,所以要考量原有协议体系,单包、多包怎么适配,包括多包上传、多包透传下载。 |
3312 |   原有协议,是4字节ATC码,加28字节的协议指令,而且28字节基本都有用全,如果少2字节,改动比较麻烦。 | 3316 |   原有协议,是4字节ATC码,加28字节的协议指令,而且28字节基本都有用全,如果少2字节,改动比较麻烦。 |
3313 |   解决方案是只用2字节的ATC码。因为加密体系,还有32字节的秘钥,这个秘钥就相当于ATC码了。 | 3317 |   解决方案是只用2字节的ATC码。因为加密体系,还有32字节的秘钥,这个秘钥就相当于ATC码了。 |
@@ -3315,7 +3319,7 @@ Rule: | @@ -3315,7 +3319,7 @@ Rule: | ||
3315 | TimeCode(2B)+ATC(2B)+指令(28字节)=32字节。 | 3319 | TimeCode(2B)+ATC(2B)+指令(28字节)=32字节。 |
3316 | 相当于: | 3320 | 相当于: |
3317 |  | 3321 |  |
3318 | -###8.2.3 多包 | 3322 | +### 8.2.3 多包 |
3319 |   多包,就是超过30字节后怎么传输,主要适配原先的多包透传下载、S6的快速设置。 | 3323 |   多包,就是超过30字节后怎么传输,主要适配原先的多包透传下载、S6的快速设置。 |
3320 | 方案1:【暂采用方案1】 | 3324 | 方案1:【暂采用方案1】 |
3321 |   传输层对超过30字节的数据,自动分割成多个30字节片段,连续发送。例如,32字节,就分成2包发送,每包前面都是2字节的TimeCode。 | 3325 |   传输层对超过30字节的数据,自动分割成多个30字节片段,连续发送。例如,32字节,就分成2包发送,每包前面都是2字节的TimeCode。 |
@@ -3326,14 +3330,14 @@ TimeCode(2B)+ATC(2B)+指令(28字节)=32字节。 | @@ -3326,14 +3330,14 @@ TimeCode(2B)+ATC(2B)+指令(28字节)=32字节。 | ||
3326 |   第1包是有特定格式的,携带后面包数,第1包后面都是32字节,不带TimeCode和ATC。 | 3330 |   第1包是有特定格式的,携带后面包数,第1包后面都是32字节,不带TimeCode和ATC。 |
3327 |   优点,某些情况下比方案1少传输1包,应用层不需了解多包是怎么实现的,例如对应用层而言,接收到的多包数据都是经过crc效验了的正确数据。 | 3331 |   优点,某些情况下比方案1少传输1包,应用层不需了解多包是怎么实现的,例如对应用层而言,接收到的多包数据都是经过crc效验了的正确数据。 |
3328 |   缺点,传输层编码和解码复杂一点,还有一些约定的限制,例如一次不超过1024字节,应用层发送需要指定包号。同时协议确定了就不能改了,扩充性不如方案1。 | 3332 |   缺点,传输层编码和解码复杂一点,还有一些约定的限制,例如一次不超过1024字节,应用层发送需要指定包号。同时协议确定了就不能改了,扩充性不如方案1。 |
3329 | -##8.3 具体协议指令的变动 | ||
3330 | -###8.3.1 单包 | 3333 | +## 8.3 具体协议指令的变动 |
3334 | +### 8.3.1 单包 | ||
3331 |  | 3335 |  |
3332 | -###8.3.2 透传多包 | 3336 | +### 8.3.2 透传多包 |
3333 |  | 3337 |  |
3334 | -###8.3.3 快速设置 | 3338 | +### 8.3.3 快速设置 |
3335 |   接收程序,判断新的一包HEAD里面的CMD是0x37的时候,也做后继多包拼接。 | 3339 |   接收程序,判断新的一包HEAD里面的CMD是0x37的时候,也做后继多包拼接。 |
3336 | -###8.3.4 LinkKey信息包 | 3340 | +### 8.3.4 LinkKey信息包 |
3337 | CMD=0x52,基站端2个包连续发送。 | 3341 | CMD=0x52,基站端2个包连续发送。 |
3338 | 第1包 | 3342 | 第1包 |
3339 | | **字节** | **标识符** | **描述** | | 3343 | | **字节** | **标识符** | **描述** | |
@@ -3355,7 +3359,7 @@ CMD=0x52,基站端2个包连续发送。 | @@ -3355,7 +3359,7 @@ CMD=0x52,基站端2个包连续发送。 | ||
3355 | | 7-8 | KEYCRC | 32字节LinkKey的CRC16值| | 3359 | | 7-8 | KEYCRC | 32字节LinkKey的CRC16值| |
3356 | | 9 | PACKNO | 1,第2包 | | 3360 | | 9 | PACKNO | 1,第2包 | |
3357 | | 10-25 | LINKKEY | 后16字节的LinkKey值| | 3361 | | 10-25 | LINKKEY | 后16字节的LinkKey值| |
3358 | -###8.3.5 基站连接信息 | 3362 | +### 8.3.5 基站连接信息 |
3359 | 单包格式,信息如下: | 3363 | 单包格式,信息如下: |
3360 | 指令格式: | 3364 | 指令格式: |
3361 | | **字节** | **标识符** | **描述** | | 3365 | | **字节** | **标识符** | **描述** | |