- 开发工具
- 测试
- 通信
【免费下载链接】SerialTest
Data transceiver(monitor)/realtime plotter/shortcut/file transceiver over serial port/Bluetooth/network on Windows/Linux/Android/macOS | 跨平台串口/蓝牙/网络调试助手,带数据收发/实时绘图/快捷发送/文件收发面板,可在PC和Android设备上使用
本文以 CHANGELOG.md(及其中文版 CHANGELOG_zh_CN.md)为主体,完整梳理 SerialTest——一款支持 Windows/Linux/macOS/Android 的串口/蓝牙/网络数据收发与实时绘图工具——自首个公开版本以来的全部功能演进。读完后,你不仅能快速判断每个版本引入的能力(命令行参数、时间戳、BLE 兼容、窗口布局恢复等),还能对照当前仓库源码确认这些能力的实际实现位置,从而在选型、排障与二次开发时有据可依。
一、版本文档体系与当前版本
仓库根目录的 CHANGELOG.md 与 doc/CHANGELOG/CHANGELOG_zh_CN.md 互为中英对照,从 V0.1(首个公开版本)一直记录到 V0.3.5。当前仓库所对应的版本号为 V0.3.5,这一点可以在工程文件中得到双重印证:
- src/SerialTest.pro 中声明
VERSION = 0.3.5,并通过DEFINES += APP_VERSION=\\\"$$VERSION\\\"宏暴露给源码(用于解决 V0.2.4 记录的“版本号显示问题”); - src/android/AndroidManifest.xml 承载 Android 端版本号,.pro 文件中第 105 行注释也明确提示升级时需同步修改。
各版本的条目通常附带 commit 短哈希,便于追溯具体改动。下面按时间线完整继承原文档的全部条目,并结合源码逐段印证。
二、V0.1 时代:串口调试助手的地基
V0.1 —— 首个公开版本
原始能力即是一款可用的数据收发/绘图工具,具体特性在后续版本条目中逐步披露。
V0.1.1 —— 编码与偏好的补全
- 支持含中文(非 ASCII 字符)的启动路径
- 支持各种字符编码
- 保存用户偏好设置
- 美化部分 UI
- 支持在绘图面板中隐藏某一条曲线
- 绘图时自动识别有效数据
- 修复一些 BUG
其中“非 ASCII 路径支持”在当前源码中仍然保留着当年的实现痕迹:src/main.cpp 在创建QApplication前把QT_PLUGIN_PATH设置为基于QDir解析的插件目录绝对路径,注释明确写着这是“处理非 ASCII 路径的技巧”——因为路径含非 ASCII 字符时 Qt 无法自动定位插件。这一细节说明 CHANGELOG 的这条记录并非空泛表述,而是有具体机制支撑的。
V0.1.2 —— 易用性与面板持久化
- 易用性提升
- 控制面板(CtrlTab)改用 JSON 存储条目
- 保存数据收发面板中收/发区域的占比(splitter 位置)
- 支持显示串口流控信号
- 修复一些 BUG
“JSON 存储控制条目”对应现在的demo/Control/示例,例如 AT_HC02_zh_CN.json、AT_HC05_zh_CN.json、AT_JDY34_zh_CN.json,即蓝牙模块 AT 命令快捷面板配置。
三、V0.2 大版本:多传输层、文件收发与配置体系
V0.2 是 CHANGELOG 中条目最多、影响最深远的一版,奠定了今日 SerialTest 的产品形态:
- 支持 TCP 客户端/服务器、UDP、蓝牙 SPP 客户端/服务器与蓝牙 BLE
- TCP 服务器和蓝牙 SPP 服务器支持一对多连接,可任意指定收发对象、断开指定连接
- TCP 服务器、TCP 客户端和 UDP 支持指定本机 IP 和端口,也可监听所有网卡
- 支持记录连接历史并指定别名,单击历史项即可复用参数
- 文件收发:快速 CRC32 校验,发送途中可自动延时等待(throttling)
- 可导入/导出配置文件,支持在多个目录中搜索配置文件
- 支持转义字符(
\uHHHH、\nnn、\r、\n、\t、...) - 实时修改串口参数(on the fly)
- 界面增强:窗口半透明、语言选择、字体更换
- 性能提升;Android 端绘图手势优化
- Android 端可分享文本至 SerialTest 并直接发送
从源码结构看,这些能力分别落在对应模块中:传输层统一由 connection.cpp 承载(串口、TCP/UDP、蓝牙 SPP/BLE 均在其内部按m_type分发);文件收发的快速 CRC32 由 asynccrc.cpp 与 filexceiver.cpp 在独立线程中完成,与 README 中“CRC32 和文件 IO 分离线程”的描述一致。
V0.2.1 —— 命令行与可移植性
- 支持通过命令行参数指定配置文件路径
- 修复文件收发的一些 BUG
- 对可滚动组件添加触摸屏手势支持
命令行参数在 src/main.cpp 中由QCommandLineParser实现:注册了--config-path选项(描述为 "Use specified file as config file")。未指定时按“当前工作目录preference.ini→ 系统配置目录 → 在工作目录新建”的顺序查找,这正是项目“单配置文件、绿色便携”特性的落地方式,也是 V0.1.1“支持非 ASCII 路径”之外的第二条可移植性证据链。
V0.2.2 —— 暗黑主题与控制面板生态
- 添加暗黑主题(采用 QDarkStyleSheet 方案)
- 绘图面板支持单向捏合缩放
- 添加常用控制命令片段(位于
demo/Control/文件夹) - 支持拖拽配置文件到控制面板
当前仓库中的 src/qdarkstyle/dark/darkstyle.qss 与 src/qdarkstyle/light/lightstyle.qss 即该版本的产物,且 src/SerialTest.pro 将 dark/light 两套样式都编译进qrc资源——这也为 V0.3.2“不重启切换主题”埋下伏笔。README 中“主题文件遵循其原项目许可”的说明同样指向这一目录。
V0.2.3 —— 稳定性与兼容性强化
- 修复一处崩溃
- 修复 AsyncCRC 中的一处 BUG
- 串口 VID/PID 同时以十六进制和十进制显示
- 向下兼容至 Qt 5.9
- 重构串口历史记录逻辑
- 打开串口失败时给出更详细的错误提示
- QCustomPlot 升级至 2.1.1
- 修复浮动窗口误触发关闭的问题(issue #22)
- UI 上的 DTR/RTS 状态总是同步至串口
“向下兼容至 Qt 5.9”与仓库中 src/qcustomplot.h 对应的 QCustomPlot 2.1.1 版本(见 .pro 注释及 README 构建说明)相互印证。DTR/RTS 的 UI→设备同步是 V0.3.5 兼容性改进的直接前身,见下文。
V0.2.4 —— 版本号显示修复
- 正确显示版本号(commit 7b235fe40e)
四、V0.3 时代:Android 硬件串口与时间戳
V0.3(已弃用,请使用 V0.3.1 或更高版本)
- 支持显示接收数据时间戳
- 支持 Android 硬件串口(commit 47de23b11a)
V0.3.1 仅修复一个编译错误(commit 9e9cdc1837),属于对 V0.3 的直接修复版本,这也解释了为何 CHANGELOG 将 V0.3 标记为 Deprecated。
V0.3.2 —— 体验增强
- 修复控制面板 2 处 BUG
- 修复时间戳中的一处错误
- 支持不重启应用直接切换主题
- 添加时间戳合并功能(基于超时的分包:短间隔内的数据合并为一个时间戳)
- Android:支持分享文件到 SerialTest 并发送(需使用 Qt 5.15.10 或更高版本编译)
时间戳相关的两个特性(“显示时间戳”来自 V0.3,“短间隔合并”来自 V0.3.2)与 src/metadata.h 中的Metadata(pos, len, timestamp)结构对应——每段接收数据都携带位置、长度与时间戳元信息,mainwindow.cpp 中onMergeTimestampChanged/onTimestampIntervalChanged两个槽函数分别承接“是否合并”与“合并超时阈值”两个设置项。
V0.3.3 —— 蓝牙服务 UUID 与绘图点模式
- 蓝牙客户端模式支持指定目标服务 UUID
- Android 端支持显示 IPv6 地址
- 数据面板支持记住待发送数据
- 支持同时清除接收数据与图表
- 改进 Android 权限请求过程
- 绘图添加“仅绘制数据点”模式
- 修复接收带时间戳的十六进制数据时缺少分隔符的问题
“指定服务 UUID”在 src/connection.cpp 中有直接对应:BLE 连接时按m_currBTArgument.RxCharacteristicUUID/TxCharacteristicUUID在已发现的服务(含 included services)中逐一匹配特征值。
五、V0.3.5 深度解析(当前版本):逐条源码印证
V0.3.5 是 CHANGELOG 的最新条目,也是当前仓库源码所处的版本。下面对每一条改进给出源码级验证。
5.1 BLE 兼容:支持 WriteNoResponse 操作
- 原文档:改进 BLE 兼容性,新增对 WriteNoResponse 操作的支持(commit 0e5c82ea6c)
在 src/connection.cpp 的服务发现回调BLEC_onServiceDetailDiscovered中,对目标特征值同时检测Write与WriteNoResponse两种属性标志:
const bool hasWriteProperty = it->properties().testFlag(QLowEnergyCharacteristic::Write); const bool hasWriteNoResponseProperty = it->properties().testFlag(QLowEnergyCharacteristic::WriteNoResponse); if(hasWriteProperty || hasWriteNoResponseProperty) { // Use WRITE if both properties are supported m_BLETxWriteMode = hasWriteProperty ? QLowEnergyService::WriteWithResponse : QLowEnergyService::WriteWithoutResponse; ... }逻辑很清晰:两种属性都具备时优先使用带响应的Write;只支持 WriteNoResponse 的特征值(许多低功耗外设仅开放无响应写入)也能建立连接。该检测在单服务单特征(BLE_1S1C)、单服务双特征(BLE_1S2C)、双服务双特征(BLE_2S2C)三种收发模式分支中各出现一次(第 1274、1298、1327 行附近),说明三种拓扑都获得了同等兼容改进。
5.2 串口兼容:连接时忽略 DTR/RTS 设置失败
- 原文档:建立连接并尝试设置 DTR/RTS 信号时,将设置失败视为非致命错误(commit cae854bcdd)
这是 V0.2.3“UI 状态总同步至串口”的兼容性补丁。src/datatab.cpp 的onConnEstablished()中保留了非常具体的问题背景注释:
// Some devices, such as Quectel EC200U/EC600U/EG912U, may not support getting or setting // the DTR/RTS signals. ... they may report QSerialPort::UnknownError instead of // QSerialPort::UnsupportedOperationError. // This can cause the Connection class to close the device unexpectedly.实现方式是临时将QSerialPort::UnknownError加入错误忽略表(SP_setIgnoredErrorList),同步完 DTR/RTS 后立即恢复原忽略表。而 connection.cpp 的onErrorOccurred()中,命中忽略表的错误只打印日志、不触发close(),从而避免“设备不支持控制信号 → 报 UnknownError → 连接被误断开”的连锁反应。这是排障时值得注意的行为边界:被忽略的串口错误不会在界面上以断线形式体现。
5.3 Windows MSVC 蓝牙支持
- 原文档:为 MSVC 编译器构建添加蓝牙支持(commit 9760cccda8)
此前 Windows 上以 MinGW 编译的构建可能缺少 WinRT 蓝牙实现,MSVC 构建则依赖 Windows App SDK。src/SerialTest.pro 中的条件编译块清楚展示了平台分叉:
win32-msvc*: { # For Bluetooth LE in WinRT CONFIG += c++17 SOURCES += winrtbluetooth.cpp HEADERS += winrtbluetooth.h LIBS += -lwindowsapp } else { CONFIG += c++11 }即只有 MSVC 构建会额外编译 winrtbluetooth.cpp(WinRT BLE 客户端封装)并链接-lwindowsapp,且因此需要 C++17;其他平台(含 MinGW)保持 C++11。
5.4 窗口布局(Dock 状态)自动恢复
- 原文档:支持恢复停靠窗口(dock widgets)状态(commit c88b47e1b0)
mainwindow.cpp 的dockInit()将各功能面板(数据、绘图、控制、文件、设置等)包装为QDockWidget,允许浮动/移动/页签化;初始化末尾从配置中读取 Base64 编码的WindowState并调用restoreState()恢复:
settings->beginGroup("SerialTest"); const QByteArray windowStateData = QByteArray::fromBase64(settings->value("WindowState", "").toString().toLatin1()); settings->endGroup(); if(!windowStateData.isEmpty()) restoreState(windowStateData);结合 src/mainwindow.ui 的QMainWindow结构,用户可以自定义“单窗口多面板”或“多窗口分屏”布局并在重启后保持。事件过滤器(eventFilter)还实现了“浮动窗口点击关闭按钮时自动收拢回停靠区”的防误关行为,正是 V0.2.3 修复 issue #22 的延续。
5.5 触摸滚动手势开关
- 原文档:新增启用/禁用触摸滚动手势的选项(commit fda6389c31)
设置面板中的General_touchScrollBox复选框(settingstab.cpp)发出TouchScrollStateChanged信号,由 mainwindow.cpp 分发给DeviceTab::setTouchScroll、CtrlTab::setTouchScroll与SettingsTab::setTouchScroll三处滚动列表。这是 V0.2.1“可滚动组件触摸手势”的精细化:用户现在可以按需关闭,避免在 PC 触屏或 Android 横屏使用时误触发滚动。
5.6 其余条目
- 状态栏中用 "OK" 替换 "√"(U+221A),保证跨平台字形一致(commit 574360343e)——属于国际化/字体回退问题的务实处理;
- DataTab 追加接收数据时保持已有选区不变(commit 86508ff76b)——与 V0.3.3“记住待发送数据”一起改善了数据面板的交互连续性;
- 修复若干其他 BUG。
V0.3.4 仅包含一项变更:Android 使用自适应启动器图标(adaptive launcher icon,commit da9f2caaf1),对应 src/android/res/mipmap-anydpi-v26/icon.xml 的矢量图层式图标与 icon_foreground.xml。
六、面向不同使用场景的版本选择建议
结合 CHANGELOG 与源码,可以得到几条实用的选择依据(均以当前仓库内容为准):
| 需求 | 最低版本 | 依据 |
|---|---|---|
使用命令行--config-path指定配置文件 | V0.2.1 | src/main.cpp |
| 接收数据时间戳显示 / 短间隔合并分包 | V0.3 / V0.3.2 | src/metadata.h、src/mainwindow.cpp |
| 蓝牙 BLE 只支持 WriteNoResponse 的外设 | V0.3.5 | src/connection.cpp |
| 4G 模块(Quectel 等)连接时不被 DTR/RTS 错误断开 | V0.3.5 | src/datatab.cpp |
| MSVC 编译的 Windows 构建需要蓝牙 | V0.3.5 | src/SerialTest.pro |
| 构建环境仅 Qt 5.9 | V0.2.3 起兼容,注意 V0.3.2 的 Android 文件分享需 Qt 5.15.10+ | CHANGELOG V0.2.3 / V0.3.2 |
| 避开已知崩溃的弃用版本 | 不要用 V0.3,至少 V0.3.1 | CHANGELOG 中 "(Deprecated)" 标注 |
需要说明的适用前提:以上“最低版本”结论由 CHANGELOG 的条目顺序与源码现状推断得出;仓库未保留旧版本源码,因此各历史版本的具体行为以 CHANGELOG 条目描述为准。
七、结语
CHANGELOG.md 用简洁的条目记录了 SerialTest 从“单平台串口调试助手”成长为“跨平台多传输层数据收发 + 实时绘图工具”的完整过程:V0.1 打地基(编码/偏好/绘图),V0.2 扩传输(TCP/UDP/蓝牙/文件收发/配置体系),V0.2.x 强稳定(兼容 Qt 5.9、崩溃修复、暗黑主题),V0.3 补 Android 硬件串口与时间戳,V0.3.2–V0.3.5 做现代打磨(主题热切换、BLE 兼容、布局恢复、触摸手势开关)。仓库中 src/SerialTest.pro 的VERSION = 0.3.5与各条目对应的 commit 哈希,为每一条历史记录提供了可回溯的落点。对于阅读者而言,这份 CHANGELOG 的价值不仅在于“知道了什么功能”“从哪个版本开始有”,更在于它把每次兼容性修复(BLE WriteNoResponse、DTR/RTS 非致命错误)都对应到真实设备场景上——这正是本文结合源码逐条印证的核心目的。
- 开发工具
- 测试
- 通信
【免费下载链接】SerialTest
Data transceiver(monitor)/realtime plotter/shortcut/file transceiver over serial port/Bluetooth/network on Windows/Linux/Android/macOS | 跨平台串口/蓝牙/网络调试助手,带数据收发/实时绘图/快捷发送/文件收发面板,可在PC和Android设备上使用
相关推荐
regl 版本演进全解析:从 0.0.0 到 2.1.1 的功能脉络与源码印证
regl 版本演进全解析:从 0.0.0 到 2.1.1 的功能脉络与源码印证 regl 是一个"函数式 WebGL"渲染框架,其核心设计是用声明式的 Java
MusicFree 版本演进全解析:从 0.0.1-alpha 到 0.6.2 的功能脉络与源码印证
MusicFree 版本演进全解析:从 0.0.1 alpha 到 0.6.2 的功能脉络与源码印证 本文以 changelog.md https://link
音视频移动开发插件系统从 v0.1 到 v2.19:Sandpack 版本演进史与功能发展脉络
从 v0.1 到 v2.19:Sandpack 版本演进史与功能发展脉络 Sandpack 是一套用于构建"实时运行代码编辑体验"的组件工具包(组件库),其核心
前端开发工具UI组件
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考