e7cf44504c
## 架构升级:Service Registry + Bridge 模式 - 新增 PluginSDK/IPluginServices.h:10 个纯虚服务接口(IDataProvider/ILinkProvider/...) - 新增 MavLinkServiceBridge:单 QObject 实现全部服务,隔离 MavLinkNode 依赖 - 升级 PluginManifest:支持 plugin.json 的 provides/consumes 声明式依赖 - 实现 ExtensionHost::autoWire():元对象自省自动连接信号槽 - 集成到 AppController:initModules() 中创建桥接器并注册到 ServiceRegistry - CockpitPlugin 演示服务发现:initialize() 中通过 PluginContext 查找服务 ## 代码清理 - Plugins/opmap:~280 行死代码(waypointsetting 100行注释块/tilematrix 54行/等27个文件) - Plugins/MavLinkNode:~200 行 GBK 乱码注释翻译为 UTF-8 + 12 行注释死代码 - Plugins/ToolsUI:~222 行死代码(ECU.cpp 82行/INS.cpp 113行/Parse/ToolsUI 等) - StatusUI/Setting/MissionUI:~65 行注释死代码 - Cockpit/leftladder.cpp:10 处 GBK 乱码翻译为中文 - 清理头文件注释掉的 #include(19 处)、空 if-else 分支、注释变量声明 ## 编译验证 - [100%] Built target GCS 零错误 - 运行时 timeout 3s 正常退出,无崩溃
3.0 KiB
3.0 KiB
GCS 工程目录规范 Skill
触发条件
当用户要求:
- "创建新工程" / "新建项目" / "初始化工程"
- "按标准规范组织代码" / "工程目录规范"
- "重构工程目录" / "整理工程结构"
- "建立 GCS 项目" / "地面站工程模板"
时,按照本规范生成工程骨架。
标准工程结构
project-root/
├── src/
│ ├── app/ # 主程序 + MainWindow + AppController
│ ├── core/ # 核心业务(protocol/mission/parameter/vehicle)
│ ├── comm/ # 通讯层(serial/udp/DataLink)
│ ├── ui/ # UI 组件
│ │ ├── panels/ # 功能面板(cockpit/map/mission/setting/status)
│ │ ├── widgets/ # 可复用控件(inputter/selector/scope)
│ │ └── theme/ # 皮肤/字体
│ ├── plugins/ # 插件系统 + 内置工具插件
│ └── config/ # 配置管理
├── tests/
│ ├── unit/ # 单元测试
│ ├── integration/ # 集成测试
│ └── fuzz/ # 模糊测试
├── resources/
│ ├── icons/
│ ├── qrc/
│ ├── translations/
│ └── styles/
├── docs/
│ ├── architecture.md
│ ├── build.md
│ └── PROJECT_LAYOUT.md # 本规范的详细文档
├── scripts/
│ └── build_release.bat
├── third_party/
│ └── mavlink/
├── .clang-format
├── .gitignore
├── CMakeLists.txt
└── README.md
命名约定
| 类型 | 规范 | 示例 |
|---|---|---|
| 目录 | snake_case |
remote_control/ |
| 文件 | PascalCase.ext |
DataLink.h |
| 类名 | PascalCase |
MavLinkNode |
| 成员 | m_camelCase |
m_portName |
| 静态常量 | kPascalCase |
kDefaultBaud |
| 信号 | 过去式 | dataReceived |
| 槽 | onCamelCase |
onDataReceived |
模块依赖规则
ui依赖core,core不依赖uiplugins依赖core接口,不直接依赖uicomm与core通过接口解耦- 禁止循环依赖
构建要求
- CMake 3.16+,每模块独立
CMakeLists.txt - qmake
.pri兼容(渐进迁移) - C++17 标准
third_party/仅放头文件或无构建系统的库
当前工程迁移映射
从现有 gcs_nf 工程迁移到标准结构时,使用以下映射:
| 当前 | 标准 |
|---|---|
App/ |
src/app/ + src/ui/panels/ + src/ui/widgets/ + src/plugins/ |
MavLinkNode/ |
src/core/protocol/ |
dlink/ |
src/comm/ |
Cockpit/ |
src/ui/panels/cockpit/ |
opmap/ |
src/ui/panels/map/ |
Skin/ |
src/ui/theme/ |
VehicleManage/ |
src/core/vehicle/ |
mavlink/ |
third_party/mavlink/ |
图标/ |
resources/icons/ |
document/ |
docs/ |
详细规范见 docs/PROJECT_LAYOUT.md。