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

OP-1245 Re-factored saving to board. Added code to save more things.

This commit is contained in:
m_thread 2014-03-20 17:02:44 +01:00
parent 838d8dd15f
commit b508c7dc96
2 changed files with 41 additions and 41 deletions

View File

@ -69,6 +69,9 @@ FlightLogManager::FlightLogManager(QObject *parent) :
m_flightLogSettings = DebugLogSettings::GetInstance(m_objectManager); m_flightLogSettings = DebugLogSettings::GetInstance(m_objectManager);
Q_ASSERT(m_flightLogSettings); Q_ASSERT(m_flightLogSettings);
m_objectPersistence = ObjectPersistence::GetInstance(m_objectManager);
Q_ASSERT(m_objectPersistence);
updateFlightEntries(m_flightLogStatus->getFlight()); updateFlightEntries(m_flightLogStatus->getFlight());
setupLogSettings(); setupLogSettings();
@ -490,11 +493,40 @@ void FlightLogManager::resetSettings(bool clear)
void FlightLogManager::saveSettingsToBoard() void FlightLogManager::saveSettingsToBoard()
{ {
m_flightLogSettings->setLoggingEnabled(m_loggingEnabled);
saveUAVObjectToFlash(m_flightLogSettings);
foreach(UAVOLogSettingsWrapper * wrapper, m_uavoEntries) { foreach(UAVOLogSettingsWrapper * wrapper, m_uavoEntries) {
wrapper->save(); if (wrapper->dirty()) {
UAVObject::Metadata meta = wrapper->object()->getMetadata();
wrapper->object()->SetLoggingUpdateMode(meta, wrapper->settingAsUpdateMode());
meta.loggingUpdatePeriod = wrapper->period();
wrapper->object()->setMetadata(meta);
if (saveUAVObjectToFlash(wrapper->object()->getMetaObject())) {
wrapper->setDirty(false);
}
}
} }
} }
bool FlightLogManager::saveUAVObjectToFlash(UAVObject *object)
{
UAVObjectUpdaterHelper helper;
if (helper.doObjectAndWait(object, 3000) == UAVObjectUpdaterHelper::SUCCESS) {
ObjectPersistence::DataFields data;
data.Operation = ObjectPersistence::OPERATION_SAVE;
data.Selection = ObjectPersistence::SELECTION_SINGLEOBJECT;
data.ObjectID = object->getObjID();
data.InstanceID = object->getInstID();
m_objectPersistence->setData(data);
return (helper.doObjectAndWait(m_objectPersistence, 3000) == UAVObjectUpdaterHelper::SUCCESS);
}
return false;
}
void FlightLogManager::updateFlightEntries(quint16 currentFlight) void FlightLogManager::updateFlightEntries(quint16 currentFlight)
{ {
Q_UNUSED(currentFlight); Q_UNUSED(currentFlight);
@ -514,14 +546,10 @@ void FlightLogManager::updateFlightEntries(quint16 currentFlight)
void FlightLogManager::setupUAVOWrappers() void FlightLogManager::setupUAVOWrappers()
{ {
ObjectPersistence *objectPersistance = ObjectPersistence::GetInstance(m_objectManager);
Q_ASSERT(objectPersistance);
foreach(QList<UAVObject *> objectList, m_objectManager->getObjects()) { foreach(QList<UAVObject *> objectList, m_objectManager->getObjects()) {
UAVObject *object = objectList.at(0); UAVObject *object = objectList.at(0);
if (!object->isMetaDataObject() && !object->isSettingsObject()) { if (!object->isMetaDataObject() && !object->isSettingsObject()) {
UAVOLogSettingsWrapper *wrapper = new UAVOLogSettingsWrapper(qobject_cast<UAVDataObject *>(object), objectPersistance); UAVOLogSettingsWrapper *wrapper = new UAVOLogSettingsWrapper(qobject_cast<UAVDataObject *>(object));
m_uavoEntries.append(wrapper); m_uavoEntries.append(wrapper);
m_uavoEntriesHash[wrapper->name()] = wrapper; m_uavoEntriesHash[wrapper->name()] = wrapper;
} }
@ -641,8 +669,8 @@ void ExtendedDebugLogEntry::setData(const DebugLogEntry::DataFields &data, UAVOb
UAVOLogSettingsWrapper::UAVOLogSettingsWrapper() : QObject() UAVOLogSettingsWrapper::UAVOLogSettingsWrapper() : QObject()
{} {}
UAVOLogSettingsWrapper::UAVOLogSettingsWrapper(UAVDataObject *object, ObjectPersistence *persistence) : QObject(), UAVOLogSettingsWrapper::UAVOLogSettingsWrapper(UAVDataObject *object) : QObject(),
m_object(object), m_setting(DISABLED), m_period(0), m_dirty(0), m_objectPersistence(persistence) m_object(object), m_setting(DISABLED), m_period(0), m_dirty(0)
{ {
reset(false); reset(false);
} }
@ -657,34 +685,6 @@ void UAVOLogSettingsWrapper::reset(bool clear)
setDirty(false); setDirty(false);
} }
void UAVOLogSettingsWrapper::save()
{
if(m_dirty) {
UAVObject::Metadata meta = m_object->getMetadata();
m_object->SetLoggingUpdateMode(meta, settingAsUpdateMode());
meta.loggingUpdatePeriod = m_period;
m_object->setMetadata(meta);
UAVObjectUpdaterHelper helper;
if (helper.doObjectAndWait(m_object->getMetaObject(), 1000) == UAVObjectUpdaterHelper::SUCCESS) {
ObjectPersistence::DataFields data;
data.Operation = ObjectPersistence::OPERATION_SAVE;
data.Selection = ObjectPersistence::SELECTION_SINGLEOBJECT;
data.ObjectID = m_object->getMetaObject()->getObjID();
data.InstanceID = m_object->getMetaObject()->getInstID();
m_objectPersistence->setData(data);
if (helper.doObjectAndWait(m_objectPersistence, 1000) == UAVObjectUpdaterHelper::SUCCESS) {
setDirty(false);
} else {
qDebug() << "Storing failed!";
}
} else {
qDebug() << "Updating failed!";
}
}
}
UAVObject::UpdateMode UAVOLogSettingsWrapper::settingAsUpdateMode() UAVObject::UpdateMode UAVOLogSettingsWrapper::settingAsUpdateMode()
{ {
switch (m_setting) { switch (m_setting) {

View File

@ -56,7 +56,7 @@ public:
enum UAVLogSetting { DISABLED = 0, ON_CHANGE, THROTTLED, PERIODICALLY }; enum UAVLogSetting { DISABLED = 0, ON_CHANGE, THROTTLED, PERIODICALLY };
explicit UAVOLogSettingsWrapper(); explicit UAVOLogSettingsWrapper();
explicit UAVOLogSettingsWrapper(UAVDataObject *object, ObjectPersistence *persistence); explicit UAVOLogSettingsWrapper(UAVDataObject *object);
~UAVOLogSettingsWrapper(); ~UAVOLogSettingsWrapper();
QString name() const QString name() const
@ -69,6 +69,8 @@ public:
return m_setting; return m_setting;
} }
UAVObject::UpdateMode settingAsUpdateMode();
int period() const int period() const
{ {
return m_period; return m_period;
@ -115,8 +117,6 @@ public slots:
} }
void reset(bool clear); void reset(bool clear);
void save();
void apply();
signals: signals:
void settingChanged(int setting); void settingChanged(int setting);
@ -131,9 +131,7 @@ private:
int m_setting; int m_setting;
int m_period; int m_period;
bool m_dirty; bool m_dirty;
ObjectPersistence *m_objectPersistence;
UAVObject::UpdateMode settingAsUpdateMode();
}; };
class ExtendedDebugLogEntry : public DebugLogEntry { class ExtendedDebugLogEntry : public DebugLogEntry {
@ -266,6 +264,7 @@ public slots:
void saveSettings(); void saveSettings();
void resetSettings(bool clear); void resetSettings(bool clear);
void saveSettingsToBoard(); void saveSettingsToBoard();
bool saveUAVObjectToFlash(UAVObject *object);
void setDisableControls(bool arg) void setDisableControls(bool arg)
{ {
@ -322,6 +321,7 @@ private:
DebugLogStatus *m_flightLogStatus; DebugLogStatus *m_flightLogStatus;
DebugLogEntry *m_flightLogEntry; DebugLogEntry *m_flightLogEntry;
DebugLogSettings *m_flightLogSettings; DebugLogSettings *m_flightLogSettings;
ObjectPersistence *m_objectPersistence;
QList<ExtendedDebugLogEntry *> m_logEntries; QList<ExtendedDebugLogEntry *> m_logEntries;
QStringList m_flightEntries; QStringList m_flightEntries;