mirror of
https://bitbucket.org/librepilot/librepilot.git
synced 2025-02-05 21:52:10 +01:00
Logging plugin will refresh all the settings if telemetry is already connected, so that the log file always contains all the setting objects, which is vital for post-flight analysis.
git-svn-id: svn://svn.openpilot.org/OpenPilot/trunk@2184 ebee16cc-31ac-478f-84a7-5cbb03baadba
This commit is contained in:
parent
327252f5c0
commit
477657ea6e
@ -44,6 +44,7 @@
|
|||||||
#include <coreplugin/actionmanager/actionmanager.h>
|
#include <coreplugin/actionmanager/actionmanager.h>
|
||||||
#include <coreplugin/icore.h>
|
#include <coreplugin/icore.h>
|
||||||
#include <QKeySequence>
|
#include <QKeySequence>
|
||||||
|
#include "uavobjects/uavobjectmanager.h"
|
||||||
#include <uavobjects/uavobjectmanager.h>
|
#include <uavobjects/uavobjectmanager.h>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -104,6 +105,17 @@ void LoggingThread::run()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GCSTelemetryStats* gcsStatsObj = GCSTelemetryStats::GetInstance(objManager);
|
||||||
|
GCSTelemetryStats::DataFields gcsStats = gcsStatsObj->getData();
|
||||||
|
if ( gcsStats.Status == GCSTelemetryStats::STATUS_CONNECTED )
|
||||||
|
{
|
||||||
|
qDebug() << "Logging: connected already, ask for all settings";
|
||||||
|
retrieveSettings();
|
||||||
|
} else {
|
||||||
|
qDebug() << "Logging: not connected, do no ask for settings";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
exec();
|
exec();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -119,6 +131,84 @@ void LoggingThread::stopLogging()
|
|||||||
quit();
|
quit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize queue with settings objects to be retrieved.
|
||||||
|
*/
|
||||||
|
void LoggingThread::retrieveSettings()
|
||||||
|
{
|
||||||
|
// Clear object queue
|
||||||
|
queue.clear();
|
||||||
|
// Get all objects, add metaobjects, settings and data objects with OnChange update mode to the queue
|
||||||
|
// Get UAVObjectManager instance
|
||||||
|
ExtensionSystem::PluginManager* pm = ExtensionSystem::PluginManager::instance();
|
||||||
|
UAVObjectManager *objMngr = pm->getObject<UAVObjectManager>();
|
||||||
|
QList< QList<UAVDataObject*> > objs = objMngr->getDataObjects();
|
||||||
|
for (int n = 0; n < objs.length(); ++n)
|
||||||
|
{
|
||||||
|
UAVDataObject* obj = objs[n][0];
|
||||||
|
if ( obj->isSettings() )
|
||||||
|
{
|
||||||
|
queue.enqueue(obj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Start retrieving
|
||||||
|
qDebug() << tr("Logging: retrieve settings objects from the autopilot (%1 objects)")
|
||||||
|
.arg( queue.length());
|
||||||
|
retrieveNextObject();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve the next object in the queue
|
||||||
|
*/
|
||||||
|
void LoggingThread::retrieveNextObject()
|
||||||
|
{
|
||||||
|
// If queue is empty return
|
||||||
|
if ( queue.isEmpty() )
|
||||||
|
{
|
||||||
|
qDebug() << "Logging: Object retrieval completed";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// Get next object from the queue
|
||||||
|
UAVObject* obj = queue.dequeue();
|
||||||
|
// Connect to object
|
||||||
|
connect(obj, SIGNAL(transactionCompleted(UAVObject*,bool)), this, SLOT(transactionCompleted(UAVObject*,bool)));
|
||||||
|
// Request update
|
||||||
|
obj->requestUpdate();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called by the retrieved object when a transaction is completed.
|
||||||
|
*/
|
||||||
|
void LoggingThread::transactionCompleted(UAVObject* obj, bool success)
|
||||||
|
{
|
||||||
|
Q_UNUSED(success);
|
||||||
|
// Disconnect from sending object
|
||||||
|
obj->disconnect(this);
|
||||||
|
// Process next object if telemetry is still available
|
||||||
|
// Get stats objects
|
||||||
|
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
|
||||||
|
UAVObjectManager *objManager = pm->getObject<UAVObjectManager>();
|
||||||
|
GCSTelemetryStats* gcsStatsObj = GCSTelemetryStats::GetInstance(objManager);
|
||||||
|
GCSTelemetryStats::DataFields gcsStats = gcsStatsObj->getData();
|
||||||
|
if ( gcsStats.Status == GCSTelemetryStats::STATUS_CONNECTED )
|
||||||
|
{
|
||||||
|
retrieveNextObject();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
qDebug() << "Logging: Object retrieval has been cancelled";
|
||||||
|
queue.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/****************************************************************
|
||||||
|
Logging plugin
|
||||||
|
********************************/
|
||||||
|
|
||||||
|
|
||||||
LoggingPlugin::LoggingPlugin() : state(IDLE)
|
LoggingPlugin::LoggingPlugin() : state(IDLE)
|
||||||
{
|
{
|
||||||
// Do nothing
|
// Do nothing
|
||||||
@ -306,6 +396,9 @@ void LoggingPlugin::replayStopped()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void LoggingPlugin::extensionsInitialized()
|
void LoggingPlugin::extensionsInitialized()
|
||||||
{
|
{
|
||||||
// Do nothing
|
// Do nothing
|
||||||
|
@ -29,10 +29,12 @@
|
|||||||
|
|
||||||
#include <extensionsystem/iplugin.h>
|
#include <extensionsystem/iplugin.h>
|
||||||
#include <uavobjects/uavobjectmanager.h>
|
#include <uavobjects/uavobjectmanager.h>
|
||||||
|
#include "uavobjects/gcstelemetrystats.h"
|
||||||
#include <uavtalk/uavtalk.h>
|
#include <uavtalk/uavtalk.h>
|
||||||
#include <logfile.h>
|
#include <logfile.h>
|
||||||
|
|
||||||
#include <QThread>
|
#include <QThread>
|
||||||
|
#include <QQueue>
|
||||||
#include <QReadWriteLock>
|
#include <QReadWriteLock>
|
||||||
|
|
||||||
class LoggingPlugin;
|
class LoggingPlugin;
|
||||||
@ -46,6 +48,7 @@ public:
|
|||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void objectUpdated(UAVObject * obj);
|
void objectUpdated(UAVObject * obj);
|
||||||
|
void transactionCompleted(UAVObject* obj, bool success);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void stopLogging();
|
void stopLogging();
|
||||||
@ -55,6 +58,13 @@ protected:
|
|||||||
QReadWriteLock lock;
|
QReadWriteLock lock;
|
||||||
LogFile logFile;
|
LogFile logFile;
|
||||||
UAVTalk * uavTalk;
|
UAVTalk * uavTalk;
|
||||||
|
|
||||||
|
private:
|
||||||
|
QQueue<UAVDataObject*> queue;
|
||||||
|
|
||||||
|
void retrieveSettings();
|
||||||
|
void retrieveNextObject();
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class LoggingPlugin : public ExtensionSystem::IPlugin
|
class LoggingPlugin : public ExtensionSystem::IPlugin
|
||||||
@ -96,6 +106,7 @@ private slots:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
LoggingGadgetFactory *mf;
|
LoggingGadgetFactory *mf;
|
||||||
|
|
||||||
};
|
};
|
||||||
#endif /* LoggingPLUGIN_H_ */
|
#endif /* LoggingPLUGIN_H_ */
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user