diff options
Diffstat (limited to 'src/Xpl2PhStatus.cpp')
| -rw-r--r-- | src/Xpl2PhStatus.cpp | 149 |
1 files changed, 149 insertions, 0 deletions
diff --git a/src/Xpl2PhStatus.cpp b/src/Xpl2PhStatus.cpp new file mode 100644 index 0000000..8413db4 --- /dev/null +++ b/src/Xpl2PhStatus.cpp @@ -0,0 +1,149 @@ +/** + * @file Xpl2PhStatus.cpp + * @brief Structured PH status message (EV_STATUS_MSG_PH, Appendix B). + */ +#include "Xpl2PhStatus.h" + +#include <QVariant> + +Xpl2PhStatus +Xpl2PhStatus::fromParams (const QVariantList ¶ms) +{ + Xpl2PhStatus s; + int n = params.size (); + if (n < 3) + return s; + + s.controllerId = params[0].toInt (); + s.statusLevel = params[1].toInt (); + s.printheadId = params[2].toInt (); + + /* Level 1: fields at indices 3-30 */ + if (n > 3) + s.temperature = params[3].toFloat (); + if (n > 4) + s.humidity = params[4].toFloat (); + if (n > 5) + s.mcuTemperature = params[5].toFloat (); + if (n > 6) + s.pdsVoltage = params[6].toFloat (); + if (n > 7) + s.mdsVoltage = params[7].toFloat (); + if (n > 8) + s.systemVoltage = params[8].toFloat (); + if (n > 9) + s.eFuseCurrent = params[9].toFloat (); + if (n > 10) + s.nozzleCurrent = params[10].toFloat (); + if (n > 11) + s.vdd = params[11].toFloat (); + if (n > 12) + s.temperatureTrip = params[12].toInt () != 0; + if (n > 13) + s.pdsOverVoltageTrip = params[13].toInt () != 0; + if (n > 14) + s.pdsUnderVoltageTrip = params[14].toInt () != 0; + if (n > 15) + s.pdsSupplyErrorTrip = params[15].toInt () != 0; + if (n > 16) + s.mdsOverVoltageTrip = params[16].toInt () != 0; + if (n > 17) + s.mdsUnderVoltageTrip = params[17].toInt () != 0; + if (n > 18) + s.supplyOverVoltageTrip = params[18].toInt () != 0; + if (n > 19) + s.supplyUnderVoltageTrip = params[19].toInt () != 0; + if (n > 20) + s.eFuseOverCurrentTrip = params[20].toInt () != 0; + if (n > 21) + s.eFuseInputVoltageErrorTrip = params[21].toInt () != 0; + if (n > 22) + s.eFuseFaultTrip = params[22].toInt () != 0; + if (n > 23) + s.flashFaultyTrip = params[23].toInt () != 0; + if (n > 24) + s.flashChecksumErrorTrip = params[24].toInt () != 0; + if (n > 25) + s.dutyCycle = params[25].toFloat (); + if (n > 26) + s.pwmFrequency = params[26].toFloat (); + if (n > 27) + s.drive = params[27].toInt (); + if (n > 28) + s.nozzleDriveFrequency = params[28].toFloat (); + if (n > 29) + s.nozzleDriveDutyCycle = params[29].toFloat (); + if (n > 30) + s.onTimeSeconds = params[30].toInt (); + + /* Level 2: fields at indices 31-61 */ + if (s.statusLevel < 2 || n <= 31) + return s; + + if (n > 31) + s.accelerometerId = params[31].toInt (); + if (n > 32) + s.mcuId = params[32].toString (); + if (n > 33) + s.flashMemoryId = params[33].toString (); + if (n > 34) + s.temperatureSensorSerialNumber = params[34].toInt (); + if (n > 35) + s.mcuHardwareVersion = params[35].toString (); + if (n > 36) + s.mcuFirmwareVersion = params[36].toString (); + if (n > 37) + s.mcuFirmwareVariant = params[37].toString (); + if (n > 38) + s.fpgaHardwareVersion = params[38].toString (); + if (n > 39) + s.fpgaFirmwareVersion = params[39].toString (); + if (n > 40) + s.bootloaderVersion = params[40].toString (); + if (n > 41) + s.maxAllowedTemperature = params[41].toFloat (); + if (n > 42) + s.pdsVoltageMax = params[42].toFloat (); + if (n > 43) + s.pdsVoltageMin = params[43].toFloat (); + if (n > 44) + s.pdsVoltageSetting = params[44].toFloat (); + if (n > 45) + s.mdsVoltageMax = params[45].toFloat (); + if (n > 46) + s.mdsVoltageMin = params[46].toFloat (); + if (n > 47) + s.eFuseCurrentMax = params[47].toFloat (); + if (n > 48) + s.measuredHardwareVersion = params[48].toString (); + if (n > 49) + s.gyroX = params[49].toInt (); + if (n > 50) + s.gyroY = params[50].toInt (); + if (n > 51) + s.gyroZ = params[51].toInt (); + if (n > 52) + s.accelerationX = params[52].toInt (); + if (n > 53) + s.accelerationY = params[53].toInt (); + if (n > 54) + s.accelerationZ = params[54].toInt (); + if (n > 55) + s.purge = params[55].toInt (); + if (n > 56) + s.purgeState = params[56].toInt (); + if (n > 57) + s.purgeDelay = params[57].toInt (); + if (n > 58) + s.purgeCounter = params[58].toInt (); + if (n > 59) + s.cleaningStartPeriod = params[59].toInt (); + if (n > 60) + s.cleaningEndPeriod = params[60].toInt (); + if (n > 61) + s.cleaningStepPeriod = params[61].toInt (); + if (n > 62) + s.cleaningPeriod = params[62].toInt (); + + return s; +} |
