diff --git a/通讯协议-B200W-MQTT协议[内部].md b/通讯协议-B200W-MQTT协议[内部].md
index 6f7f6e8..21521e4 100644
--- a/通讯协议-B200W-MQTT协议[内部].md
+++ b/通讯协议-B200W-MQTT协议[内部].md
@@ -120,7 +120,7 @@
|---|---|---|---|
|交互设置 - 用户内置状态语|设置用户内置状态语|[setKpUserStbMsg](#setkpuserstbmsg)|[fEvtKpUserStbMsg](#fevtkpuserstbmsg)|
|交互设置 - 用户实时提示信息|实时设置提示反馈信息|[rtSetKpUserPrompt](#rtsetkpuserprompt)|[sEvtStateCode](#sevtstatecode)
[fEvtSetKpUserPrompt](#fevtsetkpuserprompt)|
-|在线状态获取|开启扫描在线键盘|[startGetKpOnline](#startgetkponline)|[sEvtStateCode](#sevtstatecode)
[sEvtBsKpOnlineMsg](#sevtbskponlinemsg)|
+|在线状态获取|开启扫描在线键盘|[startGetKpOnline](#startgetkponline)|[sEvtStateCode](#sevtstatecode)
[fEvtKpOnlineMsg](#fevtkponlinemsg)|
||停止扫描在线键盘|[stopGetKpOnline](#stopgetkponline)|[sEvtStateCode](#sevtstatecode)|
|维护功能 - 遥控功能|遥控键盘关机|[remoteKpPowerOff](#remotekppoweroff)|[sEvtStateCode](#sevtstatecode)|
||遥控键盘休眠|[remoteKpSleep](#remotekpsleep)|[sEvtStateCode](#sevtstatecode)|
@@ -254,7 +254,6 @@
|+keySn|string||是|键盘SN|
|+version|string||是|键盘固件版本|
|+model|int||是|键盘型号|
-|+voltage|double||是|键盘电压|
- **示例代码**
```Json
@@ -264,8 +263,7 @@
"data":{
"keySn":"1234567890",
"version":"1.0.0",
- "model":67,
- "voltage":2.8
+ "model":67
}
}
```
@@ -1032,6 +1030,8 @@
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
+
+- **示例代码**
```json
{
"fun": "startBsFastPair",
@@ -1047,6 +1047,8 @@
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
+
+- **示例代码**
```json
{
"fun": "stopBsFastPair",
@@ -1071,6 +1073,8 @@
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
+
+- **示例代码**
```json
{
"fun": "getBsWhitelist",
@@ -1088,6 +1092,8 @@
|dataTag|string|-|否|数据包标识,可为空字符串|
|data|object|-|是|传送参数的对象|
|+keySns|array|-|是|待写入的键盘SN数组|
+
+- **示例代码**
```json
{
"fun": "setBsWhitelist",
@@ -1106,6 +1112,8 @@
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
+
+- **示例代码**
```json
{
"fun": "clearBsWhitelist",
@@ -1123,6 +1131,8 @@
|dataTag|string|-|否|数据包标识,可为空字符串|
|data|object|-|是|传送参数的对象|
|+keySns|array|-|是|待添加的键盘SN列表|
+
+- **示例代码**
```json
{
"fun": "addBsWhitelist",
@@ -1143,6 +1153,8 @@
|dataTag|string|-|否|数据包标识,可为空字符串|
|data|object|-|是|传送参数的对象|
|+keySns|array|-|是|待删除的键盘SN列表|
+
+- **示例代码**
```json
{
"fun": "delBsWhitelist",
@@ -1638,6 +1650,8 @@
|data|array|-|否|传送参数的对象数组|
|++keySns|array||是|指定的键盘SN数组,空数组表示全部在线键盘
注意:不允许空数组和指定SN数组混合使用
包含空数组默认为全部在线键盘,其他指定键盘无效|
|++info|string||否|设置的反馈信息
不同键盘可设置不同反馈信息|
+
+- **示例代码**
```json
//分别提示
{
@@ -1728,13 +1742,15 @@
#### 方法
##### startGetKpOnline
- **主题**:/client/\${baseSN}/send
-- **功能描述**:开始获取键盘在线信息,键盘在线返回键盘信息 [sEvtBsKpOnlineMsg](#sevtbskponlinemsg)
+- **功能描述**:开始获取键盘在线信息,键盘在线返回键盘信息
- **参数说明**
|参数名|类型|限制|是否必填|说明|
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
+
+- **示例代码**
```json
{
"fun": "startGetKpOnline",
@@ -1751,6 +1767,8 @@
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
+
+- **示例代码**
```json
{
"fun": "stopGetKpOnline",
@@ -1761,8 +1779,36 @@
##### [sEvtStateCode](#sevtstatecode)
发送指令后返回此事件
-##### [sEvtBsKpOnlineMsg](#sevtbskponlinemsg)
-键盘在线返回此事件
+##### fEvtKpOnlineMsg
+- **主题**: /basestation/\${baseSN}/receive
+- **功能描述**:主动获取在线键盘时,在线键盘状态报告
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|事件名称|
+|dataTag|string|-|否|数据包标识|
+|data|object|-|是|传送参数的对象|
+|+keySn|string||是|键盘SN|
+|+version|string||是|键盘固件版本|
+|+model|int||是|键盘型号|
+|+voltage|double||是|键盘电量(待键盘修改成百分比)|
+|+isWeak|int||是|是否弱电, 0-正常,1-弱电(待键盘修改上报弱电状态)|
+
+- **示例代码**
+```Json
+{
+ "fun":"fEvtKpOnlineMsg",
+ "dataTag":"1",
+ "data":{
+ "keySn":"1234567890",
+ "version":"1.0.0",
+ "model":67,
+ "voltage":2.8,
+ "isWeak":0
+ }
+}
+```
### 维护功能
#### 方法
@@ -1931,6 +1977,8 @@
|data|array|-|是|传送参数的对象数组,不可为空|
|++keySn|string||是|需要设置绑定信息的键盘SN|
|++info|string||是|设置的绑定信息,一般为学生姓名
最长48个字符,显示在键盘左上角|
+
+- **示例代码**
```json
{
"fun": "rtSetKpBindingInfo",
@@ -1959,6 +2007,8 @@
|dataTag|string|-|否|数据包标识,可为空字符串|
|data|object|-|是|传送参数的对象数组|
|+keySns|array||否|需要清除绑定信息键盘SN数组,
空数组表示清空所有键盘|
+
+- **示例代码**
```json
{
"fun": "clearKpBindingInfo",
@@ -1984,6 +2034,8 @@
|data|array|-|否|传送参数的对象数组|
|++keySn|string||是|需要设置绑定信息的键盘SN|
|++state|string||是|设置的绑定信息是否成功
0 - 成功
1 - 失败|
+
+- **示例代码**
```json
{
"fun": "fEvtKpBindingInfo",
@@ -2011,6 +2063,8 @@
|dataTag|string|-|否|数据包标识,可为空字符串|
|data|object|-|否|传送参数的对象|
|+state|string||是|设置的绑定信息是否成功
0 - 成功
1 - 失败|
+
+- **示例代码**
```json
{
"fun": "fEvtClearKpBindingInfo",
@@ -2034,6 +2088,8 @@
|dataTag|string|-|否|数据包标识,可为空字符串|
|data|object|-|是|传递参数的对象|
|+mode|int|-|是|签到模式
1-按键签到,按OK键签到自动授权(暂不支持)
2-PIN码签到,输入pin码后由应用程序决定是否授权|
+
+- **示例代码**
```json
{
"fun": "rtStartKpSignIn",
@@ -2052,6 +2108,8 @@
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
+
+- **示例代码**
```json
{
"fun": "rtStopKpSignIn",
@@ -2070,6 +2128,8 @@
|data|object|-|是|传递参数的对象|
|+keySn|string|-|是|键盘SN|
|+state|int|-|是|1-授权成功
2-授权失败
3-解除已授权|
+
+- **示例代码**
```json
{
"fun": "rtSetKpLoginAllowed",
@@ -2097,6 +2157,8 @@
|++keySn|string||是|键盘SN|
|++keyValue|string||是|键盘提交的按键值|
|++keyTime|double||是|答题时间,从启动开始计算,单位秒|
+
+- **示例代码**
```json
{
"fun": "fEvtKpSignIn",
@@ -2126,6 +2188,8 @@
|data|object|-|是|传送参数的对象|
|+keySn|string||是|键盘SN|
|+state|string||是|0-执行成功
1-执行失败|
+
+- **示例代码**
```json
{
"fun": "fEvtKpLoginAllowed",
@@ -2156,6 +2220,8 @@
|+tip|string||否|提示的标题,长度不超过16字符|
|+simParams|object||否|内部模拟测试参数设置对象|
|++answer|string||是|预设提交的按键值
1-对
2-错|
+
+- **示例代码**
```json
{
"fun": "startQATrueFalse",
@@ -2181,6 +2247,8 @@
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
+
+- **示例代码**
```json
{
"fun": "stopQATrueFalse",
@@ -2204,6 +2272,8 @@
|++keySn|string||是|键盘SN|
|++keyValue|string||是|键盘提交的按键值
1-对
2-错|
|++keyTime|double||是|答题时间,从启动开始计算,单位秒|
+
+- **示例代码**
```json
{
"fun": "fEvtQATrueFalse",
@@ -2238,6 +2308,8 @@
|+tip|string||否|提示的标题,长度不超过16字符|
|+simParams|object||否|内部模拟测试参数设置对象|
|++answer|string||是|预设提交的按键值|
+
+- **示例代码**
```json
{
"fun": "startQAChoice",
@@ -2266,6 +2338,8 @@
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
+
+- **示例代码**
```json
{
"fun": "stopQAChoice",
@@ -2289,6 +2363,8 @@
|++keySn|string||是|键盘SN|
|++keyValue|string||是|键盘提交的按键值|
|++keyTime|double||是|答题时间,从启动开始计算,单位秒|
+
+- **示例代码**
```json
{
"fun": "fEvtQAChoice",
@@ -2321,6 +2397,8 @@
|+tip|string||否|提示的标题,长度不超过16字符|
|+simParams|object||否|内部模拟测试参数设置对象|
|++answer|string||是|预设提交的按键值|
+
+- **示例代码**
```json
{
"fun": "startQANum",
@@ -2348,6 +2426,8 @@
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
+
+- **示例代码**
```json
{
"fun": "stopQANum",
@@ -2371,6 +2451,8 @@
|++keySn|string||是|键盘SN|
|++keyValue|string||是|键盘提交的按键值|
|++keyTime|double||是|答题时间,从启动开始计算,单位秒|
+
+- **示例代码**
```json
{
"fun": "fEvtQANum",
@@ -2400,6 +2482,8 @@
|+tip|string||否|提示的标题,长度不超过16字符|
|+simParams|object||否|内部模拟测试参数设置对象|
|++answer|string||是|预设提交的按键值|
+
+- **示例代码**
```json
{
"fun": "startQAQuicker",
@@ -2424,6 +2508,8 @@
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
+
+- **示例代码**
```json
{
"fun": "stopQAQuicker",
@@ -2447,6 +2533,8 @@
|++keySn|string||是|键盘SN|
|++keyValue|string||是|键盘提交的按键值|
|++keyTime|double||是|答题时间,从启动开始计算,单位秒|
+
+- **示例代码**
```json
{
"fun": "fEvtQAQuicker",
@@ -2481,6 +2569,8 @@
|++count | int||是| 题目数量 |
|+simParams|object||否|内部模拟测试参数设置对象|
|++answer|array||是|预设提交的按键值
格式为"单选题答案,多选题答案;
数字题答案;判断题答案(1对2错)"
如["A","ABCD","10","1"]|
+
+- **示例代码**
```json
//自定义题号
{
@@ -2570,6 +2660,8 @@
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
+
+- **示例代码**
```json
{
"fun": "stopKpExam",
@@ -2587,6 +2679,8 @@
|dataTag|string|-|否|数据包标识,可为空字符串|
|data|object|-|是|传送参数的对象|
|+keySns|array||是|指定的键盘SN数组,空数组表示全部在线键盘|
+
+- **示例代码**
```json
{
"fun": "rtGetKpExamData",
@@ -2607,6 +2701,8 @@
|dataTag|string|-|否|数据包标识,可为空字符串|
|data|object|-|是|传送参数的对象|
|+keySns|array||是|指定的键盘SN数组,空数组表示全部在线键盘|
+
+- **示例代码**
```json
{
"fun": "rtKpAllowEdited",
@@ -2633,6 +2729,8 @@
|++keySn|string||是|键盘SN|
|++keyValue|string||是|键盘提交的按键值,1:A;2:B表示第1题提交A,第二题提交B|
|++keyTime|double||是|答题时间,从启动开始计算,单位秒|
+
+- **示例代码**
```json
{
"fun": "fEvtKpExam",
@@ -2663,6 +2761,8 @@
|++keySn|string||是|键盘SN|
|++keyValue|string||是|0 - 未提交(提交完成后,允许键盘修改答案时上报)
1 - 已交卷|
|++keyTime|double||是|提交时间,从启动开始计算,单位秒|
+
+- **示例代码**
```json
{
"fun": "fEvtFinalSubmit",
diff --git a/通讯协议-B200W-MQTT协议[外].md b/通讯协议-B200W-MQTT协议[外].md
index 01800aa..7c77e5e 100644
--- a/通讯协议-B200W-MQTT协议[外].md
+++ b/通讯协议-B200W-MQTT协议[外].md
@@ -97,7 +97,7 @@
|功能归类|功能|API指令|指令事件|
|---|---|---|---|
|交互设置 - 用户实时提示信息|实时设置提示反馈信息|[rtSetKpUserPrompt](#rtsetkpuserprompt)|[sEvtStateCode](#sevtstatecode)
[fEvtSetKpUserPrompt](#fevtsetkpuserprompt)|
-|在线状态获取|开启扫描在线键盘|[startGetKpOnline](#startgetkponline)|[sEvtStateCode](#sevtstatecode)
[sEvtBsKpOnlineMsg](#sevtbskponlinemsg)|
+|在线状态获取|开启扫描在线键盘|[startGetKpOnline](#startgetkponline)|[sEvtStateCode](#sevtstatecode)
[fEvtKpOnlineMsg](#fevtkponlinemsg)|
||停止扫描在线键盘|[stopGetKpOnline](#stopgetkponline)|[sEvtStateCode](#sevtstatecode)|
|维护功能 - 遥控功能|遥控键盘休眠|[remoteKpSleep](#remotekpsleep)|[sEvtStateCode](#sevtstatecode)|
### 绑定
@@ -227,7 +227,6 @@
|+keySn|string||是|键盘SN|
|+version|string||是|键盘固件版本|
|+model|int||是|键盘型号|
-|+voltage|double||是|键盘电压|
- **示例代码**
```Json
@@ -237,8 +236,7 @@
"data":{
"keySn":"1234567890",
"version":"1.0.0",
- "model":67,
- "voltage":2.8
+ "model":67
}
}
```
@@ -969,6 +967,9 @@
|data|array|-|否|传送参数的对象数组|
|++keySns|array||是|指定的键盘SN数组,空数组表示全部在线键盘
注意:不允许空数组和指定SN数组混合使用
包含空数组默认为全部在线键盘,其他指定键盘无效|
|++info|string||否|设置的反馈信息
不同键盘可设置不同反馈信息|
+
+- **示例代码**
+
```json
//分别提示
{
@@ -1013,6 +1014,9 @@
|data|array|-|是|传送参数的对象数组|
|++keySn|string||是|设置提示语信息的键盘SN|
|++state|string||是|设置的提示语是否成功
0 - 成功
1 - 失败|
+
+- **示例代码**
+
```json
{
"fun": "fEvtSetKpUserPrompt",
@@ -1037,13 +1041,16 @@
#### 方法
##### startGetKpOnline
- **主题**:/client/\${baseSN}/send
-- **功能描述**:开始获取键盘在线信息,键盘在线返回键盘信息 [sEvtBsKpOnlineMsg](#sevtbskponlinemsg)
+- **功能描述**:开始获取键盘在线信息,键盘在线返回键盘信息
- **参数说明**
|参数名|类型|限制|是否必填|说明|
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
+
+- **示例代码**
+
```json
{
"fun": "startGetKpOnline",
@@ -1060,6 +1067,9 @@
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
+
+- **示例代码**
+
```json
{
"fun": "stopGetKpOnline",
@@ -1070,8 +1080,34 @@
##### [sEvtStateCode](#sevtstatecode)
发送指令后返回此事件
-##### [sEvtBsKpOnlineMsg](#sevtbskponlinemsg)
-键盘在线返回此事件
+##### fEvtKpOnlineMsg
+- **主题**: /basestation/\${baseSN}/receive
+- **功能描述**:主动获取在线键盘时,在线键盘状态报告
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|事件名称|
+|dataTag|string|-|否|数据包标识|
+|data|object|-|是|传送参数的对象|
+|+keySn|string||是|键盘SN|
+|+version|string||是|键盘固件版本|
+|+model|int||是|键盘型号|
+|+voltage|double||是|键盘电量|
+
+- **示例代码**
+```Json
+{
+ "fun":"fEvtKpOnlineMsg",
+ "dataTag":"1",
+ "data":{
+ "keySn":"1234567890",
+ "version":"1.0.0",
+ "model":67,
+ "voltage":2.8
+ }
+}
+```
### 维护功能
#### 方法
@@ -1116,6 +1152,9 @@
|data|array|-|是|传送参数的对象数组,不可为空|
|++keySn|string||是|需要设置绑定信息的键盘SN|
|++info|string||是|设置的绑定信息,一般为学生姓名
最长48个字符,显示在键盘左上角|
+
+- **示例代码**
+
```json
{
"fun": "rtSetKpBindingInfo",
@@ -1144,6 +1183,9 @@
|dataTag|string|-|否|数据包标识,可为空字符串|
|data|object|-|是|传送参数的对象数组|
|+keySns|array||否|需要清除绑定信息键盘SN数组,
空数组表示清空所有键盘|
+
+- **示例代码**
+
```json
{
"fun": "clearKpBindingInfo",
@@ -1169,6 +1211,9 @@
|data|array|-|否|传送参数的对象数组|
|++keySn|string||是|需要设置绑定信息的键盘SN|
|++state|string||是|设置的绑定信息是否成功
0 - 成功
1 - 失败|
+
+- **示例代码**
+
```json
{
"fun": "fEvtKpBindingInfo",
@@ -1196,6 +1241,9 @@
|dataTag|string|-|否|数据包标识,可为空字符串|
|data|object|-|否|传送参数的对象|
|+state|string||是|设置的绑定信息是否成功
0 - 成功
1 - 失败|
+
+- **示例代码**
+
```json
{
"fun": "fEvtClearKpBindingInfo",
@@ -1219,6 +1267,9 @@
|dataTag|string|-|否|数据包标识,可为空字符串|
|data|object|-|是|传递参数的对象|
|+mode|int|-|是|签到模式
2-PIN码签到,输入pin码后由应用程序决定是否授权|
+
+- **示例代码**
+
```json
{
"fun": "rtStartKpSignIn",
@@ -1237,6 +1288,9 @@
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
+
+- **示例代码**
+
```json
{
"fun": "rtStopKpSignIn",
@@ -1255,6 +1309,9 @@
|data|object|-|是|传递参数的对象|
|+keySn|string|-|是|键盘SN|
|+state|int|-|是|1-授权成功
2-授权失败
3-解除已授权|
+
+- **示例代码**
+
```json
{
"fun": "rtSetKpLoginAllowed",
@@ -1282,6 +1339,9 @@
|++keySn|string||是|键盘SN|
|++keyValue|string||是|键盘提交的按键值|
|++keyTime|double||是|答题时间,从启动开始计算,单位秒|
+
+- **示例代码**
+
```json
{
"fun": "fEvtKpSignIn",
@@ -1311,6 +1371,9 @@
|data|object|-|是|传送参数的对象|
|+keySn|string||是|键盘SN|
|+state|string||是|0-执行成功
1-执行失败|
+
+- **示例代码**
+
```json
{
"fun": "fEvtKpLoginAllowed",
@@ -1338,6 +1401,9 @@
|+mode|int||是|1 - True/False 对/错
2 - Yes/No 是/否
3 - √/×|
|+allowModify|int||是|0 - 不允许修改
1 - 允许修改|
|+tip|string||否|提示的标题,长度不超过16字符|
+
+- **示例代码**
+
```json
{
"fun": "startQATrueFalse",
@@ -1359,6 +1425,9 @@
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
+
+- **示例代码**
+
```json
{
"fun": "stopQATrueFalse",
@@ -1382,6 +1451,9 @@
|++keySn|string||是|键盘SN|
|++keyValue|string||是|键盘提交的按键值
1-对
2-错|
|++keyTime|double||是|答题时间,从启动开始计算,单位秒|
+
+- **示例代码**
+
```json
{
"fun": "fEvtQATrueFalse",
@@ -1413,6 +1485,9 @@
|+optionalN|int||是|可选项个数,1≤N≤M(默认值1)|
|+allowModify|int||是|修改模式
0 - 不允许修改
1 - 允许修改|
|+tip|string||否|提示的标题,长度不超过16字符|
+
+- **示例代码**
+
```json
{
"fun": "startQAChoice",
@@ -1437,6 +1512,9 @@
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
+
+- **示例代码**
+
```json
{
"fun": "stopQAChoice",
@@ -1460,6 +1538,9 @@
|++keySn|string||是|键盘SN|
|++keyValue|string||是|键盘提交的按键值|
|++keyTime|double||是|答题时间,从启动开始计算,单位秒|
+
+- **示例代码**
+
```json
{
"fun": "fEvtQAChoice",
@@ -1490,6 +1571,9 @@
|+numMax|int||是|可输入上限,mode=1有效,范围0-100|
|+allowModify|int||是|修改模式
0 - 不允许修改
1 - 允许修改|
|+tip|string||否|提示的标题,长度不超过16字符|
+
+- **示例代码**
+
```json
{
"fun": "startQANum",
@@ -1514,6 +1598,9 @@
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
+
+- **示例代码**
+
```json
{
"fun": "stopQANum",
@@ -1537,11 +1624,14 @@
|++keySn|string||是|键盘SN|
|++keyValue|string||是|键盘提交的按键值|
|++keyTime|double||是|答题时间,从启动开始计算,单位秒|
+
+- **示例代码**
+
```json
{
"fun": "fEvtQANum",
"dataTag":"1",
- "data": [{
+ "data":[{
"keySn": "1234567890",
"keyValue":"10",
"keyTime":3.2
@@ -1564,6 +1654,9 @@
|+mode|int||是|模式
0:普通抢答|
|+allowModify|int||是|修改模式
0 - 不允许修改
1 - 允许修改|
|+tip|string||否|提示的标题,长度不超过16字符|
+
+- **示例代码**
+
```json
{
"fun": "startQAQuicker",
@@ -1585,6 +1678,9 @@
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
+
+- **示例代码**
+
```json
{
"fun": "stopQAQuicker",
@@ -1608,6 +1704,9 @@
|++keySn|string||是|键盘SN|
|++keyValue|string||是|键盘提交的按键值|
|++keyTime|double||是|答题时间,从启动开始计算,单位秒|
+
+- **示例代码**
+
```json
{
"fun": "fEvtQAQuicker",
@@ -1640,6 +1739,9 @@
|++option |int||是 |选项数目
quesType = 1 有效。
quesType = 2 有效。
此项缺省时 默认4;
范围:1-10。|
|++startNo | int||是| 起始题号 |
|++count | int||是| 题目数量 |
+
+- **示例代码**
+
```json
//自定义题号
{
@@ -1720,6 +1822,9 @@
|---|---|---|---|---|
|fun|string|-|是|指令名称|
|dataTag|string|-|否|数据包标识,可为空字符串|
+
+- **示例代码**
+
```json
{
"fun": "stopKpExam",
@@ -1737,6 +1842,9 @@
|dataTag|string|-|否|数据包标识,可为空字符串|
|data|object|-|是|传送参数的对象|
|+keySns|array||是|指定的键盘SN数组,空数组表示全部在线键盘|
+
+- **示例代码**
+
```json
{
"fun": "rtKpAllowEdited",
@@ -1763,6 +1871,9 @@
|++keySn|string||是|键盘SN|
|++keyValue|string||是|键盘提交的按键值,1:A;2:B表示第1题提交A,第二题提交B|
|++keyTime|double||是|答题时间,从启动开始计算,单位秒|
+
+- **示例代码**
+
```json
{
"fun": "fEvtKpExam",
@@ -1793,6 +1904,9 @@
|++keySn|string||是|键盘SN|
|++keyValue|string||是|0 - 未提交(提交完成后,允许键盘修改答案时上报)
1 - 已交卷|
|++keyTime|double||是|提交时间,从启动开始计算,单位秒|
+
+- **示例代码**
+
```json
{
"fun": "fEvtFinalSubmit",
diff --git a/通讯协议-平台化-应用部分.md b/通讯协议-平台化-应用部分.md
new file mode 100644
index 0000000..557d0ad
--- /dev/null
+++ b/通讯协议-平台化-应用部分.md
@@ -0,0 +1,4593 @@
+
+# SunVote 应用通讯协议
+
+[TOC]
+
+# 功能说明
+应用与基站通讯可分为两种:一是直连基站,基站直接插在电脑的USB接口,应用程序通过WebSocket方式调用SDK与基站进行通讯,另一种是网连基站,基站直接连接网络,应用程序通过MQTT服务器发布和订阅相关的主题与基站进行通讯。两种连接方式通讯的数据格式统一为Json数据格式,内容一致,仅在连接方式和数据的发送形式有所不同。
+本文档约定了应用程序和基站之间进行通讯的数据格式和内容,供开发人员查阅。
+
+## MQTT方式主题说明
+\${baseSN}为指定的基站的SN编码,不能为空,接收基站反馈数据需要订阅对应基站SN的接收主题。
+### 发布的主题
+应用程序发布的主题,基站订阅
+/client/\${baseSN}/send
+/client/multiBase/send
+
+内部应用发布的主题,基站订阅
+/manage/\${baseSN}/send
+
+### 订阅的主题
+应用程序订阅的主题,基站发布
+/basestation/\\${baseSN}/receive
+/basestation/multiBase/receive
+
+内部应用订阅的主题,基站发布
+/manage/\${baseSN}/receive
+
+## Websocket方式
+WebSocket方式应用与SDK或基站建立长连接后,通过WebSocket接口发送接收数据即可。应用程序发送至基站约定为发送指令,基站返回数据约定为返回事件。
+通过SDK连接基站时,需先初始化SDK,再与SDK建立WebSocket连接。
+**init() 初始化SDK**
+
+|参数名|类型|限制|非空|说明|
+|-----|-----|-----|-----|-----|
+|ip|string|-|是|连接的服务器ip|
+|port|int|-|是|服务器的端口|
+
+- **示例代码**
+```C#
+ SunVoteSdk sdk = new SunVoteSdk();
+ sdk.init("127.0.0.1",9004);
+```
+
+## 指令说明
+|指令功能标识 |说明 |约束|
+|---|---|---|
+|get| 待机状态下获取参数属性状态及数据 |待机状态|
+|set| 待机状态下设置参数属性状态及数据 |待机状态|
+|start| 运行一个单进程业务实例(函数) |待机状态|
+|stop| 停止一个单进程业务实例(函数) |待机状态|
+|rtXXX| 在线状态下可实时执行方法及函数 ||
+
+## 事件说明
+|事件标识| 说明| 约束|
+|---|---|---|
+|sEvtXXX|系统事件 |自动返回|
+|fEvtXXX|指令事件 |调用对应指令后返回|
+
+## 数据格式约定
+- 数据格式统一为**Json**格式,发送接收消息编码统一为**UTF-8**
+- Json通用格式如下:
+
+```json
+ {
+ "fun":"xxx",
+ "dataTag":"xxx",
+ "baseSn":"xxxxxxxxx", //MQTT方式连接时,主题中已有baseSN,此字段可不传
+ "data":{
+ //内容
+ }
+ }
+```
+
+注意:基站接收指令数据单次不超过2K长度,在指定键盘发送指令时,如果指令长度超出限制,建议将指令进行拆分,分次发送,如果是所有键盘执行的指令,可将keySns设为空数组不使用指定键盘的模式
+
+## 功能速查一览表
+### SDK管理
+通过SDK直连基站时有效
+|功能归类|功能|API指令|指令/系统事件|
+|---|---|---|---|
+|SDK连接 - 保持连接|发送心跳信号|[heartbeat](#heartbeat)|[heartbeat](#heartbeat)|
+|SDK连接 - 保持连接|设置心跳间隔|[setHeartbeatInterval](#setheartbeatinterval)|[fEvtHeartbeatInterval](#fevtheartbeatinterval)|
+|SDK识别 - SDK版本|获取SDK版本|[getSdkVersion](#getsdkversion)|[fEvtSdkVersion](#fevtsdkversion)|
+|SDK连接 - 终止连接|关闭SDK连接|[closeSdk](#closesdk)|-|
+
+### 公共事件
+无需调用指令,自动返回的事件
+|功能归类|功能|API指令|指令/系统事件|
+|---|---|---|---|
+|公共事件|指令接收状态|-|[sEvtStateCode](#sevtstatecode)|
+|公共事件|基站连接状态变化|-|[sEvtBsConnectState](#sevtbsconnectstate)|
+|公共事件|基站信道冲突|-|[sEvtBsChannelConflict](#sevtbschannelconflict)|
+|公共事件|键盘上线通知|-|[sEvtBsKpOnlineMsg](#sevtbskponlinemsg)|
+|公共事件|键盘刷卡事件|-|[sEvtBsNfcResults](#sevtbsnfcresults)|
+|公共事件|在线键盘列表|-|[sEvtBsKpOnlineList](#sevtbskponlinelist)|
+|公共事件|键盘待机实时按键反馈|-|[sEvtKpRtFeedback](#sevtkprtfeedback)|
+|公共事件|键盘待机实时语音反馈|-|[sEvtKpRtVoice](#sevtkprtvoice)|
+|公共事件|键盘举手键实时按键反馈|-|[sEvtKpHandUp](#sevtkphandup)|
+|公共事件|遥控器实时按键反馈|-|[sEvtKpRemoteControl](#sevtkpremotecontrol)|
+
+### 基站管理
+|功能归类|功能|API指令|指令/系统事件|
+|---|---|---|---|
+|基站连接 - 获取在线基站|主动获取在线基站信息
不确定基站SN时|[getBsOnlineState](#getbsonlinestate)|[fEvtBsOnlineState](#fevtbsonlinestate)|
+|基站连接 - 主动获取状态|主动获取基站连接状态|[getBsConnectState](#getbsconnectstate)|[sEvtBsConnectState](#sevtbsconnectstate)|
+|基站连接 - 自动获取状态|基站连接变化系统通知|-|[sEvtBsConnectState](#sevtbsconnectstate)|
+|键盘上线通知|单个键盘上线系统通知|-|[sEvtBsKpOnlineMsg](#sevtbskponlinemsg)|
+|识别设置 - 出厂编码|获取基站出厂编码|[getBsSN](#getbssn)|[fEvtBsSN](#fevtbssn)|
+||设置基站出厂编码(内)|[setBsSN](#setbssn)|[fEvtBsSN](#fevtbssn)|
+|识别设置 - 基站型号|读取基站型号|[getBsModel](#getbsmodel)|[fEvtBsModel](#fevtbsmodel)|
+|识别设置 - 固件版本|获取基站固件版本|[getBsFWVersion](#getbsfwversion)|[fEvtBsFWVersion](#fevtbsfwversion)|
+|识别设置 - 品牌识别码|获取基站品牌识别码|[getBsBIC](#getbsbic)|[fEvtBsBIC](#fevtbsbic)|
+||设置基站品牌识别码(内)|[setBsBIC](#setbsbic)|[fEvtBsBIC](#fevtbsbic)|
+|组网设置 - 组网模式|获取基站组网模式|[getBsNetworkMode](#getbsnetworkmode)|[fEvtBsNetworkMode](#fevtbsnetworkmode)|
+||设置基站组网模式|[setBsNetworkMode](#setbsnetworkmode)|[fEvtBsNetworkMode](#fevtbsnetworkmode)|
+|组网设置 - 配对码|获取基站配对码|[getBsPairCode](#getbspaircode)|[fEvtBsPairCode](#fevtbspaircode)|
+||设置基站配对码(内)|[setBsPairCode](#setbspaircode)|[fEvtBsPairCode](#fevtbspaircode)|
+|组网设置 - 刷卡配对状态|获取刷卡配对状态|[getBsNfcLogin](#getbsnfclogin)|[fEvtBsNfcLogin](#fevtbsnfclogin)|
+||设置刷卡配对状态|[setBsNfcLogin](#setbsnfclogin)|[fEvtBsNfcLogin](#fevtbsnfclogin)||
+|组网设置 - 组网容量|获取基站容量|[getBsCapacity](#getbscapacity)|[fEvtBsCapacity](#fevtbscapacity)|
+||设置基站连接容量|[setBsCapacity](#setbscapacity)|[fEvtBsCapacity](#fevtbscapacity)||
+|组网设置 - 工作信道|获取基站工作信道|[getBsChannel](#getbschannel)|[fEvtBsChannel](#fevtbschannel)|
+||设置基站工作信道|[setBsChannel](#setbschannel)|[fEvtBsChannel](#fevtbschannel)||
+|登录设置 - 登录名称|获取基站登录名称|[getBsSSID](#getbsssid)|[fEvtBsSSID](#fevtbsssid)|
+||设置基站登录名称|[setBsSSID](#setbsssid)|[fEvtBsSSID](#fevtbsssid)||
+|登录设置 - 登录密码|获取基站登录密码|[getBsLoginPwd](#getbsloginpwd)|[fEvtBsLoginPwd](#fevtbsloginpwd)|
+||设置基站登录密码|[setBsLoginPwd](#setbsloginpwd)|[fEvtBsLoginPwd](#fevtbsloginpwd)||
+|登录设置 - 基站登录状态|获取基站登录状态|[getBsLoginState](#getbsloginstate)|[fEvtBsLoginState](#fevtbsloginstate)|
+||设置基站登录状态|[setBsLoginState](#setbsloginstate)|[fEvtBsLoginState](#fevtbsloginstate)||
+|键盘统一设置 - 键盘语言|获取键盘语言|[getBsKpLanguage](#getbskplanguage)|[fEvtBsKpLanguage](#fevtbskplanguage)|
+||设置键盘语言|[setBsKpLanguage](#setbskplanguage)|[fEvtBsKpLanguage](#fevtbskplanguage)||
+|键盘统一设置 - 状态语模式|获取状态语设置状态|[getBsKpStbMsgMode](#getbskpstbmsgmode)|[fEvtBsKpStbMsgMode](#fevtbskpstbmsgmode)|
+||设置状态语工作状态|[setBsKpStbMsgMode](#setbskpstbmsgmode)|[fEvtBsKpStbMsgMode](#fevtbskpstbmsgmode)|||
+|键盘统一设置 - 登录菜单|获取键盘登录菜单状态|[getBsKpLoginMenu](#getbskploginmenu)|[fEvtBsKpLoginMenu](#fevtbskploginmenu)|
+||设置键盘登录菜单状态|[setBsKpLoginMenu](#setbskploginmenu)|[fEvtBsKpLoginMenu](#fevtbskploginmenu)|||
+|键盘统一设置 - LED模式|获取LED设置状态|[getBsKpLedMode](#getbskpledmode)|[fEvtBsKpLedMode](#fevtbskpledmode)|
+||设置LED工作状态|[setBsKpLedMode](#setbskpledmode)|[fEvtBsKpLedMode](#fevtbskpledmode)|
+|键盘统一设置 - Beep模式|获取Beep设置状态|[getBsKpBeepMode](#getbskpbeepmode)|[fEvtBsKpBeepMode](#fevtbskpbeepmode)|
+||设置Beep工作状态|[setBsKpBeepMode](#setbskpbeepmode)|[fEvtBsKpBeepMode](#fevtbskpbeepmode)|
+|键盘统一设置 - 长距考勤|获取键盘长距考勤状态|[getBsKpRFIDState](#getbskprfidstate)|[fEvtBsKpRFIDState](#fevtbskprfidstate)|
+||设置键盘长距考勤状态|[setBsKpRFIDState](#setbskprfidstate)|[fEvtBsKpRFIDState](#fevtbskprfidstate)|
+|键盘统一设置 - 暂停休眠|设置键盘暂停休眠状态|[setBsKpPauseSleep](#setbskppausesleep)|[fEvtBsKpPauseSleep](#fevtbskppausesleep)|
+|配对模式 - 快速配对|启动基站快速配对|[startBsFastPair](#startbsfastpair)|[sEvtStateCode](#sevtstatecode)
[sEvtBsKpOnlineMsg](#sevtbskponlinemsg)|
+||停止基站快速配对|[stopBsFastPair](#stopbsfastpair)|[sEvtStateCode](#sevtstatecode)|
+|白名单模式 - 白名单管理|获取白名单|[getBsWhitelist](#getbswhitelist)|[fEvtBsWhitelist](#fevtbswhitelist)|
+||设置白名单|[setBsWhitelist](#setbswhitelist)|[sEvtStateCode](#sevtstatecode)
[fEvtBsWhitelist](#fevtbswhitelist)|
+||清空白名单|[clearBsWhitelist](#clearbswhitelist)|[sEvtStateCode](#sevtstatecode)
[fEvtBsWhitelist](#fevtbswhitelist)|
+||增加白名单|[addBsWhitelist](#addbswhitelist)|[sEvtStateCode](#sevtstatecode)
[fEvtAddBsWhitelist](#fevtaddbswhitelist)
[fEvtBsWhitelist](#fevtbswhitelist)|
+||删除白名单|[delBsWhitelist](#delbswhitelist)|[sEvtStateCode](#sevtstatecode)
[fEvtDelBsWhitelist](#fevtdelbswhitelist)
[fEvtBsWhitelist](#fevtbswhitelist)|
+||锁定白名单|[lockBsWhitelistKp](#lockbswhitelistkp)|[fEvtLockBsWhitelistKp](#fevtlockbswhitelistkp)|
+||解锁白名单|[unlockBsWhitelistKp](#unlockbswhitelistkp)|[fEvtLockBsWhitelistKp](#fevtlockbswhitelistkp)|
+|基站加密 - 软件狗|获取基站软件狗|[getBsSoftwareKey](#getbssoftwarekey)|[fEvtBsSoftwareKey](#fevtbssoftwarekey)|
+||设置基站软件狗|[setBsSoftwareKey](#setbssoftwarekey)|[fEvtBsSoftwareKey](#fevtbssoftwarekey)|
+|基站加密 - AES加密|获取基站AES加密状态|[getBsAES](#getbsaes)|[fEvtBsAES](#fevtbsaes)|
+||设置基站AES加密状态|[setBsAES](#setbsaes)|[fEvtBsAES](#fevtbsaes)|
+|网络设置 - TCP/IP参数|获取TCP/IP参数|[getBsTcpipParams](#getbstcpipparams)|[fEvtBsTcpipParams](#fevtbstcpipparams)|
+||设置TCP/IP参数|[setBsTcpipParams](#setbstcpipparams)|[fEvtBsTcpipParams](#fevtbstcpipparams)|
+|网络设置 - MQTT参数|获取MQTT参数|[getBsMqttParams](#getbsmqttparams)|[fEvtBsMqttParams](#fevtbsmqttparams)|
+||设置MQTT参数|[setBsMqttParams](#setbsmqttparams)|[fEvtBsMqttParams](#fevtbsmqttparams)|
+|基站升级|开启基站升级(内)|[startBsUpdate](#startbsupdate)|[sEvtStateCode](#sevtstatecode)
[fEvtBsUpateState](#fevtbsupatestate)
[fEvtBsUpdateProgress](#fevtbsupdateprogress)|
+||下载字库(内)|[downloadFontLib](#downloadfontlib)|[sEvtStateCode](#sevtstatecode)
[fEvtBsFontLibState](#fevtbsfontlibstate)
[fEvtBsFontLibProgress](#fevtbsfontlibprogress)|
+### 键盘管理
+|功能归类|功能|API指令|指令事件|
+|---|---|---|---|
+|识别设置 - 出厂编码(内)|设置键盘出厂编码(内)|[setKpSN](#setkpsn)|[fEvtKpSN](#fevtkpsn)|
+|识别设置 - 键盘编号|获取键盘编号|[getKpID](#getkpid)|[fEvtKpID](#fevtkpid)|
+|识别设置 - 键盘编号(内)|设置键盘编号(内)|[setKpID](#setkpid)|[fEvtKpID](#fevtkpid)|
+|识别设置 - 键盘型号|获取键盘型号|[getKpModel](#getkpmodel)|[fEvtKpModel](#fevtkpmodel)|
+|识别设置 - 键盘固件版本|获取键盘固件版本|[getKpFWVersion](#getKpfwversion)|[fEvtKpFWVersion](#fevtkpfwversion)|
+|识别设置 - 识别模式(内)|获取键盘识别模式(内)|[getKpIdentityMode](#getkpidentitymode)|[fEvtKpIdentityMode](#fevtkpidentitymode)|
+||设置键盘识别模式(内)|[setKpIdentityMode](#setkpidentitymode)|[fEvtKpIdentityMode](#fevtkpidentitymode)|
+|交互设置 - 用户内置状态语|设置用户内置状态语|[setKpUserStbMsg](#setkpuserstbmsg)|[fEvtKpUserStbMsg](#fevtkpuserstbmsg)|
+|交互设置 - 用户实时提示反馈信息|实时设置提示反馈信息|[rtSetKpUserPrompt](#rtsetkpuserprompt)|[sEvtStateCode](#sevtstatecode)
[fEvtSetKpUserPrompt](#fevtsetkpuserprompt)|
+||实时设置LED效果|[rtSetKpUserLedEffects](#rtsetkpuserledeffects)|[sEvtStateCode](#sevtstatecode)|
+||实时设置振动效果|[rtSetKpUserVibEffects](#rtsetkpuservibeffects)|[sEvtStateCode](#sevtstatecode)|
+||实时设置Beep效果|[rtSetKpUserBeepEffects](#rtsetkpuserbeepeffects)|[sEvtStateCode](#sevtstatecode)|
+|在线状态获取|开启扫描在线键盘|[startGetKpOnline](#startgetkponline)|[sEvtStateCode](#sevtstatecode)
[fEvtKpOnlineMsg](#fevtkponlinemsg)|
+||停止扫描在线键盘|[stopGetKpOnline](#stopgetkponline)|[sEvtStateCode](#sevtstatecode)|
+|维护功能 - 遥控功能|遥控键盘关机|[remoteKpPowerOff](#remotekppoweroff)|[sEvtStateCode](#sevtstatecode)|
+||遥控键盘休眠|[remoteKpSleep](#remotekpsleep)|[sEvtStateCode](#sevtstatecode)|
+|维护功能 - 键盘升级|启动键盘无线升级(内)|[startKpFWUpdate](#startkpfwupdate)|[sEvtStateCode](#sevtstatecode)
[fEvtKpFWUpdateState](#fevtkpfwupdatestate)
[fEvtKpUpdateProgress](#fevtkpupdateprogress)
[sEvtBsKpOnlineMsg](#sevtbskponlinemsg)|
+||停止键盘无线升级(内)|[stopKpFWUpdate](#stopkpfwupdate)|[sEvtStateCode](#sevtstatecode)
[fEvtKpFWUpdateState](#fevtkpfwupdatestate)|
+### 绑定
+|功能归类|功能|API指令|指令事件|
+|---|---|---|---|
+|无线绑定|设置绑定信息到键盘|[rtSetKpBindingInfo](#rtsetkpbindinginfo)|[sEvtStateCode](#sevtstatecode)
[fEvtKpBindingInfo](#fevtkpbindinginfo)|
+||清除键盘绑定信息|[clearKpBindingInfo](#clearkpbindinginfo)|[sEvtStateCode](#sevtstatecode)
[fEvtClearKpBindingInfo](#fevtclearkpbindinginfo)|
+### 签到
+|功能归类|功能|API指令|指令事件|
+|---|---|---|---|
+|同步签到|启动同步签到|[startKpSignIn](#startkpsignin)|[sEvtStateCode](#sevtstatecode)
[fEvtKpSignIn](#fevtkpsignin)|
+||停止同步签到|[stopKpSignIn](#stopkpsignin)|[sEvtStateCode](#sevtstatecode)|
+|随时签到|启动随时签到|[rtStartKpSignIn](#rtstartkpsignin)|[sEvtStateCode](#sevtstatecode)
[fEvtKpSignIn](#fevtkpsignin)|
+||停止随时签到|[rtStopKpSignIn](#rtstopkpsignin)|[sEvtStateCode](#sevtstatecode)|
+||实时PIN签到授权|[rtSetKpLoginAllowed](#rtsetkploginallowed)|[sEvtStateCode](#sevtstatecode)
[fEvtKpLoginAllowed](#fevtkploginallowed)|
+### 按键反馈
+|功能归类|功能|API指令|指令事件|
+|---|---|---|---|
+|判断题|启动判断题答题|[startQATrueFalse](#startqatruefalse)|[sEvtStateCode](#sevtstatecode)
[fEvtQATrueFalse](#fevtqatruefalse)|
+||停止判断题答题|[stopQATrueFalse](#stopqatruefalse)|[sEvtStateCode](#sevtstatecode)|
+|选择题|启动选择题答题|[startQAChoice](#startqachoice)|[sEvtStateCode](#sevtstatecode)
[fEvtQAChoice](#fevtqachoice)|
+||停止选择题答题|[stopQAChoice](#stopqachoice)|[sEvtStateCode](#sevtstatecode)|
+|数字题|启动数字题答题|[startQANum](#startqanum)|[sEvtStateCode](#sevtstatecode)
[fEvtQANum](#fevtqanum)|
+||停止数字题答题|[stopQANum](#stopqanum)|[sEvtStateCode](#sevtstatecode)|
+|抢答题|启动抢答题答题|[startQAQuicker](#startqaquicker)|[sEvtStateCode](#sevtstatecode)
[fEvtQAQuicker](#fevtqaquicker)|
+||停止抢答题答题|[stopQAQuicker](#stopqaquicker)|[sEvtStateCode](#sevtstatecode)|
+|英文题|启动英文题答题|[startQAEText](#startqaetext)|[sEvtStateCode](#sevtstatecode)
[fEvtQAEText](#fevtqaetext)|
+||停止英文题答题|[stopQAEText](#stopqaetext)|[sEvtStateCode](#sevtstatecode)|
+|短信息|发送标准短信|[sendKpMsg](#sendkpmsg)|[sEvtStateCode](#sevtstatecode)
[fEvtKpMsg](#fevtkpmsg)|
+||实时发送弹窗提醒|[rtSendKpNotice](#rtsendkpnotice)|[sEvtStateCode](#sevtstatecode)|
+|待机实时反馈|启动待机实时反馈|[startKpStbResponse](#startkpstbresponse)|[sEvtStateCode](#sevtstatecode)
[sEvtKpRtFeedback](#sevtkprtfeedback)
[sEvtKpHandUp](#sevtkphandup)|
+||停止待机实时反馈|[stopKpStbResponse](#stopkpstbresponse)|[sEvtStateCode](#sevtstatecode)|
+### 语音反馈
+|功能归类|功能|API指令|指令事件|
+|---|---|---|---|
+|语音反馈-单题语音评测|启动单题语音评测|[startQAVoice](#startqavoice)|[sEvtStateCode](#sevtstatecode)
[fEvtVoiceFile](#fevtvoicefile)
[fEvtVoiceStream](#fevtvoicestream)
[fEvtVoicePacketLossInfo](#fevtvoicepacketlossinfo)|
+||停止单题语音评测|[stopQAVoice](#stopqavoice)|[sEvtStateCode](#sevtstatecode)|
+|语音反馈-选定键盘发言|启动选定键盘发言|[startKpDSpeaker](#startkpdspeaker)|[sEvtStateCode](#sevtstatecode)
[fEvtVoiceStream](#fevtvoicestream)|
+||停止选定键盘发言|[stopKpDSpeaker](#stopkpdspeaker)|[sEvtStateCode](#sevtstatecode)|
+|语音反馈-待机实时反馈|启动待机实时反馈|[startVoiceStbResponse](#startvoicestbresponse)|[sEvtStateCode](#sevtstatecode)
[sEvtKpRtVoice](#sevtkprtvoice)|
+||停止待机实时反馈|[stopVoiceStbResponse](#stopvoicestbresponse)|[sEvtStateCode](#sevtstatecode)|
+### 在线测验
+|功能归类|功能|API指令|指令事件|
+|---|---|---|---|
+|标准测验|启动标准测验|[startKpExam](#startkpexam)|[sEvtStateCode](#sevtstatecode)
[fEvtKpExam](#fevtkpexam)
[fEvtFinalSubmit](#fevtfinalsubmit)|
+||停止标准测验|[stopKpExam](#stopkpexam)|[sEvtStateCode](#sevtstatecode)|
+||刷新作答数据|[rtGetKpExamData](#rtgetkpexamdata)|[sEvtStateCode](#sevtstatecode)
[fEvtKpExam](#fevtkpexam)|
+||判卷结果回传|[rtSetKpExamResult](#rtgetkpexamdata)|[sEvtStateCode](#sevtstatecode)
[fEvtSetKpExamResult](#fevtsetkpexamresult)|
+||允许键盘提交后退回修改|[rtAllowEdited](#rtkpallowedited)|[sEvtStateCode](#sevtstatecode)
[fEvtFinalSubmit](#fevtfinalsubmit)|
+|自主录分|启动自主录分|[startKpScoreInput](#startkpscoreinput)|[sEvtStateCode](#sevtstatecode)
[fEvtKpScore](#fevtkpscore)
[fEvtFinalSubmit](#fevtfinalsubmit)|
+||停止自主录分|[stopKpScoreInput](#stopkpscoreinput)|[sEvtStateCode](#sevtstatecode)|
+
+## SDK管理
+### 方法
+#### heartbeat
+- **功能描述**: 应用和SDK之间发送心跳,用于维持WebSocket连接,可在初始化SDK时指定是否由SDK主动发起,收到heartbeat包后返回相同dataTag的heartbeat包
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|-----|-----|-----|-----|-----|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|是|数据包标识,不需要时可传空字符串|
+
+- **示例代码**
+```Json
+{
+ "fun":"heartbeat",
+ "dataTag":"1"
+}
+```
+#### setHeartbeatInterval
+- **功能描述**: 设置心跳间隔时间,SDK为WebSocket的客户端时,如果超时未收到心跳包,自动重连服务器
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|-----|-----|-----|-----|-----|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,不需要时可传空字符串|
+|data|object|-|是|传送参数的对象|
+|+value|int||是|心跳间隔,单位秒,建议设置时长>10秒
设为0时不主动发送心跳包,只被动回复心跳包
>0时,主动在间隔时长发送心跳包(无消息通讯时)|
+
+- **示例代码**
+```Json
+{
+ "fun":"setHeartbeatInterval",
+ "dataTag":"1",
+ "data":{
+ "value":30
+ }
+}
+```
+#### getSdkVersion
+- **功能描述**: 获取SDK版本信息
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|-----|-----|-----|-----|-----|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,不需要时可传空字符串|
+
+- **示例代码**
+```Json
+{
+ "fun":"getSdkVersion",
+ "dataTag":"1"
+}
+```
+#### closeSdk
+- **功能描述**: 关闭SDK
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|-----|-----|-----|-----|-----|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,不需要时可传空字符串|
+
+- **示例代码**
+```Json
+{
+ "fun":"closeSdk",
+ "dataTag":"1"
+}
+```
+### 事件
+#### heartbeat
+- **功能描述**:收到心跳包时返回的事件
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|事件名称|
+|dataTag|string|-|否|数据包标识,返回收到的数据包dataTag|
+
+- **示例代码**
+```Json
+{
+ "fun":"heartbeat",
+ "dataTag":"1"
+}
+```
+#### fEvtHeartbeatInterval
+- **功能描述**:返回设置的心跳间隔时长
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|事件名称|
+|dataTag|string|-|否|数据包标识,不需要时可传空字符串|
+|data|object|-|是|传送参数的对象|
+|+value|int||是|心跳间隔时长,单位秒|
+
+- **示例代码**
+```Json
+{
+ "fun":"fEvtHeartbeatInterval",
+ "dataTag":"1",
+ "data":{
+ "value":30
+ }
+}
+```
+#### fEvtSdkVersion
+- **功能描述**:返回SDK版本信息
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|事件名称|
+|dataTag|string|-|否|数据包标识,不需要时可传空字符串|
+|data|object|-|是|传送参数的对象|
+|+value|string||是|返回SDK的版本信息|
+
+- **示例代码**
+```Json
+{
+ "fun":"fEvtSdkVersion",
+ "dataTag":"1",
+ "data":{
+ "value":"1.0.0.0"
+ }
+}
+```
+## 公共事件
+### sEvtBsConnectState
+- **主题**: /basestation/\${baseSN}/receive (MQTT连接方式)
+- **功能描述**:基站连接成功时返回基站型号和基站SN,基站从已连接状态断开返回连接断开
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|-----|-----|-----|-----|-----|
+|fun|string|-|是|事件类型|
+|dataTag|string|-|否|数据包标识,不需要时可传空字符串|
+|data|object|-|是|传送参数的对象|
+|+baseSn|string||是|基站的出厂编码|
+|+baseModel|int||否|基站的型号码|
+|+modelName|string||否|基站的型号名称|
+|+state|int||是|基站的连接状态
1-已连接
2-连接断开|
+|+version|string||否|基站固件版本|
+
+- **示例代码**
+```Json
+//连接成功
+{
+ "fun":"sEvtBsConnectState",
+ "dataTag":"1",
+ "data":{
+ "baseSn":"2024061101",
+ "state":1,
+ "baseModel":218,
+ "modelName":"B200",
+ "version":"1.0.3"
+ }
+}
+//连接断开
+{
+ "fun":"sEvtBsConnectState",
+ "dataTag":"1",
+ "data":{
+ "baseSn":"2024061101",
+ "state":2
+ }
+}
+```
+### sEvtBsChannelConflict
+- **主题**: /basestation/\${baseSN}/receive
+- **功能描述**:基站信道冲突时主动上报,应用程序可根据实际业务修改基站信道
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|事件名称|
+|dataTag|string|-|否|数据包标识,不需要时可传空字符串|
+|data|object|-|是|传送参数的对象|
+|+value|int||是|有冲突的信道|
+
+- **示例代码**
+```Json
+{
+ "fun":"sEvtBsChannelConflict",
+ "dataTag":"1",
+ "data":{
+ "value":5 //信道5有多个基站使用
+ }
+}
+```
+### sEvtBsNfcResults
+- **主题**: /basestation/\${baseSN}/receive
+- **功能描述**:键盘刷卡时主动上报,如果超出基站容量会上报失败
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|事件名称|
+|dataTag|string|-|否|数据包标识,不需要时可传空字符串|
+|data|object|-|是|传送参数的对象|
+|+keySn|string||是|刷卡的键盘SN|
+|+value|int||是|刷卡的状态
1-成功
2-失败|
+
+- **示例代码**
+```Json
+{
+ "fun":"sEvtBsNfcResults",
+ "dataTag":"1", //不需要时可传空字符串
+ "data":{
+ "keySn":"1234567890",
+ "value":1
+ }
+}
+```
+
+### sEvtBsKpOnlineMsg
+- **主题**: /basestation/\${baseSN}/receive
+- **功能描述**:键盘上线通知,主动上报,键盘升级成功后也会上报
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|事件名称|
+|dataTag|string|-|否|数据包标识|
+|data|object|-|是|传送参数的对象|
+|+keySn|string||是|键盘SN|
+|+version|string||是|键盘固件版本|
+|+model|int||是|键盘型号|
+|+voltage|double||是|键盘电压|
+
+- **示例代码**
+```Json
+{
+ "fun":"sEvtBsKpOnlineMsg",
+ "dataTag":"1",
+ "data":{
+ "keySn":"1234567890",
+ "version":"1.0.0",
+ "model":67
+ }
+}
+```
+### sEvtBsKpOnlineList
+- **主题**: /basestation/\${baseSN}/receive
+- **功能描述**:键盘在线列表发生变化时主动上报(T2专属)
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|事件名称|
+|dataTag|string|-|否|数据包标识|
+|data|array|-|是|传送参数的对象数组|
+|++keySn|string||是|键盘SN|
+|++version|string||是|键盘固件版本|
+|++model|int||是|键盘型号|
+|++voltage|double||是|键盘电压|
+
+- **示例代码**
+```Json
+{
+ "fun":"sEvtBsKpOnlineList",
+ "dataTag":"1",
+ "data":[{
+ "keySn":"1234567890",
+ "version":"1.0.0",
+ "model":67,
+ "voltage":2.8
+ }]
+}
+```
+### sEvtKpRtFeedback
+- **主题**: /basestation/\${baseSN}/receive
+- **功能描述**:开启键盘实时反馈后,键盘按键时上报
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|事件名称|
+|dataTag|string|-|否|数据包标识|
+|data|object|-|是|传送参数的对象|
+|+keySn|string||是|键盘SN|
+|+keyValue|string||是|键盘提交的按键值|
+
+- **示例代码**
+```Json
+{
+ "fun":"sEvtKpRtFeedback",
+ "dataTag":"1",
+ "data":{
+ "keySn":"1234567890",
+ "keyValue":"A"
+ }
+}
+```
+### sEvtKpRtVoice
+- **主题**: /basestation/\${baseSN}/receive
+- **功能描述**:开启键盘语音实时反馈后,键盘发送语音时上报
+- **参数说明**(待定)
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|事件名称|
+|dataTag|string|-|否|数据包标识|
+|data|object|-|是|传送参数的对象|
+|+keySn|string||是|键盘SN|
+|+keyValue|string||是|键盘提交的按键值|
+
+- **示例代码**
+```Json
+{
+ "fun":"sEvtKpRtVoice",
+ "dataTag":"1",
+ "data":{
+ "keySn":"1234567890",
+ "keyValue":"A"
+ }
+}
+```
+### sEvtKpHandUp
+- **主题**: /basestation/\${baseSN}/receive
+- **功能描述**:开启键盘举手功能后,键盘按举手键时上报
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|事件名称|
+|dataTag|string|-|否|数据包标识|
+|data|object|-|是|传送参数的对象|
+|+keySn|string||是|举手的键盘SN|
+
+- **示例代码**
+```Json
+{
+ "fun":"sEvtKpHandUp",
+ "dataTag":"1",
+ "data":{
+ "keySn":"1234567890"
+ }
+}
+```
+### sEvtKpRemoteControl
+- **主题**: /basestation/\${baseSN}/receive
+- **功能描述**:遥控器按键实时上报
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|事件名称|
+|dataTag|string|-|否|数据包标识|
+|data|object|-|是|传送参数的对象|
+|+keySn|string||是|遥控器SN|
+|+keyValue|string||是|遥控器提交的按键值,按键值含义参见遥控器说明|
+
+- **示例代码**
+```Json
+{
+ "fun":"sEvtKpRtFeedback",
+ "dataTag":"1",
+ "data":{
+ "keySn":"1234567890",
+ "keyValue":"1"
+ }
+}
+```
+### sEvtStateCode
+- **主题**: /basestation/\${baseSN}/receive
+- **功能描述**:返回基站接收指令状态信息
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|事件名称|
+|dataTag|string|-|否|数据包标识|
+|data|object|-|是|传送参数的对象|
+|+funName|string||是|指令名称|
+|+code|string||是|状态码,含义见下表|
+
+|错误码|说明|
+|---|---|
+|0|指令收取成功|
+|10001|不能正确解析的JSON数据|
+|10002|解析JSON错误|
+|20001|基站未连接|
+|20002|功能不支持|
+|20003|基站SN格式不正确|
+|20004|参数错误|
+|20005|基站在答题中|
+|40001|升级功能只能支持一个基站|
+|50001|此功能必须指定基站|
+|60001|此功能必须指定键盘SN|
+
+- **示例代码**
+```Json
+{
+ "fun":"sEvtStateCode",
+ "dataTag":"1",
+ "data":{
+ "funName":"startKpSignIn",
+ "code":"20005"
+ }
+}
+```
+## 基站管理
+### 基站连接
+#### 方法
+##### getBsOnlineState
+- **主题**:/client/multiBase/send
+- **功能描述**:主动获取所有在线基站信息,在线基站回复
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|固定指令名称|
+|dataTag|string|-|否|数据包标识|
+- **示例代码**
+```Json
+{
+ "fun":"getBsOnlineState",
+ "dataTag":"1"
+}
+```
+
+##### getBsConnectState
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:主动获取基站连接状态
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|固定指令名称|
+|dataTag|string|-|否|数据包标识|
+- **示例代码**
+```Json
+{
+ "fun":"getBsConnectState",
+ "dataTag":"1"
+}
+```
+#### 事件
+##### [sEvtBsConnectState](#sevtbsconnectstate)
+参见基站连接变化系统通知
+
+##### fEvtBsOnlineState
+- **主题**: /basestation/mutilBase/receive
+- **功能描述**:基站在线返回基站型号和基站SN
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|-----|-----|-----|-----|-----|
+|fun|string|-|是|事件类型|
+|dataTag|string|-|否|数据包标识,不需要时可传空字符串|
+|data|object|-|是|传送参数的对象|
+|+baseModel|int||否|基站的型号码|
+|+modelName|string||否|基站的型号名称|
+|+version|string||否|基站固件版本|
+|+baseSN|string||否|基站SN|
+
+- **示例代码**
+```Json
+//连接成功
+{
+ "fun":"fEvtBsOnlineState",
+ "dataTag":"1",
+ "data":{
+ "baseModel":218,
+ "modelName":"B200",
+ "version":"1.0.3",
+ "baseSN":"2024041401"
+ }
+}
+```
+
+### 识别设置
+#### 方法
+##### setBsSN
+- **主题**:/manage/\${baseSN}/send
+- **功能描述**:设置基站的SN,需预先订阅新SN的主题,以获取事件返回
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识|
+|data|object|-|是|传送参数的对象|
+|+value|string|数字|是|设置的基站SN,长度为10位数字|
+|+time|string|数字|是|时间,yyyyMMddHHmmss|
+|+verCode|string||是|内部主题校验码,时间+固定key加密|
+
+- **示例代码**
+```Json
+{
+ "fun":"setBsSN",
+ "dataTag":"1",
+ "data":{
+ "value":"2024041201"
+ }
+}
+```
+##### getBsModel
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:获取基站型号
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+
+- **示例代码**
+```Json
+{
+ "fun":"getBsModel",
+ "dataTag":"1"
+}
+```
+##### getBsFWVersion
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:获取基站固件版本
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+
+- **示例代码**
+```Json
+{
+ "fun":"getBsFWVersion",
+ "dataTag":"1"
+}
+```
+##### getBsBIC
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:获取基站品牌识别码
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+
+- **示例代码**
+```Json
+{
+ "fun":"getBsBIC",
+ "dataTag":"1"
+}
+```
+##### setBsBIC
+- **主题**:/manage/\${baseSN}/send
+- **功能描述**:设置基站品牌识别码
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+value|string||是|设置的基站品牌码|
+|+time|string|数字|是|时间,yyyyMMddHHmmss|
+|+verCode|string||是|内部主题校验码,时间+固定key加密|
+
+- **示例代码**
+```Json
+{
+ "fun":"setBsBIC",
+ "dataTag":"1",
+ "data":{
+ "value":"sunvote"
+ }
+}
+```
+#### 事件
+##### fEvtBsSN
+- **主题**: /basestation/\${baseSN}/receive
+- **功能描述**:返回基站的出厂编码
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|事件名称|
+|dataTag|string|-|否|数据包标识|
+|data|object|-|是|传送参数的对象|
+|+value|string|-|是|基站的出厂编码|
+
+- **示例代码**
+```Json
+{
+ "fun":"fEvtBsSN",
+ "dataTag":"1",
+ "data":{
+ "value":"2024041201"
+ }
+}
+```
+##### fEvtBsModel
+- **主题**: /basestation/\${baseSN}/receive
+- **功能描述**:返回基站的型号
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|事件名称|
+|dataTag|string|-|否|数据包标识|
+|data|object|-|是|传送参数的对象|
+|+value|string|-|是|基站的型号名称|
+
+- **示例代码**
+```Json
+{
+ "fun":"fEvtBsModel",
+ "dataTag":"1",
+ "data":{
+ "value":"B200"
+ }
+}
+```
+##### fEvtBsFWVersion
+- **主题**: /basestation/\${baseSN}/receive
+- **功能描述**:返回基站的固件版本
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|事件名称|
+|dataTag|string|-|否|数据包标识|
+|data|object|-|是|传送参数的对象|
+|+value|string||是|基站的固件版本号|
+
+- **示例代码**
+```Json
+{
+ "fun":"fEvtBsFWVersion",
+ "dataTag":"1",
+ "data":{
+ "value":"1.0.3"
+ }
+}
+```
+##### fEvtBsBIC
+- **主题**: /basestation/\${baseSN}/receive
+- **功能描述**:返回基站的品牌码
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|事件名称|
+|dataTag|string|-|否|数据包标识|
+|data|object|-|是|传送参数的对象|
+|+value|string||是|基站的品牌码|
+
+- **示例代码**
+```Json
+{
+ "fun":"fEvtBsBIC",
+ "dataTag":"1",
+ "data":{
+ "value":"sunvote"
+ }
+}
+```
+### 组网设置
+#### 方法
+##### getBsNetworkMode
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:获取基站组网模式
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+
+- **示例代码**
+```Json
+{
+ "fun":"getBsNetworkMode",
+ "dataTag":"1"
+}
+```
+##### setBsNetworkMode
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:设置基站组网模式
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+value|string|-|是|设置的基站组网模式
1-配对模式
2-白名单模式|
+
+- **示例代码**
+```Json
+{
+ "fun":"setBsNetworkMode",
+ "dataTag":"1",
+ "data":{
+ "value":"1"
+ }
+}
+```
+##### getBsPairCode
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:获取基站配对码
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+
+- **示例代码**
+```Json
+{
+ "fun":"getBsPairCode",
+ "dataTag":"1"
+}
+```
+##### setBsPairCode
+- **主题**:/manage/\${baseSN}/send
+- **功能描述**:设置基站配对码
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|否|传送参数的对象|
+|+value|string|-|否|设置的基站配对码,8位数字|
+|+time|string|数字|是|时间,yyyyMMddHHmmss|
+|+verCode|string||是|内部主题校验码,时间+固定key加密|
+
+- **示例代码**
+```Json
+{
+ "fun":"setBsPairCode",
+ "dataTag":"1",
+ "data":{
+ "value":"04120101"
+ }
+}
+```
+##### getBsNfcLogin
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:获取刷卡配对状态
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+
+- **示例代码**
+```Json
+{
+ "fun":"getBsNfcLogin",
+ "dataTag":"1"
+}
+```
+##### setBsNfcLogin
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:设置基站刷卡配对状态
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+value|string|-|是|设置的基站刷卡配对状态
0-关闭刷卡配对
1-开启刷卡配对|
+
+- **示例代码**
+```Json
+{
+ "fun":"setBsNfcLogin",
+ "dataTag":"1",
+ "data":{
+ "value":"1"
+ }
+}
+```
+
+##### getBsCapacity
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:获取基站容量参数
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+
+- **示例代码**
+```Json
+{
+ "fun":"getBsCapacity",
+ "dataTag":"1"
+}
+```
+##### setBsCapacity
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:设置基站容量
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+value|string|-|是|设置基站的键盘容量,<=200|
+
+- **示例代码**
+```Json
+{
+ "fun":"setBsCapacity",
+ "dataTag":"1",
+ "data":{
+ "value":"60"
+ }
+}
+```
+
+##### getBsChannel
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:获取基站信道
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+
+- **示例代码**
+```Json
+{
+ "fun":"getBsChannel",
+ "dataTag":"1"
+}
+```
+##### setBsChannel
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:设置基站信道
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+value|string|-|是|设置的基站信道,可设范围:1-80|
+
+- **示例代码**
+```Json
+{
+ "fun":"setBsChannel",
+ "dataTag":"1",
+ "data":{
+ "value":"23"
+ }
+}
+```
+#### 事件
+##### fEvtBsNetworkMode
+- **主题**: /basestation/\${baseSN}/receive
+- **功能描述**:返回基站组网模式
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|事件名称|
+|dataTag|string|-|否|数据包标识,可传空字符串|
+|data|object|-|是|传送参数的对象|
+|+value|string||是|基站的组网模式
1-配对模式
2-白名单模式|
+
+- **示例代码**
+```Json
+{
+ "fun":"fEvtBsNetworkMode",
+ "dataTag":"1",
+ "data":{
+ "value":"1"
+ }
+}
+```
+##### fEvtBsPairCode
+- **主题**: /basestation/\${baseSN}/receive
+- **功能描述**:返回基站配对码
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|事件名称|
+|dataTag|string|-|否|数据包标识,可传空字符串|
+|data|object|-|是|传送参数的对象|
+|+value|string||是|基站的配对码|
+
+- **示例代码**
+```Json
+{
+ "fun":"fEvtBsPairCode",
+ "dataTag":"1",
+ "data":{
+ "value":"123456"
+ }
+}
+```
+##### fEvtBsCapacity
+- **主题**: /basestation/\${baseSN}/receive
+- **功能描述**:返回基站容量
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|事件名称|
+|dataTag|string|-|否|数据包标识,可传空字符串|
+|data|object|-|是|传送参数的对象|
+|+value|string||是|基站容量|
+
+- **示例代码**
+```Json
+{
+ "fun":"fEvtBsCapacity",
+ "dataTag":"1",
+ "data":{
+ "value":"60"
+ }
+}
+```
+##### fEvtBsChannel
+- **主题**: /basestation/\${baseSN}/receive
+- **功能描述**:返回基站信道
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|事件名称|
+|dataTag|string|-|否|数据包标识,可传空字符串|
+|data|object|-|是|传送参数的对象|
+|+value|string||是|基站信道|
+
+- **示例代码**
+```Json
+{
+ "fun":"fEvtBsChannel",
+ "dataTag":"1",
+ "data":{
+ "value":"5"
+ }
+}
+```
+##### fEvtBsNfcLogin
+- **主题**: /basestation/\${baseSN}/receive
+- **功能描述**:返回基站是否允许NFC刷卡
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|事件名称|
+|dataTag|string|-|否|数据包标识,可传空字符串|
+|data|object|-|是|传送参数的对象|
+|+value|string||是|0-关闭 1-开启|
+
+- **示例代码**
+```Json
+{
+ "fun":"fEvtBsNfcLogin",
+ "dataTag":"1",
+ "data":{
+ "value":"1"
+ }
+}
+```
+### 登录设置
+#### 方法
+##### getBsSSID
+获取基站登录名称
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:获取基站登录名称
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|固定指令名称|
+|dataTag|string|-|否|数据包标识|
+
+- **示例代码**
+```Json
+{
+ "fun":"getBsSSID",
+ "dataTag":"1"
+}
+```
+##### setBsSSID
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:设置基站登录名称
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+value|string||是|设置的基站SSID,最长12字符|
+
+- **示例代码**
+```Json
+{
+ "fun":"setBsSSID",
+ "dataTag":"1",
+ "data":{
+ "value":"1901班"
+ }
+}
+```
+##### getBsLoginPwd
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:获取基站登录密码
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|固定指令名称|
+|dataTag|string|-|否|数据包标识|
+
+- **示例代码**
+```Json
+{
+ "fun":"getBsLoginPwd",
+ "dataTag":"1"
+}
+```
+##### setBsLoginPwd
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:设置基站登录密码
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+value|string||是|设置的基站登录密码,数字类型,为空代表无需密码登录|
+
+- **示例代码**
+```Json
+{
+ "fun":"setBsLoginPwd",
+ "dataTag":"1",
+ "data":{
+ "value":"123456"
+ }
+}
+```
+##### getBsLoginState
+获取基站登录名称
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:获取基站登录状态
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|固定指令名称|
+|dataTag|string|-|否|数据包标识|
+
+- **示例代码**
+```Json
+{
+ "fun":"getBsLoginState",
+ "dataTag":"1"
+}
+```
+##### setBsLoginState
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:设置基站登录状态
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+value|string||是|设置是否允许键盘自主登入
0 - 不允许键盘登入
1 - 允许键盘登入|
+
+- **示例代码**
+```Json
+{
+ "fun":"setBsLoginState",
+ "dataTag":"1",
+ "data":{
+ "value":"1"
+ }
+}
+```
+
+#### 事件
+##### fEvtBsSSID
+- **主题**: /basestation/\${baseSN}/receive
+- **功能描述**:返回基站名称
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|事件名称|
+|dataTag|string|-|否|数据包标识,可传空字符串|
+|data|object|-|是|传送参数的对象|
+|+value|string||是|基站名称|
+
+- **示例代码**
+```Json
+{
+ "fun":"fEvtBsSSID",
+ "dataTag":"1",
+ "data":{
+ "value":"1901班"
+ }
+}
+```
+##### fEvtBsLoginPwd
+- **主题**: /basestation/\${baseSN}/receive
+- **功能描述**:返回基站登录密码
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|事件名称|
+|dataTag|string|-|否|数据包标识,可传空字符串|
+|data|object|-|是|传送参数的对象|
+|+value|string||是|基站登录密码|
+
+- **示例代码**
+```Json
+{
+ "fun":"fEvtBsLoginPwd",
+ "dataTag":"1",
+ "data":{
+ "value":"123456"
+ }
+}
+```
+##### fEvtBsLoginState
+- **主题**: /basestation/\${baseSN}/receive
+- **功能描述**:返回基站登录状态
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|事件名称|
+|dataTag|string|-|否|数据包标识,可传空字符串|
+|data|object|-|是|传送参数的对象|
+|+value|string||是|基站登录状态|
+
+- **示例代码**
+```Json
+{
+ "fun":"fEvtBsLoginState",
+ "dataTag":"1",
+ "data":{
+ "value":"1"
+ }
+}
+```
+### 键盘统一设置
+#### 方法
+##### getBsKpLanguage
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:获取键盘语言
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+
+- **示例代码**
+```Json
+{
+ "fun":"getBsKpLanguage",
+ "dataTag":"1"
+}
+```
+##### setBsKpLanguage
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:设置键盘语言
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+value|string||是|设置键盘显示的语言
1-简体中文
2-英文|
+
+- **示例代码**
+```Json
+{
+ "fun":"setBsKpLanguage",
+ "dataTag":"1",
+ "data":{
+ "value":"1"
+ }
+}
+```
+##### getBsKpStbMsgMode
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:获取状态语设置状态
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+
+- **示例代码**
+```Json
+{
+ "fun":"getBsKpStbMsgMode",
+ "dataTag":"1"
+}
+```
+##### setBsKpStbMsgMode
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:设置状态语工作状态
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+value|string||是|设置状态语工作状态
0-系统默认
1-用户内置|
+
+- **示例代码**
+```Json
+{
+ "fun":"setBsKpStbMsgMode",
+ "dataTag":"1",
+ "data":{
+ "value":"0"
+ }
+}
+```
+##### getBsKpLoginMenu
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:获取键盘登录菜单显示状态
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+
+- **示例代码**
+```Json
+{
+ "fun":"getBsKpLoginMenu",
+ "dataTag":"1"
+}
+```
+
+##### setBsKpLoginMenu
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:设置键盘登录菜单显示状态
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+value|string||是|设置键盘登录菜单显示状态
0-不显示
1-显示|
+
+- **示例代码**
+```Json
+{
+ "fun":"setBsKpLoginMenu",
+ "dataTag":"1",
+ "data":{
+ "value":"1"
+ }
+}
+```
+##### getBsKpLedMode
+##### setBsKpLedMode
+##### getBsKpBeepMode
+##### setBsKpBeepMode
+
+##### getBsKpRFIDState
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:获取键盘长距离考勤开启状态
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+
+- **示例代码**
+```Json
+{
+ "fun":"getBsKpRFIDState",
+ "dataTag":"1"
+}
+```
+##### setBsKpRFIDState
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:设置键盘长距离考勤开启状态
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+value|string||是|设置键盘长距离考勤开启状态
0-不开启
1-开启|
+
+- **示例代码**
+```Json
+{
+ "fun":"setBsKpRFIDState",
+ "dataTag":"1",
+ "data":{
+ "value":"1"
+ }
+}
+```
+##### setBsKpPauseSleep
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:设置键盘暂停休眠是否开启
注意:请谨慎使用本功能,务必在相关测试或功能完成后关闭,否则可能会导致键盘异常耗电
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+value|string||是|设置键盘暂停休眠是否开启
0-关闭暂停休眠
1-开启暂停休眠|
+
+- **示例代码**
+```Json
+{
+ "fun":"setBsKpPauseSleep",
+ "dataTag":"1",
+ "data":{
+ "value":"1"
+ }
+}
+```
+
+#### 事件
+##### fEvtBsKpLanguage
+- **主题**: /basestation/\${baseSN}/receive
+- **功能描述**:返回键盘语言
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+value|string||是|设置键盘显示的语言
1-简体中文
2-英文|
+
+- **示例代码**
+```Json
+{
+ "fun":"fEvtBsKpLanguage",
+ "dataTag":"1",
+ "data":{
+ "value":"1"
+ }
+}
+```
+##### fEvtBsKpStbMsgMode
+- **主题**: /basestation/\${baseSN}/receive
+- **功能描述**:返回状态语工作状态
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+value|string||是|返回状态语工作状态
0-系统默认
1-用户内置|
+
+- **示例代码**
+```Json
+{
+ "fun":"fEvtBsKpStbMsgMode",
+ "dataTag":"1",
+ "data":{
+ "value":"0"
+ }
+}
+```
+##### fEvtBsKpLoginMenu
+- **主题**: /basestation/\${baseSN}/receive
+- **功能描述**:返回键盘登录菜单显示状态
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+value|string||是|返回键盘登录菜单显示状态
0-不显示
1-显示|
+
+- **示例代码**
+```Json
+{
+ "fun":"fEvtBsKpLoginMenu",
+ "dataTag":"1",
+ "data":{
+ "value":"0"
+ }
+}
+```
+##### fEvtBsKpLedMode
+##### fEvtBsKpBeepMode
+
+##### fEvtBsKpRFIDState
+- **主题**: /basestation/\${baseSN}/receive
+- **功能描述**:返回键盘长距离考勤开启状态
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+value|string||是|返回键盘长距离考勤开启状态
0-不开启
1-开启|
+
+- **示例代码**
+```Json
+{
+ "fun":"fEvtBsKpRFIDState",
+ "dataTag":"1",
+ "data":{
+ "value":"0"
+ }
+}
+```
+##### fEvtBsKpPauseSleep
+- **主题**: /basestation/\${baseSN}/receive
+- **功能描述**:返回暂停键盘休眠开启状态
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+value|string||是|返回暂停键盘休眠开启状态
0-未开启暂停休眠
1-开启暂停休眠|
+
+- **示例代码**
+```Json
+{
+ "fun":"fEvtBsKpPauseSleep",
+ "dataTag":"1",
+ "data":{
+ "value":"0"
+ }
+}
+```
+### 网络设置
+#### 方法
+##### getBsTcpipParams
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:获取基站TCP/IP参数
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+
+- **示例代码**
+```Json
+{
+ "fun":"getBsTcpipParams",
+ "dataTag":"1"
+}
+```
+##### setBsTcpipParams
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:设置基站TCP/IP参数
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+ip|string||否|IP地址|
+|+mask|string||否|子网掩码|
+|+gateway|string||否|网关地址|
+|+ipAllocation|int||否|基站IP获取方式
0 - 手动指定
1 - DHCP获取|
+
+- **示例代码**
+```Json
+{
+ "fun":"setBsTcpipParams",
+ "dataTag":"1",
+ "data":{
+ "ip":"192.168.0.10",
+ "mask":"255.255.255.0",
+ "gateway":"192.168.0.1",
+ "ipAllocation":1
+ }
+}
+```
+##### getBsMqttParams
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:获取基站MQTT参数
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+
+- **示例代码**
+```Json
+{
+ "fun":"getBsMqttParams",
+ "dataTag":"1"
+}
+```
+##### setBsMqttParams
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:设置基站MQTT参数
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+server|string||是|服务器IP地址|
+|+port|int||是|端口,默认1883|
+|+userName|string||否|连接服务器的用户名,可不设置|
+|+password|string||否|连接服务器的密码,可不设置|
+|+interval|int|>=10|否|基站连接服务器失败后重连的间隔时长,单位秒|
+
+- **示例代码**
+```Json
+{
+ "fun":"setBsMqttParams",
+ "dataTag":"1",
+ "data":{
+ "server":"192.168.10.10",
+ "port":1883,
+ "userName":"",
+ "password":"",
+ "interval":30
+ }
+}
+```
+#### 事件
+##### fEvtBsTcpipParams
+- **主题**: /basestation/\${baseSN}/receive
+- **功能描述**:返回基站TCP/IP参数
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+mac|string||是|MAC地址|
+|+ip|string||是|IP地址|
+|+mask|string||是|子网掩码|
+|+gateway|string||是|网关地址|
+|+ipAllocation|int||否|基站IP获取方式
0 - 手动指定
1 - DHCP获取|
+
+- **示例代码**
+```Json
+{
+ "fun":"fEvtBsTcpipParams",
+ "dataTag":"1",
+ "data":{
+ "mac":"FF:FF:FF:FF:FF:FF",
+ "ip":"192.168.0.10",
+ "mask":"255.255.255.0",
+ "gateway":"192.168.0.1",
+ "ipAllocation":1
+ }
+}
+```
+##### fEvtBsMqttParams
+- **主题**: /basestation/\${baseSN}/receive
+- **功能描述**:返回基站MQTT参数
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+server|string||是|服务器地址,IP|
+|+port|int||是|端口,默认1883|
+|+userName|string||否|连接服务器的用户名,可不设置|
+|+password|string||否|连接服务器的密码,可不设置|
+|+interval|int|>=10|否|基站连接服务器失败后重连的间隔时长,单位秒|
+
+- **示例代码**
+```Json
+{
+ "fun":"fEvtBsMqttParams",
+ "dataTag":"1",
+ "data":{
+ "server":"192.168.10.10",
+ "port":1883,
+ "userName":"",
+ "password":"",
+ "interval":30
+ }
+}
+```
+### 配对模式
+#### 方法
+##### startBsFastPair
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:启动快速配对,键盘配对成功返回键盘信息 [sEvtBsKpOnlineMsg](#sevtbskponlinemsg)
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+
+- **示例代码**
+```Json
+{
+ "fun": "startBsFastPair",
+ "dataTag":"1"
+}
+```
+##### stopBsFastPair
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:停止快速配对
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+
+- **示例代码**
+```Json
+{
+ "fun": "stopBsFastPair",
+ "dataTag":"1"
+}
+```
+#### 事件
+##### [sEvtStateCode](#sevtstatecode)
+发送指令后返回此事件
+
+##### [sEvtBsKpOnlineMsg](#sevtbskponlinemsg)
+键盘配对成功后在线返回此事件
+
+### 白名单模式
+#### 方法
+##### getBsWhitelist
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:获取基站白名单列表
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+
+- **示例代码**
+```Json
+{
+ "fun": "getBsWhitelist",
+ "dataTag":"1"
+}
+```
+##### setBsWhitelist
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:设置基站白名单列表,将基站白名单替换为写入的键盘SN列表
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+keySns|array|-|是|待写入的键盘SN数组|
+
+- **示例代码**
+```Json
+{
+ "fun": "setBsWhitelist",
+ "dataTag":"1",
+ "data":{
+ "keySns":["2024021001","2024021002","2024021003","2024021004"]
+ }
+}
+```
+##### clearBsWhitelist
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:清空基站白名单列表
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+
+- **示例代码**
+```Json
+{
+ "fun": "clearBsWhitelist",
+ "dataTag":"1"
+}
+```
+##### addBsWhitelist
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:添加键盘至基站白名单列表
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+keySns|array|-|是|待添加的键盘SN列表|
+
+- **示例代码**
+```Json
+{
+ "fun": "addBsWhitelist",
+ "dataTag":"1",
+ "data":{
+ "keySns":["2024021001"]
+ }
+}
+```
+##### delBsWhitelist
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:从基站白名单列表中删除键盘
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+keySns|array|-|是|待删除的键盘SN列表|
+
+- **示例代码**
+```Json
+{
+ "fun": "delBsWhitelist",
+ "dataTag":"1",
+ "data":{
+ "keySns":["2024021001"]
+ }
+}
+```
+##### lockBsWhitelistKp
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:锁定指定的键盘SN,基站限制容量时,被锁定键盘SN不会被新刷卡加入的键盘挤出
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+keySns|array|-|是|待锁定的键盘SN列表,空数组代表锁定所有键盘|
+
+- **示例代码**
+```Json
+{
+ "fun": "lockBsWhitelistKp",
+ "dataTag":"1",
+ "data":{
+ "keySns":["2024021001"]
+ }
+}
+```
+##### unlockBsWhitelistKp
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:解锁键盘SN
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+keySns|array|-|是|待解锁的键盘SN列表,空数组代表解锁所有键盘|
+
+- **示例代码**
+```Json
+{
+ "fun": "unlockBsWhitelistKp",
+ "dataTag":"1",
+ "data":{
+ "keySn":["2024021001"]
+ }
+}
+```
+#### 事件
+##### [sEvtStateCode](#sevtstatecode)
+发送指令后返回此事件
+
+##### fEvtBsWhitelist
+- **主题**:/basestation/\${baseSN}/receive
+- **功能描述**:返回基站白名单列表
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+keySns|array||是|基站当前的白名单列表|
+
+- **示例代码**
+```Json
+{
+ "fun":"fEvtBsWhitelist",
+ "dataTag":"1",
+ "data":{
+ "keySns":["2024021001","2024021002","2024021003","2024021004"]
+ }
+}
+```
+
+##### fEvtAddBsWhitelist
+- **主题**:/basestation/\${baseSN}/receive
+- **功能描述**:返回增加键盘状态
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|array|-|是|传送参数的对象数组|
+|++keySn|string||是|键盘SN|
+|++state|int||是|键盘的增加状态
0-增加成功
1-增加失败|
+
+- **示例代码**
+```Json
+{
+ "fun":"fEvtAddBsWhitelist",
+ "dataTag":"1",
+ "data":[{
+ "keySn":"2024021001",
+ "state":0
+ }]
+}
+```
+
+##### fEvtDelBsWhitelist
+- **主题**:/basestation/\${baseSN}/receive
+- **功能描述**:返回删除键盘状态
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|array|-|是|传送参数的对象数组|
+|++keySn|string||是|键盘SN|
+|++state|int||是|键盘的删除状态
0-删除成功
1-删除失败|
+
+- **示例代码**
+```Json
+{
+ "fun":"fEvtDelBsWhitelist",
+ "dataTag":"1",
+ "data":[{
+ "keySn":"2024021001",
+ "state":0
+ }]
+}
+```
+
+##### fEvtLockBsWhitelistKp
+- **主题**:/basestation/\${baseSN}/receive
+- **功能描述**:返回键盘锁定状态
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|array|-|是|传送参数的对象数组|
+|++keySn|string||是|解锁或锁定的键盘SN|
+|++state|int||是|键盘的锁定状态
0-未锁定
1-锁定|
+
+- **示例代码**
+```Json
+{
+ "fun":"fEvtLockBsWhitelistKp",
+ "dataTag":"1",
+ "data":[{
+ "keySn":"2024021001",
+ "state":1
+ }]
+}
+```
+### 基站加密
+#### 方法
+##### getBsSoftwareKey
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:获取基站软件狗密钥
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+
+- **示例代码**
+```Json
+{
+ "fun": "getBsSoftwareKey",
+ "dataTag":"1"
+}
+```
+##### setBsSoftwareKey
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:设置基站软件狗密钥
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+value|string|-|是|基站软件狗密钥,长度不超过32字节|
+
+- **示例代码**
+```Json
+{
+ "fun": "setBsSoftwareKey",
+ "dataTag":"1",
+ "data":{
+ "value":"sunvote123456"
+ }
+}
+```
+##### getBsAES
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:获取基站加密方式
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+
+- **示例代码**
+```Json
+{
+ "fun": "getBsAES",
+ "dataTag":"1"
+}
+```
+##### setBsAES
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:设置基站加密方式
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+value|string|-|是|无线加密方式
0:不加密
1:AES128加密
2:AES256加密 |
+
+- **示例代码**
+```Json
+{
+ "fun": "setBsAES",
+ "dataTag":"1",
+ "data":{
+ "value":"0"
+ }
+}
+```
+#### 事件
+##### fEvtBsSoftwareKey
+- **主题**:/basestation/\${baseSN}/receive
+- **功能描述**:返回基站的软件狗密钥
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+value|string||是|返回基站的软件狗密钥|
+
+- **示例代码**
+```Json
+{
+ "fun":"fEvtBsSoftwareKey",
+ "dataTag":"1",
+ "data":{
+ "value":"sunvote123456"
+ }
+}
+```
+##### fEvtBsAES
+- **主题**:/basestation/\${baseSN}/receive
+- **功能描述**:返回基站的无线加密模式
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+value|string||是|返回基站的无线加密模式
0:不加密
1:AES128加密
2:AES256加密|
+
+- **示例代码**
+```Json
+{
+ "fun":"fEvtBsAES",
+ "dataTag":"1",
+ "data":{
+ "value":"0"
+ }
+}
+```
+### 基站升级
+#### 方法
+##### startBsUpdate
+- **主题**:/manage/\${baseSN}/send
+- **功能描述**:基站固件升级
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+partition|int||是|存储区域
1-备份区 使用备份区固件的方法:打开基站盖子,按住SW1按钮,然后上电,这时基站固件就会更新成备份区的固件
2-更新区,实时升级基站固件|
+|+url|string||是|待升级的固件地址,可访问的网络url
直连基站为本地的文件路径|
+|+version|string||是|待升级的基站固件版本|
+|+crc|uint||是|固件CRC校验码,10进制数字|
+|+time|string||是|时间,yyyyMMddHHmmss|
+|+verCode|string||是|内部主题校验码,时间+固定key加密|
+
+- **示例代码**
+```Json
+{
+ "fun":"startBsUpdate",
+ "dataTag":"1",
+ "data":{
+ "partition":2,
+ "url":"http://192.168.10.10/V1.0.3.bin",
+ "version":"1.0.3",
+ "crc":1429319861
+ }
+}
+```
+##### downloadFontLib
+- **主题**:/manage/\${baseSN}/send
+- **功能描述**:下载更新基站字库文件
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+url|string||是|待下载的字库地址,可访问的网络url
直连基站为本地的文件路径|
+|+version|string||是|待升级的字库版本|
+|+crc|int||是|字库CRC校验码,10进制数字|
+|+time|string||是|时间,yyyyMMddHHmmss|
+|+verCode|string||是|内部主题校验码,时间+固定key加密|
+
+- **示例代码**
+```Json
+{
+ "fun":"downloadFontLib",
+ "dataTag":"1",
+ "data":{
+ "url":"http://192.168.10.10/V1.0.3.bin",
+ "version":"1.0.3",
+ "crc":1429319861
+ }
+}
+```
+
+#### 事件
+##### [sEvtStateCode](#sevtstatecode)
+返回升级指令的接收状态
+注意:升级指令的接收状态需从**主题: /manage/\${baseSN}/receive** 返回
+
+##### fEvtBsUpateState
+- **主题**: /manage/\${baseSN}/receive
+- **功能描述**:返回基站启动升级状态
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+state|int||是|启动升级状态
0 - 准备升级
1 - 升级成功
2 - 升级失败
+|+msg|string||否|返回的失败原因
+
+- **示例代码**
+```Json
+{
+ "fun":"fEvtBsUpateState",
+ "dataTag":"1",
+ "data":{
+ "state":2,
+ "msg":"error msg"
+ }
+}
+```
+
+##### fEvtBsUpdateProgress
+- **主题**: /manage/\${baseSN}/receive
+- **功能描述**:返回基站升级进度
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+progress|int||是|升级进度,百分比|
+
+- **示例代码**
+```Json
+{
+ "fun":"fEvtBsUpdateProgress",
+ "dataTag":"1",
+ "data":{
+ "progress":20
+ }
+}
+```
+##### fEvtBsFontLibState
+- **主题**: /manage/\${baseSN}/receive
+- **功能描述**:返回基站下载字库状态
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+state|int||是|启动升级状态
0 - 准备下载
1 - 下载完成
2 - 下载失败
+|+msg|string||否|返回的失败原因
+
+- **示例代码**
+```Json
+{
+ "fun":"fEvtBsFontLibState",
+ "dataTag":"1",
+ "data":{
+ "state":2,
+ "msg":"error msg"
+ }
+}
+```
+
+##### fEvtBsFontLibProgress
+- **主题**: /manage/\${baseSN}/receive
+- **功能描述**:返回基站下载字库进度
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+progress|int||是|下载进度,百分比|
+
+- **示例代码**
+```Json
+{
+ "fun":"fEvtBsFontLibProgress",
+ "dataTag":"1",
+ "data":{
+ "progress":20
+ }
+}
+```
+
+## 键盘管理
+### 识别设置
+#### 方法
+##### setKpSN
+- **主题**:/manage/\${baseSN}/send
+- **功能描述**:设置指定键盘的出厂编码
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+oldKeySn|string||是|键盘原SN|
+|+newKeySn|string||是|待设置的新SN|
+|+time|string|数字|是|时间,yyyyMMddHHmmss|
+|+verCode|string||是|内部主题校验码,时间+固定key加密|
+
+- **示例代码**
+```Json
+{
+ "fun":"setKpIdentityMode",
+ "dataTag":"1",
+ "data":{
+ "oldKeySn":"1234567890",
+ "newKeySn":"2024021011"
+ }
+}
+```
+##### getKpID
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:获取键盘编号
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+keySn|string||是|需读取编号的键盘SN|
+
+- **示例代码**
+```Json
+{
+ "fun":"getKpID",
+ "dataTag":"1",
+ "data":{
+ "keySn":"2024021011"
+ }
+}
+```
+##### setKpID
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:设置键盘编号
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+keySn|string||是|需设置编号的键盘SN|
+|+keyId|int||是|键盘编号,不超过65535|
+- **示例代码**
+```Json
+{
+ "fun":"setKpID",
+ "dataTag":"1",
+ "data":{
+ "keySn":"2024021011",
+ "keyId":1
+ }
+}
+```
+##### getKpModel
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:获取键盘型号
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+keySn|string||是|需读取型号的键盘SN|
+
+- **示例代码**
+```Json
+{
+ "fun":"getKpModel",
+ "dataTag":"1",
+ "data":{
+ "keySn":"2024021011"
+ }
+}
+```
+
+##### getKpFWVersion
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:获取键盘型号
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+keySn|string||是|需读取版本的键盘SN|
+
+- **示例代码**
+```Json
+{
+ "fun":"getKpFWVersion",
+ "dataTag":"1",
+ "data":{
+ "keySn":"2024021011"
+ }
+}
+```
+
+##### getKpIdentityMode
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:获取键盘识别模式
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+
+- **示例代码**
+```Json
+{
+ "fun":"getKpIdentityMode",
+ "dataTag":"1"
+}
+```
+##### setKpIdentityMode
+- **主题**:/manage/\${baseSN}/send
+- **功能描述**:设置键盘识别模式
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+value|string||是|设置键盘识别模式
0 - SN模式
1 - ID+SN模式|
+|+time|string|数字|是|时间,yyyyMMddHHmmss|
+|+verCode|string||是|内部主题校验码,时间+固定key加密|
+
+- **示例代码**
+```Json
+{
+ "fun":"setKpIdentityMode",
+ "dataTag":"1",
+ "data":{
+ "value":"0"
+ }
+}
+```
+#### 事件
+##### fEvtKpIdentityMode
+- **主题**:/basestation/\${baseSN}/receive
+- **功能描述**:返回键盘识别模式
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+value|string||是|设置键盘识别模式
0 - SN模式
1 - ID+SN模式|
+
+- **示例代码**
+```Json
+{
+ "fun":"fEvtKpIdentityMode",
+ "dataTag":"1",
+ "data":{
+ "value":"0"
+ }
+}
+```
+##### fEvtKpSN
+- **主题**:/manage/\${baseSN}/receive
+- **功能描述**:返回写键盘SN状态
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+keySn|string||是|设置键盘SN的原SN|
+|+state|string||是|设置是否成功
0-设置成功
1-设置失败|
+
+- **示例代码**
+```Json
+{
+ "fun":"fEvtKpSN",
+ "dataTag":"1",
+ "data":{
+ "keySn":"1234567890",
+ "state":"0"
+ }
+}
+```
+##### fEvtKpID
+- **主题**:/basestation/\${baseSN}/receive
+- **功能描述**:返回键盘编号
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+keySn|string||是|设置键盘SN的原SN|
+|+keyId|int||是|键盘编号|
+
+- **示例代码**
+```Json
+{
+ "fun":"fEvtKpID",
+ "dataTag":"1",
+ "data":{
+ "keySn":"2024021011",
+ "keyId":11
+ }
+}
+```
+##### fEvtKpModel
+- **主题**:/basestation/\${baseSN}/receive
+- **功能描述**:返回键盘型号
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+keySn|string||是|设置键盘SN的原SN|
+|+model|int||是|键盘型号代码|
+
+- **示例代码**
+```Json
+{
+ "fun":"fEvtKpModel",
+ "dataTag":"1",
+ "data":{
+ "keySn":"2024021011",
+ "model":67
+ }
+}
+```
+
+##### fEvtKpFWVersion
+- **主题**:/basestation/\${baseSN}/receive
+- **功能描述**:返回键盘型号
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+keySn|string||是|设置键盘SN的原SN|
+|+version|string||是|键盘固件版本|
+
+- **示例代码**
+```Json
+{
+ "fun":"fEvtKpFWVersion",
+ "dataTag":"1",
+ "data":{
+ "keySn":"2024021011",
+ "version":"1.0.0"
+ }
+}
+```
+
+### 交互设置
+#### 方法
+##### setKpUserStbMsg
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:设置用户内置状态语
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+online|string||是|在线状态显示的待机语
空字符串清除|
+|+offline|string||是|离线状态显示的待机语
空字符串清除|
+|+submitting|string||是|提交中状态语
空字符串清除|
+|+submitted|string||是|已提交状态语
空字符串清除|
+
+- **示例代码**
+```Json
+{
+ "fun":"setKpUserStbMsg",
+ "dataTag":"1",
+ "data":{
+ "online":"请认真听讲",
+ "offline":"离线",
+ "submitting":"提交中",
+ "submitted":"提交成功"
+ }
+}
+```
+##### rtSetKpUserPrompt
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:实时设置提示反馈信息
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|array|-|否|传送参数的对象数组|
+|++keySns|array||是|指定的键盘SN数组,空数组表示全部在线键盘
注意:不允许空数组和指定SN数组混合使用
包含空数组默认为全部在线键盘,其他指定键盘无效|
+|++info|string||否|设置的反馈信息
不同键盘可设置不同反馈信息|
+
+- **示例代码**
+```Json
+//分别提示
+{
+ "fun": "rtSetKpUserPrompt",
+ "dataTag":"1",
+ "data": [
+ {
+ "keySns": ["1479824643","1479824645"],
+ "info": "答对了"
+ },
+ {
+ "keySns": ["1479824644"],
+ "info": "答错了"
+ }
+ ]
+}
+//统一提示
+{
+ "fun": "rtSetKpUserPrompt",
+ "dataTag":"1",
+ "data": [
+ {
+ "keySns": [],
+ "info": "答题结束"
+ }
+ ]
+}
+```
+
+##### rtSetKpUserLedEffects
+##### rtSetKpUserVibEffects
+##### rtSetKpUserBeepEffects
+
+#### 事件
+##### [sEvtStateCode](#sevtstatecode)
+发送指令后返回接收状态
+
+##### fEvtKpUserStbMsg
+- **主题**:/basestation/\${baseSN}/receive
+- **功能描述**:返回设置状态语的状态
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|否|传送参数的对象|
+|+state|string||是|设置状态语是否成功
0 - 成功
1 - 失败|
+
+- **示例代码**
+```Json
+{
+ "fun":"fEvtKpUserStbMsg",
+ "dataTag":"1",
+ "data":{
+ "state":"0"
+ }
+}
+```
+##### fEvtSetKpUserPrompt
+- **主题**:/basestation/\${baseSN}/receive
+- **功能描述**:返回实时设置提示语是否成功
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|array|-|是|传送参数的对象数组|
+|++keySn|string||是|设置提示语信息的键盘SN|
+|++state|string||是|设置的提示语是否成功
0 - 成功
1 - 失败|
+
+- **示例代码**
+```Json
+{
+ "fun": "fEvtSetKpUserPrompt",
+ "dataTag":"1",
+ "data": [
+ {
+ "keySn": "1479824643",
+ "state": "0"
+ },
+ {
+ "keySn": "1479824645",
+ "state": "0"
+ },
+ {
+ "keySn": "1479824644",
+ "state": "1"
+ }
+ ]
+}
+```
+### 在线状态
+#### 方法
+##### startGetKpOnline
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:开始获取键盘在线信息,键盘在线返回键盘信息
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+
+- **示例代码**
+```Json
+{
+ "fun": "startGetKpOnline",
+ "dataTag":"1"
+}
+```
+
+##### stopGetKpOnline
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:停止获取键盘在线信息
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+
+- **示例代码**
+```Json
+{
+ "fun": "stopGetKpOnline",
+ "dataTag":"1"
+}
+```
+#### 事件
+##### [sEvtStateCode](#sevtstatecode)
+发送指令后返回此事件
+
+##### fEvtKpOnlineMsg
+- **主题**: /basestation/\${baseSN}/receive
+- **功能描述**:主动获取在线键盘时,在线键盘状态报告
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|事件名称|
+|dataTag|string|-|否|数据包标识|
+|data|object|-|是|传送参数的对象|
+|+keySn|string||是|键盘SN|
+|+version|string||是|键盘固件版本|
+|+model|int||是|键盘型号|
+|+voltage|double||是|键盘电量(待键盘修改成百分比)|
+|+isWeak|int||是|是否弱电, 0-正常,1-弱电(待键盘修改上报弱电状态)|
+
+- **示例代码**
+```Json
+{
+ "fun":"fEvtKpOnlineMsg",
+ "dataTag":"1",
+ "data":{
+ "keySn":"1234567890",
+ "version":"1.0.0",
+ "model":67,
+ "voltage":2.8,
+ "isWeak":0
+ }
+}
+```
+
+### 维护功能
+#### 方法
+##### remoteKpPowerOff
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:遥控键盘关机
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象数组|
+|+keySns|array||否|需要执行指令的键盘SN数组,
空数组表示所有键盘|
+
+- **示例代码**
+```Json
+{
+ "fun":"remoteKpPowerOff",
+ "dataTag":"1",
+ "data":{
+ "keySns":["1479824644"]
+ }
+}
+```
+##### remoteKpSleep
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:遥控键盘休眠
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象数组|
+|+keySns|array||否|需要执行指令的键盘SN数组,空数组表示所有键盘|
+
+- **示例代码**
+```Json
+{
+ "fun":"remoteKpSleep",
+ "dataTag":"1",
+ "data":{
+ "keySns":["1479824644"]
+ }
+}
+```
+##### startKpFWUpdate
+- **主题**:/manage/\${baseSN}/send
+- **功能描述**:键盘升级
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+partition|int||是|存储区域
1-备份区
2-更新区|
+|+url|string||是|待升级的固件地址,可访问的网络url
直连基站可为本地的文件路径|
+|+version|string||是|待升级的固件版本号|
+|+crc|uint||是|固件CRC校验码,10进制数字|
+|+time|string|数字|是|时间,yyyyMMddHHmmss|
+|+verCode|string||是|内部主题校验码,时间+固定key加密|
+
+- **示例代码**
+```Json
+{
+ "fun":"startKpFWUpdate",
+ "dataTag":"1",
+ "data":{
+ "partition":1,
+ "url":"http://192.168.10.10/V1.0.3.bin",
+ "version":"1.0.3",
+ "crc":1429319861
+ }
+}
+```
+##### stopKpFWUpdate
+- **主题**:/manage/\${baseSN}/send
+- **功能描述**:停止键盘升级
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+time|string|数字|是|时间,yyyyMMddHHmmss|
+|+verCode|string||是|内部主题校验码,时间+固定key加密|
+
+- **示例代码**
+```Json
+{
+ "fun":"stopKpFWUpdate",
+ "dataTag":"1",
+ "data":{
+ "time":"",
+ "verCode":""
+ }
+}
+```
+
+#### 事件
+##### [sEvtStateCode](#sevtstatecode)
+返回升级指令的接收状态
+注意:升级指令的接收状态需从**主题: /manage/\${baseSN}/receive** 返回
+
+##### fEvtKpFWUpdateState
+- **主题**: /manage/\${baseSN}/receive
+- **功能描述**:返回键盘升级状态
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+state|int||是|升级状态
0 - 进入升级
1 - 升级成功
2 - 升级失败
3 - 已停止(接收到停止指令)
+|+msg|string||否|返回的失败原因
+
+- **示例代码**
+```Json
+{
+ "fun":"fEvtKpFWUpdateState",
+ "dataTag":"1",
+ "data":{
+ "state":0,
+ "msg":""
+ }
+}
+```
+##### fEvtKpUpdateProgress
+- **主题**: /manage/\${baseSN}/receive
+- **功能描述**:返回键盘升级进度
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+progress|int||是|升级进度,百分比|
+
+- **示例代码**
+```Json
+{
+ "fun":"fEvtKpUpdateProgress",
+ "dataTag":"1",
+ "data":{
+ "progress":20
+ }
+}
+```
+## 绑定
+### 无线绑定
+#### 方法
+##### rtSetKpBindingInfo
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:实时设置绑定信息到键盘
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|array|-|是|传送参数的对象数组,不可为空|
+|++keySn|string||是|需要设置绑定信息的键盘SN|
+|++info|string||是|设置的绑定信息,一般为学生姓名
最长48个字符,显示在键盘左上角|
+
+- **示例代码**
+```Json
+{
+ "fun": "rtSetKpBindingInfo",
+ "dataTag":"1",
+ "data": [
+ {
+ "keySn": "1479824643",
+ "info": "张三"
+ },
+ {
+ "keySn": "1479824644",
+ "info": "李四"
+ }
+ ]
+}
+```
+
+##### clearKpBindingInfo
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:清除键盘绑定信息
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象数组|
+|+keySns|array||否|需要清除绑定信息键盘SN数组,
空数组表示清空所有键盘|
+
+- **示例代码**
+```Json
+{
+ "fun": "clearKpBindingInfo",
+ "dataTag":"1",
+ "data": {
+ "keySns":["1479824643","1479824644","1479824645"]
+ }
+}
+```
+#### 事件
+##### [sEvtStateCode](#sevtstatecode)
+发送指令后返回接收状态
+
+##### fEvtKpBindingInfo
+- **主题**:/basestation/\${baseSN}/receive
+- **功能描述**:返回键盘实时设置绑定信息的状态是否成功
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|array|-|否|传送参数的对象数组|
+|++keySn|string||是|需要设置绑定信息的键盘SN|
+|++state|string||是|设置的绑定信息是否成功
0 - 成功
1 - 失败|
+
+- **示例代码**
+```Json
+{
+ "fun": "fEvtKpBindingInfo",
+ "dataTag":"1",
+ "data": [
+ {
+ "keySn": "1479824643",
+ "state": "0"
+ },
+ {
+ "keySn": "1479824644",
+ "state": "1"
+ }
+ ]
+}
+```
+##### fEvtClearKpBindingInfo
+- **主题**:/basestation/\${baseSN}/receive
+- **功能描述**:返回清空绑定信息的指令状态是否成功
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|否|传送参数的对象|
+|+state|string||是|设置的绑定信息是否成功
0 - 成功
1 - 失败|
+
+- **示例代码**
+```Json
+{
+ "fun": "fEvtClearKpBindingInfo",
+ "dataTag":"1",
+ "data": {
+ "state": "0"
+ }
+}
+```
+## 签到
+### 同步签到
+#### 方法
+##### startKpSignIn
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:启动同步签到
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传递参数的对象|
+|+mode|int|-|是|签到模式
1-按键签到
2-PIN码签到
3-指纹签到|
+
+- **示例代码**
+```Json
+{
+ "fun": "startKpSignIn",
+ "dataTag":"1",
+ "data":{
+ "mode":2
+ }
+}
+```
+##### stopKpSignIn
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:停止同步签到
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+
+- **示例代码**
+```Json
+{
+ "fun": "stopKpSignIn",
+ "dataTag":"1"
+}
+```
+#### 事件
+##### [sEvtStateCode](#sevtstatecode)
+发送指令后返回接收状态
+
+##### [fEvtKpSignIn](#fevtkpsignin)
+返回键盘提交的签到数据
+
+### 随时签到
+#### 方法
+##### rtStartKpSignIn
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:启动随时签到绑定
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传递参数的对象|
+|+mode|int|-|是|签到模式
1-按键签到,按OK键签到自动授权(暂不支持)
2-PIN码签到,输入pin码后由应用程序决定是否授权
3-指纹签到(暂不支持)|
+
+- **示例代码**
+```Json
+{
+ "fun": "rtStartKpSignIn",
+ "dataTag":"1",
+ "data":{
+ "mode":2
+ }
+}
+```
+##### rtStopKpSignIn
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:停止签到绑定
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+
+- **示例代码**
+```Json
+{
+ "fun": "rtStopKpSignIn",
+ "dataTag":"1"
+}
+```
+##### rtSetKpLoginAllowed
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:实时PIN绑定授权,可取消授权
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传递参数的对象|
+|+keySn|string|-|是|键盘SN|
+|+state|int|-|是|1-授权成功
2-授权失败
3-解除已授权|
+
+- **示例代码**
+```Json
+{
+ "fun": "rtSetKpLoginAllowed",
+ "dataTag":"1",
+ "data":{
+ "keySn":"1479824643",
+ "state":1
+ }
+}
+```
+#### 事件
+##### [sEvtStateCode](#sevtstatecode)
+发送指令后返回接收状态
+
+##### fEvtKpSignIn
+- **主题**:/basestation/\${baseSN}/receive
+- **功能描述**:返回键盘提交签到信息
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|array|-|是|传送参数的对象数组|
+|++keySn|string||是|键盘SN|
+|++keyValue|string||是|键盘提交的按键值|
+|++keyTime|double||是|答题时间,从启动开始计算,单位秒|
+
+- **示例代码**
+```Json
+{
+ "fun": "fEvtKpSignIn",
+ "dataTag":"1",
+ "data": [{
+ "keySn": "1234567890",
+ "keyValue":"1004",
+ "keyTime":30.2
+ },
+ {
+ "keySn": "1234567891",
+ "keyValue":"1003",
+ "keyTime":32.5
+ }
+ ]
+}
+```
+##### fEvtKpLoginAllowed
+- **主题**:/basestation/\${baseSN}/receive
+- **功能描述**:返回键盘授权状态
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+keySn|string||是|键盘SN|
+|+state|string||是|0-执行成功
1-执行失败|
+
+- **示例代码**
+```Json
+{
+ "fun": "fEvtKpLoginAllowed",
+ "dataTag":"1",
+ "data": {
+ "keySn":"1479824643",
+ "state":"0"
+ }
+}
+```
+## 按键反馈
+### 判断题
+#### 方法
+##### startQATrueFalse
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:启动判断题答题
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+keySns|array||是|指定的键盘SN数组,空数组表示全部在线键盘|
+|+count|int||是|题目数量,1-16,>1多题快答|
+|+mode|int||是|1 - True/False 对/错
2 - Yes/No 是/否
3 - √/×|
+|+allowModify|int||是|0 - 不允许修改
1 - 允许修改|
+|+tip|string||否|提示的标题,长度不超过16字符|
+|+simParams|object||否|内部模拟测试参数设置对象|
+|++answer|string||是|预设提交的按键值
1-对
2-错|
+
+- **示例代码**
+```Json
+{
+ "fun": "startQATrueFalse",
+ "dataTag":"1",
+ "data":{
+ "keySns":[],
+ "count":1,
+ "mode":1,
+ "allowModify":1,
+ "tip":"请判断对错",
+ "simParams":{
+ "answer":"1"
+ }
+ }
+}
+```
+##### stopQATrueFalse
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:停止判断题答题
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+
+- **示例代码**
+```Json
+{
+ "fun": "stopQATrueFalse",
+ "dataTag":"1"
+}
+```
+#### 事件
+##### [sEvtStateCode](#sevtstatecode)
+发送指令后返回接收状态
+
+##### fEvtQATrueFalse
+- **主题**:/basestation/\${baseSN}/receive
+- **功能描述**:返回键盘提交答题信息
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|array|-|是|传送参数的对象数组|
+|++keySn|string||是|键盘SN|
+|++keyValue|string||是|键盘提交的按键值
1-对
2-错|
+|++keyTime|double||是|答题时间,从启动开始计算,单位秒|
+
+- **示例代码**
+```Json
+{
+ "fun": "fEvtQATrueFalse",
+ "dataTag":"1",
+ "data": [{
+ "keySn": "1234567890",
+ "keyValue":"1",
+ "keyTime":30.2
+ }
+ ]
+}
+```
+### 选择题
+#### 方法
+##### startQAChoice
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:启动选择题答题
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+keySns|array||是|指定的键盘SN数组,空数组表示全部在线键盘|
+|+count|int||是|题目数量,1-16,>1多题快答
optionalN >1时无效|
+|+mode|int||是|显示模式
1:显示字母(默认值) 2:显示数字 |
+|+lessMode|int||是|迫选模式
0:可缺选(默认值) 1:不可缺选2:允许重复输入3:允许重复输入且不可缺选 |
+|+options|int||是|选项数量,1≤M≤10(默认值4)|
+|+optionalN|int||是|可选项个数,1≤N≤M(默认值1)|
+|+allowModify|int||是|修改模式
0 - 不允许修改
1 - 允许修改|
+|+tip|string||否|提示的标题,长度不超过16字符|
+|+simParams|object||否|内部模拟测试参数设置对象|
+|++answer|string||是|预设提交的按键值|
+
+- **示例代码**
+```Json
+{
+ "fun": "startQAChoice",
+ "dataTag":"1",
+ "data":{
+ "keySns":[],
+ "mode": 1,
+ "count":1,
+ "lessMode": 0,
+ "options": 4,
+ "optionalN": 1,
+ "allowModify":1,
+ "tip":"请选择",
+ "simParams":{
+ "answer":"A"
+ }
+ }
+}
+```
+##### stopQAChoice
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:停止选择题答题
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+
+- **示例代码**
+```Json
+{
+ "fun": "stopQAChoice",
+ "dataTag":"1"
+}
+```
+#### 事件
+##### [sEvtStateCode](#sevtstatecode)
+发送指令后返回接收状态
+
+##### fEvtQAChoice
+- **主题**:/basestation/\${baseSN}/receive
+- **功能描述**:返回键盘提交答题信息
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|array|-|是|传送参数的对象数组|
+|++keySn|string||是|键盘SN|
+|++keyValue|string||是|键盘提交的按键值|
+|++keyTime|double||是|答题时间,从启动开始计算,单位秒|
+
+- **示例代码**
+```Json
+{
+ "fun": "fEvtQAChoice",
+ "dataTag":"1",
+ "data": [{
+ "keySn": "1234567890",
+ "keyValue":"A",
+ "keyTime":3.2
+ }]
+}
+```
+### 数字题
+#### 方法
+##### startQANum
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:启动数字题答题
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+keySns|array||是|指定的键盘SN数组,空数组表示全部在线键盘|
+|+mode|int||是|模式
0:无规则 (S6最多16位,T2最多14位)
1:带小数位上下限(T2不支持)|
+|+digits|int||是|小数位数,范围0-2,mode=1时有效
+|+numMin|int||是|可输入下限,mode=1有效
digits=0时 范围:0~65535
digits=1时 范围:0~6553
digits=2时 范围:0~655|
+|+numMax|int||是|可输入上限,mode=1有效
digits=0 范围:0~65535
digits=1 范围:0~6553
digits=2 范围:0~655|
+|+allowModify|int||是|修改模式
0 - 不允许修改
1 - 允许修改|
+|+tip|string||否|提示的标题,长度不超过16字符|
+|+simParams|object||否|内部模拟测试参数设置对象|
+|++answer|string||是|预设提交的按键值|
+
+- **示例代码**
+```Json
+{
+ "fun": "startQANum",
+ "dataTag":"1",
+ "data":{
+ "keySns":[],
+ "mode": 1,
+ "digits": 1,
+ "numMin": 0,
+ "numMax": 100,
+ "allowModify":1,
+ "tip":"请输入数字",
+ "simParams":{
+ "answer":"10"
+ }
+ }
+}
+```
+##### stopQANum
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:停止数字题答题
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+
+- **示例代码**
+```Json
+{
+ "fun": "stopQANum",
+ "dataTag":"1"
+}
+```
+#### 事件
+##### [sEvtStateCode](#sevtstatecode)
+发送指令后返回接收状态
+
+##### fEvtQANum
+- **主题**:/basestation/\${baseSN}/receive
+- **功能描述**:返回键盘提交答题信息
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|array|-|是|传送参数的对象数组|
+|++keySn|string||是|键盘SN|
+|++keyValue|string||是|键盘提交的按键值|
+|++keyTime|double||是|答题时间,从启动开始计算,单位秒|
+
+- **示例代码**
+```Json
+{
+ "fun": "fEvtQANum",
+ "dataTag":"1",
+ "data": [{
+ "keySn": "1234567890",
+ "keyValue":"10",
+ "keyTime":3.2
+ }]
+}
+```
+### 抢答题
+#### 方法
+##### startQAQuicker
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:启动抢答题答题
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+keySns|array||是|指定的键盘SN数组,空数组表示全部在线键盘|
+|+mode|int||是|模式
0:普通抢答|
+|+allowModify|int||是|修改模式
0 - 不允许修改
1 - 允许修改|
+|+tip|string||否|提示的标题,长度不超过16字符|
+|+simParams|object||否|内部模拟测试参数设置对象|
+|++answer|string||是|预设提交的按键值|
+
+- **示例代码**
+```Json
+{
+ "fun": "startQAQuicker",
+ "dataTag":"1",
+ "data":{
+ "keySns":[],
+ "mode": 0,
+ "allowModify":1,
+ "tip":"请按键抢答",
+ "simParams":{
+ "answer":"1"
+ }
+ }
+}
+```
+##### stopQAQuicker
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:停止抢答答题
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+
+- **示例代码**
+```Json
+{
+ "fun": "stopQAQuicker",
+ "dataTag":"1"
+}
+```
+#### 事件
+##### [sEvtStateCode](#sevtstatecode)
+发送指令后返回接收状态
+
+##### fEvtQAQuicker
+- **主题**:/basestation/\${baseSN}/receive
+- **功能描述**:返回键盘提交答题信息
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|array|-|是|传送参数的对象数组|
+|++keySn|string||是|键盘SN|
+|++keyValue|string||是|键盘提交的按键值|
+|++keyTime|double||是|答题时间,从启动开始计算,单位秒|
+
+- **示例代码**
+```Json
+{
+ "fun": "fEvtQAQuicker",
+ "dataTag":"1",
+ "data": [{
+ "keySn": "1234567890",
+ "keyValue":"1",
+ "keyTime":3.2
+ }]
+}
+```
+### 英文题
+#### 方法
+##### startQAEText
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:启动英文题答题
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+keySns|array||是|指定的键盘SN数组,空数组表示全部在线键盘|
+|+mode|int||是|模式
0:自由输入|
+|+allowModify|int||是|修改模式
0 - 不允许修改
1 - 允许修改|
+|+tip|string||否|提示的标题,长度不超过16字符|
+|+simParams|object||否|内部模拟测试参数设置对象|
+|++answer|string||是|预设提交的按键值|
+
+- **示例代码**
+```Json
+{
+ "fun": "startQAEText",
+ "dataTag":"1",
+ "data":{
+ "keySns":[],
+ "mode": 0,
+ "allowModify":1,
+ "tip":"请输入英文文本",
+ "simParams":{
+ "answer":"AAAAAAA"
+ }
+ }
+}
+```
+##### stopQAEText
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:停止英文题答题
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+
+- **示例代码**
+```Json
+{
+ "fun": "stopQAEText",
+ "dataTag":"1"
+}
+```
+#### 事件
+##### [sEvtStateCode](#sevtstatecode)
+发送指令后返回接收状态
+
+##### fEvtQAEText
+- **主题**:/basestation/\${baseSN}/receive
+- **功能描述**:返回键盘提交答题信息
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|array|-|是|传送参数的对象数组|
+|++keySn|string||是|键盘SN|
+|++keyValue|string||是|键盘提交的按键值|
+|++keyTime|double||是|答题时间,从启动开始计算,单位秒|
+
+- **示例代码**
+```Json
+{
+ "fun": "fEvtQAEText",
+ "dataTag":"1",
+ "data": [{
+ "keySn": "1234567890",
+ "keyValue":"hello",
+ "keyTime":3.2
+ }]
+}
+```
+
+### 短信息
+#### 方法
+##### sendKpMsg
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:指定键盘发送短信息
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|array|-|是|传送参数的对象数组,不可为空|
+|++keySn|string||是|需要设置绑定信息的键盘SN
空字符串且只有一条信息时代表群发所有在线键盘|
+|++month|int||是|月份,范围1-12|
+|++day|int||是|日期,范围1-31|
+|++info|string||是|信息内容|
+
+- **示例代码**
+```Json
+//指定键盘发送信息
+{
+ "fun": "sendKpMsg",
+ "dataTag":"1",
+ "data": [
+ {
+ "keySn": "1479824643",
+ "month":6,
+ "day":10,
+ "info": "短信息1"
+ },
+ {
+ "keySn": "1479824644",
+ "month":6,
+ "day":10,
+ "info": "短信息2"
+ }
+ ]
+}
+
+//广播信息
+{
+ "fun": "sendKpMsg",
+ "dataTag":"1",
+ "data": [
+ {
+ "keySn": "",
+ "month":6,
+ "day":10,
+ "info": "广播信息"
+ }
+ ]
+}
+```
+##### rtSendKpNotice
+(待定)
+
+#### 事件
+##### [sEvtStateCode](#sevtstatecode)
+发送指令后返回接收状态
+
+##### fEvtKpMsg
+- **主题**:/basestation/\${baseSN}/receive
+- **功能描述**:返回短信息是否成功发送至键盘
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|array|-|否|传送参数的对象数组|
+|++keySn|string||是|键盘SN|
+|++state|string||是|短信息是否成功发送
0 - 成功
1 - 失败|
+
+- **示例代码**
+```Json
+{
+ "fun": "fEvtKpMsg",
+ "dataTag":"1",
+ "data": [
+ {
+ "keySn": "1479824643",
+ "state": "0"
+ },
+ {
+ "keySn": "1479824644",
+ "state": "1"
+ }
+ ]
+}
+```
+
+### 待机实时反馈
+#### 方法
+##### startKpStbResponse
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:启动待机实时反馈
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+mode|int||是|启动待机反馈类型
0-举手
1-指定按键反馈|
+|+keys|int||是|有效按键数量,mode=1时有效, 范围1-10|
+
+- **示例代码**
+```Json
+//启用举手反馈
+{
+ "fun": "startKpStbResponse",
+ "dataTag":"1",
+ "data":{
+ "mode":0
+ }
+}
+//待机按键反馈
+{
+ "fun": "startKpStbResponse",
+ "dataTag":"1",
+ "data":{
+ "mode":1,
+ "keys":4
+ }
+}
+```
+
+##### stopKpStbResponse
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:停止待机实时反馈
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+
+- **示例代码**
+```Json
+{
+ "fun": "stopKpStbResponse",
+ "dataTag":"1"
+}
+```
+
+#### 事件
+##### [sEvtStateCode](#sevtstatecode)
+发送指令后返回接收状态
+
+##### [sEvtKpRtFeedback](#sevtkprtfeedback)
+返回待机时键盘返回的按键值
+
+##### [sEvtKpHandup](#sevtkphandup)
+启动待机按键反馈类型为举手提问时返回此事件
+
+## 语音反馈
+### 方法
+#### 单题语音评测
+##### startQAVoice
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:启动单题语音评测
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+keySns|array||是|指定的键盘SN数组,空数组表示全部在线键盘|
+|+mode|int||是|录音模式
0-按键录音(默认值)
1-自动录音
2-语音红包
3-数据信道传输测试|
+|+submitTimes|int||是|允许提交次数,0-255, 0 - 不限次数|
+|+timeLimit|int||否|限制的录音时长,0-255, 0-不限时长|
+|+format|int||否|录音格式
0-录音文件(SDK直连基站支持)
1-实时流|
+|+audioFormat|int||否|音频格式
0-pcm
1-mp3(默认值1)
2-wav
3-speex|
+|+tip|string||否|提示的标题,长度不超过16字符|
+
+- **示例代码**
+```Json
+{
+ "fun": "startQAVoice",
+ "dataTag":"1",
+ "data": {
+ "keySns": [],
+ "mode":0,
+ "submitTimes":0,
+ "timeLimit":30,
+ "format":0,
+ "audioFormat":1,
+ "tip":"请按键录音"
+ }
+}
+```
+##### stopQAVoice
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:停止单题语音评测
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+
+- **示例代码**
+```Json
+{
+ "fun": "stopQAVoice",
+ "dataTag":"1"
+}
+```
+
+#### 选定键盘发言
+##### startKpDSpeaker
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:选定键盘发言,返回实时流语音
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+keySn|string||是|指定的键盘SN|
+|+mode|int||是|录音模式
0-按键录音(默认值)
1-自动录音
|
+|+timeLimit|int||否|限制的录音时长,0-255, 0-不限时长|
+|+audioFormat|int||否|音频格式
0-pcm
1-mp3(默认值1)
2-wav
3-speex|
+|+tip|string||否|提示的标题,长度不超过16字符|
+
+- **示例代码**
+```Json
+{
+ "fun": "startKpDSpeaker",
+ "dataTag":"1",
+ "data": {
+ "keySn": "1234567890",
+ "mode":0,
+ "timeLimit":30,
+ "audioFormat":1,
+ "tip":"请按键发言"
+ }
+}
+```
+##### stopKpDSpeaker
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:停止键盘发言
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+
+- **示例代码**
+```Json
+{
+ "fun": "stopKpDSpeaker",
+ "dataTag":"1"
+}
+```
+
+#### 语音实时反馈
+##### startVoiceStbResponse
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:启动待机实时反馈
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+mode|int||是|启动待机反馈类型
0-语音待机反馈|
+|+timeLimit|int||否|限制的录音时长,0-255秒, 0-不限时长|
+
+- **示例代码**
+```Json
+{
+ "fun": "startVoiceStbResponse",
+ "dataTag":"1",
+ "data":{
+ "mode":,
+ "timeLimit":30
+ }
+}
+```
+
+##### stopVoiceStbResponse
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:停止待机实时反馈
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+
+- **示例代码**
+```Json
+{
+ "fun": "stopVoiceStbResponse",
+ "dataTag":"1"
+}
+```
+
+### 事件
+#### [sEvtStateCode](#sevtstatecode)
+发送指令后返回接收状态
+
+#### fEvtVoiceFile
+- **主题**:/basestation/\${baseSN}/receive
+- **功能描述**:开启录音格式为录音文件方式时返回此事件
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|array|-|是|传送参数的对象数组|
+|++keySn|string||是|键盘SN|
+|++filePath|string||是|键盘提交语音文件的路径|
+|++keyTime|double||是|答题时间,从启动开始计算,单位秒|
+
+- **示例代码**
+```Json
+{
+ "fun": "fEvtVoiceFile",
+ "dataTag":"1",
+ "data": [{
+ "keySn": "1479824643",
+ "filePath":"D:\\SunARSSDK\\voice\\20240502\\voice_1479824643_1635832534000.mp3",
+ "keyTime":3.2
+ }]
+}
+```
+#### fEvtVoiceStream
+- **主题**:/basestation/\${baseSN}/receive
+- **功能描述**:开启录音格式为实时流方式时返回此事件
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+keySn|string||是|键盘SN|
+|+voiceId|int||是|语音id,答题时间内,可重复提交语音,每段语音流加一个id,用于区分作答|
+|+sampleRate|int||是|音频采样率|
+|+bits|int||是|音频采样精度|
+|+channel|int||是|声道数|
+|+voiceData|string||是|音频数据,将原始数据通过Base64编码后得出
应用可通过Base64解码得到原始语音数据|
+|+dataLen|int||是|Base64编码后的数据字符串长度|
+|+endFlag|int||是|语音流结束标识
0-未结束
1-结束包|
+
+- **示例代码**
+```Json
+{
+ "fun": "fEvtQAQuicker",
+ "dataTag":"1",
+ "data": {
+ "keySn":"1479824643",
+ "voiceId":"1",
+ "sampleRate":16000,
+ "bits":16,
+ "channel":1,
+ "endFlag":0,
+ "dataLen":856,
+ "voiceData":"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=="
+ }
+}
+```
+#### fEvtVoicePacketLossInfo
+- **主题**:/basestation/\${baseSN}/receive
+- **功能描述**:开启录音格式为实时流方式,录音结束时返回此次录音的丢包率信息
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+keySn|string||是|键盘SN|
+|+voiceId|string||是|语音id|
+|+receive|double||是|收到语言流包数|
+|+shouldSend|string||是|应发数据包数|
+|+actualSend|string||是|实发数据包数|
+|+lossRate|double||是|丢包率,百分比|
+|+delay|double||是|延时,单位毫秒|
+
+- **示例代码**
+```Json
+{
+ "fun": "fEvtQAQuicker",
+ "dataTag":"1",
+ "data": {
+ "keySn":"1837454011",
+ "voiceId":"1",
+ "receive":"42",
+ "shouldSend":"56",
+ "actualSend":"56",
+ "lossRate":"0",
+ "delay":"20"
+ }
+}
+```
+
+## 在线测验
+### 标准测验
+#### 方法
+##### startKpExam
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:启动标准测验
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+examNo|int||是|0-9999
=0,新的测验
>0时,与上次启动卷号一致继续测验,不一致进入新的测验|
+|+mode|int||是|显示模式
0-不显示开头
1-显示“Q”开头
2-显示“题”开头|
+|+questions|array||是|题目详情|
+|++symbol | string||是 | 题号前缀,可为空 |
+|++quesType | int||是| 题目类型
1:单选
2:多选(排序)
3:数字
4:判断 |
+|++option |int||是 |选项数目
quesType = 1 有效。
quesType = 2 有效。
此项缺省时 默认4;
范围:1-10。|
+|++startNo | int||是| 起始题号 |
+|++count | int||是| 题目数量 |
+|+simParams|object||否|内部模拟测试参数设置对象|
+|++answer|array||是|预设提交的按键值
格式为"单选题答案,多选题答案;
数字题答案;判断题答案(1对2错)"
如["A","ABCD","10","1"]|
+
+- **示例代码**
+```Json
+//自定义题号
+{
+ "fun": "startKpExam",
+ "dataTag":"1",
+ "data":{
+ "mode": 0,
+ "examNo": 1,
+ "questions": [{
+ //题号1-1-1 到1-1-10 共10题单选
+ "symbol": "1-1-",
+ "quesType": 1,
+ "startNo": 1,
+ "count":10
+ }, {
+ //题号2-2和2-3共两题 多选题,5个选项
+ "symbol": "2-",
+ "quesType": 2,
+ "option": 5,
+ "startNo": 2,
+ "count":2
+ }, {
+ //题号3-1和3-2共两道数字题
+ "symbol": "3-",
+ "quesType": 3,
+ "startNo": 1,
+ "count":2
+ }, {
+ //题号4和5 ,判断题
+ "symbol": "",
+ "quesType": 4,
+ "startNo": 4,
+ "count":2
+ }],
+ "simParams":{
+ "answer":["A","ABCD","10","1"]
+ }
+ }
+}
+
+//显示Q开头
+{
+ "fun": "startKpExam",
+ "dataTag":"1",
+ "data":{
+ "mode": 1,
+ "examNo": 1,
+ "questions": [{
+ //Q1-Q20,单选题
+ "symbol": "",
+ "quesType": 1,
+ "startNo": 1,
+ "count":20
+ }],
+ "simParams":{
+ "answer":["A","","",""]
+ }
+ }
+}
+
+//显示题开头
+{
+ "fun": "startKpExam",
+ "dataTag":"1",
+ "data":{
+ "mode": 2,
+ "examNo": 1,
+ "questions": [{
+ //题1-题20,单选题
+ "symbol": "",
+ "quesType": 1,
+ "startNo": 1,
+ "count":20
+ }],
+ "simParams":{
+ "answer":["A","","",""]
+ }
+ }
+}
+```
+##### stopKpExam
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:停止标准测验
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+
+- **示例代码**
+```Json
+{
+ "fun": "stopKpExam",
+ "dataTag":"1"
+}
+```
+##### rtGetKpExamData
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:刷新作答数据
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+keySns|array||是|指定的键盘SN数组,空数组表示全部在线键盘|
+
+- **示例代码**
+```Json
+{
+ "fun": "rtGetKpExamData",
+ "dataTag":"1",
+ "data":{
+ "keySns":["1234567890","1234567891"]
+ }
+}
+```
+##### rtSetKpExamResult
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:考试结果回传键盘
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+examNo|string||是|回传答案的测验卷号|
+|+answer|string||是|回传题目的正确答案,用于客观题判卷,A,AB,1表示正确答案依次为A、AB、1|
+
+- **示例代码**
+```Json
+{
+ "fun": "rtSetKpExamResult",
+ "dataTag":"1",
+ "data":{
+ "examNo":1,
+ "answer":"A,AB,1"
+ }
+}
+```
+
+##### rtKpAllowEdited
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:键盘提交后,允许键盘修改答案
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+keySns|array||是|指定的键盘SN数组,空数组表示全部在线键盘|
+
+- **示例代码**
+```Json
+{
+ "fun": "rtKpAllowEdited",
+ "dataTag":"1",
+ "data":{
+ "keySns":["1234567890","1234567891"]
+ }
+}
+```
+#### 事件
+##### [sEvtStateCode](#sevtstatecode)
+发送指令后返回接收状态
+
+##### fEvtKpExam
+- **主题**:/basestation/\${baseSN}/receive
+- **功能描述**:返回键盘提交答题信息
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|array|-|是|传送参数的对象数组|
+|++keySn|string||是|键盘SN|
+|++keyValue|string||是|键盘提交的按键值,1:A;2:B表示第1题提交A,第二题提交B|
+|++keyTime|double||是|答题时间,从启动开始计算,单位秒|
+
+- **示例代码**
+```Json
+{
+ "fun": "fEvtKpExam",
+ "dataTag":"1",
+ "data": [{
+ "keySn": "1234567890",
+ "keyValue":"1:A;2:B",
+ "keyTime":3.2
+ },
+ {
+ "keySn": "1234567891",
+ "keyValue":"1:B;2:B",
+ "keyTime":3.5
+ }
+ ]
+}
+```
+##### fEvtFinalSubmit
+- **主题**:/basestation/\${baseSN}/receive
+- **功能描述**:返回键盘手动交卷标识
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|array|-|是|传送参数的对象数组|
+|++keySn|string||是|键盘SN|
+|++keyValue|string||是|0 - 未提交(提交完成后,允许键盘修改答案时上报)
1 - 已交卷|
+|++keyTime|double||是|提交时间,从启动开始计算,单位秒|
+
+- **示例代码**
+```Json
+{
+ "fun": "fEvtFinalSubmit",
+ "dataTag":"1",
+ "data": [{
+ "keySn": "1234567890",
+ "keyValue":"1",
+ "keyTime":3.2
+ }]
+}
+```
+
+##### fEvtSetKpExamResult
+- **主题**:/basestation/\${baseSN}/receive
+- **功能描述**:返回回传键盘判卷结果状态
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+examNo|int||是|测验卷号|
+|+state|string||是|0 - 回传成功
1 - 回传失败|
+
+- **示例代码**
+```Json
+{
+ "fun": "fEvtSetKpExamResult",
+ "dataTag":"1",
+ "data": {
+ "examNo": 1,
+ "state":0
+ }
+}
+```
+
+### 自主录分
+#### 方法
+##### startKpScoreInput
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:启动标准测验
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|object|-|是|传送参数的对象|
+|+examNo|int||是|0-9999
=0,新的录分
>0时,与上次启动卷号一致继续录分,不一致进入新的录分|
+|+mode|int||是|录分模式
0-自主录分
1-交叉录分,需先输入录分的人员标识|
+|+questions|array||是|题目详情|
+|++symbol | string||是 | 题号前缀,可为空 |
+|++min |int||是|可输入的最小值,默认为0|
+|++max |int||是|可输入的最大值,<=100|
+|++digits|int||是|可输入的小数位数,范围0-2|
+|++startNo | int||是| 起始题号|
+|++count | int||是| 题目数量|
+
+- **示例代码**
+```Json
+{
+ "fun": "startKpScoreInput",
+ "dataTag":"1",
+ "data":{
+ "mode": 0,
+ "examNo": 0,
+ "questions": [{
+ //题号1-1-1 到1-1-2 共2题,单题满分10分
+ "symbol": "1-",
+ "min": 0,
+ "max":10,
+ "digits":1,
+ "startNo": 1,
+ "count":2
+ }, {
+ //题号3到6 共4道题,单题满分5
+ "symbol": "",
+ "min": 0,
+ "max":5,
+ "digits":0,
+ "startNo": 3,
+ "count":4
+ }]
+ }
+}
+```
+
+##### stopKpScoreInput
+- **主题**:/client/\${baseSN}/send
+- **功能描述**:停止自主录分
+- **参数说明**
+
+|参数名|类型|限制|是否必填|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+
+- **示例代码**
+```Json
+{
+ "fun": "stopKpScoreInput",
+ "dataTag":"1"
+}
+```
+#### 事件
+##### [sEvtStateCode](#sevtstatecode)
+发送指令后返回接收状态
+
+##### fEvtKpScore
+- **主题**:/basestation/\${baseSN}/receive
+- **功能描述**:返回键盘提交录分信息
+- **参数说明**
+
+|参数名|类型|限制|非空|说明|
+|---|---|---|---|---|
+|fun|string|-|是|指令名称|
+|dataTag|string|-|否|数据包标识,可为空字符串|
+|data|array|-|是|传送参数的对象数组|
+|++scoreTag|string||是|录分标识,自主录分为空,交叉录分为键盘录分前输入的标识|
+|++keySn|string||是|键盘SN|
+|++keyValue|string||是|键盘提交的分值,1:10;2:0表示第1题提交10分,第二题提交0分|
+|++keyTime|double||是|录分时间,从启动录分开始计算,单位秒|
+
+- **示例代码**
+```Json
+{
+ "fun": "fEvtKpScore",
+ "dataTag":"1",
+ "data": [{
+ "scoreTag":"5",
+ "keySn": "1234567890",
+ "keyValue":"1:8;2:7.5;3:2;4:3",
+ "keyTime":3.2
+ },
+ {
+ "scoreTag":"3",
+ "keySn": "1234567891",
+ "keyValue":"1:10;2:0",
+ "keyTime":3.5
+ }
+ ]
+}
+```
\ No newline at end of file