mirror of
https://bitbucket.org/librepilot/librepilot.git
synced 2025-02-18 08:54:15 +01:00
OP-1245 Added code to update and store meta data on the board.
This commit is contained in:
parent
cfff73361b
commit
838d8dd15f
@ -188,7 +188,7 @@ Rectangle {
|
||||
enabled: !logManager.disableControls && logManager.boardConnected
|
||||
model: logManager.logStatuses
|
||||
Layout.preferredWidth: 200
|
||||
currentIndex: logSettings.loggingEnabled
|
||||
currentIndex: logManager.loggingEnabled
|
||||
onCurrentIndexChanged: {
|
||||
logManager.setLoggingEnabled(currentIndex);
|
||||
}
|
||||
@ -346,12 +346,6 @@ Rectangle {
|
||||
Rectangle {
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
Button {
|
||||
enabled: !logManager.disableControls && logManager.boardConnected
|
||||
text: qsTr("Apply to board")
|
||||
activeFocusOnPress: true
|
||||
onClicked: logManager.applySettingsToBoard()
|
||||
}
|
||||
Button {
|
||||
enabled: !logManager.disableControls && logManager.boardConnected
|
||||
text: qsTr("Save to board")
|
||||
|
@ -50,10 +50,10 @@ FlightLogManager::FlightLogManager(QObject *parent) :
|
||||
|
||||
Q_ASSERT(pluginManager);
|
||||
|
||||
m_objectManager = pluginManager->getObject<UAVObjectManager>();
|
||||
m_objectManager = pluginManager->getObject<UAVObjectManager>();
|
||||
Q_ASSERT(m_objectManager);
|
||||
|
||||
m_telemtryManager = pluginManager->getObject<TelemetryManager>();
|
||||
m_telemtryManager = pluginManager->getObject<TelemetryManager>();
|
||||
Q_ASSERT(m_telemtryManager);
|
||||
|
||||
m_flightLogControl = DebugLogControl::GetInstance(m_objectManager);
|
||||
@ -77,6 +77,7 @@ FlightLogManager::FlightLogManager(QObject *parent) :
|
||||
|
||||
connect(m_telemtryManager, SIGNAL(connected()), this, SLOT(connectionStatusChanged()));
|
||||
connect(m_telemtryManager, SIGNAL(disconnected()), this, SLOT(connectionStatusChanged()));
|
||||
connectionStatusChanged();
|
||||
}
|
||||
|
||||
FlightLogManager::~FlightLogManager()
|
||||
@ -387,7 +388,8 @@ void FlightLogManager::cancelExportLogs()
|
||||
void FlightLogManager::loadSettings()
|
||||
{
|
||||
QString xmlFilter = tr("XML file %1").arg("(*.xml)");
|
||||
QString fileName = QFileDialog::getOpenFileName(NULL, tr("Load Log Settings"), QDir::homePath(), QString("%1").arg(xmlFilter));
|
||||
QString fileName = QFileDialog::getOpenFileName(NULL, tr("Load Log Settings"), QDir::homePath(), QString("%1").arg(xmlFilter));
|
||||
|
||||
if (!fileName.isEmpty()) {
|
||||
if (!fileName.endsWith(".xml")) {
|
||||
fileName.append(".xml");
|
||||
@ -414,11 +416,10 @@ void FlightLogManager::loadSettings()
|
||||
while (xmlReader.readNextStartElement()) {
|
||||
if (xmlReader.name() == "setting") {
|
||||
QString name = xmlReader.attributes().value("name").toString();
|
||||
int level = xmlReader.attributes().value("level").toInt(&ok);
|
||||
int level = xmlReader.attributes().value("level").toInt(&ok);
|
||||
if (ok) {
|
||||
int period = xmlReader.attributes().value("period").toInt(&ok);
|
||||
if (ok && updateLogWrapper(name, level, period)) {
|
||||
} else {
|
||||
if (ok && updateLogWrapper(name, level, period)) {} else {
|
||||
errorString = tr("Could not parse period attribute, or object with name '%1' could not be found.").arg(name);
|
||||
break;
|
||||
}
|
||||
@ -445,8 +446,9 @@ void FlightLogManager::loadSettings()
|
||||
void FlightLogManager::saveSettings()
|
||||
{
|
||||
QString xmlFilter = tr("XML file %1").arg("(*.xml)");
|
||||
QString fileName = QFileDialog::getSaveFileName(NULL, tr("Save Log Settings"),
|
||||
QDir::homePath(), QString("%1").arg(xmlFilter));
|
||||
QString fileName = QFileDialog::getSaveFileName(NULL, tr("Save Log Settings"),
|
||||
QDir::homePath(), QString("%1").arg(xmlFilter));
|
||||
|
||||
if (!fileName.isEmpty()) {
|
||||
if (!fileName.endsWith(".xml")) {
|
||||
fileName.append(".xml");
|
||||
@ -486,11 +488,12 @@ void FlightLogManager::resetSettings(bool clear)
|
||||
}
|
||||
}
|
||||
|
||||
void FlightLogManager::applySettingsToBoard()
|
||||
{}
|
||||
|
||||
void FlightLogManager::saveSettingsToBoard()
|
||||
{}
|
||||
{
|
||||
foreach(UAVOLogSettingsWrapper * wrapper, m_uavoEntries) {
|
||||
wrapper->save();
|
||||
}
|
||||
}
|
||||
|
||||
void FlightLogManager::updateFlightEntries(quint16 currentFlight)
|
||||
{
|
||||
@ -511,14 +514,16 @@ void FlightLogManager::updateFlightEntries(quint16 currentFlight)
|
||||
|
||||
void FlightLogManager::setupUAVOWrappers()
|
||||
{
|
||||
ObjectPersistence *objectPersistance = ObjectPersistence::GetInstance(m_objectManager);
|
||||
Q_ASSERT(objectPersistance);
|
||||
|
||||
foreach(QList<UAVObject *> objectList, m_objectManager->getObjects()) {
|
||||
UAVObject *object = objectList.at(0);
|
||||
|
||||
if (!object->isMetaDataObject() && !object->isSettingsObject()) {
|
||||
UAVOLogSettingsWrapper *wrapper = new UAVOLogSettingsWrapper(qobject_cast<UAVDataObject*>(object));
|
||||
UAVOLogSettingsWrapper *wrapper = new UAVOLogSettingsWrapper(qobject_cast<UAVDataObject *>(object), objectPersistance);
|
||||
m_uavoEntries.append(wrapper);
|
||||
m_uavoEntriesHash[wrapper->name()] = wrapper;
|
||||
qDebug() << objectList.at(0)->getName();
|
||||
}
|
||||
}
|
||||
emit uavoEntriesChanged();
|
||||
@ -527,12 +532,12 @@ void FlightLogManager::setupUAVOWrappers()
|
||||
void FlightLogManager::setupLogSettings()
|
||||
{
|
||||
// Corresponds to:
|
||||
// typedef enum {
|
||||
// UPDATEMODE_MANUAL = 0, /** Manually update object, by calling the updated() function */
|
||||
// UPDATEMODE_PERIODIC = 1, /** Automatically update object at periodic intervals */
|
||||
// UPDATEMODE_ONCHANGE = 2, /** Only update object when its data changes */
|
||||
// UPDATEMODE_THROTTLED = 3 /** Object is updated on change, but not more often than the interval time */
|
||||
// } UpdateMode;
|
||||
// typedef enum {
|
||||
// UPDATEMODE_MANUAL = 0, /** Manually update object, by calling the updated() function */
|
||||
// UPDATEMODE_PERIODIC = 1, /** Automatically update object at periodic intervals */
|
||||
// UPDATEMODE_ONCHANGE = 2, /** Only update object when its data changes */
|
||||
// UPDATEMODE_THROTTLED = 3 /** Object is updated on change, but not more often than the interval time */
|
||||
// } UpdateMode;
|
||||
|
||||
m_logSettings << tr("Disabled") << tr("Periodically") << tr("When updated") << tr("Throttled");
|
||||
}
|
||||
@ -551,7 +556,7 @@ void FlightLogManager::connectionStatusChanged()
|
||||
} else {
|
||||
setBoardConnected(false);
|
||||
}
|
||||
if(boardConnected()) {
|
||||
if (boardConnected()) {
|
||||
resetSettings(false);
|
||||
}
|
||||
}
|
||||
@ -559,6 +564,7 @@ void FlightLogManager::connectionStatusChanged()
|
||||
bool FlightLogManager::updateLogWrapper(QString name, int level, int period)
|
||||
{
|
||||
UAVOLogSettingsWrapper *wrapper = m_uavoEntriesHash[name];
|
||||
|
||||
if (wrapper) {
|
||||
wrapper->setSetting(level);
|
||||
wrapper->setPeriod(period);
|
||||
@ -635,8 +641,8 @@ void ExtendedDebugLogEntry::setData(const DebugLogEntry::DataFields &data, UAVOb
|
||||
UAVOLogSettingsWrapper::UAVOLogSettingsWrapper() : QObject()
|
||||
{}
|
||||
|
||||
UAVOLogSettingsWrapper::UAVOLogSettingsWrapper(UAVDataObject *object) : QObject(),
|
||||
m_object(object), m_setting(DISABLED), m_period(0), m_dirty(0)
|
||||
UAVOLogSettingsWrapper::UAVOLogSettingsWrapper(UAVDataObject *object, ObjectPersistence *persistence) : QObject(),
|
||||
m_object(object), m_setting(DISABLED), m_period(0), m_dirty(0), m_objectPersistence(persistence)
|
||||
{
|
||||
reset(false);
|
||||
}
|
||||
@ -650,3 +656,47 @@ void UAVOLogSettingsWrapper::reset(bool clear)
|
||||
setPeriod(clear ? 0 : m_object->getMetadata().loggingUpdatePeriod);
|
||||
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()
|
||||
{
|
||||
switch (m_setting) {
|
||||
case 0:
|
||||
return UAVObject::UPDATEMODE_MANUAL;
|
||||
case 1:
|
||||
return UAVObject::UPDATEMODE_PERIODIC;
|
||||
case 2:
|
||||
return UAVObject::UPDATEMODE_ONCHANGE;
|
||||
case 3:
|
||||
return UAVObject::UPDATEMODE_THROTTLED;
|
||||
default:
|
||||
return UAVObject::UPDATEMODE_MANUAL;
|
||||
}
|
||||
}
|
||||
|
@ -41,6 +41,7 @@
|
||||
#include "debuglogstatus.h"
|
||||
#include "debuglogsettings.h"
|
||||
#include "debuglogcontrol.h"
|
||||
#include "objectpersistence.h"
|
||||
#include "uavtalk/telemetrymanager.h"
|
||||
|
||||
class UAVOLogSettingsWrapper : public QObject {
|
||||
@ -55,7 +56,7 @@ public:
|
||||
enum UAVLogSetting { DISABLED = 0, ON_CHANGE, THROTTLED, PERIODICALLY };
|
||||
|
||||
explicit UAVOLogSettingsWrapper();
|
||||
explicit UAVOLogSettingsWrapper(UAVDataObject *object);
|
||||
explicit UAVOLogSettingsWrapper(UAVDataObject *object, ObjectPersistence *persistence);
|
||||
~UAVOLogSettingsWrapper();
|
||||
|
||||
QString name() const
|
||||
@ -87,8 +88,11 @@ public slots:
|
||||
void setSetting(int setting)
|
||||
{
|
||||
if (m_setting != setting) {
|
||||
m_setting = setting;
|
||||
m_setting = setting;
|
||||
setDirty(true);
|
||||
if (m_setting != 1 && m_setting != 3) {
|
||||
setPeriod(0);
|
||||
}
|
||||
emit settingChanged(setting);
|
||||
}
|
||||
}
|
||||
@ -111,6 +115,8 @@ public slots:
|
||||
}
|
||||
|
||||
void reset(bool clear);
|
||||
void save();
|
||||
void apply();
|
||||
|
||||
signals:
|
||||
void settingChanged(int setting);
|
||||
@ -125,6 +131,9 @@ private:
|
||||
int m_setting;
|
||||
int m_period;
|
||||
bool m_dirty;
|
||||
ObjectPersistence *m_objectPersistence;
|
||||
|
||||
UAVObject::UpdateMode settingAsUpdateMode();
|
||||
};
|
||||
|
||||
class ExtendedDebugLogEntry : public DebugLogEntry {
|
||||
@ -256,7 +265,6 @@ public slots:
|
||||
void loadSettings();
|
||||
void saveSettings();
|
||||
void resetSettings(bool clear);
|
||||
void applySettingsToBoard();
|
||||
void saveSettingsToBoard();
|
||||
|
||||
void setDisableControls(bool arg)
|
||||
|
@ -14,17 +14,14 @@ HEADERS += \
|
||||
uavdataobject.h \
|
||||
uavobjectfield.h \
|
||||
uavobjectsinit.h \
|
||||
uavobjectsplugin.h \
|
||||
uavobjecthelper.h
|
||||
|
||||
uavobjectsplugin.h
|
||||
SOURCES += \
|
||||
uavobject.cpp \
|
||||
uavmetaobject.cpp \
|
||||
uavobjectmanager.cpp \
|
||||
uavdataobject.cpp \
|
||||
uavobjectfield.cpp \
|
||||
uavobjectsplugin.cpp \
|
||||
uavobjecthelper.cpp
|
||||
uavobjectsplugin.cpp
|
||||
|
||||
OTHER_FILES += UAVObjects.pluginspec
|
||||
|
||||
|
@ -32,6 +32,9 @@ AbstractUAVObjectHelper::AbstractUAVObjectHelper(QObject *parent) :
|
||||
QObject(parent), m_transactionResult(false), m_transactionCompleted(false)
|
||||
{}
|
||||
|
||||
AbstractUAVObjectHelper::~AbstractUAVObjectHelper()
|
||||
{}
|
||||
|
||||
AbstractUAVObjectHelper::Result AbstractUAVObjectHelper::doObjectAndWait(UAVObject *object, int timeout)
|
||||
{
|
||||
// Lock, we can't call this twice from different threads
|
||||
@ -86,6 +89,9 @@ void AbstractUAVObjectHelper::transactionCompleted(UAVObject *object, bool succe
|
||||
UAVObjectUpdaterHelper::UAVObjectUpdaterHelper(QObject *parent) : AbstractUAVObjectHelper(parent)
|
||||
{}
|
||||
|
||||
UAVObjectUpdaterHelper::~UAVObjectUpdaterHelper()
|
||||
{}
|
||||
|
||||
void UAVObjectUpdaterHelper::doObjectAndWaitImpl()
|
||||
{
|
||||
m_object->updated();
|
||||
@ -94,6 +100,9 @@ void UAVObjectUpdaterHelper::doObjectAndWaitImpl()
|
||||
UAVObjectRequestHelper::UAVObjectRequestHelper(QObject *parent) : AbstractUAVObjectHelper(parent)
|
||||
{}
|
||||
|
||||
UAVObjectRequestHelper::~UAVObjectRequestHelper()
|
||||
{}
|
||||
|
||||
void UAVObjectRequestHelper::doObjectAndWaitImpl()
|
||||
{
|
||||
m_object->requestUpdate();
|
@ -39,6 +39,7 @@ class UAVOBJECTS_EXPORT AbstractUAVObjectHelper : public QObject {
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit AbstractUAVObjectHelper(QObject *parent = 0);
|
||||
virtual ~AbstractUAVObjectHelper();
|
||||
|
||||
enum Result { SUCCESS, FAIL, TIMEOUT };
|
||||
Result doObjectAndWait(UAVObject *object, int timeout);
|
||||
@ -61,6 +62,7 @@ class UAVOBJECTS_EXPORT UAVObjectUpdaterHelper : public AbstractUAVObjectHelper
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit UAVObjectUpdaterHelper(QObject *parent = 0);
|
||||
virtual ~UAVObjectUpdaterHelper();
|
||||
|
||||
protected:
|
||||
virtual void doObjectAndWaitImpl();
|
||||
@ -70,6 +72,7 @@ class UAVOBJECTS_EXPORT UAVObjectRequestHelper : public AbstractUAVObjectHelper
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit UAVObjectRequestHelper(QObject *parent = 0);
|
||||
virtual ~UAVObjectRequestHelper();
|
||||
|
||||
protected:
|
||||
virtual void doObjectAndWaitImpl();
|
@ -7,9 +7,11 @@ include(uavobjectutil_dependencies.pri)
|
||||
HEADERS += uavobjectutil_global.h \
|
||||
uavobjectutilmanager.h \
|
||||
uavobjectutilplugin.h \
|
||||
devicedescriptorstruct.h
|
||||
devicedescriptorstruct.h \
|
||||
uavobjecthelper.h
|
||||
|
||||
SOURCES += uavobjectutilmanager.cpp \
|
||||
uavobjectutilplugin.cpp
|
||||
uavobjectutilplugin.cpp \
|
||||
uavobjecthelper.cpp
|
||||
|
||||
OTHER_FILES += UAVObjectUtil.pluginspec
|
||||
|
Loading…
x
Reference in New Issue
Block a user