Skip to content

Commit 3678efe

Browse files
committed
feat: 添加编码支持,允许选择 UTF-8、GBK、ASCII、Latin1 编码并持久化配置
1 parent 3acd81b commit 3678efe

12 files changed

Lines changed: 514 additions & 28 deletions

.github/workflows/ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ jobs:
5050
uses: jurplel/install-qt-action@v4
5151
with:
5252
version: '6.8.0'
53-
modules: 'qtserialport'
53+
modules: 'qtserialport qt5compat'
5454
cache: true
5555

5656
- name: Configure

.github/workflows/release.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ jobs:
5050
uses: jurplel/install-qt-action@v4
5151
with:
5252
version: '6.8.0'
53-
modules: 'qtserialport'
53+
modules: 'qtserialport qt5compat'
5454
cache: true
5555

5656
- name: Configure

CMakeLists.txt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ if(MINGW)
3939
string(APPEND CMAKE_EXE_LINKER_FLAGS_MINSIZEREL " -Wl,--gc-sections -s")
4040
endif()
4141

42-
find_package(Qt6 6.5 REQUIRED COMPONENTS Core Gui Widgets SerialPort Svg Network)
42+
find_package(Qt6 6.5 REQUIRED COMPONENTS Core Gui Widgets SerialPort Svg Network Core5Compat)
4343

