mirror of
https://bitbucket.org/librepilot/librepilot.git
synced 2025-02-21 11:54:15 +01:00
GCS/UAVObjectGenerator: Calculate and report number of bytes used by the object fields.
git-svn-id: svn://svn.openpilot.org/OpenPilot/trunk@2276 ebee16cc-31ac-478f-84a7-5cbb03baadba
This commit is contained in:
parent
be4df7b757
commit
6799f75aeb
@ -115,7 +115,7 @@ bool UAVObjectGenerator::processAll()
|
|||||||
QString flightObjInit;
|
QString flightObjInit;
|
||||||
QString gcsObjInit;
|
QString gcsObjInit;
|
||||||
QString pythonObjInit;
|
QString pythonObjInit;
|
||||||
|
int numBytesTotal = 0;
|
||||||
|
|
||||||
QString matlabAllocationCode;
|
QString matlabAllocationCode;
|
||||||
QString matlabSwithCode;
|
QString matlabSwithCode;
|
||||||
@ -130,7 +130,9 @@ bool UAVObjectGenerator::processAll()
|
|||||||
{
|
{
|
||||||
QString name = parser->getObjectName(objidx);
|
QString name = parser->getObjectName(objidx);
|
||||||
QString namelc = name.toLower();
|
QString namelc = name.toLower();
|
||||||
sout << "Generating code for object: " << name << endl;
|
int numBytes = parser->getNumBytes(objidx);
|
||||||
|
numBytesTotal += numBytes;
|
||||||
|
sout << "Generating code for object: " << name << " (" << numBytes << " bytes)" << endl;
|
||||||
// Check for object ID conflicts
|
// Check for object ID conflicts
|
||||||
quint32 id = parser->getObjectID(objidx);
|
quint32 id = parser->getObjectID(objidx);
|
||||||
if ( objIDList.contains(id) || id == 0 )
|
if ( objIDList.contains(id) || id == 0 )
|
||||||
@ -256,7 +258,7 @@ bool UAVObjectGenerator::processAll()
|
|||||||
|
|
||||||
// Done
|
// Done
|
||||||
sout << "Done: processed " << xmlList.length() << " XML files and generated "
|
sout << "Done: processed " << xmlList.length() << " XML files and generated "
|
||||||
<< objIDList.length() << " objects with no ID collisions." << endl;
|
<< objIDList.length() << " objects with no ID collisions. Total size of the data fields is " << numBytesTotal << " bytes." << endl;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -57,6 +57,10 @@ UAVObjectParser::UAVObjectParser()
|
|||||||
QString("uint8") << QString("uint16") << QString("uint32") <<
|
QString("uint8") << QString("uint16") << QString("uint32") <<
|
||||||
QString("float") << QString("enum");
|
QString("float") << QString("enum");
|
||||||
|
|
||||||
|
fieldTypeNumBytes << int(1) << int(2) << int(4) <<
|
||||||
|
int(1) << int(2) << int(4) <<
|
||||||
|
int(4) << int(1);
|
||||||
|
|
||||||
updateModeStr << QString("UPDATEMODE_PERIODIC") << QString("UPDATEMODE_ONCHANGE") <<
|
updateModeStr << QString("UPDATEMODE_PERIODIC") << QString("UPDATEMODE_ONCHANGE") <<
|
||||||
QString("UPDATEMODE_MANUAL") << QString("UPDATEMODE_NEVER");
|
QString("UPDATEMODE_MANUAL") << QString("UPDATEMODE_NEVER");
|
||||||
|
|
||||||
@ -116,6 +120,27 @@ quint32 UAVObjectParser::getObjectID(int objIndex)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the number of bytes in the data fields of this object
|
||||||
|
*/
|
||||||
|
int UAVObjectParser::getNumBytes(int objIndex)
|
||||||
|
{
|
||||||
|
ObjectInfo* info = objInfo[objIndex];
|
||||||
|
if (info == NULL)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int numBytes = 0;
|
||||||
|
for (int n = 0; n < info->fields.length(); ++n)
|
||||||
|
{
|
||||||
|
numBytes += info->fields[n]->numBytes * info->fields[n]->numElements;
|
||||||
|
}
|
||||||
|
return numBytes;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parse supplied XML file
|
* Parse supplied XML file
|
||||||
* @param xml The xml text
|
* @param xml The xml text
|
||||||
@ -454,6 +479,7 @@ QString UAVObjectParser::processObjectFields(QDomNode& childNode, ObjectInfo* in
|
|||||||
if (index >= 0)
|
if (index >= 0)
|
||||||
{
|
{
|
||||||
field->type = (FieldType)index;
|
field->type = (FieldType)index;
|
||||||
|
field->numBytes = fieldTypeNumBytes[index];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -69,6 +69,7 @@ public:
|
|||||||
QString units;
|
QString units;
|
||||||
FieldType type;
|
FieldType type;
|
||||||
int numElements;
|
int numElements;
|
||||||
|
int numBytes;
|
||||||
QStringList elementNames;
|
QStringList elementNames;
|
||||||
QStringList options; // for enums only
|
QStringList options; // for enums only
|
||||||
bool defaultElementNames;
|
bool defaultElementNames;
|
||||||
@ -101,6 +102,7 @@ public:
|
|||||||
QList<ObjectInfo*> getObjectInfo();
|
QList<ObjectInfo*> getObjectInfo();
|
||||||
QString getObjectName(int objIndex);
|
QString getObjectName(int objIndex);
|
||||||
quint32 getObjectID(int objIndex);
|
quint32 getObjectID(int objIndex);
|
||||||
|
int getNumBytes(int objIndex);
|
||||||
bool generateFlightObject(int objIndex, const QString& templateInclude, const QString& templateCode,
|
bool generateFlightObject(int objIndex, const QString& templateInclude, const QString& templateCode,
|
||||||
QString& outInclude, QString& outCode);
|
QString& outInclude, QString& outCode);
|
||||||
bool generateGCSObject(int objIndex, const QString& templateInclude, const QString& templateCode,
|
bool generateGCSObject(int objIndex, const QString& templateInclude, const QString& templateCode,
|
||||||
@ -119,6 +121,7 @@ private:
|
|||||||
QStringList fieldTypeStrCPPClass;
|
QStringList fieldTypeStrCPPClass;
|
||||||
QStringList fieldTypeStrMatlab;
|
QStringList fieldTypeStrMatlab;
|
||||||
QStringList fieldTypeStrXML;
|
QStringList fieldTypeStrXML;
|
||||||
|
QList<int> fieldTypeNumBytes;
|
||||||
QStringList updateModeStr;
|
QStringList updateModeStr;
|
||||||
QStringList updateModeStrXML;
|
QStringList updateModeStrXML;
|
||||||
QStringList accessModeStr;
|
QStringList accessModeStr;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user