QGC源码分析——MavCmdInfoCommon.json加载的流程分析(保存了mavlink中航点或指令的常用信息)

1. SJON文件介绍

.json文件介绍

JSON是全称为JavaScript Object Notation,是一种有条理,易于访问的存储信息的方法。

它为我们提供了一个可读的数据集合,我们可以通过合理的方式来访问这些数据。JSON文件可以存储简单的数据结构和对象。

JSON文件在许多不同的编程API中都被支持。如今,JSON已被用于许多Web应用程序来进行数据交换,并且它们实际上不会在硬盘驱动器上保存“.JSON”文件,可以在互联网连接的计算机之间进行数据交换。某些应用程序允许用户将其保存在“.JSON”文件中。

在MavCmdInfoCommon.json 中保存了航点或者命令信息, 如返航点的信息
在这里插入图片描述
在调试中,增加一个返航点时的断点,信息都能对上,另外说明下 “id” 就是 “command”

// MissionCommandDialog.qml 中
在这里插入图片描述
在 //MissionItemEditor.qml 中调用

之后在 //PlanView.qml 中调用

2. 流程分析

2.1 搜“MavCmdInfoCommon” 发现此函数有三处

  • 其一是 基类FirmwarePlugin.cc 中:
//FirmwarePlugin\FirmwarePlugin.cc:194
QString FirmwarePlugin::missionCommandOverrides(MAV_TYPE vehicleType) const
{
    switch (vehicleType) {
    case MAV_TYPE_GENERIC:
        return QStringLiteral(":/json/MavCmdInfoCommon.json");
    ...
}

        missionCommandOverrides是一个有内容的虚函数,可以被子类重写(override ):

//FirmwarePlugin.h
    virtual QString missionCommandOverrides(MAV_TYPE vehicleType) const;
  • 其二是子类APM中:它继承了FirmwarePlugin
class APMFirmwarePlugin : public FirmwarePlugin
{
}
//FirmwarePlugin\APM\APMFirmwarePlugin.cc:776
QString APMFirmwarePlugin::missionCommandOverrides(MAV_TYPE vehicleType) const
{
    switch (vehicleType) {
    case MAV_TYPE_GENERIC:
        return QStringLiteral(":/json/APM/MavCmdInfoCommon.json");
    }
}

        重写父类:

QString  missionCommandOverrides     (MAV_TYPE vehicleType) const override;
  • 其三是PX4中:
//FirmwarePlugin\PX4\PX4FirmwarePlugin.cc:303
QString PX4FirmwarePlugin::missionCommandOverrides(MAV_TYPE vehicleType) const
{
    switch (vehicleType) {
    case MAV_TYPE_GENERIC:
        return QStringLiteral(":/json/PX4/MavCmdInfoCommon.json");
    ...
}

2.2 missionCommandOverrides被 setToolbox 调用

//MissionCommandTree.cc:57
void MissionCommandTree::setToolbox(QGCToolbox* toolbox)
{
	...
	QString overrideFile = plugin->missionCommandOverrides(vehicleType); ///--[Mark]
	...
	_staticCommandTree[firmwareType][vehicleType] = new MissionCommandList(overrideFile, firmwareType == MAV_AUTOPILOT_GENERIC && vehicleType == MAV_TYPE_GENERIC /* baseCommandList */, this);

}

2.3 MissionCommandTree::setToolbox 被调用

至此,往上应用基本相似,最终在main.cc中实例化。

//src\QGCToolbox.cc:97
void QGCToolbox::setChildToolboxes(void)
{
    ...
    _missionCommandTree->setToolbox(this);
}

2.4 setChildToolboxes 被 QGCApplication 调用

//src\QGCApplication.cc:331
QGCApplication::QGCApplication(int &argc, char* argv[], bool unitTesting)
{
	...
    _toolbox->setChildToolboxes();
}

2.5 QGCApplication 在 mian.cc 中的实例化

//src\main.cc:343
int main(int argc, char *argv[])
{
    QGCApplication* app = new QGCApplication(argc, argv, runUnitTests);
}

3. 流程总结

大致流程如下:

new QGCApplication
_toolbox->setChildToolboxes
_missionCommandTree->setToolbox
plugin->missionCommandOverrides
mian.cc
QGCApplication::QGCApplication
QGCToolbox::setChildToolboxes
MissionCommandTree::setToolbox
FirmwarePlugin::missionCommandOverrides
PX4FirmwarePlugin::missionCommandOverrides
APMFirmwarePlugin::missionCommandOverrides
MavCmdInfoCommon.json
  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值