Commit 095603e548f16c711489e0407ddf01951dd8c2bd

Authored by 李傲寒
2 parents 6478fde1 ab8c5f32

Merge branch 'master' of http://120.78.57.84/lee/Protocol

通讯协议-B200W-MQTT协议[内部].md
... ... @@ -13,9 +13,61 @@
13 13 background-color: yellow;
14 14 }
15 15 </style>
  16 +
  17 +<br>
  18 +<br>
  19 +<br>
  20 +
  21 +<div style="text-align: center;font-size: 70px;">
  22 +SunVote B200W <br>MQTT通讯协议
  23 +</div>
  24 +<br>
  25 +<br>
  26 +<br>
  27 +<br>
  28 +<div style="text-align: center;font-size: 30px;">
  29 +Ver 1.0.1
  30 +</div>
  31 +<br>
  32 +<br>
  33 +<br>
  34 +<br>
  35 +<br>
  36 +<br>
  37 +
  38 +<div style="text-align: center;font-size: 30px;">
  39 +长沙中天电子设计开发有限公司
  40 +</div>
  41 +
  42 +<br>
  43 +
  44 +<div style="text-align: center;font-size: 30px;">
  45 +二〇二四年十月
  46 +</div>
  47 +
  48 +<br>
  49 +<br>
  50 +<br>
  51 +<br>
  52 +
  53 +文件控制:
  54 +
  55 +文件名:SunVote B200W MQTT通讯协议
  56 +
  57 +起草人:刘琴
  58 +
  59 +最新版本作者: 刘琴
  60 +<br>
  61 +| 文档版本 | 日期 | 作者 | 版本说明 |
  62 +|---|---|---|---|
  63 +|1.0.1| 2024年10月22日|刘琴|1. 初始版|
  64 +
  65 +<br>
  66 +<br>
  67 +
16 68 [TOC]
17 69  
18   -# SunVote B200W_MQTT 接口协议
  70 +# SunVote B200W MQTT通讯协议
19 71  
20 72 # 功能说明
21 73  
... ... @@ -53,7 +105,7 @@
53 105 |fEvtXXX|指令事件 |调用对应指令后返回|
54 106  
55 107 ## 数据格式约定
56   -- 数据格式统一为**Json**格式,MQTT发送接收消息编码统一为**UTF-8**
  108 +- 数据格式统一为**Json**格式,发送接收消息编码统一为**UTF-8**
57 109 - Json通用格式如下:
58 110  
59 111 ```json
... ... @@ -115,6 +167,7 @@
115 167 ||设置刷卡配对状态|[setBsNfcLogin](#setbsnfclogin)|[fEvtBsNfcLogin](#fevtbsnfclogin)||
116 168 |组网设置 - 工作信道|获取基站工作信道|[getBsChannel](#getbschannel)|[fEvtBsChannel](#fevtbschannel)|
117 169 ||设置基站工作信道|[setBsChannel](#setbschannel)|[fEvtBsChannel](#fevtbschannel)||
  170 +||读取已被占用信道|[getBsRFIChannel](#getbsrfichannel)|[fEvtBsRFIChannel](#fevtbsrfichannel)||
118 171 |登录设置 - 登录名称|获取基站登录名称|[getBsSSID](#getbsssid)|[fEvtBsSSID](#fevtbsssid)|
119 172 ||设置基站登录名称|[setBsSSID](#setbsssid)|[fEvtBsSSID](#fevtbsssid)||
120 173 |登录设置 - 登录密码|获取基站登录密码|[getBsLoginPwd](#getbsloginpwd)|[fEvtBsLoginPwd](#fevtbsloginpwd)|
... ... @@ -190,7 +243,7 @@
190 243 |抢答题|启动抢答题答题|[startQAQuicker](#startqaquicker)|[sEvtStateCode](#sevtstatecode)<br>[fEvtQAQuicker](#fevtqaquicker)|
191 244 ||停止抢答题答题|[stopKpVote](#stopkpvote)|[sEvtStateCode](#sevtstatecode)|
192 245 |待机实时反馈|设置待机实时反馈状态|[setKpStbResponse](#setkpstbresponse)|[fEvtKpStbResponse](#fevtkpstbresponse)<br>[sEvtKpRtFeedback](#sevtkprtfeedback)<br>[sEvtKpHandUp](#sevtkphandup)|
193   -||设置待机实时反馈状态|[getKpStbResponse](#getkpstbresponse)|[fEvtKpStbResponse](#fevtkpstbresponse)|
  246 +||获取待机实时反馈状态|[getKpStbResponse](#getkpstbresponse)|[fEvtKpStbResponse](#fevtkpstbresponse)|
194 247 ### 在线测验
195 248 |功能归类|功能|API指令|指令事件|
196 249 |---|---|---|---|
... ... @@ -472,7 +525,7 @@
472 525 参见基站连接变化系统通知
473 526  
474 527 ##### fEvtBsOnlineState
475   -- **主题**: <span class="yellowFill">/basestation/mutilBase/receive</span>
  528 +- **主题**: <span class="yellowFill">/basestation/multiBase/receive</span>
476 529 - **功能描述**:基站在线返回基站型号和基站SN
477 530 - **参数说明**
478 531  
... ... @@ -878,6 +931,25 @@
878 931 }
879 932 }
880 933 ```
  934 +
  935 +##### getBsRFIChannel
  936 +- **主题**:/client/\${baseSN}/send
  937 +- **功能描述**:获取已被其他基站占用的信道
  938 +- **参数说明**
  939 +
  940 +|参数名|类型|限制|是否必填|说明|
  941 +|---|---|---|---|---|
  942 +|fun|string|-|是|指令名称|
  943 +|dataTag|string|-|否|数据包标识,可为空字符串|
  944 +
  945 +- **示例代码**
  946 +```json
  947 +{
  948 + "fun":"getBsRFIChannel",
  949 + "dataTag":"1"
  950 +}
  951 +```
  952 +
881 953 #### 事件
882 954 ##### fEvtBsNetworkMode
883 955 - **主题**: /basestation/\${baseSN}/receive
... ... @@ -946,6 +1018,39 @@
946 1018 }
947 1019 }
948 1020 ```
  1021 +
  1022 +##### fEvtBsRFIChannel
  1023 +- **主题**: /basestation/\${baseSN}/receive
  1024 +- **功能描述**:返回其他基站已占用的信道,频点冲突时,可以根据返回结果修改基站信道避开干扰
  1025 +- **参数说明**
  1026 +
  1027 +|参数名|类型|限制|非空|说明|
  1028 +|---|---|---|---|---|
  1029 +|fun|string|-|是|事件名称|
  1030 +|dataTag|string|-|否|数据包标识,可传空字符串|
  1031 +|data|object|-|是|传送参数的对象|
  1032 +|+value|string||是|其他基站已占用的信道,多个信道用英文","分隔,无占用信道返回0|
  1033 +
  1034 +- **示例代码**
  1035 +```json
  1036 +//信道1、2、14已被占用
  1037 +{
  1038 + "fun":"fEvtBsRFIChannel",
  1039 + "dataTag":"1",
  1040 + "data":{
  1041 + "value":"1,2,14"
  1042 + }
  1043 +}
  1044 +//无占用信道
  1045 +{
  1046 + "fun":"fEvtBsRFIChannel",
  1047 + "dataTag":"1",
  1048 + "data":{
  1049 + "value":"0"
  1050 + }
  1051 +}
  1052 +```
  1053 +
949 1054 ##### fEvtBsNfcLogin
950 1055 - **主题**: /basestation/\${baseSN}/receive
951 1056 - **功能描述**:返回基站是否允许NFC刷卡
... ... @@ -1037,7 +1142,7 @@
1037 1142 |fun|string|-|是|指令名称|
1038 1143 |dataTag|string|-|否|数据包标识,可为空字符串|
1039 1144 |data|object|-|是|传送参数的对象|
1040   -|+value|string||是|设置的基站登录密码,数字类型,为空代表无需密码登录,最长4位|
  1145 +|+value|string||是|设置的基站登录密码,数字类型,最长4位,为空或设为0代表无需密码登录|
1041 1146  
1042 1147 - **示例代码**
1043 1148 ```json
... ... @@ -1123,7 +1228,7 @@
1123 1228 |fun|string|-|是|事件名称|
1124 1229 |dataTag|string|-|否|数据包标识,可传空字符串|
1125 1230 |data|object|-|是|传送参数的对象|
1126   -|+value|string||是|基站登录密码|
  1231 +|+value|string||是|基站登录密码,返回值为0代表无需密码登录|
1127 1232  
1128 1233 - **示例代码**
1129 1234 ```json
... ... @@ -1134,6 +1239,15 @@
1134 1239 "value":"1234"
1135 1240 }
1136 1241 }
  1242 +
  1243 +//无需密码登录
  1244 +{
  1245 + "fun":"fEvtBsLoginPwd",
  1246 + "dataTag":"1",
  1247 + "data":{
  1248 + "value":"0"
  1249 + }
  1250 +}
1137 1251 ```
1138 1252 ##### fEvtBsLoginState
1139 1253 - **主题**: /basestation/\${baseSN}/receive
... ... @@ -1806,7 +1920,7 @@
1806 1920 |+port|int||是|端口,默认1883|
1807 1921 |+userName|string||否|连接服务器的用户名,可不设置|
1808 1922 |+password|string||否|连接服务器的密码,可不设置|
1809   -|+interval|int|>=60|否|基站连接服务器失败后重连的间隔时长,单位秒|
  1923 +|+interval|int|>=30|否|基站连接服务器失败后重连的间隔时长,单位秒|
1810 1924  
1811 1925 - **示例代码**
1812 1926 ```json
... ... @@ -1818,7 +1932,7 @@
1818 1932 "port":1883,
1819 1933 "userName":"",
1820 1934 "password":"",
1821   - "interval":60
  1935 + "interval":30
1822 1936 }
1823 1937 }
1824 1938 ```
... ... @@ -2083,7 +2197,7 @@
2083 2197 |dataTag|string|-|否|数据包标识,可为空字符串|
2084 2198 |data|array|-|是|传送参数的对象数组|
2085 2199 |++name|string||是|检测项名称:MCU、RF、FLASH、EEPROM|
2086   -|++state|int||是|检测结果<br>0-功能异常<br>1-功能正常|
  2200 +|++state|int||是|检测结果<br>0-功能正常<br>1-功能异常|
