Commit 4195f9a2ebd66392c92b9906d4d79bcbbb4f6586

Authored by 刘琴
1 parent 2162eb1f

修改多基站状态返回主题写错的问题,同步外部版的协议内容

通讯协议-B200W-MQTT协议[内部].md
... ... @@ -473,7 +473,7 @@
473 473 参见基站连接变化系统通知
474 474  
475 475 ##### fEvtBsOnlineState
476   -- **主题**: <span class="yellowFill">/basestation/mutilBase/receive</span>
  476 +- **主题**: <span class="yellowFill">/basestation/multiBase/receive</span>
477 477 - **功能描述**:基站在线返回基站型号和基站SN
478 478 - **参数说明**
479 479  
... ...
通讯协议-B200W-MQTT协议[外].md
... ... @@ -13,10 +13,10 @@
13 13 background-color: yellow;
14 14 }
15 15 </style>
16   -# SunVote B200W MQTT通讯协议
17 16  
18 17 [TOC]
19 18  
  19 +# SunVote B200W MQTT通讯协议
20 20 # 功能说明
21 21  
22 22 ## 主题说明
... ... @@ -47,8 +47,9 @@
47 47 |fEvtXXX|指令事件 |调用对应指令后返回|
48 48  
49 49 ## 数据格式约定
50   -- 数据格式统一为**Json**格式,MQTT发送接收消息编码统一为**UTF-8**
  50 +- 数据格式统一为**Json**格式,发送接收消息编码统一为**UTF-8**
51 51 - Json通用格式如下:
  52 +
