QtFit  0.1
Internal library development documentation
All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
accelerometerdatamessage.cpp
Go to the documentation of this file.
1 /*
2  Copyright 2021 Paul Colby
3 
4  This file is part of QtFit.
5 
6  QtFit is free software: you can redistribute it and/or modify
7  it under the terms of the GNU Lesser General Public License as published by
8  the Free Software Foundation, either version 3 of the License, or
9  (at your option) any later version.
10 
11  QtFit is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU Lesser General Public License for more details.
15 
16  You should have received a copy of the GNU Lesser General Public License
17  along with QtFit. If not, see <http://www.gnu.org/licenses/>.
18 */
19 
20 /*!
21  * \file
22  * \note This file is automatcially generated. Any changes here are likely to be overwritten.
23  */
24 
25 /*!
26  * \file
27  * Defines the AccelerometerDataMessage, and AccelerometerDataMessagePrivate classes.
28  */
29 
32 
33 #include <QDebug>
34 #include <QtEndian>
35 
37 
38 /*!
39  * \class AccelerometerDataMessage
40  *
41  * The AccelerometerDataMessage class represents a FIT AccelerometerDataMessage data message.
42  *
43  * \sa DataMessage
44  */
45 
46 /*!
47  * Constructs a AccelerometerDataMessage object.
48  *
49  * Typically, instances of this class will be returned by FitStreamReader::readNext, but this
50  * constructor may be used, along with the relevant setter methods, to create a valid message.
51  */
53 {
54 
55 }
56 
57 /*!
58  * \internal
59  *
60  * Constructs a AccelerometerDataMessage object with private implementation \a d.
61  *
62  * \param d Pointer to private implementation.
63  */
65 {
66 
67 }
68 
69 /*!
70  * Returns the AccelerometerDataMessage data message's \c timestamp field's current value.
71  *
72  * Whole second part of the timestamp
73  *
74  * \return the \c timestamp field value.
75  */
77 {
78  Q_D(const AccelerometerDataMessage);
79  return d->timestamp;
80 }
81 
82 /*!
83  * Returns the AccelerometerDataMessage data message's \c timestampMs field's current value.
84  *
85  * Millisecond part of the timestamp.
86  *
87  * \return the \c timestampMs field value.
88  */
90 {
91  Q_D(const AccelerometerDataMessage);
92  return d->timestampMs;
93 }
94 
95 /*!
96  * Returns the AccelerometerDataMessage data message's \c sampleTimeOffset field's current value.
97  *
98  * Each time in the array describes the time at which the accelerometer sample with the
99  * corrosponding index was taken. Limited to 30 samples in each message. The samples may span
100  * across seconds. Array size must match the number of samples in accel_x and accel_y and
101  * accel_z
102  *
103  * \return the \c sampleTimeOffset field value.
104  */
106 {
107  Q_D(const AccelerometerDataMessage);
108  return d->sampleTimeOffset;
109 }
110 
111 /*!
112  * Returns the AccelerometerDataMessage data message's \c accelX field's current value.
113  *
114  * These are the raw ADC reading. Maximum number of samples is 30 in each message. The samples
115  * may span across seconds. A conversion will need to be done on this data once read.
116  *
117  * \return the \c accelX field value.
118  */
120 {
121  Q_D(const AccelerometerDataMessage);
122  return d->accelX;
123 }
124 
125 /*!
126  * Returns the AccelerometerDataMessage data message's \c accelY field's current value.
127  *
128  * These are the raw ADC reading. Maximum number of samples is 30 in each message. The samples
129  * may span across seconds. A conversion will need to be done on this data once read.
130  *
131  * \return the \c accelY field value.
132  */
134 {
135  Q_D(const AccelerometerDataMessage);
136  return d->accelY;
137 }
138 
139 /*!
140  * Returns the AccelerometerDataMessage data message's \c accelZ field's current value.
141  *
142  * These are the raw ADC reading. Maximum number of samples is 30 in each message. The samples
143  * may span across seconds. A conversion will need to be done on this data once read.
144  *
145  * \return the \c accelZ field value.
146  */
148 {
149  Q_D(const AccelerometerDataMessage);
150  return d->accelZ;
151 }
152 
153 /*!
154  * Returns the AccelerometerDataMessage data message's \c calibratedAccelX field's current value.
155  *
156  * Calibrated accel reading
157  *
158  * \return the \c calibratedAccelX field value.
159  */
161 {
162  Q_D(const AccelerometerDataMessage);
163  return d->calibratedAccelX;
164 }
165 
166 /*!
167  * Returns the AccelerometerDataMessage data message's \c calibratedAccelY field's current value.
168  *
169  * Calibrated accel reading
170  *
171  * \return the \c calibratedAccelY field value.
172  */
174 {
175  Q_D(const AccelerometerDataMessage);
176  return d->calibratedAccelY;
177 }
178 
179 /*!
180  * Returns the AccelerometerDataMessage data message's \c calibratedAccelZ field's current value.
181  *
182  * Calibrated accel reading
183  *
184  * \return the \c calibratedAccelZ field value.
185  */
187 {
188  Q_D(const AccelerometerDataMessage);
189  return d->calibratedAccelZ;
190 }
191 
192 /*!
193  * Returns the AccelerometerDataMessage data message's \c compressedCalibratedAccelX field's current value.
194  *
195  * Calibrated accel reading
196  *
197  * \return the \c compressedCalibratedAccelX field value.
198  */
200 {
201  Q_D(const AccelerometerDataMessage);
202  return d->compressedCalibratedAccelX;
203 }
204 
205 /*!
206  * Returns the AccelerometerDataMessage data message's \c compressedCalibratedAccelY field's current value.
207  *
208  * Calibrated accel reading
209  *
210  * \return the \c compressedCalibratedAccelY field value.
211  */
213 {
214  Q_D(const AccelerometerDataMessage);
215  return d->compressedCalibratedAccelY;
216 }
217 
218 /*!
219  * Returns the AccelerometerDataMessage data message's \c compressedCalibratedAccelZ field's current value.
220  *
221  * Calibrated accel reading
222  *
223  * \return the \c compressedCalibratedAccelZ field value.
224  */
226 {
227  Q_D(const AccelerometerDataMessage);
228  return d->compressedCalibratedAccelZ;
229 }
230 
231 /*!
232  * Sets the \c timestamp field to \a timestamp.
233  *
234  * \param timestamp The field value to set.
235  */
237 {
239  d->timestamp = timestamp;
240 }
241 /*!
242  * Sets the \c timestampMs field to \a timestampMs.
243  *
244  * \param timestampMs The field value to set.
245  */
246 void AccelerometerDataMessage::setTimestampMs(const quint16 timestampMs)
247 {
249  d->timestampMs = timestampMs;
250 }
251 /*!
252  * Sets the \c sampleTimeOffset field to \a sampleTimeOffset.
253  *
254  * \param sampleTimeOffset The field value to set.
255  */
256 void AccelerometerDataMessage::setSampleTimeOffset(const quint16 sampleTimeOffset)
257 {
259  d->sampleTimeOffset = sampleTimeOffset;
260 }
261 /*!
262  * Sets the \c accelX field to \a accelX.
263  *
264  * \param accelX The field value to set.
265  */
266 void AccelerometerDataMessage::setAccelX(const quint16 accelX)
267 {
269  d->accelX = accelX;
270 }
271 /*!
272  * Sets the \c accelY field to \a accelY.
273  *
274  * \param accelY The field value to set.
275  */
276 void AccelerometerDataMessage::setAccelY(const quint16 accelY)
277 {
279  d->accelY = accelY;
280 }
281 /*!
282  * Sets the \c accelZ field to \a accelZ.
283  *
284  * \param accelZ The field value to set.
285  */
286 void AccelerometerDataMessage::setAccelZ(const quint16 accelZ)
287 {
289  d->accelZ = accelZ;
290 }
291 /*!
292  * Sets the \c calibratedAccelX field to \a calibratedAccelX.
293  *
294  * \param calibratedAccelX The field value to set.
295  */
296 void AccelerometerDataMessage::setCalibratedAccelX(const float calibratedAccelX)
297 {
299  d->calibratedAccelX = calibratedAccelX;
300 }
301 /*!
302  * Sets the \c calibratedAccelY field to \a calibratedAccelY.
303  *
304  * \param calibratedAccelY The field value to set.
305  */
306 void AccelerometerDataMessage::setCalibratedAccelY(const float calibratedAccelY)
307 {
309  d->calibratedAccelY = calibratedAccelY;
310 }
311 /*!
312  * Sets the \c calibratedAccelZ field to \a calibratedAccelZ.
313  *
314  * \param calibratedAccelZ The field value to set.
315  */
316 void AccelerometerDataMessage::setCalibratedAccelZ(const float calibratedAccelZ)
317 {
319  d->calibratedAccelZ = calibratedAccelZ;
320 }
321 /*!
322  * Sets the \c compressedCalibratedAccelX field to \a compressedCalibratedAccelX.
323  *
324  * \param compressedCalibratedAccelX The field value to set.
325  */
326 void AccelerometerDataMessage::setCompressedCalibratedAccelX(const qint16 compressedCalibratedAccelX)
327 {
329  d->compressedCalibratedAccelX = compressedCalibratedAccelX;
330 }
331 /*!
332  * Sets the \c compressedCalibratedAccelY field to \a compressedCalibratedAccelY.
333  *
334  * \param compressedCalibratedAccelY The field value to set.
335  */
336 void AccelerometerDataMessage::setCompressedCalibratedAccelY(const qint16 compressedCalibratedAccelY)
337 {
339  d->compressedCalibratedAccelY = compressedCalibratedAccelY;
340 }
341 /*!
342  * Sets the \c compressedCalibratedAccelZ field to \a compressedCalibratedAccelZ.
343  *
344  * \param compressedCalibratedAccelZ The field value to set.
345  */
346 void AccelerometerDataMessage::setCompressedCalibratedAccelZ(const qint16 compressedCalibratedAccelZ)
347 {
349  d->compressedCalibratedAccelZ = compressedCalibratedAccelZ;
350 }
351 
352 /// \cond internal
353 
354 /*!
355  * \internal
356  *
357  * \class AccelerometerDataMessagePrivate
358  *
359  * The AccelerometerDataMessagePrivate class provides private implementation for the AccelerometerDataMessage.
360  *
361  * \sa AccelerometerDataMessage
362  */
363 
364 /*!
365  * \internal
366  *
367  * Constructs a AccelerometerDataMessagePrivate object with public implementation \a q.
368  *
369  * \param q Pointer to public implementaton.
370  */
371 AccelerometerDataMessagePrivate::AccelerometerDataMessagePrivate(AccelerometerDataMessage * const q)
373  , timestamp(static_cast<DateTime>(-1))
374  , timestampMs(0xFFFF)
375  , sampleTimeOffset(0xFFFF)
376  , accelX(0xFFFF)
377  , accelY(0xFFFF)
378  , accelZ(0xFFFF)
379  , calibratedAccelX(static_cast<float>(-1))
380  , calibratedAccelY(static_cast<float>(-1))
381  , calibratedAccelZ(static_cast<float>(-1))
382  , compressedCalibratedAccelX(0x7FFF)
383  , compressedCalibratedAccelY(0x7FFF)
384  , compressedCalibratedAccelZ(0x7FFF)
385 {
386  globalMessageNumber = MesgNum::AccelerometerData;
387 }
388 
389 /*!
390  * \internal
391  *
392  * Destroys the AccelerometerDataMessagePrivate object.
393  */
395 {
396 
397 }
398 
400  const int fieldId, const QByteArray &data, const FitBaseType baseType, const bool bigEndian)
401 {
402  switch (fieldId) {
403  case 253: // See Profile.xlsx::Messages:accelerometer_data.timestamp
404  if (!verify(data, baseType, 4, FitBaseType::Uint32, "accelerometer_data.timestamp")) return false;
405  this->timestamp = static_cast<DateTime>(bigEndian ? qFromBigEndian<quint32>(data) : qFromLittleEndian<quint32>(data));
406  break;
407  case 0: // See Profile.xlsx::Messages:accelerometer_data.timestampMs
408  if (!verify(data, baseType, 2, FitBaseType::Uint16, "accelerometer_data.timestampMs")) return false;
409  this->timestampMs = static_cast<quint16>(bigEndian ? qFromBigEndian<quint16>(data) : qFromLittleEndian<quint16>(data));
410  break;
411  case 1: // See Profile.xlsx::Messages:accelerometer_data.sampleTimeOffset
412  if (!verify(data, baseType, 2, FitBaseType::Uint16, "accelerometer_data.sampleTimeOffset")) return false;
413  this->sampleTimeOffset = static_cast<quint16>(bigEndian ? qFromBigEndian<quint16>(data) : qFromLittleEndian<quint16>(data));
414  break;
415  case 2: // See Profile.xlsx::Messages:accelerometer_data.accelX
416  if (!verify(data, baseType, 2, FitBaseType::Uint16, "accelerometer_data.accelX")) return false;
417  this->accelX = static_cast<quint16>(bigEndian ? qFromBigEndian<quint16>(data) : qFromLittleEndian<quint16>(data));
418  break;
419  case 3: // See Profile.xlsx::Messages:accelerometer_data.accelY
420  if (!verify(data, baseType, 2, FitBaseType::Uint16, "accelerometer_data.accelY")) return false;
421  this->accelY = static_cast<quint16>(bigEndian ? qFromBigEndian<quint16>(data) : qFromLittleEndian<quint16>(data));
422  break;
423  case 4: // See Profile.xlsx::Messages:accelerometer_data.accelZ
424  if (!verify(data, baseType, 2, FitBaseType::Uint16, "accelerometer_data.accelZ")) return false;
425  this->accelZ = static_cast<quint16>(bigEndian ? qFromBigEndian<quint16>(data) : qFromLittleEndian<quint16>(data));
426  break;
427  case 5: // See Profile.xlsx::Messages:accelerometer_data.calibratedAccelX
428  if (!verify(data, baseType, 4, FitBaseType::Float32, "accelerometer_data.calibratedAccelX")) return false;
429  #if QT_VERSION < QT_VERSION_CHECK(5, 12, 0)
430  { // Qt's from-endian functions have no float/double specialisations prior to Qt 5.12.
431  const quint32 localEndian = bigEndian ? qFromBigEndian<quint32>(data) : qFromLittleEndian<quint32>(data);
432  static_assert(sizeof(localEndian) == 4, "src not expected size");
433  static_assert(sizeof(this->calibratedAccelX) == 4, "src and dst not the same size");
434  memcpy(&this->calibratedAccelX, &localEndian, data.size());
435  }
436  #else
437  this->calibratedAccelX = static_cast<float>(bigEndian ? qFromBigEndian<float>(data) : qFromLittleEndian<float>(data));
438  #endif
439  break;
440  case 6: // See Profile.xlsx::Messages:accelerometer_data.calibratedAccelY
441  if (!verify(data, baseType, 4, FitBaseType::Float32, "accelerometer_data.calibratedAccelY")) return false;
442  #if QT_VERSION < QT_VERSION_CHECK(5, 12, 0)
443  { // Qt's from-endian functions have no float/double specialisations prior to Qt 5.12.
444  const quint32 localEndian = bigEndian ? qFromBigEndian<quint32>(data) : qFromLittleEndian<quint32>(data);
445  static_assert(sizeof(localEndian) == 4, "src not expected size");
446  static_assert(sizeof(this->calibratedAccelY) == 4, "src and dst not the same size");
447  memcpy(&this->calibratedAccelY, &localEndian, data.size());
448  }
449  #else
450  this->calibratedAccelY = static_cast<float>(bigEndian ? qFromBigEndian<float>(data) : qFromLittleEndian<float>(data));
451  #endif
452  break;
453  case 7: // See Profile.xlsx::Messages:accelerometer_data.calibratedAccelZ
454  if (!verify(data, baseType, 4, FitBaseType::Float32, "accelerometer_data.calibratedAccelZ")) return false;
455  #if QT_VERSION < QT_VERSION_CHECK(5, 12, 0)
456  { // Qt's from-endian functions have no float/double specialisations prior to Qt 5.12.
457  const quint32 localEndian = bigEndian ? qFromBigEndian<quint32>(data) : qFromLittleEndian<quint32>(data);
458  static_assert(sizeof(localEndian) == 4, "src not expected size");
459  static_assert(sizeof(this->calibratedAccelZ) == 4, "src and dst not the same size");
460  memcpy(&this->calibratedAccelZ, &localEndian, data.size());
461  }
462  #else
463  this->calibratedAccelZ = static_cast<float>(bigEndian ? qFromBigEndian<float>(data) : qFromLittleEndian<float>(data));
464  #endif
465  break;
466  case 8: // See Profile.xlsx::Messages:accelerometer_data.compressedCalibratedAccelX
467  if (!verify(data, baseType, 2, FitBaseType::Sint16, "accelerometer_data.compressedCalibratedAccelX")) return false;
468  this->compressedCalibratedAccelX = static_cast<qint16>(bigEndian ? qFromBigEndian< qint16>(data) : qFromLittleEndian< qint16>(data));
469  break;
470  case 9: // See Profile.xlsx::Messages:accelerometer_data.compressedCalibratedAccelY
471  if (!verify(data, baseType, 2, FitBaseType::Sint16, "accelerometer_data.compressedCalibratedAccelY")) return false;
472  this->compressedCalibratedAccelY = static_cast<qint16>(bigEndian ? qFromBigEndian< qint16>(data) : qFromLittleEndian< qint16>(data));
473  break;
474  case 10: // See Profile.xlsx::Messages:accelerometer_data.compressedCalibratedAccelZ
475  if (!verify(data, baseType, 2, FitBaseType::Sint16, "accelerometer_data.compressedCalibratedAccelZ")) return false;
476  this->compressedCalibratedAccelZ = static_cast<qint16>(bigEndian ? qFromBigEndian< qint16>(data) : qFromLittleEndian< qint16>(data));
477  break;
478  default:
479  qWarning() << "ignoring unknown accelerometer_data message field number" << fieldId << bigEndian;
480  // Fall through to return true, as its still 'safe' to continue parsing data messages.
481  }
482  return true;
483 }
484 
485 /// \endcond
486 
#define QTFIT_END_NAMESPACE
Macro for ending the QtFit library's top-most namespace (if one is defined).
Definition: QtFit_global.h:78
#define QTFIT_BEGIN_NAMESPACE
Macro for starting the QtFit library's top-most namespace (if one is defined).
Definition: QtFit_global.h:77
Declares the AccelerometerDataMessage class.
Declares the AccelerometerDataMessagePrivate class.
MesgNum globalMessageNumber
FIT Globla Message Number for this FIT Data Message.
bool verify(const QByteArray &data, const FitBaseType actualType, const int expectedSize, const FitBaseType expectedType, const char *messageFieldName)
The AbstractDataMessage class is the polymorphic base class for all FIT Data Message classes.
quint16 accelY
The AccelerometerDataMessage FIT message's accelY field.
float calibratedAccelX
The AccelerometerDataMessage FIT message's calibratedAccelX field.
qint16 compressedCalibratedAccelX
The AccelerometerDataMessage FIT message's compressedCalibratedAccelX field.
float calibratedAccelZ
The AccelerometerDataMessage FIT message's calibratedAccelZ field.
bool setField(const int fieldId, const QByteArray &data, const FitBaseType baseType, const bool bigEndian) override
quint16 accelZ
The AccelerometerDataMessage FIT message's accelZ field.
DateTime timestamp
The AccelerometerDataMessage FIT message's timestamp field.
quint16 sampleTimeOffset
The AccelerometerDataMessage FIT message's sampleTimeOffset field.
qint16 compressedCalibratedAccelY
The AccelerometerDataMessage FIT message's compressedCalibratedAccelY field.
qint16 compressedCalibratedAccelZ
The AccelerometerDataMessage FIT message's compressedCalibratedAccelZ field.
quint16 timestampMs
The AccelerometerDataMessage FIT message's timestampMs field.
quint16 accelX
The AccelerometerDataMessage FIT message's accelX field.
float calibratedAccelY
The AccelerometerDataMessage FIT message's calibratedAccelY field.
The AccelerometerDataMessage class represents a FIT AccelerometerDataMessage data message.
float calibratedAccelY() const
Returns the AccelerometerDataMessage data message's calibratedAccelY field's current value.
void setSampleTimeOffset(const quint16 sampleTimeOffset)
Sets the sampleTimeOffset field to sampleTimeOffset.
void setTimestamp(const DateTime timestamp)
Sets the timestamp field to timestamp.
void setAccelY(const quint16 accelY)
Sets the accelY field to accelY.
quint16 accelZ() const
Returns the AccelerometerDataMessage data message's accelZ field's current value.
void setCalibratedAccelZ(const float calibratedAccelZ)
Sets the calibratedAccelZ field to calibratedAccelZ.
void setAccelZ(const quint16 accelZ)
Sets the accelZ field to accelZ.
float calibratedAccelX() const
Returns the AccelerometerDataMessage data message's calibratedAccelX field's current value.
void setAccelX(const quint16 accelX)
Sets the accelX field to accelX.
void setTimestampMs(const quint16 timestampMs)
Sets the timestampMs field to timestampMs.
quint16 timestampMs() const
Returns the AccelerometerDataMessage data message's timestampMs field's current value.
void setCompressedCalibratedAccelX(const qint16 compressedCalibratedAccelX)
Sets the compressedCalibratedAccelX field to compressedCalibratedAccelX.
quint16 accelX() const
Returns the AccelerometerDataMessage data message's accelX field's current value.
quint16 sampleTimeOffset() const
Returns the AccelerometerDataMessage data message's sampleTimeOffset field's current value.
void setCompressedCalibratedAccelZ(const qint16 compressedCalibratedAccelZ)
Sets the compressedCalibratedAccelZ field to compressedCalibratedAccelZ.
qint16 compressedCalibratedAccelY() const
Returns the AccelerometerDataMessage data message's compressedCalibratedAccelY field's current value.
float calibratedAccelZ() const
Returns the AccelerometerDataMessage data message's calibratedAccelZ field's current value.
void setCalibratedAccelY(const float calibratedAccelY)
Sets the calibratedAccelY field to calibratedAccelY.
qint16 compressedCalibratedAccelZ() const
Returns the AccelerometerDataMessage data message's compressedCalibratedAccelZ field's current value.
AccelerometerDataMessage()
Constructs a AccelerometerDataMessage object.
qint16 compressedCalibratedAccelX() const
Returns the AccelerometerDataMessage data message's compressedCalibratedAccelX field's current value.
void setCalibratedAccelX(const float calibratedAccelX)
Sets the calibratedAccelX field to calibratedAccelX.
void setCompressedCalibratedAccelY(const qint16 compressedCalibratedAccelY)
Sets the compressedCalibratedAccelY field to compressedCalibratedAccelY.
quint16 accelY() const
Returns the AccelerometerDataMessage data message's accelY field's current value.
DateTime timestamp() const
Returns the AccelerometerDataMessage data message's timestamp field's current value.
FitBaseType
Garmin FIT FitBaseType type.
Definition: types.h:3388
DateTime
Seconds since UTC 00:00 Dec 31 1989.
Definition: types.h:237