2087 2201  
2088 2202 - **示例代码**
2089 2203 ```json
... ... @@ -2093,19 +2207,19 @@
2093 2207 "data":[
2094 2208 {
2095 2209 "name":"MCU",
2096   - "state":1
  2210 + "state":0
2097 2211 },
2098 2212 {
2099 2213 "name":"RF",
2100   - "state":1
  2214 + "state":0
2101 2215 },
2102 2216 {
2103 2217 "name":"FLASH",
2104   - "state":1
  2218 + "state":0
2105 2219 },
2106 2220 {
2107 2221 "name":"EEPROM",
2108   - "state":1
  2222 + "state":0
2109 2223 }
2110 2224 ]
2111 2225 }
... ... @@ -2406,7 +2520,7 @@
2406 2520 |dataTag|string|-|否|数据包标识,可为空字符串|
2407 2521 |data|object|-|是|传送参数的对象|
2408 2522 |+keySn|string||是|设置键盘id的键盘SN|
2409   -|+keyId|int||是|键盘编号|
  2523 +|+state|string||是|设置是否成功<br>0-设置成功<br>1-设置失败|
2410 2524  
2411 2525 - **示例代码**
2412 2526 ```json
... ... @@ -2415,7 +2529,7 @@
2415 2529 "dataTag":"1",
2416 2530 "data":{
2417 2531 "keySn":"2024021011",
2418   - "keyId":11
  2532 + "state":"0"
2419 2533 }
2420 2534 }
2421 2535 ```
... ... @@ -3084,7 +3198,7 @@
3084 3198 "dataTag":"1",
3085 3199 "data": {
3086 3200 "keySn":"1479824643",
3087   - "state":"1"
  3201 + "state":"0"
3088 3202 }
3089 3203 }
3090 3204 ```
... ... @@ -3515,7 +3629,7 @@
3515 3629  
3516 3630 - **示例代码**
3517 3631 ```json
3518   -//启用举手反馈
  3632 +//获取实时反馈状态
3519 3633 {
3520 3634 "fun":"getKpStbResponse",
3521 3635 "dataTag":"1"
... ... @@ -3580,11 +3694,10 @@
3580 3694 |+examNo|int||是|0-9999<br>=0,新的测验<br>>0时,与上次启动卷号一致继续测验,不一致进入新的测验|
3581 3695 |+mode|int||是|显示模式<br>0-不显示开头<br>1-显示“Q”开头<br>2-显示“题”开头|
3582 3696 |+questions|array||是|题目详情|
3583   -|++symbol | string||是 | 题号前缀,分级标识为-,可为空,为空表示1级大题<br><font color="red">最多为三级题号,即最多可以设为x-x-</font>|
3584 3697 |++quesType | int||是| 题目类型<br>1:单选<br>2:多选(排序)<br>3:数字<br>4:判断 |
3585 3698 |++option |int||是 |选项数目<br> quesType = 1 有效。<br>quesType = 2 有效。<br>此项缺省时 默认4;<br>范围:1-10。|
3586   -|++startNo | int||是| 起始题号 |
3587   -|++count | int||是| 题目数量 |
  3699 +|++startNo | string||是| 起始题号,可以为数字+“-”,单级的题号数字范围1-255,如“1”,“1-1”,“1-1-1”,最多只能输入三级<br>mode=0 时有效,mode=1或2时键盘按顺序显示题号|
  3700 +|++count | int||是| 相同参数的连续题目数量, >0 <br>注意:总题数最多支持200题 |
3588 3701 |+simParams|object||否|内部模拟测试参数设置对象|
3589 3702 |++answer|array||是|预设提交的按键值<br>格式为"单选题答案,多选题答案;<br>数字题答案;判断题答案(1对2错)"<br>如["A","ABCD","10","1"]|
3590 3703  
... ... @@ -3597,10 +3710,10 @@
3597 3710 "dataTag":"1",
3598 3711 "data":{
3599 3712 "mode": 1,
3600   - "examNo": 1,
  3713 + "examNo": 0,
3601 3714 "questions": [{
3602 3715 "quesType": 1, //单选题
3603   - "startNo": 1, //题号从1开始
  3716 + "startNo": "1", //题号从1开始
3604 3717 "count":10 //连续10题
3605 3718 }],
3606 3719 "simParams":{
... ... @@ -3617,24 +3730,24 @@
3617 3730 "dataTag":"1",
3618 3731 "data":{
3619 3732 "mode": 0,
3620   - "examNo": 1,
  3733 + "examNo": 0,
3621 3734 //第1、2题单选题,第3、4题多选题,第5题数字,第6题判断,共6题
3622 3735 "questions": [{
3623 3736 "quesType": 1, //单选题
3624   - "startNo": 1, //题号从1开始
  3737 + "startNo": "1", //题号从1开始
3625 3738 "count":2 //连续2题
3626 3739 },{
3627 3740 "quesType": 2, //多选题
3628   - "startNo": 3, //题号从3开始
  3741 + "startNo": "3", //题号从3开始
3629 3742 "count":2, //连续2题
3630 3743 "option":5
3631 3744 },{
3632 3745 "quesType": 1, //数字题
3633   - "startNo": 5, //题号从5开始
  3746 + "startNo": "5", //题号从5开始
3634 3747 "count":1 //连续1题
3635 3748 },{
3636 3749 "quesType": 4, //判断题
3637   - "startNo": 6, //题号从6开始
  3750 + "startNo": "6", //题号从6开始
3638 3751 "count":1 //连续1题
3639 3752 }],
3640 3753 "simParams":{
... ... @@ -3651,28 +3764,24 @@
3651 3764 "dataTag":"1",
3652 3765 "data":{
3653 3766 "mode": 0,
3654   - "examNo": 1,
  3767 + "examNo": 0,
3655 3768 //第1-1、1-2题单选题,第2-1、2-2题多选题,第3-1题数字,第4-1题判断,共6题
3656   - "questions": [{
3657   - "symbol": "1-",
  3769 + "questions": [{
3658 3770 "quesType": 1, //单选题
3659   - "startNo": 1, //题号从1-1开始
  3771 + "startNo": "1-1", //题号从1-1开始
3660 3772 "count":2 //连续2题
3661 3773 },{
3662   - "symbol": "2-",
3663 3774 "quesType": 2, //多选题
3664   - "startNo": 1, //题号从2-1开始
  3775 + "startNo":"2-1", //题号从2-1开始
3665 3776 "count":2, //连续2题
3666 3777 "option":5
3667 3778 },{
3668   - "symbol": "3-",
3669 3779 "quesType": 3, //数字题
3670   - "startNo": 1, //题号从3-1开始
  3780 + "startNo":"3-1", //题号从3-1开始
3671 3781 "count":1 //连续1题
3672 3782 },{
3673   - "symbol": "4-",
3674 3783 "quesType": 4, //判断题
3675   - "startNo": 1, //题号从4-1开始
  3784 + "startNo": "4-1", //题号从4-1开始
3676 3785 "count":1 //连续1题
3677 3786 }],
3678 3787 "simParams":{
... ... @@ -3689,28 +3798,24 @@
3689 3798 "dataTag":"1",
3690 3799 "data":{
3691 3800 "mode": 0,
3692   - "examNo": 1,
  3801 + "examNo": 0,
3693 3802 //第1-1-1、1-1-2题单选题,第1-2-1、1-2-2题多选题,第2-1-1题数字,第3-1-1题判断,共6题
3694 3803 "questions": [{
3695   - "symbol": "1-1-",
3696 3804 "quesType": 1, //单选题
3697   - "startNo": 1, //题号从1-1-1开始
  3805 + "startNo": "1-1-1", //题号从1-1-1开始
3698 3806 "count":2 //连续2题
3699 3807 },{
3700   - "symbol": "1-2-",
3701 3808 "quesType": 2, //多选题
3702   - "startNo": 1, //题号从1-2-1开始
  3809 + "startNo": "1-2-1", //题号从1-2-1开始
3703 3810 "count":2, //连续2题
3704 3811 "option":5
3705 3812 },{
3706   - "symbol": "2-1-",
3707 3813 "quesType": 3, //数字题
3708   - "startNo": 1, //题号从2-1-1开始
  3814 + "startNo": "2-1-1", //题号从2-1-1开始
3709 3815 "count":1 //连续1题
3710 3816 },{
3711   - "symbol": "3-1-",
3712 3817 "quesType": 4, //判断题
3713   - "startNo": 1, //题号从3-1-1开始
  3818 + "startNo": "3-1-1", //题号从3-1-1开始
3714 3819 "count":1 //连续1题
3715 3820 }],
3716 3821 "simParams":{
... ... @@ -3727,23 +3832,23 @@
3727 3832 "dataTag":"1",
3728 3833 "data":{
3729 3834 "mode": 1,
3730   - "examNo": 1,
  3835 + "examNo": 0,
3731 3836 "questions": [{
3732 3837 "quesType": 1, //单选题
3733   - "startNo": 1, //题号从1开始
  3838 + "startNo": "1", //题号从1开始
3734 3839 "count":2 //连续2题
3735 3840 },{
3736 3841 "quesType": 2, //多选题
3737   - "startNo": 3, //题号从3开始
  3842 + "startNo": "3", //题号从3开始
3738 3843 "count":2, //连续2题
3739 3844 "option":5
3740 3845 },{
3741 3846 "quesType": 1, //数字题
3742   - "startNo": 5, //题号从5开始
  3847 + "startNo": "5", //题号从5开始
3743 3848 "count":1 //连续1题
3744 3849 },{
3745 3850 "quesType": 4, //判断题
3746   - "startNo": 6, //题号从6开始
  3851 + "startNo": "6", //题号从6开始
3747 3852 "count":1 //连续1题
3748 3853 }],
3749 3854 "simParams":{
... ... @@ -3760,23 +3865,23 @@
3760 3865 "dataTag":"1",
3761 3866 "data":{
3762 3867 "mode": 2,
3763   - "examNo": 1,
3764   - "questions": [{
  3868 + "examNo": 0,
  3869 + "questions": [{
3765 3870 "quesType": 1, //单选题
3766   - "startNo": 1, //题号从1开始
  3871 + "startNo": "1", //题号从1开始
3767 3872 "count":2 //连续2题
3768 3873 },{
3769 3874 "quesType": 2, //多选题
3770   - "startNo": 3, //题号从3开始
  3875 + "startNo": "3", //题号从3开始
3771 3876 "count":2, //连续2题
3772 3877 "option":5
3773 3878 },{
3774 3879 "quesType": 1, //数字题
3775   - "startNo": 5, //题号从5开始
  3880 + "startNo": "5", //题号从5开始
3776 3881 "count":1 //连续1题
3777 3882 },{
3778 3883 "quesType": 4, //判断题
3779   - "startNo": 6, //题号从6开始
  3884 + "startNo": "6", //题号从6开始
3780 3885 "count":1 //连续1题
3781 3886 }],
3782 3887 "simParams":{
... ... @@ -3931,11 +4036,10 @@
3931 4036 |+mode|int||是|显示模式<br>0-不显示开头<br>1-显示“Q”开头<br>2-显示“题”开头|
3932 4037 |+questions|array||是|题目详情|
3933 4038 |++subject | int||是 | 科目序号,1-9,对应键盘中内置的科目1-9<br>键盘答题时可选择科目切换答题|
3934   -|++symbol | string||是 | 题号前缀,分级标识为-,可为空,为空表示1级题目<br><font color="red">多科测验题目编号最多只能两级(即symbol可设置为空或x-),超出无效</font>|
3935 4039 |++quesType | int||是| 题目类型<br>1:单选<br>2:多选(排序)<br>3:数字<br>4:判断 |
3936 4040 |++option |int||是 |选项数目<br> quesType = 1 有效。<br>quesType = 2 有效。<br>此项缺省时 默认4;<br>范围:1-10。|
3937   -|++startNo | int||是| 起始题号 |
3938   -|++count | int||是| 题目数量 |
  4041 +|++startNo | string||是| 起始题号,可以为数字+“-”,单级的题号数字范围1-255,如“1”,“1-1”,最多支持两级题号<br>mode=0 时有效,mode=1或2时键盘按顺序显示题号|
  4042 +|++count | int||是| 相同参数的连续题目数量, >0 <br>注意:所有科目的总题数最多支持200题|
3939 4043 |+simParams|object||否|内部模拟测试参数设置对象|
3940 4044 |++answer|array||是|预设提交的按键值<br>格式为"单选题答案,多选题答案;<br>数字题答案;判断题答案(1对2错)"<br>如["A","ABCD","10","1"]|
3941 4045  
... ... @@ -3951,30 +4055,27 @@
3951 4055 "questions": [{
3952 4056 "subject":1, //科目1
3953 4057 //题号1-1 到1-10 共10题单选
3954   - "symbol": "1-",
3955 4058 "quesType": 1,
3956   - "startNo": 1,
  4059 + "startNo": "1-1",
3957 4060 "count":10
3958 4061 }, {
3959 4062 "subject":2, //科目2
3960 4063 //题号2-2和2-3共两题 多选题,5个选项
3961   - "symbol": "2-",
3962 4064 "quesType": 2,
3963 4065 "option": 5,
3964   - "startNo": 2,
  4066 + "startNo": "2-2",
3965 4067 "count":2
3966 4068 }, {
3967 4069 "subject":3, //科目3
3968 4070 //题号3-1和3-2共两道数字题
3969   - "symbol": "3-",
3970 4071 "quesType": 3,
3971   - "startNo": 1,
  4072 + "startNo": "3-1",
3972 4073 "count":2
3973 4074 }, {
3974 4075 "subject":1, //科目1
3975 4076 //题号4和5 ,判断题
3976 4077 "quesType": 4,
3977   - "startNo": 4,
  4078 + "startNo": "4",
3978 4079 "count":2
3979 4080 }],
3980 4081 "simParams":{
... ... @@ -3994,7 +4095,7 @@
3994 4095 "subject":1,
3995 4096 //Q1-Q20,单选题
3996 4097 "quesType": 1,
3997   - "startNo": 1,
  4098 + "startNo": "1",
3998 4099 "count":20
3999 4100 }],
4000 4101 "simParams":{
... ... @@ -4014,7 +4115,7 @@
4014 4115 "subject":1,
4015 4116 //题1-题20,单选题
4016 4117 "quesType": 1,
4017   - "startNo": 1,
  4118 + "startNo": "1",
4018 4119 "count":20
4019 4120 }],
4020 4121 "simParams":{
... ... @@ -4058,7 +4159,7 @@
4058 4159 #### 方法
4059 4160 ##### startKpScoreInput
4060 4161 - **主题**:/client/\${baseSN}/send
4061   -- **功能描述**:启动标准测验
  4162 +- **功能描述**:启动自主录分
4062 4163 - **参数说明**
4063 4164  
4064 4165 |参数名|类型|限制|是否必填|说明|
... ... @@ -4071,8 +4172,8 @@
4071 4172 |+questions|array||是|题目详情|
4072 4173 |++max |int||是|可输入的最大值,<=100|
4073 4174 |++digits|int||是|可输入的小数位数,范围0-2|
4074   -|++startNo | int||是| 起始题号|
4075   -|++count | int||是| 题目数量|
  4175 +|++startNo | string||是| 起始题号,暂只支持一级题号,范围1-255|
  4176 +|++count | int||是| 相同参数的题目数量,>0<br>注意:总题数最多支持200题|
4076 4177  
4077 4178 - **示例代码**
4078 4179 ```json
... ... @@ -4086,13 +4187,13 @@
4086 4187 //题号1 到 2 共2题,单题满分10分
4087 4188 "max":10,
4088 4189 "digits":1,
4089   - "startNo": 1,
  4190 + "startNo": "1",
4090 4191 "count":2
4091 4192 }, {
4092 4193 //题号3到6 共4道题,单题满分5
4093 4194 "max":5,
4094 4195 "digits":0,
4095   - "startNo": 3,
  4196 + "startNo": "3",
4096 4197 "count":4
4097 4198 }]
4098 4199 }
... ...
通讯协议-B200W-MQTT协议[外].md
... ... @@ -13,10 +13,61 @@
13 13 background-color: yellow;
14 14 }
15 15 </style>
16   -# SunVote B200W MQTT通讯协议
  16 +
  17 +<br>
  18 +<br>
  19 +<br>
  20 +
  21 +<div style="text-align: center;font-size: 70px;">
  22 +SunVote B200W <br>MQTT通讯协议
  23 +</div>
  24 +<br>
  25 +<br>
  26 +<br>
  27 +<br>
  28 +<div style="text-align: center;font-size: 30px;">
  29 +Ver 1.0.1
  30 +</div>
  31 +<br>
  32 +<br>
  33 +<br>
  34 +<br>
  35 +<br>
  36 +<br>
  37 +
  38 +<div style="text-align: center;font-size: 30px;">
  39 +长沙中天电子设计开发有限公司
  40 +</div>
  41 +
  42 +<br>
  43 +
  44 +<div style="text-align: center;font-size: 30px;">
  45 +二〇二四年十月
  46 +</div>
  47 +
  48 +<br>
  49 +<br>
  50 +<br>
  51 +<br>
  52 +
  53 +文件控制:
  54 +
  55 +文件名:SunVote B200W MQTT通讯协议
  56 +
  57 +起草人:刘琴
  58 +
  59 +最新版本作者: 刘琴
  60 +<br>
  61 +| 文档版本 | 日期 | 作者 | 版本说明 |
  62 +|---|---|---|---|
  63 +|1.0.1| 2024年10月22日|刘琴|1. 初始版|
  64 +
  65 +<br>
  66 +<br>
