683 lines
12 KiB
Markdown
683 lines
12 KiB
Markdown
|
|
# BLV_RQ 蓝牙通信控制页面实施文档
|
|||
|
|
|
|||
|
|
- 归档日期:2026年3月19日
|
|||
|
|
- 适用项目:`Wx_BLWConfigTools_V02_Prod`
|
|||
|
|
- 参考协议:`Document/RF_RQ2603 蓝牙通讯协议.md`
|
|||
|
|
- 当前状态:已确认,待进入代码实现
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 一、实施目标
|
|||
|
|
|
|||
|
|
为 `BLV_RQ` 设备新增独立的蓝牙通信控制页面,用于完成以下能力:
|
|||
|
|
|
|||
|
|
1. 展示 BLE 连接信息
|
|||
|
|
2. 读取设备版本信息
|
|||
|
|
3. 设置蓝牙名称
|
|||
|
|
4. 读取按键配置
|
|||
|
|
5. 设置按键功能与按键映射
|
|||
|
|
6. 基于映射关系执行按键控制
|
|||
|
|
7. 查看、清空、导出通信日志
|
|||
|
|
|
|||
|
|
页面采用**从上到下的单屏结构**,页面自身不做上下滚动;若日志区需要展示更多内容,仅允许日志内容区内部滚动。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 二、已确认实施约束
|
|||
|
|
|
|||
|
|
1. **单独新建一个新页面路径**
|
|||
|
|
2. **设备型号固定写死为 `BLV_RQ`**
|
|||
|
|
3. **按键支持映射设置**
|
|||
|
|
4. **蓝牙名称输入规则为 ASCII + 最多 8 字节自定义名,仅允许数字和英文字符**
|
|||
|
|
5. **允许按键类型由用户先选,读取配置后再按设备返回结果自动修正**
|
|||
|
|
6. **允许通信日志导出**
|
|||
|
|
7. **未配置映射的按键允许继续下发(方案 B)**
|
|||
|
|
8. **采纳建议:未配置映射项下发时,优先“保持设备当前返回值不变”**
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 三、页面路径规划
|
|||
|
|
|
|||
|
|
建议新增页面路径:
|
|||
|
|
|
|||
|
|
`pages/basics/BluetoothDebugging/BLVRQPage/`
|
|||
|
|
|
|||
|
|
页面文件包括:
|
|||
|
|
|
|||
|
|
- `BLVRQPage.js`
|
|||
|
|
- `BLVRQPage.wxml`
|
|||
|
|
- `BLVRQPage.wxss`
|
|||
|
|
- `BLVRQPage.json`
|
|||
|
|
|
|||
|
|
该页面仅服务于 `BLV_RQ` 设备,不复用 `W13` 页面逻辑。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 四、页面结构设计
|
|||
|
|
|
|||
|
|
## 1. 页面总结构
|
|||
|
|
|
|||
|
|
页面自上而下分为三大区域:
|
|||
|
|
|
|||
|
|
1. 蓝牙信息栏
|
|||
|
|
2. 设备管理框
|
|||
|
|
3. 通信日志框组
|
|||
|
|
|
|||
|
|
页面整体不滚动,建议通过高度配比保证三块区域稳定展示:
|
|||
|
|
|
|||
|
|
- 蓝牙信息栏:约 26%
|
|||
|
|
- 设备管理框:约 46%
|
|||
|
|
- 通信日志框组:约 28%
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 2. 蓝牙信息栏
|
|||
|
|
|
|||
|
|
### 展示内容
|
|||
|
|
|
|||
|
|
- 蓝牙名称
|
|||
|
|
- MAC / DeviceId
|
|||
|
|
- ServiceId
|
|||
|
|
- Tx 特征值
|
|||
|
|
- Rx 特征值
|
|||
|
|
- 连接状态
|
|||
|
|
- 蓝牙信号 / RSSI
|
|||
|
|
|
|||
|
|
### 交互内容
|
|||
|
|
|
|||
|
|
- `断开` 按钮
|
|||
|
|
- `重连` 按钮
|
|||
|
|
- 蓝牙名称输入框
|
|||
|
|
- `设置蓝牙名称` 按钮
|
|||
|
|
|
|||
|
|
### 交互规则
|
|||
|
|
|
|||
|
|
#### 蓝牙名称输入限制
|
|||
|
|
|
|||
|
|
输入内容必须满足:
|
|||
|
|
|
|||
|
|
- 仅允许数字和英文字符
|
|||
|
|
- 长度为 1~8 字节
|
|||
|
|
- ASCII 编码
|
|||
|
|
|
|||
|
|
建议使用如下校验规则:
|
|||
|
|
|
|||
|
|
`^[A-Za-z0-9]{1,8}$`
|
|||
|
|
|
|||
|
|
#### 设置蓝牙名称按钮启用条件
|
|||
|
|
|
|||
|
|
仅当同时满足以下条件时可点击:
|
|||
|
|
|
|||
|
|
- 当前已连接设备
|
|||
|
|
- 输入内容非空
|
|||
|
|
- 输入内容满足校验规则
|
|||
|
|
|
|||
|
|
#### 设置蓝牙名称交互流程
|
|||
|
|
|
|||
|
|
1. 用户输入新名称
|
|||
|
|
2. 点击 `设置蓝牙名称`
|
|||
|
|
3. 下发 `0x05` 指令
|
|||
|
|
4. 回包成功后刷新显示名称
|
|||
|
|
5. 记录 TX / RX / UI 日志
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 3. 设备管理框
|
|||
|
|
|
|||
|
|
设备管理框分为两部分:
|
|||
|
|
|
|||
|
|
### 3.1 设备信息栏
|
|||
|
|
|
|||
|
|
包含:
|
|||
|
|
|
|||
|
|
- 设备型号:`BLV_RQ`(固定写死)
|
|||
|
|
- 软件版本
|
|||
|
|
- 硬件版本
|
|||
|
|
- `读取版本` 按钮
|
|||
|
|
- 按键类型下拉框
|
|||
|
|
- `读取按键配置` 按钮
|
|||
|
|
- `设置按键配置` 按钮
|
|||
|
|
|
|||
|
|
### 3.2 设备按键栏
|
|||
|
|
|
|||
|
|
根据按键类型动态生成按键卡片。
|
|||
|
|
|
|||
|
|
布局要求:
|
|||
|
|
|
|||
|
|
- 一行 2 个卡片
|
|||
|
|
- Z 型排列
|
|||
|
|
- 奇数卡片时最后一个左对齐
|
|||
|
|
|
|||
|
|
每个按键卡片包含:
|
|||
|
|
|
|||
|
|
- 按键序号(表示硬件按键位置)
|
|||
|
|
- 按键控制按钮
|
|||
|
|
- 按键功能下拉框
|
|||
|
|
- 映射下拉框
|
|||
|
|
|
|||
|
|
建议标题展示方式:
|
|||
|
|
|
|||
|
|
- `按键1(硬件)`
|
|||
|
|
- `按键2(硬件)`
|
|||
|
|
- ...
|
|||
|
|
|
|||
|
|
可附加展示小字:
|
|||
|
|
|
|||
|
|
- `当前映射:键值X`
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 五、按钮与控件启用逻辑
|
|||
|
|
|
|||
|
|
### 1. 读取版本按钮
|
|||
|
|
|
|||
|
|
启用条件:
|
|||
|
|
|
|||
|
|
- 已连接设备
|
|||
|
|
|
|||
|
|
### 2. 读取按键配置按钮
|
|||
|
|
|
|||
|
|
启用条件:
|
|||
|
|
|
|||
|
|
- 已连接设备
|
|||
|
|
- 已选择按键类型(1~8键)
|
|||
|
|
|
|||
|
|
### 3. 设置按键配置按钮
|
|||
|
|
|
|||
|
|
启用条件:
|
|||
|
|
|
|||
|
|
- 已连接设备
|
|||
|
|
- 已选择按键类型(1~8键)
|
|||
|
|
|
|||
|
|
### 4. 按键控制按钮
|
|||
|
|
|
|||
|
|
启用条件:
|
|||
|
|
|
|||
|
|
- 已连接设备
|
|||
|
|
- 当前按键存在有效映射
|
|||
|
|
|
|||
|
|
### 5. 设置蓝牙名称按钮
|
|||
|
|
|
|||
|
|
启用条件:
|
|||
|
|
|
|||
|
|
- 已连接设备
|
|||
|
|
- 名称输入合法
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 六、按键类型、功能与映射设计
|
|||
|
|
|
|||
|
|
## 1. 按键类型下拉框
|
|||
|
|
|
|||
|
|
选项:
|
|||
|
|
|
|||
|
|
- 请选择按键类型
|
|||
|
|
- 1键
|
|||
|
|
- 2键
|
|||
|
|
- 3键
|
|||
|
|
- 4键
|
|||
|
|
- 5键
|
|||
|
|
- 6键
|
|||
|
|
- 7键
|
|||
|
|
- 8键
|
|||
|
|
|
|||
|
|
### 规则
|
|||
|
|
|
|||
|
|
- 用户先选择按键类型后,才允许读取/设置按键配置
|
|||
|
|
- 读取设备配置后,如果设备返回键数与当前选择不同:
|
|||
|
|
- 页面提示:`设备返回为 X 键,已按设备实际值修正`
|
|||
|
|
- 页面自动修正下拉框与卡片数量
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 2. 按键功能下拉框
|
|||
|
|
|
|||
|
|
依据协议中的功能码 `0x00 ~ 0x0F`:
|
|||
|
|
|
|||
|
|
- 不设置(0x00)
|
|||
|
|
- 普通按键(0x01)
|
|||
|
|
- 清理按键(0x02)
|
|||
|
|
- 投诉按键(0x03)
|
|||
|
|
- 预留(0x04)
|
|||
|
|
- 预留(0x05)
|
|||
|
|
- ...
|
|||
|
|
- 预留(0x0F)
|
|||
|
|
|
|||
|
|
页面展示建议使用:
|
|||
|
|
|
|||
|
|
- `普通按键 (0x01)`
|
|||
|
|
- `投诉按键 (0x03)`
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 3. 映射下拉框
|
|||
|
|
|
|||
|
|
映射选项需根据当前按键类型动态生成。
|
|||
|
|
|
|||
|
|
例如:
|
|||
|
|
|
|||
|
|
- 当前为 4 键:只允许映射 `键值1 ~ 键值4`
|
|||
|
|
- 当前为 8 键:允许映射 `键值1 ~ 键值8`
|
|||
|
|
|
|||
|
|
### 映射校验规则
|
|||
|
|
|
|||
|
|
根据协议要求:
|
|||
|
|
|
|||
|
|
- 不同硬件位置不能映射到相同键值
|
|||
|
|
- 映射值必须落在当前按键类型范围内
|
|||
|
|
|
|||
|
|
因此页面在设置前必须校验:
|
|||
|
|
|
|||
|
|
1. 是否存在重复映射
|
|||
|
|
2. 是否存在越界映射
|
|||
|
|
3. 是否存在未配置映射
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 七、协议交互设计
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 1. 读取版本号(0x01)
|
|||
|
|
|
|||
|
|
### 发送
|
|||
|
|
|
|||
|
|
- `Frame_Type = 0x01`
|
|||
|
|
- `P0 = 0x01`
|
|||
|
|
|
|||
|
|
### 回包
|
|||
|
|
|
|||
|
|
- `P0 = 软件版本号`
|
|||
|
|
- `P1 = 硬件版本号`
|
|||
|
|
|
|||
|
|
### 页面交互
|
|||
|
|
|
|||
|
|
- 点击 `读取版本`
|
|||
|
|
- 成功回包后更新:
|
|||
|
|
- 软件版本
|
|||
|
|
- 硬件版本
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 2. 设置蓝牙名称(0x05)
|
|||
|
|
|
|||
|
|
### 发送
|
|||
|
|
|
|||
|
|
- `Frame_Type = 0x05`
|
|||
|
|
- `P0 = 名称长度`
|
|||
|
|
- `P1~Pn = ASCII字符`
|
|||
|
|
|
|||
|
|
### 回包
|
|||
|
|
|
|||
|
|
- `P0 = 0x01`:设置成功
|
|||
|
|
- `P0 = 0x02`:设置失败
|
|||
|
|
|
|||
|
|
### 页面交互
|
|||
|
|
|
|||
|
|
- 输入名称
|
|||
|
|
- 点击 `设置蓝牙名称`
|
|||
|
|
- 成功后提示并刷新名称显示
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 3. 读取按键配置(0x04)
|
|||
|
|
|
|||
|
|
### 前置条件
|
|||
|
|
|
|||
|
|
- 已连接设备
|
|||
|
|
- 已选择按键类型
|
|||
|
|
|
|||
|
|
### 发送
|
|||
|
|
|
|||
|
|
- `Frame_Type = 0x04`
|
|||
|
|
- `P0 = 0x01`
|
|||
|
|
|
|||
|
|
### 回包
|
|||
|
|
|
|||
|
|
- `P0 = 硬件按键总数`
|
|||
|
|
- `P1~P8 = 各硬件按键配置字节`
|
|||
|
|
|
|||
|
|
### 配置字节解析规则
|
|||
|
|
|
|||
|
|
每个配置字节:
|
|||
|
|
|
|||
|
|
- Bit0~3:映射键值
|
|||
|
|
- Bit4~7:按键功能
|
|||
|
|
|
|||
|
|
### 页面处理
|
|||
|
|
|
|||
|
|
- 自动解析并回填每张卡片的:
|
|||
|
|
- `mappedKey`
|
|||
|
|
- `functionCode`
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 4. 设置按键配置(0x02)
|
|||
|
|
|
|||
|
|
协议规定 `0x02` 分为两个子命令:
|
|||
|
|
|
|||
|
|
### 子命令 1:设置按键功能
|
|||
|
|
|
|||
|
|
- `P0 = 0x01`
|
|||
|
|
- `P1~P8 = 逻辑键值功能码`
|
|||
|
|
|
|||
|
|
### 子命令 2:设置按键映射
|
|||
|
|
|
|||
|
|
- `P0 = 0x02`
|
|||
|
|
- `P1~P8 = 硬件位置映射到的键值`
|
|||
|
|
|
|||
|
|
### 页面交互流程
|
|||
|
|
|
|||
|
|
用户点击 `设置按键配置` 后,执行以下步骤:
|
|||
|
|
|
|||
|
|
#### 第一步:前端校验
|
|||
|
|
|
|||
|
|
检查:
|
|||
|
|
|
|||
|
|
1. 是否已选择按键类型
|
|||
|
|
2. 是否存在重复映射
|
|||
|
|
3. 是否存在越界映射
|
|||
|
|
4. 是否存在未配置映射
|
|||
|
|
5. 功能配置是否完整
|
|||
|
|
|
|||
|
|
#### 第二步:弹出二次确认框
|
|||
|
|
|
|||
|
|
##### 场景 A:存在未配置映射按键
|
|||
|
|
|
|||
|
|
弹窗提示示例:
|
|||
|
|
|
|||
|
|
> 以下按键未配置映射:按键2、按键5
|
|||
|
|
> 若继续下发,将保持这些按键当前设备返回值不变。
|
|||
|
|
> 是否继续?
|
|||
|
|
|
|||
|
|
##### 场景 B:无缺失项
|
|||
|
|
|
|||
|
|
弹窗提示示例:
|
|||
|
|
|
|||
|
|
> 确认下发当前按键功能与映射配置?
|
|||
|
|
|
|||
|
|
#### 第三步:用户确认后继续下发(方案 B)
|
|||
|
|
|
|||
|
|
执行顺序建议为:
|
|||
|
|
|
|||
|
|
1. 先下发功能配置(`P0 = 0x01`)
|
|||
|
|
2. 再下发映射配置(`P0 = 0x02`)
|
|||
|
|
|
|||
|
|
#### 第四步:未配置映射项处理策略(采纳建议)
|
|||
|
|
|
|||
|
|
对于未配置映射的按键,不直接写入空值或 `0x00`,而是:
|
|||
|
|
|
|||
|
|
- **保持设备当前返回值不变**
|
|||
|
|
|
|||
|
|
即:
|
|||
|
|
|
|||
|
|
- 页面在成功读取配置后缓存设备原始映射值
|
|||
|
|
- 用户未配置映射的项,设置时继续带上原设备返回值
|
|||
|
|
|
|||
|
|
该策略的优点:
|
|||
|
|
|
|||
|
|
- 最稳妥
|
|||
|
|
- 避免把设备有效映射误清空
|
|||
|
|
- 与“允许继续”的方案 B 兼容
|
|||
|
|
|
|||
|
|
#### 第五步:结果反馈
|
|||
|
|
|
|||
|
|
- 两条命令都成功:提示 `设置成功`
|
|||
|
|
- 任一命令失败:提示 `设置失败`
|
|||
|
|
- 日志中记录失败发生在功能设置还是映射设置阶段
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 5. 按键控制(0x06)
|
|||
|
|
|
|||
|
|
### 交互逻辑
|
|||
|
|
|
|||
|
|
用户通过映射下拉框配置卡片映射值后,点击某个按键卡片中的控制按钮时:
|
|||
|
|
|
|||
|
|
- 发送的不是硬件按键序号
|
|||
|
|
- 而是该卡片当前映射到的**逻辑键值**
|
|||
|
|
|
|||
|
|
### 示例
|
|||
|
|
|
|||
|
|
- 硬件按键1 当前映射为键值3
|
|||
|
|
- 点击“按键1”的控制按钮
|
|||
|
|
- 实际发送键值3的模拟触发命令
|
|||
|
|
|
|||
|
|
### 发送
|
|||
|
|
|
|||
|
|
- `Frame_Type = 0x06`
|
|||
|
|
- `P0 = 1`
|
|||
|
|
- `P1 = 1 << (mappedKey - 1)`
|
|||
|
|
|
|||
|
|
### 回包
|
|||
|
|
|
|||
|
|
- `P0 = 0x01`:成功
|
|||
|
|
- `P0 = 0x02`:失败
|
|||
|
|
|
|||
|
|
### 限制
|
|||
|
|
|
|||
|
|
- 未连接不可触发
|
|||
|
|
- 未配置映射不可触发
|
|||
|
|
- 点击未映射按键时提示:`当前按键未配置映射`
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 八、日志设计
|
|||
|
|
|
|||
|
|
## 1. 日志分类
|
|||
|
|
|
|||
|
|
建议日志类型:
|
|||
|
|
|
|||
|
|
- `UI`:用户操作
|
|||
|
|
- `CFG`:状态变化
|
|||
|
|
- `TX`:发送命令
|
|||
|
|
- `RX`:接收回包
|
|||
|
|
- `WARN`:警告
|
|||
|
|
- `ERR`:错误
|
|||
|
|
|
|||
|
|
## 2. 日志内容建议
|
|||
|
|
|
|||
|
|
每条日志包含:
|
|||
|
|
|
|||
|
|
- 时间戳
|
|||
|
|
- 日志类型
|
|||
|
|
- 命令字
|
|||
|
|
- Hex 内容
|
|||
|
|
- 文本说明
|
|||
|
|
|
|||
|
|
### 示例
|
|||
|
|
|
|||
|
|
- `[TX][0x04] 读取按键配置`
|
|||
|
|
- `[RX][0x04] 返回4键配置`
|
|||
|
|
- `[WARN] 未配置映射:按键2、按键5,继续按原设备值下发`
|
|||
|
|
- `[TX][0x06] 触发键值3`
|
|||
|
|
|
|||
|
|
## 3. 日志功能
|
|||
|
|
|
|||
|
|
顶部功能按钮:
|
|||
|
|
|
|||
|
|
- `清空日志`
|
|||
|
|
- `导出日志`
|
|||
|
|
|
|||
|
|
## 4. 导出格式
|
|||
|
|
|
|||
|
|
允许导出为 `txt` 文件。
|
|||
|
|
|
|||
|
|
建议文件名:
|
|||
|
|
|
|||
|
|
`BLV_RQ_Log_yyyyMMdd_HHmmss.txt`
|
|||
|
|
|
|||
|
|
导出内容建议包含:
|
|||
|
|
|
|||
|
|
- 当前设备信息
|
|||
|
|
- 当前连接参数
|
|||
|
|
- 全量日志内容
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 九、推荐数据模型
|
|||
|
|
|
|||
|
|
```js
|
|||
|
|
data: {
|
|||
|
|
bleInfo: {
|
|||
|
|
devName: '',
|
|||
|
|
mac: '',
|
|||
|
|
serviceId: '',
|
|||
|
|
txCharId: '',
|
|||
|
|
rxCharId: '',
|
|||
|
|
connected: false,
|
|||
|
|
rssi: null,
|
|||
|
|
signalText: '-'
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
deviceInfo: {
|
|||
|
|
model: 'BLV_RQ',
|
|||
|
|
softwareVersion: '-',
|
|||
|
|
hardwareVersion: '-'
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
keyConfig: {
|
|||
|
|
selectedKeyCount: 0,
|
|||
|
|
keyCountOptions: ['请选择按键类型', '1键', '2键', '3键', '4键', '5键', '6键', '7键', '8键'],
|
|||
|
|
keys: [
|
|||
|
|
{
|
|||
|
|
hwIndex: 1,
|
|||
|
|
mappedKey: 1,
|
|||
|
|
functionCode: 1,
|
|||
|
|
functionLabel: '普通按键',
|
|||
|
|
originalMappedKey: 1
|
|||
|
|
}
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
|
|||
|
|
logs: []
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
其中:
|
|||
|
|
|
|||
|
|
- `hwIndex`:硬件按键位置
|
|||
|
|
- `mappedKey`:当前界面配置映射值
|
|||
|
|
- `originalMappedKey`:设备读取回来的原始映射值,用于方案 B 放行时保留原值
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 十、测试范围
|
|||
|
|
|
|||
|
|
## 1. 蓝牙信息栏
|
|||
|
|
|
|||
|
|
- 能显示蓝牙名称、MAC、特征值、连接状态、信号
|
|||
|
|
- 断开按钮有效
|
|||
|
|
- 重连按钮有效
|
|||
|
|
|
|||
|
|
## 2. 蓝牙名称设置
|
|||
|
|
|
|||
|
|
- 非英文数字不可通过
|
|||
|
|
- 超过 8 字节不可通过
|
|||
|
|
- 合法名称可设置成功
|
|||
|
|
- 成功失败提示正确
|
|||
|
|
|
|||
|
|
## 3. 版本读取
|
|||
|
|
|
|||
|
|
- 可正常读取软件版本、硬件版本
|
|||
|
|
|
|||
|
|
## 4. 按键配置读取
|
|||
|
|
|
|||
|
|
- 未选按键类型时按钮禁用
|
|||
|
|
- 选定后可读取
|
|||
|
|
- 返回值可正确解析
|
|||
|
|
- 设备返回键数与页面选择不一致时可自动修正
|
|||
|
|
|
|||
|
|
## 5. 按键配置设置
|
|||
|
|
|
|||
|
|
- 功能可正确下发
|
|||
|
|
- 映射可正确下发
|
|||
|
|
- 重复映射必须拦截
|
|||
|
|
- 越界映射必须拦截
|
|||
|
|
- 未配置映射时弹窗提示并允许继续
|
|||
|
|
- 未配置映射项按原设备值下发
|
|||
|
|
|
|||
|
|
## 6. 按键控制
|
|||
|
|
|
|||
|
|
- 点击卡片时基于映射后的逻辑键值发送命令
|
|||
|
|
- 未配置映射不可触发
|
|||
|
|
|
|||
|
|
## 7. 日志
|
|||
|
|
|
|||
|
|
- TX / RX / WARN / ERR 记录完整
|
|||
|
|
- 清空日志可用
|
|||
|
|
- 导出日志可用
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 十一、首版实施范围
|
|||
|
|
|
|||
|
|
首版实施包含:
|
|||
|
|
|
|||
|
|
1. 新建 `BLVRQPage`
|
|||
|
|
2. BLE 信息展示
|
|||
|
|
3. 断开 / 重连
|
|||
|
|
4. 读取版本
|
|||
|
|
5. 设置蓝牙名称
|
|||
|
|
6. 选择按键类型
|
|||
|
|
7. 读取按键配置
|
|||
|
|
8. 设置按键功能
|
|||
|
|
9. 设置按键映射
|
|||
|
|
10. 按映射执行单键控制
|
|||
|
|
11. 日志显示 / 清空 / 导出
|
|||
|
|
|
|||
|
|
首版暂不做:
|
|||
|
|
|
|||
|
|
1. 多键同时触发
|
|||
|
|
2. 批量压测模式
|
|||
|
|
3. 原始报文自由编辑器
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 十二、建议实施顺序
|
|||
|
|
|
|||
|
|
### 第 1 阶段:页面骨架
|
|||
|
|
|
|||
|
|
- 新建 `BLVRQPage`
|
|||
|
|
- 搭建静态页面结构
|
|||
|
|
- 接收 BLE 上下文参数
|
|||
|
|
|
|||
|
|
### 第 2 阶段:基础蓝牙能力
|
|||
|
|
|
|||
|
|
- 连接信息展示
|
|||
|
|
- 断开 / 重连
|
|||
|
|
- RSSI 刷新
|
|||
|
|
- 蓝牙名称设置
|
|||
|
|
- 版本读取
|
|||
|
|
|
|||
|
|
### 第 3 阶段:按键配置能力
|
|||
|
|
|
|||
|
|
- 按键类型下拉
|
|||
|
|
- 配置读取
|
|||
|
|
- 卡片渲染
|
|||
|
|
- 功能与映射编辑
|
|||
|
|
- 二次确认弹窗
|
|||
|
|
- 方案 B 放行逻辑
|
|||
|
|
|
|||
|
|
### 第 4 阶段:控制与日志增强
|
|||
|
|
|
|||
|
|
- 单键触发
|
|||
|
|
- 日志导出
|
|||
|
|
- 异常处理优化
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 十三、结论
|
|||
|
|
|
|||
|
|
本实施文档已完成以下关键决策固化:
|
|||
|
|
|
|||
|
|
- `BLV_RQ` 单独新建页面
|
|||
|
|
- 设备型号固定为 `BLV_RQ`
|
|||
|
|
- 页面支持按键功能与映射双配置
|
|||
|
|
- 设置时采用二次确认
|
|||
|
|
- 未配置映射按键采用 **方案 B:允许继续**
|
|||
|
|
- 继续时采纳建议:**未配置映射项保持设备当前返回值不变**
|
|||
|
|
- 页面整体不滚动,仅日志区允许内部滚动
|
|||
|
|
|
|||
|
|
该文档可作为后续代码实现的直接依据。
|