/** * Connect signals from all the objects updates to the write routine then * run event loop */ void LoggingThread::run() { ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance(); UAVObjectManager *objManager = pm->getObject<UAVObjectManager>(); QList< QList<UAVObject*> > list; list = objManager->getObjects(); QList< QList<UAVObject*> >::const_iterator i; QList<UAVObject*>::const_iterator j; int objects = 0; for (i = list.constBegin(); i != list.constEnd(); ++i) { for (j = (*i).constBegin(); j != (*i).constEnd(); ++j) { connect(*j, SIGNAL(objectUpdated(UAVObject*)), (LoggingThread*) this, SLOT(objectUpdated(UAVObject*))); objects++; //qDebug() << "Detected " << j[0]; } } 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(); }
/** * 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(); } }