17 67  
18 68 [TOC]
19 69  
  70 +# SunVote B200W MQTT通讯协议
20 71 # 功能说明
21 72  
22 73 ## 主题说明
... ... @@ -47,8 +98,9 @@
47 98 |fEvtXXX|指令事件 |调用对应指令后返回|
48 99  
49 100 ## 数据格式约定
50   -- 数据格式统一为**Json**格式,MQTT发送接收消息编码统一为**UTF-8**
  101 +- 数据格式统一为**Json**格式,发送接收消息编码统一为**UTF-8**
51 102 - Json通用格式如下:
  103 +
52 104 ```json
53 105 {
54 106 "fun":"xxx",
... ... @@ -69,6 +121,23 @@
69 121  
70 122  
71 123 ## 功能速查一览表
  124 +### 公共方法
  125 +可以在多种业务中调用的通用方法
  126 +|功能归类|功能|API指令|指令/系统事件|
  127 +|---|---|---|---|
  128 +|停止投票|可停止通过调用startXXX启动的答题业务|[stopKpVote](#stopkpvote)|[sEvtStateCode](#sevtstatecode)||
  129 +
  130 +### 公共事件
  131 +无需调用指令,自动返回的事件
  132 +|功能归类|功能|API指令|指令/系统事件|
  133 +|---|---|---|---|
  134 +|公共事件|指令接收状态|-|[sEvtStateCode](#sevtstatecode)|
  135 +|公共事件|基站连接状态变化|-|[sEvtBsConnectState](#sevtbsconnectstate)|
  136 +|公共事件|基站信道冲突|-|[sEvtBsChannelConflict](#sevtbschannelconflict)|
  137 +|公共事件|键盘上线通知|-|[sEvtBsKpOnlineMsg](#sevtbskponlinemsg)|
  138 +|公共事件|键盘刷卡事件|-|[sEvtBsNfcResults](#sevtbsnfcresults)|
  139 +|公共事件|键盘待机实时按键反馈|-|[sEvtKpRtFeedback](#sevtkprtfeedback)|
  140 +
72 141 ### 基站管理
73 142 |功能归类|功能|API指令|指令/系统事件|
74 143 |---|---|---|---|
... ... @@ -79,15 +148,19 @@
79 148 |键盘上线通知|单个键盘上线系统通知|-|[sEvtBsKpOnlineMsg](#sevtbskponlinemsg)||
80 149 |识别设置 - 基站型号|读取基站型号|[getBsModel](#getbsmodel)|[fEvtBsModel](#fevtbsmodel)|
81 150 |识别设置 - 固件版本|获取基站固件版本|[getBsFWVersion](#getbsfwversion)|[fEvtBsFWVersion](#fevtbsfwversion)|
  151 +|组网设置 - 组网模式|获取基站组网模式|[getBsNetworkMode](#getbsnetworkmode)|[fEvtBsNetworkMode](#fevtbsnetworkmode)|
82 152 |组网设置 - 配对码|获取基站配对码|[getBsPairCode](#getbspaircode)|[fEvtBsPairCode](#fevtbspaircode)|
83 153 |组网设置 - 刷卡配对状态|获取刷卡配对状态|[getBsNfcLogin](#getbsnfclogin)|[fEvtBsNfcLogin](#fevtbsnfclogin)|
84 154 ||设置刷卡配对状态|[setBsNfcLogin](#setbsnfclogin)|[fEvtBsNfcLogin](#fevtbsnfclogin)||
85 155 |组网设置 - 工作信道|获取基站工作信道|[getBsChannel](#getbschannel)|[fEvtBsChannel](#fevtbschannel)|
86 156 ||设置基站工作信道|[setBsChannel](#setbschannel)|[fEvtBsChannel](#fevtbschannel)||
  157 +||读取已被占用信道|[getBsRFIChannel](#getbsrfichannel)|[fEvtBsRFIChannel](#fevtbsrfichannel)||
87 158 |登录设置 - 登录名称|获取基站登录名称|[getBsSSID](#getbsssid)|[fEvtBsSSID](#fevtbsssid)|
88 159 ||设置基站登录名称|[setBsSSID](#setbsssid)|[fEvtBsSSID](#fevtbsssid)||
89   -|键盘统一设置 - 键盘语言|获取键盘语言|[getBsKpLanguage](#getbskplanguage)|[fEvtBsKpLanguage](#fevtbskplanguage)|
90   -||设置键盘语言|[setBsKpLanguage](#setbskplanguage)|[fEvtBsKpLanguage](#fevtbskplanguage)||
  160 +|登录设置 - 登录密码|获取基站登录密码|[getBsLoginPwd](#getbsloginpwd)|[fEvtBsLoginPwd](#fevtbsloginpwd)|
  161 +||设置基站登录密码|[setBsLoginPwd](#setbsloginpwd)|[fEvtBsLoginPwd](#fevtbsloginpwd)||
  162 +|登录设置 - 基站登录状态|获取基站登录状态|[getBsLoginState](#getbsloginstate)|[fEvtBsLoginState](#fevtbsloginstate)|
  163 +||设置基站登录状态|[setBsLoginState](#setbsloginstate)|[fEvtBsLoginState](#fevtbsloginstate)||
91 164 |配对模式 - 快速配对|启动基站快速配对|[startBsFastPair](#startbsfastpair)|[sEvtStateCode](#sevtstatecode)<br>[sEvtBsKpOnlineMsg](#sevtbskponlinemsg)|
92 165 ||停止基站快速配对|[stopBsFastPair](#stopbsfastpair)|[sEvtStateCode](#sevtstatecode)|
93 166 |白名单模式 - 白名单管理|获取白名单|[getBsWhitelist](#getbswhitelist)|[fEvtBsWhitelist](#fevtbswhitelist)|
... ... @@ -95,6 +168,8 @@
95 168 ||清空白名单|[clearBsWhitelist](#clearbswhitelist)|[sEvtStateCode](#sevtstatecode)<br>[fEvtBsWhitelist](#fevtbswhitelist)|
96 169 ||增加白名单|[addBsWhitelist](#addbswhitelist)|[sEvtStateCode](#sevtstatecode)<br>[fEvtAddBsWhitelist](#fevtaddbswhitelist)<br>[fEvtBsWhitelist](#fevtbswhitelist)|
97 170 ||删除白名单|[delBsWhitelist](#delbswhitelist)|[sEvtStateCode](#sevtstatecode)<br>[fEvtDelBsWhitelist](#fevtdelbswhitelist)<br>[fEvtBsWhitelist](#fevtbswhitelist)|
  171 +|基站加密 - 软件狗|获取基站软件狗|[getBsSoftwareKey](#getbssoftwarekey)|[fEvtBsSoftwareKey](#fevtbssoftwarekey)|
  172 +||设置基站软件狗|[setBsSoftwareKey](#setbssoftwarekey)|[fEvtBsSoftwareKey](#fevtbssoftwarekey)|
98 173 |网络设置 - TCP/IP参数|获取TCP/IP参数|[getBsTcpipParams](#getbstcpipparams)|[fEvtBsTcpipParams](#fevtbstcpipparams)|
99 174 ||设置TCP/IP参数|[setBsTcpipParams](#setbstcpipparams)|[fEvtBsTcpipParams](#fevtbstcpipparams)||
100 175 |网络设置 - MQTT参数|获取MQTT参数|[getBsMqttParams](#getbsmqttparams)|[fEvtBsMqttParams](#fevtbsmqttparams)|
... ... @@ -115,7 +190,7 @@
115 190 |功能归类|功能|API指令|指令事件|
116 191 |---|---|---|---|
117 192 |同步签到|启动同步签到|[startKpSignIn](#startkpsignin)|[sEvtStateCode](#sevtstatecode)<br>[fEvtKpSignIn](#fevtkpsignin)|
118   -||停止同步签到|[stopKpSignIn](#stopkpsignin)|[sEvtStateCode](#sevtstatecode)|
  193 +||停止同步签到|[stopKpVote](#stopkpvote)|[sEvtStateCode](#sevtstatecode)|
119 194 |随时签到|启动随时签到|[rtStartKpSignIn](#rtstartkpsignin)|[sEvtStateCode](#sevtstatecode)<br>[fEvtKpSignIn](#fevtkpsignin)|
120 195 ||停止随时签到|[rtStopKpSignIn](#rtstopkpsignin)|[sEvtStateCode](#sevtstatecode)|
121 196 ||实时PIN签到授权|[rtSetKpLoginAllowed](#rtsetkploginallowed)|[sEvtStateCode](#sevtstatecode)<br>[fEvtKpLoginAllowed](#fevtkploginallowed)|
... ... @@ -123,19 +198,44 @@
123 198 |功能归类|功能|API指令|指令事件|
124 199 |---|---|---|---|
125 200 |判断题|启动判断题答题|[startQATrueFalse](#startqatruefalse)|[sEvtStateCode](#sevtstatecode)<br>[fEvtQATrueFalse](#fevtqatruefalse)|
126   -||停止判断题答题|[stopQATrueFalse](#stopqatruefalse)|[sEvtStateCode](#sevtstatecode)|
  201 +||停止判断题答题|[stopKpVote](#stopkpvote)|[sEvtStateCode](#sevtstatecode)|
127 202 |选择题|启动选择题答题|[startQAChoice](#startqachoice)|[sEvtStateCode](#sevtstatecode)<br>[fEvtQAChoice](#fevtqachoice)|
128   -||停止选择题答题|[stopQAChoice](#stopqachoice)|[sEvtStateCode](#sevtstatecode)|
  203 +||停止选择题答题|[stopKpVote](#stopkpvote)|[sEvtStateCode](#sevtstatecode)|
129 204 |数字题|启动数字题答题|[startQANum](#startqanum)|[sEvtStateCode](#sevtstatecode)<br>[fEvtQANum](#fevtqanum)|
130   -||停止数字题答题|[stopQANum](#stopqanum)|[sEvtStateCode](#sevtstatecode)|
  205 +||停止数字题答题|[stopKpVote](#stopkpvote)|[sEvtStateCode](#sevtstatecode)|
131 206 |抢答题|启动抢答题答题|[startQAQuicker](#startqaquicker)|[sEvtStateCode](#sevtstatecode)<br>[fEvtQAQuicker](#fevtqaquicker)|
132   -||停止抢答题答题|[stopQAQuicker](#stopqaquicker)|[sEvtStateCode](#sevtstatecode)|
  207 +||停止抢答题答题|[stopKpVote](#stopkpvote)|[sEvtStateCode](#sevtstatecode)|
  208 +|待机实时反馈|设置待机实时反馈状态|[setKpStbResponse](#setkpstbresponse)|[fEvtKpStbResponse](#fevtkpstbresponse)<br>[sEvtKpRtFeedback](#sevtkprtfeedback)|
  209 +||获取待机实时反馈状态|[getKpStbResponse](#getkpstbresponse)|[fEvtKpStbResponse](#fevtkpstbresponse)|
133 210 ### 在线测验
134 211 |功能归类|功能|API指令|指令事件|
135 212 |---|---|---|---|
136 213 |标准测验|启动标准测验|[startKpExam](#startkpexam)|[sEvtStateCode](#sevtstatecode)<br>[fEvtKpExam](#fevtkpexam)<br>[fEvtFinalSubmit](#fevtfinalsubmit)|
137   -||停止标准测验|[stopKpExam](#stopkpexam)|[sEvtStateCode](#sevtstatecode)|
  214 +||停止标准测验|[stopKpVote](#stopkpvote)|[sEvtStateCode](#sevtstatecode)|
138 215 ||允许键盘提交后退回修改|[rtAllowEdited](#rtkpallowedited)|[sEvtStateCode](#sevtstatecode)<br>[fEvtFinalSubmit](#fevtfinalsubmit)|
  216 +|多科测验|启动多科测验|[startKpMultiExam](#startkpmultiexam)|[sEvtStateCode](#sevtstatecode)<br>[fEvtKpExam](#fevtkpexam)<br>[fEvtFinalSubmit](#fevtfinalsubmit)|
  217 +||停止标准测验|[stopKpVote](#stopkpvote)|[sEvtStateCode](#sevtstatecode)|
  218 +|自主录分|启动自主录分|[startKpScoreInput](#startkpscoreinput)|[sEvtStateCode](#sevtstatecode)<br>[fEvtKpScore](#fevtkpscore)<br>[fEvtFinalSubmit](#fevtfinalsubmit)|
  219 +||停止自主录分|[stopKpVote](#stopkpvote)|[sEvtStateCode](#sevtstatecode)|
  220 +
  221 +## 公共方法
  222 +### stopKpVote
  223 +- **主题**: /client/\${baseSN}/send
  224 +- **功能描述**:通用停止键盘答题方法,可以停止如同步签到、按键反馈、在线测验中调用startXXX方法启动的业务
  225 +- **参数说明**
  226 +
  227 +|参数名|类型|限制|非空|说明|
  228 +|-----|-----|-----|-----|-----|
  229 +|fun|string|-|是|事件类型|
  230 +|dataTag|string||否|数据包标识,不需要时可传空字符串|
  231 +
  232 +- **示例代码**
  233 +```json
  234 +{
  235 + "fun":"stopKpVote",
  236 + "dataTag":"1"
  237 +}
  238 +```
139 239  
140 240 ## 公共事件
141 241 ### sEvtBsConnectState
... ... @@ -146,7 +246,7 @@
146 246 |参数名|类型|限制|非空|说明|
147 247 |-----|-----|-----|-----|-----|
148 248 |fun|string|-|是|事件类型|
149   -|dataTag|string|-|否|数据包标识,不需要时可传空字符串|
  249 +|dataTag|string||否|数据包标识,不需要时可传空字符串|
150 250 |data|object|-|是|传送参数的对象|
151 251 |+baseModel|int||否|基站的型号码|
152 252 |+modelName|string||否|基站的型号名称|
... ... @@ -208,6 +308,7 @@
208 308 |dataTag|string|-|否|数据包标识,不需要时可传空字符串|
209 309 |data|object|-|是|传送参数的对象|
210 310 |+keySn|string||是|刷卡的键盘SN|
  311 +|+cardType|int||是|刷卡的键盘类型<br>1-NFC类型<br>2-M1类型|
211 312 |+value|int||是|刷卡的状态<br>1-成功<br>2-失败|
212 313  
213 314 - **示例代码**
... ... @@ -216,7 +317,8 @@
216 317 "fun":"sEvtBsNfcResults",
217 318 "dataTag":"1", //不需要时可传空字符串
218 319 "data":{
219   - "keySn":"1234567890",
  320 + "keySn":"1234567890",
  321 + "cardType":1,
220 322 "value":1
221 323 }
222 324 }
... ... @@ -248,6 +350,34 @@
248 350 }
249 351 }
250 352 ```
  353 +### sEvtKpRtFeedback
  354 +- **主题**: /basestation/\${baseSN}/receive
  355 +- **功能描述**:开启键盘实时反馈后,键盘按键时上报
  356 +- **参数说明**
  357 +
  358 +|参数名|类型|限制|非空|说明|
  359 +|---|---|---|---|---|
  360 +|fun|string|-|是|事件名称|
  361 +|dataTag|string|-|否|数据包标识|
  362 +|data|array|-|是|传送参数的对象数组|
  363 +|++keySn|string||是|键盘SN|
  364 +|++keyValue|string||是|键盘提交的按键值|
  365 +|++voltage|double||是|键盘电量|
  366 +|++retryCount|int||是|键盘提交数据的重发次数|
  367 +
  368 +- **示例代码**
  369 +```json
  370 +{
  371 + "fun":"sEvtKpRtFeedback",
  372 + "dataTag":"1",
  373 + "data":[{
  374 + "keySn":"1234567890",
  375 + "keyValue":"A",
  376 + "voltage":2.6,
  377 + "retryCount":1
  378 + }]
  379 +}
  380 +```
