mirror of
https://bitbucket.org/librepilot/librepilot.git
synced 2025-02-14 04:54:15 +01:00
123 lines
5.0 KiB
C++
123 lines
5.0 KiB
C++
/**
|
|
******************************************************************************
|
|
*
|
|
* @file thermalcalibrationmodel.cpp
|
|
* @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2014.
|
|
*
|
|
* @brief ThermalCalibrationModel
|
|
* @see The GNU Public License (GPL) Version 3
|
|
* @defgroup
|
|
* @{
|
|
*
|
|
*****************************************************************************/
|
|
/*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful, but
|
|
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
* for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along
|
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
*/
|
|
|
|
#include "thermalcalibrationmodel.h"
|
|
#include "settingshandlingtransitions.h"
|
|
#include "boardsetuptransition.h"
|
|
#include "dataacquisitiontransition.h"
|
|
#include "compensationcalculationtransition.h"
|
|
|
|
namespace OpenPilot {
|
|
ThermalCalibrationModel::ThermalCalibrationModel(QObject *parent) :
|
|
WizardModel(parent),
|
|
m_startEnabled(false),
|
|
m_cancelEnabled(false),
|
|
m_endEnabled(false),
|
|
m_dirty(false)
|
|
{
|
|
m_helper.reset(new ThermalCalibrationHelper());
|
|
|
|
m_readyState = new WizardState("Ready", this),
|
|
m_workingState = new WizardState("Working", this);
|
|
|
|
m_saveSettingState = new WizardState("Storing Settings", m_workingState);
|
|
m_workingState->setInitialState(m_saveSettingState);
|
|
|
|
m_setupState = new WizardState("SetupBoard", m_workingState);
|
|
|
|
m_acquisitionState = new WizardState("Acquiring", m_workingState);
|
|
m_restoreState = new WizardState("Restoring Settings", m_workingState);
|
|
m_calculateState = new WizardState("Calculating", m_workingState);
|
|
|
|
m_abortState = new WizardState("Canceled", this);
|
|
|
|
m_completedState = new WizardState("Completed", this);
|
|
|
|
setTransitions();
|
|
|
|
connect(m_helper.data(), SIGNAL(temperatureChanged(float)), this, SLOT(setTemperature(float)));
|
|
connect(m_helper.data(), SIGNAL(temperatureGradientChanged(float)), this, SLOT(setTemperatureGradient(float)));
|
|
connect(m_helper.data(), SIGNAL(temperatureRangeChanged(float)), this, SLOT(setTemperatureRange(float)));
|
|
connect(m_helper.data(), SIGNAL(progressChanged(int)), this, SLOT(setProgress(int)));
|
|
connect(m_helper.data(), SIGNAL(progressMaxChanged(int)), this, SLOT(setProgressMax(int)));
|
|
connect(m_helper.data(), SIGNAL(instructionsAdded(QString, WizardModel::MessageType)), this, SLOT(addInstructions(QString, WizardModel::MessageType)));
|
|
connect(m_readyState, SIGNAL(entered()), this, SLOT(stopWizard()));
|
|
connect(m_readyState, SIGNAL(exited()), this, SLOT(startWizard()));
|
|
connect(m_completedState, SIGNAL(entered()), this, SLOT(stopWizard()));
|
|
connect(m_completedState, SIGNAL(exited()), this, SLOT(startWizard()));
|
|
|
|
setInitialState(m_readyState);
|
|
|
|
m_steps << m_readyState << m_saveSettingState << m_setupState << m_acquisitionState << m_restoreState << m_calculateState;
|
|
}
|
|
|
|
void ThermalCalibrationModel::init()
|
|
{
|
|
setStartEnabled(true);
|
|
setEndEnabled(false);
|
|
setCancelEnabled(false);
|
|
setTemperature(NAN);
|
|
setTemperatureGradient(NAN);
|
|
setTemperatureRange(NAN);
|
|
start();
|
|
}
|
|
|
|
void ThermalCalibrationModel::stepChanged(WizardState *state)
|
|
{
|
|
Q_UNUSED(state);
|
|
}
|
|
|
|
void ThermalCalibrationModel::setTransitions()
|
|
{
|
|
m_readyState->addTransition(this, SIGNAL(next()), m_workingState);
|
|
m_readyState->assignProperty(this, "progressMax", 100);
|
|
m_readyState->assignProperty(this, "progress", 0);
|
|
|
|
m_completedState->addTransition(this, SIGNAL(next()), m_workingState);
|
|
|
|
// handles board initial status save
|
|
// Ready->WorkingState->saveSettings->setup
|
|
m_saveSettingState->addTransition(new BoardStatusSaveTransition(m_helper.data(), m_saveSettingState, m_setupState));
|
|
// board setup
|
|
// setup
|
|
m_setupState->addTransition(new BoardSetupTransition(m_helper.data(), m_setupState, m_acquisitionState));
|
|
|
|
// acquisition>revertSettings>calculation(save state)
|
|
// revert settings after acquisition is completed
|
|
m_acquisitionState->addTransition(new DataAcquisitionTransition(m_helper.data(), m_acquisitionState, m_restoreState));
|
|
m_restoreState->addTransition(new BoardStatusRestoreTransition(m_helper.data(), m_restoreState, m_calculateState));
|
|
m_calculateState->addTransition(new CompensationCalculationTransition(m_helper.data(), m_calculateState, m_completedState));
|
|
|
|
// abort causes initial settings to be restored and acquisition stopped.
|
|
m_abortState->addTransition(new BoardStatusRestoreTransition(m_helper.data(), m_abortState, m_readyState));
|
|
|
|
m_workingState->addTransition(this, SIGNAL(abort()), m_abortState);
|
|
// Ready
|
|
}
|
|
}
|