feat: Service Registry + Bridge 解耦架构 + 全工程代码清理

## 架构升级: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 正常退出,无崩溃
This commit is contained in:
2026-06-01 09:46:36 +08:00
parent 6fbb96dd9a
commit e7cf44504c
2188 changed files with 549867 additions and 45008 deletions
+22
View File
@@ -0,0 +1,22 @@
# VehicleManage — 载具管理(共享库 / DLL)
add_library(VehicleManage SHARED
src/Vehicle.cpp
src/VehicleManage.cpp
inc/Vehicle.h
inc/VehicleManage.h
inc/VehicleType.h
)
target_include_directories(VehicleManage PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/inc
)
target_link_libraries(VehicleManage PUBLIC
Qt${QT_VERSION_MAJOR}::Core
Qt${QT_VERSION_MAJOR}::Widgets
mavlink_headers
)
target_compile_definitions(VehicleManage PRIVATE VEHICLEMANAGE_LIBRARY)
set_target_properties(VehicleManage PROPERTIES PREFIX "" SUFFIX ".dll" RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin/plugins/VehicleManage")
@@ -0,0 +1,12 @@
#ifndef VEHICLEMANAGE_GLOBAL_H
#define VEHICLEMANAGE_GLOBAL_H
#include <QtCore/qglobal.h>
#if defined(VEHICLEMANAGE_LIBRARY)
# define VEHICLEMANAGE_EXPORT Q_DECL_EXPORT
#else
# define VEHICLEMANAGE_EXPORT Q_DECL_IMPORT
#endif
#endif // VEHICLEMANAGE_GLOBAL_H
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="VehicleManage_zh_CN">
</TS>
+320
View File
@@ -0,0 +1,320 @@
#ifndef VEHICLE_H
#define VEHICLE_H
#include "VehicleManage_global.h"
#include <QObject>
#include "QIcon"
#include "QHash"
#include "QMap"
#include "QDebug"
#include "QDateTime"
#include "mavlink.h"
#include "QTimer"
/*
定时往外发消息
航线 航迹 图片 颜色
参数 状态 指令
消息 警告
自己在发送心跳
有自己的定时器,定时查询是否要解码,定时检查是不是来数据了
*/
class VEHICLEMANAGE_EXPORT Vehicle : public QObject
{
Q_OBJECT
public:
explicit Vehicle(int id = 1, QObject *parent = nullptr);
~Vehicle();
public slots:
QString Name(void)
{
return name;
}
void setName(QString value)
{
name = value;
}
QIcon Icon(void)
{
return icon;
}
void setIcon(QIcon value)
{
icon = value;
}
QColor TailColor(void)
{
return tailColor;
}
void setTailColor(QColor value)
{
tailColor = value;
}
QColor WayColor(void)
{
return wayColor;
}
void setWayColor(QColor value)
{
wayColor = value;
}
int SysID(void)
{
return sysid;
}
void setSysID(int value)
{
sysid = value;
}
int Type(void)
{
return type;
}
void setType(int value)
{
type = value;
}
bool Selected(void)
{
return isSelected;
}
void setSelected(bool value)
{
isSelected = value;
}
bool Heartbeat(void)
{
return heartbeat;
}
void setHeartbeat(bool value)
{
heartbeat = value;
//发一次声音 beep
}
bool Arm(void)
{
return arm;
}
void setArm(bool value)
{
arm = value;
//有变化后要播报语音
}
int Flightmode(void)
{
return flightmode;
}
void setFlightmode(int value)
{
flightmode = value;
//有变化后要播报语音
}
int Flightstate(void)
{
return flightstate;
}
void setFlightstate(int value)
{
flightstate = value;
//有变化后要播报语音
}
void setMsg(mavlink_message_t *msg);
void setParam(mavlink_param_value_t *param);
void setMission(mavlink_mission_item_int_t *item);
void _Handler(mavlink_message_t msg);
private slots:
void receiveMessage(mavlink_message_t message);
void heartbeattimeout(void);
signals:
private:
QTimer *heartbeattimer = nullptr;
//一些可以配置的东西可以存在json里面,一旦生成这个飞机就导入json的设置
//基本信息
QString name = "vehicle";
QIcon icon = QIcon("fixwing.png");
QColor tailColor = "#026F80";
QColor wayColor = "#F09382";
qint32 group = 0;//当前飞机的组别
qint32 sysid = 0;//当前飞机的ID
qint32 type = 0;//设备类型
bool isSelected = false;
bool issendheartbeat = false;
bool heartbeat = false;//反复变化
bool arm = false;//false 上锁 true 解锁
qint32 flightmode = 0;//飞行模式 stanby bit operational
qint32 flightstate = 0;//
qint32 imu_select = 0;//惯导选择
qint32 das_select = 0;//大气选择
//健康字
bool inner_INS = false;
bool outer_INS = false;
bool servosystem = false;
bool loadinggear = false;
bool recorder = false;//数据记录健康
bool inner_das = false;
bool outer_das = false;
//惯性
qreal roll = 0;
qreal pitch = 0;
qreal yaw = 0;
qreal p = 0;
qreal q = 0;
qreal r = 0;
qreal ax = 0;
qreal ay = 0;
qreal az = 0;
//导航
qreal lat = 0;
qreal lng = 0;
qreal gpsalt = 0;//GPS海拔
qreal relalt = 0;//相对海拔
qreal absalt = 0;//绝对海拔
qreal baroalt = 0;//气压海拔
qreal groudspeed = 0;
qreal heading = 0;
qint32 fixtype = 0;
qint32 directioncapture = false;
qint32 satellites = 0;
qreal vn = 0;
qreal ve = 0;
qreal vd = 0;
//大气
qreal tas = 0;//真空速
qreal cas = 0;//表速
qreal Ma = 0;//马赫数
qreal alpha = 0;//攻角
qreal beta = 0;//侧滑角
//控制
qreal aileron = 0;//副翼
qreal elevator = 0;//升降舵
qreal throttle = 0;//油门
qreal ruddor = 0;//方向舵
//...
//遥控
QList<uint16_t> rc = {0};//收到的rc信号
QList<uint16_t> rc_cmd = {0};//地面站站发出的rc指令
//电压
qreal mainvoltage = 0;//飞控电压
qreal servovoltage = 0;//舵机电压
qreal powervoltage = 0;//动力电压
QList<qreal> battery = {0};//其余电压
QList<qreal> voltagegain = {1};//电压转换系数
//数据链
bool isOnline = false;//数据链有没有丢失
qreal rssi = 0;//数据链强度
qint32 datain = 0;//数据输入量
qint32 dataout = 0;//数据输出量
//数据记录
bool isrecording = false;//是否在记录
/*
* 航线组
* |
* / \
* / \
* 航线1 航线2
* / | \ | \
* p p p p p
*
* 组下面有航线,航线下面有航点
*
*/
//当前飞机的航线
QMap<int,QMap<int,mavlink_mission_item_int_t *>> missions;//航线组 航线
//电子围栏 geoFancy
//飞机的参数
QMap<int,mavlink_param_value_t *> parameters;
//飞机收到的消息
QMap<int,mavlink_message_t *> messages;
//飞机已经发出去的消息
//飞机收到的指令
//飞机要发出去的指令
//log文件,各种操作都要记录
};
#endif // VEHICLE_H
+46
View File
@@ -0,0 +1,46 @@
#ifndef VEHICLEMANAGE_H
#define VEHICLEMANAGE_H
#include "VehicleManage_global.h"
#include "QObject"
#include "QDebug"
#include "Vehicle.h"
//收到信息,根据信息的ID,生成载具,管理各个载具的通讯,数据进出,航线,参数等,和界面的交流
//独立线程
class VEHICLEMANAGE_EXPORT VehicleManage : public QObject
{
public:
explicit VehicleManage();
~VehicleManage();
signals:
void PluginLoading(bool flag);
public slots:
Vehicle *addVehicle(int id);
private slots:
void setMsg(int sysid, mavlink_message_t *msg);
private:
QMap<int,Vehicle *> Vehicles;
};
#endif // VEHICLEMANAGE_H
+139
View File
@@ -0,0 +1,139 @@
#ifndef VEHICLETYPE_H
#define VEHICLETYPE_H
#include "QDebug"
#include "QObject"
#include "mavlink.h"
typedef struct __state
{
bool isSeleted = false;
int type;//设备类型
bool arm;
int flightmode;
int lat;
int lng;
int alt;
float vel;
float heading;
int fix;
int svn;
float tas;
float cas;
float gs;
float ma;
float as_err;
float rol;
float pit;
float yaw;
float p;
float q;
float r;
float ax;
float ay;
float az;
}state;
typedef struct __param {
float param_value; /*< Onboard parameter value*/
uint16_t param_count; /*< Total number of onboard parameters*/
uint16_t param_index; /*< Index of this onboard parameter*/
char param_id[16]; /*< Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string*/
uint8_t param_type; /*< Onboard parameter type.*/
} param;
typedef struct __item_int {
float param1; /*< PARAM1, see MAV_CMD enum*/
float param2; /*< PARAM2, see MAV_CMD enum*/
float param3; /*< PARAM3, see MAV_CMD enum*/
float param4; /*< PARAM4, see MAV_CMD enum*/
int32_t x; /*< PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7*/
int32_t y; /*< PARAM6 / y position: local: x position in meters * 1e4, global: longitude in degrees *10^7*/
float z; /*< PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame.*/
uint16_t target_system; /*< System ID*/
uint16_t seq; /*< Waypoint ID (sequence number). Starts at zero. Increases monotonically for each waypoint, no gaps in the sequence (0,1,2,3,4).*/
uint16_t command; /*< The scheduled action for the waypoint.*/
uint8_t target_component; /*< Component ID*/
uint8_t frame; /*< The coordinate system of the waypoint.*/
uint8_t current; /*< false:0, true:1*/
uint8_t autocontinue; /*< Autocontinue to next waypoint*/
uint8_t mission_type; /*< Mission type.*/
} item_int;
typedef struct {
int sysid; /* ID of message sender system/aircraft */
int compid; /* ID of the message sender component */
mavlink_autopilot_version_t autopilot_version;
mavlink_sys_status_t sys_status;
mavlink_heartbeat_t heartbeat;
mavlink_ping_t ping;
mavlink_attitude_t attitude;
mavlink_ins1_t ins1;
mavlink_ins2_t ins2;
mavlink_gps_raw_int_t gps_raw_int;
mavlink_global_position_int_t global_position_int;
mavlink_servo_output_raw_t servo_output_raw;
mavlink_rc_channels_raw_t rc_channels_raw;
mavlink_nav_controller_output_t nav_controller_output;
mavlink_airspeed_autocal_t airspeed_autocal;
mavlink_rpm_t rpm;
mavlink_scaled_pressure_t scaled_pressure;
mavlink_extended_sys_state_t extended_sys_state;
mavlink_battery_status_t battery_status;
mavlink_vibration_t vibration;
mavlink_enginestate_t enginestate;
mavlink_vfr_hud_t vfr_hud;
mavlink_aoa_ssa_t aoa_ssa;
mavlink_emb_atmo_com_t emb_atom_com;
mavlink_turbinestate_t turbinstate;
mavlink_bmustate_t bmustate;
mavlink_ccmstate_t ccmstate;
mavlink_serial_control_t serial_control;
}_vehicle;
/*
* 历史 -1指令
* -2参数
* -3消息
* -4状态
* 当前 -状态
* -参数
* -指令
* -消息
* -航线
*
*
*/
#endif // VEHICLETYPE_H
+38
View File
@@ -0,0 +1,38 @@
#include "Vehicle.h"
Vehicle::Vehicle(int id, QObject *parent)
: QObject(parent)
{
Q_UNUSED(id)
}
Vehicle::~Vehicle() {}
void Vehicle::setMsg(mavlink_message_t *msg)
{
Q_UNUSED(msg)
}
void Vehicle::setParam(mavlink_param_value_t *param)
{
Q_UNUSED(param)
}
void Vehicle::setMission(mavlink_mission_item_int_t *item)
{
Q_UNUSED(item)
}
void Vehicle::_Handler(mavlink_message_t msg)
{
Q_UNUSED(msg)
}
void Vehicle::receiveMessage(mavlink_message_t message)
{
Q_UNUSED(message)
}
void Vehicle::heartbeattimeout(void)
{
}
@@ -0,0 +1,17 @@
#include "VehicleManage.h"
#include "Vehicle.h"
VehicleManage::VehicleManage() {}
VehicleManage::~VehicleManage() {}
Vehicle *VehicleManage::addVehicle(int id)
{
Q_UNUSED(id)
return nullptr;
}
void VehicleManage::setMsg(int sysid, mavlink_message_t *msg)
{
Q_UNUSED(sysid)
Q_UNUSED(msg)
}