251 381 ### sEvtStateCode
252 382 - **主题**: /basestation/\${baseSN}/receive
253 383 - **功能描述**:返回基站接收指令状态信息
... ... @@ -277,6 +407,7 @@
277 407 |20008|value参数错误|
278 408 |30001|基站在答题中|
279 409 |30002|基站忙(内存不足)|
  410 +|30003|基站执行失败|
280 411 |40001|升级功能只能支持一个基站|
281 412 |50001|此功能必须指定基站|
282 413 |60001|此功能必须指定键盘SN|
... ... @@ -334,7 +465,7 @@
334 465 参见基站连接变化系统通知
335 466  
336 467 ##### fEvtBsOnlineState
337   -- **主题**: <span class="yellowFill">/basestation/mutilBase/receive</span>
  468 +- **主题**: <span class="yellowFill">/basestation/multiBase/receive</span>
338 469 - **功能描述**:基站在线返回基站型号和基站SN
339 470 - **参数说明**
340 471  
... ... @@ -496,6 +627,23 @@
496 627 ```
497 628 ### 组网设置
498 629 #### 方法
  630 +##### getBsNetworkMode
  631 +- **主题**:/client/\${baseSN}/send
  632 +- **功能描述**:获取基站组网模式
  633 +- **参数说明**
  634 +
  635 +|参数名|类型|限制|是否必填|说明|
  636 +|---|---|---|---|---|
  637 +|fun|string|-|是|指令名称|
  638 +|dataTag|string|-|否|数据包标识,可为空字符串|
  639 +
  640 +- **示例代码**
  641 +```json
  642 +{
  643 + "fun":"getBsNetworkMode",
  644 + "dataTag":"1"
  645 +}
  646 +```
499 647 ##### getBsPairCode
500 648 - **主题**:/client/\${baseSN}/send
501 649 - **功能描述**:获取基站配对码
... ... @@ -591,7 +739,48 @@
591 739 }
592 740 }
593 741 ```
  742 +
  743 +##### getBsRFIChannel
  744 +- **主题**:/client/\${baseSN}/send
  745 +- **功能描述**:获取已被其他基站占用的信道
  746 +- **参数说明**
  747 +
  748 +|参数名|类型|限制|是否必填|说明|
  749 +|---|---|---|---|---|
  750 +|fun|string|-|是|指令名称|
  751 +|dataTag|string|-|否|数据包标识,可为空字符串|
  752 +
  753 +- **示例代码**
  754 +```json
  755 +{
  756 + "fun":"getBsRFIChannel",
  757 + "dataTag":"1"
  758 +}
  759 +```
  760 +
594 761 #### 事件
  762 +##### fEvtBsNetworkMode
  763 +- **主题**: /basestation/\${baseSN}/receive
  764 +- **功能描述**:返回基站组网模式
  765 +- **参数说明**
  766 +
  767 +|参数名|类型|限制|非空|说明|
  768 +|---|---|---|---|---|
  769 +|fun|string|-|是|事件名称|
  770 +|dataTag|string|-|否|数据包标识,可传空字符串|
  771 +|data|object|-|是|传送参数的对象|
  772 +|+value|string||是|基站的组网模式<br>1-配对模式<br>2-白名单模式|
  773 +
  774 +- **示例代码**
  775 +```json
  776 +{
  777 + "fun":"fEvtBsNetworkMode",
  778 + "dataTag":"1",
  779 + "data":{
  780 + "value":"1"
  781 + }
  782 +}
  783 +```
595 784 ##### fEvtBsPairCode
596 785 - **主题**: /basestation/\${baseSN}/receive
597 786 - **功能描述**:返回基站配对码
... ... @@ -637,6 +826,39 @@
637 826 }
638 827 }
639 828 ```
  829 +
  830 +##### fEvtBsRFIChannel
  831 +- **主题**: /basestation/\${baseSN}/receive
  832 +- **功能描述**:返回其他基站已占用的信道,频点冲突时,可以根据返回结果修改基站信道避开干扰
  833 +- **参数说明**
  834 +
  835 +|参数名|类型|限制|非空|说明|
  836 +|---|---|---|---|---|
  837 +|fun|string|-|是|事件名称|
  838 +|dataTag|string|-|否|数据包标识,可传空字符串|
  839 +|data|object|-|是|传送参数的对象|
  840 +|+value|string||是|其他基站已占用的信道,多个信道用英文","分隔,无占用信道返回0|
  841 +
  842 +- **示例代码**
  843 +```json
  844 +//信道1、2、14已被占用
  845 +{
  846 + "fun":"fEvtBsRFIChannel",
  847 + "dataTag":"1",
  848 + "data":{
  849 + "value":"1,2,14"
  850 + }
  851 +}
  852 +//无占用信道
  853 +{
  854 + "fun":"fEvtBsRFIChannel",
  855 + "dataTag":"1",
  856 + "data":{
  857 + "value":"0"
  858 + }
  859 +}
  860 +```
  861 +
640 862 ##### fEvtBsNfcLogin
641 863 - **主题**: /basestation/\${baseSN}/receive
642 864 - **功能描述**:返回基站是否允许NFC刷卡
... ... @@ -701,6 +923,86 @@
701 923 }
702 924 }
703 925 ```
  926 +##### getBsLoginPwd
  927 +- **主题**:/client/\${baseSN}/send
  928 +- **功能描述**:获取基站登录密码
  929 +- **参数说明**
  930 +
  931 +|参数名|类型|限制|是否必填|说明|
  932 +|---|---|---|---|---|
  933 +|fun|string|-|是|固定指令名称|
  934 +|dataTag|string|-|否|数据包标识|
  935 +
  936 +- **示例代码**
  937 +```json
  938 +{
  939 + "fun":"getBsLoginPwd",
  940 + "dataTag":"1"
  941 +}
  942 +```
  943 +##### setBsLoginPwd
  944 +- **主题**:/client/\${baseSN}/send
  945 +- **功能描述**:设置基站登录密码
  946 +- **参数说明**
  947 +
  948 +|参数名|类型|限制|是否必填|说明|
  949 +|---|---|---|---|---|
  950 +|fun|string|-|是|指令名称|
  951 +|dataTag|string|-|否|数据包标识,可为空字符串|
  952 +|data|object|-|是|传送参数的对象|
  953 +|+value|string||是|设置的基站登录密码,数字类型,最长4位,为空或设为0代表无需密码登录|
  954 +
  955 +- **示例代码**
  956 +```json
  957 +{
  958 + "fun":"setBsLoginPwd",
  959 + "dataTag":"1",
  960 + "data":{
  961 + "value":"1234"
  962 + }
  963 +}
  964 +```
  965 +##### getBsLoginState
  966 +获取基站登录名称
  967 +- **主题**:/client/\${baseSN}/send
  968 +- **功能描述**:获取基站登录状态
  969 +- **参数说明**
  970 +
  971 +|参数名|类型|限制|是否必填|说明|
  972 +|---|---|---|---|---|
  973 +|fun|string|-|是|固定指令名称|
  974 +|dataTag|string|-|否|数据包标识|
  975 +
  976 +- **示例代码**
  977 +```json
  978 +{
  979 + "fun":"getBsLoginState",
  980 + "dataTag":"1"
  981 +}
  982 +```
  983 +##### setBsLoginState
  984 +- **主题**:/client/\${baseSN}/send
  985 +- **功能描述**:设置基站登录状态
  986 +- **参数说明**
  987 +
  988 +|参数名|类型|限制|是否必填|说明|
  989 +|---|---|---|---|---|
  990 +|fun|string|-|是|指令名称|
  991 +|dataTag|string|-|否|数据包标识,可为空字符串|
  992 +|data|object|-|是|传送参数的对象|
  993 +|+value|string||是|设置是否允许键盘自主登入<br>0 - 不允许键盘登入<br>1 - 允许键盘登入|
  994 +
  995 +- **示例代码**
  996 +```json
  997 +{
  998 + "fun":"setBsLoginState",
  999 + "dataTag":"1",
  1000 + "data":{
  1001 + "value":"1"
  1002 + }
  1003 +}
  1004 +```
  1005 +
704 1006 #### 事件
705 1007 ##### fEvtBsSSID
706 1008 - **主题**: /basestation/\${baseSN}/receive
... ... @@ -724,6 +1026,59 @@
724 1026 }
725 1027 }
726 1028 ```
  1029 +##### fEvtBsLoginPwd
  1030 +- **主题**: /basestation/\${baseSN}/receive
  1031 +- **功能描述**:返回基站登录密码
  1032 +- **参数说明**
  1033 +
  1034 +|参数名|类型|限制|非空|说明|
  1035 +|---|---|---|---|---|
  1036 +|fun|string|-|是|事件名称|
  1037 +|dataTag|string|-|否|数据包标识,可传空字符串|
  1038 +|data|object|-|是|传送参数的对象|
  1039 +|+value|string||是|基站登录密码,返回值为0代表无需密码登录|
  1040 +
  1041 +- **示例代码**
  1042 +```json
  1043 +{
  1044 + "fun":"fEvtBsLoginPwd",
  1045 + "dataTag":"1",
  1046 + "data":{
  1047 + "value":"1234"
  1048 + }
  1049 +}
  1050 +
  1051 +//无需密码登录
  1052 +{
  1053 + "fun":"fEvtBsLoginPwd",
  1054 + "dataTag":"1",
  1055 + "data":{
  1056 + "value":"0"
  1057 + }
  1058 +}
  1059 +```
  1060 +##### fEvtBsLoginState
  1061 +- **主题**: /basestation/\${baseSN}/receive
  1062 +- **功能描述**:返回基站登录状态
  1063 +- **参数说明**
  1064 +
  1065 +|参数名|类型|限制|非空|说明|
  1066 +|---|---|---|---|---|
  1067 +|fun|string|-|是|事件名称|
  1068 +|dataTag|string|-|否|数据包标识,可传空字符串|
  1069 +|data|object|-|是|传送参数的对象|
  1070 +|+value|string||是|基站登录状态|
  1071 +
  1072 +- **示例代码**
  1073 +```json
  1074 +{
  1075 + "fun":"fEvtBsLoginState",
  1076 + "dataTag":"1",
  1077 + "data":{
  1078 + "value":"1"
  1079 + }
  1080 +}
  1081 +```
727 1082 ### 键盘统一设置
728 1083 #### 方法
729 1084 ##### getBsKpLanguage
... ... @@ -1122,7 +1477,7 @@
1122 1477 |+port|int||是|端口,默认1883|
1123 1478 |+userName|string||否|连接服务器的用户名,可不设置|
1124 1479 |+password|string||否|连接服务器的密码,可不设置|
1125   -|+interval|int|>=10|否|基站连接服务器失败后重连的间隔时长,单位秒|
  1480 +|+interval|int|>=30|否|基站连接服务器失败后重连的间隔时长,单位秒|
1126 1481  
1127 1482 - **示例代码**
1128 1483 ```json
... ... @@ -1199,7 +1554,70 @@
1199 1554 }
1200 1555 }
1201 1556 ```
  1557 +### 基站加密
  1558 +#### 方法
  1559 +##### getBsSoftwareKey
  1560 +- **主题**:/client/\${baseSN}/send
  1561 +- **功能描述**:获取基站软件狗密钥
  1562 +- **参数说明**
  1563 +
  1564 +|参数名|类型|限制|是否必填|说明|
  1565 +|---|---|---|---|---|
  1566 +|fun|string|-|是|指令名称|
  1567 +|dataTag|string|-|否|数据包标识,可为空字符串|
  1568 +
  1569 +- **示例代码**
  1570 +```json
  1571 +{
  1572 + "fun":"getBsSoftwareKey",
  1573 + "dataTag":"1"
  1574 +}
  1575 +```
  1576 +##### setBsSoftwareKey
  1577 +- **主题**:/client/\${baseSN}/send
  1578 +- **功能描述**:设置基站软件狗密钥
  1579 +- **参数说明**
  1580 +
  1581 +|参数名|类型|限制|是否必填|说明|
  1582 +|---|---|---|---|---|
  1583 +|fun|string|-|是|指令名称|
  1584 +|dataTag|string|-|否|数据包标识,可为空字符串|
  1585 +|data|object|-|是|传送参数的对象|
  1586 +|+value|string|-|是|基站软件狗密钥,长度不超过32字节|
  1587 +
  1588 +- **示例代码**
  1589 +```json
  1590 +{
  1591 + "fun":"setBsSoftwareKey",
  1592 + "dataTag":"1",
  1593 + "data":{
  1594 + "value":"sunvote123456"
  1595 + }
  1596 +}
  1597 +```
  1598 +#### 事件
  1599 +##### fEvtBsSoftwareKey
  1600 +- **主题**:/basestation/\${baseSN}/receive
  1601 +- **功能描述**:返回基站的软件狗密钥
  1602 +- **参数说明**
1202 1603  
  1604 +|参数名|类型|限制|非空|说明|
  1605 +|---|---|---|---|---|
  1606 +|fun|string|-|是|指令名称|
  1607 +|dataTag|string|-|否|数据包标识,可为空字符串|
  1608 +|data|object|-|是|传送参数的对象|
  1609 +|+value|string||是|返回基站的软件狗密钥|
  1610 +
  1611 +- **示例代码**
  1612 +```json
  1613 +{
  1614 + "fun":"fEvtBsSoftwareKey",
  1615 + "dataTag":"1",
  1616 + "data":{
  1617 + "value":"sunvote123456"
  1618 + }
  1619 +}
  1620 +```
1203 1621 ## 键盘管理
1204 1622 ### 交互设置
1205 1623 #### 方法
... ... @@ -1546,8 +1964,7 @@
1546 1964 }
1547 1965 }
1548 1966 ```
1549   -
1550   -##### stopKpSignIn
  1967 +<!-- ##### stopKpSignIn
