/** * Update the data of an object from a byte array (unpack). * If the object instance could not be found in the list, then a * new one is created. */ UAVObject* UAVTalk::updateObject(quint32 objId, quint16 instId, quint8* data) { // Get object UAVObject* obj = objMngr->getObject(objId, instId); // If the instance does not exist create it if (obj == NULL) { // Get the object type UAVObject* tobj = objMngr->getObject(objId); if (tobj == NULL) { return NULL; } // Make sure this is a data object UAVDataObject* dobj = dynamic_cast<UAVDataObject*>(tobj); if (dobj == NULL) { return NULL; } // Create a new instance, unpack and register UAVDataObject* instobj = dobj->clone(instId); if ( !objMngr->registerObject(instobj) ) { return NULL; } instobj->unpack(data); return instobj; } else { // Unpack data into object instance obj->unpack(data); return obj; } }
void ExtendedDebugLogEntry::setData(const DebugLogEntry::DataFields &data, UAVObjectManager *objectManager) { DebugLogEntry::setData(data); if (getType() == DebugLogEntry::TYPE_UAVOBJECT) { UAVDataObject *object = (UAVDataObject *)objectManager->getObject(getObjectID(), getInstanceID()); Q_ASSERT(object); m_object = object->clone(getInstanceID()); m_object->unpack(getData().Data); } }