Browse Source

Limit disconnection scope when switching active vehicle - don't disconnect PlanMapItems (#9757)

* limit disconnection scope

* add test

* review comment

* review comments
QGC4.4
Remek Zajac 4 years ago committed by GitHub
parent
commit
f3406a33cc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      src/FlightDisplay/FlyViewMap.qml
  2. 6
      src/MissionManager/PlanMasterController.cc
  3. 33
      src/MissionManager/PlanMasterControllerTest.cc
  4. 3
      src/MissionManager/PlanMasterControllerTest.h

2
src/FlightDisplay/FlyViewMap.qml

@ -286,7 +286,7 @@ FlightMap { @@ -286,7 +286,7 @@ FlightMap {
PlanMapItems {
map: _root
largeMapView: !pipMode
planMasterController: _planMasterController
planMasterController: masterController
vehicle: _vehicle
property var _vehicle: object

6
src/MissionManager/PlanMasterController.cc

@ -127,9 +127,9 @@ void PlanMasterController::_activeVehicleChanged(Vehicle* activeVehicle) @@ -127,9 +127,9 @@ void PlanMasterController::_activeVehicleChanged(Vehicle* activeVehicle)
if (_managerVehicle) {
// Disconnect old vehicle. Be careful of wildcarding disconnect too much since _managerVehicle may equal _controllerVehicle
disconnect(_managerVehicle->missionManager(), nullptr, nullptr, nullptr);
disconnect(_managerVehicle->geoFenceManager(), nullptr, nullptr, nullptr);
disconnect(_managerVehicle->rallyPointManager(), nullptr, nullptr, nullptr);
disconnect(_managerVehicle->missionManager(), nullptr, this, nullptr);
disconnect(_managerVehicle->geoFenceManager(), nullptr, this, nullptr);
disconnect(_managerVehicle->rallyPointManager(), nullptr, this, nullptr);
}
bool newOffline = false;

33
src/MissionManager/PlanMasterControllerTest.cc

@ -15,11 +15,12 @@ @@ -15,11 +15,12 @@
#include "QGCApplication.h"
#include "SettingsManager.h"
#include "AppSettings.h"
#include "MultiSignalSpyV2.h"
PlanMasterControllerTest::PlanMasterControllerTest(void)
: _masterController(nullptr)
{
}
void PlanMasterControllerTest::init(void)
@ -50,3 +51,33 @@ void PlanMasterControllerTest::_testMissionPlannerFileLoad(void) @@ -50,3 +51,33 @@ void PlanMasterControllerTest::_testMissionPlannerFileLoad(void)
_masterController->loadFromFile(":/unittest/MissionPlanner.waypoints");
QCOMPARE(_masterController->missionController()->visualItems()->count(), 6);
}
void PlanMasterControllerTest::_testActiveVehicleChanged(void) {
// There was a defect where the PlanMasterController would, upon a new active vehicle,
// overzelously disconnect all subscribers interested in the outgoing active vechicle.
Vehicle* outgoingManagerVehicle = _masterController->managerVehicle();
// spyMissionManager emulates a subscriber that should not be disconnected when
// the active vehicle changes
MultiSignalSpyV2 spyMissionManager;
spyMissionManager.init(outgoingManagerVehicle->missionManager());
MultiSignalSpyV2 spyMasterController;
spyMasterController.init(_masterController);
// Since MissionManager works with actual vehicles (which we don't have in the test cycle)
// we have to be a bit creative emulating a signal emitted by a MissionManager.
emit outgoingManagerVehicle->missionManager()->error(0,"");
auto missionManagerErrorSignalMask = spyMissionManager.signalNameToMask("error");
QVERIFY(spyMissionManager.checkOnlySignalByMask(missionManagerErrorSignalMask));
spyMissionManager.clearSignal("error");
QVERIFY(spyMissionManager.checkNoSignals());
_connectMockLink(MAV_AUTOPILOT_PX4);
auto masterControllerMgrVehicleChanged = spyMasterController.signalNameToMask("managerVehicleChanged");
QVERIFY(spyMasterController.checkSignalByMask(masterControllerMgrVehicleChanged));
emit outgoingManagerVehicle->missionManager()->error(0,"");
// This signal was affected by the defect - it wouldn't reach the subscriber. Here
// we make sure it does.
QVERIFY(spyMissionManager.checkOnlySignalByMask(missionManagerErrorSignalMask));
}

3
src/MissionManager/PlanMasterControllerTest.h

@ -23,7 +23,7 @@ @@ -23,7 +23,7 @@
class PlanMasterControllerTest : public UnitTest
{
Q_OBJECT
public:
PlanMasterControllerTest(void);
@ -33,6 +33,7 @@ private slots: @@ -33,6 +33,7 @@ private slots:
void _testMissionFileLoad(void);
void _testMissionPlannerFileLoad(void);
void _testActiveVehicleChanged(void);
private:
PlanMasterController* _masterController;

Loading…
Cancel
Save