52 53 ```json
53 54 {
54 55 "fun":"xxx",
... ... @@ -69,6 +70,24 @@
69 70  
70 71  
71 72 ## 功能速查一览表
  73 +### 公共方法
  74 +可以在多种业务中调用的通用方法
  75 +|功能归类|功能|API指令|指令/系统事件|
  76 +|---|---|---|---|
  77 +|停止投票|可停止通过调用startXXX启动的答题业务|[stopKpVote](#stopkpvote)|[sEvtStateCode](#sevtstatecode)||
  78 +
  79 +### 公共事件
  80 +无需调用指令,自动返回的事件
  81 +|功能归类|功能|API指令|指令/系统事件|
  82 +|---|---|---|---|
  83 +|公共事件|指令接收状态|-|[sEvtStateCode](#sevtstatecode)|
  84 +|公共事件|基站连接状态变化|-|[sEvtBsConnectState](#sevtbsconnectstate)|
  85 +|公共事件|基站信道冲突|-|[sEvtBsChannelConflict](#sevtbschannelconflict)|
  86 +|公共事件|键盘上线通知|-|[sEvtBsKpOnlineMsg](#sevtbskponlinemsg)|
  87 +|公共事件|键盘刷卡事件|-|[sEvtBsNfcResults](#sevtbsnfcresults)|
  88 +|公共事件|键盘待机实时按键反馈|-|[sEvtKpRtFeedback](#sevtkprtfeedback)|
  89 +|公共事件|键盘举手键实时按键反馈|-|[sEvtKpHandUp](#sevtkphandup)|
  90 +
72 91 ### 基站管理
73 92 |功能归类|功能|API指令|指令/系统事件|
74 93 |---|---|---|---|
... ... @@ -79,6 +98,7 @@
79 98 |键盘上线通知|单个键盘上线系统通知|-|[sEvtBsKpOnlineMsg](#sevtbskponlinemsg)||
80 99 |识别设置 - 基站型号|读取基站型号|[getBsModel](#getbsmodel)|[fEvtBsModel](#fevtbsmodel)|
81 100 |识别设置 - 固件版本|获取基站固件版本|[getBsFWVersion](#getbsfwversion)|[fEvtBsFWVersion](#fevtbsfwversion)|
  101 +|组网设置 - 组网模式|获取基站组网模式|[getBsNetworkMode](#getbsnetworkmode)|[fEvtBsNetworkMode](#fevtbsnetworkmode)|
82 102 |组网设置 - 配对码|获取基站配对码|[getBsPairCode](#getbspaircode)|[fEvtBsPairCode](#fevtbspaircode)|
83 103 |组网设置 - 刷卡配对状态|获取刷卡配对状态|[getBsNfcLogin](#getbsnfclogin)|[fEvtBsNfcLogin](#fevtbsnfclogin)|
84 104 ||设置刷卡配对状态|[setBsNfcLogin](#setbsnfclogin)|[fEvtBsNfcLogin](#fevtbsnfclogin)||
... ... @@ -86,8 +106,10 @@
86 106 ||设置基站工作信道|[setBsChannel](#setbschannel)|[fEvtBsChannel](#fevtbschannel)||
87 107 |登录设置 - 登录名称|获取基站登录名称|[getBsSSID](#getbsssid)|[fEvtBsSSID](#fevtbsssid)|
88 108 ||设置基站登录名称|[setBsSSID](#setbsssid)|[fEvtBsSSID](#fevtbsssid)||
89   -|键盘统一设置 - 键盘语言|获取键盘语言|[getBsKpLanguage](#getbskplanguage)|[fEvtBsKpLanguage](#fevtbskplanguage)|
90   -||设置键盘语言|[setBsKpLanguage](#setbskplanguage)|[fEvtBsKpLanguage](#fevtbskplanguage)||
  109 +|登录设置 - 登录密码|获取基站登录密码|[getBsLoginPwd](#getbsloginpwd)|[fEvtBsLoginPwd](#fevtbsloginpwd)|
  110 +||设置基站登录密码|[setBsLoginPwd](#setbsloginpwd)|[fEvtBsLoginPwd](#fevtbsloginpwd)||
  111 +|登录设置 - 基站登录状态|获取基站登录状态|[getBsLoginState](#getbsloginstate)|[fEvtBsLoginState](#fevtbsloginstate)|
  112 +||设置基站登录状态|[setBsLoginState](#setbsloginstate)|[fEvtBsLoginState](#fevtbsloginstate)||
91 113 |配对模式 - 快速配对|启动基站快速配对|[startBsFastPair](#startbsfastpair)|[sEvtStateCode](#sevtstatecode)<br>[sEvtBsKpOnlineMsg](#sevtbskponlinemsg)|
92 114 ||停止基站快速配对|[stopBsFastPair](#stopbsfastpair)|[sEvtStateCode](#sevtstatecode)|
93 115 |白名单模式 - 白名单管理|获取白名单|[getBsWhitelist](#getbswhitelist)|[fEvtBsWhitelist](#fevtbswhitelist)|
... ... @@ -95,6 +117,8 @@
95 117 ||清空白名单|[clearBsWhitelist](#clearbswhitelist)|[sEvtStateCode](#sevtstatecode)<br>[fEvtBsWhitelist](#fevtbswhitelist)|
96 118 ||增加白名单|[addBsWhitelist](#addbswhitelist)|[sEvtStateCode](#sevtstatecode)<br>[fEvtAddBsWhitelist](#fevtaddbswhitelist)<br>[fEvtBsWhitelist](#fevtbswhitelist)|
97 119 ||删除白名单|[delBsWhitelist](#delbswhitelist)|[sEvtStateCode](#sevtstatecode)<br>[fEvtDelBsWhitelist](#fevtdelbswhitelist)<br>[fEvtBsWhitelist](#fevtbswhitelist)|
  120 +|基站加密 - 软件狗|获取基站软件狗|[getBsSoftwareKey](#getbssoftwarekey)|[fEvtBsSoftwareKey](#fevtbssoftwarekey)|
  121 +||设置基站软件狗|[setBsSoftwareKey](#setbssoftwarekey)|[fEvtBsSoftwareKey](#fevtbssoftwarekey)|
98 122 |网络设置 - TCP/IP参数|获取TCP/IP参数|[getBsTcpipParams](#getbstcpipparams)|[fEvtBsTcpipParams](#fevtbstcpipparams)|
99 123 ||设置TCP/IP参数|[setBsTcpipParams](#setbstcpipparams)|[fEvtBsTcpipParams](#fevtbstcpipparams)||
100 124 |网络设置 - MQTT参数|获取MQTT参数|[getBsMqttParams](#getbsmqttparams)|[fEvtBsMqttParams](#fevtbsmqttparams)|
... ... @@ -115,7 +139,7 @@
115 139 |功能归类|功能|API指令|指令事件|
116 140 |---|---|---|---|
117 141 |同步签到|启动同步签到|[startKpSignIn](#startkpsignin)|[sEvtStateCode](#sevtstatecode)<br>[fEvtKpSignIn](#fevtkpsignin)|
118   -||停止同步签到|[stopKpSignIn](#stopkpsignin)|[sEvtStateCode](#sevtstatecode)|
  142 +||停止同步签到|[stopKpVote](#stopkpvote)|[sEvtStateCode](#sevtstatecode)|
119 143 |随时签到|启动随时签到|[rtStartKpSignIn](#rtstartkpsignin)|[sEvtStateCode](#sevtstatecode)<br>[fEvtKpSignIn](#fevtkpsignin)|
120 144 ||停止随时签到|[rtStopKpSignIn](#rtstopkpsignin)|[sEvtStateCode](#sevtstatecode)|
121 145 ||实时PIN签到授权|[rtSetKpLoginAllowed](#rtsetkploginallowed)|[sEvtStateCode](#sevtstatecode)<br>[fEvtKpLoginAllowed](#fevtkploginallowed)|
... ... @@ -123,19 +147,44 @@
123 147 |功能归类|功能|API指令|指令事件|
124 148 |---|---|---|---|
125 149 |判断题|启动判断题答题|[startQATrueFalse](#startqatruefalse)|[sEvtStateCode](#sevtstatecode)<br>[fEvtQATrueFalse](#fevtqatruefalse)|
126   -||停止判断题答题|[stopQATrueFalse](#stopqatruefalse)|[sEvtStateCode](#sevtstatecode)|
  150 +||停止判断题答题|[stopKpVote](#stopkpvote)|[sEvtStateCode](#sevtstatecode)|
127 151 |选择题|启动选择题答题|[startQAChoice](#startqachoice)|[sEvtStateCode](#sevtstatecode)<br>[fEvtQAChoice](#fevtqachoice)|
128   -||停止选择题答题|[stopQAChoice](#stopqachoice)|[sEvtStateCode](#sevtstatecode)|
  152 +||停止选择题答题|[stopKpVote](#stopkpvote)|[sEvtStateCode](#sevtstatecode)|
129 153 |数字题|启动数字题答题|[startQANum](#startqanum)|[sEvtStateCode](#sevtstatecode)<br>[fEvtQANum](#fevtqanum)|
130   -||停止数字题答题|[stopQANum](#stopqanum)|[sEvtStateCode](#sevtstatecode)|
  154 +||停止数字题答题|[stopKpVote](#stopkpvote)|[sEvtStateCode](#sevtstatecode)|
131 155 |抢答题|启动抢答题答题|[startQAQuicker](#startqaquicker)|[sEvtStateCode](#sevtstatecode)<br>[fEvtQAQuicker](#fevtqaquicker)|
132   -||停止抢答题答题|[stopQAQuicker](#stopqaquicker)|[sEvtStateCode](#sevtstatecode)|
  156 +||停止抢答题答题|[stopKpVote](#stopkpvote)|[sEvtStateCode](#sevtstatecode)|
  157 +|待机实时反馈|设置待机实时反馈状态|[setKpStbResponse](#setkpstbresponse)|[fEvtKpStbResponse](#fevtkpstbresponse)<br>[sEvtKpRtFeedback](#sevtkprtfeedback)<br>[sEvtKpHandUp](#sevtkphandup)|
  158 +||设置待机实时反馈状态|[getKpStbResponse](#getkpstbresponse)|[fEvtKpStbResponse](#fevtkpstbresponse)|
133 159 ### 在线测验
134 160 |功能归类|功能|API指令|指令事件|
135 161 |---|---|---|---|
136 162 |标准测验|启动标准测验|[startKpExam](#startkpexam)|[sEvtStateCode](#sevtstatecode)<br>[fEvtKpExam](#fevtkpexam)<br>[fEvtFinalSubmit](#fevtfinalsubmit)|
137   -||停止标准测验|[stopKpExam](#stopkpexam)|[sEvtStateCode](#sevtstatecode)|
  163 +||停止标准测验|[stopKpVote](#stopkpvote)|[sEvtStateCode](#sevtstatecode)|
138 164 ||允许键盘提交后退回修改|[rtAllowEdited](#rtkpallowedited)|[sEvtStateCode](#sevtstatecode)<br>[fEvtFinalSubmit](#fevtfinalsubmit)|
  165 +|多科测验|启动多科测验|[startKpMultiExam](#startkpmultiexam)|[sEvtStateCode](#sevtstatecode)<br>[fEvtKpExam](#fevtkpexam)<br>[fEvtFinalSubmit](#fevtfinalsubmit)|
  166 +||停止标准测验|[stopKpVote](#stopkpvote)|[sEvtStateCode](#sevtstatecode)|
  167 +|自主录分|启动自主录分|[startKpScoreInput](#startkpscoreinput)|[sEvtStateCode](#sevtstatecode)<br>[fEvtKpScore](#fevtkpscore)<br>[fEvtFinalSubmit](#fevtfinalsubmit)|
  168 +||停止自主录分|[stopKpVote](#stopkpvote)|[sEvtStateCode](#sevtstatecode)|
  169 +
  170 +## 公共方法
  171 +### stopKpVote
  172 +- **主题**: /client/\${baseSN}/send
  173 +- **功能描述**:通用停止键盘答题方法,可以停止如同步签到、按键反馈、在线测验中调用startXXX方法启动的业务
  174 +- **参数说明**
  175 +
  176 +|参数名|类型|限制|非空|说明|
  177 +|-----|-----|-----|-----|-----|
  178 +|fun|string|-|是|事件类型|
  179 +|dataTag|string||否|数据包标识,不需要时可传空字符串|
  180 +
  181 +- **示例代码**
  182 +```json
  183 +{
  184 + "fun":"stopKpVote",
  185 + "dataTag":"1"
  186 +}
  187 +```
139 188  
140 189 ## 公共事件
141 190 ### sEvtBsConnectState
... ... @@ -146,7 +195,7 @@
146 195 |参数名|类型|限制|非空|说明|
147 196 |-----|-----|-----|-----|-----|
148 197 |fun|string|-|是|事件类型|
149   -|dataTag|string|-|否|数据包标识,不需要时可传空字符串|
  198 +|dataTag|string||否|数据包标识,不需要时可传空字符串|
150 199 |data|object|-|是|传送参数的对象|
151 200 |+baseModel|int||否|基站的型号码|
152 201 |+modelName|string||否|基站的型号名称|
... ... @@ -208,6 +257,7 @@
208 257 |dataTag|string|-|否|数据包标识,不需要时可传空字符串|
209 258 |data|object|-|是|传送参数的对象|
210 259 |+keySn|string||是|刷卡的键盘SN|
  260 +|+cardType|int||是|刷卡的键盘类型<br>1-NFC类型<br>2-M1类型|
211 261 |+value|int||是|刷卡的状态<br>1-成功<br>2-失败|
212 262  
213 263 - **示例代码**
... ... @@ -216,7 +266,8 @@
216 266 "fun":"sEvtBsNfcResults",
217 267 "dataTag":"1", //不需要时可传空字符串
218 268 "data":{
219   - "keySn":"1234567890",
  269 + "keySn":"1234567890",
  270 + "cardType":1,
220 271 "value":1
221 272 }
222 273 }
... ... @@ -248,6 +299,56 @@
248 299 }
249 300 }
250 301 ```
  302 +### sEvtKpRtFeedback
  303 +- **主题**: /basestation/\${baseSN}/receive
  304 +- **功能描述**:开启键盘实时反馈后,键盘按键时上报
  305 +- **参数说明**
  306 +
  307 +|参数名|类型|限制|非空|说明|
  308 +|---|---|---|---|---|
  309 +|fun|string|-|是|事件名称|
  310 +|dataTag|string|-|否|数据包标识|
  311 +|data|array|-|是|传送参数的对象数组|
  312 +|++keySn|string||是|键盘SN|
  313 +|++keyValue|string||是|键盘提交的按键值|
  314 +|++voltage|double||是|键盘电量|
  315 +|++retryCount|int||是|键盘提交数据的重发次数|
  316 +
  317 +- **示例代码**
  318 +```json
  319 +{
  320 + "fun":"sEvtKpRtFeedback",
  321 + "dataTag":"1",
  322 + "data":[{
  323 + "keySn":"1234567890",
  324 + "keyValue":"A",
  325 + "voltage":2.6,
  326 + "retryCount":1
  327 + }]
  328 +}
  329 +```
  330 +### sEvtKpHandUp
  331 +- **主题**: /basestation/\${baseSN}/receive
  332 +- **功能描述**:开启键盘举手功能后,键盘按举手键时上报
  333 +- **参数说明**
  334 +
  335 +|参数名|类型|限制|非空|说明|
  336 +|---|---|---|---|---|
  337 +|fun|string|-|是|事件名称|
  338 +|dataTag|string|-|否|数据包标识|
  339 +|data|object|-|是|传送参数的对象|
  340 +|+keySn|string||是|举手的键盘SN|
  341 +
  342 +- **示例代码**
  343 +```json
  344 +{
  345 + "fun":"sEvtKpHandUp",
  346 + "dataTag":"1",
  347 + "data":{
  348 + "keySn":"1234567890"
  349 + }
  350 +}
  351 +```
251 352 ### sEvtStateCode
252 353 - **主题**: /basestation/\${baseSN}/receive
253 354 - **功能描述**:返回基站接收指令状态信息
... ... @@ -277,6 +378,7 @@
277 378 |20008|value参数错误|
278 379 |30001|基站在答题中|
279 380 |30002|基站忙(内存不足)|
  381 +|30003|基站执行失败|
280 382 |40001|升级功能只能支持一个基站|
281 383 |50001|此功能必须指定基站|
282 384 |60001|此功能必须指定键盘SN|
... ... @@ -334,7 +436,7 @@
334 436 参见基站连接变化系统通知
335 437  
336 438 ##### fEvtBsOnlineState
337   -- **主题**: <span class="yellowFill">/basestation/mutilBase/receive</span>
  439 +- **主题**: <span class="yellowFill">/basestation/multiBase/receive</span>
338 440 - **功能描述**:基站在线返回基站型号和基站SN
339 441 - **参数说明**
340 442  
... ... @@ -496,6 +598,23 @@
496 598 ```
497 599 ### 组网设置
498 600 #### 方法
  601 +##### getBsNetworkMode
  602 +- **主题**:/client/\${baseSN}/send
  603 +- **功能描述**:获取基站组网模式
  604 +- **参数说明**
  605 +
  606 +|参数名|类型|限制|是否必填|说明|
  607 +|---|---|---|---|---|
  608 +|fun|string|-|是|指令名称|
  609 +|dataTag|string|-|否|数据包标识,可为空字符串|
  610 +
  611 +- **示例代码**
  612 +```json
  613 +{
  614 + "fun":"getBsNetworkMode",
  615 + "dataTag":"1"
  616 +}
  617 +```
499 618 ##### getBsPairCode
500 619 - **主题**:/client/\${baseSN}/send
501 620 - **功能描述**:获取基站配对码
... ... @@ -592,6 +711,28 @@
592 711 }
593 712 ```
594 713 #### 事件
  714 +##### fEvtBsNetworkMode
  715 +- **主题**: /basestation/\${baseSN}/receive
  716 +- **功能描述**:返回基站组网模式
  717 +- **参数说明**
  718 +
  719 +|参数名|类型|限制|非空|说明|
  720 +|---|---|---|---|---|
  721 +|fun|string|-|是|事件名称|
  722 +|dataTag|string|-|否|数据包标识,可传空字符串|
  723 +|data|object|-|是|传送参数的对象|
  724 +|+value|string||是|基站的组网模式<br>1-配对模式<br>2-白名单模式|
  725 +
  726 +- **示例代码**
  727 +```json
  728 +{
  729 + "fun":"fEvtBsNetworkMode",
  730 + "dataTag":"1",
  731 + "data":{
  732 + "value":"1"
  733 + }
  734 +}
  735 +```
