norlag/Serial-scanner

GitHub: norlag/Serial-scanner

一款使用 C11 和 GTK3 开发的跨平台串口扫描 GUI 工具,支持自动发现串口设备并智能检测波特率。

Stars: 0 | Forks: 0

# Serial Scanner 一款用于发现和扫描串口/COM 口的跨平台桌面 GUI 应用程序。使用纯 C11 语言开发,界面采用 GTK3,跨平台串口通信使用 libserialport。 ## 功能特性 - **设备发现**:自动检测并列出系统中所有可用的串口 - **智能自动波特率扫描**:提供三种扫描模式以检测设备波特率: - **模式 A(Echo Loopback)**:发送字符并等待回显 - **模式 B(Passive Listen)**:监听有效的 ASCII 数据流 - **模式 C(AT Command)**:发送 AT 命令并检查 OK 响应 - **实时控制台**:带有 [INFO]、[TRY]、[TIMEOUT] 和 [SUCCESS] 标签的彩色日志输出 - **交互式终端**:向已发现的设备发送手动命令 - **跨平台**:支持 Linux 和 Windows ## 技术栈 - **编程语言**:C11 - **GUI 框架**:GTK3 - **串口通信**:libserialport(跨平台) - **构建系统**:CMake - **多线程**:使用 pthreads 进行后台扫描,使用 g_idle_add() 实现 GTK 线程安全的回调 ## 前置条件 ### Linux ``` # Ubuntu/Debian sudo apt-get install build-essential cmake libgtk-3-dev libserialport-dev # Fedora sudo dnf install gcc cmake gtk3-devel libserialport-devel # Arch sudo pacman -S base-devel cmake gtk3 libserialport ``` ### Windows (MSYS2/MinGW) 1. 从 https://www.msys2.org/ 安装 MSYS2 2. 打开 MSYS2 MinGW64 终端 3. 安装依赖项: pacman -S mingw-w64-x86_64-gcc mingw-w64-x86_64-cmake mingw-w64-x86_64-gtk3 mingw-w64-x86_64-libserialport ## 构建说明 ``` mkdir build cd build cmake .. make ``` ### Windows 分发(DLL 打包) 在 Windows 上,可执行文件依赖于约 30 个 GTK3 DLL。CMake 构建系统 会自动将这些文件打包到可执行文件旁的 `dist/` 子目录中。 **使用 CMake(推荐):** ``` mkdir build && cd build cmake -G "MinGW Makefiles" .. cmake --build . ``` 打包后的文件位于 `build/dist/` 中。通过以下方式启动: ``` build\dist\serial-scanner.bat ``` **手动打包:** ``` dist\setup_dlls.bat ``` 这会将所有必需的 DLL 复制到可执行文件旁边。 **从 MSYS2 终端运行:** ``` ./build/serial-scanner.exe ``` MSYS2 MinGW64 终端会自动设置正确的 PATH。 ## 运行说明 ``` ./serial-scanner ``` 注意:在 Linux 上,您可能需要将您的用户添加到 `dialout` 用户组才能访问串口: ``` sudo usermod -a -G dialout $USER ``` ## 架构 本应用程序采用模块化架构: - `src/main.c` - GTK3 UI 和应用程序入口点 - `src/device.c` - 设备枚举和端口管理(libserialport 封装) - `src/scanner.c` - 扫描器生命周期和后台线程管理 - `src/scan_echo.c` - Echo loopback 扫描模式 - `src/scan_passive.c` - Passive listening 扫描模式 - `src/scan_at.c` - AT command 扫描模式 ### 线程模型 - **主线程(Main Thread)**:GTK 事件循环和 UI 更新 - **工作线程(Worker Thread)**:串口扫描(pthread) - **线程安全**:后台线程使用 `g_idle_add()` 将日志消息安全地分发给 GTK 主线程 ## 仓库结构 ``` / ├── .github/workflows/ci.yml # GitHub Actions CI for Linux and Windows ├── CMakeLists.txt # Cross-platform build configuration ├── README.md # This file ├── FIX.md # Windows DLL fix documentation ├── DIAGNOSIS.md # Technical analysis of GTK3 DLL issue ├── cmake/ │ └── copy_dlls.cmake # Post-build DLL bundling script ├── dist/ │ ├── setup_dlls.bat # Standalone DLL bundling script │ └── serial-scanner.bat # Launcher with PATH fallback ├── include/ │ ├── device.h # Device enumeration API │ ├── scanner.h # Scanner lifecycle API │ └── scan_modes.h # Scan mode definitions └── src/ ├── main.c # GTK3 UI and main entry point ├── device.c # Device management implementation ├── scanner.c # Scanner orchestration ├── scan_echo.c # Echo loopback mode ├── scan_passive.c # Passive listening mode └── scan_at.c # AT command mode ``` ## 许可证 MIT License
标签:Bash脚本, C11, GTK3, 串口工具, 客户端加密, 桌面应用, 终端工具, 设备发现