MCPcopy Create free account
hub / github.com/Serial-Studio/Serial-Studio / updateData

Method updateData

app/src/UI/Widgets/Accelerometer.cpp:170–262  ·  view source on GitHub ↗

* @brief Updates the accelerometer data from the Dashboard. */

Source from the content-addressed store, hash-verified

168 * @brief Updates the accelerometer data from the Dashboard.
169 */
170void Widgets::Accelerometer::updateData()
171{
172 if (!isEnabled())
173 return;
174
175 if (!VALIDATE_WIDGET(SerialStudio::DashboardAccelerometer, m_index))
176 return;
177
178 const auto& acc = GET_GROUP(SerialStudio::DashboardAccelerometer, m_index);
179 if (acc.datasets.size() != 3)
180 return;
181
182 double rawX = 0, rawY = 0, rawZ = 0;
183 for (int i = 0; i < 3; ++i) {
184 const auto& dataset = acc.datasets[i];
185 const auto& widget = dataset.widget;
186 if (widget == QStringLiteral("x"))
187 rawX = dataset.numericValue;
188
189 if (widget == QStringLiteral("y"))
190 rawY = dataset.numericValue;
191
192 if (widget == QStringLiteral("z"))
193 rawZ = dataset.numericValue;
194 }
195
196 if (!std::isfinite(rawX) || !std::isfinite(rawY) || !std::isfinite(rawZ))
197 return;
198
199 constexpr double kInv981 = 1.0 / 9.81;
200 const double factor = m_inputInG ? 1.0 : kInv981;
201 const double gx = rawX * factor;
202 const double gy = rawY * factor;
203 const double gz = rawZ * factor;
204
205 const double mag = qSqrt(gx * gx + gy * gy);
206 const double theta = qAtan2(gy, gx) * (180.0 / M_PI);
207
208 const double totalG = qSqrt(gx * gx + gy * gy + gz * gz);
209
210 const double pitchVal = qAtan2(gx, qSqrt(gy * gy + gz * gz)) * (180.0 / M_PI);
211 const double rollVal = qAtan2(gy, qSqrt(gx * gx + gz * gz)) * (180.0 / M_PI);
212
213 const double prevX = m_x;
214 const double prevY = m_y;
215 const double prevZ = m_z;
216 const double prevG = m_g;
217 const double prevMag = m_magnitude;
218 const double prevTheta = m_theta;
219 const double prevPitch = m_pitch;
220 const double prevRoll = m_roll;
221 const double prevPeak = m_peakG;
222
223 constexpr double kAlpha = 0.4;
224 if (!m_filterInitialized) {
225 m_x = gx;
226 m_y = gy;
227 m_z = gz;

Callers

nothing calls this directly

Calls 4

VALIDATE_WIDGETFunction · 0.85
isfiniteFunction · 0.85
notEqualFunction · 0.85
sizeMethod · 0.45

Tested by

no test coverage detected