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 正常退出,无崩溃
94 lines
3.0 KiB
Markdown
94 lines
3.0 KiB
Markdown
# 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` 不依赖 `ui`
|
||
- `plugins` 依赖 `core` 接口,不直接依赖 `ui`
|
||
- `comm` 与 `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`。
|