Commit 90393e32 authored by Don Gagne's avatar Don Gagne

Configurable survey in

parent 09bde0c7
......@@ -504,6 +504,7 @@ HEADERS += \
src/Settings/AppSettings.h \
src/Settings/AutoConnectSettings.h \
src/Settings/FlightMapSettings.h \
src/Settings/RTKSettings.h \
src/Settings/SettingsGroup.h \
src/Settings/SettingsManager.h \
src/Settings/UnitsSettings.h \
......@@ -682,6 +683,7 @@ SOURCES += \
src/Settings/AppSettings.cc \
src/Settings/AutoConnectSettings.cc \
src/Settings/FlightMapSettings.cc \
src/Settings/RTKSettings.cc \
src/Settings/SettingsGroup.cc \
src/Settings/SettingsManager.cc \
src/Settings/UnitsSettings.cc \
......
......@@ -190,6 +190,7 @@
<file alias="App.SettingsGroup.json">src/Settings/App.SettingsGroup.json</file>
<file alias="AutoConnect.SettingsGroup.json">src/Settings/AutoConnect.SettingsGroup.json</file>
<file alias="FlightMap.SettingsGroup.json">src/Settings/FlightMap.SettingsGroup.json</file>
<file alias="RTK.SettingsGroup.json">src/Settings/RTK.SettingsGroup.json</file>
<file alias="Survey.SettingsGroup.json">src/MissionManager/Survey.SettingsGroup.json</file>
<file alias="Units.SettingsGroup.json">src/Settings/Units.SettingsGroup.json</file>
<file alias="Video.SettingsGroup.json">src/Settings/Video.SettingsGroup.json</file>
......
Subproject commit 3cac6a5bc5826d7ac495827a46b63f476d82ba86
Subproject commit 381061af5aa2ab7a2b1fcf243d01fcd721caebae
......@@ -10,6 +10,9 @@
#include "GPSManager.h"
#include "QGCLoggingCategory.h"
#include "QGCApplication.h"
#include "SettingsManager.h"
#include "RTKSettings.h"
GPSManager::GPSManager(QGCApplication* app, QGCToolbox* toolbox)
: QGCTool(app, toolbox)
......@@ -27,9 +30,11 @@ void GPSManager::connectGPS(const QString& device)
{
Q_ASSERT(_toolbox);
RTKSettings* rtkSettings = qgcApp()->toolbox()->settingsManager()->rtkSettings();
cleanup();
_requestGpsStop = false;
_gpsProvider = new GPSProvider(device, true, _requestGpsStop);
_gpsProvider = new GPSProvider(device, true, rtkSettings->surveyInAccuracyLimit()->rawValue().toDouble(), rtkSettings->surveyInMinObservationDuration()->rawValue().toInt(), _requestGpsStop);
_gpsProvider->start();
//create RTCM device
......
......@@ -53,18 +53,19 @@ void GPSProvider::run()
_serial->setFlowControl(QSerialPort::NoFlowControl);
unsigned int baudrate;
GPSHelper* gpsHelper = nullptr;
GPSDriverUBX* gpsDriver = nullptr;
while (!_requestStop) {
if (gpsHelper) {
delete gpsHelper;
gpsHelper = nullptr;
if (gpsDriver) {
delete gpsDriver;
gpsDriver = nullptr;
}
gpsHelper = new GPSDriverUBX(&callbackEntry, this, &_reportGpsPos, _pReportSatInfo);
gpsDriver = new GPSDriverUBX(GPSDriverUBX::Interface::UART, &callbackEntry, this, &_reportGpsPos, _pReportSatInfo);
gpsDriver->setSurveyInSpecs(_surveyInAccMeters * 10000, _surveryInDurationSecs);
if (gpsHelper->configure(baudrate, GPSHelper::OutputMode::RTCM) == 0) {
if (gpsDriver->configure(baudrate, GPSDriverUBX::OutputMode::RTCM) == 0) {
/* reset report */
memset(&_reportGpsPos, 0, sizeof(_reportGpsPos));
......@@ -74,7 +75,7 @@ void GPSProvider::run()
int numTries = 0;
while (!_requestStop && numTries < 3) {
int helperRet = gpsHelper->receive(GPS_RECEIVE_TIMEOUT);
int helperRet = gpsDriver->receive(GPS_RECEIVE_TIMEOUT);
if (helperRet > 0) {
numTries = 0;
......@@ -100,9 +101,13 @@ void GPSProvider::run()
qCDebug(RTKGPSLog) << "Exiting GPS thread";
}
GPSProvider::GPSProvider(const QString& device, bool enableSatInfo, const std::atomic_bool& requestStop)
: _device(device), _requestStop(requestStop)
GPSProvider::GPSProvider(const QString& device, bool enableSatInfo, double surveyInAccMeters, int surveryInDurationSecs, const std::atomic_bool& requestStop)
: _device(device)
, _requestStop(requestStop)
, _surveyInAccMeters(surveyInAccMeters)
, _surveryInDurationSecs(surveryInDurationSecs)
{
qCDebug(RTKGPSLog) << "Survey in accuracy:duration" << surveyInAccMeters << surveryInDurationSecs;
if (enableSatInfo) _pReportSatInfo = new satellite_info_s();
}
......
......@@ -29,7 +29,7 @@ class GPSProvider : public QThread
{
Q_OBJECT
public:
GPSProvider(const QString& device, bool enableSatInfo, const std::atomic_bool& requestStop);
GPSProvider(const QString& device, bool enableSatInfo, double surveyInAccMeters, int surveryInDurationSecs, const std::atomic_bool& requestStop);
~GPSProvider();
/**
......@@ -57,6 +57,8 @@ private:
QString _device;
const std::atomic_bool& _requestStop;
double _surveyInAccMeters;
int _surveryInDurationSecs;
struct vehicle_gps_position_s _reportGpsPos;
struct satellite_info_s *_pReportSatInfo = nullptr;
......
[
{
"name": "SurveyInAccuracyLimit",
"shortDescription": "Survey in accuracy limit",
"longDescription": "The maximum accuracy allowed prior to completing survey in.",
"type": "double",
"defaultValue": 2.0,
"min": 0.5,
"units": "m",
"decimalPlaces": 1
},
{
"name": "SurveyInMinObservationDuration",
"shortDescription": "Minimum observation time",
"longDescription": "Defines the minimum amount of observation time for the position calculation.",
"type": "Uint32",
"defaultValue": 180,
"min": 1,
"units": "secs",
"decimalPlaces": 0
}
]
/****************************************************************************
*
* (c) 2009-2016 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
*
* QGroundControl is licensed according to the terms in the file
* COPYING.md in the root of the source code directory.
*
****************************************************************************/
#include "RTKSettings.h"
#include <QQmlEngine>
#include <QtQml>
const char* RTKSettings::RTKSettingsGroupName = "RTK";
const char* RTKSettings::surveyInAccuracyLimitName = "SurveyInAccuracyLimit";
const char* RTKSettings::surveyInMinObservationDurationName = "SurveyInMinObservationDuration";
RTKSettings::RTKSettings(QObject* parent)
: SettingsGroup(RTKSettingsGroupName, QString(RTKSettingsGroupName), parent)
, _surveyInAccuracyLimitFact(NULL)
, _surveyInMinObservationDurationFact(NULL)
{
QQmlEngine::setObjectOwnership(this, QQmlEngine::CppOwnership);
qmlRegisterUncreatableType<RTKSettings>("QGroundControl.SettingsManager", 1, 0, "RTKSettings", "Reference only");
}
Fact* RTKSettings::surveyInAccuracyLimit(void)
{
if (!_surveyInAccuracyLimitFact) {
_surveyInAccuracyLimitFact = _createSettingsFact(surveyInAccuracyLimitName);
}
return _surveyInAccuracyLimitFact;
}
Fact* RTKSettings::surveyInMinObservationDuration(void)
{
if (!_surveyInMinObservationDurationFact) {
_surveyInMinObservationDurationFact = _createSettingsFact(surveyInMinObservationDurationName);
}
return _surveyInMinObservationDurationFact;
}
/****************************************************************************
*
* (c) 2009-2016 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
*
* QGroundControl is licensed according to the terms in the file
* COPYING.md in the root of the source code directory.
*
****************************************************************************/
#pragma once
#include "SettingsGroup.h"
class RTKSettings : public SettingsGroup
{
Q_OBJECT
public:
RTKSettings(QObject* parent = NULL);
Q_PROPERTY(Fact* surveyInAccuracyLimit READ surveyInAccuracyLimit CONSTANT)
Q_PROPERTY(Fact* surveyInMinObservationDuration READ surveyInMinObservationDuration CONSTANT)
Fact* surveyInAccuracyLimit (void);
Fact* surveyInMinObservationDuration(void);
static const char* RTKSettingsGroupName;
static const char* surveyInAccuracyLimitName;
static const char* surveyInMinObservationDurationName;
private:
SettingsFact* _surveyInAccuracyLimitFact;
SettingsFact* _surveyInMinObservationDurationFact;
};
......@@ -19,6 +19,7 @@ SettingsManager::SettingsManager(QGCApplication* app, QGCToolbox* toolbox)
, _autoConnectSettings(NULL)
, _videoSettings(NULL)
, _flightMapSettings(NULL)
, _rtkSettings(NULL)
{
}
......@@ -34,4 +35,5 @@ void SettingsManager::setToolbox(QGCToolbox *toolbox)
_autoConnectSettings = new AutoConnectSettings(this);
_videoSettings = new VideoSettings(this);
_flightMapSettings = new FlightMapSettings(this);
_rtkSettings = new RTKSettings(this);
}
......@@ -19,6 +19,7 @@
#include "AutoConnectSettings.h"
#include "VideoSettings.h"
#include "FlightMapSettings.h"
#include "RTKSettings.h"
#include <QVariantList>
......@@ -35,6 +36,7 @@ public:
Q_PROPERTY(QObject* autoConnectSettings READ autoConnectSettings CONSTANT)
Q_PROPERTY(QObject* videoSettings READ videoSettings CONSTANT)
Q_PROPERTY(QObject* flightMapSettings READ flightMapSettings CONSTANT)
Q_PROPERTY(QObject* rtkSettings READ rtkSettings CONSTANT)
// Override from QGCTool
virtual void setToolbox(QGCToolbox *toolbox);
......@@ -44,6 +46,7 @@ public:
AutoConnectSettings* autoConnectSettings (void) { return _autoConnectSettings; }
VideoSettings* videoSettings (void) { return _videoSettings; }
FlightMapSettings* flightMapSettings (void) { return _flightMapSettings; }
RTKSettings* rtkSettings (void) { return _rtkSettings; }
private:
AppSettings* _appSettings;
......@@ -51,6 +54,7 @@ private:
AutoConnectSettings* _autoConnectSettings;
VideoSettings* _videoSettings;
FlightMapSettings* _flightMapSettings;
RTKSettings* _rtkSettings;
};
#endif
......@@ -389,6 +389,50 @@ QGCView {
}
}
//-----------------------------------------------------------------
//-- RTK GPS
Item {
width: _qgcView.width * 0.8
height: unitLabel.height
anchors.margins: ScreenTools.defaultFontPixelWidth
anchors.horizontalCenter: parent.horizontalCenter
visible: QGroundControl.settingsManager.rtkSettings.visible
QGCLabel {
id: rtkLabel
text: qsTr("RTK GPS (Requires Restart)")
font.family: ScreenTools.demiboldFontFamily
}
}
Rectangle {
height: rtkGrid.height + (ScreenTools.defaultFontPixelHeight * 2)
width: _qgcView.width * 0.8
color: qgcPal.windowShade
anchors.margins: ScreenTools.defaultFontPixelWidth
anchors.horizontalCenter: parent.horizontalCenter
visible: QGroundControl.settingsManager.rtkSettings.visible
GridLayout {
id: rtkGrid
anchors.centerIn: parent
columns: 2
rowSpacing: ScreenTools.defaultFontPixelWidth
columnSpacing: ScreenTools.defaultFontPixelWidth
QGCLabel {
text: qsTr("Survey in accuracy:")
}
FactTextField {
fact: QGroundControl.settingsManager.rtkSettings.surveyInAccuracyLimit
}
QGCLabel {
text: qsTr("Minumum observation duration:")
}
FactTextField {
fact: QGroundControl.settingsManager.rtkSettings.surveyInMinObservationDuration
}
}
}
//-----------------------------------------------------------------
//-- Autoconnect settings
Item {
......
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