595 736 ##### fEvtBsPairCode
596 737 - **主题**: /basestation/\${baseSN}/receive
597 738 - **功能描述**:返回基站配对码
... ... @@ -701,6 +842,86 @@
701 842 }
702 843 }
703 844 ```
  845 +##### getBsLoginPwd
  846 +- **主题**:/client/\${baseSN}/send
  847 +- **功能描述**:获取基站登录密码
  848 +- **参数说明**
  849 +
  850 +|参数名|类型|限制|是否必填|说明|
  851 +|---|---|---|---|---|
  852 +|fun|string|-|是|固定指令名称|
  853 +|dataTag|string|-|否|数据包标识|
  854 +
  855 +- **示例代码**
  856 +```json
  857 +{
  858 + "fun":"getBsLoginPwd",
  859 + "dataTag":"1"
  860 +}
  861 +```
  862 +##### setBsLoginPwd
  863 +- **主题**:/client/\${baseSN}/send
  864 +- **功能描述**:设置基站登录密码
  865 +- **参数说明**
  866 +
  867 +|参数名|类型|限制|是否必填|说明|
  868 +|---|---|---|---|---|
  869 +|fun|string|-|是|指令名称|
  870 +|dataTag|string|-|否|数据包标识,可为空字符串|
  871 +|data|object|-|是|传送参数的对象|
  872 +|+value|string||是|设置的基站登录密码,数字类型,最长4位,为空或设为0代表无需密码登录|
  873 +
  874 +- **示例代码**
  875 +```json
  876 +{
  877 + "fun":"setBsLoginPwd",
  878 + "dataTag":"1",
  879 + "data":{
  880 + "value":"1234"
  881 + }
  882 +}
  883 +```
  884 +##### getBsLoginState
  885 +获取基站登录名称
  886 +- **主题**:/client/\${baseSN}/send
  887 +- **功能描述**:获取基站登录状态
  888 +- **参数说明**
  889 +
  890 +|参数名|类型|限制|是否必填|说明|
  891 +|---|---|---|---|---|
  892 +|fun|string|-|是|固定指令名称|
  893 +|dataTag|string|-|否|数据包标识|
  894 +
  895 +- **示例代码**
  896 +```json
  897 +{
  898 + "fun":"getBsLoginState",
  899 + "dataTag":"1"
  900 +}
  901 +```
  902 +##### setBsLoginState
  903 +- **主题**:/client/\${baseSN}/send
  904 +- **功能描述**:设置基站登录状态
  905 +- **参数说明**
  906 +
  907 +|参数名|类型|限制|是否必填|说明|
  908 +|---|---|---|---|---|
  909 +|fun|string|-|是|指令名称|
  910 +|dataTag|string|-|否|数据包标识,可为空字符串|
  911 +|data|object|-|是|传送参数的对象|
  912 +|+value|string||是|设置是否允许键盘自主登入<br>0 - 不允许键盘登入<br>1 - 允许键盘登入|
  913 +
  914 +- **示例代码**
  915 +```json
  916 +{
  917 + "fun":"setBsLoginState",
  918 + "dataTag":"1",
  919 + "data":{
  920 + "value":"1"
  921 + }
  922 +}
  923 +```
  924 +
704 925 #### 事件
705 926 ##### fEvtBsSSID
706 927 - **主题**: /basestation/\${baseSN}/receive
... ... @@ -724,6 +945,59 @@
724 945 }
725 946 }
726 947 ```
  948 +##### fEvtBsLoginPwd
  949 +- **主题**: /basestation/\${baseSN}/receive
  950 +- **功能描述**:返回基站登录密码
  951 +- **参数说明**
  952 +
  953 +|参数名|类型|限制|非空|说明|
  954 +|---|---|---|---|---|
  955 +|fun|string|-|是|事件名称|
  956 +|dataTag|string|-|否|数据包标识,可传空字符串|
  957 +|data|object|-|是|传送参数的对象|
  958 +|+value|string||是|基站登录密码,返回值为0代表无需密码登录|
  959 +
  960 +- **示例代码**
  961 +```json
  962 +{
  963 + "fun":"fEvtBsLoginPwd",
  964 + "dataTag":"1",
  965 + "data":{
  966 + "value":"1234"
  967 + }
  968 +}
  969 +
  970 +//无需密码登录
  971 +{
  972 + "fun":"fEvtBsLoginPwd",
  973 + "dataTag":"1",
  974 + "data":{
  975 + "value":"0"
  976 + }
  977 +}
  978 +```
  979 +##### fEvtBsLoginState
  980 +- **主题**: /basestation/\${baseSN}/receive
  981 +- **功能描述**:返回基站登录状态
  982 +- **参数说明**
  983 +
  984 +|参数名|类型|限制|非空|说明|
  985 +|---|---|---|---|---|
  986 +|fun|string|-|是|事件名称|
  987 +|dataTag|string|-|否|数据包标识,可传空字符串|
  988 +|data|object|-|是|传送参数的对象|
  989 +|+value|string||是|基站登录状态|
  990 +
  991 +- **示例代码**
  992 +```json
  993 +{
  994 + "fun":"fEvtBsLoginState",
  995 + "dataTag":"1",
  996 + "data":{
  997 + "value":"1"
  998 + }
  999 +}
  1000 +```
727 1001 ### 键盘统一设置
728 1002 #### 方法
729 1003 ##### getBsKpLanguage
... ... @@ -1122,7 +1396,7 @@
1122 1396 |+port|int||是|端口,默认1883|
1123 1397 |+userName|string||否|连接服务器的用户名,可不设置|
1124 1398 |+password|string||否|连接服务器的密码,可不设置|
1125   -|+interval|int|>=10|否|基站连接服务器失败后重连的间隔时长,单位秒|
  1399 +|+interval|int|>=60|否|基站连接服务器失败后重连的间隔时长,单位秒|
1126 1400  
1127 1401 - **示例代码**
1128 1402 ```json
... ... @@ -1134,7 +1408,7 @@
1134 1408 "port":1883,
1135 1409 "userName":"",
1136 1410 "password":"",
1137   - "interval":30
  1411 + "interval":60
1138 1412 }
1139 1413 }
1140 1414 ```
... ... @@ -1199,7 +1473,70 @@
1199 1473 }
1200 1474 }
1201 1475 ```
  1476 +### 基站加密
  1477 +#### 方法
  1478 +##### getBsSoftwareKey
  1479 +- **主题**:/client/\${baseSN}/send
  1480 +- **功能描述**:获取基站软件狗密钥
  1481 +- **参数说明**
  1482 +
  1483 +|参数名|类型|限制|是否必填|说明|
  1484 +|---|---|---|---|---|
  1485 +|fun|string|-|是|指令名称|
  1486 +|dataTag|string|-|否|数据包标识,可为空字符串|
  1487 +
  1488 +- **示例代码**
  1489 +```json
  1490 +{
  1491 + "fun":"getBsSoftwareKey",
  1492 + "dataTag":"1"
  1493 +}
  1494 +```
  1495 +##### setBsSoftwareKey
  1496 +- **主题**:/client/\${baseSN}/send
  1497 +- **功能描述**:设置基站软件狗密钥
  1498 +- **参数说明**
  1499 +
  1500 +|参数名|类型|限制|是否必填|说明|
  1501 +|---|---|---|---|---|
  1502 +|fun|string|-|是|指令名称|
  1503 +|dataTag|string|-|否|数据包标识,可为空字符串|
  1504 +|data|object|-|是|传送参数的对象|
  1505 +|+value|string|-|是|基站软件狗密钥,长度不超过32字节|
  1506 +
  1507 +- **示例代码**
  1508 +```json
  1509 +{
  1510 + "fun":"setBsSoftwareKey",
  1511 + "dataTag":"1",
  1512 + "data":{
  1513 + "value":"sunvote123456"
  1514 + }
  1515 +}
  1516 +```
  1517 +#### 事件
  1518 +##### fEvtBsSoftwareKey
  1519 +- **主题**:/basestation/\${baseSN}/receive
  1520 +- **功能描述**:返回基站的软件狗密钥
  1521 +- **参数说明**
  1522 +
  1523 +|参数名|类型|限制|非空|说明|
  1524 +|---|---|---|---|---|
  1525 +|fun|string|-|是|指令名称|
  1526 +|dataTag|string|-|否|数据包标识,可为空字符串|
  1527 +|data|object|-|是|传送参数的对象|
  1528 +|+value|string||是|返回基站的软件狗密钥|
1202 1529  
  1530 +- **示例代码**
  1531 +```json
  1532 +{
  1533 + "fun":"fEvtBsSoftwareKey",
  1534 + "dataTag":"1",
  1535 + "data":{
  1536 + "value":"sunvote123456"
  1537 + }
  1538 +}
  1539 +```
1203 1540 ## 键盘管理
1204 1541 ### 交互设置
1205 1542 #### 方法
... ... @@ -1546,8 +1883,7 @@
1546 1883 }
1547 1884 }
1548 1885 ```
1549   -
1550   -##### stopKpSignIn
  1886 +<!-- ##### stopKpSignIn
1551 1887 - **主题**:/client/\${baseSN}/send
1552 1888 - **功能描述**:停止同步签到
1553 1889 - **参数说明**
... ... @@ -1563,7 +1899,10 @@
1563 1899 "fun":"stopKpSignIn",
1564 1900 "dataTag":"1"
1565 1901 }
1566   -```
  1902 +``` -->
  1903 +##### [stopKpVote](#stopkpvote)
  1904 +停止同步签到
  1905 +
1567 1906 #### 事件
1568 1907 ##### [sEvtStateCode](#sevtstatecode)
1569 1908 发送指令后返回接收状态
... ... @@ -1717,6 +2056,7 @@
1717 2056 |dataTag|string|-|否|数据包标识,可为空字符串|
1718 2057 |data|object|-|是|传送参数的对象|
1719 2058 |+keySns|array||是|指定的键盘SN数组,空数组表示全部在线键盘|
  2059 +|+count|int||是|题目数量,1-16,>1多题快答|
1720 2060 |+mode|int||是|1 - True/False 对/错 <br>2 - Yes/No 是/否<br> 3 - √/×|
1721 2061 |+allowModify|int||是|0 - 不允许修改<br>1 - 允许修改|
1722 2062 |+tip|string||否|提示的标题,长度不超过16字符|
... ... @@ -1729,13 +2069,14 @@
1729 2069 "dataTag":"1",
1730 2070 "data":{
1731 2071 "keySns":[],
  2072 + "count":1,
1732 2073 "mode":1,
1733 2074 "allowModify":1,
1734 2075 "tip":"请判断对错"
1735 2076 }
1736 2077 }
1737 2078 ```
1738   -##### stopQATrueFalse
  2079 +<!-- ##### stopQATrueFalse
1739 2080 - **主题**:/client/\${baseSN}/send
1740 2081 - **功能描述**:停止判断题答题
1741 2082 - **参数说明**
... ... @@ -1752,7 +2093,11 @@
1752 2093 "fun":"stopQATrueFalse",
1753 2094 "dataTag":"1"
1754 2095 }
1755   -```
  2096 +``` -->
  2097 +
  2098 +##### [stopKpVote](#stopkpvote)
  2099 +停止判断题答题
  2100 +
1756 2101 #### 事件
1757 2102 ##### [sEvtStateCode](#sevtstatecode)
1758 2103 发送指令后返回接收状态
... ... @@ -1800,6 +2145,7 @@
1800 2145 |dataTag|string|-|否|数据包标识,可为空字符串|
1801 2146 |data|object|-|是|传送参数的对象|
1802 2147 |+keySns|array||是|指定的键盘SN数组,空数组表示全部在线键盘|
  2148 +|+count|int||是|题目数量,1-16,>1多题快答<br>optionalN >1时无效|
1803 2149 |+mode|int||是|显示模式<br>1:显示字母(默认值) </br>2:显示数字 |
1804 2150 |+lessMode|int||是|迫选模式<br>0:可缺选(默认值) </br>1:不可缺选</br>2:允许重复输入</br>3:允许重复输入且不可缺选 |
1805 2151 |+options|int||是|选项数量,1≤M≤10(默认值4)|
... ... @@ -1816,6 +2162,7 @@
1816 2162 "data":{
1817 2163 "keySns":[],
1818 2164 "mode": 1,
  2165 + "count":1,
1819 2166 "lessMode": 0,
1820 2167 "options": 4,
1821 2168 "optionalN": 1,
... ... @@ -1824,7 +2171,7 @@
1824 2171 }
1825 2172 }
1826 2173 ```
1827   -##### stopQAChoice
  2174 +<!-- ##### stopQAChoice
1828 2175 - **主题**:/client/\${baseSN}/send
1829 2176 - **功能描述**:停止选择题答题
1830 2177 - **参数说明**
... ... @@ -1841,7 +2188,10 @@
1841 2188 "fun":"stopQAChoice",
1842 2189 "dataTag":"1"
1843 2190 }
1844   -```
  2191 +``` -->
  2192 +##### [stopKpVote](#stopkpvote)
  2193 +停止选择题答题
  2194 +
1845 2195 #### 事件
1846 2196 ##### [sEvtStateCode](#sevtstatecode)
1847 2197 发送指令后返回接收状态
... ... @@ -1889,7 +2239,7 @@
1889 2239 |data|object|-|是|传送参数的对象|
1890 2240 |+keySns|array||是|指定的键盘SN数组,空数组表示全部在线键盘|
1891 2241 |+mode|int||是|模式<br>0:无规则 (S6最多16位,T2最多14位)<br>1:带小数位上下限(T2不支持)|
1892   -|+digits|int||是|小数位数范围0-2,mode=1时有效
  2242 +|+digits|int||是|小数位数,范围0-2,mode=1时有效
1893 2243 |+numMin|int||是|可输入下限,mode=1有效,范围0-100|
1894 2244 |+numMax|int||是|可输入上限,mode=1有效,范围0-100|
1895 2245 |+allowModify|int||是|修改模式<br>0 - 不允许修改<br>1 - 允许修改|
... ... @@ -1912,7 +2262,7 @@
1912 2262 }
1913 2263 }
1914 2264 ```
1915   -##### stopQANum
  2265 +<!-- ##### stopQANum
1916 2266 - **主题**:/client/\${baseSN}/send
1917 2267 - **功能描述**:停止数字题答题
1918 2268 - **参数说明**
... ... @@ -1929,7 +2279,10 @@
1929 2279 "fun":"stopQANum",
1930 2280 "dataTag":"1"
1931 2281 }
1932   -```
  2282 +``` -->
  2283 +##### [stopKpVote](#stopkpvote)
  2284 +停止数字题答题
  2285 +
1933 2286 #### 事件
1934 2287 ##### [sEvtStateCode](#sevtstatecode)
1935 2288 发送指令后返回接收状态
... ... @@ -1947,7 +2300,7 @@
1947 2300 |++keySn|string||是|键盘SN|
1948 2301 |++keyValue|string||是|键盘提交的按键值|
1949 2302 |++keyTime|double||是|答题时间,从启动开始计算,单位秒|
1950   -|++voltage|double||是|键盘电量</font>|
  2303 +|++voltage|double||是|键盘电量|
1951 2304 |++retryCount|int||是|键盘提交数据的重发次数|
1952 2305  
1953 2306 - **示例代码**
... ... @@ -1994,7 +2347,7 @@
1994 2347 }
1995 2348 }
1996 2349 ```
1997   -##### stopQAQuicker
  2350 +<!-- ##### stopQAQuicker
1998 2351 - **主题**:/client/\${baseSN}/send
1999 2352 - **功能描述**:停止抢答答题
2000 2353 - **参数说明**
... ... @@ -2011,7 +2364,11 @@
2011 2364 "fun":"stopQAQuicker",
2012 2365 "dataTag":"1"
2013 2366 }
2014   -```
  2367 +``` -->
  2368 +
  2369 +##### [stopKpVote](#stopkpvote)
  2370 +停止抢答
  2371 +
