Commit a220ddf5 authored by Don Gagne's avatar Don Gagne

MockLink support APM, Generic

parent 9fcdda7b
......@@ -166,6 +166,7 @@ FORMS += \
src/ui/LogReplayLinkConfigurationWidget.ui \
src/ui/MainWindow.ui \
src/ui/MAVLinkSettingsWidget.ui \
src/ui/MockLinkConfiguration.ui \
src/ui/QGCCommConfiguration.ui \
src/ui/QGCLinkConfiguration.ui \
src/ui/QGCMapRCToParamDialog.ui \
......@@ -257,6 +258,7 @@ HEADERS += \
src/ui/MainWindow.h \
src/ui/MAVLinkDecoder.h \
src/ui/MAVLinkSettingsWidget.h \
src/ui/MockLinkConfiguration.h \
src/ui/QGCCommConfiguration.h \
src/ui/QGCLinkConfiguration.h \
src/ui/QGCMapRCToParamDialog.h \
......@@ -368,6 +370,7 @@ SOURCES += \
src/ui/MainWindow.cc \
src/ui/MAVLinkDecoder.cc \
src/ui/MAVLinkSettingsWidget.cc \
src/ui/MockLinkConfiguration.cc \
src/ui/QGCCommConfiguration.cc \
src/ui/QGCLinkConfiguration.cc \
src/ui/QGCMapRCToParamDialog.cpp \
......
......@@ -438,7 +438,7 @@ void LinkManager::loadLinkConfigurationList()
// Debug buids always add MockLink automatically
#ifdef QT_DEBUG
MockConfiguration* pMock = new MockConfiguration("Mock Link");
MockConfiguration* pMock = new MockConfiguration("Mock Link PX4");
pMock->setDynamic(true);
addLinkConfiguration(pMock);
linksChanged = true;
......
......@@ -71,6 +71,8 @@ float MockLink::_vehicleLatitude = 47.633033f;
float MockLink::_vehicleLongitude = -122.08794f;
float MockLink::_vehicleAltitude = 2.5f;
const char* MockConfiguration::_firmwareTypeKey = "FirmwareType";
MockLink::MockLink(MockConfiguration* config)
: _missionItemHandler(this)
, _name("MockLink")
......@@ -85,6 +87,10 @@ MockLink::MockLink(MockConfiguration* config)
, _fileServer(NULL)
{
_config = config;
if (_config) {
_autopilotType = config->firmwareType();
}
union px4_custom_mode px4_cm;
px4_cm.data = 0;
......@@ -740,3 +746,51 @@ void MockLink::_sendGpsRawInt(void)
8); // satellite count
respondWithMavlinkMessage(msg);
}
MockConfiguration::MockConfiguration(const QString& name)
: LinkConfiguration(name)
, _firmwareType(MAV_AUTOPILOT_PX4)
{
}
MockConfiguration::MockConfiguration(MockConfiguration* source)
: LinkConfiguration(source)
{
_firmwareType = source->_firmwareType;
}
void MockConfiguration::copyFrom(LinkConfiguration *source)
{
LinkConfiguration::copyFrom(source);
MockConfiguration* usource = dynamic_cast<MockConfiguration*>(source);
Q_ASSERT(usource != NULL);
_firmwareType = usource->_firmwareType;
}
void MockConfiguration::saveSettings(QSettings& settings, const QString& root)
{
settings.beginGroup(root);
settings.setValue(_firmwareTypeKey, (int)_firmwareType);
settings.sync();
settings.endGroup();
}
void MockConfiguration::loadSettings(QSettings& settings, const QString& root)
{
settings.beginGroup(root);
_firmwareType = (MAV_AUTOPILOT)settings.value(_firmwareTypeKey, (int)MAV_AUTOPILOT_PX4).toInt();
settings.endGroup();
}
void MockConfiguration::updateSettings()
{
if (_link) {
MockLink* ulink = dynamic_cast<MockLink*>(_link);
if (ulink) {
// Restart connect not supported
Q_ASSERT(false);
//ulink->_restartConnection();
}
}
}
......@@ -35,22 +35,26 @@
Q_DECLARE_LOGGING_CATEGORY(MockLinkLog)
Q_DECLARE_LOGGING_CATEGORY(MockLinkVerboseLog)
/// @file
/// @brief Mock implementation of a Link.
///
/// @author Don Gagne <don@thegagnes.com>
class MockConfiguration : public LinkConfiguration
{
public:
MockConfiguration(const QString& name);
MockConfiguration(MockConfiguration* source);
MAV_AUTOPILOT firmwareType(void) { return _firmwareType; }
void setFirmwareType(MAV_AUTOPILOT firmwareType) { _firmwareType = firmwareType; }
// Overrides from LinkConfiguration
int type(void) { return LinkConfiguration::TypeMock; }
void copyFrom(LinkConfiguration* source);
void loadSettings(QSettings& settings, const QString& root);
void saveSettings(QSettings& settings, const QString& root);
void updateSettings(void);
private:
MAV_AUTOPILOT _firmwareType;
MockConfiguration(const QString& name) : LinkConfiguration(name) {}
MockConfiguration(MockConfiguration* source) : LinkConfiguration(source) {}
int type() { return LinkConfiguration::TypeMock; }
void copyFrom(LinkConfiguration* source) { LinkConfiguration::copyFrom(source); }
void loadSettings(QSettings& settings, const QString& root) { Q_UNUSED(settings); Q_UNUSED(root); }
void saveSettings(QSettings& settings, const QString& root) { Q_UNUSED(settings); Q_UNUSED(root); }
void updateSettings() {}
static const char* _firmwareTypeKey;
};
class MockLink : public LinkInterface
......
/*=====================================================================
QGroundControl Open Source Ground Control Station
(c) 2009, 2015 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
This file is part of the QGROUNDCONTROL project
QGROUNDCONTROL is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
QGROUNDCONTROL is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with QGROUNDCONTROL. If not, see <http://www.gnu.org/licenses/>.
======================================================================*/
#include "MockLinkConfiguration.h"
#include "ui_MockLinkConfiguration.h"
MockLinkConfiguration::MockLinkConfiguration(MockConfiguration *config, QWidget *parent)
: QWidget(parent)
, _ui(new Ui::MockLinkConfiguration)
, _config(config)
{
_ui->setupUi(this);
switch (config->firmwareType()) {
case MAV_AUTOPILOT_PX4:
_ui->px4Radio->setChecked(true);
break;
case MAV_AUTOPILOT_ARDUPILOTMEGA:
_ui->apmRadio->setChecked(true);
break;
default:
_ui->genericRadio->setChecked(true);
break;
}
connect(_ui->px4Radio, &QRadioButton::clicked, this, &MockLinkConfiguration::_px4RadioClicked);
connect(_ui->apmRadio, &QRadioButton::clicked, this, &MockLinkConfiguration::_apmRadioClicked);
connect(_ui->genericRadio, &QRadioButton::clicked, this, &MockLinkConfiguration::_genericRadioClicked);
}
MockLinkConfiguration::~MockLinkConfiguration()
{
delete _ui;
}
void MockLinkConfiguration::_px4RadioClicked(bool checked)
{
if (checked) {
_config->setFirmwareType(MAV_AUTOPILOT_PX4);
}
}
void MockLinkConfiguration::_apmRadioClicked(bool checked)
{
if (checked) {
_config->setFirmwareType(MAV_AUTOPILOT_ARDUPILOTMEGA);
}
}
void MockLinkConfiguration::_genericRadioClicked(bool checked)
{
if (checked) {
_config->setFirmwareType(MAV_AUTOPILOT_GENERIC);
}
}
/*=====================================================================
QGroundControl Open Source Ground Control Station
(c) 2009, 2015 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
This file is part of the QGROUNDCONTROL project
QGROUNDCONTROL is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
QGROUNDCONTROL is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with QGROUNDCONTROL. If not, see <http://www.gnu.org/licenses/>.
======================================================================*/
#ifndef MockLinkConfiguration_H
#define MockLinkConfiguration_H
#include <QWidget>
#include "MockLink.h"
namespace Ui
{
class MockLinkConfiguration;
}
class MockLinkConfiguration : public QWidget
{
Q_OBJECT
public:
explicit MockLinkConfiguration(MockConfiguration *config, QWidget *parent = 0);
~MockLinkConfiguration();
private slots:
void _px4RadioClicked(bool checked);
void _apmRadioClicked(bool checked);
void _genericRadioClicked(bool checked);
private:
Ui::MockLinkConfiguration* _ui;
MockConfiguration* _config;
};
#endif // MockLinkConfiguration_H
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MockLinkConfiguration</class>
<widget class="QWidget" name="MockLinkConfiguration">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>187</width>
<height>116</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QRadioButton" name="px4Radio">
<property name="text">
<string>PX4 Firmware</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="apmRadio">
<property name="text">
<string>APM Firmware</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="genericRadio">
<property name="text">
<string>Generic Firmware</string>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
......@@ -36,6 +36,7 @@ This file is part of the QGROUNDCONTROL project
#endif
#include "QGCUDPLinkConfiguration.h"
#include "QGCTCPLinkConfiguration.h"
#include "MockLinkConfiguration.h"
#include "LogReplayLinkConfigurationWidget.h"
#include "QGCCommConfiguration.h"
#include "ui_QGCCommConfiguration.h"
......@@ -151,7 +152,8 @@ void QGCCommConfiguration::_loadTypeConfigWidget(int type)
break;
#ifdef QT_DEBUG
case LinkConfiguration::TypeMock: {
_ui->linkScrollArea->setWidget(NULL);
QWidget* conf = new MockLinkConfiguration((MockConfiguration*)_config, this);
_ui->linkScrollArea->setWidget(conf);
_ui->linkGroupBox->setTitle(tr("Mock Link"));
_ui->typeCombo->setCurrentIndex(_ui->typeCombo->findData(LinkConfiguration::TypeMock));
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment