Unverified Commit ea781b0b authored by Don Gagne's avatar Don Gagne Committed by GitHub

Merge branch 'Stable_V3.5.1' into ArduPilotHash

parents 34e36ff8 a59bf830
......@@ -50,23 +50,11 @@ build_script:
test_script:
- if "%CONFIG%" EQU "debug" ( %SHADOW_BUILD_DIR%\debug\qgroundcontrol --unittest )
for:
-
branches:
only:
- master
artifacts:
artifacts:
- path: QGroundControl-installer.exe
name: qgcinstaller
-
branches:
only:
- Stable_V3.5
artifacts:
- path: QGroundControl-installer.exe
name: qgcinstaller
- path: symbols\**\*.*_
name: symbols
- path: build_windows_install\release\qgroundcontrol.pdb
name: pdb
deploy:
# deploy continuous builds to s3
......@@ -101,19 +89,19 @@ deploy:
# appveyor_repo_tag: false
# deploy release symbols to s3
- provider: S3
access_key_id:
secure: IGAojLMqokL+76DbdulmWDA3MTsxEBBi3ReVVSqTy9c=
secret_access_key:
secure: RiYqaR+3T2PMNz2j5ur8LCA6H/Zfd4jTX33CZE5iBxm+zaz4QLs25p0B7prpaoNN
bucket: qgroundcontrol
region: us-west-2
set_public: true
folder: releasesyms
artifact: symbols
on:
CONFIG: installer
appveyor_repo_tag: true
# - provider: S3
# access_key_id:
# secure: IGAojLMqokL+76DbdulmWDA3MTsxEBBi3ReVVSqTy9c=
# secret_access_key:
# secure: RiYqaR+3T2PMNz2j5ur8LCA6H/Zfd4jTX33CZE5iBxm+zaz4QLs25p0B7prpaoNN
# bucket: qgroundcontrol
# region: us-west-2
# set_public: true
# folder: releasesyms
# artifact: symbols
# on:
# CONFIG: installer
# appveyor_repo_tag: true
# deploy tagged releases to Github releases
- provider: GitHub
......@@ -155,3 +143,18 @@ deploy:
on:
CONFIG: installer
appveyor_repo_tag: true
# deploy pdb for tagged releases to s3 latest folder
- provider: S3
access_key_id:
secure: IGAojLMqokL+76DbdulmWDA3MTsxEBBi3ReVVSqTy9c=
secret_access_key:
secure: RiYqaR+3T2PMNz2j5ur8LCA6H/Zfd4jTX33CZE5iBxm+zaz4QLs25p0B7prpaoNN
bucket: qgroundcontrol
region: us-west-2
set_public: true
folder: latest
artifact: pdb
on:
CONFIG: installer
appveyor_repo_tag: true
......@@ -8,10 +8,15 @@ Note: This file only contains high level features or important fixes.
* Major rewrite and bug fix pass through Structure Scan. Previous version had such bad problems that it can no longer be supported. Plans with Structure Scan will need to be recreated. New QGC will not load old Structure Scan plans.
### 3.5.2 - Not yet released
### 3.5.3 - Not yet released
* ArduPilot: Fix parameter file save generating bad characters from git hash
### 3.5.2 - Stable
* Fix Ubuntu AppImage startup failure
### 3.5.1
* Update Windows usb drivers
* Add ArduPilot CubeBlack Service Bulletin check
* Fix visibility of PX4/ArduPilot logo in toolbar
* Fix tile set count but in OfflineMaps which would cause image and elevation tile set to have incorrect counts and be incorrectly marked as download incomplete.
......
......@@ -136,9 +136,9 @@ LinuxBuild {
!contains(DEFINES, __rasp_pi2__) {
QT_LIB_LIST += \
libicudata.so \
libicui18n.so \
libicuuc.so
libicudata.so.56 \
libicui18n.so.56 \
libicuuc.so.56
}
for(QT_LIB, QT_LIB_LIST) {
......
No preview for this file type
......@@ -29,6 +29,11 @@
#include "APMSubFrameComponent.h"
#include "ESP8266Component.h"
#include "APMHeliComponent.h"
#include "QGCApplication.h"
#if !defined(NO_SERIAL_LINK) && !defined(__android__)
#include <QSerialPortInfo>
#endif
/// This is the AutoPilotPlugin implementatin for the MAV_AUTOPILOT_ARDUPILOT type.
APMAutoPilotPlugin::APMAutoPilotPlugin(Vehicle* vehicle, QObject* parent)
......@@ -50,6 +55,10 @@ APMAutoPilotPlugin::APMAutoPilotPlugin(Vehicle* vehicle, QObject* parent)
, _heliComponent (NULL)
{
APMAirframeLoader::loadAirframeFactMetaData();
#if !defined(NO_SERIAL_LINK) && !defined(__android__)
connect(vehicle->parameterManager(), &ParameterManager::parametersReadyChanged, this, &APMAutoPilotPlugin::_checkForBadCubeBlack);
#endif
}
APMAutoPilotPlugin::~APMAutoPilotPlugin()
......@@ -170,3 +179,34 @@ QString APMAutoPilotPlugin::prerequisiteSetup(VehicleComponent* component) const
return QString();
}
#if !defined(NO_SERIAL_LINK) && !defined(__android__)
/// The following code is executed when the Vehicle is parameter ready. It checks for the service bulletin against Cube Blacks.
void APMAutoPilotPlugin::_checkForBadCubeBlack(void)
{
bool cubeBlackFound = false;
for (const QVariant& varLink: _vehicle->links()) {
SerialLink* serialLink = varLink.value<SerialLink*>();
if (serialLink && QSerialPortInfo(*serialLink->_hackAccessToPort()).description().contains(QStringLiteral("CubeBlack"))) {
cubeBlackFound = true;
}
}
if (!cubeBlackFound) {
return;
}
ParameterManager* paramMgr = _vehicle->parameterManager();
QString paramAcc3("INS_ACC3_ID");
QString paramGyr3("INS_GYR3_ID");
QString paramEnableMask("INS_ENABLE_MASK");
if (paramMgr->parameterExists(-1, paramAcc3) && paramMgr->getParameter(-1, paramAcc3)->rawValue().toInt() == 0 &&
paramMgr->parameterExists(-1, paramGyr3) && paramMgr->getParameter(-1, paramGyr3)->rawValue().toInt() == 0 &&
paramMgr->parameterExists(-1, paramEnableMask) && paramMgr->getParameter(-1, paramEnableMask)->rawValue().toInt() >= 7) {
qgcApp()->showMessage(tr("WARNING: The flight board you are using has a critical service bulletin against ti which advise against flying. https://discuss.cubepilot.org/t/sb-0000002-critical-service-bulletin-for-cubes-purchased-between-january-2019-to-present-do-not-fly/406"));
}
}
#endif
......@@ -59,6 +59,11 @@ protected:
ESP8266Component* _esp8266Component;
APMHeliComponent* _heliComponent;
#if !defined(NO_SERIAL_LINK) && !defined(__android__)
private slots:
void _checkForBadCubeBlack(void);
#endif
private:
QVariantList _components;
};
......
......@@ -52,7 +52,7 @@
},
"param4": {
"label": "Heading",
"units": "radians",
"units": "deg",
"nanUnchanged": true,
"default": null,
"decimalPlaces": 2
......@@ -74,7 +74,7 @@
},
"param4": {
"label": "Heading",
"units": "radians",
"units": "deg",
"nanUnchanged": true,
"default": null,
"decimalPlaces": 2
......@@ -101,7 +101,7 @@
},
"param4": {
"label": "Heading",
"units": "radians",
"units": "deg",
"nanUnchanged": true,
"default": null,
"decimalPlaces": 2
......@@ -129,7 +129,7 @@
},
"param4": {
"label": "Heading",
"units": "radians",
"units": "deg",
"nanUnchanged": true,
"decimalPlaces": 2
}
......@@ -158,7 +158,7 @@
},
"param4": {
"label": "Heading",
"units": "radians",
"units": "deg",
"nanUnchanged": true,
"default": null,
"decimalPlaces": 2
......@@ -180,7 +180,7 @@
},
"param4": {
"label": "Heading",
"units": "radians",
"units": "deg",
"nanUnchanged": true,
"default": null,
"decimalPlaces": 2
......
......@@ -293,7 +293,7 @@ void StructureScanComplexItem::appendMissionItems(QList<MissionItem*>& items, QO
{
int seqNum = _sequenceNumber;
bool startFromTop = _startFromTopFact.rawValue().toBool();
double startAltitude = _scanBottomAltFact.rawValue().toDouble() + (startFromTop ? _structureHeightFact.rawValue().toDouble() : 0);
double startAltitude = (startFromTop ? _structureHeightFact.rawValue().toDouble() : _scanBottomAltFact.rawValue().toDouble());
MissionItem* item = nullptr;
......
......@@ -144,6 +144,15 @@ void QGroundControlQmlGlobal::startAPMArduSubMockLink(bool sendStatusText)
#endif
}
void QGroundControlQmlGlobal::startAPMArduRoverMockLink(bool sendStatusText)
{
#ifdef QT_DEBUG
MockLink::startAPMArduRoverMockLink(sendStatusText);
#else
Q_UNUSED(sendStatusText);
#endif
}
void QGroundControlQmlGlobal::stopOneMockLink(void)
{
#ifdef QT_DEBUG
......
......@@ -112,6 +112,7 @@ public:
Q_INVOKABLE void startAPMArduCopterMockLink (bool sendStatusText);
Q_INVOKABLE void startAPMArduPlaneMockLink (bool sendStatusText);
Q_INVOKABLE void startAPMArduSubMockLink (bool sendStatusText);
Q_INVOKABLE void startAPMArduRoverMockLink (bool sendStatusText);
Q_INVOKABLE void stopOneMockLink (void);
/// Converts from meters to the user specified distance unit
......
......@@ -1159,64 +1159,46 @@ MockLink* MockLink::_startMockLink(MockConfiguration* mockConfig)
return qobject_cast<MockLink*>(linkMgr->createConnectedLink(config));
}
MockLink* MockLink::startPX4MockLink(bool sendStatusText, MockConfiguration::FailureMode_t failureMode)
MockLink* MockLink::_startMockLinkWorker(QString configName, MAV_AUTOPILOT firmwareType, MAV_TYPE vehicleType, bool sendStatusText, MockConfiguration::FailureMode_t failureMode)
{
MockConfiguration* mockConfig = new MockConfiguration("PX4 MockLink");
MockConfiguration* mockConfig = new MockConfiguration(configName);
mockConfig->setFirmwareType(MAV_AUTOPILOT_PX4);
mockConfig->setVehicleType(MAV_TYPE_QUADROTOR);
mockConfig->setFirmwareType(firmwareType);
mockConfig->setVehicleType(vehicleType);
mockConfig->setSendStatusText(sendStatusText);
mockConfig->setFailureMode(failureMode);
return _startMockLink(mockConfig);
}
MockLink* MockLink::startGenericMockLink(bool sendStatusText, MockConfiguration::FailureMode_t failureMode)
MockLink* MockLink::startPX4MockLink(bool sendStatusText, MockConfiguration::FailureMode_t failureMode)
{
MockConfiguration* mockConfig = new MockConfiguration("Generic MockLink");
mockConfig->setFirmwareType(MAV_AUTOPILOT_GENERIC);
mockConfig->setVehicleType(MAV_TYPE_QUADROTOR);
mockConfig->setSendStatusText(sendStatusText);
mockConfig->setFailureMode(failureMode);
return _startMockLinkWorker("PX4 MultiRotor MockLink", MAV_AUTOPILOT_PX4, MAV_TYPE_QUADROTOR, sendStatusText, failureMode);
}
return _startMockLink(mockConfig);
MockLink* MockLink::startGenericMockLink(bool sendStatusText, MockConfiguration::FailureMode_t failureMode)
{
return _startMockLinkWorker("Generic MockLink", MAV_AUTOPILOT_GENERIC, MAV_TYPE_QUADROTOR, sendStatusText, failureMode);
}
MockLink* MockLink::startAPMArduCopterMockLink(bool sendStatusText, MockConfiguration::FailureMode_t failureMode)
{
MockConfiguration* mockConfig = new MockConfiguration("APM ArduCopter MockLink");
mockConfig->setFirmwareType(MAV_AUTOPILOT_ARDUPILOTMEGA);
mockConfig->setVehicleType(MAV_TYPE_QUADROTOR);
mockConfig->setSendStatusText(sendStatusText);
mockConfig->setFailureMode(failureMode);
return _startMockLink(mockConfig);
return _startMockLinkWorker("ArduCopter MockLink",MAV_AUTOPILOT_ARDUPILOTMEGA, MAV_TYPE_QUADROTOR, sendStatusText, failureMode);
}
MockLink* MockLink::startAPMArduPlaneMockLink(bool sendStatusText, MockConfiguration::FailureMode_t failureMode)
{
MockConfiguration* mockConfig = new MockConfiguration("APM ArduPlane MockLink");
mockConfig->setFirmwareType(MAV_AUTOPILOT_ARDUPILOTMEGA);
mockConfig->setVehicleType(MAV_TYPE_FIXED_WING);
mockConfig->setSendStatusText(sendStatusText);
mockConfig->setFailureMode(failureMode);
return _startMockLink(mockConfig);
return _startMockLinkWorker("ArduPlane MockLink", MAV_AUTOPILOT_ARDUPILOTMEGA, MAV_TYPE_FIXED_WING, sendStatusText, failureMode);
}
MockLink* MockLink::startAPMArduSubMockLink(bool sendStatusText, MockConfiguration::FailureMode_t failureMode)
{
MockConfiguration* mockConfig = new MockConfiguration("APM ArduSub MockLink");
mockConfig->setFirmwareType(MAV_AUTOPILOT_ARDUPILOTMEGA);
mockConfig->setVehicleType(MAV_TYPE_SUBMARINE);
mockConfig->setSendStatusText(sendStatusText);
mockConfig->setFailureMode(failureMode);
return _startMockLinkWorker("ArduSub MockLink", MAV_AUTOPILOT_ARDUPILOTMEGA, MAV_TYPE_SUBMARINE, sendStatusText, failureMode);
}
return _startMockLink(mockConfig);
MockLink* MockLink::startAPMArduRoverMockLink(bool sendStatusText, MockConfiguration::FailureMode_t failureMode)
{
return _startMockLinkWorker("ArduRover MockLink", MAV_AUTOPILOT_ARDUPILOTMEGA, MAV_TYPE_GROUND_ROVER, sendStatusText, failureMode);
}
void MockLink::_sendRCChannels(void)
......
......@@ -156,6 +156,7 @@ public:
static MockLink* startAPMArduCopterMockLink (bool sendStatusText, MockConfiguration::FailureMode_t failureMode = MockConfiguration::FailNone);
static MockLink* startAPMArduPlaneMockLink (bool sendStatusText, MockConfiguration::FailureMode_t failureMode = MockConfiguration::FailNone);
static MockLink* startAPMArduSubMockLink (bool sendStatusText, MockConfiguration::FailureMode_t failureMode = MockConfiguration::FailNone);
static MockLink* startAPMArduRoverMockLink (bool sendStatusText, MockConfiguration::FailureMode_t failureMode = MockConfiguration::FailNone);
private slots:
virtual void _writeBytes(const QByteArray bytes);
......@@ -203,6 +204,7 @@ private:
void _sendADSBVehicles(void);
void _moveADSBVehicle(void);
static MockLink* _startMockLinkWorker(QString configName, MAV_AUTOPILOT firmwareType, MAV_TYPE vehicleType, bool sendStatusText, MockConfiguration::FailureMode_t failureMode);
static MockLink* _startMockLink(MockConfiguration* mockConfig);
MockLinkMissionItemHandler _missionItemHandler;
......
......@@ -145,6 +145,9 @@ public:
bool connect(void);
bool disconnect(void);
/// Don't even think of calling this method!
QSerialPort* _hackAccessToPort(void) { return _port; }
private slots:
/**
* @brief Write a number of bytes to the interface.
......
......@@ -52,6 +52,10 @@ Rectangle {
text: qsTr("APM ArduSub Vehicle")
onClicked: QGroundControl.startAPMArduSubMockLink(sendStatusText.checked)
}
QGCButton {
text: qsTr("APM ArduRover Vehicle")
onClicked: QGroundControl.startAPMArduRoverMockLink(sendStatusText.checked)
}
QGCButton {
text: qsTr("Generic Vehicle")
onClicked: QGroundControl.startGenericMockLink(sendStatusText.checked)
......
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