2015 2372 #### 事件
2016 2373 ##### [sEvtStateCode](#sevtstatecode)
2017 2374 发送指令后返回接收状态
... ... @@ -2045,6 +2402,114 @@
2045 2402 }]
2046 2403 }
2047 2404 ```
  2405 +### 待机实时反馈
  2406 +#### 方法
  2407 +##### setKpStbResponse
  2408 +- **主题**:/client/\${baseSN}/send
  2409 +- **功能描述**:启动待机实时反馈
  2410 +- **参数说明**
  2411 +
  2412 +|参数名|类型|限制|是否必填|说明|
  2413 +|---|---|---|---|---|
  2414 +|fun|string|-|是|指令名称|
  2415 +|dataTag|string|-|否|数据包标识,可为空字符串|
  2416 +|data|object|-|是|传送参数的对象|
  2417 +|+state|int||是|启用待机实时反馈<br>0-不启用<br>1-启用|
  2418 +|+mode|int||是|启动待机反馈类型,state=1时有效<br>0-举手<br>1-指定按键反馈|
  2419 +|+keys|int||是|有效按键数量,state=1且mode=1时有效, 范围1-10|
  2420 +
  2421 +- **示例代码**
  2422 +```json
  2423 +//启用举手反馈
  2424 +{
  2425 + "fun":"setKpStbResponse",
  2426 + "dataTag":"1",
  2427 + "data":{
  2428 + "state":1,
  2429 + "mode":0
  2430 + }
  2431 +}
  2432 +//启用待机按键反馈
  2433 +{
  2434 + "fun":"setKpStbResponse",
  2435 + "dataTag":"1",
  2436 + "data":{
  2437 + "state":1,
  2438 + "mode":1,
  2439 + "keys":4
  2440 + }
  2441 +}
  2442 +//关闭待机按键反馈
  2443 +{
  2444 + "fun":"setKpStbResponse",
  2445 + "dataTag":"1",
  2446 + "data":{
  2447 + "state":0
  2448 + }
  2449 +}
  2450 +```
  2451 +
  2452 +##### getKpStbResponse
  2453 +- **主题**:/client/\${baseSN}/send
  2454 +- **功能描述**:获取实时反馈是否打开
  2455 +- **参数说明**
  2456 +
  2457 +|参数名|类型|限制|是否必填|说明|
  2458 +|---|---|---|---|---|
  2459 +|fun|string|-|是|指令名称|
  2460 +|dataTag|string|-|否|数据包标识,可为空字符串|
  2461 +
  2462 +- **示例代码**
  2463 +```json
  2464 +//启用举手反馈
  2465 +{
  2466 + "fun":"getKpStbResponse",
  2467 + "dataTag":"1"
  2468 +}
  2469 +```
  2470 +
  2471 +#### 事件
  2472 +##### fEvtKpStbResponse
  2473 +- **主题**:/basestation/\${baseSN}/receive
  2474 +- **功能描述**:返回当前待机按键反馈开启状态
  2475 +- **参数说明**
  2476 +
  2477 +|参数名|类型|限制|非空|说明|
  2478 +|---|---|---|---|---|
  2479 +|fun|string|-|是|指令名称|
  2480 +|dataTag|string|-|否|数据包标识,可为空字符串|
  2481 +|data|array|-|是|传送参数的对象数组|
  2482 +|+state|int||是|启用待机实时反馈<br>0-未启用<br>1-启用|
  2483 +|+mode|int||是|当前启动待机反馈类型,state=1时返回<br>0-举手<br>1-指定按键反馈|
  2484 +
  2485 +- **示例代码**
  2486 +```json
  2487 +//当前启用待机实时反馈,模式为指定按键反馈
  2488 +{
  2489 + "fun":"fEvtKpStbResponse",
  2490 + "dataTag":"1",
  2491 + "data": {
  2492 + "state": 1,
  2493 + "mode": 1
  2494 + }
  2495 +}
  2496 +
  2497 +//当前未启用待机反馈
  2498 +{
  2499 + "fun":"fEvtKpStbResponse",
  2500 + "dataTag":"1",
  2501 + "data": {
  2502 + "state": 0
  2503 + }
  2504 +}
  2505 +```
  2506 +
  2507 +##### [sEvtKpRtFeedback](#sevtkprtfeedback)
  2508 +返回待机时键盘返回的按键值
  2509 +
  2510 +##### [sEvtKpHandup](#sevtkphandup)
  2511 +启动待机按键反馈类型为举手提问时返回此事件
  2512 +
2048 2513 ## 在线测验
2049 2514 ### 标准测验
2050 2515 #### 方法
... ... @@ -2061,11 +2526,12 @@
2061 2526 |+examNo|int||是|0-9999<br>=0,新的测验<br>>0时,与上次启动卷号一致继续测验,不一致进入新的测验|
2062 2527 |+mode|int||是|显示模式<br>0-不显示开头<br>1-显示“Q”开头<br>2-显示“题”开头|
2063 2528 |+questions|array||是|题目详情|
2064   -|++symbol | string||是 | 题号前缀,分级标识为-,可为空,为空表示1级大题<br><font color="red">最多为三级题号,即最多可以设为x-x-</font>|
2065 2529 |++quesType | int||是| 题目类型<br>1:单选<br>2:多选(排序)<br>3:数字<br>4:判断 |
2066 2530 |++option |int||是 |选项数目<br> quesType = 1 有效。<br>quesType = 2 有效。<br>此项缺省时 默认4;<br>范围:1-10。|
2067   -|++startNo | int||是| 起始题号 |
2068   -|++count | int||是| 题目数量 |
  2531 +|++firstNo | int||否| 一级题号,mode=0 时有效,有效范围1-255,不传此字段或传0表示不生效 |
  2532 +|++secondNo | int||否| 二级题号,mode=0 时有效,有效范围1-255,不传此字段或传0表示不生效 |
  2533 +|++startNo | int||是| 最后一级题号起始题号<br>mode=0 时有效,范围1-255,mode=1或2时按顺序显示题号<br>说明:<br>firstNo和secondNo都未赋值时,此字段为一级题号<br>firstNo赋值,secondNo未赋值时,此字段为二级题号<br>secondNo赋值时,此字段为三级题号 |
  2534 +|++count | int||是| 相同参数的连续题目数量, >0 |
2069 2535  
2070 2536 - **示例代码**
2071 2537  
... ... @@ -2076,7 +2542,7 @@
2076 2542 "dataTag":"1",
2077 2543 "data":{
2078 2544 "mode": 1,
2079   - "examNo": 1,
  2545 + "examNo": 0,
2080 2546 "questions": [{
2081 2547 "quesType": 1, //单选题
2082 2548 "startNo": 1, //题号从1开始
... ... @@ -2093,7 +2559,7 @@
2093 2559 "dataTag":"1",
2094 2560 "data":{
2095 2561 "mode": 0,
2096   - "examNo": 1,
  2562 + "examNo": 0,
2097 2563 //第1、2题单选题,第3、4题多选题,第5题数字,第6题判断,共6题
2098 2564 "questions": [{
2099 2565 "quesType": 1, //单选题
... ... @@ -2124,26 +2590,26 @@
2124 2590 "dataTag":"1",
2125 2591 "data":{
2126 2592 "mode": 0,
2127   - "examNo": 1,
  2593 + "examNo": 0,
2128 2594 //第1-1、1-2题单选题,第2-1、2-2题多选题,第3-1题数字,第4-1题判断,共6题
2129 2595 "questions": [{
2130   - "symbol": "1-",
  2596 + "firstNo": 1,
2131 2597 "quesType": 1, //单选题
2132 2598 "startNo": 1, //题号从1-1开始
2133 2599 "count":2 //连续2题
2134 2600 },{
2135   - "symbol": "2-",
  2601 + "firstNo": 2,
2136 2602 "quesType": 2, //多选题
2137 2603 "startNo": 1, //题号从2-1开始
2138 2604 "count":2, //连续2题
2139 2605 "option":5
2140 2606 },{
2141   - "symbol": "3-",
  2607 + "firstNo": 3,
2142 2608 "quesType": 3, //数字题
2143 2609 "startNo": 1, //题号从3-1开始
2144 2610 "count":1 //连续1题
2145 2611 },{
2146   - "symbol": "4-",
  2612 + "firstNo": 4,
2147 2613 "quesType": 4, //判断题
2148 2614 "startNo": 1, //题号从4-1开始
2149 2615 "count":1 //连续1题
... ... @@ -2159,26 +2625,30 @@
2159 2625 "dataTag":"1",
2160 2626 "data":{
2161 2627 "mode": 0,
2162   - "examNo": 1,
  2628 + "examNo": 0,
2163 2629 //第1-1-1、1-1-2题单选题,第1-2-1、1-2-2题多选题,第2-1-1题数字,第3-1-1题判断,共6题
2164 2630 "questions": [{
2165   - "symbol": "1-1-",
  2631 + "firstNo": 1,
  2632 + "secondNo": 1,
2166 2633 "quesType": 1, //单选题
2167 2634 "startNo": 1, //题号从1-1-1开始
2168 2635 "count":2 //连续2题
2169 2636 },{
2170   - "symbol": "1-2-",
  2637 + "firstNo": 1,
  2638 + "secondNo": 2,
2171 2639 "quesType": 2, //多选题
2172 2640 "startNo": 1, //题号从1-2-1开始
2173 2641 "count":2, //连续2题
2174 2642 "option":5
2175 2643 },{
2176   - "symbol": "2-1-",
  2644 + "firstNo": 2,
  2645 + "secondNo": 1,
2177 2646 "quesType": 3, //数字题
2178 2647 "startNo": 1, //题号从2-1-1开始
2179 2648 "count":1 //连续1题
2180 2649 },{
2181   - "symbol": "3-1-",
  2650 + "firstNo": 3,
  2651 + "secondNo": 1,
2182 2652 "quesType": 4, //判断题
2183 2653 "startNo": 1, //题号从3-1-1开始
2184 2654 "count":1 //连续1题
... ... @@ -2194,7 +2664,7 @@
2194 2664 "dataTag":"1",
2195 2665 "data":{
2196 2666 "mode": 1,
2197   - "examNo": 1,
  2667 + "examNo": 0,
2198 2668 "questions": [{
2199 2669 "quesType": 1, //单选题
2200 2670 "startNo": 1, //题号从1开始
... ... @@ -2224,7 +2694,7 @@
2224 2694 "dataTag":"1",
2225 2695 "data":{
2226 2696 "mode": 2,
2227   - "examNo": 1,
  2697 + "examNo": 0,
2228 2698 "questions": [{
2229 2699 "quesType": 1, //单选题
2230 2700 "startNo": 1, //题号从1开始
... ... @@ -2246,7 +2716,8 @@
2246 2716 }
2247 2717 }
2248 2718 ```
2249   -##### stopKpExam
  2719 +
  2720 +<!-- ##### stopKpExam