1551 1968 - **主题**:/client/\${baseSN}/send
1552 1969 - **功能描述**:停止同步签到
1553 1970 - **参数说明**
... ... @@ -1563,7 +1980,10 @@
1563 1980 "fun":"stopKpSignIn",
1564 1981 "dataTag":"1"
1565 1982 }
1566   -```
  1983 +``` -->
  1984 +##### [stopKpVote](#stopkpvote)
  1985 +停止同步签到
  1986 +
1567 1987 #### 事件
1568 1988 ##### [sEvtStateCode](#sevtstatecode)
1569 1989 发送指令后返回接收状态
... ... @@ -1717,6 +2137,7 @@
1717 2137 |dataTag|string|-|否|数据包标识,可为空字符串|
1718 2138 |data|object|-|是|传送参数的对象|
1719 2139 |+keySns|array||是|指定的键盘SN数组,空数组表示全部在线键盘|
  2140 +|+count|int||是|题目数量,1-16,>1多题快答|
1720 2141 |+mode|int||是|1 - True/False 对/错 <br>2 - Yes/No 是/否<br> 3 - √/×|
1721 2142 |+allowModify|int||是|0 - 不允许修改<br>1 - 允许修改|
1722 2143 |+tip|string||否|提示的标题,长度不超过16字符|
... ... @@ -1729,13 +2150,14 @@
1729 2150 "dataTag":"1",
1730 2151 "data":{
1731 2152 "keySns":[],
  2153 + "count":1,
1732 2154 "mode":1,
1733 2155 "allowModify":1,
1734 2156 "tip":"请判断对错"
1735 2157 }
1736 2158 }
1737 2159 ```
1738   -##### stopQATrueFalse
  2160 +<!-- ##### stopQATrueFalse
1739 2161 - **主题**:/client/\${baseSN}/send
1740 2162 - **功能描述**:停止判断题答题
1741 2163 - **参数说明**
... ... @@ -1752,7 +2174,11 @@
1752 2174 "fun":"stopQATrueFalse",
1753 2175 "dataTag":"1"
1754 2176 }
1755   -```
  2177 +``` -->
  2178 +
  2179 +##### [stopKpVote](#stopkpvote)
  2180 +停止判断题答题
  2181 +
1756 2182 #### 事件
1757 2183 ##### [sEvtStateCode](#sevtstatecode)
1758 2184 发送指令后返回接收状态
... ... @@ -1800,6 +2226,7 @@
1800 2226 |dataTag|string|-|否|数据包标识,可为空字符串|
1801 2227 |data|object|-|是|传送参数的对象|
1802 2228 |+keySns|array||是|指定的键盘SN数组,空数组表示全部在线键盘|
  2229 +|+count|int||是|题目数量,1-16,>1多题快答<br>optionalN >1时无效|
1803 2230 |+mode|int||是|显示模式<br>1:显示字母(默认值) </br>2:显示数字 |
1804 2231 |+lessMode|int||是|迫选模式<br>0:可缺选(默认值) </br>1:不可缺选</br>2:允许重复输入</br>3:允许重复输入且不可缺选 |
1805 2232 |+options|int||是|选项数量,1≤M≤10(默认值4)|
... ... @@ -1816,6 +2243,7 @@
1816 2243 "data":{
1817 2244 "keySns":[],
1818 2245 "mode": 1,
  2246 + "count":1,
1819 2247 "lessMode": 0,
1820 2248 "options": 4,
1821 2249 "optionalN": 1,
... ... @@ -1824,7 +2252,7 @@
1824 2252 }
1825 2253 }
1826 2254 ```
1827   -##### stopQAChoice
  2255 +<!-- ##### stopQAChoice
1828 2256 - **主题**:/client/\${baseSN}/send
1829 2257 - **功能描述**:停止选择题答题
1830 2258 - **参数说明**
... ... @@ -1841,7 +2269,10 @@
1841 2269 "fun":"stopQAChoice",
1842 2270 "dataTag":"1"
1843 2271 }
1844   -```
  2272 +``` -->
  2273 +##### [stopKpVote](#stopkpvote)
  2274 +停止选择题答题
  2275 +
1845 2276 #### 事件
1846 2277 ##### [sEvtStateCode](#sevtstatecode)
1847 2278 发送指令后返回接收状态
... ... @@ -1889,7 +2320,7 @@
1889 2320 |data|object|-|是|传送参数的对象|
1890 2321 |+keySns|array||是|指定的键盘SN数组,空数组表示全部在线键盘|
1891 2322 |+mode|int||是|模式<br>0:无规则 (S6最多16位,T2最多14位)<br>1:带小数位上下限(T2不支持)|
1892   -|+digits|int||是|小数位数范围0-2,mode=1时有效
  2323 +|+digits|int||是|小数位数,范围0-2,mode=1时有效
1893 2324 |+numMin|int||是|可输入下限,mode=1有效,范围0-100|
1894 2325 |+numMax|int||是|可输入上限,mode=1有效,范围0-100|
1895 2326 |+allowModify|int||是|修改模式<br>0 - 不允许修改<br>1 - 允许修改|
... ... @@ -1912,7 +2343,7 @@
1912 2343 }
1913 2344 }
1914 2345 ```
1915   -##### stopQANum
  2346 +<!-- ##### stopQANum
1916 2347 - **主题**:/client/\${baseSN}/send
1917 2348 - **功能描述**:停止数字题答题
1918 2349 - **参数说明**
... ... @@ -1929,7 +2360,10 @@
1929 2360 "fun":"stopQANum",
1930 2361 "dataTag":"1"
1931 2362 }
1932   -```
  2363 +``` -->
  2364 +##### [stopKpVote](#stopkpvote)
  2365 +停止数字题答题
  2366 +
1933 2367 #### 事件
1934 2368 ##### [sEvtStateCode](#sevtstatecode)
1935 2369 发送指令后返回接收状态
... ... @@ -1947,7 +2381,7 @@
1947 2381 |++keySn|string||是|键盘SN|
1948 2382 |++keyValue|string||是|键盘提交的按键值|
1949 2383 |++keyTime|double||是|答题时间,从启动开始计算,单位秒|
1950   -|++voltage|double||是|键盘电量</font>|
  2384 +|++voltage|double||是|键盘电量|
1951 2385 |++retryCount|int||是|键盘提交数据的重发次数|
1952 2386  
1953 2387 - **示例代码**
... ... @@ -1994,7 +2428,7 @@
1994 2428 }
1995 2429 }
1996 2430 ```
1997   -##### stopQAQuicker
  2431 +<!-- ##### stopQAQuicker
1998 2432 - **主题**:/client/\${baseSN}/send
1999 2433 - **功能描述**:停止抢答答题
2000 2434 - **参数说明**
... ... @@ -2011,7 +2445,11 @@
2011 2445 "fun":"stopQAQuicker",
2012 2446 "dataTag":"1"
2013 2447 }
2014   -```
  2448 +``` -->
  2449 +
  2450 +##### [stopKpVote](#stopkpvote)
  2451 +停止抢答
  2452 +
