diff --git a/通讯协议-平台化-应用部分[内部].md b/通讯协议-平台化-应用部分[内部].md index cf714de..23276aa 100644 --- a/通讯协议-平台化-应用部分[内部].md +++ b/通讯协议-平台化-应用部分[内部].md @@ -32,7 +32,7 @@ SunVote 二次开发
通讯协议

-Ver 1.0.13 +Ver 1.0.14


@@ -48,7 +48,7 @@ Ver 1.0.13
-二〇二五年九月 +二〇二五年十二月

@@ -80,6 +80,7 @@ Ver 1.0.13 |1.0.11| 2025年7月30日|刘琴|1. 增加表决功能(暂只有三键表决)| |1.0.12| 2025年9月4日|刘琴|1. 增加白名单模式下的键盘登录信息,用作上线信息的补充
2. 增加答题反馈事件中的时间戳返回
3. 修改拍照反馈及返回事件的接口参数| |1.0.13| 2025年9月8日|刘琴|1. 增加基站连接事件返回字库版本
2. 增加单独读取基站字库版本接口
3. 修改设置读取键盘自动休眠等级和返回事件为外部指令| +|1.0.14| 2025年12月2日|刘琴|1. 增加按键反馈事件的keyId返回
2. 增加数字选举相关接口|