2250 2721 - **主题**:/client/\${baseSN}/send
2251 2722 - **功能描述**:停止标准测验
2252 2723 - **参数说明**
... ... @@ -2263,7 +2734,10 @@
2263 2734 "fun":"stopKpExam",
2264 2735 "dataTag":"1"
2265 2736 }
2266   -```
  2737 +``` -->
  2738 +##### [stopKpVote](#stopkpvote)
  2739 +停止在线测验
  2740 +
2267 2741 ##### rtKpAllowEdited
2268 2742 - **主题**:/client/\${baseSN}/send
2269 2743 - **功能描述**:键盘提交后,允许键盘修改答案
... ... @@ -2302,8 +2776,10 @@
2302 2776 |dataTag|string|-|否|数据包标识,可为空字符串|
2303 2777 |data|array|-|是|传送参数的对象数组|
2304 2778 |++keySn|string||是|键盘SN|
2305   -|++keyValue|string||是|键盘提交的按键值,1:A;2:B表示第1题提交A,第二题提交B|
  2779 +|++keyValue|string||是|键盘提交的按键值,1:A;2:B表示第1题提交A,第二题提交B<br><font color="red">注意:如启动的是多科测验,键盘提交的题目序号对应启动时下发的题目总序号,不按科目区分</font>|
2306 2780 |++keyTime|double||是|答题时间,从启动开始计算,单位秒|
  2781 +|++voltage|double||是|键盘电量|
  2782 +|++retryCount|int||是|键盘提交数据的重发次数|
