From b9fabbe9ce0684f0207693688589c1645f35e89c Mon Sep 17 00:00:00 2001 From: kokomojoe Date: Wed, 6 Oct 2010 02:13:33 +0000 Subject: [PATCH] OP-185 Flight/GCS firmware IAP object git-svn-id: svn://svn.openpilot.org/OpenPilot/trunk@1893 ebee16cc-31ac-478f-84a7-5cbb03baadba --- .../src/plugins/uavobjects/firmwareiapobj.cpp | 142 ++++++++++++++++++ .../src/plugins/uavobjects/firmwareiapobj.h | 88 +++++++++++ .../src/plugins/uavobjects/firmwareiapobj.py | 128 ++++++++++++++++ 3 files changed, 358 insertions(+) create mode 100644 ground/src/plugins/uavobjects/firmwareiapobj.cpp create mode 100644 ground/src/plugins/uavobjects/firmwareiapobj.h create mode 100644 ground/src/plugins/uavobjects/firmwareiapobj.py diff --git a/ground/src/plugins/uavobjects/firmwareiapobj.cpp b/ground/src/plugins/uavobjects/firmwareiapobj.cpp new file mode 100644 index 000000000..62f51cbe1 --- /dev/null +++ b/ground/src/plugins/uavobjects/firmwareiapobj.cpp @@ -0,0 +1,142 @@ +/** + ****************************************************************************** + * + * @file firmwareiapobj.cpp + * @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010. + * @see The GNU Public License (GPL) Version 3 + * @addtogroup GCSPlugins GCS Plugins + * @{ + * @addtogroup UAVObjectsPlugin UAVObjects Plugin + * @{ + * + * @note Object definition file: firmwareiap.xml. + * This is an automatically generated file. + * DO NOT modify manually. + * + * @brief The UAVUObjects GCS plugin + *****************************************************************************/ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +#include "firmwareiapobj.h" +#include "uavobjectfield.h" + +const QString FirmwareIAPObj::NAME = QString("FirmwareIAPObj"); + +/** + * Constructor + */ +FirmwareIAPObj::FirmwareIAPObj(): UAVDataObject(OBJID, ISSINGLEINST, ISSETTINGS, NAME) +{ + // Create fields + QList fields; + QStringList CommandElemNames; + CommandElemNames.append("0"); + fields.append( new UAVObjectField(QString("Command"), QString("na"), UAVObjectField::UINT16, CommandElemNames, QStringList()) ); + QStringList PortElemNames; + PortElemNames.append("0"); + fields.append( new UAVObjectField(QString("Port"), QString("na"), UAVObjectField::UINT32, PortElemNames, QStringList()) ); + QStringList VersionElemNames; + VersionElemNames.append("0"); + VersionElemNames.append("1"); + VersionElemNames.append("2"); + fields.append( new UAVObjectField(QString("Version"), QString("na"), UAVObjectField::UINT8, VersionElemNames, QStringList()) ); + QStringList SVNElemNames; + SVNElemNames.append("0"); + fields.append( new UAVObjectField(QString("SVN"), QString("na"), UAVObjectField::UINT16, SVNElemNames, QStringList()) ); + QStringList crcElemNames; + crcElemNames.append("0"); + fields.append( new UAVObjectField(QString("crc"), QString("na"), UAVObjectField::UINT32, crcElemNames, QStringList()) ); + + // Initialize object + initializeFields(fields, (quint8*)&data, NUMBYTES); + // Set the default field values + setDefaultFieldValues(); +} + +/** + * Get the default metadata for this object + */ +UAVObject::Metadata FirmwareIAPObj::getDefaultMetadata() +{ + UAVObject::Metadata metadata; + metadata.flightAccess = ACCESS_READWRITE; + metadata.gcsAccess = ACCESS_READWRITE; + metadata.gcsTelemetryAcked = 1; + metadata.gcsTelemetryUpdateMode = UAVObject::UPDATEMODE_MANUAL; + metadata.gcsTelemetryUpdatePeriod = 0; + metadata.flightTelemetryAcked = 1; + metadata.flightTelemetryUpdateMode = UAVObject::UPDATEMODE_MANUAL; + metadata.flightTelemetryUpdatePeriod = 0; + metadata.loggingUpdateMode = UAVObject::UPDATEMODE_NEVER; + metadata.loggingUpdatePeriod = 0; + return metadata; +} + +/** + * Initialize object fields with the default values. + * If a default value is not specified the object fields + * will be initialized to zero. + */ +void FirmwareIAPObj::setDefaultFieldValues() +{ + +} + +/** + * Get the object data fields + */ +FirmwareIAPObj::DataFields FirmwareIAPObj::getData() +{ + QMutexLocker locker(mutex); + return data; +} + +/** + * Set the object data fields + */ +void FirmwareIAPObj::setData(const DataFields& data) +{ + QMutexLocker locker(mutex); + // Get metadata + Metadata mdata = getMetadata(); + // Update object if the access mode permits + if ( mdata.gcsAccess == ACCESS_READWRITE ) + { + this->data = data; + emit objectUpdatedAuto(this); // trigger object updated event + emit objectUpdated(this); + } +} + +/** + * Create a clone of this object, a new instance ID must be specified. + * Do not use this function directly to create new instances, the + * UAVObjectManager should be used instead. + */ +UAVDataObject* FirmwareIAPObj::clone(quint32 instID) +{ + FirmwareIAPObj* obj = new FirmwareIAPObj(); + obj->initialize(instID, this->getMetaObject()); + return obj; +} + +/** + * Static function to retrieve an instance of the object. + */ +FirmwareIAPObj* FirmwareIAPObj::GetInstance(UAVObjectManager* objMngr, quint32 instID) +{ + return dynamic_cast(objMngr->getObject(FirmwareIAPObj::OBJID, instID)); +} diff --git a/ground/src/plugins/uavobjects/firmwareiapobj.h b/ground/src/plugins/uavobjects/firmwareiapobj.h new file mode 100644 index 000000000..f8566ed47 --- /dev/null +++ b/ground/src/plugins/uavobjects/firmwareiapobj.h @@ -0,0 +1,88 @@ +/** + ****************************************************************************** + * + * @file firmwareiapobj.h + * @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010. + * @see The GNU Public License (GPL) Version 3 + * @addtogroup GCSPlugins GCS Plugins + * @{ + * @addtogroup UAVObjectsPlugin UAVObjects Plugin + * @{ + * + * @note Object definition file: firmwareiap.xml. + * This is an automatically generated file. + * DO NOT modify manually. + * + * @brief The UAVUObjects GCS plugin + *****************************************************************************/ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +#ifndef FIRMWAREIAPOBJ_H +#define FIRMWAREIAPOBJ_H + +#include "uavdataobject.h" +#include "uavobjectmanager.h" + +class UAVOBJECTS_EXPORT FirmwareIAPObj: public UAVDataObject +{ + Q_OBJECT + +public: + // Field structure + typedef struct { + quint16 Command; + quint32 Port; + quint8 Version[3]; + quint16 SVN; + quint32 crc; + + } __attribute__((packed)) DataFields; + + // Field information + // Field Command information + // Field Port information + // Field Version information + /* Number of elements for field Version */ + static const quint32 VERSION_NUMELEM = 3; + // Field SVN information + // Field crc information + + + // Constants + static const quint32 OBJID = 1075803696U; + static const QString NAME; + static const bool ISSINGLEINST = 1; + static const bool ISSETTINGS = 0; + static const quint32 NUMBYTES = sizeof(DataFields); + + // Functions + FirmwareIAPObj(); + + DataFields getData(); + void setData(const DataFields& data); + Metadata getDefaultMetadata(); + UAVDataObject* clone(quint32 instID); + + static FirmwareIAPObj* GetInstance(UAVObjectManager* objMngr, quint32 instID = 0); + +private: + DataFields data; + + void setDefaultFieldValues(); + +}; + +#endif // FIRMWAREIAPOBJ_H diff --git a/ground/src/plugins/uavobjects/firmwareiapobj.py b/ground/src/plugins/uavobjects/firmwareiapobj.py new file mode 100644 index 000000000..b89c9bfd4 --- /dev/null +++ b/ground/src/plugins/uavobjects/firmwareiapobj.py @@ -0,0 +1,128 @@ +## +############################################################################## +# +# @file firmwareiapobj.py +# @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010. +# @brief Implementation of the FirmwareIAPObj object. This file has been +# automatically generated by the UAVObjectGenerator. +# +# @note Object definition file: firmwareiap.xml. +# This is an automatically generated file. +# DO NOT modify manually. +# +# @see The GNU Public License (GPL) Version 3 +# +#############################################################################/ +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + + +import uavobject + +import struct +from collections import namedtuple + +# This is a list of instances of the data fields contained in this object +_fields = [ \ + uavobject.UAVObjectField( + 'Command', + 'H', + 1, + [ + '0', + ], + { + } + ), + uavobject.UAVObjectField( + 'Port', + 'I', + 1, + [ + '0', + ], + { + } + ), + uavobject.UAVObjectField( + 'Version', + 'B', + 3, + [ + '0', + '1', + '2', + ], + { + } + ), + uavobject.UAVObjectField( + 'SVN', + 'H', + 1, + [ + '0', + ], + { + } + ), + uavobject.UAVObjectField( + 'crc', + 'I', + 1, + [ + '0', + ], + { + } + ), +] + + +class FirmwareIAPObj(uavobject.UAVObject): + ## Object constants + OBJID = 1075803696 + NAME = "FirmwareIAPObj" + METANAME = "FirmwareIAPObjMeta" + ISSINGLEINST = 1 + ISSETTINGS = 0 + + def __init__(self): + uavobject.UAVObject.__init__(self, + self.OBJID, + self.NAME, + self.METANAME, + 0, + self.ISSINGLEINST) + + for f in _fields: + self.add_field(f) + + def __str__(self): + s = ("0x%08X (%10u) %-30s %3u bytes format '%s'\n" + % (self.OBJID, self.OBJID, self.NAME, self.get_struct().size, self.get_struct().format)) + for f in self.get_tuple()._fields: + s += ("\t%s\n" % f) + return (s) + +def main(): + # Instantiate the object and dump out some interesting info + x = FirmwareIAPObj() + print (x) + +if __name__ == "__main__": + #import pdb ; pdb.run('main()') + main()