@@ -118,7 +119,7 @@ WebSocket方式应用与SDK建立长连接后,通过WebSocket接口发送接 |get| 待机状态下获取参数属性状态及数据 |待机状态| |set| 待机状态下设置参数属性状态及数据 |待机状态| |start| 运行一个单进程业务实例(函数) |待机状态| -|stop| 停止一个单进程业务实例(函数) |待机状态| +|stop| 停止一个单进程业务实例(函数) |在线状态| |rtXXX| 在线状态下可实时执行方法及函数 || ## 事件说明 @@ -160,13 +161,11 @@ WebSocket方式应用与SDK建立长连接后,通过WebSocket接口发送接 |SDK连接 - 保持连接|设置心跳间隔|[setHeartbeatInterval](#setheartbeatinterval)|[fEvtHeartbeatInterval](#fevtheartbeatinterval)| |SDK识别 - SDK版本|获取SDK版本|[getSdkVersion](#getsdkversion)|[fEvtSdkVersion](#fevtsdkversion)| |SDK连接 - 终止连接|关闭SDK连接|[closeSdk](#closesdk)|-| - ### 公共方法 可以在多种业务中调用的通用方法 |功能归类|功能|API指令|指令/系统事件| |---|---|---|---| |停止投票|可停止通过调用startXXX启动的答题业务|[stopKpVote](#stopkpvote)|[sEvtStateCode](#sevtstatecode)|| - ### 公共事件 无需调用指令,自动返回的事件 |功能归类|功能|API指令|指令/系统事件| @@ -182,7 +181,6 @@ WebSocket方式应用与SDK建立长连接后,通过WebSocket接口发送接 |公共事件|键盘待机实时按键反馈|-|[sEvtKpRtFeedback](#sevtkprtfeedback)| |公共事件|键盘举手键实时按键反馈|-|[sEvtKpHandUp](#sevtkphandup)| |公共事件|遥控器实时按键反馈|-|[sEvtKpRemoteControl](#sevtkpremotecontrol)| - ### 基站管理 |功能归类|功能|API指令|指令/系统事件| |---|---|---|---| @@ -336,7 +334,11 @@ WebSocket方式应用与SDK建立长连接后,通过WebSocket接口发送接 ||清除自定义测验题型标题内容|[clearKpExamQuesTitle](#clearkpexamquestitle)|[sEvtStateCode](#sevtstatecode)
[fEvtClearKpExamQuesTitle](#fevtclearkpexamquestitle)| |自定义科目名称|自定义科目名称|[setKpExamSubject](#setkpexamsubject)|[sEvtStateCode](#sevtstatecode)
[fEvtKpExamSubject](#fevtkpexamsubject)| ||清除自定义科目名称|[clearKpExamSubject](#clearkpexamsubject)|[sEvtStateCode](#sevtstatecode)
[fEvtClearKpExamSubject](#fevtclearkpexamsubject)| - +### 选举 +|功能归类|功能|API指令|指令事件| +|---|---|---|---| +|数字选举|启动数字选举|[startQADigitalElection](#startqadigitalelection)|[sEvtStateCode](#sevtstatecode)
[fEvtDigitalElection](#fevtdigitalelection)| +||停止数字选举|[stopKpVote](#stopkpvote)|[sEvtStateCode](#sevtstatecode)| ## SDK管理 ### 方法 #### heartbeat @@ -478,11 +480,13 @@ WebSocket方式应用与SDK建立长连接后,通过WebSocket接口发送接 |-----|-----|-----|-----|-----| |fun|string|-|是|事件类型| |dataTag|string||否|数据包标识,不需要时可传空字符串| +|baseSn|string||是|基站的出厂编码| - **示例代码** ```json { "fun":"stopKpVote", + "baseSn":"2024061101", "dataTag":"1" } ``` @@ -713,6 +717,7 @@ WebSocket方式应用与SDK建立长连接后,通过WebSocket接口发送接 |baseSn|string||是|基站的出厂编码| |data|array|-|是|传送参数的对象数组| |++keySn|string||是|键盘SN| +|++keyId|int||是|键盘编号,65535代表键盘未编号| |++keyValue|string||是|键盘提交的按键值| |++voltage|double||是|键盘电量| |++retryCount|int||是|键盘提交数据的重发次数| @@ -725,6 +730,7 @@ WebSocket方式应用与SDK建立长连接后,通过WebSocket接口发送接 "baseSn":"2024061101", "data":[{ "keySn":"1234567890", + "keyId":1, "keyValue":"A", "voltage":2.6, "retryCount":1 @@ -744,6 +750,7 @@ WebSocket方式应用与SDK建立长连接后,通过WebSocket接口发送接 |baseSn|string||是|基站的出厂编码| |data|object|-|是|传送参数的对象| |+keySn|string||是|举手的键盘SN| +|+keyId|int||是|键盘编号,65535代表键盘未编号| - **示例代码** ```json @@ -752,7 +759,8 @@ WebSocket方式应用与SDK建立长连接后,通过WebSocket接口发送接 "dataTag":"1", "baseSn":"2024061101", "data":{ - "keySn":"1234567890" + "keySn":"1234567890", + "keyId":1 } } ``` @@ -901,7 +909,7 @@ WebSocket方式应用与SDK建立长连接后,通过WebSocket接口发送接 "modelName":"BS200", "version":"1.0.3", "fontLibVer":"1.0.0", - "baseSn":"2024041401" + "baseSn":"2024061101" } } ``` @@ -4775,8 +4783,47 @@ WebSocket方式应用与SDK建立长连接后,通过WebSocket接口发送接 ##### [sEvtStateCode](#sevtstatecode) 发送指令后返回接收状态 -##### [fEvtKpSignIn](#fevtkpsignin) -返回键盘提交的签到数据 +##### fEvtKpSignIn +- **主题**:/basestation/{baseSn}/receive +- **功能描述**:返回键盘提交签到信息 +- **参数说明** + +|参数名|类型|限制|非空|说明| +|---|---|---|---|---| +|fun|string|-|是|指令名称| +|dataTag|string|-|否|数据包标识,可为空字符串| +|baseSn|string||是|基站的出厂编码| +|data|array|-|是|传送参数的对象数组| +|++keySn|string||是|键盘SN| +|++keyId|int||是|键盘编号,65535代表键盘未编号| +|++keyValue|string||是|键盘提交的按键值| +|++keyTime|double||是|答题时间,从启动开始计算,单位毫秒| +|++voltage|double||是|键盘电量| +|++retryCount|int||是|键盘提交数据的重发次数| +|++timeStamp|long ||是|键盘提交数据至基站的时间戳| + +- **示例代码** + +```json +{ + "fun":"fEvtKpSignIn", + "dataTag":"1", + "baseSn":"2024061101", + "data": [{ + "keySn": "1234567890", + "keyId": 1, + "keyValue":"1004", + "keyTime":3300 + }, + { + "keySn": "1234567891", + "keyId": 2, + "keyValue":"1003", + "keyTime":3320 + } + ] +} +``` ### 随时签到 #### 方法 @@ -4856,44 +4903,9 @@ WebSocket方式应用与SDK建立长连接后,通过WebSocket接口发送接 ##### [sEvtStateCode](#sevtstatecode) 发送指令后返回接收状态 -##### fEvtKpSignIn -- **主题**:/basestation/{baseSn}/receive -- **功能描述**:返回键盘提交签到信息 -- **参数说明** - -|参数名|类型|限制|非空|说明| -|---|---|---|---|---| -|fun|string|-|是|指令名称| -|dataTag|string|-|否|数据包标识,可为空字符串| -|baseSn|string||是|基站的出厂编码| -|data|array|-|是|传送参数的对象数组| -|++keySn|string||是|键盘SN| -|++keyValue|string||是|键盘提交的按键值| -|++keyTime|double||是|答题时间,从启动开始计算,单位毫秒| -|++voltage|double||是|键盘电量| -|++retryCount|int||是|键盘提交数据的重发次数| -|++timeStamp|long ||是|键盘提交数据至基站的时间戳| - -- **示例代码** +##### [fEvtKpSignIn](#fevtkpsignin) +返回键盘提交的签到数据 -```json -{ - "fun":"fEvtKpSignIn", - "dataTag":"1", - "baseSn":"2024061101", - "data": [{ - "keySn": "1234567890", - "keyValue":"1004", - "keyTime":3300 - }, - { - "keySn": "1234567891", - "keyValue":"1003", - "keyTime":3320 - } - ] -} -``` ##### fEvtKpLoginAllowed - **主题**:/basestation/{baseSn}/receive - **功能描述**:返回键盘授权状态 @@ -4921,6 +4933,7 @@ WebSocket方式应用与SDK建立长连接后,通过WebSocket接口发送接 } } ``` + ## 按键反馈 ### 判断题 #### 方法 @@ -4979,6 +4992,7 @@ WebSocket方式应用与SDK建立长连接后,通过WebSocket接口发送接 |baseSn|string||是|基站的出厂编码| |data|array|-|是|传送参数的对象数组| |++keySn|string||是|键盘SN| +|++keyId|int||是|键盘编号,65535代表键盘未编号| |++keyValue|string||是|键盘提交的按键值
1-对
2-错| |++keyTime|double||是|答题时间,从启动开始计算,单位毫秒| |++voltage|double||是|键盘电量| @@ -4994,6 +5008,7 @@ WebSocket方式应用与SDK建立长连接后,通过WebSocket接口发送接 "baseSn":"2024061101", "data": [{ "keySn": "1234567890", + "keyId": 1, "keyValue":"1", "keyTime":2300 } @@ -5063,6 +5078,7 @@ WebSocket方式应用与SDK建立长连接后,通过WebSocket接口发送接 |baseSn|string||是|基站的出厂编码| |data|array|-|是|传送参数的对象数组| |++keySn|string||是|键盘SN| +|++keyId|int||是|键盘编号,65535代表键盘未编号| |++keyValue|string||是|键盘提交的按键值| |++keyTime|double||是|答题时间,从启动开始计算,单位毫秒| |++voltage|double||是|键盘电量| @@ -5078,6 +5094,7 @@ WebSocket方式应用与SDK建立长连接后,通过WebSocket接口发送接 "baseSn":"2024061101", "data": [{ "keySn": "1234567890", + "keyId": 1, "keyValue":"A", "keyTime":2230 }] @@ -5144,6 +5161,7 @@ WebSocket方式应用与SDK建立长连接后,通过WebSocket接口发送接 |baseSn|string||是|基站的出厂编码| |data|array|-|是|传送参数的对象数组| |++keySn|string||是|键盘SN| +|++keyId|int||是|键盘编号,65535代表键盘未编号| |++keyValue|string||是|键盘提交的按键值| |++keyTime|double||是|答题时间,从启动开始计算,单位毫秒| |++voltage|double||是|键盘电量| @@ -5159,6 +5177,7 @@ WebSocket方式应用与SDK建立长连接后,通过WebSocket接口发送接 "baseSn":"2024061101", "data":[{ "keySn": "1234567890", + "keyId": 1, "keyValue":"10", "keyTime":2230 }] @@ -5218,6 +5237,7 @@ WebSocket方式应用与SDK建立长连接后,通过WebSocket接口发送接 |baseSn|string||是|基站的出厂编码| |data|array|-|是|传送参数的对象数组| |++keySn|string||是|键盘SN| +|++keyId|int||是|键盘编号,65535代表键盘未编号| |++keyValue|string||是|键盘提交的按键值| |++keyTime|double||是|答题时间,从启动开始计算,单位毫秒| |++voltage|double||是|键盘电量| @@ -5233,6 +5253,7 @@ WebSocket方式应用与SDK建立长连接后,通过WebSocket接口发送接 "baseSn":"2024061101", "data": [{ "keySn": "1234567890", + "keyId": 1, "keyValue":"1", "keyTime":2230 }] @@ -5290,6 +5311,7 @@ WebSocket方式应用与SDK建立长连接后,通过WebSocket接口发送接 |baseSn|string||是|基站的出厂编码| |data|array|-|是|传送参数的对象数组| |++keySn|string||是|键盘SN| +|++keyId|int||是|键盘编号,65535代表键盘未编号| |++keyValue|string||是|键盘提交的按键值| |++keyTime|double||是|答题时间,从启动开始计算,单位毫秒| |++timeStamp|long ||是|键盘提交数据至基站的时间戳| @@ -5302,6 +5324,7 @@ WebSocket方式应用与SDK建立长连接后,通过WebSocket接口发送接 "baseSn":"2024061101", "data": [{ "keySn": "1234567890", + "keyId": 1, "keyValue":"hello", "keyTime":3260 }] @@ -5459,6 +5482,7 @@ WebSocket方式应用与SDK建立长连接后,通过WebSocket接口发送接 |baseSn|string||是|基站的出厂编码| |data|array|-|是|传送参数的对象数组| |++keySn|string||是|键盘SN| +|++keyId|int||是|键盘编号,65535代表键盘未编号| |++keyValue|string||是|键盘提交的按键值
1-赞成
2-反对
3-弃权| |++keyTime|double||是|答题时间,从启动开始计算,单位毫秒| |++voltage|double||是|键盘电量| @@ -5474,6 +5498,7 @@ WebSocket方式应用与SDK建立长连接后,通过WebSocket接口发送接 "baseSn":"2024061101", "data": [{ "keySn": "1234567890", + "keyId": 1, "keyValue":"1", "keyTime":2300 } @@ -5762,6 +5787,7 @@ WebSocket方式应用与SDK建立长连接后,通过WebSocket接口发送接 |baseSn|string||是|基站的出厂编码| |data|object|-|是|传送参数的对象| |+keySns|array||是|指定的键盘SN数组,空数组表示全部在线键盘| +|+mode|int||是|拍照模式(预留)
0 - 自动提交
1 - 普通拍照(默认模式)| |+tip|string||否|提示的标题,长度不超过16字符| |+questions|array||是|需要提交照片列表, 最多9张照片| |++index|int||是|照片的序号,1-9| @@ -5775,6 +5801,7 @@ WebSocket方式应用与SDK建立长连接后,通过WebSocket接口发送接 "baseSn":"2024061101", "data": { "keySns": [], + "mode": 1, "tip": "请拍照提交", "questions": [{ "index":1, @@ -6034,31 +6061,6 @@ WebSocket方式应用与SDK建立长连接后,通过WebSocket接口发送接 ##### [stopKpVote](#stopkpvote) 停止在线测验 -##### rtKpAllowEdited -- **主题**:/client/{baseSn}/send -- **功能描述**:键盘提交后,允许键盘修改答案 -- **参数说明** - -|参数名|类型|限制|是否必填|说明| -|---|---|---|---|---| -|fun|string|-|是|指令名称| -|dataTag|string|-|否|数据包标识,可为空字符串| -|baseSn|string||是|基站的出厂编码| -|data|object|-|是|传送参数的对象| -|+keySns|array||是|指定的键盘SN数组,空数组表示全部在线键盘| - -- **示例代码** - -```json -{ - "fun":"rtKpAllowEdited", - "dataTag":"1", - "baseSn":"2024061101", - "data":{ - "keySns":["1234567890","1234567891"] - } -} -``` #### 事件 ##### [sEvtStateCode](#sevtstatecode) 发送指令后返回接收状态 @@ -6075,6 +6077,7 @@ WebSocket方式应用与SDK建立长连接后,通过WebSocket接口发送接 |baseSn|string||是|基站的出厂编码| |data|array|-|是|传送参数的对象数组| |++keySn|string||是|键盘SN| +|++keyId|int||是|键盘编号,65535代表键盘未编号| |++keyValue|string||是|键盘提交的按键值,1:A;2:B表示第1题提交A,第二题提交B
注意:如启动的是多科测验,键盘提交的题目序号对应启动时下发的题目总序号,不按科目区分| |++keyTime|double||是|答题时间,从启动开始计算,单位毫秒| |++voltage|double||是|键盘电量| @@ -6090,11 +6093,13 @@ WebSocket方式应用与SDK建立长连接后,通过WebSocket接口发送接 "baseSn":"2024061101", "data": [{ "keySn": "1234567890", + "keyId": 1, "keyValue":"1:A;2:B", "keyTime":3200 }, { "keySn": "1234567891", + "keyId": 2, "keyValue":"1:B;2:B", "keyTime":3500 } @@ -6278,6 +6283,7 @@ WebSocket方式应用与SDK建立长连接后,通过WebSocket接口发送接 |baseSn|string||是|基站的出厂编码| |data|array|-|是|传送参数的对象数组| |++keySn|string||是|键盘SN| +|++keyId|int||是|键盘编号,65535代表键盘未编号| |++keyValue|string||是|键盘提交的分值,1:10;2:0表示第1题提交10分,第二题提交0分| |++keyTime|double||是|录分时间,从启动录分开始计算,单位毫秒| |++voltage|double||是|键盘电量| @@ -6292,11 +6298,13 @@ WebSocket方式应用与SDK建立长连接后,通过WebSocket接口发送接 "baseSn":"2024061101", "data": [{ "keySn": "1234567890", + "keyId": 1, "keyValue":"1:8;2:7.5;3:2;4:3", "keyTime":3200 }, { "keySn": "1234567891", + "keyId": 2, "keyValue":"1:10;2:0", "keyTime":3500 } @@ -6600,3 +6608,91 @@ WebSocket方式应用与SDK建立长连接后,通过WebSocket接口发送接 } ``` +## 选举 +### 数字选举 +#### 方法 +##### startQADigitalElection +- **主题**:/client/{baseSn}/send +- **功能描述**:启动数字选举 +- **参数说明** + +|参数名|类型|限制|是否必填|说明| +|---|---|---|---|---| +|fun|string|-|是|指令名称| +|dataTag|string|-|否|数据包标识,可为空字符串| +|baseSn|string||是|基站的出厂编码| +|data|object|-|是|传送参数的对象| +|+allowModify|int||是|0 - 不允许修改
1 - 允许修改| +|+allowRepeat|int||是|0 - 不允许重复输入
1 - 允许重复输入| +|+isSecrecy|int||是|0 - 不保密| +|+lessMode|int||是|0 - 允许缺选(可不选满最少人数)
1 - 不允许缺选(需选满最少人数)| +|+maxSelect|int||是|最多可选人数,1-99| +|+minSelect|int||是|最少需选人数,1-99,≤最多可选人数,不可缺选时需选满最少人数才能提交| +|+abstainNum|int||否|弃权数字,最大999,在序号1输入该数字代表弃权,其他序号为正常输入,不传此参数代表不启用,不能与空白数字相同| +|+blankNum|int||否|空白数字,最大999,在序号1输入该数字代表全部空白票,不传此参数代表不启用,不能与弃权数字相同| +|+numberRanges|string||是|可以输入的数字范围,格式如"1-100,203,210,300-500"
"-"表示连续的数字,单独数字的用","分隔,可输入的数字最大不超过999| +|+simParams|object||否|内部模拟测试参数设置对象| +|++answer|string||是|预设提交的按键起始值,如设置100,最多可选人数设置了30,则依次提交从100-129| + +- **示例代码** +```json +{ + "fun":"startQADigitalElection", + "dataTag":"1", + "baseSn":"2024061101", + "data": { + "allowModify": 1, + "allowRepeat": 1, + "isSecrecy": 0, + "lessMode": 1, + "maxSelect":10, + "minSelect":1, + "abstainNum":777, + "blankNum":999, + "numberRanges":"1-200,203,210,300-500", + "simParams":{ + "answer":"100" + } + } +} +``` + +##### [stopKpVote](#stopkpvote) +停止投票 + +#### 事件 +##### [sEvtStateCode](#sevtstatecode) +发送指令后返回接收状态 + +##### fEvtDigitalElection +- **主题**:/basestation/{baseSn}/receive +- **功能描述**:返回键盘提交的选举数字 +- **参数说明** + +|参数名|类型|限制|非空|说明| +|---|---|---|---|---| +|fun|string|-|是|指令名称| +|dataTag|string|-|否|数据包标识,可为空字符串| +|baseSn|string||是|基站的出厂编码| +|data|array|-|是|传送参数的对象数组| +|++keySn|string||是|键盘SN| +|++keyId|int||是|键盘编号,65535代表键盘未编号| +|++index|int||是|提交的选票序号| +|++value|string||是|键盘提交的按键值,为空字符串代表删除了按键值或跳过| +|++submitted|int||是|0-未提交,1-提交完成| + +- **示例代码** +```json +{ + "fun":"fEvtDigitalElection", + "dataTag":"1", + "baseSn":"2024061101", + "data": [{ + "keySn": "1479824643", + "keyId": 1, + "index": 1, + "value":"123", + "submitted":0 + }] +} +``` \ No newline at end of file