2015 2453 #### 事件
2016 2454 ##### [sEvtStateCode](#sevtstatecode)
2017 2455 发送指令后返回接收状态
... ... @@ -2045,6 +2483,105 @@
2045 2483 }]
2046 2484 }
2047 2485 ```
  2486 +### 待机实时反馈
  2487 +#### 方法
  2488 +##### setKpStbResponse
  2489 +- **主题**:/client/\${baseSN}/send
  2490 +- **功能描述**:启动待机实时反馈
  2491 +- **参数说明**
  2492 +
  2493 +|参数名|类型|限制|是否必填|说明|
  2494 +|---|---|---|---|---|
  2495 +|fun|string|-|是|指令名称|
  2496 +|dataTag|string|-|否|数据包标识,可为空字符串|
  2497 +|data|object|-|是|传送参数的对象|
  2498 +|+state|int||是|启用待机实时反馈<br>0-不启用<br>1-启用|
  2499 +|+mode|int||是|启动待机反馈类型,state=1时有效<br>1 - 指定按键反馈|
  2500 +|+keys|int||是|有效按键数量,state=1且mode=1时有效, 范围1-10|
  2501 +
  2502 +- **示例代码**
  2503 +```json
  2504 +//启用待机按键反馈
  2505 +{
  2506 + "fun":"setKpStbResponse",
  2507 + "dataTag":"1",
  2508 + "data":{
  2509 + "state":1,
  2510 + "mode":1,
  2511 + "keys":4
  2512 + }
  2513 +}
  2514 +//关闭待机按键反馈
  2515 +{
  2516 + "fun":"setKpStbResponse",
  2517 + "dataTag":"1",
  2518 + "data":{
  2519 + "state":0
  2520 + }
  2521 +}
  2522 +```
  2523 +
  2524 +##### getKpStbResponse
  2525 +- **主题**:/client/\${baseSN}/send
  2526 +- **功能描述**:获取实时反馈是否打开
  2527 +- **参数说明**
  2528 +
  2529 +|参数名|类型|限制|是否必填|说明|
  2530 +|---|---|---|---|---|
  2531 +|fun|string|-|是|指令名称|
  2532 +|dataTag|string|-|否|数据包标识,可为空字符串|
  2533 +
  2534 +- **示例代码**
  2535 +```json
  2536 +//获取实时反馈状态
  2537 +{
  2538 + "fun":"getKpStbResponse",
  2539 + "dataTag":"1"
  2540 +}
  2541 +```
  2542 +
  2543 +#### 事件
  2544 +##### fEvtKpStbResponse
  2545 +- **主题**:/basestation/\${baseSN}/receive
  2546 +- **功能描述**:返回当前待机按键反馈开启状态
  2547 +- **参数说明**
  2548 +
  2549 +|参数名|类型|限制|非空|说明|
  2550 +|---|---|---|---|---|
  2551 +|fun|string|-|是|指令名称|
  2552 +|dataTag|string|-|否|数据包标识,可为空字符串|
  2553 +|data|array|-|是|传送参数的对象数组|
  2554 +|+state|int||是|启用待机实时反馈<br>0-未启用<br>1-启用|
  2555 +|+mode|int||是|当前启动待机反馈类型,state=1时返回<br>0-举手<br>1-指定按键反馈|
  2556 +
  2557 +- **示例代码**
  2558 +```json
  2559 +//当前启用待机实时反馈,模式为指定按键反馈
  2560 +{
  2561 + "fun":"fEvtKpStbResponse",
  2562 + "dataTag":"1",
  2563 + "data": {
  2564 + "state": 1,
  2565 + "mode": 1
  2566 + }
  2567 +}
  2568 +
  2569 +//当前未启用待机反馈
  2570 +{
  2571 + "fun":"fEvtKpStbResponse",
  2572 + "dataTag":"1",
  2573 + "data": {
  2574 + "state": 0
  2575 + }
  2576 +}
  2577 +```
  2578 +
  2579 +##### [sEvtKpRtFeedback](#sevtkprtfeedback)
  2580 +返回待机时键盘返回的按键值
  2581 +
  2582 +##### [sEvtKpHandup](#sevtkphandup)
  2583 +启动待机按键反馈类型为举手提问时返回此事件
  2584 +
2048 2585 ## 在线测验
2049 2586 ### 标准测验
2050 2587 #### 方法
... ... @@ -2061,11 +2598,10 @@
2061 2598 |+examNo|int||是|0-9999<br>=0,新的测验<br>>0时,与上次启动卷号一致继续测验,不一致进入新的测验|
2062 2599 |+mode|int||是|显示模式<br>0-不显示开头<br>1-显示“Q”开头<br>2-显示“题”开头|
2063 2600 |+questions|array||是|题目详情|
2064   -|++symbol | string||是 | 题号前缀,分级标识为-,可为空,为空表示1级大题<br><font color="red">最多为三级题号,即最多可以设为x-x-</font>|
2065 2601 |++quesType | int||是| 题目类型<br>1:单选<br>2:多选(排序)<br>3:数字<br>4:判断 |
2066 2602 |++option |int||是 |选项数目<br> quesType = 1 有效。<br>quesType = 2 有效。<br>此项缺省时 默认4;<br>范围:1-10。|
2067   -|++startNo | int||是| 起始题号 |
2068   -|++count | int||是| 题目数量 |
  2603 +|++startNo | string||是| 起始题号,可以为数字+“-”,单级的题号数字范围1-255,如“1”,“1-1”,“1-1-1”,最多只能输入三级<br>mode=0 时有效,mode=1或2时键盘按顺序显示题号|
  2604 +|++count | int||是| 相同参数的连续题目数量, >0 <br>注意:总题数最多支持200题 |
2069 2605  
2070 2606 - **示例代码**
2071 2607  
... ... @@ -2076,10 +2612,10 @@
2076 2612 "dataTag":"1",
2077 2613 "data":{
2078 2614 "mode": 1,
2079   - "examNo": 1,
  2615 + "examNo": 0,
2080 2616 "questions": [{
2081 2617 "quesType": 1, //单选题
2082   - "startNo": 1, //题号从1开始
  2618 + "startNo": "1", //题号从1开始
2083 2619 "count":10 //连续10题
2084 2620 }]
2085 2621 }
... ... @@ -2093,24 +2629,24 @@
2093 2629 "dataTag":"1",
2094 2630 "data":{
2095 2631 "mode": 0,
2096   - "examNo": 1,
  2632 + "examNo": 0,
2097 2633 //第1、2题单选题,第3、4题多选题,第5题数字,第6题判断,共6题
2098 2634 "questions": [{
2099 2635 "quesType": 1, //单选题
2100   - "startNo": 1, //题号从1开始
  2636 + "startNo": "1", //题号从1开始
2101 2637 "count":2 //连续2题
2102 2638 },{
2103 2639 "quesType": 2, //多选题
2104   - "startNo": 3, //题号从3开始
  2640 + "startNo": "3", //题号从3开始
2105 2641 "count":2, //连续2题
2106 2642 "option":5
2107 2643 },{
2108 2644 "quesType": 1, //数字题
2109   - "startNo": 5, //题号从5开始
  2645 + "startNo": "5", //题号从5开始
2110 2646 "count":1 //连续1题
2111 2647 },{
2112 2648 "quesType": 4, //判断题
2113   - "startNo": 6, //题号从6开始
  2649 + "startNo": "6", //题号从6开始
2114 2650 "count":1 //连续1题
2115 2651 }]
2116 2652 }
... ... @@ -2124,28 +2660,24 @@
2124 2660 "dataTag":"1",
2125 2661 "data":{
2126 2662 "mode": 0,
2127   - "examNo": 1,
  2663 + "examNo": 0,
2128 2664 //第1-1、1-2题单选题,第2-1、2-2题多选题,第3-1题数字,第4-1题判断,共6题
2129   - "questions": [{
2130   - "symbol": "1-",
  2665 + "questions": [{
2131 2666 "quesType": 1, //单选题
2132   - "startNo": 1, //题号从1-1开始
  2667 + "startNo": "1-1", //题号从1-1开始
2133 2668 "count":2 //连续2题
2134 2669 },{
2135   - "symbol": "2-",
2136 2670 "quesType": 2, //多选题
2137   - "startNo": 1, //题号从2-1开始
  2671 + "startNo":"2-1", //题号从2-1开始
2138 2672 "count":2, //连续2题
2139 2673 "option":5
2140 2674 },{
2141   - "symbol": "3-",
2142 2675 "quesType": 3, //数字题
2143   - "startNo": 1, //题号从3-1开始
  2676 + "startNo":"3-1", //题号从3-1开始
2144 2677 "count":1 //连续1题
2145 2678 },{
2146   - "symbol": "4-",
2147 2679 "quesType": 4, //判断题
2148   - "startNo": 1, //题号从4-1开始
  2680 + "startNo": "4-1", //题号从4-1开始
2149 2681 "count":1 //连续1题
2150 2682 }]
2151 2683 }
... ... @@ -2159,28 +2691,24 @@
2159 2691 "dataTag":"1",
2160 2692 "data":{
2161 2693 "mode": 0,
2162   - "examNo": 1,
  2694 + "examNo": 0,
2163 2695 //第1-1-1、1-1-2题单选题,第1-2-1、1-2-2题多选题,第2-1-1题数字,第3-1-1题判断,共6题
2164 2696 "questions": [{
2165   - "symbol": "1-1-",
2166 2697 "quesType": 1, //单选题
2167   - "startNo": 1, //题号从1-1-1开始
  2698 + "startNo": "1-1-1", //题号从1-1-1开始
2168 2699 "count":2 //连续2题
2169 2700 },{
2170   - "symbol": "1-2-",
2171 2701 "quesType": 2, //多选题
2172   - "startNo": 1, //题号从1-2-1开始
  2702 + "startNo": "1-2-1", //题号从1-2-1开始
2173 2703 "count":2, //连续2题
2174 2704 "option":5
2175 2705 },{
2176   - "symbol": "2-1-",
2177 2706 "quesType": 3, //数字题
2178   - "startNo": 1, //题号从2-1-1开始
  2707 + "startNo": "2-1-1", //题号从2-1-1开始
2179 2708 "count":1 //连续1题
2180 2709 },{
2181   - "symbol": "3-1-",
2182 2710 "quesType": 4, //判断题
2183   - "startNo": 1, //题号从3-1-1开始
  2711 + "startNo": "3-1-1", //题号从3-1-1开始
2184 2712 "count":1 //连续1题
2185 2713 }]
2186 2714 }
... ... @@ -2194,23 +2722,23 @@
2194 2722 "dataTag":"1",
2195 2723 "data":{
2196 2724 "mode": 1,
2197   - "examNo": 1,
  2725 + "examNo": 0,
2198 2726 "questions": [{
2199 2727 "quesType": 1, //单选题
2200   - "startNo": 1, //题号从1开始
  2728 + "startNo": "1", //题号从1开始
2201 2729 "count":2 //连续2题
2202 2730 },{
2203 2731 "quesType": 2, //多选题
2204   - "startNo": 3, //题号从3开始
  2732 + "startNo": "3", //题号从3开始
2205 2733 "count":2, //连续2题
2206 2734 "option":5
2207 2735 },{
2208 2736 "quesType": 1, //数字题
2209   - "startNo": 5, //题号从5开始
  2737 + "startNo": "5", //题号从5开始
2210 2738 "count":1 //连续1题
2211 2739 },{
2212 2740 "quesType": 4, //判断题
2213   - "startNo": 6, //题号从6开始
  2741 + "startNo": "6", //题号从6开始
2214 2742 "count":1 //连续1题
2215 2743 }]
2216 2744 }
... ... @@ -2224,29 +2752,30 @@
2224 2752 "dataTag":"1",
2225 2753 "data":{
2226 2754 "mode": 2,
2227   - "examNo": 1,
2228   - "questions": [{
  2755 + "examNo": 0,
  2756 + "questions": [{
2229 2757 "quesType": 1, //单选题
2230   - "startNo": 1, //题号从1开始
  2758 + "startNo": "1", //题号从1开始
2231 2759 "count":2 //连续2题
2232 2760 },{
2233 2761 "quesType": 2, //多选题
2234   - "startNo": 3, //题号从3开始
  2762 + "startNo": "3", //题号从3开始
2235 2763 "count":2, //连续2题
2236 2764 "option":5
2237 2765 },{
2238 2766 "quesType": 1, //数字题
2239   - "startNo": 5, //题号从5开始
  2767 + "startNo": "5", //题号从5开始
2240 2768 "count":1 //连续1题
2241 2769 },{
2242 2770 "quesType": 4, //判断题
2243   - "startNo": 6, //题号从6开始
  2771 + "startNo": "6", //题号从6开始
2244 2772 "count":1 //连续1题
2245 2773 }]
2246 2774 }
2247 2775 }
2248 2776 ```
2249   -##### stopKpExam
  2777 +
  2778 +<!-- ##### stopKpExam
2250 2779 - **主题**:/client/\${baseSN}/send
2251 2780 - **功能描述**:停止标准测验
2252 2781 - **参数说明**
... ... @@ -2263,7 +2792,10 @@
2263 2792 "fun":"stopKpExam",
2264 2793 "dataTag":"1"
2265 2794 }
2266   -```
  2795 +``` -->
  2796 +##### [stopKpVote](#stopkpvote)
  2797 +停止在线测验
  2798 +
2267 2799 ##### rtKpAllowEdited
2268 2800 - **主题**:/client/\${baseSN}/send
2269 2801 - **功能描述**:键盘提交后,允许键盘修改答案
... ... @@ -2302,8 +2834,10 @@
2302 2834 |dataTag|string|-|否|数据包标识,可为空字符串|
2303 2835 |data|array|-|是|传送参数的对象数组|
2304 2836 |++keySn|string||是|键盘SN|
2305   -|++keyValue|string||是|键盘提交的按键值,1:A;2:B表示第1题提交A,第二题提交B|
  2837 +|++keyValue|string||是|键盘提交的按键值,1:A;2:B表示第1题提交A,第二题提交B<br><font color="red">注意:如启动的是多科测验,键盘提交的题目序号对应启动时下发的题目总序号,不按科目区分</font>|
2306 2838 |++keyTime|double||是|答题时间,从启动开始计算,单位秒|
  2839 +|++voltage|double||是|键盘电量|
  2840 +|++retryCount|int||是|键盘提交数据的重发次数|
