aboutsummaryrefslogtreecommitdiffstats
path: root/src/Xpl2PhStatus.cpp
diff options
context:
space:
mode:
authorThomas Vanbesien <tvanbesi@proton.me>2026-03-16 16:19:49 +0100
committerThomas Vanbesien <tvanbesi@proton.me>2026-03-16 16:19:49 +0100
commitfa095de6cc8ec5a5b5c14091f2b3179ad7071876 (patch)
treeaa094011263a83a4c91eb8722c2095344656c838 /src/Xpl2PhStatus.cpp
parent7830f0ae98d742467b948ed93c85e122be38fb83 (diff)
downloadQtXpl2-fa095de6cc8ec5a5b5c14091f2b3179ad7071876.tar.gz
QtXpl2-fa095de6cc8ec5a5b5c14091f2b3179ad7071876.zip
EV_ events with Q_GADGET status types, mock periodic emission, tabbed demo UI
Diffstat (limited to 'src/Xpl2PhStatus.cpp')
-rw-r--r--src/Xpl2PhStatus.cpp149
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 &params)
+{
+ 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;
+}