Merge pull request #242 from samsta/master

Use integer formatting where possible when interpreting signal.
This commit is contained in:
Collin Kidder
2020-09-24 17:06:40 -07:00
committed by GitHub
2 changed files with 8 additions and 5 deletions
+7 -4
View File
@@ -40,6 +40,7 @@ bool DBC_SIGNAL::processAsText(const CANFrame &frame, QString &outString, bool o
{ {
int64_t result = 0; int64_t result = 0;
bool isSigned = false; bool isSigned = false;
bool isInteger = false;
double endResult; double endResult;
if (valType == STRING) if (valType == STRING)
@@ -70,7 +71,9 @@ bool DBC_SIGNAL::processAsText(const CANFrame &frame, QString &outString, bool o
{ {
result = Utility::processIntegerSignal(frame.data, startBit, signalSize, intelByteOrder, isSigned); result = Utility::processIntegerSignal(frame.data, startBit, signalSize, intelByteOrder, isSigned);
endResult = ((double)result * factor) + bias; endResult = ((double)result * factor) + bias;
result = (int64_t)endResult; result = (int64_t)endResult;
// if factor is an integer, we don't need the possibly human-unreadable float representation
isInteger = (factor == ceilf(factor));
} }
else if (valType == SP_FLOAT) else if (valType == SP_FLOAT)
{ {
@@ -95,12 +98,12 @@ bool DBC_SIGNAL::processAsText(const CANFrame &frame, QString &outString, bool o
endResult = (*((double *)(&result)) * factor) + bias; endResult = (*((double *)(&result)) * factor) + bias;
} }
outString = makePrettyOutput(endResult, result, outputName); outString = makePrettyOutput(endResult, result, outputName, isInteger);
cachedValue = endResult; cachedValue = endResult;
return true; return true;
} }
QString DBC_SIGNAL::makePrettyOutput(double floatVal, int64_t intVal, bool outputName) QString DBC_SIGNAL::makePrettyOutput(double floatVal, int64_t intVal, bool outputName, bool isInteger)
{ {
QString outputString; QString outputString;
@@ -122,7 +125,7 @@ QString DBC_SIGNAL::makePrettyOutput(double floatVal, int64_t intVal, bool outpu
} }
else //otherwise display the actual number and unit (if it exists) else //otherwise display the actual number and unit (if it exists)
{ {
outputString += QString::number(floatVal) + unitName; outputString += (isInteger ? QString::number(intVal) : QString::number(floatVal)) + unitName;
} }
return outputString; return outputString;
} }
+1 -1
View File
@@ -104,7 +104,7 @@ public: //TODO: this is sloppy. It shouldn't all be public!
bool processAsText(const CANFrame &frame, QString &outString, bool outputName = true); bool processAsText(const CANFrame &frame, QString &outString, bool outputName = true);
bool processAsInt(const CANFrame &frame, int32_t &outValue); bool processAsInt(const CANFrame &frame, int32_t &outValue);
bool processAsDouble(const CANFrame &frame, double &outValue); bool processAsDouble(const CANFrame &frame, double &outValue);
QString makePrettyOutput(double floatVal, int64_t intVal, bool outputName = true); QString makePrettyOutput(double floatVal, int64_t intVal, bool outputName = true, bool isInteger = false);
DBC_ATTRIBUTE_VALUE *findAttrValByName(QString name); DBC_ATTRIBUTE_VALUE *findAttrValByName(QString name);
DBC_ATTRIBUTE_VALUE *findAttrValByIdx(int idx); DBC_ATTRIBUTE_VALUE *findAttrValByIdx(int idx);
}; };