4444
set(FLUENTQTWIDGETS_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/third_party/FluentQtWidgets" CACHE PATH "Path to FluentQtWidgets checkout")
4545
if(NOT EXISTS "${FLUENTQTWIDGETS_ROOT}/CMakeLists.txt")
@@ -61,6 +61,8 @@ add_executable(FluentSerialAssistant
6161
src/app/core/font_preferences.h
6262
src/app/core/hex_utils.cpp
6363
src/app/core/hex_utils.h
64+
src/app/core/text_encoding.cpp
65+
src/app/core/text_encoding.h
6466
src/app/core/update_checker.cpp
6567
src/app/core/update_checker.h
6668
src/app/serial/serial_controller.cpp
@@ -111,6 +113,7 @@ target_link_libraries(FluentSerialAssistant
111113
Qt6::Widgets
112114
Qt6::SerialPort
113115
Qt6::Network
116+
Qt6::Core5Compat
114117
FluentQtWidgets::Widgets
115118
)
116119

README.md

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ Fluent 串口助手是一个基于 C++17、Qt 6 Widgets 和 FluentQtWidgets 的
2626
- 串口扫描:显示端口名、描述、厂商、VID/PID 和序列号。
2727
- 连接参数:支持常用和扩展波特率、数据位、校验位、停止位、流控、RTS、DTR。
2828
- 终端显示:支持文本、HEX、混合显示模式。
29+
- 编码支持:接收和文本发送可分别选择 UTF-8、GBK、ASCII、Latin1。
2930
- 自动断帧:按接收间隔自动插入帧分隔。
3031
- 记录显示:RX/TX 统一会话记录,支持暂停显示、自动滚动、清空和计数重置。
3132
- 终端检索:支持按关键字搜索,并按全部、接收、发送过滤当前显示。
@@ -60,6 +61,10 @@ Fluent 串口助手是一个基于 C++17、Qt 6 Widgets 和 FluentQtWidgets 的
6061
- 测试序列
6162
- 插件系统
6263

64+
## 后续规划
65+
66+
后续功能增强需求见 [功能需求规划](docs/feature-roadmap.md)
67+
6368
## 技术栈
6469

6570
- C++17
@@ -119,7 +124,7 @@ git submodule update --init --recursive
119124

120125
- CMake 3.21+
121126
- Ninja
122-
- Qt 6.5+,需要包含 `SerialPort``Svg` 模块
127+
- Qt 6.5+,需要包含 `SerialPort``Svg``Core5Compat` 模块
123128
- Windows 本地预设默认使用:
124129
- Qt:`C:/Qt/6.11.1/mingw_64`
125130
- MinGW:`C:/Qt/Tools/mingw1310_64`
@@ -183,7 +188,7 @@ dist/FluentSerialAssistant-release
183188
2. 配置波特率、数据位、校验位、停止位、流控。
184189
3. 点击连接。
185190
4. 在终端记录区查看 RX/TX。
186-
5. 在发送区输入文本或 HEX 数据,选择行结束符后发送
191+
5. 在发送区输入文本或 HEX 数据,必要时选择收发编码和行结束符后发送
187192
6. 可在常用包中填写名称、内容、模式和换行后保存,之后选中条目即可填入发送区或直接发送。
188193
7. 可选择文件,配置块大小和间隔后分块发送。
189194
8. 可开启自动断帧、时间戳、自动滚动、循环发送等选项。

docs/feature-roadmap.md

Lines changed: 241 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,241 @@
1+
# Fluent 串口助手功能需求规划
2+
3+
本文档记录后续功能增强方向。需求基于当前代码和 README 中已经具备的能力整理,避免重复规划已完成工作。
4+
5+
## 已有能力基线
6+
7+
- 串口扫描:端口名、描述、厂商、VID/PID、序列号。
8+
- 连接参数:波特率、数据位、校验位、停止位、流控、RTS、DTR。
9+
- 连接体验:手动刷新、自动重连、启动后自动连接上次串口。
10+
- 接收显示:文本、HEX、混合显示、时间戳、自动断帧、暂停显示、自动滚动、清空记录。
11+
- 终端检索:关键字搜索,以及全部、接收、发送方向过滤。
12+
- 状态统计:RX/TX 总量、实时速率、连接时长、计数重置。
13+
- 数据发送:文本/HEX 发送,None/CR/LF/CRLF 行结束符。
14+
- 发送历史:保存最近发送内容并可回填。
15+
- 常用包:保存、载入、发送、删除、排序。
16+
- 定时发送:按毫秒级间隔循环发送当前内容。
17+
- 文件发送:选择文件、按块发送、块间隔配置、发送进度。
18+
- 记录导出:TXT、CSV、BIN。
19+
- 接收保存:将接收原始数据保存到文件。
20+
- 会话恢复:恢复串口参数、发送输入、常用包、文件发送参数。
21+
- 外观设置:浅色、深色、跟随系统、主题色、界面字体和终端字体。
22+
23+
## P0:优先增强
24+
25+
### 1. 编码支持
26+
27+
状态:已实现。
28+
29+
接收显示和文本发送已经支持独立选择编码,覆盖常见设备和中文调试场景。
30+
31+
需求:
32+
33+
- 接收编码支持 UTF-8、GBK、ASCII、Latin1。
34+
- 发送编码支持 UTF-8、GBK、ASCII、Latin1。
35+
- 接收编码和发送编码可分别配置。
36+
- 编码配置需要持久化。
37+
- 无法按当前编码解码的内容,应有明确替代显示,不应导致界面异常。
38+
39+
验收:
40+
41+
- GBK 中文设备输出可以正确显示。
42+
- GBK 文本发送到设备时字节内容正确。
43+
- 切换编码后,后续新增记录按新编码显示。
44+
45+
### 2. 校验工具
46+
47+
增加常用校验计算能力,减少用户借助外部工具的成本。
48+
49+
需求:
50+
51+
- 支持 CRC16-Modbus、CRC16-CCITT、CRC32、LRC、XOR、SUM8。
52+
- 支持输入文本或 HEX 数据计算校验值。
53+
- 支持大小端显示校验结果。
54+
- 支持发送时自动追加指定校验码。
55+
- 自动追加校验时,应在发送记录中体现最终发送字节。
56+
57+
验收:
58+
59+
- 对标准测试向量能得到正确校验结果。
60+
- HEX 输入非法时给出明确错误位置。
61+
- 自动追加 CRC16-Modbus 后,发送字节包含低字节在前的校验码。
62+
63+
### 3. 帧解析增强
64+
65+
当前已有按接收间隔自动断帧。后续需要支持更多协议调试场景。
66+
67+
需求:
68+
69+
- 支持按固定帧头断帧。
70+
- 支持按固定帧尾断帧。
71+
- 支持按固定长度断帧。
72+
- 支持按超时断帧继续保留。
73+
- 每帧可显示时间、方向、长度、HEX、文本、校验状态。
74+
- 断帧策略需要持久化。
75+
76+
验收:
77+
78+
- 配置帧尾 `0D 0A` 后,接收数据按 CRLF 分帧。
79+
- 配置固定长度 8 后,连续数据按 8 字节分帧。
80+
- 断帧显示不影响原始接收保存。
81+
82+
### 4. Modbus RTU 辅助
83+
84+
增加常用 Modbus RTU 调试入口,降低手写帧成本。
85+
86+
需求:
87+
88+
- 支持读线圈、读离散输入、读保持寄存器、读输入寄存器。
89+
- 支持写单线圈、写单寄存器、写多线圈、写多寄存器。
90+
- 表单自动生成请求帧并追加 CRC16-Modbus。
91+
- 可直接发送生成的请求帧。
92+
- 对响应帧进行基础解析:站号、功能码、数据、异常码、CRC 是否正确。
93+
94+
验收:
95+
96+
- 功能码 03 读保持寄存器请求生成正确。
97+
- 响应 CRC 错误时明确标记。
98+
- Modbus 辅助不影响普通终端收发流程。
99+
100+
### 5. 搜索体验增强
101+
102+
当前已有关键字过滤,但还缺少终端常用的定位能力。
103+
104+
需求:
105+
106+
- 支持上一个/下一个匹配。
107+
- 显示匹配数量和当前匹配序号。
108+
- 支持大小写敏感开关。
109+
- 支持正则搜索开关。
110+
- 支持不隐藏其他记录,仅高亮匹配内容。
111+
112+
验收:
113+
114+
- 搜索时可以在终端记录中逐项跳转。
115+
- 清空搜索后恢复原显示。
116+
- 正则表达式非法时提示错误且不崩溃。
117+
118+
## P1:实用增强
119+
120+
### 6. 常用包增强
121+
122+
当前已有常用包基础能力,需要增强批量管理能力。
123+
124+
需求:
125+
126+
- 支持常用包分组。
127+
- 支持备注字段。
128+
- 支持启用/禁用单条常用包。
129+
- 支持 JSON 导入导出。
130+
- 支持批量发送选中常用包。
131+
132+
### 7. 宏命令 / 测试序列
133+
134+
用于设备初始化、AT 指令测试和回归测试。
135+
136+
需求:
137+
138+
- 支持多步骤发送。
139+
- 支持步骤间延时。
140+
- 支持等待指定响应。
141+
- 支持循环次数。
142+
- 支持失败中止。
143+
- 支持导出测试结果。
144+
145+
### 8. 自动应答
146+
147+
用于握手协议、简单设备模拟和交互式调试。
148+
149+
需求:
150+
151+
- 支持收到文本/HEX/正则匹配后自动发送指定内容。
152+
- 支持延时应答。
153+
- 支持启用/禁用规则。
154+
- 自动应答记录需要标记来源,避免和手动发送混淆。
155+
156+
### 9. 日志系统增强
157+
158+
当前已有导出和原始接收保存,需要增强长期记录能力。
159+
160+
需求:
161+
162+
- 支持自动日志文件滚动。
163+
- 文件名支持日期、串口名、波特率。
164+
- 支持保存为可读 TXT、CSV 和原始 BIN。
165+
- 支持限制单个日志文件大小。
166+
- 日志状态需要在界面中明确展示。
167+
168+
### 10. 多标签会话
169+
170+
用于同时调试多个设备或多个 USB 转串口。
171+
172+
需求:
173+
174+
- 支持同时打开多个串口。
175+
- 每个会话独立终端、发送区、统计和日志设置。
176+
- 支持复制当前会话配置创建新标签。
177+
- 支持关闭单个会话时释放串口资源。
178+
179+
## P2:专业能力
180+
181+
### 11. 快速绘图
182+
183+
README 中已经标注快速绘图暂未开放。
184+
185+
需求:
186+
187+
- 从接收文本中提取数字。
188+
- 支持多通道曲线。
189+
- 支持实时暂停和清空。
190+
- 支持曲线数据导出 CSV。
191+
192+
### 12. 数据表格视图
193+
194+
提供比纯终端更结构化的分析视图。
195+
196+
需求:
197+
198+
- 按帧显示时间、方向、长度、HEX、文本、校验。
199+
- 支持排序、过滤、复制单帧。
200+
- 支持从表格定位到终端记录。
201+
202+
### 13. 脚本插件能力
203+
204+
为复杂调试流程预留扩展空间。
205+
206+
需求:
207+
208+
- 支持一种脚本语言执行自动化逻辑。
209+
- 脚本可发送数据、读取收到的数据、写日志。
210+
- 脚本异常需要隔离并提示,不应影响主程序稳定性。
211+
212+
### 14. 协议模板
213+
214+
用于非标准私有协议解析。
215+
216+
需求:
217+
218+
- 支持定义帧头、长度字段、命令字、载荷、校验字段。
219+
- 支持保存和切换模板。
220+
- 支持按模板解析收到的帧。
221+
222+
### 15. 串口转发 / 桥接
223+
224+
用于调试中间链路和设备转发。
225+
226+
需求:
227+
228+
- 支持串口 A 到串口 B 双向转发。
229+
- 支持可选过滤规则。
230+
- 支持转发日志。
231+
- 支持转发方向统计。
232+
233+
## 推荐实施顺序
234+
235+
1. 编码支持。
236+
2. 校验工具。
237+
3. 帧解析增强。
238+
4. Modbus RTU 辅助。
239+
5. 搜索体验增强。
240+
241+
前五项与现有终端、发送、记录模型关系最直接,收益高且工程风险可控。多标签、脚本插件和协议模板涉及架构扩展,建议在基础能力稳定后再实施。

0 commit comments

Comments
 (0)