QtFit  0.1
Internal library development documentation
All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
lengthmessage.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 LengthMessage, and LengthMessagePrivate classes.
28  */
29 
30 #include "lengthmessage.h"
31 #include "lengthmessage_p.h"
32 
33 #include <QDebug>
34 #include <QtEndian>
35 
37 
38 /*!
39  * \class LengthMessage
40  *
41  * The LengthMessage class represents a FIT LengthMessage data message.
42  *
43  * \sa DataMessage
44  */
45 
46 /*!
47  * Constructs a LengthMessage 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 LengthMessage object with private implementation \a d.
61  *
62  * \param d Pointer to private implementation.
63  */
65 {
66 
67 }
68 
69 /*!
70  * Returns the LengthMessage data message's \c messageIndex field's current value.
71  *
72  * \return the \c messageIndex field value.
73  */
75 {
76  Q_D(const LengthMessage);
77  return d->messageIndex;
78 }
79 
80 /*!
81  * Returns the LengthMessage data message's \c timestamp field's current value.
82  *
83  * \return the \c timestamp field value.
84  */
86 {
87  Q_D(const LengthMessage);
88  return d->timestamp;
89 }
90 
91 /*!
92  * Returns the LengthMessage data message's \c event field's current value.
93  *
94  * \return the \c event field value.
95  */
97 {
98  Q_D(const LengthMessage);
99  return d->event;
100 }
101 
102 /*!
103  * Returns the LengthMessage data message's \c eventType field's current value.
104  *
105  * \return the \c eventType field value.
106  */
108 {
109  Q_D(const LengthMessage);
110  return d->eventType;
111 }
112 
113 /*!
114  * Returns the LengthMessage data message's \c startTime field's current value.
115  *
116  * \return the \c startTime field value.
117  */
119 {
120  Q_D(const LengthMessage);
121  return d->startTime;
122 }
123 
124 /*!
125  * Returns the LengthMessage data message's \c totalElapsedTime field's current value.
126  *
127  * \return the \c totalElapsedTime field value.
128  */
130 {
131  Q_D(const LengthMessage);
132  return d->totalElapsedTime;
133 }
134 
135 /*!
136  * Returns the LengthMessage data message's \c totalTimerTime field's current value.
137  *
138  * \return the \c totalTimerTime field value.
139  */
141 {
142  Q_D(const LengthMessage);
143  return d->totalTimerTime;
144 }
145 
146 /*!
147  * Returns the LengthMessage data message's \c totalStrokes field's current value.
148  *
149  * \return the \c totalStrokes field value.
150  */
152 {
153  Q_D(const LengthMessage);
154  return d->totalStrokes;
155 }
156 
157 /*!
158  * Returns the LengthMessage data message's \c avgSpeed field's current value.
159  *
160  * \return the \c avgSpeed field value.
161  */
162 quint16 LengthMessage::avgSpeed() const
163 {
164  Q_D(const LengthMessage);
165  return d->avgSpeed;
166 }
167 
168 /*!
169  * Returns the LengthMessage data message's \c swimStroke field's current value.
170  *
171  * \return the \c swimStroke field value.
172  */
174 {
175  Q_D(const LengthMessage);
176  return d->swimStroke;
177 }
178 
179 /*!
180  * Returns the LengthMessage data message's \c avgSwimmingCadence field's current value.
181  *
182  * \return the \c avgSwimmingCadence field value.
183  */
185 {
186  Q_D(const LengthMessage);
187  return d->avgSwimmingCadence;
188 }
189 
190 /*!
191  * Returns the LengthMessage data message's \c eventGroup field's current value.
192  *
193  * \return the \c eventGroup field value.
194  */
196 {
197  Q_D(const LengthMessage);
198  return d->eventGroup;
199 }
200 
201 /*!
202  * Returns the LengthMessage data message's \c totalCalories field's current value.
203  *
204  * \return the \c totalCalories field value.
205  */
207 {
208  Q_D(const LengthMessage);
209  return d->totalCalories;
210 }
211 
212 /*!
213  * Returns the LengthMessage data message's \c lengthType field's current value.
214  *
215  * \return the \c lengthType field value.
216  */
218 {
219  Q_D(const LengthMessage);
220  return d->lengthType;
221 }
222 
223 /*!
224  * Returns the LengthMessage data message's \c playerScore field's current value.
225  *
226  * \return the \c playerScore field value.
227  */
229 {
230  Q_D(const LengthMessage);
231  return d->playerScore;
232 }
233 
234 /*!
235  * Returns the LengthMessage data message's \c opponentScore field's current value.
236  *
237  * \return the \c opponentScore field value.
238  */
240 {
241  Q_D(const LengthMessage);
242  return d->opponentScore;
243 }
244 
245 /*!
246  * Returns the LengthMessage data message's \c strokeCount field's current value.
247  *
248  * stroke_type enum used as the index
249  *
250  * \return the \c strokeCount field value.
251  */
253 {
254  Q_D(const LengthMessage);
255  return d->strokeCount;
256 }
257 
258 /*!
259  * Returns the LengthMessage data message's \c zoneCount field's current value.
260  *
261  * zone number used as the index
262  *
263  * \return the \c zoneCount field value.
264  */
266 {
267  Q_D(const LengthMessage);
268  return d->zoneCount;
269 }
270 
271 /*!
272  * Sets the \c messageIndex field to \a messageIndex.
273  *
274  * \param messageIndex The field value to set.
275  */
277 {
278  Q_D(LengthMessage);
279  d->messageIndex = messageIndex;
280 }
281 /*!
282  * Sets the \c timestamp field to \a timestamp.
283  *
284  * \param timestamp The field value to set.
285  */
287 {
288  Q_D(LengthMessage);
289  d->timestamp = timestamp;
290 }
291 /*!
292  * Sets the \c event field to \a event.
293  *
294  * \param event The field value to set.
295  */
297 {
298  Q_D(LengthMessage);
299  d->event = event;
300 }
301 /*!
302  * Sets the \c eventType field to \a eventType.
303  *
304  * \param eventType The field value to set.
305  */
307 {
308  Q_D(LengthMessage);
309  d->eventType = eventType;
310 }
311 /*!
312  * Sets the \c startTime field to \a startTime.
313  *
314  * \param startTime The field value to set.
315  */
317 {
318  Q_D(LengthMessage);
319  d->startTime = startTime;
320 }
321 /*!
322  * Sets the \c totalElapsedTime field to \a totalElapsedTime.
323  *
324  * \param totalElapsedTime The field value to set.
325  */
326 void LengthMessage::setTotalElapsedTime(const quint32 totalElapsedTime)
327 {
328  Q_D(LengthMessage);
329  d->totalElapsedTime = totalElapsedTime;
330 }
331 /*!
332  * Sets the \c totalTimerTime field to \a totalTimerTime.
333  *
334  * \param totalTimerTime The field value to set.
335  */
336 void LengthMessage::setTotalTimerTime(const quint32 totalTimerTime)
337 {
338  Q_D(LengthMessage);
339  d->totalTimerTime = totalTimerTime;
340 }
341 /*!
342  * Sets the \c totalStrokes field to \a totalStrokes.
343  *
344  * \param totalStrokes The field value to set.
345  */
346 void LengthMessage::setTotalStrokes(const quint16 totalStrokes)
347 {
348  Q_D(LengthMessage);
349  d->totalStrokes = totalStrokes;
350 }
351 /*!
352  * Sets the \c avgSpeed field to \a avgSpeed.
353  *
354  * \param avgSpeed The field value to set.
355  */
356 void LengthMessage::setAvgSpeed(const quint16 avgSpeed)
357 {
358  Q_D(LengthMessage);
359  d->avgSpeed = avgSpeed;
360 }
361 /*!
362  * Sets the \c swimStroke field to \a swimStroke.
363  *
364  * \param swimStroke The field value to set.
365  */
367 {
368  Q_D(LengthMessage);
369  d->swimStroke = swimStroke;
370 }
371 /*!
372  * Sets the \c avgSwimmingCadence field to \a avgSwimmingCadence.
373  *
374  * \param avgSwimmingCadence The field value to set.
375  */
376 void LengthMessage::setAvgSwimmingCadence(const quint8 avgSwimmingCadence)
377 {
378  Q_D(LengthMessage);
379  d->avgSwimmingCadence = avgSwimmingCadence;
380 }
381 /*!
382  * Sets the \c eventGroup field to \a eventGroup.
383  *
384  * \param eventGroup The field value to set.
385  */
386 void LengthMessage::setEventGroup(const quint8 eventGroup)
387 {
388  Q_D(LengthMessage);
389  d->eventGroup = eventGroup;
390 }
391 /*!
392  * Sets the \c totalCalories field to \a totalCalories.
393  *
394  * \param totalCalories The field value to set.
395  */
396 void LengthMessage::setTotalCalories(const quint16 totalCalories)
397 {
398  Q_D(LengthMessage);
399  d->totalCalories = totalCalories;
400 }
401 /*!
402  * Sets the \c lengthType field to \a lengthType.
403  *
404  * \param lengthType The field value to set.
405  */
407 {
408  Q_D(LengthMessage);
409  d->lengthType = lengthType;
410 }
411 /*!
412  * Sets the \c playerScore field to \a playerScore.
413  *
414  * \param playerScore The field value to set.
415  */
416 void LengthMessage::setPlayerScore(const quint16 playerScore)
417 {
418  Q_D(LengthMessage);
419  d->playerScore = playerScore;
420 }
421 /*!
422  * Sets the \c opponentScore field to \a opponentScore.
423  *
424  * \param opponentScore The field value to set.
425  */
426 void LengthMessage::setOpponentScore(const quint16 opponentScore)
427 {
428  Q_D(LengthMessage);
429  d->opponentScore = opponentScore;
430 }
431 /*!
432  * Sets the \c strokeCount field to \a strokeCount.
433  *
434  * \param strokeCount The field value to set.
435  */
436 void LengthMessage::setStrokeCount(const quint16 strokeCount)
437 {
438  Q_D(LengthMessage);
439  d->strokeCount = strokeCount;
440 }
441 /*!
442  * Sets the \c zoneCount field to \a zoneCount.
443  *
444  * \param zoneCount The field value to set.
445  */
446 void LengthMessage::setZoneCount(const quint16 zoneCount)
447 {
448  Q_D(LengthMessage);
449  d->zoneCount = zoneCount;
450 }
451 
452 /// \cond internal
453 
454 /*!
455  * \internal
456  *
457  * \class LengthMessagePrivate
458  *
459  * The LengthMessagePrivate class provides private implementation for the LengthMessage.
460  *
461  * \sa LengthMessage
462  */
463 
464 /*!
465  * \internal
466  *
467  * Constructs a LengthMessagePrivate object with public implementation \a q.
468  *
469  * \param q Pointer to public implementaton.
470  */
471 LengthMessagePrivate::LengthMessagePrivate(LengthMessage * const q)
473  , messageIndex(static_cast<MessageIndex>(-1))
474  , timestamp(static_cast<DateTime>(-1))
475  , event(static_cast<Event>(-1))
476  , eventType(static_cast<EventType>(-1))
477  , startTime(static_cast<DateTime>(-1))
478  , totalElapsedTime(0xFFFFFFFF)
479  , totalTimerTime(0xFFFFFFFF)
480  , totalStrokes(0xFFFF)
481  , avgSpeed(0xFFFF)
482  , swimStroke(static_cast<SwimStroke>(-1))
483  , avgSwimmingCadence(0xFF)
484  , eventGroup(0xFF)
485  , totalCalories(0xFFFF)
486  , lengthType(static_cast<LengthType>(-1))
487  , playerScore(0xFFFF)
488  , opponentScore(0xFFFF)
489  , strokeCount(0xFFFF)
490  , zoneCount(0xFFFF)
491 {
492  globalMessageNumber = MesgNum::Length;
493 }
494 
495 /*!
496  * \internal
497  *
498  * Destroys the LengthMessagePrivate object.
499  */
501 {
502 
503 }
504 
506  const int fieldId, const QByteArray &data, const FitBaseType baseType, const bool bigEndian)
507 {
508  switch (fieldId) {
509  case 254: // See Profile.xlsx::Messages:length.messageIndex
510  if (!verify(data, baseType, 2, FitBaseType::Uint16, "length.messageIndex")) return false;
511  this->messageIndex = static_cast<MessageIndex>(bigEndian ? qFromBigEndian<quint16>(data) : qFromLittleEndian<quint16>(data));
512  break;
513  case 253: // See Profile.xlsx::Messages:length.timestamp
514  if (!verify(data, baseType, 4, FitBaseType::Uint32, "length.timestamp")) return false;
515  this->timestamp = static_cast<DateTime>(bigEndian ? qFromBigEndian<quint32>(data) : qFromLittleEndian<quint32>(data));
516  break;
517  case 0: // See Profile.xlsx::Messages:length.event
518  if (!verify(data, baseType, 1, FitBaseType::Enum, "length.event")) return false;
519  this->event = static_cast<Event>(data.at(0));
520  break;
521  case 1: // See Profile.xlsx::Messages:length.eventType
522  if (!verify(data, baseType, 1, FitBaseType::Enum, "length.eventType")) return false;
523  this->eventType = static_cast<EventType>(data.at(0));
524  break;
525  case 2: // See Profile.xlsx::Messages:length.startTime
526  if (!verify(data, baseType, 4, FitBaseType::Uint32, "length.startTime")) return false;
527  this->startTime = static_cast<DateTime>(bigEndian ? qFromBigEndian<quint32>(data) : qFromLittleEndian<quint32>(data));
528  break;
529  case 3: // See Profile.xlsx::Messages:length.totalElapsedTime
530  if (!verify(data, baseType, 4, FitBaseType::Uint32, "length.totalElapsedTime")) return false;
531  this->totalElapsedTime = static_cast<quint32>(bigEndian ? qFromBigEndian<quint32>(data) : qFromLittleEndian<quint32>(data));
532  break;
533  case 4: // See Profile.xlsx::Messages:length.totalTimerTime
534  if (!verify(data, baseType, 4, FitBaseType::Uint32, "length.totalTimerTime")) return false;
535  this->totalTimerTime = static_cast<quint32>(bigEndian ? qFromBigEndian<quint32>(data) : qFromLittleEndian<quint32>(data));
536  break;
537  case 5: // See Profile.xlsx::Messages:length.totalStrokes
538  if (!verify(data, baseType, 2, FitBaseType::Uint16, "length.totalStrokes")) return false;
539  this->totalStrokes = static_cast<quint16>(bigEndian ? qFromBigEndian<quint16>(data) : qFromLittleEndian<quint16>(data));
540  break;
541  case 6: // See Profile.xlsx::Messages:length.avgSpeed
542  if (!verify(data, baseType, 2, FitBaseType::Uint16, "length.avgSpeed")) return false;
543  this->avgSpeed = static_cast<quint16>(bigEndian ? qFromBigEndian<quint16>(data) : qFromLittleEndian<quint16>(data));
544  break;
545  case 7: // See Profile.xlsx::Messages:length.swimStroke
546  if (!verify(data, baseType, 1, FitBaseType::Enum, "length.swimStroke")) return false;
547  this->swimStroke = static_cast<SwimStroke>(data.at(0));
548  break;
549  case 9: // See Profile.xlsx::Messages:length.avgSwimmingCadence
550  if (!verify(data, baseType, 1, FitBaseType::Uint8, "length.avgSwimmingCadence")) return false;
551  this->avgSwimmingCadence = static_cast<quint8>(data.at(0));
552  break;
553  case 10: // See Profile.xlsx::Messages:length.eventGroup
554  if (!verify(data, baseType, 1, FitBaseType::Uint8, "length.eventGroup")) return false;
555  this->eventGroup = static_cast<quint8>(data.at(0));
556  break;
557  case 11: // See Profile.xlsx::Messages:length.totalCalories
558  if (!verify(data, baseType, 2, FitBaseType::Uint16, "length.totalCalories")) return false;
559  this->totalCalories = static_cast<quint16>(bigEndian ? qFromBigEndian<quint16>(data) : qFromLittleEndian<quint16>(data));
560  break;
561  case 12: // See Profile.xlsx::Messages:length.lengthType
562  if (!verify(data, baseType, 1, FitBaseType::Enum, "length.lengthType")) return false;
563  this->lengthType = static_cast<LengthType>(data.at(0));
564  break;
565  case 18: // See Profile.xlsx::Messages:length.playerScore
566  if (!verify(data, baseType, 2, FitBaseType::Uint16, "length.playerScore")) return false;
567  this->playerScore = static_cast<quint16>(bigEndian ? qFromBigEndian<quint16>(data) : qFromLittleEndian<quint16>(data));
568  break;
569  case 19: // See Profile.xlsx::Messages:length.opponentScore
570  if (!verify(data, baseType, 2, FitBaseType::Uint16, "length.opponentScore")) return false;
571  this->opponentScore = static_cast<quint16>(bigEndian ? qFromBigEndian<quint16>(data) : qFromLittleEndian<quint16>(data));
572  break;
573  case 20: // See Profile.xlsx::Messages:length.strokeCount
574  if (!verify(data, baseType, 2, FitBaseType::Uint16, "length.strokeCount")) return false;
575  this->strokeCount = static_cast<quint16>(bigEndian ? qFromBigEndian<quint16>(data) : qFromLittleEndian<quint16>(data));
576  break;
577  case 21: // See Profile.xlsx::Messages:length.zoneCount
578  if (!verify(data, baseType, 2, FitBaseType::Uint16, "length.zoneCount")) return false;
579  this->zoneCount = static_cast<quint16>(bigEndian ? qFromBigEndian<quint16>(data) : qFromLittleEndian<quint16>(data));
580  break;
581  default:
582  qWarning() << "ignoring unknown length message field number" << fieldId << bigEndian;
583  // Fall through to return true, as its still 'safe' to continue parsing data messages.
584  }
585  return true;
586 }
587 
588 /// \endcond
589 
#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
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.
bool setField(const int fieldId, const QByteArray &data, const FitBaseType baseType, const bool bigEndian) override
quint16 totalStrokes
The LengthMessage FIT message's totalStrokes field.
EventType eventType
The LengthMessage FIT message's eventType field.
quint8 avgSwimmingCadence
The LengthMessage FIT message's avgSwimmingCadence field.
quint16 totalCalories
The LengthMessage FIT message's totalCalories field.
quint16 opponentScore
The LengthMessage FIT message's opponentScore field.
SwimStroke swimStroke
The LengthMessage FIT message's swimStroke field.
quint16 avgSpeed
The LengthMessage FIT message's avgSpeed field.
DateTime timestamp
The LengthMessage FIT message's timestamp field.
LengthType lengthType
The LengthMessage FIT message's lengthType field.
DateTime startTime
The LengthMessage FIT message's startTime field.
quint16 playerScore
The LengthMessage FIT message's playerScore field.
quint16 zoneCount
The LengthMessage FIT message's zoneCount field.
quint32 totalElapsedTime
The LengthMessage FIT message's totalElapsedTime field.
quint16 strokeCount
The LengthMessage FIT message's strokeCount field.
quint8 eventGroup
The LengthMessage FIT message's eventGroup field.
virtual ~LengthMessagePrivate()
MessageIndex messageIndex
The LengthMessage FIT message's messageIndex field.
quint32 totalTimerTime
The LengthMessage FIT message's totalTimerTime field.
The LengthMessage class represents a FIT LengthMessage data message.
Definition: lengthmessage.h:39
void setOpponentScore(const quint16 opponentScore)
Sets the opponentScore field to opponentScore.
quint16 opponentScore() const
Returns the LengthMessage data message's opponentScore field's current value.
quint16 avgSpeed() const
Returns the LengthMessage data message's avgSpeed field's current value.
Event event() const
Returns the LengthMessage data message's event field's current value.
EventType eventType() const
Returns the LengthMessage data message's eventType field's current value.
LengthType lengthType() const
Returns the LengthMessage data message's lengthType field's current value.
void setEventType(const EventType eventType)
Sets the eventType field to eventType.
void setTotalTimerTime(const quint32 totalTimerTime)
Sets the totalTimerTime field to totalTimerTime.
quint16 playerScore() const
Returns the LengthMessage data message's playerScore field's current value.
void setAvgSpeed(const quint16 avgSpeed)
Sets the avgSpeed field to avgSpeed.
void setTotalStrokes(const quint16 totalStrokes)
Sets the totalStrokes field to totalStrokes.
void setEvent(const Event event)
Sets the event field to event.
void setAvgSwimmingCadence(const quint8 avgSwimmingCadence)
Sets the avgSwimmingCadence field to avgSwimmingCadence.
DateTime timestamp() const
Returns the LengthMessage data message's timestamp field's current value.
DateTime startTime() const
Returns the LengthMessage data message's startTime field's current value.
quint8 eventGroup() const
Returns the LengthMessage data message's eventGroup field's current value.
void setMessageIndex(const MessageIndex messageIndex)
Sets the messageIndex field to messageIndex.
void setSwimStroke(const SwimStroke swimStroke)
Sets the swimStroke field to swimStroke.
void setTotalCalories(const quint16 totalCalories)
Sets the totalCalories field to totalCalories.
quint16 totalStrokes() const
Returns the LengthMessage data message's totalStrokes field's current value.
quint32 totalTimerTime() const
Returns the LengthMessage data message's totalTimerTime field's current value.
void setTimestamp(const DateTime timestamp)
Sets the timestamp field to timestamp.
quint8 avgSwimmingCadence() const
Returns the LengthMessage data message's avgSwimmingCadence field's current value.
quint16 totalCalories() const
Returns the LengthMessage data message's totalCalories field's current value.
void setEventGroup(const quint8 eventGroup)
Sets the eventGroup field to eventGroup.
quint32 totalElapsedTime() const
Returns the LengthMessage data message's totalElapsedTime field's current value.
quint16 strokeCount() const
Returns the LengthMessage data message's strokeCount field's current value.
void setLengthType(const LengthType lengthType)
Sets the lengthType field to lengthType.
quint16 zoneCount() const
Returns the LengthMessage data message's zoneCount field's current value.
void setStartTime(const DateTime startTime)
Sets the startTime field to startTime.
LengthMessage()
Constructs a LengthMessage object.
void setTotalElapsedTime(const quint32 totalElapsedTime)
Sets the totalElapsedTime field to totalElapsedTime.
void setZoneCount(const quint16 zoneCount)
Sets the zoneCount field to zoneCount.
void setPlayerScore(const quint16 playerScore)
Sets the playerScore field to playerScore.
SwimStroke swimStroke() const
Returns the LengthMessage data message's swimStroke field's current value.
void setStrokeCount(const quint16 strokeCount)
Sets the strokeCount field to strokeCount.
MessageIndex messageIndex() const
Returns the LengthMessage data message's messageIndex field's current value.
Declares the LengthMessage class.
Declares the LengthMessagePrivate class.
SwimStroke
Garmin FIT SwimStroke type.
Definition: types.h:2262
EventType
Garmin FIT EventType type.
Definition: types.h:1182
Event
Garmin FIT Event type.
Definition: types.h:1133
FitBaseType
Garmin FIT FitBaseType type.
Definition: types.h:3388
MessageIndex
Garmin FIT MessageIndex type.
Definition: types.h:263
LengthType
Garmin FIT LengthType type.
Definition: types.h:2391
DateTime
Seconds since UTC 00:00 Dec 31 1989.
Definition: types.h:237