From ad44b4ccc11eff47b7965e647161aeaea9fb97f9 Mon Sep 17 00:00:00 2001 From: DMchen Date: Mon, 9 Oct 2023 16:36:23 +0800 Subject: [PATCH] 1.修改文档中的图片。 2.修改文档中出现的错误。 3.将内部版和外部版分开。 --- img/image1.png | Bin 18379 -> 0 bytes img/image2.png | Bin 25155 -> 0 bytes img/image3.png | Bin 21290 -> 0 bytes img/image4.png | Bin 6676 -> 0 bytes 通讯协议-SDK应用部分.md | 670 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 通讯协议-SDK应用部分[内部].md | 5956 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 6023 insertions(+), 603 deletions(-) create mode 100644 通讯协议-SDK应用部分[内部].md diff --git a/img/image1.png b/img/image1.png index 62625a1..78e0c0f 100644 Binary files a/img/image1.png and b/img/image1.png differ diff --git a/img/image2.png b/img/image2.png index 76064ae..88c4e81 100644 Binary files a/img/image2.png and b/img/image2.png differ diff --git a/img/image3.png b/img/image3.png index 0225365..a71b573 100644 Binary files a/img/image3.png and b/img/image3.png differ diff --git a/img/image4.png b/img/image4.png index edcdef8..f198e72 100644 Binary files a/img/image4.png and b/img/image4.png differ diff --git a/通讯协议-SDK应用部分.md b/通讯协议-SDK应用部分.md index 54d6e1f..bf2e03c 100644 --- a/通讯协议-SDK应用部分.md +++ b/通讯协议-SDK应用部分.md @@ -51,18 +51,18 @@ Ver5.1.1 # 系统概述 -SunVote -无线反馈系统是由手持的键盘、通讯基站、SunVoteWSTrayapp(托盘程序)、控制电脑组成的。控制电脑通过USB接口与基站连接。控制指令由控制电脑通过基站发送给键盘。 +WSCmdApp +无线反馈系统是由手持的键盘、通讯基站、WSCmdApp(控制台程序)、控制电脑组成的。控制电脑通过USB接口与基站连接。控制指令由控制电脑通过基站发送给键盘。 -SunVoteWSTrayapp可以让用户开发的应用程序与SunVote无线反馈系统通讯。SunVoteWSTrayapp托盘程序(下文用SunVoteWSTrayapp代替)提供websocket通讯方式,使用JSON通信格式,来实现互动系统的管理及投票指令的发送和接收功能。调用结构图如下:![](img/image1.png) +WSCmdApp可以让用户开发的应用程序与WSCmdApp无线反馈系统通讯。WSCmdApp控制台程序(下文用WSCmdApp代替)提供websocket通讯方式,使用JSON通信格式,来实现互动系统的管理及投票指令的发送和接收功能。调用结构图如下:![](img/image1.png) 如果用户想开发互联网应用,可以参考如下设计: ![](img/image2.png) -目前SunVoteWSTrayapp只支持Windows系统。用户只需运行SunVoteWSTrayapp程序即可。 +目前WSCmdApp只支持Windows系统。用户只需运行WSCmdApp程序即可。 -SunVoteWSTrayapp程序中config.ini配置文件中可设置WebSocket的端口,见以下位置: +WSCmdApp程序中config.ini配置文件中可设置WebSocket的端口,见以下位置: ![](img/image3.png) @@ -72,15 +72,15 @@ SunVoteWSTrayapp程序中config.ini配置文件中可设置WebSocket的端口, 1、协议通过Websocket封装后将具有更好的扩展空间和跨应用使用能力,为平台应用开发提供数据通讯基础。 -2、应用程序(后续基于SunVoteWSTrayapp开发的程序称为应用程序),基于业务发送指令到SunVoteWSTrayapp,SunVoteWSTrayapp收到指令后,完成对基站或键盘的操作后回复应用程序。 +2、应用程序(后续基于WSCmdApp开发的程序称为应用程序),基于业务发送指令到WSCmdApp,WSCmdApp收到指令后,完成对基站或键盘的操作后回复应用程序。 ![](img/image4.png) # 通讯接口设计概要 -应用程序和SunVoteWSTrayapp之间采用Json数据通信,通信的基本格式如下: +应用程序和WSCmdApp之间采用Json数据通信,通信的基本格式如下: -下发:应用程序 - \> SunVoteWSTrayapp +下发:应用程序 - \> WSCmdApp ```json { @@ -97,7 +97,7 @@ baseId:基站ID,用来区分基站标志,0代表所有基站,1代表1号 params:参数,功能相对于的参数,可以是数组或字段。 packerTag:这个是扩展字段,内容需要应用程序管理,功能相应的反馈指令packerTag位置会反馈相同字符串,方便应用程序跟踪记录。 -反馈:SunVoteWSTrayapp-\> 应用程序 +反馈:WSCmdApp-> 应用程序 ```json { @@ -110,7 +110,7 @@ packerTag:这个是扩展字段,内容需要应用程序管理,功能相应 fun: 功能对应的名称,如:"BaseStationID"读取基站id, " answerChoices" //选择题键盘反馈值. baseId: 基站ID,用来区分基站标志;0特殊代表所有基站,1代表1号基站。 -infos: SunVoteWSTrayapp反馈给APP层的数据。具体详见具体功能定义。 +infos: WSCmdApp反馈给APP层的数据。具体详见具体功能定义。 packetTag:这个是扩展字段,内容需要应用程序管理,反馈接收到的字符串。 字段值说明: @@ -119,36 +119,36 @@ packetTag:这个是扩展字段,内容需要应用程序管理,反馈接收 X\~Y:范围内的值特指整数。 # 通信方式 -数据交互采取发送\<\--\>应答的方式。应用程序发送数据到SunVoteWSTrayapp,SunVoteWSTrayapp收到后执行完成后回复。 +数据交互采取发送<-->应答的方式。应用程序发送数据到WSCmdApp,WSCmdApp收到后执行完成后回复。 -应用程序没有数据发送给SunVoteWSTrayapp时,需要发送心跳,SunVoteWSTrayapp收到心跳后会回复心跳,用于判断与应用程序的连接状态。(配置文件中,如果启用了心跳检查,应用程序如果未按要求发送心跳,SunVoteWSTrayapp会断开当前连接,重新尝试连接) +应用程序没有数据发送给WSCmdApp时,需要发送心跳,WSCmdApp收到心跳后会回复心跳,用于判断与应用程序的连接状态。(配置文件中,如果启用了心跳检查,应用程序如果未按要求发送心跳,WSCmdApp会断开当前连接,重新尝试连接) # 编程流程说明 -用户使用SunVoteWSTrayapp编程的基本流程如下: +用户使用WSCmdApp编程的基本流程如下: 配置参数:(可配置、详情见配置文件config.ini) -1、sdk-\>role websocket +1、sdk->role websocket 的运行模式【client:客户端模式,server:服务端模式】 。 -2、sdk-\> ip 如果websocket处于客户端模式 +2、sdk-> ip 如果websocket处于客户端模式 此ip为目标服务器ip;如果websocket处于服务端模式 此ip无效。 -3、sdk-\> port如果websocket处于客户端模式 +3、sdk-> port如果websocket处于客户端模式 此port为目标服务器port;如果websocket处于服务端模式 此port为本服务端port。 编程开发: 1、使用websocket通讯,IP为IP地址 -2、启动SunVoteApp.exe(SunVoteWSTrayapp)进程 +2、启动WSCmdApp.exe(WSCmdApp)进程 3、业务软件连接服务器后就可直接通信,通信的数据格式为JSON(UTF-8编码)。具体参数请看JSON指令说明部分。 -4、业务软件发送退出指令,SunVoteApp.exe(SunVoteWSTrayapp)收到指令后退出。 +4、业务软件发送退出指令,WSCmdApp.exe(WSCmdApp)收到指令后退出。 # JSON指令说明 -应用程序和SunVoteWSTrayapp之间采用Json数据通信,通信的基本格式如下: +应用程序和WSCmdApp之间采用Json数据通信,通信的基本格式如下: -下发:应用程序 - \>SunVoteWSTrayapp +下发:应用程序 ->WSCmdApp ```json { @@ -166,23 +166,23 @@ baseId:基站ID,数字类型,如果不指定具体基站ID,可以传0或 params:参数,可以为对象或者数组,用于伴随命令下发的数据附属包,详见具体功能定义。 packerTag: -数据标签字符串,用于区别当前指令与其他指令。应用程序发送给SunVoteWSTrayapp的,用户可以自定义数据(如果用户无自定义数据,可以为包序号,这样可以区分回复的数据回复的是哪个数据包)。SunVoteWSTrayapp回复应用程序时,直接回填应用程序收到的标签数据。 +数据标签字符串,用于区别当前指令与其他指令。应用程序发送给WSCmdApp的,用户可以自定义数据(如果用户无自定义数据,可以为包序号,这样可以区分回复的数据回复的是哪个数据包)。WSCmdApp回复应用程序时,直接回填应用程序收到的标签数据。 -反馈:SunVoteWSTrayapp -> 应用程序 +反馈:WSCmdApp -> 应用程序 ```json { fun: "" //功能定义 baseId: 1 //基站id,数字类型 infos: {} //信息对象/数组 - packetTag: "" // 数据包标签字符串,用于区别当前指令与其他指令。SunVoteWSTrayapp发送给应用程序的用自增数字标记。SunVoteWSTrayapp回复应用程序的,直接回填SunVoteWSTrayapp收到的标签。 + packetTag: "" // 数据包标签字符串,用于区别当前指令与其他指令。WSCmdApp发送给应用程序的用自增数字标记。WSCmdApp回复应用程序的,直接回填WSCmdApp收到的标签。 } ``` fun:同下发描述. baseId:同下发描述. -infos:SunVoteWSTrayapp反馈给应用程序层的数据。具体详见具体功能定义。 -packetTag:数据标签字符串,反馈功能函数的状态为应用程序附带的数据包,如果SunVoteWSTrayapp主动发送数据,是一组自增数据。 +infos:WSCmdApp反馈给应用程序层的数据。具体详见具体功能定义。 +packetTag:数据标签字符串,反馈功能函数的状态为应用程序附带的数据包,如果WSCmdApp主动发送数据,是一组自增数据。 字段值说明: 反馈infos中的状态字段state,OK表示成功,FAIL表示失败。 @@ -191,7 +191,7 @@ X\~Y:范围内的值特指整数。 ## 心跳 -应用程序发送心跳,SunVoteWSTrayapp回应,用于判断连接状态。 +应用程序发送心跳,WSCmdApp回应,用于判断连接状态。 发送: @@ -226,7 +226,7 @@ packetTag:"1"//数据包标签 ## 基站的连接、断开和复位 -应用程序与SunVoteWSTrayapp网络连接成功后(收到心跳),可发送连接基站指令。收到基站连接成功后就可以与SunVote无线反馈系统(基站、键盘)通讯。 +应用程序与WSCmdApp网络连接成功后(收到心跳),可发送连接基站指令。收到基站连接成功后就可以与SunVote无线反馈系统(基站、键盘)通讯。 ### 连接基站 @@ -288,7 +288,7 @@ packetTag:"1" //收到的packetTag ### 断开基站 -SunVoteWSTrayapp上报信息。 +WSCmdApp上报信息。 接收: @@ -302,9 +302,6 @@ packetTag:"1" { "fun": "disconnectBase", "baseId": 1, - "infos": { - "state": "OK" - }, "packetTag": "1" } ``` @@ -374,7 +371,7 @@ params:{} //无该值 指令样例: ```json -{...         +{        "keySnList": [{             "keySn": "1837454011"         }, {             @@ -429,7 +426,7 @@ params:{} //为空 指令样例: ```json -{...         +{        "keySnList": [{             "keySn": "1837454011"         }, {             @@ -488,13 +485,13 @@ params:{} |**Json字段**| **字段含义** | **赋值及含义**| | --- | --- | --- | -|bindMode| 签到模式| 1. 指定键签到
2. PIN码签到(默认值) | -| lessMode | 预留| 0- (默认值)| -| modifyMode | 修改模式 | 0-不可修改 1-可以修改(默认值)| -| limitNumber | 指定位数 | 0-不指定位数(默认值)
1-指定位数 | +|bindMode| 签到模式| 1:指定键签到
2:PIN码签到(默认值) | +| lessMode | 预留| 0:(默认值)| +| modifyMode | 修改模式 | 0:不可修改 1:可以修改(默认值)| +| limitNumber | 指定位数 | 0:不指定位数(默认值)
1:指定位数 | | options | 固定值 | 固定值10| | optionalN | 可选数字 | 1≤N≤10 (指定位数才需要设置, 10为0) | -| keyValue | 指定按键键值 | 0. 未指定[OK键签到]
1:1
2:2
3:3
4:4
5:5
6:6
7:7
8:8
9:9
10:0
11:上键
12:下键
13:OK
14:ESC
15: Menu | +| keyValue | 指定按键键值 | 0:未指定[OK键签到]
1:1
2:2
3:3
4:4
5:5
6:6
7:7
8:8
9:9
10:0
11:上键
12:下键
13:OK
14:ESC
15: Menu | | tipTitle | 提示标题 | 16个字节 | @@ -1103,7 +1100,7 @@ infos: {} #### 回传分数 -收到语音后,可对评测分数回传给键盘,详见[自定义信息](\l) +收到语音后,可对评测分数回传给键盘,详见[自定义信息] #### 停止作答 @@ -1143,7 +1140,7 @@ infos:{"state":"OK"}//返回状态,成功为OK #### 丢包信息 -语音结束时SunVoteWSTrayapp会发送该次语言的丢包率。 +语音结束时WSCmdApp会发送该次语言的丢包率。 注意:此数据只在语音实时流时有效。 @@ -1437,119 +1434,6 @@ infos:{"state":"OK"}//返回状态,成功为OK |B200-2.4G+S6|支持|按键模式(0-无规则 最多16位)| |B200-5.8G+T2|支持|按键模式(0-无规则 最多14位)
按键模式 (3-带小数位上下限)(不支持)| - -### 键盘测试 - -#### 开始测试 - -发送: - -fun: "startKeyPadTest" //开始键盘 -params:{} - -|Json字段|字段含义|赋值及含义| -|---|---|---| -|mode|测试模式|1-报告状态
2-按键模拟| -|keyTime|启动时间|0-60 单位秒 0马上执行 默认为0| -|gapTime|间隔时间|0-60 单位秒 0无效 默认为0| - - -指令样例: - -```json -{ - "fun": "startKeyPadTest", - "baseId": 0, - "params": { - "mode": "1", - "keyTime": "0", - "gapTime": "0" - }, - "packetTag": "1" -} -``` - -#### 接收作答 - -接收: - -fun: "answerKeyPadTest" //按键测试返回 -baseId: "1"//接收到指令的基站ID -infos: {} - -|Json字段|字段含义|赋值及含义| -|---|---|---| -|Time|答题时间|单位秒| -|keySn|键盘Sn|| -|hModel|键盘硬件型号|| -|keyValue|键盘键值|| -|ver|键盘软件版本|| -|volt|键盘电池电量|T2百分比值,S6无效| - - -指令样例: - -```json -{ - "fun": "answerKeyPadTest", - "baseId": 1, - "infos": { - "time": "2.42", - "keySn": "1479824643", - "hModel": "67", - "keyValue": "0", - "ver": "1.0.0", - "volt": "12" - }, - "packetTag": "1" -} -``` - -#### 停止作答 - -发送: - -fun: "stopKeyPadTest" //停止键盘测试 -params:{} //默认空 - -指令样例: - -```json -{ - "fun": "stopKeyPadTest", - "baseId": 0, - "packetTag": "1" -} -``` - -接收: - -fun: "stopKeyPadTest" //停止键盘测试 -baseId: "1"//收到的基站ID -infos:{"state":"OK"}//返回状态,成功为OK - -指令样例: - -```json -{ - "fun": "stopKeyPadTest", - "baseId": 1, - "infos": { - "state": "OK" - }, - "packetTag": "1" -} -``` - -#### 支持设备说明 - -|基站+键盘|支持/不支持|备注| -|---|---|---| -|B100-2.4G+S6|支持|键盘电池电量参数无效| -|B200-2.4G+S6|支持|键盘电池电量参数无效| -|B200-5.8G+T2|支持|| - - ### 多题题型 #### 开始测试 @@ -2862,9 +2746,8 @@ infos: {} | **Json字段** | **字段含义** | **赋值及含义** | | --- | --- | --- | -| time | 答题时间 |单位秒 | | keySn | 键盘Sn | | -| keyValue | 键值 | ABCD/1234/AA123 | +| keyValue | 键值 | ABCD/1234 | 指令样例: @@ -2888,7 +2771,6 @@ infos: {} | **Json字段** | **字段含义** | **赋值及含义** | | --- | --- | --- | -| time | 答题时间 |单位秒 | | keySn | 键盘Sn | | | keyValue | 键值 |1~2| @@ -2912,7 +2794,6 @@ infos: {} | **Json字段** | **字段含义** | **赋值及含义** | | --- | --- | --- | -| time | 答题时间 |单位秒 | | keySn | 键盘Sn | | | keyValue | 键值 |键盘提交的值| @@ -2971,259 +2852,6 @@ infos:{"state":"OK"}//返回状态,成功为OK | --- | --- | --- | | B200-2.4G+S6 | 支持 |需要指定键盘支持| - -### 自定义题型 - -#### 开始测试 - -发送: - -fun: "startKeyPadCustomQuestions" //开始 -params:{} - -| **Json字段** | **字段含义** | **赋值及含义** | -| --- | --- | --- | -|titleTable| 题目表 |数组[字符串]| -| optionTable | 选项表 |数组
"A,B,C,D" [默认]
" 1,2,3,4 "
" 对,错 "
" √,× "
" 同意,反对,弃权 "| -|ruleTable| 规则表 |数组[内容请参考“规则字段解释”]| -|permissionTable| 许可权限表 |数组| -|configTable| 配置表 |数组| - -许可权限表结构表说明 -| **Json字段** | **字段含义** | **赋值及含义** | -| --- | --- | --- | -|permission| 许可权限 |0:无[默认]
1: 允许
2: 禁止| -|KeySnList| 键盘列表 |数组
"1479824643"
"1479824644"
"1479824645"
"1479824646"| - - -配置表结构表说明 -| **Json字段** | **字段含义** | **赋值及含义** | -| --- | --- | --- | -|ruleType| 题编号 |1-200| -|titleID|题目表ID|1-200| -|optionID|选项表ID|1-200| -|ruleID|规则表ID|1-200| -|permissionID|许可权限表ID|1-200| - -规则字段解释: -规则类型1: - -| **Json字段** | **字段含义** | **赋值及含义** | -| --- | --- | --- | -|ruleType| 规则类型 |1| -|mode|模式|0: 默认(单选选择)
1: 纯数字组合 ,包含(上下键做负号与点号)
2: 填空自由组合,键盘自己实现输入方式
3: 多小题显示格式
4: 批次表决、批次评议
5: 批次评分
6: 名单选举
7: 累计投票、股权投票| -|modifyMode|修改模式|0:不可修改
1:可修改,默认| -|secrecyMode|保密模式|0:不保密,默认
1:保密| -|lessMode|迫选模式|0:不迫选,默认
1:迫选| -|repeat|重复模式|0:不限制,默认
1:单个选项只能选一次| -|sort|自动排序|0:保留输入顺序
1:选项自动排序,默认| -|max|最大可选人数|| -|min|最小可选人数|| -|maximum|最大可供选择项目数|1-10| -|maxOptions|可选出数目|最小值是1,最大值不超出maximum| -|topLimit|数字上限|浮点数格式的字符串| -|lowerLimit|数字下限|浮点数格式的字符串| - -规则类型2: - -| **Json字段** | **字段含义** | **赋值及含义** | -| --- | --- | --- | -|ruleType| 规则类型 |2| -|mode|模式|0:默认(选择)| -|modifyMode|修改模式|0:不可修改
1:可修改,默认| -|secrecyMode|保密模式|0:不保密,默认
1:保密| -|lessMode|迫选模式|0:不迫选,默认
1:迫选| -|repeat|重复模式|0:不限制,默认
1:单个选项只能选一次| -|sort|自动排序|0:保留输入顺序
1:选项自动排序,默认| -|max|最大可选人数|| -|min|最小可选人数|| -|retain|保留数字|数组 范围000-999| -|range|数字范围|数组| - -数字范围数据结构 -| **Json字段** | **字段含义** | **赋值及含义** | -| --- | --- | --- | -|rangeStart|数字范围开始|浮点数格式的字符串| -|rangeEnd|数字范围结束|浮点数格式的字符串| - - - -指令样例: -```json -{ - "fun": "startKeyPadCustomQuestions", - "baseId": 0, - "params": { - "titleTable": ["单选题", "数字表决"], - "optionTable": [ - ["A", "B", "C", "D"], - ["同意", "反对", "弃权"] - ], - "ruleTable": [{ - "ruleType": "1", - "mode": "0", - "modifyMode": "0", - "secrecyMode": "0", - "lessMode": "0", - "repeat": "0", - "sort": "1", - "max": "4", - "min": "1", - "maximum": "4", - "maxOptions": "1", - "topLimit": "100.0", - "lowerLimit": "0.1" - }, - { - "ruleType": "2", - "mode": "0", - "modifyMode": "0", - "secrecyMode": "0", - "lessMode": "0", - "repeat": "0", - "sort": "1", - "max": "4", - "min": "1", - "retain": ["777", "999"], - "range": [{ - "rangeStart": "1", - "rangeEnd": "100" - }, { - "rangeStart": "101", - "rangeEnd": "200" - }, { - "rangeStart": "201", - "rangeEnd": "300" - }] - } - ], - "permissionTable": [{ - "permission": "2", - "keySnList": ["1479824643", "1479824644", "1479824645", "1479824646"] - }, - { - "permission": "1", - "keySnList": ["1479824643", "1479824644", "1479824645", "1479824646"] - } - ], - "configTable": [{ - "number": "1", - "titleID": "1", - "optionID": "1", - "ruleID": "1", - "permissionID": "0" - }, - { - "number": "2", - "titleID": "2", - "optionID": "2", - "ruleID": "2", - "permissionID": "0" - } - ] - }, - "packetTag": "59" -} -``` - -接收: - -fun: "startKeyPadCustomQuestions" //开始自定义题型 -baseId: "1"//接收到指令的基站ID -infos:{"state":"OK"}//返回状态,成功为OK - -指令样例: - -```json -{ - "baseId": 1, - "fun": "startKeyPadCustomQuestions", - "infos": { - "state": "OK" - }, - "packetTag": "59" -} -``` - -#### 接收作答 - -接收: - -fun: "answerKeyPadCustomQuestions" //自定义题型返回 -baseId: "1"//接收到指令的基站ID -infos: {} - -数字范围数据结构 -| **Json字段** | **字段含义** | **赋值及含义** | -| --- | --- | --- | -|Time|答题时间|单位秒| -|keySn|键盘Sn|| -|Seq|题序号|| -|keyValue|键值|键盘提交的值| - - - -指令样例: -```json -{ - "fun": "answerKeyPadCustomQuestions", - "baseId": 1, - "infos": { - "time": "5.42", - "keySn": "1479824643", - "seq": "1", - "keyValue": "12" - }, - "packetTag": "1" -} -``` - - -#### 退出作答 - -发送: - -fun: "stopKeyPadCustomQuestions" //停止多题题型 -params:{} //默认空 - - -指令样例: -```json -{ - "fun": "stopKeyPadCustomQuestions", - "baseId": 0, - "packetTag": "1" -} -``` - - -接收: -fun: "stopKeyPadCustomQuestions" //停止键盘测试 -baseId: "1"//收到的基站ID -infos:{"state":"OK"}//返回状态,成功为OK - - -指令样例: -```json -{ - "fun": "stopKeyPadCustomQuestions", - "baseId": 1, - "infos": { - "state": "OK" - }, - "packetTag": "1" -} -``` - - -#### 支持设备说明 -| **基站+键盘** | **支持** | **备注** | -| --- | --- | --- | -| B200-2.4G+M6 | 支持 |需要指定键盘支持| - - - - ## NFC刷卡 刷卡流程: @@ -3392,7 +3020,6 @@ params:{}//可不填 写 发送: -发送: fun: "writeBaseStationChannel" //写基站频点 baseId: 1//1~32 (必须指定基站) params:{"value":"1"}//1~12 (频点) @@ -3442,6 +3069,7 @@ infos:{"value":"3"}//返回基站频点值 支持设备说明 | **基站+键盘** | **支持** | **备注** | | --- | --- | --- | +|B100-2.4GS+S6|支持单频点|频率范围1~80| |B200-2.4GS+S6|支持单频点|频率范围1~80| |B200-2.4GM+S6|支持多频点|频率范围1~80| |B200-5.8G+T2|支持单频点|频率范围1~12| @@ -3524,7 +3152,7 @@ infos:{"value":"1"}//返回键盘登录菜单显示值 发送: -fun: "readBaseStationModel" //读基站基站型号 +fun: "readBaseStationModel" //读基站型号 baseId: 0//0~32 (默认为0表示读取所有基站) params:{}//可不填 @@ -3545,7 +3173,7 @@ params:{}//可不填 fun: "baseStationModel" baseId: 1//基站ID -infos:{"value":"218"}//返回基站基站型号 +infos:{"value":"218"}//返回基站型号 指令样例: @@ -4708,110 +4336,6 @@ infos:{ }//返回基站 | --- | --- | --- | | B200-5.8G+T2 | 支持 || -#### 基站AES - -读 -发送: -fun: "readBaseStationAES" //读基站AES -baseId: 0// 0~32 (指令不发送baseID,默认为0表示读取所有基站) -params:{}//可不填 - -指令样例: -```json -{ - "fun":"readBaseStationAES", - "baseId":0, - "packetTag":"1" -} -``` - -写 -发送: -fun: "writeBaseStationAES" //写基站AES -baseId: 1 //1~32 (必须指定基站) -params:{"value":"0"}// - -| **Json字段** | **字段含义** | **赋值及含义** | -| --- | --- | --- | -| baseId | 基站ID | 1~32 | -| value | 加密模式 | 0:无线不加密
1:无线AES128加密
2:无线 AES256加密 | - -指令样例: -```json -{ - "fun":"writeBaseStationAES", - "baseId":1, - "packetTag":"1" -} -``` - -返回 -接收: -fun: "baseStationAES" -baseId: 1//基站ID -infos:{"value":"1"}//返回基站AES - -指令样例: -```json -{ - "fun": "baseStationAES", - "baseId": 1, - "infos": { - "value": "0" - }, - "packetTag": "1" -} -``` - -克隆参数 -发送: -fun: "copyBaseStationAES" //克隆基站AES参数 -baseId: 0 -params:{}// - -| **Json字段** | **字段含义** | **赋值及含义** | -| --- | --- | --- | -| destBaseID | 目标基站ID | 1~32 | -| sourceBaseID | 来源基站ID | 1~32 | - - -指令样例: -```json -{ - "fun": "copyBaseStationAES", - "baseId": 0, - "params": { - "destBaseID": "2", - "sourceBaseID": "1" - }, - "packetTag": "1" -} -``` - -返回 -接收: -fun: " copyBaseStationAES " -baseId: 1//基站ID -infos:{"value":"OK"}//返回状态 - -指令样例: -```json -{ - "fun": "baseStationAES", - "baseId": 1, - "infos": { - "value": "OK" - }, - "packetTag": "1" -} -``` -支持设备说明 - -| **基站+键盘** | **支持** | **备注** | -| --- | --- | --- | -| B200-2.4GM+S6 | 支持 | | - - ### 键盘 键盘写参数可以不指定键盘SN,则对所有在线键盘进行写操作,但没有键盘状态返回。如需指定键盘信息下发,则需要指定键盘SN,所有键盘状态返回。 @@ -4830,18 +4354,18 @@ params:{} // | **Json字段** | **字段含义** | **赋值及含义** | | --- | --- | --- | | keySn | 键盘SN |空字符串,为所有在线键盘| -| ledTimes | Led灯闪烁次数 | 0\~255 (0是马上灭,255是长亮)| -| ledOnTime | Led灯每次开时间 |0\~255 (单位0.1s)| -| ledOffTime | Led灯每次关时间 |0\~255 (单位0.1s,为0就是连续亮)| -| ledColorR | Led灯灯颜色,红值 |0\~255(现只支持0灭和1亮,,\>1也认为是1)| -| ledColorG | Led灯灯颜色,绿值 |0\~255(现只支持0灭和1亮,,\>1也认为是1)| -| ledColorB | Led灯灯颜色,蓝值 |0\~255(现只支持0灭和1亮,,\>1也认为是1)| -| beepTimes | 蜂鸣器响次数 | 0\~255 (0是马上响,255是长响) | -| beepOnTime | 蜂鸣器每次开时间 |0\~255 (单位0.1s)| -| beepOffTime | 蜂鸣器每次关时间 |0\~255 (单位0.1s,为0就是连续响)| -| motorTimes |马达震动次数|0\~255| -| motorOnTime | 马达每次开时间 |0\~255 (单位0.1s)| -| motorOffTime | 马达每次关时间 |0\~255 (单位0.1s,为0就是连续振动)| +| ledTimes | Led灯闪烁次数 | 0~255 (0是马上灭,255是长亮)| +| ledOnTime | Led灯每次开时间 |0~255 (单位0.1s)| +| ledOffTime | Led灯每次关时间 |0~255 (单位0.1s,为0就是连续亮)| +| ledColorR | Led灯灯颜色,红值 |0~255(现只支持0灭和1亮,,>1也认为是1)| +| ledColorG | Led灯灯颜色,绿值 |0~255(现只支持0灭和1亮,,>1也认为是1)| +| ledColorB | Led灯灯颜色,蓝值 |0~255(现只支持0灭和1亮,,>1也认为是1)| +| beepTimes | 蜂鸣器响次数 | 0~255 (0是马上响,255是长响) | +| beepOnTime | 蜂鸣器每次开时间 |0~255 (单位0.1s)| +| beepOffTime | 蜂鸣器每次关时间 |0~255 (单位0.1s,为0就是连续响)| +| motorTimes |马达震动次数|0~255| +| motorOnTime | 马达每次开时间 |0~255 (单位0.1s)| +| motorOffTime | 马达每次关时间 |0~255 (单位0.1s,为0就是连续振动)| 指令样例: @@ -4855,9 +4379,9 @@ params:{} // "ledTimes": "3", "ledOnTime": "1", "ledOffTime": "1", - "ledColorR": "128", - "ledColorG": "128", - "ledColorB": "128", + "ledColorR": "1", + "ledColorG": "1", + "ledColorB": "1", "beepTimes": "3", "beepOnTime": "1", "beepOffTime": "1", @@ -4901,9 +4425,9 @@ infos:{"state":"OK"}//返回状态,成功为OK "ledTimes": "3", "ledOnTime": "1", "ledOffTime": "1", - "ledColorR": "128", - "ledColorG": "128", - "ledColorB": "128", + "ledColorR": "1", + "ledColorG": "1", + "ledColorB": "1", "beepTimes": "3", "beepOnTime": "1", "beepOffTime": "1", @@ -4968,7 +4492,7 @@ params:{"mode":"1", "value":"4"}// | **Json字段** | **字段含义** | **赋值及含义** | | --- | --- | --- | -|mode|反馈模式| 0:不启用(默认0不启用)
1:通用键码,不显示| +|mode|反馈模式| 0:不启用(默认0不启用)
1:通用键码| |value|反馈最大有效按键|1\~10| 指令样例: @@ -5024,17 +4548,17 @@ infos:{ "mode":"1", "value":"4"}//返回键盘反馈模式参数值 fun: "immediateFeedback" baseId: 1//基站ID -infos:{ "keySn":"1", "value":"A"}//返回键盘反馈模式参数值 +infos:{ "keySn":"2307269906", "keyValue":"A"}//返回键盘反馈模式参数值 指令样例: ```json { - "fun": "immediateFeedback", "baseId": 1, + "fun": "immediateFeedback", "infos": { - "keySn": "1479824643", - "value": "A" + "keySn": "2307269906", + "keyValue": "A" }, "packetTag": "0" } @@ -5082,11 +4606,11 @@ infos:{ "keySn":"1479824643"}//返回键盘反馈模式参数值 接收: fun: " KeyboardHeartbeat" baseId: 1//基站ID -infos:{ "keySn":"1479824643","keyValue":"0","ver":"1.0.0","volt":"50"}//返回键盘反馈模式参数值 +infos:{ "hModel": "67","keySn":"1479824643","keyValue":"0","ver":"1.0.0","volt":"50"}//返回键盘反馈模式参数值 | **Json字段** | **字段含义** | **赋值及含义** | | --- | --- | --- | -|hModel|键盘型号|75: T2-5.8G
76: S6-2.4G| +|hModel|键盘型号|75: T2-5.8G
67: S6-2.4G| |keySn|键盘Sn|| |keyVer|键盘版本|| |Volt|键盘电量|T2百分比值,S6无效| @@ -5304,70 +4828,10 @@ infos:{}//数组对象,同发送的 | B100-2.4G+S6 | 支持 || | B200-2.4G+S6 | 支持 || -#### 指定键盘修改FSN[公司内部使用指令] - -写 - -fun: "writeKeyFSN" //写键盘修改FSN -params:{} // 数组对象,对象中的默认值为空字符串 - -| **Json字段** | **字段含义** | **赋值及含义** | -| --- | --- | --- | -|keySnOld|键盘旧SN|| -|keySnNew|键盘新SN|| - - -指令样例: - -指定键盘 - -```json -{ - "fun": "writeKeyFSN", - "params": { - "keySnList": [{ - "keySnOld": "0007899478", - "keySnNew": "0007899479" - }, - { - "keySnOld": "0007899488", - "keySnNew": "0007899489" - } - ] - }, - "packetTag": "1" -} -``` - -返回 - -fun: "writeKeyFSN" -infos:{}//数组对象,同发送的 - - -指令样例: - -```json -{ - "baseId": 3, - "fun": "writeKeyFSN", - "infos": { - "keySn": "0007899478", - "state": "OK" - }, - "packetTag": "1" -} -``` - -支持设备说明 -| **基站+键盘** | **支持** | **备注** | -| --- | --- | --- | -| B100-2.4G+S6 | 支持 || -| B200-2.4G+S6 | 支持 || ## 键盘显示设置 -注:返回指令中的\"baseId\":0, 可忽略不处理 +注:返回指令中的"baseId":0, 可忽略不处理 ### 空闲标题 diff --git a/通讯协议-SDK应用部分[内部].md b/通讯协议-SDK应用部分[内部].md new file mode 100644 index 0000000..ab348a6 --- /dev/null +++ b/通讯协议-SDK应用部分[内部].md @@ -0,0 +1,5956 @@ +
+
+
+ +
+WSCmdApp接口协议接口说明 +
+ + +
+Ver5.1.1 +
+
+
+
+
+
+
+ +
+长沙中天电子设计开发有限公司 +
+ +
+ +
+二〇二三年五月 +
+ +
+
+
+
+ +文件控制: + +文件名:WSCmdApp接口说明 + +起草人:陈定敏 + +最新版本作者: 陈定敏 +
+
+| 文档版本 | 日期 | 作者 | 版本说明 | +|---|---|---|---| +|5.1.1| 2023年10月09日|陈定敏|1. 初始版| + +
+ +[TOC] + +# 系统概述 + +WSCmdApp +无线反馈系统是由手持的键盘、通讯基站、WSCmdApp(控制台程序)、控制电脑组成的。控制电脑通过USB接口与基站连接。控制指令由控制电脑通过基站发送给键盘。 + +WSCmdApp可以让用户开发的应用程序与无线反馈系统通讯。WSCmdApp控制台程序(下文用WSCmdApp代替)提供websocket通讯方式,使用JSON通信格式,来实现互动系统的管理及投票指令的发送和接收功能。调用结构图如下:![](img/image1.png) + +如果用户想开发互联网应用,可以参考如下设计: + +![](img/image2.png) + +目前WSCmdApp只支持Windows系统。用户只需运行WSCmdApp程序即可。 + +WSCmdApp程序中config.ini配置文件中可设置WebSocket的端口,见以下位置: + +![](img/image3.png) + +上述配置#号开头行,为注释行,对下面一个配置进行说明。每个配置参考上面说明。 + +# 设计目的 + +1、协议通过Websocket封装后将具有更好的扩展空间和跨应用使用能力,为平台应用开发提供数据通讯基础。 + +2、应用程序(后续基于WSCmdApp开发的程序称为应用程序),基于业务发送指令到WSCmdApp,WSCmdApp收到指令后,完成对基站或键盘的操作后回复应用程序。 + +![](img/image4.png) + +# 通讯接口设计概要 + +应用程序和WSCmdApp之间采用Json数据通信,通信的基本格式如下: + +下发:应用程序 - > WSCmdApp + +```json +{ + fun: "" // 功能定义 + baseId: 1 // 基站id,数字类型 + params: {} //参数对象/数组 + packetTag: "" //数据包标签字符串 +} +``` + +fun 为功能对应的名称 如:"readBaseStationID" 读取基站的id,"startChoices" //开始选择题, "stopChoices" //停止选择题. + +baseId:基站ID,用来区分基站标志,0代表所有基站,1代表1号基站。 +params:参数,功能相对于的参数,可以是数组或字段。 +packerTag:这个是扩展字段,内容需要应用程序管理,功能相应的反馈指令packerTag位置会反馈相同字符串,方便应用程序跟踪记录。 + +反馈:WSCmdApp-> 应用程序 + +```json +{ + fun: "" //功能定义 + baseId: 1 //基站id,数字类型 + infos: {} //信息对象/数组 + packetTag: "" // 数据包标签字符串。 +} +``` + +fun: 功能对应的名称,如:"BaseStationID"读取基站id, " answerChoices" //选择题键盘反馈值. +baseId: 基站ID,用来区分基站标志;0特殊代表所有基站,1代表1号基站。 +infos: WSCmdApp反馈给APP层的数据。具体详见具体功能定义。 +packetTag:这个是扩展字段,内容需要应用程序管理,反馈接收到的字符串。 + +字段值说明: +反馈infos中的状态字段state,OK表示成功,FAIL表示失败。 +反馈infos中的硬件参数字段的值,FAIL表示失败,其他值为成功。 +X\~Y:范围内的值特指整数。 + +# 通信方式 +数据交互采取发送<-->应答的方式。应用程序发送数据到WSCmdApp,WSCmdApp收到后执行完成后回复。 + +应用程序没有数据发送给WSCmdApp时,需要发送心跳,WSCmdApp收到心跳后会回复心跳,用于判断与应用程序的连接状态。(配置文件中,如果启用了心跳检查,应用程序如果未按要求发送心跳,WSCmdApp会断开当前连接,重新尝试连接) + +# 编程流程说明 + +用户使用WSCmdApp编程的基本流程如下: +配置参数:(可配置、详情见配置文件config.ini) + +1、sdk->role websocket +的运行模式【client:客户端模式,server:服务端模式】 。 + +2、sdk-> ip 如果websocket处于客户端模式 +此ip为目标服务器ip;如果websocket处于服务端模式 此ip无效。 + +3、sdk-> port如果websocket处于客户端模式 +此port为目标服务器port;如果websocket处于服务端模式 +此port为本服务端port。 +编程开发: + +1、使用websocket通讯,IP为IP地址 +2、启动WSCmdApp.exe(WSCmdApp)进程 +3、业务软件连接服务器后就可直接通信,通信的数据格式为JSON(UTF-8编码)。具体参数请看JSON指令说明部分。 +4、业务软件发送退出指令,WSCmdApp.exe(WSCmdApp)收到指令后退出。 + +# JSON指令说明 + +应用程序和WSCmdApp之间采用Json数据通信,通信的基本格式如下: + +下发:应用程序 ->WSCmdApp + +```json +{ + fun: "" // 功能定义 + baseId: 1 // 基站id,数字类型 + params: {} //参数对象/数组 + packetTag: "" //数据包标签字符串 +} +``` + +fun:为功能定义,下发命令,要下发的命令函数 + +baseId:基站ID,数字类型,如果不指定具体基站ID,可以传0或者不传该Key值。如果要指定多个基站ID,则需要多次下发该命令,切换不同的基站ID进行发送。 + +params:参数,可以为对象或者数组,用于伴随命令下发的数据附属包,详见具体功能定义。 + +packerTag: +数据标签字符串,用于区别当前指令与其他指令。应用程序发送给WSCmdApp的,用户可以自定义数据(如果用户无自定义数据,可以为包序号,这样可以区分回复的数据回复的是哪个数据包)。WSCmdApp回复应用程序时,直接回填应用程序收到的标签数据。 + +反馈:WSCmdApp -> 应用程序 + +```json +{ + fun: "" //功能定义 + baseId: 1 //基站id,数字类型 + infos: {} //信息对象/数组 + packetTag: "" // 数据包标签字符串,用于区别当前指令与其他指令。WSCmdApp发送给应用程序的用自增数字标记。WSCmdApp回复应用程序的,直接回填WSCmdApp收到的标签。 +} +``` + +fun:同下发描述. +baseId:同下发描述. +infos:WSCmdApp反馈给应用程序层的数据。具体详见具体功能定义。 +packetTag:数据标签字符串,反馈功能函数的状态为应用程序附带的数据包,如果WSCmdApp主动发送数据,是一组自增数据。 + +字段值说明: +反馈infos中的状态字段state,OK表示成功,FAIL表示失败。 +反馈infos中的硬件参数字段的值,FAIL表示失败,其他值为成功。 +X\~Y:范围内的值特指整数。 + +## 心跳 + +应用程序发送心跳,WSCmdApp回应,用于判断连接状态。 + +发送: + +fun: "heartBeat" //心跳 +baseId: //无该值 +params:{}//无该值 +packetTag:"1"//收到的packetTag,可用于分析通信状态 + +指令样例: +```json +{ + "fun": "heartBeat", + "packetTag": "1" +} +``` + +接收: + +fun: "heartBeat" //心跳 +baseId: //无该值 +infos:{}//无该值 +packetTag:"1"//数据包标签 + +指令样例: + +```json +{ + "fun": "heartBeat", + "packetTag": "1" +} +``` + +## 基站的连接、断开和复位 + +应用程序与WSCmdApp网络连接成功后(收到心跳),可发送连接基站指令。收到基站连接成功后就可以与SunVote无线反馈系统(基站、键盘)通讯。 + +### 连接基站 + +读取在线基站状态 +发送: +fun: "readConnectBase" //连接基站 +baseId:0 //基站ID +params:{} //为空 +packetTag:"1" // + +指令样例: +```json +{ + "fun": "readConnectBase", + "baseId": 0, + "packetTag": "1" +} +``` + +接收: + +fun: "connectBase" //连接基站 +baseId:1 //基站ID +infos: {"state":"OK"} //OK连接成功 +packetTag:"1" //收到的packetTag + +指令样例: +```json +{ + "fun": "connectBase", + "baseId": 1, + "infos": { + "state": "OK" + }, + "packetTag": "1" +} +``` + +基站连接后主动上报,WSCmdApp上报信息。 + +接收: + +fun: "connectBase" //连接基站 +baseId:1 //基站ID +infos: {"state":"OK"} //OK连接成功 +packetTag:"1" //收到的packetTag + +指令样例: +```json +{ + "fun": "connectBase", + "baseId": 1, + "infos": { + "state": "OK" + }, + "packetTag": "1" +} +``` + +### 断开基站 + +WSCmdApp上报信息。 + +接收: + +fun: "disconnectBase" //断开基站 +baseId:1 //基站ID +infos: {} //无该值 +packetTag:"1" + +指令样例: +```json +{ + "fun": "disconnectBase", + "baseId": 1, + "packetTag": "1" +} +``` + + +### 复位基站 + +发送: + +fun: "resetBase" //复位基站 +baseId:1, +params:{} //无该值 + +指令样例: + +```json +{ + "fun": "resetBase", + "baseId": 1, + "packetTag": "1" +} +``` + + + +注意:B200支持此命令 + +## 答题 + +答题流程: + +![](img/image5.png) + + +在开始作答,各类答题都可指定显示标题和开始作答键盘,也可以为空。 + +顶层对象增加的字段如下: + + +|**Json字段**|**字段含义**|**赋值及含义**| +| --- | --- | --- | +|keySnList|指定键盘列表|keySn数组,为空表示所有键盘都参与。| + + + +在停止作答时,各类答题都可指定停止作答键盘,也可以为空。 + +顶层对象增加的字段如下: + +|**Json字段**|**字段含义**|**赋值及含义**| +| --- | --- | --- | +|keySnList|指定键盘列表|keySn数组,为空表示所有键盘都参与。| + + + +如果指定了键盘,则会逐个返回指定键盘的接收状态。收到的infos数组对象如下: + +|**Json字段**|**字段含义**|**赋值及含义**| +| --- | --- | --- | +|keySn|键盘Sn|| +|state|状态|OK表示成功| + + + +开始作答 + +指令样例: + +```json +{  + "keySnList": [{             + "keySn": "1837454011"         + }, {             + "keySn": "1837454012"         + }] +} +``` + + + +键盘的接收状态返回 + +fun: "startXXKeypad" //开始XX作答键盘(XX是开始作答对应具体名称) +baseId: 1//接收到指令的基站ID +infos:{}//数组对象 +指令样例: + +```json +{     + "fun": "startBindKeypad", + "baseId": 1, + "infos": [{             + "keySn": "1837454011", + "state": "OK"         + }], + "packetTag": "1" +} +``` + + + +回复键盘的接收状态返回 + +发送: + +fun: "startXXKeypad" //开始xx作答键盘 +baseId:"1"//收到的基站ID +params:{} //为空 + +指令样例: + +```json +{     + "fun": "startBindKeypad", + "baseId": 1, + "packetTag": "1" +} +``` + +停止作答 + +指令样例: + +```json +{ + "keySnList": [{             + "keySn": "1837454011"         + }, {             + "keySn": "1837454012"         + }] +} +``` + +键盘的接收状态返回 + +fun: "stopXXKeypad" //停止XX作答键盘(XX是停止作答对应具体名称) +baseId: 1//接收到指令的基站ID +infos:{}//数组对象 + +指令样例: + +```json +{ + "fun": "stopBindKeypad", + "baseId": 1, + "infos": [{ + "keySn": "1837454011", + "state": "OK" + }], + "packetTag": "1" +} +``` + +回复键盘的接收状态返回 + +发送: + +fun: "stopXXKeypad" //停止xx作答键盘 +baseId: "1"//收到的基站ID +params:{} //为空 + +指令样例: +```json +{ + "fun": "stopBindKeypad", + "baseId": 1, + "packetTag": "1" +} +``` + + +### 签到设备 + +#### 开始签到 + +发送: + +fun: "startBind" //开始签到 +params:{} + + +|**Json字段**| **字段含义** | **赋值及含义**| +| --- | --- | --- | +|bindMode| 签到模式| 1:指定键签到
2:PIN码签到(默认值) | +| lessMode | 预留| 0:(默认值)| +| modifyMode | 修改模式 | 0:不可修改 1:可以修改(默认值)| +| limitNumber | 指定位数 | 0:不指定位数(默认值)
1:指定位数 | +| options | 固定值 | 固定值10| +| optionalN | 可选数字 | 1≤N≤10 (指定位数才需要设置, 10为0) | +| keyValue | 指定按键键值 | 0:未指定[OK键签到]
1:1
2:2
3:3
4:4
5:5
6:6
7:7
8:8
9:9
10:0
11:上键
12:下键
13:OK
14:ESC
15: Menu | +| tipTitle | 提示标题 | 16个字节 | + + +指令样例: + +```json +{ + "fun": "startBind", + "baseId": 0, + "params": { + "bindMode": "1", + "lessMode": "0", + "modifyMode": "1", + "limitNumber": "1", + "options": "10", + "optionalN": "10", + "keyValue": "0" + }, + "packetTag": "1" +} +``` + +#### 接收签到信息 + +接收: + +fun: "answerBind" //签到返回 +baseId: "1"//接收到指令的基站ID +infos:{} + +| Json字段|字段含义|赋值及含义| +|---|---|---| +|time|答题时间|单位秒| +|keySn|键盘Sn|| +|keyValue|键值|键盘提交的值| + +指令样例: + +```json +{ + "fun": "answerBind", + "baseId": 1, + "infos": { + "time": "2.42", + "keySn": "1479824643", + "keyValue": "1234" + }, + "packetTag": "1" +} +``` + +#### 停止签到 + +发送: + +fun: "stopBind" //停止签到 +params:{} //默认空 + +指令样例: + +```json +{ + "fun": "stopBind", + "baseId": 0, + "packetTag": "1" +} +``` + +接收: + +fun: "stopBind" //停止签到 +baseId: "1"//收到的基站ID +infos:{"state":"OK"}//返回状态,成功为OK + +指令样例: + +```json +{ + "fun": "stopBind", + "baseId": 1, + "infos": { + "state": "OK" + }, + "packetTag": "1" +} +``` + +#### 支持设备说明 + +|**基站+键盘 **|**支持/不支持**|**备注**| +| --- | --- | --- | +|B100-2.4G+S6|支持|| +|B200-2.4G+S6|支持|| +|B200-5.8G+T2|支持|| + +### 选择题 + +#### 开始作答 + +发送: + +fun: "startChoices" //开始选择题 +params:{} + +|Json字段|字段含义|赋值及含义| +|---|---|---| +|optionsMode|选项类别|1:显示字母(默认值)
2:显示数字 | +|secrecyMode|保密模式|0:不保密(默认值)
1:保密 | +|modifyMode|修改模式|0:不可修改
1:可以修改(默认值) | +| modifyMode | 修改模式 | 0:不可修改
1:可以修改(默认值)| +| lessMode | 迫选模式 | 0:可缺选(默认值)
1:不可缺选
2:允许重复输入
3:允许重复输入且不可缺选 | +| options | 选项数目 | 1≤M≤10(默认值4) | +| optionalN | 可选项数 | 1≤N≤M(默认值1) | +| tipTitle | 提示标题 | 16个字节 | + + +指令样例: + +```json +{ + "fun": "startChoices", + "baseId": 0, + "params": { + "optionsMode": "1", + "secrecyMode": "0", + "modifyMode": "1", + "lessMode": "0", + "options": "4", + "optionalN": "1" + }, + "packetTag": "1" +} +``` + +接收: + +fun: "startChoices" //开始选择题 +baseId: "1"//接收到指令的基站ID +infos:{"state":"OK"}//返回状态,成功为OK + +指令样例: + +```json +{ + "fun": "startChoices", + "baseId": 1, + "infos": { + "state": "OK" + }, + "packetTag": "1" +} +``` + + +#### 接收作答 + +接收: + +fun: "answerChoices" //选择题作答返回 +baseId: "1"//接收到指令的基站ID +infos: {} + +|Json字段|字段含义|赋值及含义| +|---|---|---| +| time|答题时间|单位秒| +|keySn|键盘Sn|| +|keyValue|键值|键盘提交的值| + + +指令样例: +```json +{ + "fun": "answerChoices", + "baseId": 1, + "infos": { + "time": "2.42", + "keySn": "1479824643", + "keyValue": "A" + }, + "packetTag": "1" +} +``` + +#### 停止作答 + +发送: + +fun: "stopChoices" //停止选择题 +params:{} //默认空 +指令样例: + +```json +{ + "fun": "stopChoices", + "baseId": 0, + "packetTag": "1" +} +``` + +接收: + +fun: "stopChoices" //停止选择题 +baseId: "1"//收到的基站ID +infos:{"state":"OK"}//返回状态,成功为OK + +指令样例: + +```json +{ + "fun": "stopChoices", + "baseId": 1, + "infos": { + "state": "OK" + }, + "packetTag": "1" +} +``` + + +#### 支持设备说明 +|基站+键盘|支持/不支持|备注| +|---|---|---| +|B100-2.4G+S6|支持|| +|B200-2.4G+S6|支持|| +|B200-5.8G+T2|支持|| + + +### 判断题 + +#### 开始作答 + +发送: + +fun: "startTrueFalse" //开始判断题 +params:{} + +|**Json字段**|**字段含义**|**赋值及含义**| +|---|---|---| +| optionsMode | 选项类别 | 1:True/False 对/错
2:Yes/No 是/否
3:√/×| +| secrecyMode | 保密模式 | 0:不保密(默认值)
1:保密| +| modifyMode | 修改模式 | 0:不可修改
1:可以修改(默认值)| +| tipTitle | 提示标题 | 16个字节| + + +指令样例: +```json +{ + "fun": "startTrueFalse", + "baseId": 0, + "params": { + "optionsMode": "1", + "secrecyMode": "0", + "modifyMode": "1" + }, + "packetTag": "1" +} +``` + +接收: + +fun: "startTrueFalse" //开始判断题 +baseId: "1"//接收到指令的基站ID +infos:{"state":"OK"}//返回状态,成功为OK + +指令样例: + +```json +{ + "fun": "startTrueFalse", + "baseId": 1, + "infos": { + "state": "OK" + }, + "packetTag": "1" +} +``` + +#### 接收作答 + +接收: + +fun: "answerTrueFalse" //判断题作答返回 +baseId: "1"//接收到指令的基站ID +infos: {} + +|Json字段|字段含义|赋值及含义| +|---|---|---| +| time|答题时间|单位秒| +|keySn|键盘Sn|| +|keyValue|键值|键盘提交的值(1对、2错)| + + +指令样例: + +```json +{ + "fun": "answerTrueFalse", + "baseId": 1, + "infos": { + "time": "2.42", + "keySn": "1479824643", + "keyValue": "1" + }, + "packetTag": "1" +} +``` + +#### 停止作答 + +发送: + +fun: "stopTrueFalse" //停止判断题 +params:{} //默认空 + +指令样例: + +```json +{ + "fun": "stopTrueFalse", + "baseId": 0, + "packetTag": "1" +} +``` + +接收: + +fun: "stopTrueFalse" //停止判断题 +baseId: "1"//收到的基站ID +infos:{"state":"OK"}//返回状态,成功为OK + +指令样例: + +```json +{ + "fun": "stopTrueFalse", + "baseId": 1, + "infos": { + "state": "OK" + }, + "packetTag": "1" +} +``` + +#### 支持设备说明 + +|基站+键盘|支持/不支持|备注| +|---|---|---| +|B100-2.4G+S6|支持|| +|B200-2.4G+S6|支持|| +|B200-5.8G+T2|支持|| + +### 多题快答 + +#### 开始作答 + +发送: + +fun: "startMulQuestions" //开始多小题 +params:{} + + +|Json字段|字段含义|赋值及含义| +|---|---|---| +|questionType|题型|0:单选题(默认值)
1:判断题| +|secrecyMode| 保密模式| 0:不保密(默认值)
1:保密| +|modifyMode| 修改模式| 0:不可修改
1:可以修改(默认值)| +|lessMode| 预留|0| +|questionNumber|题目个数|1\~10 (默认值10)| +|options|选项数目|1~10 (单选题有效, 默认值4)| +|tipTitle|提示标题|16个字节| + +指令样例: +```json +{ + "fun": "startMulQuestions", + "baseId": 0, + "params": { + "questionType": "0", + "secrecyMode": "0", + "modifyMode": "1", + "lessMode": "0", + "questionNumber": "10", + "options": "4" + }, + "packetTag": "1" +} +``` + +接收: + +fun: "startMulQuestions" //开始多小题 +baseId: "1"//接收到指令的基站ID +infos:{"state":"OK"}//返回状态,成功为OK + +指令样例: + +```json +{ + "fun": "startMulQuestions", + "baseId": 1, + "infos": { + "state": "OK" + }, + "packetTag": "1" +} +``` + +#### 接收作答 + +接收: + +fun: "answerMulQuestions" //多小题作答返回 +baseId: "1"//接收到指令的基站ID +infos: {} + +|Json字段|字段含义|赋值及含义| +|---|---|---| +|time|答题时间|单位秒| +|keySn|键盘Sn|| +|keyValue|键值|键盘提交的值| + +指令样例: + +```json +{ + "fun": "answerMulQuestions", + "baseId": 1, + "infos": { + "time": "2.42", + "keySn": "1479824643", + "keyValue": "AACDBDADBD" + }, + "packetTag": "1" +} +``` + +#### 停止作答 + +发送: + +fun: "stopMulQuestions" //停止多小题 +params:{} //默认空 + +指令样例: + +```json +{ + "fun": "stopMulQuestions", + "baseId": 0, + "packetTag": "1" +} +``` + +接收: + +fun:"stopMulQuestions" //停止多小题 +baseId: "1" //收到的基站ID +infos:{"state":"OK"} //返回状态,成功为OK + +指令样例: + +```json +{ + "fun": "stopMulQuestions", + "baseId": 1, + "infos": { + "state": "OK" + }, + "packetTag": "1" +} +``` + +#### 支持设备说明 + +|基站+键盘|支持/不支持|备注| +|---|---|---| +|B200-5.8G+T2|支持|| + +### 语音题 + +#### 开始作答 + +发送: + +fun: "startVoice" //开始语音题 +params:{} + +|Json字段|字段含义|赋值及含义| +|---|---|---| +|recordingMode|录音模式|0:按键录音(默认值)| +|submitTimes|提交次数|0 (0:不限制, 默认值0)| +|recordingTimeLimit|预留|0| +|recordingFormat|预留|0:固定传0| +|recordAudioFormat|音频格式|0:mp3
1:实时流(默认值1)| +|tipTitle|提示标题|16个字节| + + +指令样例: + +```json +{ + "fun": "startVoice", + "baseId": 0, + "params": { + "recordingMode": "0", + "submitTimes": "0", + "recordingTimeLimit": "0", + "recordingFormat": "0", + "recordAudioFormat": "0" + }, + "packetTag": "1" +} +``` + +接收: + +fun: "startVoice" //开始语音题 +baseId: "1"//接收到指令的基站ID +infos:{"state":"OK"}//返回状态,成功为OK + +指令样例: + +```json +{ + "fun": "startVoice", + "baseId": 1, + "infos": { + "state": "OK" + }, + "packetTag": "1" +} +``` + +#### 接收作答 + +按开始作答时设置的录音格式分为录音文件和实时流两种。 + +录音文件 + +接收: + +fun: "answerVoiceFile" //录音文件返回 +baseId: "1"//接收到指令的基站ID +infos: {} + +|Json字段|字段含义|赋值及含义| +|---|---|---| +|keySn|键盘Sn|| +|filePath|文件路径|录音文件路径| + +指令样例: + +```json +{ + "fun": "answerVoiceFile", + "baseId": 1, + "infos": { + "keySn": "1479749926", + "filePath": "D:\voice\3_1479749926_196_2023-08-21 16-09-02 530.Mp3" + }, + "packetTag": "1" +} +``` + +实时流 + +接收: + +fun: "answerVoiceStream" //语音实时流返回 +baseId: "1"//接收到指令的基站ID +infos: {} + +|Json字段|字段含义|赋值及含义| +|---|---|---| +|keySn|键盘Sn|| +|voiceId|回话ID|答题时间内,可重复提交语音,每段语音流加一个回话ID,用于区分作答| +|sampleRate|音频采样率|| +|bits|音频采样精度|| +|channel|声道数|| +|dataIndex|数据包号|1开始| +|data|数据|将原始数据通过Base64编码后得到json中 "data" 字段。应用可通过Base64解码得到原始语音数据。| +|dataLen|数据长度|Base64编码后的字符串长度。应该将 "data" 通过Base64解码后得到原始的数据长度。| +|endFlag|结束标志|默认为0,为1表示结束| + +指令样例: + + +```json +{ + "fun": "answerVoiceStream", + "baseId": 1, + "infos": { + "keySn": "1479824643", + "voiceId": "1", + "sampleRate": 16000, + "bits": 16, + "channel": 1, + "endFlag": 0, + "dataIndex": 1, + "dataLen": 856, + "data": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAO7/AAARAAAA7v8AACMAAADK/wAA+gARAI8ANQDoAO7/EQDP/mwD6ADSBBkFgPm+/iH6J/ko/HD8F/8L/u7/rQGU/yMA4f5fAin/MgpDBwADvwRk+yn/fP1e/Jr+DAEAA+gAPAXpBnECgwK5BdEEmwFaA7oF4f63/DX9n/rJ+f75q/tA+5n7fP1q/Y79av1B/nb+Qf70AX0AfQNx/6b8EQBY/Ub9awD0AZUCfgahA4MCBgLV/az+L/5k/o79LwEdAYkBvv5q/X0AHf48BYMCgwKmAgYCdwH0/uL+0P6C/7j/sgApAsr/Kf+U/8T9L/ig+rL3HfVZA6AAsgYSBi8BIwMRABf/pvxB/nH/4v6m/7IAgv9f/7j/3P+gAAsB4gH0AS8BawAAANz/Kf8F/8r/RwAAACMA6ADoAKb/xAC4AgYCLwFBBO4FWQMAA7kFTQUYAnECiQRlASn/4v47/0H+uPxH/UH+L/6O/fn9F//Q/h3+rP5f/zv/8/5N/9z/uP+C/9z/RwBHACMAWQCgAH0ANQA1AEcAEQDK/8r/3P+4/5T/lP+m/5T/gv+C/5T/lP+C/5T/pv+m/w==" + }, + "packetTag": "1" +} +``` + +#### 回传分数 + +收到语音后,可对评测分数回传给键盘,详见[自定义信息](\l) + +#### 停止作答 + +发送: + +fun: "stopVoice" //停止语音题 +params:{} //默认空, + +指令样例: + +```json +{ + "fun": "stopVoice", + "baseId": 0, + "packetTag": "1" +} +``` + +接收: + +fun: "stopVoice" //停止语音题 +baseId: "1"//收到的基站ID +infos:{"state":"OK"}//返回状态,成功为OK + +指令样例: + +```json +{ + "fun": "stopVoice", + "baseId": 1, + "infos": { + "state": "OK" + }, + "packetTag": "1" +} +``` + +#### 丢包信息 + +语音结束时WSCmdApp会发送该次语言的丢包率。 + +注意:此数据只在语音实时流时有效。 + +接收: + +fun: "voicePacketLossInfo" //丢包信息 +baseId:1 //1\~32,连接基站 +infos:{} // + +|Json字段|字段含义|赋值及含义| +|---|---|---| +|keySn|键盘Sn|| +|voiceId|回话ID|答题时间内,可重复提交语音,每段语音流加一个回话ID,用于区分作答| +|recordTime|录音延迟时间|| +|shouldSendPacketNum|应发数据包数|| +|actualSendPacketNum|实发数据包数|| +|lossRate|丢包率|百分比| + + +指令样例: + +```json +{ + "fun": "voicePacketLossInfo", + "baseId": 1, + "infos": { + "keySn": "1837454011", + "voiceId": "1", + "recordTime": "42", + "shouldSendPacketNum": "56", + "actualSendPacketNum": "56", + "lossRate": "0" + }, + "packetTag": "1" +} +``` + +#### 支持设备说明 + +|基站+键盘|支持/不支持|备注| +|---|---|---| +|B200-5.8G+T2|支持|单次录音最长180秒| + +### 抢答题 +#### 开始作答 + +发送: + +fun: "startRushAnswer" //开始抢答题 +params:{} + +|Json字段|字段含义|赋值及含义| +|---|---|---| +|rushAnswerMode| 抢答模式|0:普通抢答(默认值)| +|modifyMode|修改模式|0:不可修改
1:可以修改(默认值)| + + + +指令样例: +```json +{ + "fun": "startRushAnswer", + "baseId": 0, + "params": { + "rushAnswerMode": "0", + "modifyMode": "1" + }, + "packetTag": "1" +} +``` + +接收: + +fun: "startRushAnswer" //开始抢答题 +baseId: "1"//接收到指令的基站ID +infos:{"state":"OK"}//返回状态,成功为OK + +指令样例: + +```json +{ + "fun": "startRushAnswer", + "baseId": 1, + "infos": { + "state": "OK" + }, + "packetTag": "1" +} +``` + +#### 接收作答 + +接收: + +fun: "answerRushAnswer" //抢答题作答返回 +baseId: "1"//接收到指令的基站ID +infos: {} + +|Json字段|字段含义|赋值及含义| +|---|---|---| +|time|答题时间|单位秒| +|keySn|键盘Sn|| +|keyValue|键值|键盘提交的值| + +指令样例: + +```json +{ + "fun": "answerRushAnswer", + "baseId": 1, + "infos": { + "time": "1.42", + "keySn": "1479824643", + "keyValue": "A" + }, + "packetTag": "1" +} +``` +#### 停止作答 + +发送: + +fun: "stopRushAnswer" //停止抢答题 +params:{} //默认空 + +指令样例: + +```json +{ + "fun": "stopRushAnswer", + "baseId": 0, + "packetTag": "1" +} +``` + +接收: + +fun: "stopRushAnswer" //停止抢答题 +baseId: "1"//收到的基站ID +infos:{"state":"OK"}//返回状态,成功为OK + +指令样例: + +```json +{ + "fun": "stopRushAnswer", + "baseId": 1, + "infos": { + "state": "OK" + }, + "packetTag": "1" +} +``` + +#### 支持设备说明 + +|基站+键盘|支持/不支持|备注| +|---|---|---| +|B100-2.4G+S6|支持|| +|B200-2.4G+S6|支持|| +|B200-5.8G+T2|支持|| + +### 数字题 + +#### 开始作答 + +发送: + +fun: "startNumber" //开始数字题 +params:{} + +|Json字段|字段含义|赋值及含义| +|---|---|---| +|secrecyMode|保密模式|0:不保密(默认值)
1:保密| +|modifyMode|修改模式|0:不可修改
1:可以修改(默认值)| +|aswOption|按键模式|0:无规则 (S6最多16位,T2最多14位)
1:预留
2:预留
3:带小数位上下限(T2不支持)| +|digits|小数位数|0:没有小数点
1:一位小数点
2:二位小数点| +|numMin|下限|0-655.35| +|numMax|上限|0-655.35| +|tipTitle|提示标题|16个字节| + + + +指令样例: +```json +{ + "fun": "startNumber", + "baseId": 0, + "params": { + "secrecyMode": "0", + "modifyMode": "1", + "aswOption": "0", + "digits": "0", + "numMin": "0", + "numMax": "0" + }, + "packetTag": "1" +} +``` + +接收: + +fun: "startNumber" //开始数字题 +baseId: "1"//接收到指令的基站ID +infos:{"state":"OK"}//返回状态,成功为OK + +指令样例: + +```json +{ + "fun": "startNumber", + "baseId": 1, + "infos": { + "state": "OK" + }, + "packetTag": "1" +} +``` + +#### 接收作答 + +接收: + +fun: "answerNumber" //数字题作答返回 +baseId: "1"//接收到指令的基站ID +infos: {} + +|Json字段|字段含义|赋值及含义| +|---|---|---| +|time|答题时间|单位秒| +|keySn|键盘Sn|| +|keyValue|键值|键盘提交的值| + + +指令样例: + +```json +{ + "fun": "answerNumber", + "baseId": 1, + "infos": { + "time": "2.42", + "keySn": "1479824643", + "keyValue": "12" + }, + "packetTag": "1" +} +``` + +#### 停止作答 + +发送: + +fun: "stopNumber" //停止数字题 +params:{} //默认空 + +指令样例: + +```json +{ + "fun": "stopNumber", + "baseId": 0, + "packetTag": "1" +} +``` + +接收: + +fun: "stopNumber" //停止数字题 +baseId: "1"//收到的基站ID +infos:{"state":"OK"}//返回状态,成功为OK + +指令样例: + +```json +{ + "fun": "stopNumber", + "baseId": 1, + "infos": { + "state": "OK" + }, + "packetTag": "1" +} +``` + +#### 支持设备说明 + +|基站+键盘|支持/不支持|备注| +|---|---|---| +|B100-2.4G+S6|支持|按键模式(0-无规则 最多16位)| +|B200-2.4G+S6|支持|按键模式(0-无规则 最多16位)| +|B200-5.8G+T2|支持|按键模式(0-无规则 最多14位)
按键模式 (3-带小数位上下限)(不支持)| + + +### 键盘测试 + +#### 开始测试 + +发送: + +fun: "startKeyPadTest" //开始键盘 +params:{} + +|Json字段|字段含义|赋值及含义| +|---|---|---| +|mode|测试模式|1-报告状态
2-按键模拟| +|keyTime|启动时间|0-60 单位秒 0马上执行 默认为0| +|gapTime|间隔时间|0-60 单位秒 0无效 默认为0| + + +指令样例: + +```json +{ + "fun": "startKeyPadTest", + "baseId": 0, + "params": { + "mode": "1", + "keyTime": "0", + "gapTime": "0" + }, + "packetTag": "1" +} +``` + +#### 接收作答 + +接收: + +fun: "answerKeyPadTest" //按键测试返回 +baseId: "1"//接收到指令的基站ID +infos: {} + +|Json字段|字段含义|赋值及含义| +|---|---|---| +|Time|答题时间|单位秒| +|keySn|键盘Sn|| +|hModel|键盘硬件型号|| +|keyValue|键盘键值|| +|ver|键盘软件版本|| +|volt|键盘电池电量|T2百分比值,S6无效| + + +指令样例: + +```json +{ + "fun": "answerKeyPadTest", + "baseId": 1, + "infos": { + "time": "2.42", + "keySn": "1479824643", + "hModel": "67", + "keyValue": "0", + "ver": "1.0.0", + "volt": "12" + }, + "packetTag": "1" +} +``` + +#### 停止作答 + +发送: + +fun: "stopKeyPadTest" //停止键盘测试 +params:{} //默认空 + +指令样例: + +```json +{ + "fun": "stopKeyPadTest", + "baseId": 0, + "packetTag": "1" +} +``` + +接收: + +fun: "stopKeyPadTest" //停止键盘测试 +baseId: "1"//收到的基站ID +infos:{"state":"OK"}//返回状态,成功为OK + +指令样例: + +```json +{ + "fun": "stopKeyPadTest", + "baseId": 1, + "infos": { + "state": "OK" + }, + "packetTag": "1" +} +``` + +#### 支持设备说明 + +|基站+键盘|支持/不支持|备注| +|---|---|---| +|B100-2.4G+S6|支持|键盘电池电量参数无效| +|B200-2.4G+S6|支持|键盘电池电量参数无效| +|B200-5.8G+T2|支持|| + + +### 多题题型 +#### 开始测试 + +##### 在线测验题型接口 + +发送: + +fun: "startKeyPadMultipleQuestionsTest" //开始在线测验题型 +params:{} + +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +| examNo | 测验编号 | 1-9999
注意:1:新的题开始| +| displayMode | 题号显示模式 | 0:不显示开头
1:显示“Q”开头
2:显示“题”开头| +| questions | 题目详情 | 数组[最大200个单元] | + +题目详情数组参数说明 + +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +| questionLevel1Symbol | 一级题号 | 1-200 | +| questionLevel2Symbol | 二级题号 | 1-99 [displayMode=0时有效] | +| questionLevel3Symbol | 三级题号 | 1-99 [displayMode=0时有效] | +| questionType | 题目类型 | 1:单选
2:多选(排序)
3:数字
4:判断 | +| option | 选项数目 | 当questionType = 1 有效。
当questionType = 2 有效。
此项缺省时 默认4;
范围:1-10。| + + +指令样例:一级题型 + 不显示开头 +样例目的:一级题型不显示开头,总题数4题 +```json +{ + "fun": "startKeyPadMultipleQuestionsTest", + "baseId": 0, + "params": { + "examNo": 1, + "displayMode": 0, + "questions": [{ + "questionLevel1Symbol": "1", + "questionType": "1" + }, { + "questionLevel1Symbol": "2", + "questionType": "2", + "option": "5" + }, { + "questionLevel1Symbol": "3", + "questionType": "3" + }, { + "questionLevel1Symbol": "4", + "questionType": "4" + }] + }, + "packetTag": "59" +} +``` + +指令样例:二级题型 + 不显示开头 +样例目的:二级题型不显示开头,总题数4题 +```json +{ + "fun": "startKeyPadMultipleQuestionsTest", + "baseId": 0, + "params": { + "examNo": 1, + "displayMode": 0, + "questions": [{ + "questionLevel1Symbol": "1", + "questionLevel2Symbol": "1", + "questionType": "1" + }, { + "questionLevel1Symbol": "1", + "questionLevel2Symbol": "2", + "questionType": "2", + "option": "5" + }, { + "questionLevel1Symbol": "2", + "questionLevel2Symbol": "1", + "questionType": "3" + }, { + "questionLevel1Symbol": "2", + "questionLevel2Symbol": "1", + "questionType": "4" + }] + }, + "packetTag": "59" +} +``` + +指令样例:三级题型 + 不显示开头 +样例目的:三级题型不显示开头,总题数4题 +```json +{ + "fun": "startKeyPadMultipleQuestionsTest", + "baseId": 0, + "params": { + "examNo": 1, + "displayMode": 0, + "questions": [{ + "questionLevel1Symbol": "1", + "questionLevel2Symbol": "1", + "questionLevel3Symbol": "1", + "questionType": "1" + }, { + "questionLevel1Symbol": "1", + "questionLevel2Symbol": "1", + "questionLevel3Symbol": "2", + "questionType": "2", + "option": "5" + }, { + "questionLevel1Symbol": "1", + "questionLevel2Symbol": "1", + "questionLevel3Symbol": "3", + "questionType": "3" + }, { + "questionLevel1Symbol": "1", + "questionLevel2Symbol": "1", + "questionLevel3Symbol": "4", + "questionType": "4" + }] + }, + "packetTag": "59" +} +``` + +指令样例:一级题型 + 显示“Q”开头 +样例目的:一级题型显示“Q”开头,总题数4题 +```json +{ + "fun": "startKeyPadMultipleQuestionsTest", + "baseId": 0, + "params": { + "examNo": 1, + "displayMode": 1, + "questions": [{ + "questionLevel1Symbol": "1", + "questionType": "1" + }, { + "questionLevel1Symbol": "2", + "questionType": "2", + "option": "5" + }, { + "questionLevel1Symbol": "3", + "questionType": "3" + }, { + "questionLevel1Symbol": "4", + "questionType": "4" + }] + }, + "packetTag": "59" +} +``` +指令样例:一级题型 + 显示“题”开头 +样例目的:一级题型显示“题”开头,总题数4题 +```json +{ + "fun": "startKeyPadMultipleQuestionsTest", + "baseId": 0, + "params": { + "examNo": 1, + "displayMode": 2, + "questions": [{ + "questionLevel1Symbol": "1", + "questionType": "1" + }, { + "questionLevel1Symbol": "2", + "questionType": "2", + "option": "5" + }, { + "questionLevel1Symbol": "3", + "questionType": "3" + }, { + "questionLevel1Symbol": "4", + "questionType": "4" + }] + }, + "packetTag": "59" +} +``` +接收: + +fun: "keyPadMultipleQuestionsTest" // +baseId: "1"//收到的基站ID +infos:{"state":"OK"}//返回状态,成功为OK + +指令样例: + +```json +{ + "fun": "keyPadMultipleQuestionsTest", + "baseId": 1, + "infos": { + "state": "OK" + }, + "packetTag": "59" +} +``` + +##### 多科作业题型接口 + +发送: + +fun: "startKeyPadMultipleQuestionsCourse" //开始多科作业题型 +params:{} + +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +| examNo | 测验编号 | 1-9999
注意:1:新的题开始| +| displayMode | 题号显示模式 | 0:不显示开头
1:显示“Q”开头
2:显示“题”开头| +| questions | 题目详情 | 数组[最大200个单元] | + +题目详情数组参数说明 + +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +| questionLevel1Symbol | 一级题号 | 1-200 | +| questionLevel2Symbol | 二级题号 | 1-99 [displayMode=0时有效] | +| course | 科目 | 1:语文
2:数学
3:英语
4:政治
5:历史
6:地理
7:生物
8:物理
9:化学 | +| questionType | 题目类型 | 1:单选
2:多选(排序)
3:数字
4:判断 | +| option | 选项数目 | 当questionType = 1 有效。
当questionType = 2 有效。
此项缺省时 默认4;
范围:1-10。| + +指令样例:带科目 + 二级题型 + 不显示开头 +样例目的:语文2题+数学2题+英语2题 +```json +{ + "fun": "startKeyPadMultipleQuestionsCourse", + "baseId": 0, + "params": { + "examNo": 1, + "displayMode": 0, + "questions": [{ + "questionLevel1Symbol": "1", + "questionLevel2Symbol": "1", + "course": "1", + "questionType": "1" + }, { + "questionLevel1Symbol": "1", + "questionLevel2Symbol": "2", + "course": "1", + "questionType": "2", + "option": "5" + }, { + "questionLevel1Symbol": "1", + "questionLevel2Symbol": "1", + "course": "2", + "questionType": "3" + }, { + "questionLevel1Symbol": "1", + "questionLevel2Symbol": "2", + "course": "2", + "questionType": "4" + }, { + "questionLevel1Symbol": "1", + "questionLevel2Symbol": "1", + "course": "3", + "questionType": "3" + }, { + "questionLevel1Symbol": "1", + "questionLevel2Symbol": "2", + "course": "3", + "questionType": "4" + }] + }, + "packetTag": "59" +} +``` + +指令样例:带科目 + 一级题型 + 不显示开头 +样例目的:语文4题 +```json +{ + "fun": "startKeyPadMultipleQuestionsCourse", + "baseId": 0, + "params": { + "examNo": 1, + "displayMode": 0, + "questions": [{ + "questionLevel1Symbol": "1", + "course": "1", + "questionType": "1" + }, { + "questionLevel1Symbol": "2", + "course": "1", + "questionType": "2", + "option": "5" + }, { + "questionLevel1Symbol": "3", + "course": "1", + "questionType": "3" + }, { + "questionLevel1Symbol": "4", + "course": "1", + "questionType": "4" + }] + }, + "packetTag": "59" +} +``` + +指令样例:带科目 + 一级题型 + 显示“Q”开头 +样例目的:语文4题 +```json +{ + "fun": "startKeyPadMultipleQuestionsCourse", + "baseId": 0, + "params": { + "examNo": 1, + "displayMode": 1, + "questions": [{ + "questionLevel1Symbol": "1", + "course": "1", + "questionType": "1" + }, { + "questionLevel1Symbol": "2", + "course": "1", + "questionType": "2", + "option": "5" + }, { + "questionLevel1Symbol": "3", + "course": "1", + "questionType": "3" + }, { + "questionLevel1Symbol": "4", + "course": "1", + "questionType": "4" + }] + }, + "packetTag": "59" +} +``` + +指令样例:带科目 + 一级题型 + 显示“题”开头 +样例目的:语文4题 +```json +{ + "fun": "startKeyPadMultipleQuestionsCourse", + "baseId": 0, + "params": { + "examNo": 1, + "displayMode": 2, + "questions": [{ + "questionLevel1Symbol": "1", + "course": "1", + "questionType": "1" + }, { + "questionLevel1Symbol": "2", + "course": "1", + "questionType": "2", + "option": "5" + }, { + "questionLevel1Symbol": "3", + "course": "1", + "questionType": "3" + }, { + "questionLevel1Symbol": "4", + "course": "1", + "questionType": "4" + }] + }, + "packetTag": "59" +} +``` + +接收: + +fun: "keyPadMultipleQuestionsCourse" // +baseId: "1"//收到的基站ID +infos:{"state":"OK"}//返回状态,成功为OK + +指令样例: + +```json +{ + "fun": "keyPadMultipleQuestionsCourse", + "baseId": 1, + "infos": { + "state": "OK" + }, + "packetTag": "59" +} +``` + +##### 主观题分数输入接口 +发送: + +fun: "startKeyPadMultipleQuestionsSubjective" //开始主观题分数输入 +params:{} + +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +| examNo | 测验编号 | 1-9999
注意:1:新的题开始 | +| questions | 题目详情 | 数组[最大200个单元] | + +题目详情数组参数说明 + +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +| questionLevel1Symbol | 一级题号 | 1-200 | +| toplimit | 数字上限 | 1-600 | +| decimal | 小数位数 | 0:无效小数
1:一位小数
2:二位小数
此项缺省时默认是0。| + +```json +{ + "fun": "startKeyPadMultipleQuestionsSubjective", + "baseId": 0, + "params": { + "examNo": 1, + "questions": [{ + "questionLevel1Symbol": "1", + "toplimit": "100", + "decimal": "0" + }, { + "questionLevel1Symbol": "2", + "toplimit": "100", + "decimal": "1" + }, { + "questionLevel1Symbol": "3", + "toplimit": "100", + "decimal": "2" + }, { + "questionLevel1Symbol": "4", + "toplimit": "100" + }] + }, + "packetTag": "59" +} +``` + +接收: + +fun: "KeyPadMultipleQuestionsSubjective" // +baseId: "1"//收到的基站ID +infos:{"state":"OK"}//返回状态,成功为OK + +指令样例: + +```json +{ + "fun": "KeyPadMultipleQuestionsSubjective", + "baseId": 1, + "infos": { + "state": "OK" + }, + "packetTag": "59" +} +``` + + + +#### 接收作答 + +接收: + +fun: "answerKeyPadMultipleQuestions" //多题题型返回 + +baseId: "1" //接收到指令的基站ID + +infos: {} + +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +| Time | 答题时间 | 单位秒,20分钟内有效 | +| keySn | 键盘Sn | | +| Seq | 题序号 | | +| keyValue | 键值 |键盘提交的值 | + + + +指令样例: +```json +{ + "fun": "answerKeyPadMultipleQuestions", + "baseId": 1, + "infos": { + "time": "5.42", + "keySn": "1479824643", + "seq": "1", + "keyValue": "12" + }, + + "packetTag": "1" +} +``` + +#### 退出作答 + +发送: + +fun: "stopKeyPadMultipleQuestions" //停止多题题型 + +params:{} //默认空 + +指令样例: + +```json +{ + "fun": "stopKeyPadMultipleQuestions", + + "baseId": 0, + "packetTag": "1" +} +``` + +接收: + +fun: "stopKeyPadMultipleQuestions" //停止键盘测试 + +baseId: "1"//收到的基站ID + +infos:{"state":"OK"}//返回状态,成功为OK + +指令样例: + +```json +{ + "fun": "stopKeyPadMultipleQuestions", + "baseId": 1, + "infos": { + "state": "OK" + }, + "packetTag": "1" +} +``` + +#### 暂停作答 + +发送: + +fun: "pauseKeyPadMultipleQuestions" //暂停多提题型 + +baseId: "1"//收到的基站ID + +params:{} //默认空 + +指令样例: + +```json +{ + "fun": "pauseKeyPadMultipleQuestions", + + "baseId": 0, + "packetTag": "1" +} +``` + + +接收: + +fun: "pauseKeyPadMultipleQuestions" //暂停键盘测试 + +baseId: "1"//收到的基站ID + +infos:{"state":"OK"}//返回状态,成功为OK + +指令样例: + +```json +{ + "fun": "pauseKeyPadMultipleQuestions", + "baseId": 1, + "infos": { + "state": "OK" + }, + "packetTag": "1" +} +``` + +#### 继续测试 + + +##### 在线测验题型接口 + +发送: + +fun: "continueKeyPadMultipleQuestionsTest" //继续在线测验题型 +params:{} + +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +| examNo | 测验编号 | 1-9999 | +| displayMode | 题号显示模式 | 0:不显示开头
1:显示“Q”开头
2:显示“题”开头| +| questions | 题目详情 | 数组[最大200个单元] | + +题目详情数组参数说明 + +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +| questionLevel1Symbol | 一级题号 | 1-200 | +| questionLevel2Symbol | 二级题号 | 1-99 [displayMode=0时有效] | +| questionLevel3Symbol | 三级题号 | 1-99 [displayMode=0时有效] | +| questionType | 题目类型 | 1:单选
2:多选(排序)
3:数字
4:判断 | +| option | 选项数目 | 当questionType = 1 有效。
当questionType = 2 有效。
此项缺省时 默认4;
范围:1-10。| + + +指令样例:一级题型 + 不显示开头 +```json +{ + "fun": "continueKeyPadMultipleQuestionsTest", + "baseId": 0, + "params": { + "examNo": 1, + "displayMode": 0, + "questions": [{ + "questionLevel1Symbol": "1", + "questionType": "1" + }, { + "questionLevel1Symbol": "2", + "questionType": "2", + "option": "5" + }, { + "questionLevel1Symbol": "3", + "questionType": "3" + }, { + "questionLevel1Symbol": "4", + "questionType": "4" + }] + }, + "packetTag": "59" +} +``` + +指令样例:二级题型 + 不显示开头 +```json +{ + "fun": "continueKeyPadMultipleQuestionsTest", + "baseId": 0, + "params": { + "examNo": 1, + "displayMode": 0, + "questions": [{ + "questionLevel1Symbol": "1", + "questionLevel2Symbol": "1", + "questionType": "1" + }, { + "questionLevel1Symbol": "1", + "questionLevel2Symbol": "2", + "questionType": "2", + "option": "5" + }, { + "questionLevel1Symbol": "1", + "questionLevel2Symbol": "3", + "questionType": "3" + }, { + "questionLevel1Symbol": "1", + "questionLevel2Symbol": "4", + "questionType": "4" + }] + }, + "packetTag": "59" +} +``` + +指令样例:三级题型 + 不显示开头 +```json +{ + "fun": "continueKeyPadMultipleQuestionsTest", + "baseId": 0, + "params": { + "examNo": 1, + "displayMode": 0, + "questions": [{ + "questionLevel1Symbol": "1", + "questionLevel2Symbol": "1", + "questionLevel3Symbol": "1", + "questionType": "1" + }, { + "questionLevel1Symbol": "1", + "questionLevel2Symbol": "1", + "questionLevel3Symbol": "2", + "questionType": "2", + "option": "5" + }, { + "questionLevel1Symbol": "1", + "questionLevel2Symbol": "1", + "questionLevel3Symbol": "3", + "questionType": "3" + }, { + "questionLevel1Symbol": "1", + "questionLevel2Symbol": "1", + "questionLevel3Symbol": "4", + "questionType": "4" + }] + }, + "packetTag": "59" +} +``` + +指令样例:一级题型 + 显示“Q”开头 +```json +{ + "fun": "continueKeyPadMultipleQuestionsTest", + "baseId": 0, + "params": { + "examNo": 1, + "displayMode": 1, + "questions": [{ + "questionLevel1Symbol": "1", + "questionType": "1" + }, { + "questionLevel1Symbol": "2", + "questionType": "2", + "option": "5" + }, { + "questionLevel1Symbol": "3", + "questionType": "3" + }, { + "questionLevel1Symbol": "4", + "questionType": "4" + }] + }, + "packetTag": "59" +} +``` + +指令样例:一级题型 + 显示“题”开头 +```json +{ + "fun": "continueKeyPadMultipleQuestionsTest", + "baseId": 0, + "params": { + "examNo": 1, + "displayMode": 2, + "questions": [{ + "questionLevel1Symbol": "1", + "questionType": "1" + }, { + "questionLevel1Symbol": "2", + "questionType": "2", + "option": "5" + }, { + "questionLevel1Symbol": "3", + "questionType": "3" + }, { + "questionLevel1Symbol": "4", + "questionType": "4" + }] + }, + "packetTag": "59" +} +``` +接收: + +fun: "keyPadMultipleQuestionsTest" // +baseId: "1"//收到的基站ID +infos:{"state":"OK"}//返回状态,成功为OK + +指令样例: + +```json +{ + "fun": "keyPadMultipleQuestionsTest", + "baseId": 1, + "infos": { + "state": "OK" + }, + "packetTag": "59" +} +``` + +##### 多科作业题型接口 + +发送: + +fun: "continueKeyPadMultipleQuestionsCourse" //继续多科作业题型 +params:{} + +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +| examNo | 测验编号 | 1-9999 | +| displayMode | 题号显示模式 | 0:不显示开头
1:显示“Q”开头
2:显示“题”开头| +| questions | 题目详情 | 数组[最大200个单元] | + +题目详情数组参数说明 + +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +| questionLevel1Symbol | 一级题号 | 1-200 | +| questionLevel2Symbol | 二级题号 | 1-99 [displayMode=0时有效] | +| course | 科目 | 1:语文
2:数学
3:英语
4:政治
5:历史
6:地理
7:生物
8:物理
9:化学 | +| questionType | 题目类型 | 1:单选
2:多选(排序)
3:数字
4:判断 | +| option | 选项数目 | 当questionType = 1 有效。
当questionType = 2 有效。
此项缺省时 默认4;
范围:1-10。| + +指令样例:带科目 + 二级题型 + 不显示开头 +样例目的:语文2题+数学2题+英语2题 +```json +{ + "fun": "continueKeyPadMultipleQuestionsCourse", + "baseId": 0, + "params": { + "examNo": 1, + "displayMode": 0, + "questions": [{ + "questionLevel1Symbol": "1", + "questionLevel2Symbol": "1", + "course": "1", + "questionType": "1" + }, { + "questionLevel1Symbol": "1", + "questionLevel2Symbol": "2", + "course": "1", + "questionType": "2", + "option": "5" + }, { + "questionLevel1Symbol": "1", + "questionLevel2Symbol": "1", + "course": "2", + "questionType": "3" + }, { + "questionLevel1Symbol": "1", + "questionLevel2Symbol": "2", + "course": "2", + "questionType": "4" + }, { + "questionLevel1Symbol": "1", + "questionLevel2Symbol": "1", + "course": "3", + "questionType": "3" + }, { + "questionLevel1Symbol": "1", + "questionLevel2Symbol": "2", + "course": "3", + "questionType": "4" + }] + }, + "packetTag": "59" +} +``` + + + +指令样例:带科目 + 一级题型 + 不显示开头 +样例目的:语文4题 +```json +{ + "fun": "continueKeyPadMultipleQuestionsCourse", + "baseId": 0, + "params": { + "examNo": 1, + "displayMode": 0, + "questions": [{ + "questionLevel1Symbol": "1", + "course": "1", + "questionType": "1" + }, { + "questionLevel1Symbol": "2", + "course": "1", + "questionType": "2", + "option": "5" + }, { + "questionLevel1Symbol": "3", + "course": "1", + "questionType": "3" + }, { + "questionLevel1Symbol": "4", + "course": "1", + "questionType": "4" + }] + }, + "packetTag": "59" +} +``` + +指令样例:带科目 + 一级题型 + 显示“Q”开头 +样例目的:语文4题 +```json +{ + "fun": "continueKeyPadMultipleQuestionsCourse", + "baseId": 0, + "params": { + "examNo": 1, + "displayMode": 1, + "questions": [{ + "questionLevel1Symbol": "1", + "course": "1", + "questionType": "1" + }, { + "questionLevel1Symbol": "2", + "course": "1", + "questionType": "2", + "option": "5" + }, { + "questionLevel1Symbol": "3", + "course": "1", + "questionType": "3" + }, { + "questionLevel1Symbol": "4", + "course": "1", + "questionType": "4" + }] + }, + "packetTag": "59" +} +``` + +指令样例:带科目 + 一级题型 + 显示“题”开头 +样例目的:语文4题 +```json +{ + "fun": "continueKeyPadMultipleQuestionsCourse", + "baseId": 0, + "params": { + "examNo": 1, + "displayMode": 2, + "questions": [{ + "questionLevel1Symbol": "1", + "course": "1", + "questionType": "1" + }, { + "questionLevel1Symbol": "2", + "course": "1", + "questionType": "2", + "option": "5" + }, { + "questionLevel1Symbol": "3", + "course": "1", + "questionType": "3" + }, { + "questionLevel1Symbol": "4", + "course": "1", + "questionType": "4" + }] + }, + "packetTag": "59" +} +``` + +接收: + +fun: "keyPadMultipleQuestionsCourse" // +baseId: "1"//收到的基站ID +infos:{"state":"OK"}//返回状态,成功为OK + +指令样例: + +```json +{ + "fun": "keyPadMultipleQuestionsCourse", + "baseId": 1, + "infos": { + "state": "OK" + }, + "packetTag": "59" +} +``` + +##### 主观题分数输入接口 +发送: + +fun: "continueKeyPadMultipleQuestionsSubjective" //继续主观题分数输入 +params:{} + +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +| examNo | 测验编号 | 1-9999 | +| questions | 题目详情 | 数组[最大200个单元] | + +题目详情数组参数说明 + +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +| questionLevel1Symbol | 一级题号 | 1-200 | +| toplimit | 数字上限 | 1-600 | +| decimal | 小数位数 | 0:无效小数
1:一位小数
2:二位小数
此项缺省时默认是0。| + +```json +{ + "fun": "continueKeyPadMultipleQuestionsSubjective", + "baseId": 0, + "params": { + "examNo": 1, + "questions": [{ + "questionLevel1Symbol": "1", + "toplimit": "100", + "decimal": "0" + }, { + "questionLevel1Symbol": "2", + "toplimit": "100", + "decimal": "1" + }, { + "questionLevel1Symbol": "3", + "toplimit": "100", + "decimal": "2" + }, { + "questionLevel1Symbol": "4", + "toplimit": "100" + }] + }, + "packetTag": "59" +} +``` + +接收: + +fun: "keyPadMultipleQuestionsSubjective" // +baseId: "1"//收到的基站ID +infos:{"state":"OK"}//返回状态,成功为OK + +指令样例: + +```json +{ + "fun": "keyPadMultipleQuestionsSubjective", + "baseId": 1, + "infos": { + "state": "OK" + }, + "packetTag": "59" +} +``` + +#### 指定键盘转移作答内容 +注意:此接口一次只能对一只键盘进行操作。 + +发送: + +fun: "copyKeyPadMultipleQuestions" //转移键盘作答内容 +params:{} // + +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +| baseId | 键盘所连基站ID | 1-32 | +| keySn | 目标键盘SN | | +| id | 题目编号 | 1-200 | +| questionType | 题目类型 | 1:单选
2:多选(排序)
3:数字
4:判断 | +| value | 题目答案 |字符串16字节 | + + +指令样例: + +```json +{ + "fun": "copyKeyPadMultipleQuestions", + "baseId": 1, + "params": { + "keySn": "0007831203", + "questions": [{ + "id": "1", + "questionType": "1", + "value": "A" + }, { + "id": "2", + "questionType": "2", + "value": "AB" + }] + }, + "packetTag": "19" +} +``` + +接收: + +fun: "copyKeyPadMultipleQuestions" // +baseId: "1"//收到的基站ID +infos:{"state":"OK"}//返回状态,成功为OK + +指令样例: + +```json +{ + "fun": "copyKeyPadMultipleQuestions", + "baseId": 1, + "infos": { + "state": "OK" + }, + "packetTag": "1" +} +``` + +#### 向键盘广播正确答案 + +发送: + +fun: "okKeyPadMultipleQuestions" //向键盘广播正确答案 +baseId: "1"//收到的基站ID +params:{} //默认空 + +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +| baseId | 基站ID | 1-32 | +| id | 题目编号 | 1-200 | +| questionType | 题目类型 | 1:单选
2:多选(排序)
3:数字
4:判断 | +| value | 题目答案 |字符串16字节 | + + +指令样例: +```json +{ + "fun": "okKeyPadMultipleQuestions", + "baseId": 0, + "params": [{ + "id": "1", + "questionType": "1", + "value": "A" + }, { + "id": "2", + "questionType": "2", + "value": "AB" + }], + "packetTag": "20" +} + +``` + +接收: + +fun: "okKeyPadMultipleQuestions" // +baseId: "1"//收到的基站ID +infos:{"state":"OK"}//返回状态,成功为OK + +指令样例: +```json +{ + "fun": "okKeyPadMultipleQuestions", + "baseId": 1, + "infos": { + "state": "OK" + }, + "packetTag": "1" +} +``` + +#### 支持设备说明 + +| **基站+键盘** | **支持** | **备注** | +| --- | --- | --- | +| B100-2.4G+S6 | 支持 | | +| B200-2.4G+S6 | 支持 | | + + +### 填空题 + +#### 开始作答 + +发送: + +fun: "startTextAnswer" //开始填空题 +params:{} + +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +| optionsMode | 填空类型 | 1:任意输入(默认值) | +| modifyMode | 预留 | 1: (默认值) | +| secrecyMode | 预留 | 0: (默认值) | + + +指令样例: + +```json +{ + "fun": "startTextAnswer", + "baseId": 0, + "params": { + "optionsMode": "1", + "modifyMode": "1", + "secrecyMode": "0" + }, + "packetTag": "1" +} +``` + +接收: + +fun: "startTextAnswer " //开始填空题 +baseId: "1" //接收到指令的基站ID +infos:{"state":"OK"} //返回状态,成功为OK + +指令样例: + +```json +{ + "fun": "startTextAnswer", + "baseId": 1, + "infos": { + "state": "OK" + }, + "packetTag": "1" +} +``` + +#### 接收作答 + +接收: + +fun: "answerTextAnswer" //填空题作答返回 +baseId: "1" //接收到指令的基站ID +infos: {} + +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +| keySn | 键盘Sn | | +| keyValue | 键值 | ABCD/1234/AA123 | + + +指令样例: + +```json +{ + "fun": "answerTextAnswer", + "baseId": 1, + "infos": { + "keySn": "1479824643", + "keyValue": "1" + }, + "packetTag": "1" +} +``` + +发送: + +fun: "answerTextAnswer" //填空题作答返回 +baseId: "1"//接收的基站ID +params:{} //为空 + +指令样例: + +```json +{ + "fun": "answerTextAnswer", + "baseId": 1, + "packetTag": "1" +} +``` +#### 停止作答 + +发送: + +fun: "stopTextAnswer" //停止填空题 +params:{} //默认空 + +指令样例: +```json +{ + "fun": "stopTextAnswer", + "packetTag": "1" +} +``` + +接收: + +fun: "stopTextAnswer" //停止填空题 +baseId: "1"//收到的基站ID +infos:{"state":"OK"}//返回状态,成功为OK + +指令样例: +```json +{ + "fun": "stopTextAnswer", + "baseId": 1, + "infos": { + "state": "OK" + }, + "packetTag": "1" +} +``` + +#### 支持设备说明 + +| **基站+键盘** | **支持** | **备注** | +| --- | --- | --- | +| B100-2.4G+S6 | 支持 | | +| B200-2.4G+S6 | 支持 | | + +### 自由题型 + +#### 开始作答 + +发送: + +fun: "startFreeQuestion" //开始填空题 +params:{} + +指令样例: + +```json +{ + "fun": "startFreeQuestion", + "baseId": 0, + "params": {}, + "packetTag": "1" +} +``` + +接收: + +fun: "startFreeQuestion " //开始自由题型 +baseId: "1" //接收到指令的基站ID +infos:{"state":"OK"} //返回状态,成功为OK + +指令样例: + +```json +{ + "fun": "startFreeQuestion", + "baseId": 1, + "infos": { + "state": "OK" + }, + "packetTag": "1" +} +``` + +#### 接收作答 + +接收: +接收作答数据有键盘提交决定分为:选择题、判断题和数字题三个类型 + +选择题: +fun: "answerChoices" //自由题型作答返回 +baseId: "1"//接收到指令的基站ID +infos: {} + + +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +| keySn | 键盘Sn | | +| keyValue | 键值 | ABCD/1234 | + + +指令样例: + +```json +{ + "fun": "answerChoices", + "baseId": 1, + "infos": { + "keySn": "1479824643", + "keyValue": "ABC" + }, + "packetTag": "0" +} +``` + +判断题: +fun: "answerTrueFalse" //自由题型作答返回 +baseId: "1"//接收到指令的基站ID +infos: {} + +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +| keySn | 键盘Sn | | +| keyValue | 键值 |1~2| + +指令样例: + +```json +{ + "fun": "answerTrueFalse", + "baseId": 1, + "infos": { + "keySn": "1479824643", + "keyValue": "1" + }, + "packetTag": "0" +} +``` +数字题: +fun: "answerNumber" //自由题型作答返回 +baseId: "1"//接收到指令的基站ID +infos: {} + +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +| keySn | 键盘Sn | | +| keyValue | 键值 |键盘提交的值| + +指令样例: + +```json +{ + "fun": "answerNumber", + "baseId": 1, + "infos": { + "keySn": "1479824643", + "keyValue": "99.99" + }, + "packetTag": "0" +} +``` + + + +#### 停止作答 + +发送: +fun: "stopFreeQuestion" //停止自由题型 +params:{} //默认空 + + +指令样例: +```json +{ + "fun": "stopFreeQuestion", + "packetTag": "1" +} +``` + +接收: + +fun: "stopFreeQuestion" //停止自由题型 +baseId: "1"//收到的基站ID +infos:{"state":"OK"}//返回状态,成功为OK + +指令样例: +```json +{ + "fun": "stopFreeQuestion", + "baseId": 1, + "infos": { + "state": "OK" + }, + "packetTag": "1" +} +``` + +#### 支持设备说明 + +| **基站+键盘** | **支持** | **备注** | +| --- | --- | --- | +| B200-2.4G+S6 | 支持 |需要指定键盘支持| + + +### 自定义题型 + +#### 开始测试 + +发送: + +fun: "startKeyPadCustomQuestions" //开始 +params:{} + +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +|titleTable| 题目表 |数组[字符串]| +| optionTable | 选项表 |数组
"A,B,C,D" [默认]
" 1,2,3,4 "
" 对,错 "
" √,× "
" 同意,反对,弃权 "| +|ruleTable| 规则表 |数组[内容请参考“规则字段解释”]| +|permissionTable| 许可权限表 |数组| +|configTable| 配置表 |数组| + +许可权限表结构表说明 +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +|permission| 许可权限 |0:无[默认]
1: 允许
2: 禁止| +|KeySnList| 键盘列表 |数组
"1479824643"
"1479824644"
"1479824645"
"1479824646"| + + +配置表结构表说明 +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +|ruleType| 题编号 |1-200| +|titleID|题目表ID|1-200| +|optionID|选项表ID|1-200| +|ruleID|规则表ID|1-200| +|permissionID|许可权限表ID|1-200| + +规则字段解释: +规则类型1: + +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +|ruleType| 规则类型 |1| +|mode|模式|0: 默认(单选选择)
1: 纯数字组合 ,包含(上下键做负号与点号)
2: 填空自由组合,键盘自己实现输入方式
3: 多小题显示格式
4: 批次表决、批次评议
5: 批次评分
6: 名单选举
7: 累计投票、股权投票| +|modifyMode|修改模式|0:不可修改
1:可修改,默认| +|secrecyMode|保密模式|0:不保密,默认
1:保密| +|lessMode|迫选模式|0:不迫选,默认
1:迫选| +|repeat|重复模式|0:不限制,默认
1:单个选项只能选一次| +|sort|自动排序|0:保留输入顺序
1:选项自动排序,默认| +|max|最大可选人数|| +|min|最小可选人数|| +|maximum|最大可供选择项目数|1-10| +|maxOptions|可选出数目|最小值是1,最大值不超出maximum| +|topLimit|数字上限|浮点数格式的字符串| +|lowerLimit|数字下限|浮点数格式的字符串| + +规则类型2: + +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +|ruleType| 规则类型 |2| +|mode|模式|0:默认(选择)| +|modifyMode|修改模式|0:不可修改
1:可修改,默认| +|secrecyMode|保密模式|0:不保密,默认
1:保密| +|lessMode|迫选模式|0:不迫选,默认
1:迫选| +|repeat|重复模式|0:不限制,默认
1:单个选项只能选一次| +|sort|自动排序|0:保留输入顺序
1:选项自动排序,默认| +|max|最大可选人数|| +|min|最小可选人数|| +|retain|保留数字|数组 范围000-999| +|range|数字范围|数组| + +数字范围数据结构 +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +|rangeStart|数字范围开始|浮点数格式的字符串| +|rangeEnd|数字范围结束|浮点数格式的字符串| + + + +指令样例: +```json +{ + "fun": "startKeyPadCustomQuestions", + "baseId": 0, + "params": { + "titleTable": ["单选题", "数字表决"], + "optionTable": [ + ["A", "B", "C", "D"], + ["同意", "反对", "弃权"] + ], + "ruleTable": [{ + "ruleType": "1", + "mode": "0", + "modifyMode": "0", + "secrecyMode": "0", + "lessMode": "0", + "repeat": "0", + "sort": "1", + "max": "4", + "min": "1", + "maximum": "4", + "maxOptions": "1", + "topLimit": "100.0", + "lowerLimit": "0.1" + }, + { + "ruleType": "2", + "mode": "0", + "modifyMode": "0", + "secrecyMode": "0", + "lessMode": "0", + "repeat": "0", + "sort": "1", + "max": "4", + "min": "1", + "retain": ["777", "999"], + "range": [{ + "rangeStart": "1", + "rangeEnd": "100" + }, { + "rangeStart": "101", + "rangeEnd": "200" + }, { + "rangeStart": "201", + "rangeEnd": "300" + }] + } + ], + "permissionTable": [{ + "permission": "2", + "keySnList": ["1479824643", "1479824644", "1479824645", "1479824646"] + }, + { + "permission": "1", + "keySnList": ["1479824643", "1479824644", "1479824645", "1479824646"] + } + ], + "configTable": [{ + "number": "1", + "titleID": "1", + "optionID": "1", + "ruleID": "1", + "permissionID": "0" + }, + { + "number": "2", + "titleID": "2", + "optionID": "2", + "ruleID": "2", + "permissionID": "0" + } + ] + }, + "packetTag": "59" +} +``` + +接收: + +fun: "startKeyPadCustomQuestions" //开始自定义题型 +baseId: "1"//接收到指令的基站ID +infos:{"state":"OK"}//返回状态,成功为OK + +指令样例: + +```json +{ + "baseId": 1, + "fun": "startKeyPadCustomQuestions", + "infos": { + "state": "OK" + }, + "packetTag": "59" +} +``` + +#### 接收作答 + +接收: + +fun: "answerKeyPadCustomQuestions" //自定义题型返回 +baseId: "1"//接收到指令的基站ID +infos: {} + +数字范围数据结构 +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +|Time|答题时间|单位秒| +|keySn|键盘Sn|| +|Seq|题序号|| +|keyValue|键值|键盘提交的值| + + + +指令样例: +```json +{ + "fun": "answerKeyPadCustomQuestions", + "baseId": 1, + "infos": { + "time": "5.42", + "keySn": "1479824643", + "seq": "1", + "keyValue": "12" + }, + "packetTag": "1" +} +``` + + +#### 退出作答 + +发送: + +fun: "stopKeyPadCustomQuestions" //停止多题题型 +params:{} //默认空 + + +指令样例: +```json +{ + "fun": "stopKeyPadCustomQuestions", + "baseId": 0, + "packetTag": "1" +} +``` + + +接收: +fun: "stopKeyPadCustomQuestions" //停止键盘测试 +baseId: "1"//收到的基站ID +infos:{"state":"OK"}//返回状态,成功为OK + + +指令样例: +```json +{ + "fun": "stopKeyPadCustomQuestions", + "baseId": 1, + "infos": { + "state": "OK" + }, + "packetTag": "1" +} +``` + + +#### 支持设备说明 +| **基站+键盘** | **支持** | **备注** | +| --- | --- | --- | +| B200-2.4G+M6 | 支持 |需要指定键盘支持| + + + + +## NFC刷卡 + +刷卡流程: + +刷卡后可以将键盘和基站自动完成配对。当需要刷卡绑定时应用软件先给基站发送一个键盘的姓名,键盘靠近基站感应区就会直接绑定当前数据并返回状态给应用。绑定成功后应用再发送下一个键盘的绑定信息,依次循环来绑定多个。 + +### 写刷卡数据 + +发送: + +fun: "writeNFCInfo" //写NFC绑定数据 +baseId: 1//1~32 (键盘所连基站ID) +params:{}// + +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +|userName|姓名|最多24个汉字(48个字符),键盘左上角显示| +|matchCode|配对码|四字节 十六进制显示| + + + +指令样例: + +```json +{ + "fun": "writeNFCInfo", + "baseId": 1, + "params": { + "userName": "张三", + "matchCode": "22120007" + }, + "packetTag": "1" +} +``` + +### 刷卡绑定反馈 + +接收: +fun: "NFCInfo" //NFC绑定数据 +baseId: "1"//键盘所连基站ID +infos:{} + +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +|keySn|键盘Sn|| +|state|状态|1:预留
2:基站报告正常刷卡的键盘SN
3:预留
4:刷卡写指定配对码消息| +|number|数量|预留| + + +指令样例: + +```json +{ + "fun": "NFCInfo", + "baseId": 1, + "infos": { + "keySn": "1479824643", + "state": "4", + "number": "0" + }, + "packetTag": "1" +} +``` + + +### NFC数据清除指令 + +发送: +fun: "writeNFCEmpty" //写NFC绑定数据 +baseId: 1//1~32 (键盘所连基站ID) +params:{}// + + +指令样例: + +```json +{ + "fun": "writeNFCEmpty", + "baseId": 1, + "params": {}, + "packetTag": "1" +} +``` + +### 支持设备说明 +| **基站+键盘** | **支持** | **备注** | +| --- | --- | --- | +| B200-2.4G+S6 | 支持 |带NFC键盘有效| + + +## 硬件参数 + +硬件的读写操作返回数据都是相同的,具体值参见写指令的value + +### 基站 + +#### 基站编号 + +读 + +发送: +fun: "readBaseStationID" //读基站编号 +baseId: 1//1~32 +params:{}//可不填 + + + +指令样例: +```json +{ + "fun": "readBaseStationID", + "baseId": 2, + "packetTag": "1" +} +``` + +返回 +接收: +fun: "baseStationID" +baseId: "2"//基站ID +infos:{"value":"2"}//返回基站ID +指令样例: + + +指令样例: + +```json +{ + "fun": "baseStationID", + "baseId": 2, + "infos": { + "pathAdd": "12345", + "value": "2" + }, + "packetTag": "1" +} +``` +支持设备说明 +| **基站+键盘** | **支持** | **备注** | +| --- | --- | --- | +| B100-2.4G+S6 | 支持 || +| B200-2.4G+S6 | 支持 || +| B200-5.8G+T2 | 支持 || + + +#### 基站频点 + +读 + +发送: +fun: "readBaseStationChannel" //读基站频点 +baseId: 0//0~32 (默认为0表示读取所有基站) +params:{}//可不填 + + +指令样例: + +```json +{ + "fun": "readBaseStationChannel", + "baseId": 0, + "packetTag": "1" +} +``` + +写 + +发送: +fun: "writeBaseStationChannel" //写基站频点 +baseId: 1//1~32 (必须指定基站) +params:{"value":"1"}//1~12 (频点) + +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +|value|基站频点|单频点基站有效| +|values|基站频点|多频点基站有效| + + +指令样例: + +```json +{ + "fun": "writeBaseStationChannel", + "baseId": 1, + "params": { + "value": "3", + "values": ["3", "6", "9", "12"] + }, + "packetTag": "1" +} +``` + +返回 + +接收: +fun: "baseStationChannel" +baseId: 1//基站ID +infos:{"value":"3"}//返回基站频点值 + + +指令样例: + +```json +{ + "fun": "baseStationChannel", + "baseId": 1, + "infos": { + "value": "3", + "values": ["3", "6", "9", "12"] + }, + "packetTag": "1" +} +``` + +支持设备说明 +| **基站+键盘** | **支持** | **备注** | +| --- | --- | --- | +|B100-2.4GS+S6|支持单频点|频率范围1~80| +|B200-2.4GS+S6|支持单频点|频率范围1~80| +|B200-2.4GM+S6|支持多频点|频率范围1~80| +|B200-5.8G+T2|支持单频点|频率范围1~12| + +#### 键盘登录菜单显示 + +读 + +发送: +fun: "readKeyboardLoginMenu" //读键盘登录菜单显示 +baseId: 0//0~32 (默认为0表示读取所有基站) +params:{}//可不填 + + +指令样例: + +```json +{ + "fun": "readKeyboardLoginMenu", + "baseId": 0, + "packetTag": "1" +} +``` + +写 + +发送: +fun: "writeKeyboardLoginMenu" //写键盘登录菜单显示 +baseId: 1 //1~32 (必须指定基站) +params:{"value":"1"}//0~1 (0不允许登录;1允许登录) + + +指令样例: + +```json +{ + "fun": "writeKeyboardLoginMenu", + "baseId": 1, + "params": { + "value": "1" + }, + "packetTag": "1" +} +``` + +返回 + +接收: + +fun: "baseStationKeyboardLoginMenu" +baseId: 1//基站ID +infos:{"value":"1"}//返回键盘登录菜单显示值 + + +指令样例: + +```json +{ + "fun": "baseStationKeyboardLoginMenu", + "baseId": 1, + "infos": { + "value": "1" + }, + "packetTag": "1" +} +``` + +支持设备说明 + +| **基站+键盘** | **支持** | **备注** | +| --- | --- | --- | +| B100-2.4G+S6 | 支持 || +| B200-2.4G+S6 | 支持 || + + + +#### 基站型号(只读) + +读 + +发送: + +fun: "readBaseStationModel" //读基站型号 +baseId: 0//0~32 (默认为0表示读取所有基站) +params:{}//可不填 + + +指令样例: + +```json +{ + "fun": "readBaseStationModel", + "baseId": 0, + "packetTag": "1" +} +``` + +返回 + +接收: + +fun: "baseStationModel" +baseId: 1//基站ID +infos:{"value":"218"}//返回基站型号 + + +指令样例: + +```json +{ + "fun": "baseStationModel", + "baseId": 1, + "infos": { + "value": "218" + }, + "packetTag": "1" +} +``` + +基站型号代码查询表 + +| **基站型号代码** | **基站型号** | **备注** | +| --- | --- | --- | +| 217 | B100-2.4G || +| 218 | B200-2.4G || +| 219 | B200-5.8G || + + +支持设备说明 + + | **基站+键盘** | **支持** | **备注** | +| --- | --- | --- | +| B100-2.4G+S6 | 支持 || +| B200-2.4G+S6 | 支持 || +| B200-5.8G+T2 | 支持 || + +#### 基站软件版本(只读) + +读 + +发送: + +fun: "readBaseStationSVersion" //读基站软件版本 +baseId: 0 //0~32 (默认为0表示读取所有基站) +params:{}//可不填 + + +指令样例: + +```json +{ + "fun": "readBaseStationSVersion", + "baseId": 0, + "packetTag": "1" +} +``` + +返回 + +接收: + +fun: "baseStationSVersion" +baseId: 1//基站ID +infos:{"value":"V2.0.2"}//返回基站软件版本 + + +指令样例: + +```json +{ + "fun": "baseStationSVersion", + "baseId": 1, + "infos": { + "value": "V2.0.2" + }, + "packetTag": "1" +} +``` + +支持设备说明 + +| **基站+键盘** | **支持** | **备注** | +| --- | --- | --- | +| B100-2.4G+S6 | 支持 || +| B200-2.4G+S6 | 支持 || +| B200-5.8G+T2 | 支持 || + +#### 基站序列号(只读) + +读 + +发送: + +fun: "readBaseStationSN" //读基站序列号 +baseId: 0 //0~32 (默认为0表示读取所有基站) +params:{}//可不填 + + +指令样例: + +```json +{ + "fun": "readBaseStationSN", + "baseId": 0, + "packetTag": "1" +} +``` + +返回 + +接收: + +fun: "baseStationSN" +baseId: 1//基站ID +infos:{"value":"FFFFFFFFFF"}//返回基站序列号 + + +指令样例: + +```json +{ + "fun": "baseStationSN", + "baseId": 1, + "infos": { + "value": "FFFFFFFFFF" + }, + "packetTag": "1" +} +``` + +支持设备说明 + +| **基站+键盘** | **支持** | **备注** | +| --- | --- | --- | +| B100-2.4G+S6 | 支持 || +| B200-2.4G+S6 | 支持 || +| B200-5.8G+T2 | 支持 || + +#### 基站名称 + +读 + +发送: + +fun: "readBaseStationTitle" //读基站名称 +baseId: 0 //0~32 (默认为0表示读取所有基站) +params:{}//可不填 + + +指令样例: + +```json +{ + "fun": "readBaseStationTitle", + "baseId": 0, + "packetTag": "1" +} +``` + +写 + +发送: + +fun: "writeBaseStationTitle" //写基站名称 +baseId: 1//1~32(必须指定基站) +params:{"value":" A2021"}//基站名称,最长12字节 + + +指令样例: + +```json +{ + "fun": "writeBaseStationTitle", + "baseId": 1, + "params": { + "value": "A2021" + }, + "packetTag": "1" +} +``` + +返回 + +接收: + +fun: "baseStationTitle" +baseId: 1//基站ID +infos:{"value":"A2021"}//返回基站名称 + + +指令样例: + +```json +{ + "fun": "baseStationTitle", + "baseId": 1, + "infos": { + "value": "A2021" + }, + "packetTag": "1" +} +``` + +支持设备说明 + +| **基站+键盘** | **支持** | **备注** | +| --- | --- | --- | +| B100-2.4G+S6 | 支持 || +| B200-2.4G+S6 | 支持 || +| B200-5.8G+T2 | 支持 || + +#### 基站配对码 + +读 + +发送: + +fun: "readBaseStationMatchCode" //读基站配对码 +baseId: 0 //0~32 (默认为0表示读取所有基站) +params:{}//可不填 + + +指令样例: + +```json +{ + "fun": "readBaseStationMatchCode", + "baseId": 0, + "packetTag": "1" +} +``` + +返回 + +接收: + +fun: "baseStationMatchCode" +baseId: 1//基站ID +infos:{"value":"21072333"}//返回基站配对码 + + +指令样例: + +```json +{ + "fun": "baseStationMatchCode", + "baseId": 1, + "infos": { + "value": "21072333" + }, + "packetTag": "1" +} +``` + +支持设备说明 + +| **基站+键盘** | **支持** | **备注** | +| --- | --- | --- | +| B100-2.4G+S6 | 支持 || +| B200-2.4G+S6 | 支持 || +| B200-5.8G+T2 | 支持 || + +#### 基站频点冲突 + +检测到基站频点冲突将会返回给应用程序提示,应用程序可根据情况更改频点。 +接收: +fun: "baseStationChannelInterference" // 基站频点冲突 +baseId: //发生冲突基站ID +infos:{ "value":"5"}//频点5冲突 +packetTag:"0"//数据包标签 + + +指令样例: + +```json +{ + "fun": "baseStationChannelInterference", + "baseId": 1, + "infos": { + "value": "5" + }, + "packetTag": "0" +} +``` + +支持设备说明 + +| **基站+键盘** | **支持** | **备注** | +| --- | --- | --- | +| B100-2.4G+S6 | 支持 || +| B200-2.4G+S6 | 支持 || +| B200-5.8G+T2 | 支持 || + +#### 基站容量 + +读 + +发送: + +fun: "readBaseStationCapacity" //读基站容量 +baseId: 0 //0~32 (默认为0表示读取所有基站) +params:{}//可不填 + + +指令样例: + +```json +{ + "fun": "readBaseStationCapacity", + "baseId": 0, + "packetTag": "1" +} +``` + +返回 + +接收: + +fun: "baseStationCapacity" +baseId: "1"//基站ID +infos:{"keypadNumber":"60","lock":"1"}//返回基站键盘容量值 + + +指令样例: + +```json +{ + "fun": "baseStationID", + "baseId": 2, + "infos": { + "keypadNumber": "60", + "lock": "1" + }, + "packetTag": "1" +} +``` + +支持设备说明 +| **基站+键盘** | **支持** | **备注** | +| --- | --- | --- | +| B200-5.8G+T2 | 支持 || + + +#### 快速配对 + +##### 开始快速配对 + +发送: + +fun: "startQuickMatch" //开始快速配对 +baseId:1 // 1~32 (必选参数,范围(1~32)) +params:{} + + +指令样例: + +```json +{ + "fun": "startQuickMatch", + "baseId": 1, + "packetTag": "1" +} +``` + +接收: + +fun: "startQuickMatch" //开始快速配对 +baseId: "1"//接收到指令的基站ID +infos:{"state":"OK"}//返回状态,成功为OK + + +指令样例: + +```json +{ + "fun": "startQuickMatch", + "baseId": 1, + "infos": { + "state": "OK" + }, + "packetTag": "1" +} +``` + +##### 停止快速配对 + +发送: + +fun: "stopQuickMatch" //停止快速配对 +params:{} //默认空 + + +指令样例: + +```json +{ + "fun": "stopQuickMatch", + "baseId": 1, + "packetTag": "1" +} +``` + +接收: + +fun: "stopQuickMatch" //停止快速配对 +baseId: "1"//收到的基站ID +infos:{"state":"OK"}//返回状态,成功为OK + + +指令样例: + +```json +{ + "fun": "stopQuickMatch", + "baseId": 1, + "infos": { + "state": "OK" + }, + "packetTag": "1" +} +``` + +##### 支持设备说明 +| **基站+键盘** | **支持** | **备注** | +| --- | --- | --- | +| B100-2.4G+S6 | 支持 || +| B200-2.4G+S6 | 支持 || + + +#### 键盘登录密码 + +读 + +发送: + +fun: "readKeyboardLoginPW" //读键盘登录密码 +baseId: 0// 0~32 (指令不发送baseID,默认为0表示读取所有基站) +params:{}//可不填 + + +指令样例: + +```json +{ + "fun": "readKeyboardLoginPW", + "baseId": 0, + "packetTag": "1" +} +``` + +写 + +发送: + +fun: "writeKeyboardLoginPW" //写键盘登录密码 +baseId: 1 //1~32 (必须指定基站) +params:{"value":"0"}//0~9999 (0不用核对) + +指令样例: + +```json +{ + "fun": "writeKeyboardLoginPW", + "baseId": 1, + "params": { + "value": "0" + }, + "packetTag": "1" +} +``` + +返回 + +接收: + +fun: "baseStationKeyboardLoginPW" +baseId: 1//基站ID +infos:{"value":"1"}//返回键盘登录密码值 + + +指令样例: + +```json +{ + "fun": "baseStationKeyboardLoginPW", + "baseId": 1, + "infos": { + "value": "0" + }, + "packetTag": "1" +} +``` + +支持设备说明 +| **基站+键盘** | **支持** | **备注** | +| --- | --- | --- | +| B100-2.4G+S6 | 支持 || +| B200-2.4G+S6 | 支持 || + + +#### 基站名称隐藏 + +读 + +发送: + +fun: "readBaseStationNameHidden" //读基站名称隐藏 +baseId: 0// 0~32 (指令不发送baseID,默认为0表示读取所有基站) +params:{}//可不填 + + +指令样例: + +```json +{ + "fun": "readBaseStationNameHidden", + "baseId": 0, + "packetTag": "1" +} +``` + +写 + +发送: + +fun: "writeBaseStationNameHidden" //写基站名称隐藏 +baseId: 1 //1~32 (必须指定基站) +params:{"value":"0"}//0~1 (0隐藏,1不隐藏) + + +指令样例: + +```json +{ + "fun": "writeBaseStationNameHidden", + "baseId": 1, + "params": { + "value": "0" + }, + "packetTag": "1" +} +``` + +返回 + +接收: + +fun: "baseStationNameHidden" +baseId: 1//基站ID +infos:{"value":"1"}//返回基站名称隐藏值 (0隐藏,1不隐藏) + + +指令样例: + +```json +{ + "fun": "baseStationNameHidden", + "baseId": 1, + "infos": { + "value": "0" + }, + "packetTag": "1" +} +``` + +支持设备说明 +| **基站+键盘** | **支持** | **备注** | +| --- | --- | --- | +| B100-2.4G+S6 | 支持 || +| B200-2.4G+S6 | 支持 || + +#### 基站TCP/IP参数 + +读 + +发送: + +fun: "readBaseStationTcpIp" //读基站TCP/IP参数 +baseId: 0// 0~32 (指令不发送baseID,默认为0表示读取所有基站) +params:{}//可不填 + + +指令样例: + +```json +{ + "fun": "readBaseStationTcpIp", + "baseId": 0, + "packetTag": "1" +} +``` + +写 + +发送: + +fun: "writeBaseStationTcpIp" //写基站TcpIp +baseId: 1 //1~32 (必须指定基站) +params: + + +指令样例: + +```json +{ + "fun": "writeBaseStationTcpIp", + "baseId": 1, + "params": { + "mac": "FF.FF.FF.FF.FF", + "ip": "192.168.10.10", + "mask": "255.255.255.0", + "gateway": "192.168.10.1" + }, + + "packetTag": "1" +} +``` + +返回 + +接收: + +fun: "baseStationTcpIp" +baseId: 1//基站ID +infos:{"value":"1"}//返回基站TcpIp + + +指令样例: + +```json +{ + "fun": "baseStationTcpIp", + "baseId": 1, + "infos": { + "ip": "192.168.10.10", + "mac": "FF.FF.FF.FF.FF", + "mask": "255.255.255.0", + "gateway": "192.168.10.1" + }, + "packetTag": "1" +} +``` + +支持设备说明 +| **基站+键盘** | **支持** | **备注** | +| --- | --- | --- | +| EA4000T-2.4G+S5 | 支持 |带LAN接口版本| + + +#### 基站键盘白名单管理 + +读 + +发送: + +fun: "readWhiteList" //读白名单列表 +baseId: 0// + + +指令样例: + +```json +{ + "fun": "readWhiteList", + "baseId": 0, + "params": {}, + "packetTag": "1" +} +``` + +读返回 +接收: +fun: "whiteList" +baseId: 1//基站ID +infos:{}// + +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +|keySn|键盘Sn|| +|state|键盘状态
[B200_5.8G+T2组合有效]|0:离线
1:在线| + +指令样例: + +```json +{ + "fun": "whiteList", + "baseId": 1, + "infos": [{ + "keySn": "2111120140", + "state": "0" + }, + { + "keySn": "0005243136", + "state": "0" + }, + { + "keySn": "2111120102", + "state": "0" + } + ], + "packetTag": "1" +} +``` + +写 + +发送: + +fun: "writeWhiteList" //写白名单列表 +baseId: 1 //1~32 (必须指定基站) +keySnList:[]//键盘SN数组最多200键盘SN + +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +|keySnList|键盘列表|B200-2.4GS+S6:键盘最多 200只
EA3100-2.4G+S62:键盘最多 200只
B200-5.8G+T2:键盘最多 需要参考 7.5.1.10基站容量| + + +指令样例: + +```json +{ + "fun": "writeWhiteList", + "baseId": 2, + "keySnList": [{ + "keySn": "2111120140" + }, + { + "keySn": "0005243136" + }, + { + "keySn": "2111120102" + } + ], + "packetTag": "10" +} +``` + +返回 + +接收: + +fun: "whiteList" +baseId: 1//基站ID +infos:{}// + +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +|keySn|键盘Sn|| +|state|键盘状态|OK:成功| + +指令样例: + +```json +{ + "fun": "whiteList", + "baseId": 1, + "infos": [{ + "keySn": "2111120140", + "state": "OK" + }, + { + "keySn": "0005243136", + "state": "OK" + }, + { + "keySn": "2111120102", + "state": "OK" + } + ], + "packetTag": "1" +} +``` + +支持设备说明 + +| **基站+键盘** | **支持** | **备注** | +| --- | --- | --- | +| B200-2.4G+S6 | 支持 || +| B200-5.8G+T2 | 支持 || +| EA3100-2.4G+S62 | 支持 || + +#### 基站锁定键盘 + +发送: +fun: "lockKeypad" //锁定键盘 +baseId: 0// 0~32 (指令不发送baseID,默认为0表示所有基站) +params:{} //数组对象,指定键盘需填 + +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +|baseId|基站id|在指定键盘时请传对应的基站baseId
0:所有基站| +|keySnList|键盘列表|没有列表时为锁定当前所有在线列表| + +指令样例: +锁定指定键盘 +```json +{ + "fun": "lockKeypad", + "baseId": 1, + "keySnList": [{ + "keySn": "2111120140" + }, + { + "keySn": "0005243136" + }, + { + "keySn": "2111120102" + } + ], + "params": {}, + "packetTag": "1" +} +``` + +接收: +```json +{ + "fun": "lockKeypad", + "baseId": 1, + "infos": [{ + "keySn": "1837454011", + "state": "OK" + }, + { + "keySn": "1837454012", + "state": "OK" + } + ], + "packetTag": "1" +} +``` + +支持设备说明 + +| **基站+键盘** | **支持** | **备注** | +| --- | --- | --- | +| B200-5.8G+T2 | 支持 || + +#### 基站解锁键盘 +发送: +fun: "unlockKeypad" //解锁键盘 +baseId: 0// 0~32 (指令不发送baseID,默认为0表示所有基站) +params:{} //数组对象,指定键盘需填 + +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +|baseId|基站id|在指定键盘时请传对应的基站baseId
0:所有基站| +|keySnList|键盘列表|没有列表时为解锁所有键盘| + +指令样例: + +解锁键盘 +```json +{ + "fun": "unlockKeypad", + "baseId": 1, + "keySnList": [{ + "keySn": "2111120140" + }, + { + "keySn": "0005243136" + }, + { + "keySn": "2111120102" + } + ], + "params": {}, + "packetTag": "1" +} +``` + +接收: +```json +{ + "fun": "unlockKeypad", + "baseId": 1, + "infos": [{ + "keySn": "2111120140", + "state": "OK" + }, + { + "keySn": "0005243136", + "state": "OK" + }, + { + "keySn": "2111120102", + "state": "OK" + } + ], + "packetTag": "1" +} +``` + +| **基站+键盘** | **支持** | **备注** | +| --- | --- | --- | +| B200-5.8G+T2 | 支持 || + +#### 基站追加键盘 + +发送: +fun: "addWhiteList" //追加键盘 +params:{} //键盘sn +keySnList:[ "keySn":"2111120140"] //列表不能为空 + +指令样例: + +```json +{ + "fun": "addWhiteList", + "baseId": 1, + "keySnList": [{ + "keySn": "2111120140" + }], + "params": {}, + "packetTag": "1" +} +``` +接收: +fun: "whiteList" +baseId: 1//基站ID +infos:{}// + +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +|keySn|键盘SN|| +|state|键盘状态|OK:成功| + +```json +{ + "fun": "whiteList", + "baseId": 1, + "infos": { + "keySn": "1837454012", + "state": "OK" + }, + "packetTag": "1" +} +``` + +| **基站+键盘** | **支持** | **备注** | +| --- | --- | --- | +| B200-2.4G+S6 | 支持 || +| B200-5.8G+T2 | 支持 || + +#### 基站删除键盘 + +发送: +fun: "delWhiteList" //踢出键盘,删除键盘 +params:{} //键盘sn +keySnList:[ "keySn":"2111120140"] //列表不能为空 + + +指令样例: + +```json +{ + "fun": "delWhiteList", + "baseId": 0, + "keySnList": [{ + "keySn": "2111120140" + }], + "params": {}, + "packetTag": "1" +} +``` +接收: +fun: "delWhiteList" +baseId: 1//基站ID +infos:{}// + +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +|keySn|键盘SN|| +|state|键盘状态|OK:成功| + +```json +{ + "fun": "delWhiteList", + "baseId": 1, + "packetTag": "1", + "infos": { + "keySn": "1837454012", + "state": "OK" + } +} +``` + +| **基站+键盘** | **支持** | **备注** | +| --- | --- | --- | +| B200-2.4G+S6 | 支持 || +| B200-5.8G+T2 | 支持 || + +#### 基站清掉所有键盘 + +发送: +fun: "clearWhiteList" //清掉所有键盘 +params:{} //无 + + + +指令样例: + +```json +{ + "fun": "clearWhiteList", + "baseId": 1, + "packetTag": "1" +} +``` +接收: +fun: "clearWhiteList" +baseId: 1//基站ID +infos:{}// + +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +|state|键盘状态|OK:成功| + +```json +{ + "fun": "clearWhiteList", + "baseId": 1, + "packetTag": "1", + "infos": { + "state": "OK" + } +} +``` + +| **基站+键盘** | **支持** | **备注** | +| --- | --- | --- | +| B200-2.4G+S6 | 支持 || +| B200-5.8G+T2 | 支持 || + +#### 键盘关机时间 + +读 +发送: +fun: "readKeypadAutoPowerOffLevel" //读键盘关机时间等级 +baseId: 0//0~32 (指令不发送baseID,默认为0表示读取所有基站) +params:{"value":0}// + +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +|value|键盘关机时间等级|0-30秒
1:2分钟
2:10分钟
3:45分钟
255:不自动关机| + +指令样例: +```json +{ + "fun": "readKeypadAutoPowerOffLevel", + "baseId": 0, + "packetTag": "1" +} +``` + +写 +发送: +fun: "writeKeypadAutoPowerOffLevel" //写键盘关机时间等级 +baseId: 1//1~32 (必须指定基站) +params:{"value":"0"}// + +指令样例: + +```json +{ + "fun": "writeKeypadAutoPowerOffLevel", + "baseId": 1, + "params": { + "value": "0" + }, + "packetTag": "1" +} +``` + +返回 +接收: +fun: "keypadAutoPowerOffLevel" +baseId: 1//基站ID +infos:{"value":"0"}//返回键盘关机时间等级 +指令样例: + +```json +{ + "fun": "keypadAutoPowerOffLevel", + "baseId": 1, + "infos": { + "value": "0" + }, + "packetTag": "1" +} +``` + +| **基站+键盘** | **支持** | **备注** | +| --- | --- | --- | +| 全系列 | 支持 || + +#### 基础参数配置 + +读 +发送: +fun: "readBaseStationBaseConfig" //读基站BaseConfig +baseId: 0// 0~32 (指令不发送baseID,默认为0表示读取所有基站) +params:{}//可不填 + +指令样例: +```json +{ + "fun": "readBaseStationBaseConfig", + "baseId": 0, + "packetTag": "1" +} +``` + +写 +发送: +fun: "writeBaseStationBaseConfig" //写基站BaseConfig +baseId: 1 //1~32 (必须指定基站) +params:{}// + +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +|bootVibraton|开机震动|0: 关闭
1: 开启| +|voteVibraton|答题开始震动|0: 关闭
1: 开启| +|led|指示灯开关|0: 关闭
1: 开启| + + +指令样例: + +```json +{ + "fun": "writeBaseStationBaseConfig", + "baseId": 1, + "params": { + "bootVibraton": "1", + "voteVibraton": "1", + "led": "1" + }, + "packetTag": "1" +} +``` + +返回 +接收: +fun: "baseStationBaseConfig" +baseId: 1//基站ID +infos:{ }//返回基站 + +指令样例: + +```json +{ + "fun": "baseStationBaseConfig", + "baseId": 1, + "infos": { + "bootVibraton": "1", + "voteVibraton": "1", + "led": "1" + }, + "packetTag": "1" +} +``` + +| **基站+键盘** | **支持** | **备注** | +| --- | --- | --- | +| B200-5.8G+T2 | 支持 || + +#### 基站AES + +读 +发送: +fun: "readBaseStationAES" //读基站AES +baseId: 0// 0~32 (指令不发送baseID,默认为0表示读取所有基站) +params:{}//可不填 + +指令样例: +```json +{ + "fun":"readBaseStationAES", + "baseId":0, + "packetTag":"1" +} +``` + +写 +发送: +fun: "writeBaseStationAES" //写基站AES +baseId: 1 //1~32 (必须指定基站) +params:{"value":"0"}// + +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +| baseId | 基站ID | 1~32 | +| value | 加密模式 | 0:无线不加密
1:无线AES128加密
2:无线 AES256加密 | + +指令样例: +```json +{ + "fun":"writeBaseStationAES", + "baseId":1, + "packetTag":"1" +} +``` + +返回 +接收: +fun: "baseStationAES" +baseId: 1//基站ID +infos:{"value":"1"}//返回基站AES + +指令样例: +```json +{ + "fun": "baseStationAES", + "baseId": 1, + "infos": { + "value": "0" + }, + "packetTag": "1" +} +``` + +克隆参数 +发送: +fun: "copyBaseStationAES" //克隆基站AES参数 +baseId: 0 +params:{}// + +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +| destBaseID | 目标基站ID | 1~32 | +| sourceBaseID | 来源基站ID | 1~32 | + + +指令样例: +```json +{ + "fun": "copyBaseStationAES", + "baseId": 0, + "params": { + "destBaseID": "2", + "sourceBaseID": "1" + }, + "packetTag": "1" +} +``` + +返回 +接收: +fun: " copyBaseStationAES " +baseId: 1//基站ID +infos:{"value":"OK"}//返回状态 + +指令样例: +```json +{ + "fun": "baseStationAES", + "baseId": 1, + "infos": { + "value": "OK" + }, + "packetTag": "1" +} +``` +支持设备说明 + +| **基站+键盘** | **支持** | **备注** | +| --- | --- | --- | +| B200-2.4GM+S6 | 支持 | | + + +### 键盘 + +键盘写参数可以不指定键盘SN,则对所有在线键盘进行写操作,但没有键盘状态返回。如需指定键盘信息下发,则需要指定键盘SN,所有键盘状态返回。 + +注:如果一条指定键盘指令中有一个keySN为空,则该指令会按不指定键盘执行。 + +#### 键盘外设(只写) + +写 + +fun: "writeKeypadDevice" //写键盘外设,由led灯、蜂鸣器、马达组合 +params:{} // + +数组对象,对象中的默认值为空字符串,各类(led、beep、motor)外设字段都不设置,表示该类不设置 + +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +| keySn | 键盘SN |空字符串,为所有在线键盘| +| ledTimes | Led灯闪烁次数 | 0~255 (0是马上灭,255是长亮)| +| ledOnTime | Led灯每次开时间 |0~255 (单位0.1s)| +| ledOffTime | Led灯每次关时间 |0~255 (单位0.1s,为0就是连续亮)| +| ledColorR | Led灯灯颜色,红值 |0~255(现只支持0灭和1亮,,>1也认为是1)| +| ledColorG | Led灯灯颜色,绿值 |0~255(现只支持0灭和1亮,,>1也认为是1)| +| ledColorB | Led灯灯颜色,蓝值 |0~255(现只支持0灭和1亮,,>1也认为是1)| +| beepTimes | 蜂鸣器响次数 | 0~255 (0是马上响,255是长响) | +| beepOnTime | 蜂鸣器每次开时间 |0~255 (单位0.1s)| +| beepOffTime | 蜂鸣器每次关时间 |0~255 (单位0.1s,为0就是连续响)| +| motorTimes |马达震动次数|0~255| +| motorOnTime | 马达每次开时间 |0~255 (单位0.1s)| +| motorOffTime | 马达每次关时间 |0~255 (单位0.1s,为0就是连续振动)| + +指令样例: + +所有键盘 + +```json +{ + "fun": "writeKeypadDevice", + "baseId": 1, + "params": { + "ledTimes": "3", + "ledOnTime": "1", + "ledOffTime": "1", + "ledColorR": "1", + "ledColorG": "1", + "ledColorB": "1", + "beepTimes": "3", + "beepOnTime": "1", + "beepOffTime": "1", + "motorTimes": "3", + "motorOnTime": "2", + "motorOffTime": "1" + }, + "packetTag": "1" +} +``` + +返回 + +fun: "writeKeypadDevice" +infos:{"state":"OK"}//返回状态,成功为OK + + +指令样例: + +```json +{ + "fun": "writeKeypadDevice", + "baseId": 0, + "infos": { + "keySn": "0000000000", + "state": "OK" + }, + "packetTag": "1" +} +``` + +指定键盘 + +```json +{ + "fun": "writeKeypadDevice", + "keySnList": [{ + "keySn": "0007899478" + }], + "params": { + "ledTimes": "3", + "ledOnTime": "1", + "ledOffTime": "1", + "ledColorR": "1", + "ledColorG": "1", + "ledColorB": "1", + "beepTimes": "3", + "beepOnTime": "1", + "beepOffTime": "1", + "motorTimes": "3", + "motorOnTime": "2", + "motorOffTime": "1" + }, + "packetTag": "1" +} +``` + +返回 + +fun: "writeKeypadDevice" +infos:{}//数组对象,同发送的 + + +指令样例: + +```json +{ + "baseId": 3, + "fun": "writeKeypadDevice", + "infos": { + "keySn": "0007899478", + "state": "OK" + }, + "packetTag": "1" +} +``` + +支持设备说明 + +| **基站+键盘** | **支持** | **备注** | +| --- | --- | --- | +| B200-5.8G+T2 | 支持 | 蜂鸣器部分参数无效 | + +#### 键盘反馈参数 + +读 +发送: +fun: "readKeypadFeedbackMode" //读键盘反馈模式参数 +baseId: 0//0~32 (指令不发送baseID,默认为0表示读取所有基站) +params:{}//读取时不需要 + +指令样例: + +```json +{ + "fun": "readKeypadFeedbackMode", + "baseId": 0, + "packetTag": "1" +} +``` + +写 + +发送: +fun: "writeKeypadFeedbackMode" //写键盘反馈模式参数 +baseId: 1//1~32 (必须指定基站) +params:{"mode":"1", "value":"4"}// + +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +|mode|反馈模式| 0:不启用(默认0不启用)
1:通用键码| +|value|反馈最大有效按键|1\~10| + +指令样例: + +```json +{ + "fun": "writeKeypadFeedbackMode", + "baseId": 0, + "params": { + "mode": "1", + "value": "4" + }, + "packetTag": "1" +} +``` + +返回 + +接收: +fun: "keypadFeedbackMode" +baseId: 1//基站ID +infos:{ "mode":"1", "value":"4"}//返回键盘反馈模式参数值 + +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +|mode|反馈模式| 0:不启用(默认0不启用)
1:通用键码,不显示| +|value|反馈最大有效按键|1\~10| + +指令样例: +```json +{ + "fun": "keypadFeedbackMode", + "baseId": 1, + "infos": { + "mode": "1", + "value": "4" + }, + "packetTag": "1" +} +``` + +支持设备说明 + +| **基站+键盘** | **支持** | **备注** | +| --- | --- | --- | +| B100-2.4G+S6 | 支持 | | +| B200-2.4G+S6 | 支持 | | + + +#### 键盘即时反馈[主动上报] + +接收: + +fun: "immediateFeedback" +baseId: 1//基站ID +infos:{ "keySn":"2307269906", "keyValue":"A"}//返回键盘反馈模式参数值 + +指令样例: + +```json +{ + "baseId": 1, + "fun": "immediateFeedback", + "infos": { + "keySn": "2307269906", + "keyValue": "A" + }, + "packetTag": "0" +} +``` + +支持设备说明 + +| **基站+键盘** | **支持** | **备注** | +| --- | --- | --- | +| B100-2.4G+S6 | 支持 | | +| B200-2.4G+S6 | 支持 | | + +#### 键盘上线通知[上报] + +S6键盘上线后上报键盘SN信息。 +接收: +fun: "keyboardOnlineOne" +baseId: 1//基站ID +infos:{ "keySn":"1479824643"}//返回键盘反馈模式参数值 + +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +|keySn|键盘Sn|| + +指令样例: + +```json +{ + "fun": "keyboardOnlineOne", + "baseId": 1, + "infos": { + "keySn": "1479824643" + }, + "packetTag": "0" +} +``` + +支持设备说明 + +| **基站+键盘** | **支持** | **备注** | +| --- | --- | --- | +| B200-2.4G+S6 | 支持 | | + +#### 键盘心跳反馈[上报] +接收: +fun: " KeyboardHeartbeat" +baseId: 1//基站ID +infos:{ "hModel": "67","keySn":"1479824643","keyValue":"0","ver":"1.0.0","volt":"50"}//返回键盘反馈模式参数值 + +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +|hModel|键盘型号|75: T2-5.8G
67: S6-2.4G| +|keySn|键盘Sn|| +|keyVer|键盘版本|| +|Volt|键盘电量|T2百分比值,S6无效| + +指令样例: + +```json +{ + "fun": "KeyboardHeartbeat", + "baseId": 1, + "infos": { + "hModel": "67", + "keySn": "1479824643", + "keyValue": "0", + "ver": "1.0.0", + "volt": "50" + }, + "packetTag": "0" +} +``` + +支持设备说明 + +| **基站+键盘** | **支持** | **备注** | +| --- | --- | --- | +| B100-2.4G+S6 | 支持 |出厂配置有心跳时反馈,出厂配置无心跳时不反馈| +| B200-2.4G+S6 | 支持 |出厂配置有心跳时反馈,出厂配置无心跳时不反馈| + + + +#### 遥控键盘关机 + +写 +发送: +fun: "remoteKeyShutdown" //遥控键盘关机 +params:{}// +指令样例: + +```json +{ + "fun": "remoteKeyShutdown", + "baseId": 1, + "params": [{ + "keySn": "1837454011" + }], + "packetTag": "1" +} +``` +返回 +接收: +fun: "remoteKeyShutdown" +baseId: 1//基站ID +infos:{"keySn":"1837454011","state":"OK"}//遥控键盘关机 + + +指令样例: +```json +{ + "fun": "remoteKeyShutdown", + "baseId": 1, + "infos": { + "keySn": "1837454011", + "state": "OK" + }, + "packetTag": "1" +} +``` + +支持设备说明 +| **基站+键盘** | **支持** | **备注** | +| --- | --- | --- | +| B100-2.4G+S6 | 支持 || +| B200-2.4G+S6 | 支持 || +| B200-5.8G+T2 | 支持 || + +#### 键盘暂停休眠 + +写 + +发送: +fun: "writeKeyboardPauseSleep" //键盘暂停休眠 +params:{"value"} // + +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +|baseId|基站ID|0-32
0:所有基站,默认值| +|value|预留|0 :10秒有效(默认值)| + + +指令样例: + +```json +{ + "fun": "writeKeyboardPauseSleep", + "baseId": 0, + "params": { + "value": "0" + }, + "packetTag": "1" +} +``` + +返回 + +接收: +fun: "writeKeyboardPauseSleep" +baseId: 1//基站ID +infos:{"value":"0"}//10秒 + + +指令样例: + +```json +{ + "fun": "writeKeyboardPauseSleep", + "baseId": 1, + "infos": { + "value": "0" + }, + "packetTag": "1" +} +``` + +支持设备说明 + +| **基站+键盘** | **支持** | **备注** | +| --- | --- | --- | +| B100-2.4G+S6 | 支持 || +| B200-2.4G+S6 | 支持 || + +#### 键盘短消息 + +写 +fun: "writeKeyMessage" //写键盘短消息 +params:{} // 数组对象,对象中的默认值为空字符串 + +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +|keySn|键盘SN|空字符串,为所有在线键盘| +|txt|短消息内容|字符串最长80字节| + + +指令样例: + +所有键盘 +```json +{ + "fun": "writeKeyMessage", + "baseId": 0, + "params": { + "txt": "最新消息" + }, + "packetTag": "1" +} +``` + +返回 +fun: "writeKeyMessage" +infos:{"state":"OK"}//返回状态,成功为OK + + +指令样例: + +```json +{ + "fun": "writeKeyMessage", + "baseId": 0, + "infos": { + "keySn": "0000000000", + "state": "OK" + }, + "packetTag": "1" +} +``` + +指定键盘 + +```json +{ + "fun": "writeKeyMessage", + "keySnList": [{ + "keySn": "0007899478" + }], + "params": { + "txt": "最新消息" + }, + "packetTag": "1" +} +``` + +返回 + +fun: "writeKeyMessage" +infos:{}//数组对象,同发送的 + + +指令样例: + +```json +{ + "baseId": 3, + "fun": "writeKeyMessage", + "infos": { + "keySn": "0007899478", + "state": "OK" + }, + "packetTag": "1" +} +``` + +支持设备说明 + +| **基站+键盘** | **支持** | **备注** | +| --- | --- | --- | +| B100-2.4G+S6 | 支持 || +| B200-2.4G+S6 | 支持 || + +#### 指定键盘修改FSN[公司内部使用指令] + +写 + +fun: "writeKeyFSN" //写键盘修改FSN +params:{} // 数组对象,对象中的默认值为空字符串 + +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +|keySnOld|键盘旧SN|| +|keySnNew|键盘新SN|| + + +指令样例: + +指定键盘 + +```json +{ + "fun": "writeKeyFSN", + "params": { + "keySnList": [{ + "keySnOld": "0007899478", + "keySnNew": "0007899479" + }, + { + "keySnOld": "0007899488", + "keySnNew": "0007899489" + } + ] + }, + "packetTag": "1" +} +``` + +返回 + +fun: "writeKeyFSN" +infos:{}//数组对象,同发送的 + + +指令样例: + +```json +{ + "baseId": 3, + "fun": "writeKeyFSN", + "infos": { + "keySn": "0007899478", + "state": "OK" + }, + "packetTag": "1" +} +``` + +支持设备说明 +| **基站+键盘** | **支持** | **备注** | +| --- | --- | --- | +| B100-2.4G+S6 | 支持 || +| B200-2.4G+S6 | 支持 || + +## 键盘显示设置 + +注:返回指令中的\"baseId\":0, 可忽略不处理 + +### 空闲标题 + +修改参数后设备重启生效。 + +发送: +fun: "writeKeypadFreeTitle" //写键盘空闲标题显示 +params:{} + +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +|title|标题|最多8个汉字(16个字符)| + +指令样例: +```json +{ + "fun": "writeKeypadFreeTitle", + "baseId": 1, + "params": { + "title": "请认真听讲" + } +} +``` + +接收: +fun: "writeKeypadFreeTitle" //写键盘空闲标题显示 +baseId: 1//接收到指令的基站ID +infos:{}// + +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +|keySn|键盘SN|| +|state|返回信息|OK(成功)| + + +指令样例: + +```json +{ + "fun": "writeKeypadFreeTitle", + "baseId": 0, + "infos": { + "state": "OK" + }, + "packetTag": "1" +} +``` + +支持设备说明 +| **基站+键盘** | **支持** | **备注** | +| --- | --- | --- | +| B200-5.8G+T2 | 支持 || + +### 自定义信息 + +当启动PIN码签到绑定模式,则可对键盘进行绑定操作 +发送: +fun: "writeKeypadCustomInfo" //写键盘的自定义信息 +params:{}//数组对象,字段不填则保留上次值。 + +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +| keySn| 键盘Sn| 空则为所有在线键盘,其他数组值无效| +| scoreMode| 分数模式|1:清除
2:字符显示(默认值)
3:五角星显示
4:爱心显示[S6有效]| +| scoreValue| 分数值|scoreMode == 1,此处无效.
scoreMode == 2,8个字符长度.
scoreMode == 3,0~6,2个分数表示1个五角星,最多3个.
scoreMode == 4,0~6,2个分数表示1个爱心,最多3个 [S6有效]| +|tipText|提示文本| 最多8个汉字(16个字符),键盘第二行显示| + + +指令样例: +样例目的:将SN为"1479824643"的键盘积分位置设置成"99",第二行文本位置设置成"已绑定"。 + +```json +{ + "fun": "writeKeypadCustomInfo", + "baseId": 1, + "params": [{ + "keySn": "1479824643", + "scoreMode": "2", + "scoreValue": "99", + "tipText": "已绑定" + }], + "packetTag": "1" +} +``` + +接收: + +指定键盘 + +fun: "writeKeypadCustomInfo" //写键盘的用户信息 +baseId:0 //接收到指令的基站ID +infos:{}//数组对象 + +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +|keySn|键盘SN|| +|state|状态|OK(成功)| + +指令样例: + + +```json +{ + "fun": "writeKeypadCustomInfo", + "baseId": 0, + "infos": [{ + "keySn": "1479824643", + "state": "OK" + }], + "packetTag": "1" +} +``` + +所有键盘 + +fun: "writeKeypadCustomInfo" //写键盘的用户信息 +baseId:0 //接收到指令的基站ID +infos:{"state":"OK"}//返回状态,成功为OK + + +指令样例: + +```json +{ + "fun": "writeKeypadCustomInfo", + "baseId": 0, + "infos": { + "state": "OK" + }, + "packetTag": "1" +} +``` + +支持设备说明 + +| **基站+键盘** | **支持** | **备注** | +| --- | --- | --- | +| B100-2.4G+S6 | 支持 || +| B200-2.4G+S6 | 支持 || +| B200-5.8G+T2 | 支持 || + + +### 用户姓名 + +当启动PIN码签到绑定模式,则可对键盘进行绑定操作 + +发送: +fun: "writeKeypadUserName" //写键盘的用户姓名 +params:{}//数组对象,字段不填则保留上次值。 + +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +|keySn|键盘SN|空则为所有在线键盘,其他数组值无效| +|userName|姓名|最多24个汉字(48个字符),键盘左上角显示| + +指令样例: + +```json +{ + "fun": "writeKeypadUserName", + "baseId": 1, + "params": [{ + "keySn": "1479824643", + "userName": "张三" + }], + "packetTag": "1" +} +``` + +接收: + +指定键盘 +fun: "writeKeypadUserName" //写键盘的用户姓名 +baseId:0 //接收到指令的基站ID +infos:{}//数组对象 + +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +|keySn|键盘SN|| +|state|状态|OK(成功)| + + +指令样例: + +```json +{ + "fun": "writeKeypadUserName", + "baseId": 0, + "infos": { + "keySn": "1479824643", + "state": "OK" + }, + "packetTag": "1" +} +``` + +所有键盘 + +fun: "writeKeypadUserName" //写键盘的用户信息 +baseId:0 //接收到指令的基站ID +infos:{"state":"OK"}//返回状态,成功为OK + + +指令样例: + +```json +{ + "fun": "writeKeypadUserName", + "baseId": 0, + "infos": { + "state": "OK" + }, + "packetTag": "1" +} +``` + +支持设备说明 + +| **基站+键盘** | **支持** | **备注** | +| --- | --- | --- | +| B100-2.4G+S6 | 支持 || +| B200-2.4G+S6 | 支持 || +| B200-5.8G+T2 | 支持 || + +### 指定用户姓名[C100B+S6旧款] + +当启动PIN码签到绑定模式,则可对键盘进行绑定操作 +发送: +fun: "writeOneKeypadUserName" //写键盘的用户姓名 +params:{}//数组对象,字段不填则保留上次值。 + +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +|keySn|键盘SN|空则为所有在线键盘,其他数组值无效| +|userName|姓名|最多5个汉字(10个字符), 键盘左上角显示| + +指令样例: + +```json +{ + "fun": "writeOneKeypadUserName", + "baseId": 0, + "params": [{ + "keySn": "1479824643", + "value": "张三" + }], + "packetTag": "1" +} +``` + +接收: + +指定键盘 +fun: "oneKeypadUserName" //写键盘的用户姓名 +baseId:1 //接收到指令的基站ID +infos:{}//数组对象 + +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +|keySn|键盘SN|空则为所有在线键盘,其他数组值无效| +|userName|姓名|最多5个汉字(10个字符), 键盘左上角显示| + +指令样例: + +```json +{ + "fun": "oneKeypadUserName", + "baseId": 1, + "infos": { + "keySn": "1479824643", + "value": "张三" + }, + "packetTag": "1" +} +``` + +支持设备说明 + +| **基站+键盘** | **支持** | **备注** | +| --- | --- | --- | +| C100B-2.4G+S6 | 支持 |S6旧款支持,不支持生僻字。| + + +## 键盘在线信息 + +### 自动返回在线信息 + +基站连接成功后,自动返回所有在线的键盘信息。当键盘在线状态改变时,也会统一返回。 + +接收: +fun: "keypadOnLine" //键盘在线状态 +infos:{} //数组对象 + +| **Json字段** | **字段含义** | **赋值及含义** | +| --- | --- | --- | +|baseId|基站id|keySn键盘所在基站id| +|keySn|键盘SN|| +|keyVer|键盘版本|| + + +指令样例: + +```json +{ + "fun": "keypadOnLine", + "baseId": 0, + "infos": [{ + "baseId": "1", + "keySn": "1837454011", + "ver": "1.0.6" + }, + { + "baseId": "1", + "keySn": "1837454012", + "ver": "1.0.6" + } + ], + "packetTag": "1" +} +``` + +支持设备说明 + +| **基站+键盘** | **支持** | **备注** | +| --- | --- | --- | +| B200-5.8G+T2| 支持 || + + +### 主动获取在线信息 + +应用程序在需要时,也可主动获取所有在线键盘信息。 + +发送: +fun: "getKeypadOnLine" //获取键盘在线状态 +params:{ +"times":1 //基站扫描键盘时长,单位秒 范围1-10秒 +} // + + +指令样例: + +```json +{ + "fun": "getKeypadOnLine", + "baseId": 0, + "params": { + "times": 2 + }, + "packetTag": "1" +} +``` + +接收: +fun: "keypadOnLine" //键盘在线状态 +infos:{} //数组对象 + +| **基站+键盘** | **支持** | **备注** | +| --- | --- | --- | +|baseId|基站id|keySn键盘所在基站id| +|keySn|键盘Sn|| +|keyVer|键盘版本|| +|Volt|键盘电量|T2百分比值,S6无效| + + +指令样例: + +```json +{ + "fun": "keypadOnLine", + "baseId": 0, + "infos": [{ + "baseId": "1", + "keySn": "1837454011", + "ver": "1.0.6", + "hModel": "67", + "Volt": "100" + }, + { + "baseId": "1", + "keySn": "1837454012", + "ver": "1.0.6", + "hModel": "67", + "Volt": "30" + } + ], + "packetTag": "1" +} +``` + +支持设备说明 +| **基站+键盘** | **支持** | **备注** | +| --- | --- | --- | +| B100-2.4G+S6 | 支持 |键盘电量:无效| +| B200-2.4G+S6 | 支持 |键盘电量:无效| +| B200-5.8G+T2 | 支持 |键盘电量:百分比值| + + +## 系统参数 + +### 退出WSCmdApp + +WSCmdApp,WSCmdApp回应后将结束WSCmdApp.exe进程。 +发送: +fun: "exit" //退出WSCmdApp +params:{}//无该值 +packetTag:"1"//收到的packetTag,可用于分析通信状态 + + +指令样例: + +```json +{ + "fun": "exit", + "packetTag": "1" +} +``` + +接收: + +fun: "exit" //退出WSCmdApp +infos:{}//无该值 + + +指令样例: + +```json +{ + "fun": "exit", + "packetTag": "1" +} +``` + +注意:配置文件中启用,命令才有效。 + + + +### 支持设备说明 + +| **基站+键盘** | **支持** | **备注** | +| --- | --- | --- | +| B100-2.4G+S6 | 支持 || +| B200-2.4G+S6 | 支持 || +| B200-5.8G+T2 | 支持 || + +## 异常处理 + +### WSCmdApp收到数据异常 + +WSCmdApp收到异常数据,会不做处理,并返回以下错误信息描述。 + +接收: +fun: "error" //功能错误 +baseId: //无该值 +infos:{ "funId":"F0001","code":"10002"}// + + +指令样例: +```json +{ + "fun": "error", + "infos": { + "funId": "F0001", + "code": "10002" + }, + "packetTag": "1" +} +``` + +| **code** | **含义** | +| --- | --- | +|10001|不能正确解析的JSON数据| +|10002|解析JSON错误| +|20001|基站未连接| +|20002|功能不支持| +|20003|基站ID为负数,应用可以不传ID,默认为0| +|20004|参数错误| +|30001|找不到对应的SN| +|40001|升级功能只能支持一个基站在线| +|50001|此功能必须指定基站ID| +|60001|此功能必须指定键盘SN| + +| **funId** | **含义** | +| --- | --- | +|F0001|基站未连接| +|F0002|读基站信道| +|F0003|写基站信道| +|F0004|读基站baseId| +|F0005|写基站baseId| +|F0006|读基站名称| +|F0007|写基站名称| +|F0008|读键盘关机时间等级| +|F0009|写键盘关机时间等级| +|F0010|读基站配对码| +|F0011|写基站配对码| +|F0012|读基站序列号| +|F0013|写基站序列号| +|F0014|读基站硬件和软件版本| +|F0015|写基站硬件版本| +|F0016|读基站类型| +|F0017|写基站类型| +|F0018|读基站键盘容量和Lock| +|F0019|写基站键盘容量和Lock| +|F0020|读手动获取返回在线信息| +|F0021|写手动获取返回在线信息| +|F0022|读基站设备RF功率| +|F0023|写基站设备RF功率| +|F0024|读基站设备配对模式或基站名称(自定义)| +|F0025|写基站设备配对模式| +|F0026|读基站快速配对低功率模式| +|F0027|写基站快速配对低功率模式| +|F0028|读键盘登录菜单显示允许[S6适用]| +|F0029|写键盘登录菜单显示允许[S6适用]| +|F0030|读键盘登录密码[S6适用]| +|F0031|写键盘登录密码[S6适用]| +|F0032|读基站名称隐藏开关| +|F0033|写基站名称隐藏开关| +|F0034|读基站和键盘之间的心跳开关| +|F0035|写基站和键盘之间的心跳开关| +|F0036|读基站语言| +|F0037|写基站语言| +|F0038|读基站CRC| +|F0039|写基站CRC| +|F0040|写广播投票标题| +|F0041|核对投票开启密码| +|F0042|读基站获取投票开启密码| +|F0043|写基站获取投票开启密码| +|F0044|读基站用户自定义字符串| +|F0045|写基站用户自定义字符串| +|F0046|读基站UID| +|F0047|写基站UID| +|F0048|读键盘反馈模式参数| +|F0049|写键盘反馈模式参数| +|F0050|读基站当前是开启升级状态| +|F0051|写基站当前是开启升级状态| +|F0052|手动停止键盘升级状态| +|F0053|写键盘当前是开启升级状态| +|F0054|写踢出单只键盘| +|F0055|写清掉所有键盘| +|F0056|写锁定键盘| +|F0057|写解锁键盘| +|F0058|写T2键盘第二行文本【空闲模式】| +|F0059|读考勤基站时钟设置| +|F0060|写考勤基站时钟设置| +|F0061|读考勤键盘每秒发送考勤信号次数| +|F0062|写考勤键盘每秒发送考勤信号次数| +|F0063|读考勤键盘发送考勤信号功率| +|F0064|写考勤键盘发送考勤信号功率| +|F0065|写修改键盘配对码| +|F0066|写键盘功能提示预设字符串反馈| +|F0067|写空闲模式| +|F0068|单选多选带计时模式| +|F0069|判断题带计时模式| +|F0070|抢答题带计时模式| +|F0071|数字题带计时模式| +|F0072|绑定带计时模式| +|F0073|基站快速配对| +|F0074|读基站特征数据| +|F0075|遥控关机| +|F0076|读键盘在线SN| +|F0077|写基站复位| +|F0078|写键盘外设指令| +|F0079|写键盘配对码| +|F0080|写锁定键盘,解锁键盘| +|F0081|填空题模式| +|F0082|读NFC信息 姓名| +|F0083|写NFC信息 姓名| +|F0084|写NFC配对码| +|F0085|NFC清除指令| +|F0086|多题题型开始| +|F0087|多题题型暂停| +|F0088|多题题型继续上一次| +|F0089|多题题型正确答案下发| +|F0090|多题题型已答题结果转移| +|F0091|写白名单| +|F0092|读白名单| +|F0093|写基站黑名单| +|F0094|读基站黑名单| +|F0095|C100B+S6[旧款]写键盘姓名| +|F0096|C100B+S6[旧款]读键盘姓名| +|F0097|键盘暂停休眠操作| +|F0098|异步测试模式| +|F0099|Tcp参数读| +|F0100|Tcp参数写| +|F0101|自定义题型参数| +|F0102|写S6短信| +|F0103|写S6键盘FSN| +|F0104|自由题模式| +|F0105|基站AES| +|F0106|基站AES 克隆| +|F0107|基础参数配置| +|F0108|删除指定白名单SN| +|F0109|追加指定SN 到白名单| -- libgit2 0.21.4