/** * Initiate object retrieval, initialize queue with objects to be retrieved. */ void TelemetryMonitor::startRetrievingObjects() { // Clear object queue queue.clear(); // Get all objects, add metaobjects, settings and data objects with OnChange update mode to the queue QList< QList<UAVObject *> > objs = objMngr->getObjects(); for (int n = 0; n < objs.length(); ++n) { UAVObject *obj = objs[n][0]; UAVMetaObject *mobj = dynamic_cast<UAVMetaObject *>(obj); UAVDataObject *dobj = dynamic_cast<UAVDataObject *>(obj); UAVObject::Metadata mdata = obj->getMetadata(); if (mobj != NULL) { queue.enqueue(obj); } else if (dobj != NULL) { if (dobj->isSettings()) { queue.enqueue(obj); } else { if (UAVObject::GetFlightTelemetryUpdateMode(mdata) == UAVObject::UPDATEMODE_ONCHANGE) { queue.enqueue(obj); } } } } // Start retrieving qDebug() << tr("Starting to retrieve meta and settings objects from the autopilot (%1 objects)") .arg(queue.length()); retrieveNextObject(); }
/** * Called by the retrieved object when a transaction is completed. */ void TelemetryMonitor::transactionCompleted(UAVObject* obj, bool success) { Q_UNUSED(success); QMutexLocker locker(mutex); // Disconnect from sending object obj->disconnect(this); objPending = NULL; // Process next object if telemetry is still available GCSTelemetryStats::DataFields gcsStats = gcsStatsObj->getData(); if ( gcsStats.Status == GCSTelemetryStats::STATUS_CONNECTED ) { retrieveNextObject(); } else { stopRetrievingObjects(); } }
/** * 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(); } }
/** * 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->isSettingsObject()) { queue.enqueue(obj); } } // Start retrieving qDebug() << tr("Logging: retrieve settings objects from the autopilot (%1 objects)") .arg(queue.length()); retrieveNextObject(); }