1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2024-12-11 19:24:10 +01:00
LibrePilot/ground/uavobjgenerator/uavobjectparser.h
Fredrik Arvidsson ef15064b26 OP-1538 Added description to fields in the UAVObject description files.
Descriptions can be added to fields either as attributes or child nodes.
Descriptions are not mandatory at this stage.
The description shows up when hovering over objects and fields in the UAVObject browser.

Added example descriptions to a few fields in the UAVO descriptor files.
2014-10-11 16:12:58 +02:00

140 lines
4.7 KiB
C++

/**
******************************************************************************
*
* @file uavobjectparser.h
* @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010.
* @brief Parses XML files and extracts object information.
*
* @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
*/
#ifndef UAVOBJECTPARSER_H
#define UAVOBJECTPARSER_H
#include <QString>
#include <QStringList>
#include <QList>
#include <QDomDocument>
#include <QDomElement>
#include <QDomNode>
#include <QByteArray>
// Types
typedef enum {
FIELDTYPE_INT8 = 0,
FIELDTYPE_INT16,
FIELDTYPE_INT32,
FIELDTYPE_UINT8,
FIELDTYPE_UINT16,
FIELDTYPE_UINT32,
FIELDTYPE_FLOAT32,
FIELDTYPE_ENUM
} FieldType;
typedef struct {
QString name;
QString description;
QString units;
FieldType type;
int numElements;
int numBytes;
QStringList elementNames;
QStringList options; // for enums only
bool defaultElementNames;
QStringList defaultValues;
QString limitValues;
} FieldInfo;
/**
* Object update mode
*/
typedef enum {
UPDATEMODE_MANUAL = 0, /** Manually update object, by calling the updated() function */
UPDATEMODE_PERIODIC = 1, /** Automatically update object at periodic intervals */
UPDATEMODE_ONCHANGE = 2, /** Only update object when its data changes */
UPDATEMODE_THROTTLED = 3 /** Object is updated on change, but not more often than the interval time */
} UpdateMode;
typedef enum {
ACCESS_READWRITE = 0,
ACCESS_READONLY = 1
} AccessMode;
typedef struct {
QString name;
QString namelc; /** name in lowercase */
QString filename;
quint32 id;
bool isSingleInst;
bool isSettings;
bool isPriority;
AccessMode gcsAccess;
AccessMode flightAccess;
bool flightTelemetryAcked;
UpdateMode flightTelemetryUpdateMode; /** Update mode used by the autopilot (UpdateMode) */
int flightTelemetryUpdatePeriod; /** Update period used by the autopilot (only if telemetry mode is PERIODIC) */
bool gcsTelemetryAcked;
UpdateMode gcsTelemetryUpdateMode; /** Update mode used by the GCS (UpdateMode) */
int gcsTelemetryUpdatePeriod; /** Update period used by the GCS (only if telemetry mode is PERIODIC) */
UpdateMode loggingUpdateMode; /** Update mode used by the logging module (UpdateMode) */
int loggingUpdatePeriod; /** Update period used by the logging module (only if logging mode is PERIODIC) */
QList<FieldInfo *> fields; /** The data fields for the object **/
QString description; /** Description used for Doxygen **/
QString category; /** Description used for Doxygen **/
} ObjectInfo;
class UAVObjectParser {
public:
// Functions
UAVObjectParser();
QString parseXML(QString & xml, QString & filename);
int getNumObjects();
QList<ObjectInfo *> getObjectInfo();
QString getObjectName(int objIndex);
quint32 getObjectID(int objIndex);
ObjectInfo *getObjectByIndex(int objIndex);
int getNumBytes(int objIndex);
QStringList all_units;
private:
QList<ObjectInfo *> objInfo;
QStringList fieldTypeStrXML;
QList<int> fieldTypeNumBytes;
QStringList updateModeStr;
QStringList updateModeStrXML;
QStringList accessModeStr;
QStringList accessModeStrXML;
QString processObjectAttributes(QDomNode & node, ObjectInfo *info);
QString processObjectFields(QDomNode & childNode, ObjectInfo *info);
QString processObjectAccess(QDomNode & childNode, ObjectInfo *info);
QString processObjectDescription(QDomNode & childNode, QString *description);
QString processObjectCategory(QDomNode & childNode, QString *category);
QString processObjectMetadata(QDomNode & childNode, UpdateMode *mode, int *period, bool *acked);
void calculateID(ObjectInfo *info);
quint32 updateHash(quint32 value, quint32 hash);
quint32 updateHash(QString & value, quint32 hash);
};
#endif // UAVOBJECTPARSER_H