2307 2841  
2308 2842 - **示例代码**
2309 2843  
... ... @@ -2350,4 +2884,234 @@
2350 2884 "keyTime":3.2
2351 2885 }]
2352 2886 }
  2887 +```
  2888 +
  2889 +### 多科测验
  2890 +#### 方法
  2891 +##### startKpMultiExam
  2892 +- **主题**:/client/\${baseSN}/send
  2893 +- **功能描述**:启动多科测验
  2894 +- **参数说明**
  2895 +
  2896 +|参数名|类型|限制|是否必填|说明|
  2897 +|---|---|---|---|---|
  2898 +|fun|string|-|是|指令名称|
  2899 +|dataTag|string|-|否|数据包标识,可为空字符串|
  2900 +|data|object|-|是|传送参数的对象|
  2901 +|+examNo|int||是|0-9999<br>=0,新的测验<br>>0时,与上次启动卷号一致继续测验,不一致进入新的测验|
  2902 +|+mode|int||是|显示模式<br>0-不显示开头<br>1-显示“Q”开头<br>2-显示“题”开头|
  2903 +|+questions|array||是|题目详情|
  2904 +|++subject | int||是 | 科目序号,1-9,对应键盘中内置的科目1-9<br>键盘答题时可选择科目切换答题|
  2905 +|++quesType | int||是| 题目类型<br>1:单选<br>2:多选(排序)<br>3:数字<br>4:判断 |
  2906 +|++option |int||是 |选项数目<br> quesType = 1 有效。<br>quesType = 2 有效。<br>此项缺省时 默认4;<br>范围:1-10。|
  2907 +|++startNo | string||是| 起始题号,可以为数字+“-”,单级的题号数字范围1-255,如“1”,“1-1”,最多支持两级题号<br>mode=0 时有效,mode=1或2时键盘按顺序显示题号|
  2908 +|++count | int||是| 相同参数的连续题目数量, >0 <br>注意:所有科目的总题数最多支持200题|
  2909 +|+simParams|object||否|内部模拟测试参数设置对象|
  2910 +|++answer|array||是|预设提交的按键值<br>格式为"单选题答案,多选题答案;<br>数字题答案;判断题答案(1对2错)"<br>如["A","ABCD","10","1"]|
  2911 +
  2912 +- **示例代码**
  2913 +```json
  2914 +//自定义题号
  2915 +{
  2916 + "fun":"startKpMultiExam",
  2917 + "dataTag":"1",
  2918 + "data":{
  2919 + "mode": 0,
  2920 + "examNo": 0,
  2921 + "questions": [{
  2922 + "subject":1, //科目1
  2923 + //题号1-1 到1-10 共10题单选
  2924 + "quesType": 1,
  2925 + "startNo": "1-1",
  2926 + "count":10
  2927 + }, {
  2928 + "subject":2, //科目2
  2929 + //题号2-2和2-3共两题 多选题,5个选项
  2930 + "quesType": 2,
  2931 + "option": 5,
  2932 + "startNo": "2-2",
  2933 + "count":2
  2934 + }, {
  2935 + "subject":3, //科目3
  2936 + //题号3-1和3-2共两道数字题
  2937 + "quesType": 3,
  2938 + "startNo": "3-1",
  2939 + "count":2
  2940 + }, {
  2941 + "subject":1, //科目1
  2942 + //题号4和5 ,判断题
  2943 + "quesType": 4,
  2944 + "startNo": "4",
  2945 + "count":2
  2946 + }]
  2947 + }
  2948 +}
  2949 +
  2950 +//显示Q开头
  2951 +{
  2952 + "fun":"startKpMultiExam",
  2953 + "dataTag":"1",
  2954 + "data":{
  2955 + "mode": 1,
  2956 + "examNo": 0,
  2957 + "questions": [{
  2958 + "subject":1,
  2959 + //Q1-Q20,单选题
  2960 + "quesType": 1,
  2961 + "startNo": "1",
  2962 + "count":20
  2963 + }]
  2964 + }
  2965 +}
  2966 +
  2967 +//显示题开头
  2968 +{
  2969 + "fun":"startKpMultiExam",
  2970 + "dataTag":"1",
  2971 + "data":{
  2972 + "mode": 2,
  2973 + "examNo": 0,
  2974 + "questions": [{
  2975 + "subject":1,
  2976 + //题1-题20,单选题
  2977 + "quesType": 1,
  2978 + "startNo": "1",
  2979 + "count":20
  2980 + }]
  2981 + }
  2982 +}
  2983 +```
  2984 +
  2985 +<!-- ##### stopKpMultiExam
  2986 +- **主题**:/client/\${baseSN}/send
  2987 +- **功能描述**:停止多科测验
  2988 +- **参数说明**
  2989 +
  2990 +|参数名|类型|限制|是否必填|说明|
  2991 +|---|---|---|---|---|
  2992 +|fun|string|-|是|指令名称|
  2993 +|dataTag|string|-|否|数据包标识,可为空字符串|
  2994 +
  2995 +- **示例代码**
  2996 +```json
  2997 +{
  2998 + "fun":"stopKpMultiExam",
  2999 + "dataTag":"1"
  3000 +}
  3001 +``` -->
  3002 +##### [stopKpVote](#stopkpvote)
  3003 +停止多科测验
  3004 +
  3005 +#### 事件
  3006 +##### [sEvtStateCode](#sevtstatecode)
  3007 +发送指令后返回接收状态
  3008 +
  3009 +##### [fEvtKpExam](#fevtkpexam)
  3010 +返回测验中键盘提交答题数据
  3011 +
  3012 +##### [fEvtFinalSubmit](#fevtfinalsubmit)
  3013 +返回键盘手动交卷标识
  3014 +
  3015 +### 自主录分
  3016 +#### 方法
  3017 +##### startKpScoreInput
  3018 +- **主题**:/client/\${baseSN}/send
  3019 +- **功能描述**:启动自主录分
  3020 +- **参数说明**
  3021 +
  3022 +|参数名|类型|限制|是否必填|说明|
  3023 +|---|---|---|---|---|
  3024 +|fun|string|-|是|指令名称|
  3025 +|dataTag|string|-|否|数据包标识,可为空字符串|
  3026 +|data|object|-|是|传送参数的对象|
  3027 +|+examNo|int||是|0-9999<br>=0,新的录分<br>>0时,与上次启动卷号一致继续录分,不一致进入新的录分|
  3028 +|+mode|int||是|录分模式<br>0-自主录分<br>1-交叉录分,需先输入录分的人员标识|
  3029 +|+questions|array||是|题目详情|
  3030 +|++max |int||是|可输入的最大值,<=100|
  3031 +|++digits|int||是|可输入的小数位数,范围0-2|
  3032 +|++startNo | string||是| 起始题号,暂只支持一级题号,范围1-255|
  3033 +|++count | int||是| 相同参数的题目数量,>0<br>注意:总题数最多支持200题|
  3034 +
  3035 +- **示例代码**
  3036 +```json
  3037 +{
  3038 + "fun":"startKpScoreInput",
  3039 + "dataTag":"1",
  3040 + "data":{
  3041 + "mode": 0,
  3042 + "examNo": 0,
  3043 + "questions": [{
  3044 + //题号1 到 2 共2题,单题满分10分
  3045 + "max":10,
  3046 + "digits":1,
  3047 + "startNo": "1",
  3048 + "count":2
  3049 + }, {
  3050 + //题号3到6 共4道题,单题满分5
  3051 + "max":5,
  3052 + "digits":0,
  3053 + "startNo": "3",
  3054 + "count":4
  3055 + }]
  3056 + }
  3057 +}
  3058 +```
  3059 +<!--
  3060 +##### stopKpScoreInput
  3061 +- **主题**:/client/\${baseSN}/send
  3062 +- **功能描述**:停止自主录分
  3063 +- **参数说明**
  3064 +
  3065 +|参数名|类型|限制|是否必填|说明|
  3066 +|---|---|---|---|---|
  3067 +|fun|string|-|是|指令名称|
  3068 +|dataTag|string|-|否|数据包标识,可为空字符串|
  3069 +
  3070 +- **示例代码**
  3071 +```json
  3072 +{
  3073 + "fun":"stopKpScoreInput",
  3074 + "dataTag":"1"
  3075 +}
  3076 +``` -->
  3077 +##### [stopKpVote](#stopkpvote)
  3078 +停止自主录分
  3079 +
  3080 +#### 事件
  3081 +##### [sEvtStateCode](#sevtstatecode)
  3082 +发送指令后返回接收状态
  3083 +
  3084 +##### fEvtKpScore
  3085 +- **主题**:/basestation/\${baseSN}/receive
  3086 +- **功能描述**:返回键盘提交录分信息
  3087 +- **参数说明**
  3088 +
  3089 +|参数名|类型|限制|非空|说明|
  3090 +|---|---|---|---|---|
  3091 +|fun|string|-|是|指令名称|
  3092 +|dataTag|string|-|否|数据包标识,可为空字符串|
  3093 +|data|array|-|是|传送参数的对象数组|
  3094 +|++keySn|string||是|键盘SN|
  3095 +|++keyValue|string||是|键盘提交的分值,1:10;2:0表示第1题提交10分,第二题提交0分|
  3096 +|++keyTime|double||是|录分时间,从启动录分开始计算,单位秒|
  3097 +|++voltage|double||是|键盘电量|
  3098 +|++retryCount|int||是|键盘提交数据的重发次数|
  3099 +
  3100 +- **示例代码**
  3101 +```json
  3102 +{
  3103 + "fun":"fEvtKpScore",
  3104 + "dataTag":"1",
  3105 + "data": [{
  3106 + "keySn": "1234567890",
  3107 + "keyValue":"1:8;2:7.5;3:2;4:3",
  3108 + "keyTime":3.2
  3109 + },
  3110 + {
  3111 + "keySn": "1234567891",
  3112 + "keyValue":"1:10;2:0",
  3113 + "keyTime":3.5
  3114 + }
  3115 + ]
  3116 +}
2353 3117 ```
2354 3118 \ No newline at end of file
... ...
通讯协议-SDK应用部分.md
... ... @@ -8,7 +8,7 @@ WSCmdApp协议接口说明
8 8  
9 9  
10 10 <div style="text-align: center;font-size: 30px;">
11   -Ver5.1.10
  11 +Ver5.1.11
12 12 </div>
13 13 <br>
14 14 <br>
... ... @@ -24,7 +24,7 @@ Ver5.1.10
24 24 <br>
25 25  
26 26 <div style="text-align: center;font-size: 30px;">
27   -二〇二四年
  27 +二〇二四年
28 28 </div>
29 29  
30 30 <br>
... ... @@ -38,7 +38,7 @@ Ver5.1.10
38 38  
39 39 起草人:陈定敏
40 40  
41   -最新版本作者: 陈定敏
  41 +最新版本作者: 刘琴
42 42 <br>
43 43 <br>
44 44 | 文档版本 | 日期 | 作者 | 版本说明 |
... ... @@ -52,6 +52,8 @@ Ver5.1.10
52 52 |5.1.8| 2024年07月01日|陈定敏|1. 投票反馈数据增加电池状态|
53 53 |5.1.9| 2024年07月19日|陈定敏|1. 增加获取SDK版本接口|
54 54 |5.1.10| 2024年09月03日|陈定敏|1. 移去主动获取在线信息接口|
  55 +|5.1.11| 2024年10月17日|刘琴|1. 增加设置基站容量的接口|
  56 +|5.1.12| 2024年11月01日|刘琴|1. 修改writeKeyMessage接口中keySnList说明|
55 57  
56 58 <br>
57 59  
... ... @@ -706,6 +708,7 @@ infos:{}
706 708  
707 709 fun: "keyPadAuthorize" //
708 710 baseId: "1"//收到的基站ID
  711 +keySnList:[{"keySn": "0112540402"}] //指定键盘SN,不可为空
709 712 params:{} //默认空
710 713  
711 714 | **Json字段** | **字段含义** | **赋值及含义** |
... ... @@ -3985,6 +3988,34 @@ params:{}//可不填
3985 3988 }
3986 3989 ```
3987 3990  
  3991 +写
  3992 +
  3993 +发送:
  3994 +
  3995 +fun: "writeBaseStationCapacity" //写基站容量
  3996 +baseId: 1//1~32 (必须指定基站)
  3997 +params:{"keypadNumber":"60","lock":"1"}//
  3998 +
  3999 +| **Json字段** | **字段含义** | **赋值及含义** |
  4000 +| --- | --- | --- |
  4001 +|keypadNumber|基站容量|基站键盘容量|
  4002 +|lock|是否锁定|现只支持设置1-锁定|
  4003 +
  4004 +
  4005 +指令样例:
  4006 +```json
  4007 +{
  4008 + "fun": "writeBaseStationPairMode",
  4009 + "baseId": 1,
  4010 + "baseSn":"2023031402",
  4011 + "params": {
  4012 + "keypadNumber": "60",
  4013 + "lock": "1"
  4014 + },
  4015 + "packetTag": "1"
  4016 +}
  4017 +```
  4018 +
3988 4019 返回
3989 4020  
3990 4021 接收:
... ... @@ -4601,7 +4632,7 @@ params:{} //数组对象,指定键盘需填
4601 4632 发送:
4602 4633 fun: "addWhiteList" //追加键盘
4603 4634 params:{} //键盘sn
4604   -keySnList:[ "keySn":"2111120140"] //列表不能为空
  4635 +keySnList:[ {"keySn":"2111120140"} ] //列表不能为空
4605 4636  
4606 4637 指令样例:
4607 4638  
... ... @@ -4650,8 +4681,7 @@ infos:{}//
4650 4681 发送:
4651 4682 fun: "delWhiteList" //踢出键盘,删除键盘
4652 4683 params:{} //键盘sn
4653   -keySnList:[ "keySn":"2111120140"] //列表不能为空
4654   -
  4684 +keySnList:[ {"keySn":"2111120140"} ] //列表不能为空
4655 4685  
4656 4686 指令样例:
4657 4687  
... ... @@ -4889,13 +4919,13 @@ infos:{ }//返回基站
4889 4919
4890 4920  
4891 4921 fun: "writeKeypadDevice" //写键盘外设,由led灯、蜂鸣器、马达组合
  4922 +keySnList:[{"keySn":"0007899478"}] //指定键盘SN列表,为空表示所有在线键盘
4892 4923 params:{} //
4893 4924  
4894 4925 数组对象,对象中的默认值为空字符串,各类(led、beep、motor)外设字段都不设置,表示该类不设置
4895 4926  
4896 4927 | **Json字段** | **字段含义** | **赋值及含义** |
4897 4928 | --- | --- | --- |
4898   -| keySn | 键盘SN |空字符串,为所有在线键盘|
4899 4929 | ledTimes | Led灯闪烁次数 | 0~255 (0是马上灭,255是长亮)|
4900 4930 | ledOnTime | Led灯每次开时间 |0~255 (单位0.1s)|
4901 4931 | ledOffTime | Led灯每次关时间 |0~255 (单位0.1s,为0就是连续亮)|
... ... @@ -5398,11 +5428,11 @@ infos:{&quot;keySn&quot;:&quot;1837454011&quot;,&quot;state&quot;:&quot;OK&quot;}//遥控键盘关机
5398 5428  
5399 5429
5400 5430 fun: "writeKeyMessage" //写键盘短消息
  5431 +keySnList:[{"keySn":"0007899478"}] //指定键盘SN列表,为空表示所有在线键盘
5401 5432 params:{} // 数组对象,对象中的默认值为空字符串
5402 5433  
5403 5434 | **Json字段** | **字段含义** | **赋值及含义** |
5404 5435 | --- | --- | --- |
5405   -|keySn|键盘SN|空字符串,为所有在线键盘|
5406 5436 |txt|短消息内容|字符串最长40字节[20汉字]|
5407 5437  
5408 5438  
... ... @@ -5523,7 +5553,6 @@ infos:{}//
5523 5553  
5524 5554 | **Json字段** | **字段含义** | **赋值及含义** |
5525 5555 | --- | --- | --- |
5526   -|keySn|键盘SN||
5527 5556 |state|返回信息|OK(成功)|
5528 5557  
5529 5558  
... ...
通讯协议-SDK应用部分[内部].md
... ... @@ -8,7 +8,7 @@ WSCmdApp协议接口说明
8 8  
9 9  
10 10 <div style="text-align: center;font-size: 30px;">
11   -Ver5.1.9
  11 +Ver5.1.11
12 12 </div>
13 13 <br>
14 14 <br>
... ... @@ -24,7 +24,7 @@ Ver5.1.9
24 24 <br>
25 25  
26 26 <div style="text-align: center;font-size: 30px;">
27   -二〇二年十月
  27 +二〇二年十月
28 28 </div>
29 29  
30 30 <br>
... ... @@ -38,7 +38,7 @@ Ver5.1.9
38 38  
39 39 起草人:陈定敏
40 40  
41   -最新版本作者: 陈定敏
  41 +最新版本作者: 刘琴
