mirror of
https://bitbucket.org/librepilot/librepilot.git
synced 2025-02-26 15:54:15 +01:00
GCS/UAVObjectGenerator Fix bug with enumeration types
git-svn-id: svn://svn.openpilot.org/OpenPilot/trunk@424 ebee16cc-31ac-478f-84a7-5cbb03baadba
This commit is contained in:
parent
e2871a24e7
commit
89749b06e4
@ -620,11 +620,32 @@ bool UAVObjectParser::generateGCSObject(int objIndex, const QString& templateInc
|
|||||||
QString finit;
|
QString finit;
|
||||||
for (int n = 0; n < info->fields.length(); ++n)
|
for (int n = 0; n < info->fields.length(); ++n)
|
||||||
{
|
{
|
||||||
finit.append( QString(" fields.append(new UAVObjectFieldPrimitives<%1>(QString(\"%2\"), QString(\"%3\"), %4));\n")
|
// Only for enum types
|
||||||
.arg(fieldTypeStrCPP[info->fields[n]->type])
|
if (info->fields[n]->type == FIELDTYPE_ENUM)
|
||||||
.arg(info->fields[n]->name)
|
{
|
||||||
.arg(info->fields[n]->units)
|
QString optionName = info->fields[n]->name + "EnumOptions";
|
||||||
.arg(info->fields[n]->numElements) );
|
finit.append( QString(" QStringList %1;\n").arg(optionName) );
|
||||||
|
QStringList options = info->fields[n]->options;
|
||||||
|
for (int m = 0; m < options.length(); ++m)
|
||||||
|
{
|
||||||
|
finit.append( QString(" %1.append(\"%2\");\n")
|
||||||
|
.arg(optionName)
|
||||||
|
.arg(options[m]) );
|
||||||
|
}
|
||||||
|
finit.append( QString(" fields.append(new UAVObjectFieldEnum(QString(\"%1\"), QString(\"%2\"), %3, %4));\n")
|
||||||
|
.arg(info->fields[n]->name)
|
||||||
|
.arg(info->fields[n]->units)
|
||||||
|
.arg(info->fields[n]->numElements)
|
||||||
|
.arg(optionName) );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
finit.append( QString(" fields.append(new UAVObjectFieldPrimitives<%1>(QString(\"%2\"), QString(\"%3\"), %4));\n")
|
||||||
|
.arg(fieldTypeStrCPP[info->fields[n]->type])
|
||||||
|
.arg(info->fields[n]->name)
|
||||||
|
.arg(info->fields[n]->units)
|
||||||
|
.arg(info->fields[n]->numElements) );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
outCode.replace(QString("$(FIELDSINIT)"), finit);
|
outCode.replace(QString("$(FIELDSINIT)"), finit);
|
||||||
|
|
||||||
|
@ -43,7 +43,10 @@ ExampleObject1::ExampleObject1(): UAVDataObject(OBJID, ISSINGLEINST, ISSETTINGS,
|
|||||||
fields.append(new UAVObjectFieldPrimitives<quint8>(QString("Field5"), QString("unit5"), 1));
|
fields.append(new UAVObjectFieldPrimitives<quint8>(QString("Field5"), QString("unit5"), 1));
|
||||||
fields.append(new UAVObjectFieldPrimitives<quint16>(QString("Field6"), QString("unit6"), 1));
|
fields.append(new UAVObjectFieldPrimitives<quint16>(QString("Field6"), QString("unit6"), 1));
|
||||||
fields.append(new UAVObjectFieldPrimitives<quint32>(QString("Field7"), QString("unit7"), 1));
|
fields.append(new UAVObjectFieldPrimitives<quint32>(QString("Field7"), QString("unit7"), 1));
|
||||||
fields.append(new UAVObjectFieldPrimitives<quint8>(QString("Field8"), QString("unit8"), 1));
|
QStringList Field8EnumOptions;
|
||||||
|
Field8EnumOptions.append("Option1");
|
||||||
|
Field8EnumOptions.append("Option2");
|
||||||
|
fields.append(new UAVObjectFieldEnum(QString("Field8"), QString("unit8"), 1, Field8EnumOptions));
|
||||||
|
|
||||||
// Initialize object
|
// Initialize object
|
||||||
initializeFields(fields, (quint8*)&data, NUMBYTES);
|
initializeFields(fields, (quint8*)&data, NUMBYTES);
|
||||||
|
@ -33,6 +33,7 @@
|
|||||||
|
|
||||||
#include "uavdataobject.h"
|
#include "uavdataobject.h"
|
||||||
#include "uavobjectfieldprimitives.h"
|
#include "uavobjectfieldprimitives.h"
|
||||||
|
#include "uavobjectfieldenum.h"
|
||||||
|
|
||||||
class ExampleObject1: public UAVDataObject
|
class ExampleObject1: public UAVDataObject
|
||||||
{
|
{
|
||||||
|
@ -33,6 +33,7 @@
|
|||||||
|
|
||||||
#include "uavdataobject.h"
|
#include "uavdataobject.h"
|
||||||
#include "uavobjectfieldprimitives.h"
|
#include "uavobjectfieldprimitives.h"
|
||||||
|
#include "uavobjectfieldenum.h"
|
||||||
|
|
||||||
class ExampleObject2: public UAVDataObject
|
class ExampleObject2: public UAVDataObject
|
||||||
{
|
{
|
||||||
|
@ -38,7 +38,10 @@ ExampleSettings::ExampleSettings(): UAVDataObject(OBJID, ISSINGLEINST, ISSETTING
|
|||||||
QList<UAVObjectField*> fields;
|
QList<UAVObjectField*> fields;
|
||||||
fields.append(new UAVObjectFieldPrimitives<qint32>(QString("UpdatePeriod"), QString("ms"), 1));
|
fields.append(new UAVObjectFieldPrimitives<qint32>(QString("UpdatePeriod"), QString("ms"), 1));
|
||||||
fields.append(new UAVObjectFieldPrimitives<qint32>(QString("StepSize"), QString(""), 1));
|
fields.append(new UAVObjectFieldPrimitives<qint32>(QString("StepSize"), QString(""), 1));
|
||||||
fields.append(new UAVObjectFieldPrimitives<quint8>(QString("StepDirection"), QString(""), 1));
|
QStringList StepDirectionEnumOptions;
|
||||||
|
StepDirectionEnumOptions.append("up");
|
||||||
|
StepDirectionEnumOptions.append("down");
|
||||||
|
fields.append(new UAVObjectFieldEnum(QString("StepDirection"), QString(""), 1, StepDirectionEnumOptions));
|
||||||
|
|
||||||
// Initialize object
|
// Initialize object
|
||||||
initializeFields(fields, (quint8*)&data, NUMBYTES);
|
initializeFields(fields, (quint8*)&data, NUMBYTES);
|
||||||
|
@ -33,6 +33,7 @@
|
|||||||
|
|
||||||
#include "uavdataobject.h"
|
#include "uavdataobject.h"
|
||||||
#include "uavobjectfieldprimitives.h"
|
#include "uavobjectfieldprimitives.h"
|
||||||
|
#include "uavobjectfieldenum.h"
|
||||||
|
|
||||||
class ExampleSettings: public UAVDataObject
|
class ExampleSettings: public UAVDataObject
|
||||||
{
|
{
|
||||||
|
@ -110,7 +110,7 @@ void UAVObjectsTest::runTest()
|
|||||||
data.Field4[1] = 40.2;
|
data.Field4[1] = 40.2;
|
||||||
data.Field4[2] = 40.3;
|
data.Field4[2] = 40.3;
|
||||||
obj1->setData(data);
|
obj1->setData(data);
|
||||||
obj1->load();
|
obj1->load();
|
||||||
|
|
||||||
// Get all instances
|
// Get all instances
|
||||||
QList<UAVObject*> objs = objMngr->getObjectInstances(ExampleObject1::OBJID);
|
QList<UAVObject*> objs = objMngr->getObjectInstances(ExampleObject1::OBJID);
|
||||||
@ -120,6 +120,28 @@ void UAVObjectsTest::runTest()
|
|||||||
sout << objs[n]->toString();
|
sout << objs[n]->toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Get object fields
|
||||||
|
QString objname("ExampleObject1");
|
||||||
|
UAVObject* obj = objMngr->getObject(objname);
|
||||||
|
QList<UAVObjectField*> fields = obj->getFields();
|
||||||
|
// qint8
|
||||||
|
UAVObjectFieldPrimitives<qint8>* fieldint8 = dynamic_cast< UAVObjectFieldPrimitives<qint8>* >(fields[0]);
|
||||||
|
if (fieldint8 != NULL)
|
||||||
|
{
|
||||||
|
fieldint8->setValue(10);
|
||||||
|
qint8 value = fieldint8->getValue();
|
||||||
|
sout << value;
|
||||||
|
}
|
||||||
|
// enum
|
||||||
|
UAVObjectFieldEnum* fieldenum = dynamic_cast< UAVObjectFieldEnum* >(fields[7]);
|
||||||
|
if (fieldenum != NULL)
|
||||||
|
{
|
||||||
|
QStringList options = fieldenum->getOptions();
|
||||||
|
fieldenum->setSelected(options[1]);
|
||||||
|
QString selected = fieldenum->getSelected();
|
||||||
|
sout << selected;
|
||||||
|
}
|
||||||
|
|
||||||
// Done
|
// Done
|
||||||
done = true;
|
done = true;
|
||||||
}
|
}
|
||||||
|
@ -33,6 +33,7 @@
|
|||||||
|
|
||||||
#include "uavdataobject.h"
|
#include "uavdataobject.h"
|
||||||
#include "uavobjectfieldprimitives.h"
|
#include "uavobjectfieldprimitives.h"
|
||||||
|
#include "uavobjectfieldenum.h"
|
||||||
|
|
||||||
class $(NAME): public UAVDataObject
|
class $(NAME): public UAVDataObject
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user