1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2025-03-15 07:29:15 +01:00

Merge remote-tracking branch 'origin/skarlsso/OP-1604_radio_wizard_crashes' into rel-14.10

This commit is contained in:
Fredrik Arvidsson 2014-11-11 07:36:08 +01:00
commit adba295a6c
2 changed files with 65 additions and 18 deletions

View File

@ -58,13 +58,24 @@ 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());
flightModeSettingsObj = FlightModeSettings::GetInstance(getObjectManager());
flightStatusObj = FlightStatus::GetInstance(getObjectManager());
receiverActivityObj = ReceiverActivity::GetInstance(getObjectManager());
accessoryDesiredObj0 = AccessoryDesired::GetInstance(getObjectManager(), 0);
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);
ui = new Ui_InputWidget();
ui->setupUi(this);
@ -398,10 +409,6 @@ void ConfigInputWidget::goToWizard()
flightModeSettingsData.Arming = FlightModeSettings::ARMING_ALWAYSDISARMED;
flightModeSettingsObj->setData(flightModeSettingsData);
accessoryDesiredObj0 = AccessoryDesired::GetInstance(getObjectManager(), 0);
accessoryDesiredObj1 = AccessoryDesired::GetInstance(getObjectManager(), 1);
accessoryDesiredObj2 = AccessoryDesired::GetInstance(getObjectManager(), 2);
// 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)
@ -1534,7 +1581,7 @@ void ConfigInputWidget::simpleCalibration(bool enable)
manualSettingsData.ChannelMax[i] = manualCommandData.Channel[i];
}
fastMdata();
fastMdataSingle(manualCommandObj, &manualControlMdata);
connect(manualCommandObj, SIGNAL(objectUnpacked(UAVObject *)), this, SLOT(updateCalibration()));
} else {
@ -1543,7 +1590,7 @@ void ConfigInputWidget::simpleCalibration(bool enable)
manualCommandData = manualCommandObj->getData();
manualSettingsData = manualSettingsObj->getData();
restoreMdata();
restoreMdataSingle(manualCommandObj, &manualControlMdata);
for (unsigned int i = 0; i < ManualControlCommand::CHANNEL_NUMELEM; i++) {
manualSettingsData.ChannelNeutral[i] = manualCommandData.Channel[i];

View File

@ -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();