mirror of
https://bitbucket.org/librepilot/librepilot.git
synced 2025-02-20 10:54:14 +01:00
OP-1604 Reinitialize accessoryDesiredObjects if they weren't initialized
Only instance 0 of UAVOs is initialized if no board is connected. The TX Wizard tried to setup accessoryDesired instances 1 and 2 but failed, causing crashes later in the wizard.
This commit is contained in:
parent
da76ce1577
commit
90e0459522
@ -58,7 +58,10 @@ ConfigInputWidget::ConfigInputWidget(QWidget *parent) :
|
||||
skipflag(false),
|
||||
nextDelayedTimer(),
|
||||
nextDelayedTick(0),
|
||||
nextDelayedLatestActivityTick(0)
|
||||
nextDelayedLatestActivityTick(0),
|
||||
accessoryDesiredObj0(NULL),
|
||||
accessoryDesiredObj1(NULL),
|
||||
accessoryDesiredObj2(NULL)
|
||||
{
|
||||
manualCommandObj = ManualControlCommand::GetInstance(getObjectManager());
|
||||
manualSettingsObj = ManualControlSettings::GetInstance(getObjectManager());
|
||||
@ -402,6 +405,10 @@ void ConfigInputWidget::goToWizard()
|
||||
accessoryDesiredObj1 = AccessoryDesired::GetInstance(getObjectManager(), 1);
|
||||
accessoryDesiredObj2 = AccessoryDesired::GetInstance(getObjectManager(), 2);
|
||||
|
||||
// Only instance 0 is present if the board is not connected.
|
||||
// The other instances are populated lazily.
|
||||
Q_ASSERT(accessoryDesiredObj0);
|
||||
|
||||
// Use faster input update rate.
|
||||
fastMdata();
|
||||
|
||||
@ -1293,15 +1300,54 @@ void ConfigInputWidget::moveTxControls()
|
||||
}
|
||||
}
|
||||
|
||||
AccessoryDesired *ConfigInputWidget::getAccessoryDesiredInstance(int instance)
|
||||
{
|
||||
switch (instance) {
|
||||
case 0:
|
||||
if (accessoryDesiredObj0 == NULL) {
|
||||
accessoryDesiredObj0 = AccessoryDesired::GetInstance(getObjectManager(), 0);
|
||||
}
|
||||
return accessoryDesiredObj0;
|
||||
|
||||
case 1:
|
||||
if (accessoryDesiredObj1 == NULL) {
|
||||
accessoryDesiredObj1 = AccessoryDesired::GetInstance(getObjectManager(), 1);
|
||||
}
|
||||
return accessoryDesiredObj1;
|
||||
|
||||
case 2:
|
||||
if (accessoryDesiredObj2 == NULL) {
|
||||
accessoryDesiredObj2 = AccessoryDesired::GetInstance(getObjectManager(), 2);
|
||||
}
|
||||
return accessoryDesiredObj2;
|
||||
|
||||
default:
|
||||
Q_ASSERT(false);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
float ConfigInputWidget::getAccessoryDesiredValue(int instance)
|
||||
{
|
||||
AccessoryDesired *accessoryDesiredObj = getAccessoryDesiredInstance(instance);
|
||||
|
||||
if (accessoryDesiredObj == NULL) {
|
||||
Q_ASSERT(false);
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
AccessoryDesired::DataFields data = accessoryDesiredObj->getData();
|
||||
|
||||
return data.AccessoryVal;
|
||||
}
|
||||
|
||||
void ConfigInputWidget::moveSticks()
|
||||
{
|
||||
QTransform trans;
|
||||
|
||||
manualCommandData = manualCommandObj->getData();
|
||||
flightStatusData = flightStatusObj->getData();
|
||||
accessoryDesiredData0 = accessoryDesiredObj0->getData();
|
||||
accessoryDesiredData1 = accessoryDesiredObj1->getData();
|
||||
accessoryDesiredData2 = accessoryDesiredObj2->getData();
|
||||
manualCommandData = manualCommandObj->getData();
|
||||
flightStatusData = flightStatusObj->getData();
|
||||
|
||||
switch (transmitterMode) {
|
||||
case mode1:
|
||||
@ -1342,9 +1388,10 @@ void ConfigInputWidget::moveSticks()
|
||||
m_txFlightMode->setElementId("flightModeRight");
|
||||
m_txFlightMode->setTransform(m_txFlightModeROrig, false);
|
||||
}
|
||||
m_txAccess0->setTransform(QTransform(m_txAccess0Orig).translate(accessoryDesiredData0.AccessoryVal * ACCESS_MAX_MOVE * 10, 0), false);
|
||||
m_txAccess1->setTransform(QTransform(m_txAccess1Orig).translate(accessoryDesiredData1.AccessoryVal * ACCESS_MAX_MOVE * 10, 0), false);
|
||||
m_txAccess2->setTransform(QTransform(m_txAccess2Orig).translate(accessoryDesiredData2.AccessoryVal * ACCESS_MAX_MOVE * 10, 0), false);
|
||||
|
||||
m_txAccess0->setTransform(QTransform(m_txAccess0Orig).translate(getAccessoryDesiredValue(0) * ACCESS_MAX_MOVE * 10, 0), false);
|
||||
m_txAccess1->setTransform(QTransform(m_txAccess1Orig).translate(getAccessoryDesiredValue(1) * ACCESS_MAX_MOVE * 10, 0), false);
|
||||
m_txAccess2->setTransform(QTransform(m_txAccess2Orig).translate(getAccessoryDesiredValue(2) * ACCESS_MAX_MOVE * 10, 0), false);
|
||||
}
|
||||
|
||||
void ConfigInputWidget::dimOtherControls(bool value)
|
||||
|
@ -116,9 +116,6 @@ private:
|
||||
AccessoryDesired *accessoryDesiredObj0;
|
||||
AccessoryDesired *accessoryDesiredObj1;
|
||||
AccessoryDesired *accessoryDesiredObj2;
|
||||
AccessoryDesired::DataFields accessoryDesiredData0;
|
||||
AccessoryDesired::DataFields accessoryDesiredData1;
|
||||
AccessoryDesired::DataFields accessoryDesiredData2;
|
||||
|
||||
ManualControlSettings *manualSettingsObj;
|
||||
ManualControlSettings::DataFields manualSettingsData;
|
||||
@ -171,6 +168,9 @@ private:
|
||||
void wzNextDelayedStart();
|
||||
void wzNextDelayedCancel();
|
||||
|
||||
AccessoryDesired *getAccessoryDesiredInstance(int instance);
|
||||
float getAccessoryDesiredValue(int instance);
|
||||
|
||||
private slots:
|
||||
void wzNext();
|
||||
void wzNextDelayed();
|
||||
|
Loading…
x
Reference in New Issue
Block a user