42 42 <br>
43 43 <br>
44 44 | 文档版本 | 日期 | 作者 | 版本说明 |
... ... @@ -51,6 +51,9 @@ Ver5.1.9
51 51 |5.1.7| 2024年04月22日|陈定敏|1. 增加后台签到接口<br>2. 增加键盘最终提交状态接口|
52 52 |5.1.8| 2024年07月01日|陈定敏|1. 投票反馈数据增加电池状态|
53 53 |5.1.9| 2024年07月19日|陈定敏|1. 增加获取SDK版本接口|
  54 +|5.1.10| 2024年09月03日|陈定敏|1. 外部版移去主动获取在线信息接口,版本号更新|
  55 +|5.1.11| 2024年10月17日|刘琴|1. 增加设置基站容量的接口|
  56 +|5.1.12| 2024年11月01日|刘琴|1. 修改writeKeyMessage接口中keySnList说明|
54 57  
55 58 <br>
56 59  
... ... @@ -705,6 +708,7 @@ infos:{}
705 708  
706 709 fun: "keyPadAuthorize" //
707 710 baseId: "1"//收到的基站ID
  711 +keySnList:[{"keySn": "0112540402"}] //指定键盘SN,不可为空
708 712 params:{} //默认空
709 713  
710 714 | **Json字段** | **字段含义** | **赋值及含义** |
... ... @@ -4920,6 +4924,34 @@ params:{}//可不填
4920 4924 }
4921 4925 ```
4922 4926  
  4927 +写
  4928 +
  4929 +发送:
  4930 +
  4931 +fun: "writeBaseStationCapacity" //写基站容量
  4932 +baseId: 1//1~32 (必须指定基站)
  4933 +params:{"keypadNumber":"60","lock":"1"}//
  4934 +
  4935 +| **Json字段** | **字段含义** | **赋值及含义** |
  4936 +| --- | --- | --- |
  4937 +|keypadNumber|基站容量|基站键盘容量|
  4938 +|lock|是否锁定|现只支持设置1-锁定|
  4939 +
  4940 +
  4941 +指令样例:
  4942 +```json
  4943 +{
  4944 + "fun": "writeBaseStationPairMode",
  4945 + "baseId": 1,
  4946 + "baseSn":"2023031402",
  4947 + "params": {
  4948 + "keypadNumber": "60",
  4949 + "lock": "1"
  4950 + },
  4951 + "packetTag": "1"
  4952 +}
  4953 +```
  4954 +
4923 4955 返回
4924 4956  
4925 4957 接收:
... ... @@ -5536,7 +5568,7 @@ params:{} //数组对象,指定键盘需填
5536 5568 发送:
5537 5569 fun: "addWhiteList" //追加键盘
5538 5570 params:{} //键盘sn
5539   -keySnList:[ "keySn":"2111120140"] //列表不能为空
  5571 +keySnList:[ {"keySn":"2111120140"} ] //列表不能为空
5540 5572  
5541 5573 指令样例:
5542 5574  
... ... @@ -5585,8 +5617,7 @@ infos:{}//
5585 5617 发送:
5586 5618 fun: "delWhiteList" //踢出键盘,删除键盘
5587 5619 params:{} //键盘sn
5588   -keySnList:[ "keySn":"2111120140"] //列表不能为空
5589   -
  5620 +keySnList:[ {"keySn":"2111120140"} ] //列表不能为空
5590 5621  
5591 5622 指令样例:
5592 5623  
... ... @@ -6062,13 +6093,13 @@ infos:{&quot;bic&quot;:&quot;A455&quot;, &quot;pid&quot;: &quot;EA10&quot;}//
6062 6093
6063 6094  
6064 6095 fun: "writeKeypadDevice" //写键盘外设,由led灯、蜂鸣器、马达组合
  6096 +keySnList:[{"keySn":"0007899478"}] //指定键盘SN列表,为空表示所有在线键盘
6065 6097 params:{} //
6066 6098  
6067 6099 数组对象,对象中的默认值为空字符串,各类(led、beep、motor)外设字段都不设置,表示该类不设置
6068 6100  
6069 6101 | **Json字段** | **字段含义** | **赋值及含义** |
6070 6102 | --- | --- | --- |
6071   -| keySn | 键盘SN |空字符串,为所有在线键盘|
6072 6103 | ledTimes | Led灯闪烁次数 | 0~255 (0是马上灭,255是长亮)|
6073 6104 | ledOnTime | Led灯每次开时间 |0~255 (单位0.1s)|
6074 6105 | ledOffTime | Led灯每次关时间 |0~255 (单位0.1s,为0就是连续亮)|
... ... @@ -6627,11 +6658,11 @@ infos:{&quot;value&quot;:&quot;0&quot;}//10秒
6627 6658  
6628 6659
6629 6660 fun: "writeKeyMessage" //写键盘短消息
  6661 +keySnList:[{"keySn":"0007899478"}] //指定键盘SN列表,为空表示所有在线键盘
6630 6662 params:{} // 数组对象,对象中的默认值为空字符串
6631 6663  
6632 6664 | **Json字段** | **字段含义** | **赋值及含义** |
6633 6665 | --- | --- | --- |
6634   -|keySn|键盘SN|空字符串,为所有在线键盘|
6635 6666 |txt|短消息内容|字符串最长40字节[20汉字]|
6636 6667  
6637 6668  
... ... @@ -6887,7 +6918,6 @@ infos:{}//
6887 6918  
6888 6919 | **Json字段** | **字段含义** | **赋值及含义** |
6889 6920 | --- | --- | --- |
6890   -|keySn|键盘SN||
6891 6921 |state|返回信息|OK(成功)|
6892 6922  
6893 6923  
... ...
通讯协议-教育新版-基站部分.md
... ... @@ -2093,7 +2093,7 @@ S5,电脑通知基站退出下载,基站通知所有(包括失败的)键
2093 2093 | 1 | BASECMD | 0xE1 基站管理类指令 |
2094 2094 | 2 | BASEID | 指定的基站编号,为0时候不指定 |
2095 2095 | 3 | CMDTYPE | 基站管理命令类型<br>22 基站下载多包 |
2096   -| 4 | MODE | 1 进入或退出下载状态 |
  2096 +| 4 | MODE | 1 进入或退出下载状态 <br><font color="#FF0000"> 31后台静默升级|
2097 2097 | 5 | ID/SN | 1:2字节ID模式; <br>2:4字节SN; <br>3:6字节SN模式 |
2098 2098 | 6 | ~~NC~~ ||
2099 2099 | 7 | DCMD | 模式 1进入下载 0退出下载 |
... ... @@ -2142,7 +2142,7 @@ S5,电脑通知基站退出下载,基站通知所有(包括失败的)键
2142 2142 | 1 | BASECMD | 0x61 基站管理类指令 |
2143 2143 | 2 | BASEID | 指定的基站编号,为0时候不指定 |
2144 2144 | 3 | CMDTYPE | 基站管理命令类型<br>22基站下载多包 |
2145   -| 4 | DOWNCMD | 4 下载具体数据--16字节 <br>6 下载具体数据—512字节每片段 <br>7 下载具体数据---64字节(48字节有效,区别于4类型的16字节有效) 10 基站问64字节包(根据代码补充)<br>11 基站问512字节包(根据代码补充) <br><font color="#FF0000">32 后台静默升级基站问64字节包(根据代码补充)等于普通模式的10 <br>33 后台静默升级 载具体数据---64字节 等于普通模式7|
  2145 +| 4 | DOWNCMD | 4 下载具体数据--16字节 <br>6 下载具体数据—512字节每片段 <br>7 下载具体数据---64字节(48字节有效,区别于4类型的16字节有效) 10 基站问64字节包(根据代码补充)<br>11 基站问512字节包(根据代码补充) <br><font color="#FF0000">37 后台静默升级;sdk向基站发送固件数据(相当于普通模式下7)|
2146 2146 | 5 | DOWNTYPE | 多包类型<br>30 短信广播信息(SDK组包模式) |
2147 2147 | 6 | DOWNID | 数据包标识码(DOWNTYPE=30时,是总包数)<br>文件下载模式时候是最高位地址 V4.52<br>由于非文件下载模式PACKH加上PACKL,只能下载65536字节,文件下载模式为支持大文件,用DOWNID作为高位地址,可以下载16384K字节 |
2148 2148 | 7 | PACKH | 数据段编号,0-255 |
... ... @@ -2158,7 +2158,7 @@ S5,电脑通知基站退出下载,基站通知所有(包括失败的)键
2158 2158 | 1 | BASECMD | 0xE1 基站管理类指令 |
2159 2159 | 2 | BASEID | 指定的基站编号,为0时候不指定 |
2160 2160 | 3 | CMDTYPE | 基站管理命令类型<br>22基站下载多包 |
2161   -| 4 | MODE | 4下载具体数据的应答或请求具体数据<br>6 下载具体数据的应答或请求传输—512字节每片段<br>7 下载具体数据(48字节有效) |
  2161 +| 4 | MODE | 4下载具体数据的应答或请求具体数据<br>6 下载具体数据的应答或请求传输—512字节每片段<br>7 下载具体数据(48字节有效)<br><font color="#FF0000">37 后台静默升级; |
2162 2162 | 5 | DOWNTYPE | 多包类型 |
2163 2163 | 6 | DOWNID | 数据包标识码<br>文件下载模式时候是最高位地址 V4.52<br>由于非文件下载模式PACKH加上PACKL,只能下载65536字节,文件下载模式为支持大文件,用DOWNID作为高位地址,可以下载16384K字节 |
2164 2164 | 7 | PACKH | 数据段编号,0-255 |
... ... @@ -2202,12 +2202,13 @@ S5,电脑通知基站退出下载,基站通知所有(包括失败的)键
2202 2202 | 1 | BASECMD | 0xE1 基站管理类指令 |
2203 2203 | 2 | BASEID | 指定的基站编号,为0时候不指定 |
2204 2204 | 3 | CMDTYPE | 基站管理命令类型<br>22基站下载多包 |
2205   -| 4 | MODE | 6 上报状态<br>9 上报状态,告诉sdk,底层键盘固件升级完成<br>10 向sdk请求(索要)数据包(数据包以1K为单位)byte6之后的数据无效 |
  2205 +| 4 | MODE | 6 上报状态<br>9 上报状态,告诉sdk,底层键盘固件升级完成<br>10 向sdk请求(索要)数据包(数据包以1K为单位)byte6之后的数据无效 <br><font color="#FF0000"> 39 后台静默升级 上报状态(相当于普通模式下的9) <br><font color="#FF0000"> 38 后台静默升级 向sdk请求(索要)数据包(数据包以1K为单位)(相当于普通模式下的10) |
2206 2206 | 5 | PACKH | 数据段编号,0-255<br>申请的数据包号PACK\_H |
2207 2207 | 6 | PACKL | 数据片编号, 0-15<br>申请的数据包号PACK\_L |
2208 2208 | 7 | Update status | 2-失败;(包括通知键盘进入下载和数据块下载失败;)<br>1-全部完成,电脑可以下一个流程(包括本次256字节成功、键盘进入下载、键盘退出下载) |
2209 2209 | 8-13 | Keypad ID/SN | ID/SN 号,固定6字节, 高位在前 |
2210   -| 14-24 | NC | 参数无意义 |
  2210 +| 14 | HW |键盘硬件版本 |
  2211 +| 15-24 | NC | 参数无意义 |
2211 2212  
2212 2213 电脑确认:
2213 2214  
... ... @@ -2746,11 +2747,13 @@ step3:sdk询问 数据是否接收正确;基站回复,如果不正确 sdk重
2746 2747 | 2 | BASEID | 指定的基站编号,为0时候不指定 |
2747 2748 | 3 | CMDTYPE | 基站管理命令类型41 sdk下载多包 |
2748 2749 | 4 | type | 1 要下载的数据信息 |
2749   -| 5 | DATA-type | 1:基站固件升级 <br>2:键盘固件升级; <br>3:快速下发; <br>4:广播 |
  2750 +| 5 | DATA-type | 1:基站固件升级 <br>2:键盘固件升级; <br>3:快速下发; <br>4:广播 <br><font color="#FF0000">32:后台静默升级键盘固件;|
2750 2751 | 6-9 | DATA_total| 数据总字节数 高位在前 |
2751 2752 | 10-11 | DATA crc | 数据crc 高位在前|
2752 2753 | 12-13 | byte per PACK |高位在前 每包数据最大字节长度:64... |
2753 2754 | other | default | |
  2755 +
  2756 +
2754 2757 基站应答:
2755 2758 | **字节** | **标识符** | **描述** |
2756 2759 | --- | --- | --- |
... ... @@ -2773,11 +2776,12 @@ step3:sdk询问 数据是否接收正确;基站回复,如果不正确 sdk重
2773 2776 | 2 | BASEID | 指定的基站编号,为0时候不指定 |
2774 2777 | 3 | CMDTYPE | 基站管理命令类型41 sdk下载多包 |
2775 2778 | 4 | type | 2 询问基站 |
2776   -| 5 | DATA-type | 1:基站固件升级 <br>2:键盘固件升级; <br>3:快速下发; <br>4:广播 |
  2779 +| 5 | DATA-type | 1:基站固件升级 <br>2:键盘固件升级; <br>3:快速下发; <br>4:广播 <br><font color="#FF0000">32:后台静默升级键盘固件;|
2777 2780 | 6-9 | DATA_total| 数据总字节数 高位在前|
2778 2781 | 10-11 | DATA crc | 数据crc 高位在前|
2779 2782 | 12-13 | byte per PACK |高位在前 每包数据最大字节长度:64 |
2780 2783 | other | default | |
  2784 +
2781 2785 基站应答:
2782 2786 | **字节** | **标识符** | **描述** |
2783 2787 | --- | --- | --- |
... ...