2307 2783  
2308 2784 - **示例代码**
2309 2785  
... ... @@ -2350,4 +2826,247 @@
2350 2826 "keyTime":3.2
2351 2827 }]
2352 2828 }
  2829 +```
  2830 +
  2831 +### 多科测验
  2832 +#### 方法
  2833 +##### startKpMultiExam
  2834 +- **主题**:/client/\${baseSN}/send
  2835 +- **功能描述**:启动多科测验
  2836 +- **参数说明**
  2837 +
  2838 +|参数名|类型|限制|是否必填|说明|
  2839 +|---|---|---|---|---|
  2840 +|fun|string|-|是|指令名称|
  2841 +|dataTag|string|-|否|数据包标识,可为空字符串|
  2842 +|data|object|-|是|传送参数的对象|
  2843 +|+examNo|int||是|0-9999<br>=0,新的测验<br>>0时,与上次启动卷号一致继续测验,不一致进入新的测验|
  2844 +|+mode|int||是|显示模式<br>0-不显示开头<br>1-显示“Q”开头<br>2-显示“题”开头|
  2845 +|+questions|array||是|题目详情|
  2846 +|++subject | int||是 | 科目序号,1-9,对应键盘中内置的科目1-9<br>键盘答题时可选择科目切换答题|
  2847 +|++quesType | int||是| 题目类型<br>1:单选<br>2:多选(排序)<br>3:数字<br>4:判断 |
  2848 +|++option |int||是 |选项数目<br> quesType = 1 有效。<br>quesType = 2 有效。<br>此项缺省时 默认4;<br>范围:1-10。|
  2849 +|++firstNo | int||否| 一级题号,mode=0 时有效,有效范围1-255,不传字段或传0表示不生效 |
  2850 +|++startNo | int||是| 起始题号,mode=0 时有效,范围1-255 <br>firstNo未赋值时,此字段表示一级题号<br>firstNo赋值时,此字段表示二级题号|
  2851 +|++count | int||是| 相同参数的连续题目数量, >0 |
  2852 +|+simParams|object||否|内部模拟测试参数设置对象|
  2853 +|++answer|array||是|预设提交的按键值<br>格式为"单选题答案,多选题答案;<br>数字题答案;判断题答案(1对2错)"<br>如["A","ABCD","10","1"]|
  2854 +
  2855 +- **示例代码**
  2856 +```json
  2857 +//自定义题号
  2858 +{
  2859 + "fun":"startKpMultiExam",
  2860 + "dataTag":"1",
  2861 + "data":{
  2862 + "mode": 0,
  2863 + "examNo": 0,
  2864 + "questions": [{
  2865 + "subject":1, //科目1
  2866 + //题号1-1 到1-10 共10题单选
  2867 + "firstNo": 1,
  2868 + "quesType": 1,
  2869 + "startNo": 1,
  2870 + "count":10
  2871 + }, {
  2872 + "subject":2, //科目2
  2873 + //题号2-2和2-3共两题 多选题,5个选项
  2874 + "firstNo": 2,
  2875 + "quesType": 2,
  2876 + "option": 5,
  2877 + "startNo": 2,
  2878 + "count":2
  2879 + }, {
  2880 + "subject":3, //科目3
  2881 + //题号3-1和3-2共两道数字题
  2882 + "firstNo": 3,
  2883 + "quesType": 3,
  2884 + "startNo": 1,
  2885 + "count":2
  2886 + }, {
  2887 + "subject":1, //科目1
  2888 + //题号4和5 ,判断题
  2889 + "quesType": 4,
  2890 + "startNo": 4,
  2891 + "count":2
  2892 + }],
  2893 + "simParams":{
  2894 + "answer":["A","ABCD","10","1"]
  2895 + }
  2896 + }
  2897 +}
  2898 +
  2899 +//显示Q开头
  2900 +{
  2901 + "fun":"startKpMultiExam",
  2902 + "dataTag":"1",
  2903 + "data":{
  2904 + "mode": 1,
  2905 + "examNo": 0,
  2906 + "questions": [{
  2907 + "subject":1,
  2908 + //Q1-Q20,单选题
  2909 + "quesType": 1,
  2910 + "startNo": 1,
  2911 + "count":20
  2912 + }],
  2913 + "simParams":{
  2914 + "answer":["A","","",""]
  2915 + }
  2916 + }
  2917 +}
  2918 +
  2919 +//显示题开头
  2920 +{
  2921 + "fun":"startKpMultiExam",
  2922 + "dataTag":"1",
  2923 + "data":{
  2924 + "mode": 2,
  2925 + "examNo": 0,
  2926 + "questions": [{
  2927 + "subject":1,
  2928 + //题1-题20,单选题
  2929 + "quesType": 1,
  2930 + "startNo": 1,
  2931 + "count":20
  2932 + }],
  2933 + "simParams":{
  2934 + "answer":["A","","",""]
  2935 + }
  2936 + }
  2937 +}
  2938 +```
  2939 +
  2940 +<!-- ##### stopKpMultiExam
  2941 +- **主题**:/client/\${baseSN}/send
  2942 +- **功能描述**:停止多科测验
  2943 +- **参数说明**
  2944 +
  2945 +|参数名|类型|限制|是否必填|说明|
  2946 +|---|---|---|---|---|
  2947 +|fun|string|-|是|指令名称|
  2948 +|dataTag|string|-|否|数据包标识,可为空字符串|
  2949 +
  2950 +- **示例代码**
  2951 +```json
  2952 +{
  2953 + "fun":"stopKpMultiExam",
  2954 + "dataTag":"1"
  2955 +}
  2956 +``` -->
  2957 +##### [stopKpVote](#stopkpvote)
  2958 +停止多科测验
  2959 +
  2960 +#### 事件
  2961 +##### [sEvtStateCode](#sevtstatecode)
  2962 +发送指令后返回接收状态
  2963 +
  2964 +##### [fEvtKpExam](#fevtkpexam)
  2965 +返回测验中键盘提交答题数据
  2966 +
  2967 +##### [fEvtFinalSubmit](#fevtfinalsubmit)
  2968 +返回键盘手动交卷标识
  2969 +
  2970 +### 自主录分
  2971 +#### 方法
  2972 +##### startKpScoreInput
  2973 +- **主题**:/client/\${baseSN}/send
  2974 +- **功能描述**:启动标准测验
  2975 +- **参数说明**
  2976 +
  2977 +|参数名|类型|限制|是否必填|说明|
  2978 +|---|---|---|---|---|
  2979 +|fun|string|-|是|指令名称|
  2980 +|dataTag|string|-|否|数据包标识,可为空字符串|
  2981 +|data|object|-|是|传送参数的对象|
  2982 +|+examNo|int||是|0-9999<br>=0,新的录分<br>>0时,与上次启动卷号一致继续录分,不一致进入新的录分|
  2983 +|+mode|int||是|录分模式<br>0-自主录分<br>1-交叉录分,需先输入录分的人员标识|
  2984 +|+questions|array||是|题目详情|
  2985 +|++max |int||是|可输入的最大值,<=100|
  2986 +|++digits|int||是|可输入的小数位数,范围0-2|
  2987 +|++startNo | int||是| 起始题号|
  2988 +|++count | int||是| 相同参数的题目数量,>0|
  2989 +
  2990 +- **示例代码**
  2991 +```json
  2992 +{
  2993 + "fun":"startKpScoreInput",
  2994 + "dataTag":"1",
  2995 + "data":{
  2996 + "mode": 0,
  2997 + "examNo": 0,
  2998 + "questions": [{
  2999 + //题号1 到 2 共2题,单题满分10分
  3000 + "max":10,
  3001 + "digits":1,
  3002 + "startNo": 1,
  3003 + "count":2
  3004 + }, {
  3005 + //题号3到6 共4道题,单题满分5
  3006 + "max":5,
  3007 + "digits":0,
  3008 + "startNo": 3,
  3009 + "count":4
  3010 + }]
  3011 + }
  3012 +}
  3013 +```
  3014 +<!--
  3015 +##### stopKpScoreInput
  3016 +- **主题**:/client/\${baseSN}/send
  3017 +- **功能描述**:停止自主录分
  3018 +- **参数说明**
  3019 +
  3020 +|参数名|类型|限制|是否必填|说明|
  3021 +|---|---|---|---|---|
  3022 +|fun|string|-|是|指令名称|
  3023 +|dataTag|string|-|否|数据包标识,可为空字符串|
  3024 +
  3025 +- **示例代码**
  3026 +```json
  3027 +{
  3028 + "fun":"stopKpScoreInput",
  3029 + "dataTag":"1"
  3030 +}
  3031 +``` -->
  3032 +##### [stopKpVote](#stopkpvote)
  3033 +停止自主录分
  3034 +
  3035 +#### 事件
  3036 +##### [sEvtStateCode](#sevtstatecode)
  3037 +发送指令后返回接收状态
  3038 +
  3039 +##### fEvtKpScore
  3040 +- **主题**:/basestation/\${baseSN}/receive
  3041 +- **功能描述**:返回键盘提交录分信息
  3042 +- **参数说明**
  3043 +
  3044 +|参数名|类型|限制|非空|说明|
  3045 +|---|---|---|---|---|
  3046 +|fun|string|-|是|指令名称|
  3047 +|dataTag|string|-|否|数据包标识,可为空字符串|
  3048 +|data|array|-|是|传送参数的对象数组|
  3049 +|++keySn|string||是|键盘SN|
  3050 +|++keyValue|string||是|键盘提交的分值,1:10;2:0表示第1题提交10分,第二题提交0分|
  3051 +|++keyTime|double||是|录分时间,从启动录分开始计算,单位秒|
  3052 +|++voltage|double||是|键盘电量|
  3053 +|++retryCount|int||是|键盘提交数据的重发次数|
  3054 +
  3055 +- **示例代码**
  3056 +```json
  3057 +{
  3058 + "fun":"fEvtKpScore",
  3059 + "dataTag":"1",
  3060 + "data": [{
  3061 + "keySn": "1234567890",
  3062 + "keyValue":"1:8;2:7.5;3:2;4:3",
  3063 + "keyTime":3.2
  3064 + },
  3065 + {
  3066 + "keySn": "1234567891",
  3067 + "keyValue":"1:10;2:0",
  3068 + "keyTime":3.5
  3069 + }
  3070 + ]
  3071 +}
2353 3072 ```
2354 3073 \ No newline at end of file
... ...