aboutsummaryrefslogtreecommitdiffstats
path: root/src/Xpl2PhStatus.cpp
blob: 8413db4c2b401b794ed5ca412f237050880b8668 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
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;
}