☰
SerialTest 版本演进全解:从 V0.1 到 V0.3.5 的功能脉络与源码印证
2026/10/14 16:23:36 网站建设 项目流程
  • 开发工具
  • 测试
  • 通信

【免费下载链接】SerialTest

Data transceiver(monitor)/realtime plotter/shortcut/file transceiver over serial port/Bluetooth/network on Windows/Linux/Android/macOS | 跨平台串口/蓝牙/网络调试助手,带数据收发/实时绘图/快捷发送/文件收发面板,可在PC和Android设备上使用

项目地址:https://gitcode.com/gh_mirrors/se/SerialTest
点击查看免费下载

本文以 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.1src/main.cpp
接收数据时间戳显示 / 短间隔合并分包V0.3 / V0.3.2src/metadata.h、src/mainwindow.cpp
蓝牙 BLE 只支持 WriteNoResponse 的外设V0.3.5src/connection.cpp
4G 模块(Quectel 等)连接时不被 DTR/RTS 错误断开V0.3.5src/datatab.cpp
MSVC 编译的 Windows 构建需要蓝牙V0.3.5src/SerialTest.pro
构建环境仅 Qt 5.9V0.2.3 起兼容,注意 V0.3.2 的 Android 文件分享需 Qt 5.15.10+CHANGELOG V0.2.3 / V0.3.2
避开已知崩溃的弃用版本不要用 V0.3,至少 V0.3.1CHANGELOG 中 "(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设备上使用

项目地址:https://gitcode.com/gh_mirrors/se/SerialTest
点击查看免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询