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, 串口工具, 客户端加密, 桌面应用, 终端工具, 设备发现