rubyfit 0.0.5 → 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -7,11 +7,11 @@
7
7
  // warranties of merchantability, non-infringement, or fitness for a particular
8
8
  // purpose, are specifically disclaimed.
9
9
  //
10
- // Copyright 2014 Dynastream Innovations Inc.
10
+ // Copyright 2016 Dynastream Innovations Inc.
11
11
  ////////////////////////////////////////////////////////////////////////////////
12
12
  // ****WARNING**** This file is auto-generated! Do NOT edit this file.
13
- // Profile Version = 11.0Release
14
- // Tag = $Name: AKW11_000 $
13
+ // Profile Version = 20.16Release
14
+ // Tag = production/akw/20.16.00-0-gce20b51
15
15
  // Product = EXAMPLE
16
16
  // Alignment = 4 bytes, padding disabled.
17
17
  ////////////////////////////////////////////////////////////////////////////////
@@ -55,7 +55,12 @@ typedef FIT_ENUM FIT_FILE;
55
55
  #define FIT_FILE_ACTIVITY_SUMMARY ((FIT_FILE)20) // Read/erase, multiple files. Directory=Activities
56
56
  #define FIT_FILE_MONITORING_DAILY ((FIT_FILE)28)
57
57
  #define FIT_FILE_MONITORING_B ((FIT_FILE)32) // Read only. Directory=Monitoring. File number=identifier
58
- #define FIT_FILE_COUNT 15
58
+ #define FIT_FILE_SEGMENT ((FIT_FILE)34) // Read/write/erase. Multiple Files. Directory=Segments
59
+ #define FIT_FILE_SEGMENT_LIST ((FIT_FILE)35) // Read/write/erase. Single File. Directory=Segments
60
+ #define FIT_FILE_EXD_CONFIGURATION ((FIT_FILE)40) // Read/write/erase. Single File. Directory=Settings
61
+ #define FIT_FILE_MFG_RANGE_MIN ((FIT_FILE)0xF7) // 0xF7 - 0xFE reserved for manufacturer specific file types
62
+ #define FIT_FILE_MFG_RANGE_MAX ((FIT_FILE)0xFE) // 0xF7 - 0xFE reserved for manufacturer specific file types
63
+ #define FIT_FILE_COUNT 20
59
64
 
60
65
  typedef FIT_UINT16 FIT_MESG_NUM;
61
66
  #define FIT_MESG_NUM_INVALID FIT_UINT16_INVALID
@@ -93,16 +98,51 @@ typedef FIT_UINT16 FIT_MESG_NUM;
93
98
  #define FIT_MESG_NUM_BLOOD_PRESSURE ((FIT_MESG_NUM)51)
94
99
  #define FIT_MESG_NUM_SPEED_ZONE ((FIT_MESG_NUM)53)
95
100
  #define FIT_MESG_NUM_MONITORING ((FIT_MESG_NUM)55)
101
+ #define FIT_MESG_NUM_TRAINING_FILE ((FIT_MESG_NUM)72)
96
102
  #define FIT_MESG_NUM_HRV ((FIT_MESG_NUM)78)
103
+ #define FIT_MESG_NUM_ANT_RX ((FIT_MESG_NUM)80)
104
+ #define FIT_MESG_NUM_ANT_TX ((FIT_MESG_NUM)81)
105
+ #define FIT_MESG_NUM_ANT_CHANNEL_ID ((FIT_MESG_NUM)82)
97
106
  #define FIT_MESG_NUM_LENGTH ((FIT_MESG_NUM)101)
98
107
  #define FIT_MESG_NUM_MONITORING_INFO ((FIT_MESG_NUM)103)
99
108
  #define FIT_MESG_NUM_PAD ((FIT_MESG_NUM)105)
100
109
  #define FIT_MESG_NUM_SLAVE_DEVICE ((FIT_MESG_NUM)106)
110
+ #define FIT_MESG_NUM_CONNECTIVITY ((FIT_MESG_NUM)127)
111
+ #define FIT_MESG_NUM_WEATHER_CONDITIONS ((FIT_MESG_NUM)128)
112
+ #define FIT_MESG_NUM_WEATHER_ALERT ((FIT_MESG_NUM)129)
101
113
  #define FIT_MESG_NUM_CADENCE_ZONE ((FIT_MESG_NUM)131)
114
+ #define FIT_MESG_NUM_HR ((FIT_MESG_NUM)132)
115
+ #define FIT_MESG_NUM_SEGMENT_LAP ((FIT_MESG_NUM)142)
102
116
  #define FIT_MESG_NUM_MEMO_GLOB ((FIT_MESG_NUM)145)
117
+ #define FIT_MESG_NUM_SEGMENT_ID ((FIT_MESG_NUM)148)
118
+ #define FIT_MESG_NUM_SEGMENT_LEADERBOARD_ENTRY ((FIT_MESG_NUM)149)
119
+ #define FIT_MESG_NUM_SEGMENT_POINT ((FIT_MESG_NUM)150)
120
+ #define FIT_MESG_NUM_SEGMENT_FILE ((FIT_MESG_NUM)151)
121
+ #define FIT_MESG_NUM_WATCHFACE_SETTINGS ((FIT_MESG_NUM)159)
122
+ #define FIT_MESG_NUM_GPS_METADATA ((FIT_MESG_NUM)160)
123
+ #define FIT_MESG_NUM_CAMERA_EVENT ((FIT_MESG_NUM)161)
124
+ #define FIT_MESG_NUM_TIMESTAMP_CORRELATION ((FIT_MESG_NUM)162)
125
+ #define FIT_MESG_NUM_GYROSCOPE_DATA ((FIT_MESG_NUM)164)
126
+ #define FIT_MESG_NUM_ACCELEROMETER_DATA ((FIT_MESG_NUM)165)
127
+ #define FIT_MESG_NUM_THREE_D_SENSOR_CALIBRATION ((FIT_MESG_NUM)167)
128
+ #define FIT_MESG_NUM_VIDEO_FRAME ((FIT_MESG_NUM)169)
129
+ #define FIT_MESG_NUM_OBDII_DATA ((FIT_MESG_NUM)174)
130
+ #define FIT_MESG_NUM_NMEA_SENTENCE ((FIT_MESG_NUM)177)
131
+ #define FIT_MESG_NUM_AVIATION_ATTITUDE ((FIT_MESG_NUM)178)
132
+ #define FIT_MESG_NUM_VIDEO ((FIT_MESG_NUM)184)
133
+ #define FIT_MESG_NUM_VIDEO_TITLE ((FIT_MESG_NUM)185)
134
+ #define FIT_MESG_NUM_VIDEO_DESCRIPTION ((FIT_MESG_NUM)186)
135
+ #define FIT_MESG_NUM_VIDEO_CLIP ((FIT_MESG_NUM)187)
136
+ #define FIT_MESG_NUM_OHR_SETTINGS ((FIT_MESG_NUM)188)
137
+ #define FIT_MESG_NUM_EXD_SCREEN_CONFIGURATION ((FIT_MESG_NUM)200)
138
+ #define FIT_MESG_NUM_EXD_DATA_FIELD_CONFIGURATION ((FIT_MESG_NUM)201)
139
+ #define FIT_MESG_NUM_EXD_DATA_CONCEPT_CONFIGURATION ((FIT_MESG_NUM)202)
140
+ #define FIT_MESG_NUM_FIELD_DESCRIPTION ((FIT_MESG_NUM)206)
141
+ #define FIT_MESG_NUM_DEVELOPER_DATA_ID ((FIT_MESG_NUM)207)
142
+ #define FIT_MESG_NUM_MAGNETOMETER_DATA ((FIT_MESG_NUM)208)
103
143
  #define FIT_MESG_NUM_MFG_RANGE_MIN ((FIT_MESG_NUM)0xFF00) // 0xFF00 - 0xFFFE reserved for manufacturer specific messages
104
144
  #define FIT_MESG_NUM_MFG_RANGE_MAX ((FIT_MESG_NUM)0xFFFE) // 0xFF00 - 0xFFFE reserved for manufacturer specific messages
105
- #define FIT_MESG_NUM_COUNT 43
145
+ #define FIT_MESG_NUM_COUNT 78
106
146
 
107
147
  typedef FIT_UINT8 FIT_CHECKSUM;
108
148
  #define FIT_CHECKSUM_INVALID FIT_UINT8_INVALID
@@ -180,8 +220,180 @@ typedef FIT_ENUM FIT_LANGUAGE;
180
220
  #define FIT_LANGUAGE_FARSI ((FIT_LANGUAGE)23)
181
221
  #define FIT_LANGUAGE_BULGARIAN ((FIT_LANGUAGE)24)
182
222
  #define FIT_LANGUAGE_ROMANIAN ((FIT_LANGUAGE)25)
223
+ #define FIT_LANGUAGE_CHINESE ((FIT_LANGUAGE)26)
224
+ #define FIT_LANGUAGE_JAPANESE ((FIT_LANGUAGE)27)
225
+ #define FIT_LANGUAGE_KOREAN ((FIT_LANGUAGE)28)
226
+ #define FIT_LANGUAGE_TAIWANESE ((FIT_LANGUAGE)29)
227
+ #define FIT_LANGUAGE_THAI ((FIT_LANGUAGE)30)
228
+ #define FIT_LANGUAGE_HEBREW ((FIT_LANGUAGE)31)
229
+ #define FIT_LANGUAGE_BRAZILIAN_PORTUGUESE ((FIT_LANGUAGE)32)
230
+ #define FIT_LANGUAGE_INDONESIAN ((FIT_LANGUAGE)33)
183
231
  #define FIT_LANGUAGE_CUSTOM ((FIT_LANGUAGE)254)
184
- #define FIT_LANGUAGE_COUNT 27
232
+ #define FIT_LANGUAGE_COUNT 35
233
+
234
+ typedef FIT_UINT8Z FIT_LANGUAGE_BITS_0; // Bit field corresponding to language enum type (1 << language).
235
+ #define FIT_LANGUAGE_BITS_0_INVALID FIT_UINT8Z_INVALID
236
+ #define FIT_LANGUAGE_BITS_0_ENGLISH ((FIT_LANGUAGE_BITS_0)0x01)
237
+ #define FIT_LANGUAGE_BITS_0_FRENCH ((FIT_LANGUAGE_BITS_0)0x02)
238
+ #define FIT_LANGUAGE_BITS_0_ITALIAN ((FIT_LANGUAGE_BITS_0)0x04)
239
+ #define FIT_LANGUAGE_BITS_0_GERMAN ((FIT_LANGUAGE_BITS_0)0x08)
240
+ #define FIT_LANGUAGE_BITS_0_SPANISH ((FIT_LANGUAGE_BITS_0)0x10)
241
+ #define FIT_LANGUAGE_BITS_0_CROATIAN ((FIT_LANGUAGE_BITS_0)0x20)
242
+ #define FIT_LANGUAGE_BITS_0_CZECH ((FIT_LANGUAGE_BITS_0)0x40)
243
+ #define FIT_LANGUAGE_BITS_0_DANISH ((FIT_LANGUAGE_BITS_0)0x80)
244
+ #define FIT_LANGUAGE_BITS_0_COUNT 8
245
+
246
+ typedef FIT_UINT8Z FIT_LANGUAGE_BITS_1;
247
+ #define FIT_LANGUAGE_BITS_1_INVALID FIT_UINT8Z_INVALID
248
+ #define FIT_LANGUAGE_BITS_1_DUTCH ((FIT_LANGUAGE_BITS_1)0x01)
249
+ #define FIT_LANGUAGE_BITS_1_FINNISH ((FIT_LANGUAGE_BITS_1)0x02)
250
+ #define FIT_LANGUAGE_BITS_1_GREEK ((FIT_LANGUAGE_BITS_1)0x04)
251
+ #define FIT_LANGUAGE_BITS_1_HUNGARIAN ((FIT_LANGUAGE_BITS_1)0x08)
252
+ #define FIT_LANGUAGE_BITS_1_NORWEGIAN ((FIT_LANGUAGE_BITS_1)0x10)
253
+ #define FIT_LANGUAGE_BITS_1_POLISH ((FIT_LANGUAGE_BITS_1)0x20)
254
+ #define FIT_LANGUAGE_BITS_1_PORTUGUESE ((FIT_LANGUAGE_BITS_1)0x40)
255
+ #define FIT_LANGUAGE_BITS_1_SLOVAKIAN ((FIT_LANGUAGE_BITS_1)0x80)
256
+ #define FIT_LANGUAGE_BITS_1_COUNT 8
257
+
258
+ typedef FIT_UINT8Z FIT_LANGUAGE_BITS_2;
259
+ #define FIT_LANGUAGE_BITS_2_INVALID FIT_UINT8Z_INVALID
260
+ #define FIT_LANGUAGE_BITS_2_SLOVENIAN ((FIT_LANGUAGE_BITS_2)0x01)
261
+ #define FIT_LANGUAGE_BITS_2_SWEDISH ((FIT_LANGUAGE_BITS_2)0x02)
262
+ #define FIT_LANGUAGE_BITS_2_RUSSIAN ((FIT_LANGUAGE_BITS_2)0x04)
263
+ #define FIT_LANGUAGE_BITS_2_TURKISH ((FIT_LANGUAGE_BITS_2)0x08)
264
+ #define FIT_LANGUAGE_BITS_2_LATVIAN ((FIT_LANGUAGE_BITS_2)0x10)
265
+ #define FIT_LANGUAGE_BITS_2_UKRAINIAN ((FIT_LANGUAGE_BITS_2)0x20)
266
+ #define FIT_LANGUAGE_BITS_2_ARABIC ((FIT_LANGUAGE_BITS_2)0x40)
267
+ #define FIT_LANGUAGE_BITS_2_FARSI ((FIT_LANGUAGE_BITS_2)0x80)
268
+ #define FIT_LANGUAGE_BITS_2_COUNT 8
269
+
270
+ typedef FIT_UINT8Z FIT_LANGUAGE_BITS_3;
271
+ #define FIT_LANGUAGE_BITS_3_INVALID FIT_UINT8Z_INVALID
272
+ #define FIT_LANGUAGE_BITS_3_BULGARIAN ((FIT_LANGUAGE_BITS_3)0x01)
273
+ #define FIT_LANGUAGE_BITS_3_ROMANIAN ((FIT_LANGUAGE_BITS_3)0x02)
274
+ #define FIT_LANGUAGE_BITS_3_CHINESE ((FIT_LANGUAGE_BITS_3)0x04)
275
+ #define FIT_LANGUAGE_BITS_3_JAPANESE ((FIT_LANGUAGE_BITS_3)0x08)
276
+ #define FIT_LANGUAGE_BITS_3_KOREAN ((FIT_LANGUAGE_BITS_3)0x10)
277
+ #define FIT_LANGUAGE_BITS_3_TAIWANESE ((FIT_LANGUAGE_BITS_3)0x20)
278
+ #define FIT_LANGUAGE_BITS_3_THAI ((FIT_LANGUAGE_BITS_3)0x40)
279
+ #define FIT_LANGUAGE_BITS_3_HEBREW ((FIT_LANGUAGE_BITS_3)0x80)
280
+ #define FIT_LANGUAGE_BITS_3_COUNT 8
281
+
282
+ typedef FIT_UINT8Z FIT_LANGUAGE_BITS_4;
283
+ #define FIT_LANGUAGE_BITS_4_INVALID FIT_UINT8Z_INVALID
284
+ #define FIT_LANGUAGE_BITS_4_BRAZILIAN_PORTUGUESE ((FIT_LANGUAGE_BITS_4)0x01)
285
+ #define FIT_LANGUAGE_BITS_4_INDONESIAN ((FIT_LANGUAGE_BITS_4)0x02)
286
+ #define FIT_LANGUAGE_BITS_4_COUNT 2
287
+
288
+ typedef FIT_ENUM FIT_TIME_ZONE;
289
+ #define FIT_TIME_ZONE_INVALID FIT_ENUM_INVALID
290
+ #define FIT_TIME_ZONE_ALMATY ((FIT_TIME_ZONE)0)
291
+ #define FIT_TIME_ZONE_BANGKOK ((FIT_TIME_ZONE)1)
292
+ #define FIT_TIME_ZONE_BOMBAY ((FIT_TIME_ZONE)2)
293
+ #define FIT_TIME_ZONE_BRASILIA ((FIT_TIME_ZONE)3)
294
+ #define FIT_TIME_ZONE_CAIRO ((FIT_TIME_ZONE)4)
295
+ #define FIT_TIME_ZONE_CAPE_VERDE_IS ((FIT_TIME_ZONE)5)
296
+ #define FIT_TIME_ZONE_DARWIN ((FIT_TIME_ZONE)6)
297
+ #define FIT_TIME_ZONE_ENIWETOK ((FIT_TIME_ZONE)7)
298
+ #define FIT_TIME_ZONE_FIJI ((FIT_TIME_ZONE)8)
299
+ #define FIT_TIME_ZONE_HONG_KONG ((FIT_TIME_ZONE)9)
300
+ #define FIT_TIME_ZONE_ISLAMABAD ((FIT_TIME_ZONE)10)
301
+ #define FIT_TIME_ZONE_KABUL ((FIT_TIME_ZONE)11)
302
+ #define FIT_TIME_ZONE_MAGADAN ((FIT_TIME_ZONE)12)
303
+ #define FIT_TIME_ZONE_MID_ATLANTIC ((FIT_TIME_ZONE)13)
304
+ #define FIT_TIME_ZONE_MOSCOW ((FIT_TIME_ZONE)14)
305
+ #define FIT_TIME_ZONE_MUSCAT ((FIT_TIME_ZONE)15)
306
+ #define FIT_TIME_ZONE_NEWFOUNDLAND ((FIT_TIME_ZONE)16)
307
+ #define FIT_TIME_ZONE_SAMOA ((FIT_TIME_ZONE)17)
308
+ #define FIT_TIME_ZONE_SYDNEY ((FIT_TIME_ZONE)18)
309
+ #define FIT_TIME_ZONE_TEHRAN ((FIT_TIME_ZONE)19)
310
+ #define FIT_TIME_ZONE_TOKYO ((FIT_TIME_ZONE)20)
311
+ #define FIT_TIME_ZONE_US_ALASKA ((FIT_TIME_ZONE)21)
312
+ #define FIT_TIME_ZONE_US_ATLANTIC ((FIT_TIME_ZONE)22)
313
+ #define FIT_TIME_ZONE_US_CENTRAL ((FIT_TIME_ZONE)23)
314
+ #define FIT_TIME_ZONE_US_EASTERN ((FIT_TIME_ZONE)24)
315
+ #define FIT_TIME_ZONE_US_HAWAII ((FIT_TIME_ZONE)25)
316
+ #define FIT_TIME_ZONE_US_MOUNTAIN ((FIT_TIME_ZONE)26)
317
+ #define FIT_TIME_ZONE_US_PACIFIC ((FIT_TIME_ZONE)27)
318
+ #define FIT_TIME_ZONE_OTHER ((FIT_TIME_ZONE)28)
319
+ #define FIT_TIME_ZONE_AUCKLAND ((FIT_TIME_ZONE)29)
320
+ #define FIT_TIME_ZONE_KATHMANDU ((FIT_TIME_ZONE)30)
321
+ #define FIT_TIME_ZONE_EUROPE_WESTERN_WET ((FIT_TIME_ZONE)31)
322
+ #define FIT_TIME_ZONE_EUROPE_CENTRAL_CET ((FIT_TIME_ZONE)32)
323
+ #define FIT_TIME_ZONE_EUROPE_EASTERN_EET ((FIT_TIME_ZONE)33)
324
+ #define FIT_TIME_ZONE_JAKARTA ((FIT_TIME_ZONE)34)
325
+ #define FIT_TIME_ZONE_PERTH ((FIT_TIME_ZONE)35)
326
+ #define FIT_TIME_ZONE_ADELAIDE ((FIT_TIME_ZONE)36)
327
+ #define FIT_TIME_ZONE_BRISBANE ((FIT_TIME_ZONE)37)
328
+ #define FIT_TIME_ZONE_TASMANIA ((FIT_TIME_ZONE)38)
329
+ #define FIT_TIME_ZONE_ICELAND ((FIT_TIME_ZONE)39)
330
+ #define FIT_TIME_ZONE_AMSTERDAM ((FIT_TIME_ZONE)40)
331
+ #define FIT_TIME_ZONE_ATHENS ((FIT_TIME_ZONE)41)
332
+ #define FIT_TIME_ZONE_BARCELONA ((FIT_TIME_ZONE)42)
333
+ #define FIT_TIME_ZONE_BERLIN ((FIT_TIME_ZONE)43)
334
+ #define FIT_TIME_ZONE_BRUSSELS ((FIT_TIME_ZONE)44)
335
+ #define FIT_TIME_ZONE_BUDAPEST ((FIT_TIME_ZONE)45)
336
+ #define FIT_TIME_ZONE_COPENHAGEN ((FIT_TIME_ZONE)46)
337
+ #define FIT_TIME_ZONE_DUBLIN ((FIT_TIME_ZONE)47)
338
+ #define FIT_TIME_ZONE_HELSINKI ((FIT_TIME_ZONE)48)
339
+ #define FIT_TIME_ZONE_LISBON ((FIT_TIME_ZONE)49)
340
+ #define FIT_TIME_ZONE_LONDON ((FIT_TIME_ZONE)50)
341
+ #define FIT_TIME_ZONE_MADRID ((FIT_TIME_ZONE)51)
342
+ #define FIT_TIME_ZONE_MUNICH ((FIT_TIME_ZONE)52)
343
+ #define FIT_TIME_ZONE_OSLO ((FIT_TIME_ZONE)53)
344
+ #define FIT_TIME_ZONE_PARIS ((FIT_TIME_ZONE)54)
345
+ #define FIT_TIME_ZONE_PRAGUE ((FIT_TIME_ZONE)55)
346
+ #define FIT_TIME_ZONE_REYKJAVIK ((FIT_TIME_ZONE)56)
347
+ #define FIT_TIME_ZONE_ROME ((FIT_TIME_ZONE)57)
348
+ #define FIT_TIME_ZONE_STOCKHOLM ((FIT_TIME_ZONE)58)
349
+ #define FIT_TIME_ZONE_VIENNA ((FIT_TIME_ZONE)59)
350
+ #define FIT_TIME_ZONE_WARSAW ((FIT_TIME_ZONE)60)
351
+ #define FIT_TIME_ZONE_ZURICH ((FIT_TIME_ZONE)61)
352
+ #define FIT_TIME_ZONE_QUEBEC ((FIT_TIME_ZONE)62)
353
+ #define FIT_TIME_ZONE_ONTARIO ((FIT_TIME_ZONE)63)
354
+ #define FIT_TIME_ZONE_MANITOBA ((FIT_TIME_ZONE)64)
355
+ #define FIT_TIME_ZONE_SASKATCHEWAN ((FIT_TIME_ZONE)65)
356
+ #define FIT_TIME_ZONE_ALBERTA ((FIT_TIME_ZONE)66)
357
+ #define FIT_TIME_ZONE_BRITISH_COLUMBIA ((FIT_TIME_ZONE)67)
358
+ #define FIT_TIME_ZONE_BOISE ((FIT_TIME_ZONE)68)
359
+ #define FIT_TIME_ZONE_BOSTON ((FIT_TIME_ZONE)69)
360
+ #define FIT_TIME_ZONE_CHICAGO ((FIT_TIME_ZONE)70)
361
+ #define FIT_TIME_ZONE_DALLAS ((FIT_TIME_ZONE)71)
362
+ #define FIT_TIME_ZONE_DENVER ((FIT_TIME_ZONE)72)
363
+ #define FIT_TIME_ZONE_KANSAS_CITY ((FIT_TIME_ZONE)73)
364
+ #define FIT_TIME_ZONE_LAS_VEGAS ((FIT_TIME_ZONE)74)
365
+ #define FIT_TIME_ZONE_LOS_ANGELES ((FIT_TIME_ZONE)75)
366
+ #define FIT_TIME_ZONE_MIAMI ((FIT_TIME_ZONE)76)
367
+ #define FIT_TIME_ZONE_MINNEAPOLIS ((FIT_TIME_ZONE)77)
368
+ #define FIT_TIME_ZONE_NEW_YORK ((FIT_TIME_ZONE)78)
369
+ #define FIT_TIME_ZONE_NEW_ORLEANS ((FIT_TIME_ZONE)79)
370
+ #define FIT_TIME_ZONE_PHOENIX ((FIT_TIME_ZONE)80)
371
+ #define FIT_TIME_ZONE_SANTA_FE ((FIT_TIME_ZONE)81)
372
+ #define FIT_TIME_ZONE_SEATTLE ((FIT_TIME_ZONE)82)
373
+ #define FIT_TIME_ZONE_WASHINGTON_DC ((FIT_TIME_ZONE)83)
374
+ #define FIT_TIME_ZONE_US_ARIZONA ((FIT_TIME_ZONE)84)
375
+ #define FIT_TIME_ZONE_CHITA ((FIT_TIME_ZONE)85)
376
+ #define FIT_TIME_ZONE_EKATERINBURG ((FIT_TIME_ZONE)86)
377
+ #define FIT_TIME_ZONE_IRKUTSK ((FIT_TIME_ZONE)87)
378
+ #define FIT_TIME_ZONE_KALININGRAD ((FIT_TIME_ZONE)88)
379
+ #define FIT_TIME_ZONE_KRASNOYARSK ((FIT_TIME_ZONE)89)
380
+ #define FIT_TIME_ZONE_NOVOSIBIRSK ((FIT_TIME_ZONE)90)
381
+ #define FIT_TIME_ZONE_PETROPAVLOVSK_KAMCHATSKIY ((FIT_TIME_ZONE)91)
382
+ #define FIT_TIME_ZONE_SAMARA ((FIT_TIME_ZONE)92)
383
+ #define FIT_TIME_ZONE_VLADIVOSTOK ((FIT_TIME_ZONE)93)
384
+ #define FIT_TIME_ZONE_MEXICO_CENTRAL ((FIT_TIME_ZONE)94)
385
+ #define FIT_TIME_ZONE_MEXICO_MOUNTAIN ((FIT_TIME_ZONE)95)
386
+ #define FIT_TIME_ZONE_MEXICO_PACIFIC ((FIT_TIME_ZONE)96)
387
+ #define FIT_TIME_ZONE_CAPE_TOWN ((FIT_TIME_ZONE)97)
388
+ #define FIT_TIME_ZONE_WINKHOEK ((FIT_TIME_ZONE)98)
389
+ #define FIT_TIME_ZONE_LAGOS ((FIT_TIME_ZONE)99)
390
+ #define FIT_TIME_ZONE_RIYAHD ((FIT_TIME_ZONE)100)
391
+ #define FIT_TIME_ZONE_VENEZUELA ((FIT_TIME_ZONE)101)
392
+ #define FIT_TIME_ZONE_AUSTRALIA_LH ((FIT_TIME_ZONE)102)
393
+ #define FIT_TIME_ZONE_SANTIAGO ((FIT_TIME_ZONE)103)
394
+ #define FIT_TIME_ZONE_MANUAL ((FIT_TIME_ZONE)253)
395
+ #define FIT_TIME_ZONE_AUTOMATIC ((FIT_TIME_ZONE)254)
396
+ #define FIT_TIME_ZONE_COUNT 106
185
397
 
186
398
  typedef FIT_ENUM FIT_DISPLAY_MEASURE;
187
399
  #define FIT_DISPLAY_MEASURE_INVALID FIT_ENUM_INVALID
@@ -248,6 +460,13 @@ typedef FIT_ENUM FIT_DISPLAY_POSITION;
248
460
  #define FIT_DISPLAY_POSITION_SWEDISH_REF_99_GRID ((FIT_DISPLAY_POSITION)41) // Reference Grid 99 TM (Swedish)
249
461
  #define FIT_DISPLAY_POSITION_COUNT 42
250
462
 
463
+ typedef FIT_ENUM FIT_SWITCH;
464
+ #define FIT_SWITCH_INVALID FIT_ENUM_INVALID
465
+ #define FIT_SWITCH_OFF ((FIT_SWITCH)0)
466
+ #define FIT_SWITCH_ON ((FIT_SWITCH)1)
467
+ #define FIT_SWITCH_AUTO ((FIT_SWITCH)2)
468
+ #define FIT_SWITCH_COUNT 3
469
+
251
470
  typedef FIT_ENUM FIT_SPORT;
252
471
  #define FIT_SPORT_INVALID FIT_ENUM_INVALID
253
472
  #define FIT_SPORT_GENERIC ((FIT_SPORT)0)
@@ -270,8 +489,37 @@ typedef FIT_ENUM FIT_SPORT;
270
489
  #define FIT_SPORT_HIKING ((FIT_SPORT)17)
271
490
  #define FIT_SPORT_MULTISPORT ((FIT_SPORT)18)
272
491
  #define FIT_SPORT_PADDLING ((FIT_SPORT)19)
492
+ #define FIT_SPORT_FLYING ((FIT_SPORT)20)
493
+ #define FIT_SPORT_E_BIKING ((FIT_SPORT)21)
494
+ #define FIT_SPORT_MOTORCYCLING ((FIT_SPORT)22)
495
+ #define FIT_SPORT_BOATING ((FIT_SPORT)23)
496
+ #define FIT_SPORT_DRIVING ((FIT_SPORT)24)
497
+ #define FIT_SPORT_GOLF ((FIT_SPORT)25)
498
+ #define FIT_SPORT_HANG_GLIDING ((FIT_SPORT)26)
499
+ #define FIT_SPORT_HORSEBACK_RIDING ((FIT_SPORT)27)
500
+ #define FIT_SPORT_HUNTING ((FIT_SPORT)28)
501
+ #define FIT_SPORT_FISHING ((FIT_SPORT)29)
502
+ #define FIT_SPORT_INLINE_SKATING ((FIT_SPORT)30)
503
+ #define FIT_SPORT_ROCK_CLIMBING ((FIT_SPORT)31)
504
+ #define FIT_SPORT_SAILING ((FIT_SPORT)32)
505
+ #define FIT_SPORT_ICE_SKATING ((FIT_SPORT)33)
506
+ #define FIT_SPORT_SKY_DIVING ((FIT_SPORT)34)
507
+ #define FIT_SPORT_SNOWSHOEING ((FIT_SPORT)35)
508
+ #define FIT_SPORT_SNOWMOBILING ((FIT_SPORT)36)
509
+ #define FIT_SPORT_STAND_UP_PADDLEBOARDING ((FIT_SPORT)37)
510
+ #define FIT_SPORT_SURFING ((FIT_SPORT)38)
511
+ #define FIT_SPORT_WAKEBOARDING ((FIT_SPORT)39)
512
+ #define FIT_SPORT_WATER_SKIING ((FIT_SPORT)40)
513
+ #define FIT_SPORT_KAYAKING ((FIT_SPORT)41)
514
+ #define FIT_SPORT_RAFTING ((FIT_SPORT)42)
515
+ #define FIT_SPORT_WINDSURFING ((FIT_SPORT)43)
516
+ #define FIT_SPORT_KITESURFING ((FIT_SPORT)44)
517
+ #define FIT_SPORT_TACTICAL ((FIT_SPORT)45)
518
+ #define FIT_SPORT_JUMPMASTER ((FIT_SPORT)46)
519
+ #define FIT_SPORT_BOXING ((FIT_SPORT)47)
520
+ #define FIT_SPORT_FLOOR_CLIMBING ((FIT_SPORT)48)
273
521
  #define FIT_SPORT_ALL ((FIT_SPORT)254) // All is for goals only to include all sports.
274
- #define FIT_SPORT_COUNT 21
522
+ #define FIT_SPORT_COUNT 50
275
523
 
276
524
  typedef FIT_UINT8Z FIT_SPORT_BITS_0; // Bit field corresponding to sport enum type (1 << sport).
277
525
  #define FIT_SPORT_BITS_0_INVALID FIT_UINT8Z_INVALID
@@ -303,7 +551,52 @@ typedef FIT_UINT8Z FIT_SPORT_BITS_2; // Bit field corresponding to sport enum ty
303
551
  #define FIT_SPORT_BITS_2_HIKING ((FIT_SPORT_BITS_2)0x02)
304
552
  #define FIT_SPORT_BITS_2_MULTISPORT ((FIT_SPORT_BITS_2)0x04)
305
553
  #define FIT_SPORT_BITS_2_PADDLING ((FIT_SPORT_BITS_2)0x08)
306
- #define FIT_SPORT_BITS_2_COUNT 4
554
+ #define FIT_SPORT_BITS_2_FLYING ((FIT_SPORT_BITS_2)0x10)
555
+ #define FIT_SPORT_BITS_2_E_BIKING ((FIT_SPORT_BITS_2)0x20)
556
+ #define FIT_SPORT_BITS_2_MOTORCYCLING ((FIT_SPORT_BITS_2)0x40)
557
+ #define FIT_SPORT_BITS_2_BOATING ((FIT_SPORT_BITS_2)0x80)
558
+ #define FIT_SPORT_BITS_2_COUNT 8
559
+
560
+ typedef FIT_UINT8Z FIT_SPORT_BITS_3; // Bit field corresponding to sport enum type (1 << (sport-24)).
561
+ #define FIT_SPORT_BITS_3_INVALID FIT_UINT8Z_INVALID
562
+ #define FIT_SPORT_BITS_3_DRIVING ((FIT_SPORT_BITS_3)0x01)
563
+ #define FIT_SPORT_BITS_3_GOLF ((FIT_SPORT_BITS_3)0x02)
564
+ #define FIT_SPORT_BITS_3_HANG_GLIDING ((FIT_SPORT_BITS_3)0x04)
565
+ #define FIT_SPORT_BITS_3_HORSEBACK_RIDING ((FIT_SPORT_BITS_3)0x08)
566
+ #define FIT_SPORT_BITS_3_HUNTING ((FIT_SPORT_BITS_3)0x10)
567
+ #define FIT_SPORT_BITS_3_FISHING ((FIT_SPORT_BITS_3)0x20)
568
+ #define FIT_SPORT_BITS_3_INLINE_SKATING ((FIT_SPORT_BITS_3)0x40)
569
+ #define FIT_SPORT_BITS_3_ROCK_CLIMBING ((FIT_SPORT_BITS_3)0x80)
570
+ #define FIT_SPORT_BITS_3_COUNT 8
571
+
572
+ typedef FIT_UINT8Z FIT_SPORT_BITS_4; // Bit field corresponding to sport enum type (1 << (sport-32)).
573
+ #define FIT_SPORT_BITS_4_INVALID FIT_UINT8Z_INVALID
574
+ #define FIT_SPORT_BITS_4_SAILING ((FIT_SPORT_BITS_4)0x01)
575
+ #define FIT_SPORT_BITS_4_ICE_SKATING ((FIT_SPORT_BITS_4)0x02)
576
+ #define FIT_SPORT_BITS_4_SKY_DIVING ((FIT_SPORT_BITS_4)0x04)
577
+ #define FIT_SPORT_BITS_4_SNOWSHOEING ((FIT_SPORT_BITS_4)0x08)
578
+ #define FIT_SPORT_BITS_4_SNOWMOBILING ((FIT_SPORT_BITS_4)0x10)
579
+ #define FIT_SPORT_BITS_4_STAND_UP_PADDLEBOARDING ((FIT_SPORT_BITS_4)0x20)
580
+ #define FIT_SPORT_BITS_4_SURFING ((FIT_SPORT_BITS_4)0x40)
581
+ #define FIT_SPORT_BITS_4_WAKEBOARDING ((FIT_SPORT_BITS_4)0x80)
582
+ #define FIT_SPORT_BITS_4_COUNT 8
583
+
584
+ typedef FIT_UINT8Z FIT_SPORT_BITS_5; // Bit field corresponding to sport enum type (1 << (sport-40)).
585
+ #define FIT_SPORT_BITS_5_INVALID FIT_UINT8Z_INVALID
586
+ #define FIT_SPORT_BITS_5_WATER_SKIING ((FIT_SPORT_BITS_5)0x01)
587
+ #define FIT_SPORT_BITS_5_KAYAKING ((FIT_SPORT_BITS_5)0x02)
588
+ #define FIT_SPORT_BITS_5_RAFTING ((FIT_SPORT_BITS_5)0x04)
589
+ #define FIT_SPORT_BITS_5_WINDSURFING ((FIT_SPORT_BITS_5)0x08)
590
+ #define FIT_SPORT_BITS_5_KITESURFING ((FIT_SPORT_BITS_5)0x10)
591
+ #define FIT_SPORT_BITS_5_TACTICAL ((FIT_SPORT_BITS_5)0x20)
592
+ #define FIT_SPORT_BITS_5_JUMPMASTER ((FIT_SPORT_BITS_5)0x40)
593
+ #define FIT_SPORT_BITS_5_BOXING ((FIT_SPORT_BITS_5)0x80)
594
+ #define FIT_SPORT_BITS_5_COUNT 8
595
+
596
+ typedef FIT_UINT8Z FIT_SPORT_BITS_6; // Bit field corresponding to sport enum type (1 << (sport-48)).
597
+ #define FIT_SPORT_BITS_6_INVALID FIT_UINT8Z_INVALID
598
+ #define FIT_SPORT_BITS_6_FLOOR_CLIMBING ((FIT_SPORT_BITS_6)0x01)
599
+ #define FIT_SPORT_BITS_6_COUNT 1
307
600
 
308
601
  typedef FIT_ENUM FIT_SUB_SPORT;
309
602
  #define FIT_SUB_SPORT_INVALID FIT_ENUM_INVALID
@@ -334,8 +627,46 @@ typedef FIT_ENUM FIT_SUB_SPORT;
334
627
  #define FIT_SUB_SPORT_CHALLENGE ((FIT_SUB_SPORT)24) // Tennis
335
628
  #define FIT_SUB_SPORT_INDOOR_SKIING ((FIT_SUB_SPORT)25) // Fitness Equipment
336
629
  #define FIT_SUB_SPORT_CARDIO_TRAINING ((FIT_SUB_SPORT)26) // Training
630
+ #define FIT_SUB_SPORT_INDOOR_WALKING ((FIT_SUB_SPORT)27) // Walking/Fitness Equipment
631
+ #define FIT_SUB_SPORT_E_BIKE_FITNESS ((FIT_SUB_SPORT)28) // E-Biking
632
+ #define FIT_SUB_SPORT_BMX ((FIT_SUB_SPORT)29) // Cycling
633
+ #define FIT_SUB_SPORT_CASUAL_WALKING ((FIT_SUB_SPORT)30) // Walking
634
+ #define FIT_SUB_SPORT_SPEED_WALKING ((FIT_SUB_SPORT)31) // Walking
635
+ #define FIT_SUB_SPORT_BIKE_TO_RUN_TRANSITION ((FIT_SUB_SPORT)32) // Transition
636
+ #define FIT_SUB_SPORT_RUN_TO_BIKE_TRANSITION ((FIT_SUB_SPORT)33) // Transition
637
+ #define FIT_SUB_SPORT_SWIM_TO_BIKE_TRANSITION ((FIT_SUB_SPORT)34) // Transition
638
+ #define FIT_SUB_SPORT_ATV ((FIT_SUB_SPORT)35) // Motorcycling
639
+ #define FIT_SUB_SPORT_MOTOCROSS ((FIT_SUB_SPORT)36) // Motorcycling
640
+ #define FIT_SUB_SPORT_BACKCOUNTRY ((FIT_SUB_SPORT)37) // Alpine Skiing/Snowboarding
641
+ #define FIT_SUB_SPORT_RESORT ((FIT_SUB_SPORT)38) // Alpine Skiing/Snowboarding
642
+ #define FIT_SUB_SPORT_RC_DRONE ((FIT_SUB_SPORT)39) // Flying
643
+ #define FIT_SUB_SPORT_WINGSUIT ((FIT_SUB_SPORT)40) // Flying
644
+ #define FIT_SUB_SPORT_WHITEWATER ((FIT_SUB_SPORT)41) // Kayaking/Rafting
645
+ #define FIT_SUB_SPORT_SKATE_SKIING ((FIT_SUB_SPORT)42) // Cross Country Skiing
646
+ #define FIT_SUB_SPORT_YOGA ((FIT_SUB_SPORT)43) // Training
647
+ #define FIT_SUB_SPORT_PILATES ((FIT_SUB_SPORT)44) // Training
648
+ #define FIT_SUB_SPORT_INDOOR_RUNNING ((FIT_SUB_SPORT)45) // Run
649
+ #define FIT_SUB_SPORT_GRAVEL_CYCLING ((FIT_SUB_SPORT)46) // Cycling
650
+ #define FIT_SUB_SPORT_E_BIKE_MOUNTAIN ((FIT_SUB_SPORT)47) // Cycling
651
+ #define FIT_SUB_SPORT_COMMUTING ((FIT_SUB_SPORT)48) // Cycling
652
+ #define FIT_SUB_SPORT_MIXED_SURFACE ((FIT_SUB_SPORT)49) // Cycling
653
+ #define FIT_SUB_SPORT_NAVIGATE ((FIT_SUB_SPORT)50)
654
+ #define FIT_SUB_SPORT_TRACK_ME ((FIT_SUB_SPORT)51)
337
655
  #define FIT_SUB_SPORT_ALL ((FIT_SUB_SPORT)254)
338
- #define FIT_SUB_SPORT_COUNT 28
656
+ #define FIT_SUB_SPORT_COUNT 53
657
+
658
+ typedef FIT_ENUM FIT_SPORT_EVENT;
659
+ #define FIT_SPORT_EVENT_INVALID FIT_ENUM_INVALID
660
+ #define FIT_SPORT_EVENT_UNCATEGORIZED ((FIT_SPORT_EVENT)0)
661
+ #define FIT_SPORT_EVENT_GEOCACHING ((FIT_SPORT_EVENT)1)
662
+ #define FIT_SPORT_EVENT_FITNESS ((FIT_SPORT_EVENT)2)
663
+ #define FIT_SPORT_EVENT_RECREATION ((FIT_SPORT_EVENT)3)
664
+ #define FIT_SPORT_EVENT_RACE ((FIT_SPORT_EVENT)4)
665
+ #define FIT_SPORT_EVENT_SPECIAL_EVENT ((FIT_SPORT_EVENT)5)
666
+ #define FIT_SPORT_EVENT_TRAINING ((FIT_SPORT_EVENT)6)
667
+ #define FIT_SPORT_EVENT_TRANSPORTATION ((FIT_SPORT_EVENT)7)
668
+ #define FIT_SPORT_EVENT_TOURING ((FIT_SPORT_EVENT)8)
669
+ #define FIT_SPORT_EVENT_COUNT 9
339
670
 
340
671
  typedef FIT_ENUM FIT_ACTIVITY;
341
672
  #define FIT_ACTIVITY_INVALID FIT_ENUM_INVALID
@@ -383,6 +714,33 @@ typedef FIT_ENUM FIT_LAP_TRIGGER;
383
714
  #define FIT_LAP_TRIGGER_FITNESS_EQUIPMENT ((FIT_LAP_TRIGGER)8)
384
715
  #define FIT_LAP_TRIGGER_COUNT 9
385
716
 
717
+ typedef FIT_ENUM FIT_TIME_MODE;
718
+ #define FIT_TIME_MODE_INVALID FIT_ENUM_INVALID
719
+ #define FIT_TIME_MODE_HOUR12 ((FIT_TIME_MODE)0)
720
+ #define FIT_TIME_MODE_HOUR24 ((FIT_TIME_MODE)1) // Does not use a leading zero and has a colon
721
+ #define FIT_TIME_MODE_MILITARY ((FIT_TIME_MODE)2) // Uses a leading zero and does not have a colon
722
+ #define FIT_TIME_MODE_HOUR_12_WITH_SECONDS ((FIT_TIME_MODE)3)
723
+ #define FIT_TIME_MODE_HOUR_24_WITH_SECONDS ((FIT_TIME_MODE)4)
724
+ #define FIT_TIME_MODE_UTC ((FIT_TIME_MODE)5)
725
+ #define FIT_TIME_MODE_COUNT 6
726
+
727
+ typedef FIT_ENUM FIT_BACKLIGHT_MODE;
728
+ #define FIT_BACKLIGHT_MODE_INVALID FIT_ENUM_INVALID
729
+ #define FIT_BACKLIGHT_MODE_OFF ((FIT_BACKLIGHT_MODE)0)
730
+ #define FIT_BACKLIGHT_MODE_MANUAL ((FIT_BACKLIGHT_MODE)1)
731
+ #define FIT_BACKLIGHT_MODE_KEY_AND_MESSAGES ((FIT_BACKLIGHT_MODE)2)
732
+ #define FIT_BACKLIGHT_MODE_AUTO_BRIGHTNESS ((FIT_BACKLIGHT_MODE)3)
733
+ #define FIT_BACKLIGHT_MODE_SMART_NOTIFICATIONS ((FIT_BACKLIGHT_MODE)4)
734
+ #define FIT_BACKLIGHT_MODE_KEY_AND_MESSAGES_NIGHT ((FIT_BACKLIGHT_MODE)5)
735
+ #define FIT_BACKLIGHT_MODE_KEY_AND_MESSAGES_AND_SMART_NOTIFICATIONS ((FIT_BACKLIGHT_MODE)6)
736
+ #define FIT_BACKLIGHT_MODE_COUNT 7
737
+
738
+ typedef FIT_ENUM FIT_DATE_MODE;
739
+ #define FIT_DATE_MODE_INVALID FIT_ENUM_INVALID
740
+ #define FIT_DATE_MODE_DAY_MONTH ((FIT_DATE_MODE)0)
741
+ #define FIT_DATE_MODE_MONTH_DAY ((FIT_DATE_MODE)1)
742
+ #define FIT_DATE_MODE_COUNT 2
743
+
386
744
  typedef FIT_ENUM FIT_EVENT;
387
745
  #define FIT_EVENT_INVALID FIT_ENUM_INVALID
388
746
  #define FIT_EVENT_TIMER ((FIT_EVENT)0) // Group 0. Start / stop_all
@@ -417,7 +775,11 @@ typedef FIT_ENUM FIT_EVENT;
417
775
  #define FIT_EVENT_CALIBRATION ((FIT_EVENT)36) // start/stop/marker
418
776
  #define FIT_EVENT_FRONT_GEAR_CHANGE ((FIT_EVENT)42) // marker
419
777
  #define FIT_EVENT_REAR_GEAR_CHANGE ((FIT_EVENT)43) // marker
420
- #define FIT_EVENT_COUNT 32
778
+ #define FIT_EVENT_RIDER_POSITION_CHANGE ((FIT_EVENT)44) // marker
779
+ #define FIT_EVENT_ELEV_HIGH_ALERT ((FIT_EVENT)45) // Group 0. Start / stop when in alert condition.
780
+ #define FIT_EVENT_ELEV_LOW_ALERT ((FIT_EVENT)46) // Group 0. Start / stop when in alert condition.
781
+ #define FIT_EVENT_COMM_TIMEOUT ((FIT_EVENT)47) // marker
782
+ #define FIT_EVENT_COUNT 36
421
783
 
422
784
  typedef FIT_ENUM FIT_EVENT_TYPE;
423
785
  #define FIT_EVENT_TYPE_INVALID FIT_ENUM_INVALID
@@ -448,6 +810,14 @@ typedef FIT_ENUM FIT_FITNESS_EQUIPMENT_STATE; // fitness equipment event data
448
810
  #define FIT_FITNESS_EQUIPMENT_STATE_UNKNOWN ((FIT_FITNESS_EQUIPMENT_STATE)3) // lost connection to fitness equipment
449
811
  #define FIT_FITNESS_EQUIPMENT_STATE_COUNT 4
450
812
 
813
+ typedef FIT_ENUM FIT_AUTOSCROLL;
814
+ #define FIT_AUTOSCROLL_INVALID FIT_ENUM_INVALID
815
+ #define FIT_AUTOSCROLL_NONE ((FIT_AUTOSCROLL)0)
816
+ #define FIT_AUTOSCROLL_SLOW ((FIT_AUTOSCROLL)1)
817
+ #define FIT_AUTOSCROLL_MEDIUM ((FIT_AUTOSCROLL)2)
818
+ #define FIT_AUTOSCROLL_FAST ((FIT_AUTOSCROLL)3)
819
+ #define FIT_AUTOSCROLL_COUNT 4
820
+
451
821
  typedef FIT_ENUM FIT_ACTIVITY_CLASS;
452
822
  #define FIT_ACTIVITY_CLASS_INVALID FIT_ENUM_INVALID
453
823
  #define FIT_ACTIVITY_CLASS_LEVEL ((FIT_ACTIVITY_CLASS)0x7F) // 0 to 100
@@ -486,7 +856,8 @@ typedef FIT_ENUM FIT_WKT_STEP_DURATION;
486
856
  #define FIT_WKT_STEP_DURATION_REPEAT_UNTIL_POWER_GREATER_THAN ((FIT_WKT_STEP_DURATION)13)
487
857
  #define FIT_WKT_STEP_DURATION_POWER_LESS_THAN ((FIT_WKT_STEP_DURATION)14)
488
858
  #define FIT_WKT_STEP_DURATION_POWER_GREATER_THAN ((FIT_WKT_STEP_DURATION)15)
489
- #define FIT_WKT_STEP_DURATION_COUNT 16
859
+ #define FIT_WKT_STEP_DURATION_REPETITION_TIME ((FIT_WKT_STEP_DURATION)28)
860
+ #define FIT_WKT_STEP_DURATION_COUNT 17
490
861
 
491
862
  typedef FIT_ENUM FIT_WKT_STEP_TARGET;
492
863
  #define FIT_WKT_STEP_TARGET_INVALID FIT_ENUM_INVALID
@@ -506,7 +877,9 @@ typedef FIT_ENUM FIT_GOAL;
506
877
  #define FIT_GOAL_CALORIES ((FIT_GOAL)2)
507
878
  #define FIT_GOAL_FREQUENCY ((FIT_GOAL)3)
508
879
  #define FIT_GOAL_STEPS ((FIT_GOAL)4)
509
- #define FIT_GOAL_COUNT 5
880
+ #define FIT_GOAL_ASCENT ((FIT_GOAL)5)
881
+ #define FIT_GOAL_ACTIVE_MINUTES ((FIT_GOAL)6)
882
+ #define FIT_GOAL_COUNT 7
510
883
 
511
884
  typedef FIT_ENUM FIT_GOAL_RECURRENCE;
512
885
  #define FIT_GOAL_RECURRENCE_INVALID FIT_ENUM_INVALID
@@ -518,6 +891,13 @@ typedef FIT_ENUM FIT_GOAL_RECURRENCE;
518
891
  #define FIT_GOAL_RECURRENCE_CUSTOM ((FIT_GOAL_RECURRENCE)5)
519
892
  #define FIT_GOAL_RECURRENCE_COUNT 6
520
893
 
894
+ typedef FIT_ENUM FIT_GOAL_SOURCE;
895
+ #define FIT_GOAL_SOURCE_INVALID FIT_ENUM_INVALID
896
+ #define FIT_GOAL_SOURCE_AUTO ((FIT_GOAL_SOURCE)0) // Device generated
897
+ #define FIT_GOAL_SOURCE_COMMUNITY ((FIT_GOAL_SOURCE)1) // Social network sourced goal
898
+ #define FIT_GOAL_SOURCE_USER ((FIT_GOAL_SOURCE)2) // Manually generated
899
+ #define FIT_GOAL_SOURCE_COUNT 3
900
+
521
901
  typedef FIT_ENUM FIT_SCHEDULE;
522
902
  #define FIT_SCHEDULE_INVALID FIT_ENUM_INVALID
523
903
  #define FIT_SCHEDULE_WORKOUT ((FIT_SCHEDULE)0)
@@ -550,7 +930,9 @@ typedef FIT_ENUM FIT_COURSE_POINT;
550
930
  #define FIT_COURSE_POINT_SLIGHT_RIGHT ((FIT_COURSE_POINT)21)
551
931
  #define FIT_COURSE_POINT_SHARP_RIGHT ((FIT_COURSE_POINT)22)
552
932
  #define FIT_COURSE_POINT_U_TURN ((FIT_COURSE_POINT)23)
553
- #define FIT_COURSE_POINT_COUNT 24
933
+ #define FIT_COURSE_POINT_SEGMENT_START ((FIT_COURSE_POINT)24)
934
+ #define FIT_COURSE_POINT_SEGMENT_END ((FIT_COURSE_POINT)25)
935
+ #define FIT_COURSE_POINT_COUNT 26
554
936
 
555
937
  typedef FIT_UINT16 FIT_MANUFACTURER;
556
938
  #define FIT_MANUFACTURER_INVALID FIT_UINT16_INVALID
@@ -637,9 +1019,47 @@ typedef FIT_UINT16 FIT_MANUFACTURER;
637
1019
  #define FIT_MANUFACTURER_MAGURA ((FIT_MANUFACTURER)84)
638
1020
  #define FIT_MANUFACTURER_WOODWAY ((FIT_MANUFACTURER)85)
639
1021
  #define FIT_MANUFACTURER_ELITE ((FIT_MANUFACTURER)86)
1022
+ #define FIT_MANUFACTURER_NIELSEN_KELLERMAN ((FIT_MANUFACTURER)87)
1023
+ #define FIT_MANUFACTURER_DK_CITY ((FIT_MANUFACTURER)88)
1024
+ #define FIT_MANUFACTURER_TACX ((FIT_MANUFACTURER)89)
1025
+ #define FIT_MANUFACTURER_DIRECTION_TECHNOLOGY ((FIT_MANUFACTURER)90)
1026
+ #define FIT_MANUFACTURER_MAGTONIC ((FIT_MANUFACTURER)91)
1027
+ #define FIT_MANUFACTURER_1PARTCARBON ((FIT_MANUFACTURER)92)
1028
+ #define FIT_MANUFACTURER_INSIDE_RIDE_TECHNOLOGIES ((FIT_MANUFACTURER)93)
1029
+ #define FIT_MANUFACTURER_SOUND_OF_MOTION ((FIT_MANUFACTURER)94)
1030
+ #define FIT_MANUFACTURER_STRYD ((FIT_MANUFACTURER)95)
1031
+ #define FIT_MANUFACTURER_ICG ((FIT_MANUFACTURER)96) // Indoorcycling Group
1032
+ #define FIT_MANUFACTURER_MIPULSE ((FIT_MANUFACTURER)97)
1033
+ #define FIT_MANUFACTURER_BSX_ATHLETICS ((FIT_MANUFACTURER)98)
1034
+ #define FIT_MANUFACTURER_LOOK ((FIT_MANUFACTURER)99)
1035
+ #define FIT_MANUFACTURER_CAMPAGNOLO_SRL ((FIT_MANUFACTURER)100)
1036
+ #define FIT_MANUFACTURER_BODY_BIKE_SMART ((FIT_MANUFACTURER)101)
1037
+ #define FIT_MANUFACTURER_PRAXISWORKS ((FIT_MANUFACTURER)102)
1038
+ #define FIT_MANUFACTURER_LIMITS_TECHNOLOGY ((FIT_MANUFACTURER)103) // Limits Technology Ltd.
1039
+ #define FIT_MANUFACTURER_TOPACTION_TECHNOLOGY ((FIT_MANUFACTURER)104) // TopAction Technology Inc.
1040
+ #define FIT_MANUFACTURER_COSINUSS ((FIT_MANUFACTURER)105)
1041
+ #define FIT_MANUFACTURER_FITCARE ((FIT_MANUFACTURER)106)
640
1042
  #define FIT_MANUFACTURER_DEVELOPMENT ((FIT_MANUFACTURER)255)
1043
+ #define FIT_MANUFACTURER_HEALTHANDLIFE ((FIT_MANUFACTURER)257)
1044
+ #define FIT_MANUFACTURER_LEZYNE ((FIT_MANUFACTURER)258)
1045
+ #define FIT_MANUFACTURER_SCRIBE_LABS ((FIT_MANUFACTURER)259)
1046
+ #define FIT_MANUFACTURER_ZWIFT ((FIT_MANUFACTURER)260)
1047
+ #define FIT_MANUFACTURER_WATTEAM ((FIT_MANUFACTURER)261)
1048
+ #define FIT_MANUFACTURER_RECON ((FIT_MANUFACTURER)262)
1049
+ #define FIT_MANUFACTURER_FAVERO_ELECTRONICS ((FIT_MANUFACTURER)263)
1050
+ #define FIT_MANUFACTURER_DYNOVELO ((FIT_MANUFACTURER)264)
1051
+ #define FIT_MANUFACTURER_STRAVA ((FIT_MANUFACTURER)265)
1052
+ #define FIT_MANUFACTURER_PRECOR ((FIT_MANUFACTURER)266) // Amer Sports
1053
+ #define FIT_MANUFACTURER_BRYTON ((FIT_MANUFACTURER)267)
1054
+ #define FIT_MANUFACTURER_SRAM ((FIT_MANUFACTURER)268)
1055
+ #define FIT_MANUFACTURER_NAVMAN ((FIT_MANUFACTURER)269) // MiTAC Global Corporation (Mio Technology)
1056
+ #define FIT_MANUFACTURER_COBI ((FIT_MANUFACTURER)270) // COBI GmbH
1057
+ #define FIT_MANUFACTURER_SPIVI ((FIT_MANUFACTURER)271)
1058
+ #define FIT_MANUFACTURER_MIO_MAGELLAN ((FIT_MANUFACTURER)272)
1059
+ #define FIT_MANUFACTURER_EVESPORTS ((FIT_MANUFACTURER)273)
1060
+ #define FIT_MANUFACTURER_SENSITIVUS_GAUGE ((FIT_MANUFACTURER)274)
641
1061
  #define FIT_MANUFACTURER_ACTIGRAPHCORP ((FIT_MANUFACTURER)5759)
642
- #define FIT_MANUFACTURER_COUNT 85
1062
+ #define FIT_MANUFACTURER_COUNT 123
643
1063
 
644
1064
  typedef FIT_UINT16 FIT_GARMIN_PRODUCT;
645
1065
  #define FIT_GARMIN_PRODUCT_INVALID FIT_UINT16_INVALID
@@ -653,6 +1073,9 @@ typedef FIT_UINT16 FIT_GARMIN_PRODUCT;
653
1073
  #define FIT_GARMIN_PRODUCT_HRM_RUN_SINGLE_BYTE_PRODUCT_ID ((FIT_GARMIN_PRODUCT)8) // hrm_run model for HRM ANT+ messaging
654
1074
  #define FIT_GARMIN_PRODUCT_BSM ((FIT_GARMIN_PRODUCT)9) // BSM model for ANT+ messaging
655
1075
  #define FIT_GARMIN_PRODUCT_BCM ((FIT_GARMIN_PRODUCT)10) // BCM model for ANT+ messaging
1076
+ #define FIT_GARMIN_PRODUCT_AXS01 ((FIT_GARMIN_PRODUCT)11) // AXS01 HRM Bike Chipset model for ANT+ messaging
1077
+ #define FIT_GARMIN_PRODUCT_HRM_TRI_SINGLE_BYTE_PRODUCT_ID ((FIT_GARMIN_PRODUCT)12) // hrm_tri model for HRM ANT+ messaging
1078
+ #define FIT_GARMIN_PRODUCT_FR225_SINGLE_BYTE_PRODUCT_ID ((FIT_GARMIN_PRODUCT)14) // fr225 model for HRM ANT+ messaging
656
1079
  #define FIT_GARMIN_PRODUCT_FR301_CHINA ((FIT_GARMIN_PRODUCT)473)
657
1080
  #define FIT_GARMIN_PRODUCT_FR301_JAPAN ((FIT_GARMIN_PRODUCT)474)
658
1081
  #define FIT_GARMIN_PRODUCT_FR301_KOREA ((FIT_GARMIN_PRODUCT)475)
@@ -704,7 +1127,9 @@ typedef FIT_UINT16 FIT_GARMIN_PRODUCT;
704
1127
  #define FIT_GARMIN_PRODUCT_VIRB_ELITE ((FIT_GARMIN_PRODUCT)1735)
705
1128
  #define FIT_GARMIN_PRODUCT_EDGE_TOURING ((FIT_GARMIN_PRODUCT)1736) // Also Edge Touring Plus
706
1129
  #define FIT_GARMIN_PRODUCT_EDGE510_JAPAN ((FIT_GARMIN_PRODUCT)1742)
1130
+ #define FIT_GARMIN_PRODUCT_HRM_TRI ((FIT_GARMIN_PRODUCT)1743)
707
1131
  #define FIT_GARMIN_PRODUCT_HRM_RUN ((FIT_GARMIN_PRODUCT)1752)
1132
+ #define FIT_GARMIN_PRODUCT_FR920XT ((FIT_GARMIN_PRODUCT)1765)
708
1133
  #define FIT_GARMIN_PRODUCT_EDGE510_ASIA ((FIT_GARMIN_PRODUCT)1821)
709
1134
  #define FIT_GARMIN_PRODUCT_EDGE810_CHINA ((FIT_GARMIN_PRODUCT)1822)
710
1135
  #define FIT_GARMIN_PRODUCT_EDGE810_TAIWAN ((FIT_GARMIN_PRODUCT)1823)
@@ -712,17 +1137,80 @@ typedef FIT_UINT16 FIT_GARMIN_PRODUCT;
712
1137
  #define FIT_GARMIN_PRODUCT_VIVO_FIT ((FIT_GARMIN_PRODUCT)1837)
713
1138
  #define FIT_GARMIN_PRODUCT_VIRB_REMOTE ((FIT_GARMIN_PRODUCT)1853)
714
1139
  #define FIT_GARMIN_PRODUCT_VIVO_KI ((FIT_GARMIN_PRODUCT)1885)
1140
+ #define FIT_GARMIN_PRODUCT_FR15 ((FIT_GARMIN_PRODUCT)1903)
1141
+ #define FIT_GARMIN_PRODUCT_VIVO_ACTIVE ((FIT_GARMIN_PRODUCT)1907)
715
1142
  #define FIT_GARMIN_PRODUCT_EDGE510_KOREA ((FIT_GARMIN_PRODUCT)1918)
716
1143
  #define FIT_GARMIN_PRODUCT_FR620_JAPAN ((FIT_GARMIN_PRODUCT)1928)
717
1144
  #define FIT_GARMIN_PRODUCT_FR620_CHINA ((FIT_GARMIN_PRODUCT)1929)
718
1145
  #define FIT_GARMIN_PRODUCT_FR220_JAPAN ((FIT_GARMIN_PRODUCT)1930)
719
1146
  #define FIT_GARMIN_PRODUCT_FR220_CHINA ((FIT_GARMIN_PRODUCT)1931)
1147
+ #define FIT_GARMIN_PRODUCT_APPROACH_S6 ((FIT_GARMIN_PRODUCT)1936)
1148
+ #define FIT_GARMIN_PRODUCT_VIVO_SMART ((FIT_GARMIN_PRODUCT)1956)
1149
+ #define FIT_GARMIN_PRODUCT_FENIX2 ((FIT_GARMIN_PRODUCT)1967)
1150
+ #define FIT_GARMIN_PRODUCT_EPIX ((FIT_GARMIN_PRODUCT)1988)
1151
+ #define FIT_GARMIN_PRODUCT_FENIX3 ((FIT_GARMIN_PRODUCT)2050)
1152
+ #define FIT_GARMIN_PRODUCT_EDGE1000_TAIWAN ((FIT_GARMIN_PRODUCT)2052)
1153
+ #define FIT_GARMIN_PRODUCT_EDGE1000_JAPAN ((FIT_GARMIN_PRODUCT)2053)
1154
+ #define FIT_GARMIN_PRODUCT_FR15_JAPAN ((FIT_GARMIN_PRODUCT)2061)
1155
+ #define FIT_GARMIN_PRODUCT_EDGE520 ((FIT_GARMIN_PRODUCT)2067)
1156
+ #define FIT_GARMIN_PRODUCT_EDGE1000_CHINA ((FIT_GARMIN_PRODUCT)2070)
1157
+ #define FIT_GARMIN_PRODUCT_FR620_RUSSIA ((FIT_GARMIN_PRODUCT)2072)
1158
+ #define FIT_GARMIN_PRODUCT_FR220_RUSSIA ((FIT_GARMIN_PRODUCT)2073)
1159
+ #define FIT_GARMIN_PRODUCT_VECTOR_S ((FIT_GARMIN_PRODUCT)2079)
1160
+ #define FIT_GARMIN_PRODUCT_EDGE1000_KOREA ((FIT_GARMIN_PRODUCT)2100)
1161
+ #define FIT_GARMIN_PRODUCT_FR920XT_TAIWAN ((FIT_GARMIN_PRODUCT)2130)
1162
+ #define FIT_GARMIN_PRODUCT_FR920XT_CHINA ((FIT_GARMIN_PRODUCT)2131)
1163
+ #define FIT_GARMIN_PRODUCT_FR920XT_JAPAN ((FIT_GARMIN_PRODUCT)2132)
1164
+ #define FIT_GARMIN_PRODUCT_VIRBX ((FIT_GARMIN_PRODUCT)2134)
1165
+ #define FIT_GARMIN_PRODUCT_VIVO_SMART_APAC ((FIT_GARMIN_PRODUCT)2135)
1166
+ #define FIT_GARMIN_PRODUCT_ETREX_TOUCH ((FIT_GARMIN_PRODUCT)2140)
1167
+ #define FIT_GARMIN_PRODUCT_EDGE25 ((FIT_GARMIN_PRODUCT)2147)
1168
+ #define FIT_GARMIN_PRODUCT_FR25 ((FIT_GARMIN_PRODUCT)2148)
1169
+ #define FIT_GARMIN_PRODUCT_VIVO_FIT2 ((FIT_GARMIN_PRODUCT)2150)
1170
+ #define FIT_GARMIN_PRODUCT_FR225 ((FIT_GARMIN_PRODUCT)2153)
1171
+ #define FIT_GARMIN_PRODUCT_FR630 ((FIT_GARMIN_PRODUCT)2156)
1172
+ #define FIT_GARMIN_PRODUCT_FR230 ((FIT_GARMIN_PRODUCT)2157)
1173
+ #define FIT_GARMIN_PRODUCT_VIVO_ACTIVE_APAC ((FIT_GARMIN_PRODUCT)2160)
1174
+ #define FIT_GARMIN_PRODUCT_VECTOR_2 ((FIT_GARMIN_PRODUCT)2161)
1175
+ #define FIT_GARMIN_PRODUCT_VECTOR_2S ((FIT_GARMIN_PRODUCT)2162)
1176
+ #define FIT_GARMIN_PRODUCT_VIRBXE ((FIT_GARMIN_PRODUCT)2172)
1177
+ #define FIT_GARMIN_PRODUCT_FR620_TAIWAN ((FIT_GARMIN_PRODUCT)2173)
1178
+ #define FIT_GARMIN_PRODUCT_FR220_TAIWAN ((FIT_GARMIN_PRODUCT)2174)
1179
+ #define FIT_GARMIN_PRODUCT_TRUSWING ((FIT_GARMIN_PRODUCT)2175)
1180
+ #define FIT_GARMIN_PRODUCT_FENIX3_CHINA ((FIT_GARMIN_PRODUCT)2188)
1181
+ #define FIT_GARMIN_PRODUCT_FENIX3_TWN ((FIT_GARMIN_PRODUCT)2189)
1182
+ #define FIT_GARMIN_PRODUCT_VARIA_HEADLIGHT ((FIT_GARMIN_PRODUCT)2192)
1183
+ #define FIT_GARMIN_PRODUCT_VARIA_TAILLIGHT_OLD ((FIT_GARMIN_PRODUCT)2193)
1184
+ #define FIT_GARMIN_PRODUCT_EDGE_EXPLORE_1000 ((FIT_GARMIN_PRODUCT)2204)
1185
+ #define FIT_GARMIN_PRODUCT_FR225_ASIA ((FIT_GARMIN_PRODUCT)2219)
1186
+ #define FIT_GARMIN_PRODUCT_VARIA_RADAR_TAILLIGHT ((FIT_GARMIN_PRODUCT)2225)
1187
+ #define FIT_GARMIN_PRODUCT_VARIA_RADAR_DISPLAY ((FIT_GARMIN_PRODUCT)2226)
1188
+ #define FIT_GARMIN_PRODUCT_EDGE20 ((FIT_GARMIN_PRODUCT)2238)
1189
+ #define FIT_GARMIN_PRODUCT_D2_BRAVO ((FIT_GARMIN_PRODUCT)2262)
1190
+ #define FIT_GARMIN_PRODUCT_APPROACH_S20 ((FIT_GARMIN_PRODUCT)2266)
1191
+ #define FIT_GARMIN_PRODUCT_VARIA_REMOTE ((FIT_GARMIN_PRODUCT)2276)
1192
+ #define FIT_GARMIN_PRODUCT_HRM4_RUN ((FIT_GARMIN_PRODUCT)2327)
1193
+ #define FIT_GARMIN_PRODUCT_VIVO_ACTIVE_HR ((FIT_GARMIN_PRODUCT)2337)
1194
+ #define FIT_GARMIN_PRODUCT_VIVO_SMART_GPS_HR ((FIT_GARMIN_PRODUCT)2347)
1195
+ #define FIT_GARMIN_PRODUCT_VIVO_SMART_HR ((FIT_GARMIN_PRODUCT)2348)
1196
+ #define FIT_GARMIN_PRODUCT_VIVO_MOVE ((FIT_GARMIN_PRODUCT)2368)
1197
+ #define FIT_GARMIN_PRODUCT_VARIA_VISION ((FIT_GARMIN_PRODUCT)2398)
1198
+ #define FIT_GARMIN_PRODUCT_VIVO_FIT3 ((FIT_GARMIN_PRODUCT)2406)
1199
+ #define FIT_GARMIN_PRODUCT_FENIX3_HR ((FIT_GARMIN_PRODUCT)2413)
1200
+ #define FIT_GARMIN_PRODUCT_INDEX_SMART_SCALE ((FIT_GARMIN_PRODUCT)2429)
1201
+ #define FIT_GARMIN_PRODUCT_FR235 ((FIT_GARMIN_PRODUCT)2431)
1202
+ #define FIT_GARMIN_PRODUCT_OREGON7XX ((FIT_GARMIN_PRODUCT)2441)
1203
+ #define FIT_GARMIN_PRODUCT_RINO7XX ((FIT_GARMIN_PRODUCT)2444)
1204
+ #define FIT_GARMIN_PRODUCT_NAUTIX ((FIT_GARMIN_PRODUCT)2496)
1205
+ #define FIT_GARMIN_PRODUCT_EDGE_820 ((FIT_GARMIN_PRODUCT)2530)
1206
+ #define FIT_GARMIN_PRODUCT_EDGE_EXPLORE_820 ((FIT_GARMIN_PRODUCT)2531)
720
1207
  #define FIT_GARMIN_PRODUCT_SDM4 ((FIT_GARMIN_PRODUCT)10007) // SDM4 footpod
721
1208
  #define FIT_GARMIN_PRODUCT_EDGE_REMOTE ((FIT_GARMIN_PRODUCT)10014)
722
1209
  #define FIT_GARMIN_PRODUCT_TRAINING_CENTER ((FIT_GARMIN_PRODUCT)20119)
1210
+ #define FIT_GARMIN_PRODUCT_CONNECTIQ_SIMULATOR ((FIT_GARMIN_PRODUCT)65531)
723
1211
  #define FIT_GARMIN_PRODUCT_ANDROID_ANTPLUS_PLUGIN ((FIT_GARMIN_PRODUCT)65532)
724
1212
  #define FIT_GARMIN_PRODUCT_CONNECT ((FIT_GARMIN_PRODUCT)65534) // Garmin Connect website
725
- #define FIT_GARMIN_PRODUCT_COUNT 79
1213
+ #define FIT_GARMIN_PRODUCT_COUNT 147
726
1214
 
727
1215
  typedef FIT_UINT8 FIT_ANTPLUS_DEVICE_TYPE;
728
1216
  #define FIT_ANTPLUS_DEVICE_TYPE_INVALID FIT_UINT8_INVALID
@@ -737,13 +1225,19 @@ typedef FIT_UINT8 FIT_ANTPLUS_DEVICE_TYPE;
737
1225
  #define FIT_ANTPLUS_DEVICE_TYPE_LIGHT_ELECTRIC_VEHICLE ((FIT_ANTPLUS_DEVICE_TYPE)20)
738
1226
  #define FIT_ANTPLUS_DEVICE_TYPE_ENV_SENSOR ((FIT_ANTPLUS_DEVICE_TYPE)25)
739
1227
  #define FIT_ANTPLUS_DEVICE_TYPE_RACQUET ((FIT_ANTPLUS_DEVICE_TYPE)26)
1228
+ #define FIT_ANTPLUS_DEVICE_TYPE_CONTROL_HUB ((FIT_ANTPLUS_DEVICE_TYPE)27)
1229
+ #define FIT_ANTPLUS_DEVICE_TYPE_MUSCLE_OXYGEN ((FIT_ANTPLUS_DEVICE_TYPE)31)
1230
+ #define FIT_ANTPLUS_DEVICE_TYPE_BIKE_LIGHT_MAIN ((FIT_ANTPLUS_DEVICE_TYPE)35)
1231
+ #define FIT_ANTPLUS_DEVICE_TYPE_BIKE_LIGHT_SHARED ((FIT_ANTPLUS_DEVICE_TYPE)36)
1232
+ #define FIT_ANTPLUS_DEVICE_TYPE_EXD ((FIT_ANTPLUS_DEVICE_TYPE)38)
1233
+ #define FIT_ANTPLUS_DEVICE_TYPE_BIKE_RADAR ((FIT_ANTPLUS_DEVICE_TYPE)40)
740
1234
  #define FIT_ANTPLUS_DEVICE_TYPE_WEIGHT_SCALE ((FIT_ANTPLUS_DEVICE_TYPE)119)
741
1235
  #define FIT_ANTPLUS_DEVICE_TYPE_HEART_RATE ((FIT_ANTPLUS_DEVICE_TYPE)120)
742
1236
  #define FIT_ANTPLUS_DEVICE_TYPE_BIKE_SPEED_CADENCE ((FIT_ANTPLUS_DEVICE_TYPE)121)
743
1237
  #define FIT_ANTPLUS_DEVICE_TYPE_BIKE_CADENCE ((FIT_ANTPLUS_DEVICE_TYPE)122)
744
1238
  #define FIT_ANTPLUS_DEVICE_TYPE_BIKE_SPEED ((FIT_ANTPLUS_DEVICE_TYPE)123)
745
1239
  #define FIT_ANTPLUS_DEVICE_TYPE_STRIDE_SPEED_DISTANCE ((FIT_ANTPLUS_DEVICE_TYPE)124)
746
- #define FIT_ANTPLUS_DEVICE_TYPE_COUNT 17
1240
+ #define FIT_ANTPLUS_DEVICE_TYPE_COUNT 23
747
1241
 
748
1242
  typedef FIT_ENUM FIT_ANT_NETWORK;
749
1243
  #define FIT_ANT_NETWORK_INVALID FIT_ENUM_INVALID
@@ -778,7 +1272,9 @@ typedef FIT_UINT8 FIT_BATTERY_STATUS;
778
1272
  #define FIT_BATTERY_STATUS_OK ((FIT_BATTERY_STATUS)3)
779
1273
  #define FIT_BATTERY_STATUS_LOW ((FIT_BATTERY_STATUS)4)
780
1274
  #define FIT_BATTERY_STATUS_CRITICAL ((FIT_BATTERY_STATUS)5)
781
- #define FIT_BATTERY_STATUS_COUNT 5
1275
+ #define FIT_BATTERY_STATUS_CHARGING ((FIT_BATTERY_STATUS)6)
1276
+ #define FIT_BATTERY_STATUS_UNKNOWN ((FIT_BATTERY_STATUS)7)
1277
+ #define FIT_BATTERY_STATUS_COUNT 7
782
1278
 
783
1279
  typedef FIT_ENUM FIT_HR_TYPE;
784
1280
  #define FIT_HR_TYPE_INVALID FIT_ENUM_INVALID
@@ -798,14 +1294,15 @@ typedef FIT_UINT32Z FIT_COURSE_CAPABILITIES;
798
1294
  #define FIT_COURSE_CAPABILITIES_CADENCE ((FIT_COURSE_CAPABILITIES)0x00000080)
799
1295
  #define FIT_COURSE_CAPABILITIES_TRAINING ((FIT_COURSE_CAPABILITIES)0x00000100)
800
1296
  #define FIT_COURSE_CAPABILITIES_NAVIGATION ((FIT_COURSE_CAPABILITIES)0x00000200)
801
- #define FIT_COURSE_CAPABILITIES_COUNT 10
1297
+ #define FIT_COURSE_CAPABILITIES_BIKEWAY ((FIT_COURSE_CAPABILITIES)0x00000400)
1298
+ #define FIT_COURSE_CAPABILITIES_COUNT 11
802
1299
 
803
1300
  typedef FIT_UINT16 FIT_WEIGHT;
804
1301
  #define FIT_WEIGHT_INVALID FIT_UINT16_INVALID
805
1302
  #define FIT_WEIGHT_CALCULATING ((FIT_WEIGHT)0xFFFE)
806
1303
  #define FIT_WEIGHT_COUNT 1
807
1304
 
808
- typedef FIT_UINT32 FIT_WORKOUT_HR; // 0 - 100 indicates% of maz hr; >100 indicates bpm (255 max) plus 100
1305
+ typedef FIT_UINT32 FIT_WORKOUT_HR; // 0 - 100 indicates% of max hr; >100 indicates bpm (255 max) plus 100
809
1306
  #define FIT_WORKOUT_HR_INVALID FIT_UINT32_INVALID
810
1307
  #define FIT_WORKOUT_HR_BPM_OFFSET ((FIT_WORKOUT_HR)100)
811
1308
  #define FIT_WORKOUT_HR_COUNT 1
@@ -854,8 +1351,9 @@ typedef FIT_ENUM FIT_ACTIVITY_TYPE;
854
1351
  #define FIT_ACTIVITY_TYPE_FITNESS_EQUIPMENT ((FIT_ACTIVITY_TYPE)4)
855
1352
  #define FIT_ACTIVITY_TYPE_SWIMMING ((FIT_ACTIVITY_TYPE)5)
856
1353
  #define FIT_ACTIVITY_TYPE_WALKING ((FIT_ACTIVITY_TYPE)6)
1354
+ #define FIT_ACTIVITY_TYPE_SEDENTARY ((FIT_ACTIVITY_TYPE)8)
857
1355
  #define FIT_ACTIVITY_TYPE_ALL ((FIT_ACTIVITY_TYPE)254) // All is for goals only to include all sports.
858
- #define FIT_ACTIVITY_TYPE_COUNT 8
1356
+ #define FIT_ACTIVITY_TYPE_COUNT 9
859
1357
 
860
1358
  typedef FIT_ENUM FIT_ACTIVITY_SUBTYPE;
861
1359
  #define FIT_ACTIVITY_SUBTYPE_INVALID FIT_ENUM_INVALID
@@ -888,6 +1386,12 @@ typedef FIT_ENUM FIT_ACTIVITY_LEVEL;
888
1386
  #define FIT_ACTIVITY_LEVEL_HIGH ((FIT_ACTIVITY_LEVEL)2)
889
1387
  #define FIT_ACTIVITY_LEVEL_COUNT 3
890
1388
 
1389
+ typedef FIT_ENUM FIT_SIDE;
1390
+ #define FIT_SIDE_INVALID FIT_ENUM_INVALID
1391
+ #define FIT_SIDE_RIGHT ((FIT_SIDE)0)
1392
+ #define FIT_SIDE_LEFT ((FIT_SIDE)1)
1393
+ #define FIT_SIDE_COUNT 2
1394
+
891
1395
  typedef FIT_UINT8 FIT_LEFT_RIGHT_BALANCE;
892
1396
  #define FIT_LEFT_RIGHT_BALANCE_INVALID FIT_UINT8_INVALID
893
1397
  #define FIT_LEFT_RIGHT_BALANCE_MASK ((FIT_LEFT_RIGHT_BALANCE)0x7F) // % contribution
@@ -906,6 +1410,17 @@ typedef FIT_ENUM FIT_LENGTH_TYPE;
906
1410
  #define FIT_LENGTH_TYPE_ACTIVE ((FIT_LENGTH_TYPE)1) // Length with strokes.
907
1411
  #define FIT_LENGTH_TYPE_COUNT 2
908
1412
 
1413
+ typedef FIT_ENUM FIT_DAY_OF_WEEK;
1414
+ #define FIT_DAY_OF_WEEK_INVALID FIT_ENUM_INVALID
1415
+ #define FIT_DAY_OF_WEEK_SUNDAY ((FIT_DAY_OF_WEEK)0)
1416
+ #define FIT_DAY_OF_WEEK_MONDAY ((FIT_DAY_OF_WEEK)1)
1417
+ #define FIT_DAY_OF_WEEK_TUESDAY ((FIT_DAY_OF_WEEK)2)
1418
+ #define FIT_DAY_OF_WEEK_WEDNESDAY ((FIT_DAY_OF_WEEK)3)
1419
+ #define FIT_DAY_OF_WEEK_THURSDAY ((FIT_DAY_OF_WEEK)4)
1420
+ #define FIT_DAY_OF_WEEK_FRIDAY ((FIT_DAY_OF_WEEK)5)
1421
+ #define FIT_DAY_OF_WEEK_SATURDAY ((FIT_DAY_OF_WEEK)6)
1422
+ #define FIT_DAY_OF_WEEK_COUNT 7
1423
+
909
1424
  typedef FIT_UINT32Z FIT_CONNECTIVITY_CAPABILITIES;
910
1425
  #define FIT_CONNECTIVITY_CAPABILITIES_INVALID FIT_UINT32Z_INVALID
911
1426
  #define FIT_CONNECTIVITY_CAPABILITIES_BLUETOOTH ((FIT_CONNECTIVITY_CAPABILITIES)0x00000001)
@@ -920,7 +1435,165 @@ typedef FIT_UINT32Z FIT_CONNECTIVITY_CAPABILITIES;
920
1435
  #define FIT_CONNECTIVITY_CAPABILITIES_GPS_EPHEMERIS_DOWNLOAD ((FIT_CONNECTIVITY_CAPABILITIES)0x00000200)
921
1436
  #define FIT_CONNECTIVITY_CAPABILITIES_EXPLICIT_ARCHIVE ((FIT_CONNECTIVITY_CAPABILITIES)0x00000400)
922
1437
  #define FIT_CONNECTIVITY_CAPABILITIES_SETUP_INCOMPLETE ((FIT_CONNECTIVITY_CAPABILITIES)0x00000800)
923
- #define FIT_CONNECTIVITY_CAPABILITIES_COUNT 12
1438
+ #define FIT_CONNECTIVITY_CAPABILITIES_CONTINUE_SYNC_AFTER_SOFTWARE_UPDATE ((FIT_CONNECTIVITY_CAPABILITIES)0x00001000)
1439
+ #define FIT_CONNECTIVITY_CAPABILITIES_CONNECT_IQ_APP_DOWNLOAD ((FIT_CONNECTIVITY_CAPABILITIES)0x00002000)
1440
+ #define FIT_CONNECTIVITY_CAPABILITIES_GOLF_COURSE_DOWNLOAD ((FIT_CONNECTIVITY_CAPABILITIES)0x00004000)
1441
+ #define FIT_CONNECTIVITY_CAPABILITIES_DEVICE_INITIATES_SYNC ((FIT_CONNECTIVITY_CAPABILITIES)0x00008000) // Indicates device is in control of initiating all syncs
1442
+ #define FIT_CONNECTIVITY_CAPABILITIES_CONNECT_IQ_WATCH_APP_DOWNLOAD ((FIT_CONNECTIVITY_CAPABILITIES)0x00010000)
1443
+ #define FIT_CONNECTIVITY_CAPABILITIES_CONNECT_IQ_WIDGET_DOWNLOAD ((FIT_CONNECTIVITY_CAPABILITIES)0x00020000)
1444
+ #define FIT_CONNECTIVITY_CAPABILITIES_CONNECT_IQ_WATCH_FACE_DOWNLOAD ((FIT_CONNECTIVITY_CAPABILITIES)0x00040000)
1445
+ #define FIT_CONNECTIVITY_CAPABILITIES_CONNECT_IQ_DATA_FIELD_DOWNLOAD ((FIT_CONNECTIVITY_CAPABILITIES)0x00080000)
1446
+ #define FIT_CONNECTIVITY_CAPABILITIES_CONNECT_IQ_APP_MANAGMENT ((FIT_CONNECTIVITY_CAPABILITIES)0x00100000) // Device supports delete and reorder of apps via GCM
1447
+ #define FIT_CONNECTIVITY_CAPABILITIES_SWING_SENSOR ((FIT_CONNECTIVITY_CAPABILITIES)0x00200000)
1448
+ #define FIT_CONNECTIVITY_CAPABILITIES_SWING_SENSOR_REMOTE ((FIT_CONNECTIVITY_CAPABILITIES)0x00400000)
1449
+ #define FIT_CONNECTIVITY_CAPABILITIES_INCIDENT_DETECTION ((FIT_CONNECTIVITY_CAPABILITIES)0x00800000) // Device supports incident detection
1450
+ #define FIT_CONNECTIVITY_CAPABILITIES_AUDIO_PROMPTS ((FIT_CONNECTIVITY_CAPABILITIES)0x01000000)
1451
+ #define FIT_CONNECTIVITY_CAPABILITIES_WIFI_VERIFICATION ((FIT_CONNECTIVITY_CAPABILITIES)0x02000000) // Device supports reporting wifi verification via GCM
1452
+ #define FIT_CONNECTIVITY_CAPABILITIES_TRUE_UP ((FIT_CONNECTIVITY_CAPABILITIES)0x04000000) // Device supports True Up
1453
+ #define FIT_CONNECTIVITY_CAPABILITIES_FIND_MY_WATCH ((FIT_CONNECTIVITY_CAPABILITIES)0x08000000) // Device supports Find My Watch
1454
+ #define FIT_CONNECTIVITY_CAPABILITIES_REMOTE_MANUAL_SYNC ((FIT_CONNECTIVITY_CAPABILITIES)0x10000000)
1455
+ #define FIT_CONNECTIVITY_CAPABILITIES_LIVE_TRACK_AUTO_START ((FIT_CONNECTIVITY_CAPABILITIES)0x20000000) // Device supports LiveTrack auto start
1456
+ #define FIT_CONNECTIVITY_CAPABILITIES_LIVE_TRACK_MESSAGING ((FIT_CONNECTIVITY_CAPABILITIES)0x40000000) // Device supports LiveTrack Messaging
1457
+ #define FIT_CONNECTIVITY_CAPABILITIES_COUNT 31
1458
+
1459
+ typedef FIT_ENUM FIT_WEATHER_REPORT;
1460
+ #define FIT_WEATHER_REPORT_INVALID FIT_ENUM_INVALID
1461
+ #define FIT_WEATHER_REPORT_CURRENT ((FIT_WEATHER_REPORT)0)
1462
+ #define FIT_WEATHER_REPORT_FORECAST ((FIT_WEATHER_REPORT)1) // Deprecated use hourly_forecast instead
1463
+ #define FIT_WEATHER_REPORT_HOURLY_FORECAST ((FIT_WEATHER_REPORT)1)
1464
+ #define FIT_WEATHER_REPORT_DAILY_FORECAST ((FIT_WEATHER_REPORT)2)
1465
+ #define FIT_WEATHER_REPORT_COUNT 4
1466
+
1467
+ typedef FIT_ENUM FIT_WEATHER_STATUS;
1468
+ #define FIT_WEATHER_STATUS_INVALID FIT_ENUM_INVALID
1469
+ #define FIT_WEATHER_STATUS_CLEAR ((FIT_WEATHER_STATUS)0)
1470
+ #define FIT_WEATHER_STATUS_PARTLY_CLOUDY ((FIT_WEATHER_STATUS)1)
1471
+ #define FIT_WEATHER_STATUS_MOSTLY_CLOUDY ((FIT_WEATHER_STATUS)2)
1472
+ #define FIT_WEATHER_STATUS_RAIN ((FIT_WEATHER_STATUS)3)
1473
+ #define FIT_WEATHER_STATUS_SNOW ((FIT_WEATHER_STATUS)4)
1474
+ #define FIT_WEATHER_STATUS_WINDY ((FIT_WEATHER_STATUS)5)
1475
+ #define FIT_WEATHER_STATUS_THUNDERSTORMS ((FIT_WEATHER_STATUS)6)
1476
+ #define FIT_WEATHER_STATUS_WINTRY_MIX ((FIT_WEATHER_STATUS)7)
1477
+ #define FIT_WEATHER_STATUS_FOG ((FIT_WEATHER_STATUS)8)
1478
+ #define FIT_WEATHER_STATUS_HAZY ((FIT_WEATHER_STATUS)11)
1479
+ #define FIT_WEATHER_STATUS_HAIL ((FIT_WEATHER_STATUS)12)
1480
+ #define FIT_WEATHER_STATUS_SCATTERED_SHOWERS ((FIT_WEATHER_STATUS)13)
1481
+ #define FIT_WEATHER_STATUS_SCATTERED_THUNDERSTORMS ((FIT_WEATHER_STATUS)14)
1482
+ #define FIT_WEATHER_STATUS_UNKNOWN_PRECIPITATION ((FIT_WEATHER_STATUS)15)
1483
+ #define FIT_WEATHER_STATUS_LIGHT_RAIN ((FIT_WEATHER_STATUS)16)
1484
+ #define FIT_WEATHER_STATUS_HEAVY_RAIN ((FIT_WEATHER_STATUS)17)
1485
+ #define FIT_WEATHER_STATUS_LIGHT_SNOW ((FIT_WEATHER_STATUS)18)
1486
+ #define FIT_WEATHER_STATUS_HEAVY_SNOW ((FIT_WEATHER_STATUS)19)
1487
+ #define FIT_WEATHER_STATUS_LIGHT_RAIN_SNOW ((FIT_WEATHER_STATUS)20)
1488
+ #define FIT_WEATHER_STATUS_HEAVY_RAIN_SNOW ((FIT_WEATHER_STATUS)21)
1489
+ #define FIT_WEATHER_STATUS_CLOUDY ((FIT_WEATHER_STATUS)22)
1490
+ #define FIT_WEATHER_STATUS_COUNT 21
1491
+
1492
+ typedef FIT_ENUM FIT_WEATHER_SEVERITY;
1493
+ #define FIT_WEATHER_SEVERITY_INVALID FIT_ENUM_INVALID
1494
+ #define FIT_WEATHER_SEVERITY_UNKNOWN ((FIT_WEATHER_SEVERITY)0)
1495
+ #define FIT_WEATHER_SEVERITY_WARNING ((FIT_WEATHER_SEVERITY)1)
1496
+ #define FIT_WEATHER_SEVERITY_WATCH ((FIT_WEATHER_SEVERITY)2)
1497
+ #define FIT_WEATHER_SEVERITY_ADVISORY ((FIT_WEATHER_SEVERITY)3)
1498
+ #define FIT_WEATHER_SEVERITY_STATEMENT ((FIT_WEATHER_SEVERITY)4)
1499
+ #define FIT_WEATHER_SEVERITY_COUNT 5
1500
+
1501
+ typedef FIT_ENUM FIT_WEATHER_SEVERE_TYPE;
1502
+ #define FIT_WEATHER_SEVERE_TYPE_INVALID FIT_ENUM_INVALID
1503
+ #define FIT_WEATHER_SEVERE_TYPE_UNSPECIFIED ((FIT_WEATHER_SEVERE_TYPE)0)
1504
+ #define FIT_WEATHER_SEVERE_TYPE_TORNADO ((FIT_WEATHER_SEVERE_TYPE)1)
1505
+ #define FIT_WEATHER_SEVERE_TYPE_TSUNAMI ((FIT_WEATHER_SEVERE_TYPE)2)
1506
+ #define FIT_WEATHER_SEVERE_TYPE_HURRICANE ((FIT_WEATHER_SEVERE_TYPE)3)
1507
+ #define FIT_WEATHER_SEVERE_TYPE_EXTREME_WIND ((FIT_WEATHER_SEVERE_TYPE)4)
1508
+ #define FIT_WEATHER_SEVERE_TYPE_TYPHOON ((FIT_WEATHER_SEVERE_TYPE)5)
1509
+ #define FIT_WEATHER_SEVERE_TYPE_INLAND_HURRICANE ((FIT_WEATHER_SEVERE_TYPE)6)
1510
+ #define FIT_WEATHER_SEVERE_TYPE_HURRICANE_FORCE_WIND ((FIT_WEATHER_SEVERE_TYPE)7)
1511
+ #define FIT_WEATHER_SEVERE_TYPE_WATERSPOUT ((FIT_WEATHER_SEVERE_TYPE)8)
1512
+ #define FIT_WEATHER_SEVERE_TYPE_SEVERE_THUNDERSTORM ((FIT_WEATHER_SEVERE_TYPE)9)
1513
+ #define FIT_WEATHER_SEVERE_TYPE_WRECKHOUSE_WINDS ((FIT_WEATHER_SEVERE_TYPE)10)
1514
+ #define FIT_WEATHER_SEVERE_TYPE_LES_SUETES_WIND ((FIT_WEATHER_SEVERE_TYPE)11)
1515
+ #define FIT_WEATHER_SEVERE_TYPE_AVALANCHE ((FIT_WEATHER_SEVERE_TYPE)12)
1516
+ #define FIT_WEATHER_SEVERE_TYPE_FLASH_FLOOD ((FIT_WEATHER_SEVERE_TYPE)13)
1517
+ #define FIT_WEATHER_SEVERE_TYPE_TROPICAL_STORM ((FIT_WEATHER_SEVERE_TYPE)14)
1518
+ #define FIT_WEATHER_SEVERE_TYPE_INLAND_TROPICAL_STORM ((FIT_WEATHER_SEVERE_TYPE)15)
1519
+ #define FIT_WEATHER_SEVERE_TYPE_BLIZZARD ((FIT_WEATHER_SEVERE_TYPE)16)
1520
+ #define FIT_WEATHER_SEVERE_TYPE_ICE_STORM ((FIT_WEATHER_SEVERE_TYPE)17)
1521
+ #define FIT_WEATHER_SEVERE_TYPE_FREEZING_RAIN ((FIT_WEATHER_SEVERE_TYPE)18)
1522
+ #define FIT_WEATHER_SEVERE_TYPE_DEBRIS_FLOW ((FIT_WEATHER_SEVERE_TYPE)19)
1523
+ #define FIT_WEATHER_SEVERE_TYPE_FLASH_FREEZE ((FIT_WEATHER_SEVERE_TYPE)20)
1524
+ #define FIT_WEATHER_SEVERE_TYPE_DUST_STORM ((FIT_WEATHER_SEVERE_TYPE)21)
1525
+ #define FIT_WEATHER_SEVERE_TYPE_HIGH_WIND ((FIT_WEATHER_SEVERE_TYPE)22)
1526
+ #define FIT_WEATHER_SEVERE_TYPE_WINTER_STORM ((FIT_WEATHER_SEVERE_TYPE)23)
1527
+ #define FIT_WEATHER_SEVERE_TYPE_HEAVY_FREEZING_SPRAY ((FIT_WEATHER_SEVERE_TYPE)24)
1528
+ #define FIT_WEATHER_SEVERE_TYPE_EXTREME_COLD ((FIT_WEATHER_SEVERE_TYPE)25)
1529
+ #define FIT_WEATHER_SEVERE_TYPE_WIND_CHILL ((FIT_WEATHER_SEVERE_TYPE)26)
1530
+ #define FIT_WEATHER_SEVERE_TYPE_COLD_WAVE ((FIT_WEATHER_SEVERE_TYPE)27)
1531
+ #define FIT_WEATHER_SEVERE_TYPE_HEAVY_SNOW_ALERT ((FIT_WEATHER_SEVERE_TYPE)28)
1532
+ #define FIT_WEATHER_SEVERE_TYPE_LAKE_EFFECT_BLOWING_SNOW ((FIT_WEATHER_SEVERE_TYPE)29)
1533
+ #define FIT_WEATHER_SEVERE_TYPE_SNOW_SQUALL ((FIT_WEATHER_SEVERE_TYPE)30)
1534
+ #define FIT_WEATHER_SEVERE_TYPE_LAKE_EFFECT_SNOW ((FIT_WEATHER_SEVERE_TYPE)31)
1535
+ #define FIT_WEATHER_SEVERE_TYPE_WINTER_WEATHER ((FIT_WEATHER_SEVERE_TYPE)32)
1536
+ #define FIT_WEATHER_SEVERE_TYPE_SLEET ((FIT_WEATHER_SEVERE_TYPE)33)
1537
+ #define FIT_WEATHER_SEVERE_TYPE_SNOWFALL ((FIT_WEATHER_SEVERE_TYPE)34)
1538
+ #define FIT_WEATHER_SEVERE_TYPE_SNOW_AND_BLOWING_SNOW ((FIT_WEATHER_SEVERE_TYPE)35)
1539
+ #define FIT_WEATHER_SEVERE_TYPE_BLOWING_SNOW ((FIT_WEATHER_SEVERE_TYPE)36)
1540
+ #define FIT_WEATHER_SEVERE_TYPE_SNOW_ALERT ((FIT_WEATHER_SEVERE_TYPE)37)
1541
+ #define FIT_WEATHER_SEVERE_TYPE_ARCTIC_OUTFLOW ((FIT_WEATHER_SEVERE_TYPE)38)
1542
+ #define FIT_WEATHER_SEVERE_TYPE_FREEZING_DRIZZLE ((FIT_WEATHER_SEVERE_TYPE)39)
1543
+ #define FIT_WEATHER_SEVERE_TYPE_STORM ((FIT_WEATHER_SEVERE_TYPE)40)
1544
+ #define FIT_WEATHER_SEVERE_TYPE_STORM_SURGE ((FIT_WEATHER_SEVERE_TYPE)41)
1545
+ #define FIT_WEATHER_SEVERE_TYPE_RAINFALL ((FIT_WEATHER_SEVERE_TYPE)42)
1546
+ #define FIT_WEATHER_SEVERE_TYPE_AREAL_FLOOD ((FIT_WEATHER_SEVERE_TYPE)43)
1547
+ #define FIT_WEATHER_SEVERE_TYPE_COASTAL_FLOOD ((FIT_WEATHER_SEVERE_TYPE)44)
1548
+ #define FIT_WEATHER_SEVERE_TYPE_LAKESHORE_FLOOD ((FIT_WEATHER_SEVERE_TYPE)45)
1549
+ #define FIT_WEATHER_SEVERE_TYPE_EXCESSIVE_HEAT ((FIT_WEATHER_SEVERE_TYPE)46)
1550
+ #define FIT_WEATHER_SEVERE_TYPE_HEAT ((FIT_WEATHER_SEVERE_TYPE)47)
1551
+ #define FIT_WEATHER_SEVERE_TYPE_WEATHER ((FIT_WEATHER_SEVERE_TYPE)48)
1552
+ #define FIT_WEATHER_SEVERE_TYPE_HIGH_HEAT_AND_HUMIDITY ((FIT_WEATHER_SEVERE_TYPE)49)
1553
+ #define FIT_WEATHER_SEVERE_TYPE_HUMIDEX_AND_HEALTH ((FIT_WEATHER_SEVERE_TYPE)50)
1554
+ #define FIT_WEATHER_SEVERE_TYPE_HUMIDEX ((FIT_WEATHER_SEVERE_TYPE)51)
1555
+ #define FIT_WEATHER_SEVERE_TYPE_GALE ((FIT_WEATHER_SEVERE_TYPE)52)
1556
+ #define FIT_WEATHER_SEVERE_TYPE_FREEZING_SPRAY ((FIT_WEATHER_SEVERE_TYPE)53)
1557
+ #define FIT_WEATHER_SEVERE_TYPE_SPECIAL_MARINE ((FIT_WEATHER_SEVERE_TYPE)54)
1558
+ #define FIT_WEATHER_SEVERE_TYPE_SQUALL ((FIT_WEATHER_SEVERE_TYPE)55)
1559
+ #define FIT_WEATHER_SEVERE_TYPE_STRONG_WIND ((FIT_WEATHER_SEVERE_TYPE)56)
1560
+ #define FIT_WEATHER_SEVERE_TYPE_LAKE_WIND ((FIT_WEATHER_SEVERE_TYPE)57)
1561
+ #define FIT_WEATHER_SEVERE_TYPE_MARINE_WEATHER ((FIT_WEATHER_SEVERE_TYPE)58)
1562
+ #define FIT_WEATHER_SEVERE_TYPE_WIND ((FIT_WEATHER_SEVERE_TYPE)59)
1563
+ #define FIT_WEATHER_SEVERE_TYPE_SMALL_CRAFT_HAZARDOUS_SEAS ((FIT_WEATHER_SEVERE_TYPE)60)
1564
+ #define FIT_WEATHER_SEVERE_TYPE_HAZARDOUS_SEAS ((FIT_WEATHER_SEVERE_TYPE)61)
1565
+ #define FIT_WEATHER_SEVERE_TYPE_SMALL_CRAFT ((FIT_WEATHER_SEVERE_TYPE)62)
1566
+ #define FIT_WEATHER_SEVERE_TYPE_SMALL_CRAFT_WINDS ((FIT_WEATHER_SEVERE_TYPE)63)
1567
+ #define FIT_WEATHER_SEVERE_TYPE_SMALL_CRAFT_ROUGH_BAR ((FIT_WEATHER_SEVERE_TYPE)64)
1568
+ #define FIT_WEATHER_SEVERE_TYPE_HIGH_WATER_LEVEL ((FIT_WEATHER_SEVERE_TYPE)65)
1569
+ #define FIT_WEATHER_SEVERE_TYPE_ASHFALL ((FIT_WEATHER_SEVERE_TYPE)66)
1570
+ #define FIT_WEATHER_SEVERE_TYPE_FREEZING_FOG ((FIT_WEATHER_SEVERE_TYPE)67)
1571
+ #define FIT_WEATHER_SEVERE_TYPE_DENSE_FOG ((FIT_WEATHER_SEVERE_TYPE)68)
1572
+ #define FIT_WEATHER_SEVERE_TYPE_DENSE_SMOKE ((FIT_WEATHER_SEVERE_TYPE)69)
1573
+ #define FIT_WEATHER_SEVERE_TYPE_BLOWING_DUST ((FIT_WEATHER_SEVERE_TYPE)70)
1574
+ #define FIT_WEATHER_SEVERE_TYPE_HARD_FREEZE ((FIT_WEATHER_SEVERE_TYPE)71)
1575
+ #define FIT_WEATHER_SEVERE_TYPE_FREEZE ((FIT_WEATHER_SEVERE_TYPE)72)
1576
+ #define FIT_WEATHER_SEVERE_TYPE_FROST ((FIT_WEATHER_SEVERE_TYPE)73)
1577
+ #define FIT_WEATHER_SEVERE_TYPE_FIRE_WEATHER ((FIT_WEATHER_SEVERE_TYPE)74)
1578
+ #define FIT_WEATHER_SEVERE_TYPE_FLOOD ((FIT_WEATHER_SEVERE_TYPE)75)
1579
+ #define FIT_WEATHER_SEVERE_TYPE_RIP_TIDE ((FIT_WEATHER_SEVERE_TYPE)76)
1580
+ #define FIT_WEATHER_SEVERE_TYPE_HIGH_SURF ((FIT_WEATHER_SEVERE_TYPE)77)
1581
+ #define FIT_WEATHER_SEVERE_TYPE_SMOG ((FIT_WEATHER_SEVERE_TYPE)78)
1582
+ #define FIT_WEATHER_SEVERE_TYPE_AIR_QUALITY ((FIT_WEATHER_SEVERE_TYPE)79)
1583
+ #define FIT_WEATHER_SEVERE_TYPE_BRISK_WIND ((FIT_WEATHER_SEVERE_TYPE)80)
1584
+ #define FIT_WEATHER_SEVERE_TYPE_AIR_STAGNATION ((FIT_WEATHER_SEVERE_TYPE)81)
1585
+ #define FIT_WEATHER_SEVERE_TYPE_LOW_WATER ((FIT_WEATHER_SEVERE_TYPE)82)
1586
+ #define FIT_WEATHER_SEVERE_TYPE_HYDROLOGICAL ((FIT_WEATHER_SEVERE_TYPE)83)
1587
+ #define FIT_WEATHER_SEVERE_TYPE_SPECIAL_WEATHER ((FIT_WEATHER_SEVERE_TYPE)84)
1588
+ #define FIT_WEATHER_SEVERE_TYPE_COUNT 85
1589
+
1590
+ typedef FIT_UINT32 FIT_TIME_INTO_DAY; // number of seconds into the day since 00:00:00 UTC
1591
+ #define FIT_TIME_INTO_DAY_INVALID FIT_UINT32_INVALID
1592
+ #define FIT_TIME_INTO_DAY_COUNT 0
1593
+
1594
+ typedef FIT_UINT32 FIT_LOCALTIME_INTO_DAY; // number of seconds into the day since local 00:00:00
1595
+ #define FIT_LOCALTIME_INTO_DAY_INVALID FIT_UINT32_INVALID
1596
+ #define FIT_LOCALTIME_INTO_DAY_COUNT 0
924
1597
 
925
1598
  typedef FIT_ENUM FIT_STROKE_TYPE;
926
1599
  #define FIT_STROKE_TYPE_INVALID FIT_ENUM_INVALID
@@ -970,7 +1643,45 @@ typedef FIT_ENUM FIT_BODY_LOCATION;
970
1643
  #define FIT_BODY_LOCATION_RIGHT_FOREARM_EXTENSORS ((FIT_BODY_LOCATION)33) // Right posterior forearm
971
1644
  #define FIT_BODY_LOCATION_NECK ((FIT_BODY_LOCATION)34)
972
1645
  #define FIT_BODY_LOCATION_THROAT ((FIT_BODY_LOCATION)35)
973
- #define FIT_BODY_LOCATION_COUNT 36
1646
+ #define FIT_BODY_LOCATION_WAIST_MID_BACK ((FIT_BODY_LOCATION)36)
1647
+ #define FIT_BODY_LOCATION_WAIST_FRONT ((FIT_BODY_LOCATION)37)
1648
+ #define FIT_BODY_LOCATION_WAIST_LEFT ((FIT_BODY_LOCATION)38)
1649
+ #define FIT_BODY_LOCATION_WAIST_RIGHT ((FIT_BODY_LOCATION)39)
1650
+ #define FIT_BODY_LOCATION_COUNT 40
1651
+
1652
+ typedef FIT_ENUM FIT_SEGMENT_LAP_STATUS;
1653
+ #define FIT_SEGMENT_LAP_STATUS_INVALID FIT_ENUM_INVALID
1654
+ #define FIT_SEGMENT_LAP_STATUS_END ((FIT_SEGMENT_LAP_STATUS)0)
1655
+ #define FIT_SEGMENT_LAP_STATUS_FAIL ((FIT_SEGMENT_LAP_STATUS)1)
1656
+ #define FIT_SEGMENT_LAP_STATUS_COUNT 2
1657
+
1658
+ typedef FIT_ENUM FIT_SEGMENT_LEADERBOARD_TYPE;
1659
+ #define FIT_SEGMENT_LEADERBOARD_TYPE_INVALID FIT_ENUM_INVALID
1660
+ #define FIT_SEGMENT_LEADERBOARD_TYPE_OVERALL ((FIT_SEGMENT_LEADERBOARD_TYPE)0)
1661
+ #define FIT_SEGMENT_LEADERBOARD_TYPE_PERSONAL_BEST ((FIT_SEGMENT_LEADERBOARD_TYPE)1)
1662
+ #define FIT_SEGMENT_LEADERBOARD_TYPE_CONNECTIONS ((FIT_SEGMENT_LEADERBOARD_TYPE)2)
1663
+ #define FIT_SEGMENT_LEADERBOARD_TYPE_GROUP ((FIT_SEGMENT_LEADERBOARD_TYPE)3)
1664
+ #define FIT_SEGMENT_LEADERBOARD_TYPE_CHALLENGER ((FIT_SEGMENT_LEADERBOARD_TYPE)4)
1665
+ #define FIT_SEGMENT_LEADERBOARD_TYPE_KOM ((FIT_SEGMENT_LEADERBOARD_TYPE)5)
1666
+ #define FIT_SEGMENT_LEADERBOARD_TYPE_QOM ((FIT_SEGMENT_LEADERBOARD_TYPE)6)
1667
+ #define FIT_SEGMENT_LEADERBOARD_TYPE_PR ((FIT_SEGMENT_LEADERBOARD_TYPE)7)
1668
+ #define FIT_SEGMENT_LEADERBOARD_TYPE_GOAL ((FIT_SEGMENT_LEADERBOARD_TYPE)8)
1669
+ #define FIT_SEGMENT_LEADERBOARD_TYPE_RIVAL ((FIT_SEGMENT_LEADERBOARD_TYPE)9)
1670
+ #define FIT_SEGMENT_LEADERBOARD_TYPE_CLUB_LEADER ((FIT_SEGMENT_LEADERBOARD_TYPE)10)
1671
+ #define FIT_SEGMENT_LEADERBOARD_TYPE_COUNT 11
1672
+
1673
+ typedef FIT_ENUM FIT_SEGMENT_DELETE_STATUS;
1674
+ #define FIT_SEGMENT_DELETE_STATUS_INVALID FIT_ENUM_INVALID
1675
+ #define FIT_SEGMENT_DELETE_STATUS_DO_NOT_DELETE ((FIT_SEGMENT_DELETE_STATUS)0)
1676
+ #define FIT_SEGMENT_DELETE_STATUS_DELETE_ONE ((FIT_SEGMENT_DELETE_STATUS)1)
1677
+ #define FIT_SEGMENT_DELETE_STATUS_DELETE_ALL ((FIT_SEGMENT_DELETE_STATUS)2)
1678
+ #define FIT_SEGMENT_DELETE_STATUS_COUNT 3
1679
+
1680
+ typedef FIT_ENUM FIT_SEGMENT_SELECTION_TYPE;
1681
+ #define FIT_SEGMENT_SELECTION_TYPE_INVALID FIT_ENUM_INVALID
1682
+ #define FIT_SEGMENT_SELECTION_TYPE_STARRED ((FIT_SEGMENT_SELECTION_TYPE)0)
1683
+ #define FIT_SEGMENT_SELECTION_TYPE_SUGGESTED ((FIT_SEGMENT_SELECTION_TYPE)1)
1684
+ #define FIT_SEGMENT_SELECTION_TYPE_COUNT 2
974
1685
 
975
1686
  typedef FIT_ENUM FIT_SOURCE_TYPE;
976
1687
  #define FIT_SOURCE_TYPE_INVALID FIT_ENUM_INVALID
@@ -982,6 +1693,435 @@ typedef FIT_ENUM FIT_SOURCE_TYPE;
982
1693
  #define FIT_SOURCE_TYPE_LOCAL ((FIT_SOURCE_TYPE)5) // Onboard device
983
1694
  #define FIT_SOURCE_TYPE_COUNT 6
984
1695
 
1696
+ typedef FIT_ENUM FIT_DISPLAY_ORIENTATION;
1697
+ #define FIT_DISPLAY_ORIENTATION_INVALID FIT_ENUM_INVALID
1698
+ #define FIT_DISPLAY_ORIENTATION_AUTO ((FIT_DISPLAY_ORIENTATION)0) // automatic if the device supports it
1699
+ #define FIT_DISPLAY_ORIENTATION_PORTRAIT ((FIT_DISPLAY_ORIENTATION)1)
1700
+ #define FIT_DISPLAY_ORIENTATION_LANDSCAPE ((FIT_DISPLAY_ORIENTATION)2)
1701
+ #define FIT_DISPLAY_ORIENTATION_PORTRAIT_FLIPPED ((FIT_DISPLAY_ORIENTATION)3) // portrait mode but rotated 180 degrees
1702
+ #define FIT_DISPLAY_ORIENTATION_LANDSCAPE_FLIPPED ((FIT_DISPLAY_ORIENTATION)4) // landscape mode but rotated 180 degrees
1703
+ #define FIT_DISPLAY_ORIENTATION_COUNT 5
1704
+
1705
+ typedef FIT_ENUM FIT_WATCHFACE_MODE;
1706
+ #define FIT_WATCHFACE_MODE_INVALID FIT_ENUM_INVALID
1707
+ #define FIT_WATCHFACE_MODE_DIGITAL ((FIT_WATCHFACE_MODE)0)
1708
+ #define FIT_WATCHFACE_MODE_ANALOG ((FIT_WATCHFACE_MODE)1)
1709
+ #define FIT_WATCHFACE_MODE_CONNECT_IQ ((FIT_WATCHFACE_MODE)2)
1710
+ #define FIT_WATCHFACE_MODE_COUNT 3
1711
+
1712
+ typedef FIT_ENUM FIT_DIGITAL_WATCHFACE_LAYOUT;
1713
+ #define FIT_DIGITAL_WATCHFACE_LAYOUT_INVALID FIT_ENUM_INVALID
1714
+ #define FIT_DIGITAL_WATCHFACE_LAYOUT_TRADITIONAL ((FIT_DIGITAL_WATCHFACE_LAYOUT)0)
1715
+ #define FIT_DIGITAL_WATCHFACE_LAYOUT_MODERN ((FIT_DIGITAL_WATCHFACE_LAYOUT)1)
1716
+ #define FIT_DIGITAL_WATCHFACE_LAYOUT_BOLD ((FIT_DIGITAL_WATCHFACE_LAYOUT)2)
1717
+ #define FIT_DIGITAL_WATCHFACE_LAYOUT_COUNT 3
1718
+
1719
+ typedef FIT_ENUM FIT_ANALOG_WATCHFACE_LAYOUT;
1720
+ #define FIT_ANALOG_WATCHFACE_LAYOUT_INVALID FIT_ENUM_INVALID
1721
+ #define FIT_ANALOG_WATCHFACE_LAYOUT_MINIMAL ((FIT_ANALOG_WATCHFACE_LAYOUT)0)
1722
+ #define FIT_ANALOG_WATCHFACE_LAYOUT_TRADITIONAL ((FIT_ANALOG_WATCHFACE_LAYOUT)1)
1723
+ #define FIT_ANALOG_WATCHFACE_LAYOUT_MODERN ((FIT_ANALOG_WATCHFACE_LAYOUT)2)
1724
+ #define FIT_ANALOG_WATCHFACE_LAYOUT_COUNT 3
1725
+
1726
+ typedef FIT_ENUM FIT_RIDER_POSITION_TYPE;
1727
+ #define FIT_RIDER_POSITION_TYPE_INVALID FIT_ENUM_INVALID
1728
+ #define FIT_RIDER_POSITION_TYPE_SEATED ((FIT_RIDER_POSITION_TYPE)0)
1729
+ #define FIT_RIDER_POSITION_TYPE_STANDING ((FIT_RIDER_POSITION_TYPE)1)
1730
+ #define FIT_RIDER_POSITION_TYPE_COUNT 2
1731
+
1732
+ typedef FIT_ENUM FIT_POWER_PHASE_TYPE;
1733
+ #define FIT_POWER_PHASE_TYPE_INVALID FIT_ENUM_INVALID
1734
+ #define FIT_POWER_PHASE_TYPE_POWER_PHASE_START_ANGLE ((FIT_POWER_PHASE_TYPE)0)
1735
+ #define FIT_POWER_PHASE_TYPE_POWER_PHASE_END_ANGLE ((FIT_POWER_PHASE_TYPE)1)
1736
+ #define FIT_POWER_PHASE_TYPE_POWER_PHASE_ARC_LENGTH ((FIT_POWER_PHASE_TYPE)2)
1737
+ #define FIT_POWER_PHASE_TYPE_POWER_PHASE_CENTER ((FIT_POWER_PHASE_TYPE)3)
1738
+ #define FIT_POWER_PHASE_TYPE_COUNT 4
1739
+
1740
+ typedef FIT_ENUM FIT_CAMERA_EVENT_TYPE;
1741
+ #define FIT_CAMERA_EVENT_TYPE_INVALID FIT_ENUM_INVALID
1742
+ #define FIT_CAMERA_EVENT_TYPE_VIDEO_START ((FIT_CAMERA_EVENT_TYPE)0) // Start of video recording
1743
+ #define FIT_CAMERA_EVENT_TYPE_VIDEO_SPLIT ((FIT_CAMERA_EVENT_TYPE)1) // Mark of video file split (end of one file, beginning of the other)
1744
+ #define FIT_CAMERA_EVENT_TYPE_VIDEO_END ((FIT_CAMERA_EVENT_TYPE)2) // End of video recording
1745
+ #define FIT_CAMERA_EVENT_TYPE_PHOTO_TAKEN ((FIT_CAMERA_EVENT_TYPE)3) // Still photo taken
1746
+ #define FIT_CAMERA_EVENT_TYPE_VIDEO_SECOND_STREAM_START ((FIT_CAMERA_EVENT_TYPE)4)
1747
+ #define FIT_CAMERA_EVENT_TYPE_VIDEO_SECOND_STREAM_SPLIT ((FIT_CAMERA_EVENT_TYPE)5)
1748
+ #define FIT_CAMERA_EVENT_TYPE_VIDEO_SECOND_STREAM_END ((FIT_CAMERA_EVENT_TYPE)6)
1749
+ #define FIT_CAMERA_EVENT_TYPE_VIDEO_SPLIT_START ((FIT_CAMERA_EVENT_TYPE)7) // Mark of video file split start
1750
+ #define FIT_CAMERA_EVENT_TYPE_VIDEO_SECOND_STREAM_SPLIT_START ((FIT_CAMERA_EVENT_TYPE)8)
1751
+ #define FIT_CAMERA_EVENT_TYPE_VIDEO_PAUSE ((FIT_CAMERA_EVENT_TYPE)11) // Mark when a video recording has been paused
1752
+ #define FIT_CAMERA_EVENT_TYPE_VIDEO_SECOND_STREAM_PAUSE ((FIT_CAMERA_EVENT_TYPE)12)
1753
+ #define FIT_CAMERA_EVENT_TYPE_VIDEO_RESUME ((FIT_CAMERA_EVENT_TYPE)13) // Mark when a video recording has been resumed
1754
+ #define FIT_CAMERA_EVENT_TYPE_VIDEO_SECOND_STREAM_RESUME ((FIT_CAMERA_EVENT_TYPE)14)
1755
+ #define FIT_CAMERA_EVENT_TYPE_COUNT 13
1756
+
1757
+ typedef FIT_ENUM FIT_SENSOR_TYPE;
1758
+ #define FIT_SENSOR_TYPE_INVALID FIT_ENUM_INVALID
1759
+ #define FIT_SENSOR_TYPE_ACCELEROMETER ((FIT_SENSOR_TYPE)0)
1760
+ #define FIT_SENSOR_TYPE_GYROSCOPE ((FIT_SENSOR_TYPE)1)
1761
+ #define FIT_SENSOR_TYPE_COMPASS ((FIT_SENSOR_TYPE)2) // Magnetometer
1762
+ #define FIT_SENSOR_TYPE_COUNT 3
1763
+
1764
+ typedef FIT_ENUM FIT_BIKE_LIGHT_NETWORK_CONFIG_TYPE;
1765
+ #define FIT_BIKE_LIGHT_NETWORK_CONFIG_TYPE_INVALID FIT_ENUM_INVALID
1766
+ #define FIT_BIKE_LIGHT_NETWORK_CONFIG_TYPE_AUTO ((FIT_BIKE_LIGHT_NETWORK_CONFIG_TYPE)0)
1767
+ #define FIT_BIKE_LIGHT_NETWORK_CONFIG_TYPE_INDIVIDUAL ((FIT_BIKE_LIGHT_NETWORK_CONFIG_TYPE)4)
1768
+ #define FIT_BIKE_LIGHT_NETWORK_CONFIG_TYPE_HIGH_VISIBILITY ((FIT_BIKE_LIGHT_NETWORK_CONFIG_TYPE)5)
1769
+ #define FIT_BIKE_LIGHT_NETWORK_CONFIG_TYPE_TRAIL ((FIT_BIKE_LIGHT_NETWORK_CONFIG_TYPE)6)
1770
+ #define FIT_BIKE_LIGHT_NETWORK_CONFIG_TYPE_COUNT 4
1771
+
1772
+ typedef FIT_UINT16 FIT_COMM_TIMEOUT_TYPE;
1773
+ #define FIT_COMM_TIMEOUT_TYPE_INVALID FIT_UINT16_INVALID
1774
+ #define FIT_COMM_TIMEOUT_TYPE_WILDCARD_PAIRING_TIMEOUT ((FIT_COMM_TIMEOUT_TYPE)0) // Timeout pairing to any device
1775
+ #define FIT_COMM_TIMEOUT_TYPE_PAIRING_TIMEOUT ((FIT_COMM_TIMEOUT_TYPE)1) // Timeout pairing to previously paired device
1776
+ #define FIT_COMM_TIMEOUT_TYPE_CONNECTION_LOST ((FIT_COMM_TIMEOUT_TYPE)2) // Temporary loss of communications
1777
+ #define FIT_COMM_TIMEOUT_TYPE_CONNECTION_TIMEOUT ((FIT_COMM_TIMEOUT_TYPE)3) // Connection closed due to extended bad communications
1778
+ #define FIT_COMM_TIMEOUT_TYPE_COUNT 4
1779
+
1780
+ typedef FIT_ENUM FIT_CAMERA_ORIENTATION_TYPE;
1781
+ #define FIT_CAMERA_ORIENTATION_TYPE_INVALID FIT_ENUM_INVALID
1782
+ #define FIT_CAMERA_ORIENTATION_TYPE_CAMERA_ORIENTATION_0 ((FIT_CAMERA_ORIENTATION_TYPE)0)
1783
+ #define FIT_CAMERA_ORIENTATION_TYPE_CAMERA_ORIENTATION_90 ((FIT_CAMERA_ORIENTATION_TYPE)1)
1784
+ #define FIT_CAMERA_ORIENTATION_TYPE_CAMERA_ORIENTATION_180 ((FIT_CAMERA_ORIENTATION_TYPE)2)
1785
+ #define FIT_CAMERA_ORIENTATION_TYPE_CAMERA_ORIENTATION_270 ((FIT_CAMERA_ORIENTATION_TYPE)3)
1786
+ #define FIT_CAMERA_ORIENTATION_TYPE_COUNT 4
1787
+
1788
+ typedef FIT_ENUM FIT_ATTITUDE_STAGE;
1789
+ #define FIT_ATTITUDE_STAGE_INVALID FIT_ENUM_INVALID
1790
+ #define FIT_ATTITUDE_STAGE_FAILED ((FIT_ATTITUDE_STAGE)0)
1791
+ #define FIT_ATTITUDE_STAGE_ALIGNING ((FIT_ATTITUDE_STAGE)1)
1792
+ #define FIT_ATTITUDE_STAGE_DEGRADED ((FIT_ATTITUDE_STAGE)2)
1793
+ #define FIT_ATTITUDE_STAGE_VALID ((FIT_ATTITUDE_STAGE)3)
1794
+ #define FIT_ATTITUDE_STAGE_COUNT 4
1795
+
1796
+ typedef FIT_UINT16 FIT_ATTITUDE_VALIDITY;
1797
+ #define FIT_ATTITUDE_VALIDITY_INVALID FIT_UINT16_INVALID
1798
+ #define FIT_ATTITUDE_VALIDITY_TRACK_ANGLE_HEADING_VALID ((FIT_ATTITUDE_VALIDITY)0x0001)
1799
+ #define FIT_ATTITUDE_VALIDITY_PITCH_VALID ((FIT_ATTITUDE_VALIDITY)0x0002)
1800
+ #define FIT_ATTITUDE_VALIDITY_ROLL_VALID ((FIT_ATTITUDE_VALIDITY)0x0004)
1801
+ #define FIT_ATTITUDE_VALIDITY_LATERAL_BODY_ACCEL_VALID ((FIT_ATTITUDE_VALIDITY)0x0008)
1802
+ #define FIT_ATTITUDE_VALIDITY_NORMAL_BODY_ACCEL_VALID ((FIT_ATTITUDE_VALIDITY)0x0010)
1803
+ #define FIT_ATTITUDE_VALIDITY_TURN_RATE_VALID ((FIT_ATTITUDE_VALIDITY)0x0020)
1804
+ #define FIT_ATTITUDE_VALIDITY_HW_FAIL ((FIT_ATTITUDE_VALIDITY)0x0040)
1805
+ #define FIT_ATTITUDE_VALIDITY_MAG_INVALID ((FIT_ATTITUDE_VALIDITY)0x0080)
1806
+ #define FIT_ATTITUDE_VALIDITY_NO_GPS ((FIT_ATTITUDE_VALIDITY)0x0100)
1807
+ #define FIT_ATTITUDE_VALIDITY_GPS_INVALID ((FIT_ATTITUDE_VALIDITY)0x0200)
1808
+ #define FIT_ATTITUDE_VALIDITY_SOLUTION_COASTING ((FIT_ATTITUDE_VALIDITY)0x0400)
1809
+ #define FIT_ATTITUDE_VALIDITY_TRUE_TRACK_ANGLE ((FIT_ATTITUDE_VALIDITY)0x0800)
1810
+ #define FIT_ATTITUDE_VALIDITY_MAGNETIC_HEADING ((FIT_ATTITUDE_VALIDITY)0x1000)
1811
+ #define FIT_ATTITUDE_VALIDITY_COUNT 13
1812
+
1813
+ typedef FIT_ENUM FIT_AUTO_SYNC_FREQUENCY;
1814
+ #define FIT_AUTO_SYNC_FREQUENCY_INVALID FIT_ENUM_INVALID
1815
+ #define FIT_AUTO_SYNC_FREQUENCY_NEVER ((FIT_AUTO_SYNC_FREQUENCY)0)
1816
+ #define FIT_AUTO_SYNC_FREQUENCY_OCCASIONALLY ((FIT_AUTO_SYNC_FREQUENCY)1)
1817
+ #define FIT_AUTO_SYNC_FREQUENCY_FREQUENT ((FIT_AUTO_SYNC_FREQUENCY)2)
1818
+ #define FIT_AUTO_SYNC_FREQUENCY_ONCE_A_DAY ((FIT_AUTO_SYNC_FREQUENCY)3)
1819
+ #define FIT_AUTO_SYNC_FREQUENCY_COUNT 4
1820
+
1821
+ typedef FIT_ENUM FIT_EXD_LAYOUT;
1822
+ #define FIT_EXD_LAYOUT_INVALID FIT_ENUM_INVALID
1823
+ #define FIT_EXD_LAYOUT_FULL_SCREEN ((FIT_EXD_LAYOUT)0)
1824
+ #define FIT_EXD_LAYOUT_HALF_VERTICAL ((FIT_EXD_LAYOUT)1)
1825
+ #define FIT_EXD_LAYOUT_HALF_HORIZONTAL ((FIT_EXD_LAYOUT)2)
1826
+ #define FIT_EXD_LAYOUT_HALF_VERTICAL_RIGHT_SPLIT ((FIT_EXD_LAYOUT)3)
1827
+ #define FIT_EXD_LAYOUT_HALF_HORIZONTAL_BOTTOM_SPLIT ((FIT_EXD_LAYOUT)4)
1828
+ #define FIT_EXD_LAYOUT_FULL_QUARTER_SPLIT ((FIT_EXD_LAYOUT)5)
1829
+ #define FIT_EXD_LAYOUT_HALF_VERTICAL_LEFT_SPLIT ((FIT_EXD_LAYOUT)6)
1830
+ #define FIT_EXD_LAYOUT_HALF_HORIZONTAL_TOP_SPLIT ((FIT_EXD_LAYOUT)7)
1831
+ #define FIT_EXD_LAYOUT_COUNT 8
1832
+
1833
+ typedef FIT_ENUM FIT_EXD_DISPLAY_TYPE;
1834
+ #define FIT_EXD_DISPLAY_TYPE_INVALID FIT_ENUM_INVALID
1835
+ #define FIT_EXD_DISPLAY_TYPE_NUMERICAL ((FIT_EXD_DISPLAY_TYPE)0)
1836
+ #define FIT_EXD_DISPLAY_TYPE_SIMPLE ((FIT_EXD_DISPLAY_TYPE)1)
1837
+ #define FIT_EXD_DISPLAY_TYPE_GRAPH ((FIT_EXD_DISPLAY_TYPE)2)
1838
+ #define FIT_EXD_DISPLAY_TYPE_BAR ((FIT_EXD_DISPLAY_TYPE)3)
1839
+ #define FIT_EXD_DISPLAY_TYPE_CIRCLE_GRAPH ((FIT_EXD_DISPLAY_TYPE)4)
1840
+ #define FIT_EXD_DISPLAY_TYPE_VIRTUAL_PARTNER ((FIT_EXD_DISPLAY_TYPE)5)
1841
+ #define FIT_EXD_DISPLAY_TYPE_BALANCE ((FIT_EXD_DISPLAY_TYPE)6)
1842
+ #define FIT_EXD_DISPLAY_TYPE_STRING_LIST ((FIT_EXD_DISPLAY_TYPE)7)
1843
+ #define FIT_EXD_DISPLAY_TYPE_STRING ((FIT_EXD_DISPLAY_TYPE)8)
1844
+ #define FIT_EXD_DISPLAY_TYPE_SIMPLE_DYNAMIC_ICON ((FIT_EXD_DISPLAY_TYPE)9)
1845
+ #define FIT_EXD_DISPLAY_TYPE_GAUGE ((FIT_EXD_DISPLAY_TYPE)10)
1846
+ #define FIT_EXD_DISPLAY_TYPE_COUNT 11
1847
+
1848
+ typedef FIT_ENUM FIT_EXD_DATA_UNITS;
1849
+ #define FIT_EXD_DATA_UNITS_INVALID FIT_ENUM_INVALID
1850
+ #define FIT_EXD_DATA_UNITS_NO_UNITS ((FIT_EXD_DATA_UNITS)0)
1851
+ #define FIT_EXD_DATA_UNITS_LAPS ((FIT_EXD_DATA_UNITS)1)
1852
+ #define FIT_EXD_DATA_UNITS_MILES_PER_HOUR ((FIT_EXD_DATA_UNITS)2)
1853
+ #define FIT_EXD_DATA_UNITS_KILOMETERS_PER_HOUR ((FIT_EXD_DATA_UNITS)3)
1854
+ #define FIT_EXD_DATA_UNITS_FEET_PER_HOUR ((FIT_EXD_DATA_UNITS)4)
1855
+ #define FIT_EXD_DATA_UNITS_METERS_PER_HOUR ((FIT_EXD_DATA_UNITS)5)
1856
+ #define FIT_EXD_DATA_UNITS_DEGREES_CELSIUS ((FIT_EXD_DATA_UNITS)6)
1857
+ #define FIT_EXD_DATA_UNITS_DEGREES_FARENHEIT ((FIT_EXD_DATA_UNITS)7)
1858
+ #define FIT_EXD_DATA_UNITS_ZONE ((FIT_EXD_DATA_UNITS)8)
1859
+ #define FIT_EXD_DATA_UNITS_GEAR ((FIT_EXD_DATA_UNITS)9)
1860
+ #define FIT_EXD_DATA_UNITS_RPM ((FIT_EXD_DATA_UNITS)10)
1861
+ #define FIT_EXD_DATA_UNITS_BPM ((FIT_EXD_DATA_UNITS)11)
1862
+ #define FIT_EXD_DATA_UNITS_DEGREES ((FIT_EXD_DATA_UNITS)12)
1863
+ #define FIT_EXD_DATA_UNITS_MILLIMETERS ((FIT_EXD_DATA_UNITS)13)
1864
+ #define FIT_EXD_DATA_UNITS_METERS ((FIT_EXD_DATA_UNITS)14)
1865
+ #define FIT_EXD_DATA_UNITS_KILOMETERS ((FIT_EXD_DATA_UNITS)15)
1866
+ #define FIT_EXD_DATA_UNITS_FEET ((FIT_EXD_DATA_UNITS)16)
1867
+ #define FIT_EXD_DATA_UNITS_YARDS ((FIT_EXD_DATA_UNITS)17)
1868
+ #define FIT_EXD_DATA_UNITS_KILOFEET ((FIT_EXD_DATA_UNITS)18)
1869
+ #define FIT_EXD_DATA_UNITS_MILES ((FIT_EXD_DATA_UNITS)19)
1870
+ #define FIT_EXD_DATA_UNITS_TIME ((FIT_EXD_DATA_UNITS)20)
1871
+ #define FIT_EXD_DATA_UNITS_ENUM_TURN_TYPE ((FIT_EXD_DATA_UNITS)21)
1872
+ #define FIT_EXD_DATA_UNITS_PERCENT ((FIT_EXD_DATA_UNITS)22)
1873
+ #define FIT_EXD_DATA_UNITS_WATTS ((FIT_EXD_DATA_UNITS)23)
1874
+ #define FIT_EXD_DATA_UNITS_WATTS_PER_KILOGRAM ((FIT_EXD_DATA_UNITS)24)
1875
+ #define FIT_EXD_DATA_UNITS_ENUM_BATTERY_STATUS ((FIT_EXD_DATA_UNITS)25)
1876
+ #define FIT_EXD_DATA_UNITS_ENUM_BIKE_LIGHT_BEAM_ANGLE_MODE ((FIT_EXD_DATA_UNITS)26)
1877
+ #define FIT_EXD_DATA_UNITS_ENUM_BIKE_LIGHT_BATTERY_STATUS ((FIT_EXD_DATA_UNITS)27)
1878
+ #define FIT_EXD_DATA_UNITS_ENUM_BIKE_LIGHT_NETWORK_CONFIG_TYPE ((FIT_EXD_DATA_UNITS)28)
1879
+ #define FIT_EXD_DATA_UNITS_LIGHTS ((FIT_EXD_DATA_UNITS)29)
1880
+ #define FIT_EXD_DATA_UNITS_SECONDS ((FIT_EXD_DATA_UNITS)30)
1881
+ #define FIT_EXD_DATA_UNITS_MINUTES ((FIT_EXD_DATA_UNITS)31)
1882
+ #define FIT_EXD_DATA_UNITS_HOURS ((FIT_EXD_DATA_UNITS)32)
1883
+ #define FIT_EXD_DATA_UNITS_CALORIES ((FIT_EXD_DATA_UNITS)33)
1884
+ #define FIT_EXD_DATA_UNITS_KILOJOULES ((FIT_EXD_DATA_UNITS)34)
1885
+ #define FIT_EXD_DATA_UNITS_MILLISECONDS ((FIT_EXD_DATA_UNITS)35)
1886
+ #define FIT_EXD_DATA_UNITS_SECOND_PER_MILE ((FIT_EXD_DATA_UNITS)36)
1887
+ #define FIT_EXD_DATA_UNITS_SECOND_PER_KILOMETER ((FIT_EXD_DATA_UNITS)37)
1888
+ #define FIT_EXD_DATA_UNITS_CENTIMETER ((FIT_EXD_DATA_UNITS)38)
1889
+ #define FIT_EXD_DATA_UNITS_ENUM_COURSE_POINT ((FIT_EXD_DATA_UNITS)39)
1890
+ #define FIT_EXD_DATA_UNITS_BRADIANS ((FIT_EXD_DATA_UNITS)40)
1891
+ #define FIT_EXD_DATA_UNITS_ENUM_SPORT ((FIT_EXD_DATA_UNITS)41)
1892
+ #define FIT_EXD_DATA_UNITS_COUNT 42
1893
+
1894
+ typedef FIT_ENUM FIT_EXD_QUALIFIERS;
1895
+ #define FIT_EXD_QUALIFIERS_INVALID FIT_ENUM_INVALID
1896
+ #define FIT_EXD_QUALIFIERS_NO_QUALIFIER ((FIT_EXD_QUALIFIERS)0)
1897
+ #define FIT_EXD_QUALIFIERS_INSTANTANEOUS ((FIT_EXD_QUALIFIERS)1)
1898
+ #define FIT_EXD_QUALIFIERS_AVERAGE ((FIT_EXD_QUALIFIERS)2)
1899
+ #define FIT_EXD_QUALIFIERS_LAP ((FIT_EXD_QUALIFIERS)3)
1900
+ #define FIT_EXD_QUALIFIERS_MAXIMUM ((FIT_EXD_QUALIFIERS)4)
1901
+ #define FIT_EXD_QUALIFIERS_MAXIMUM_AVERAGE ((FIT_EXD_QUALIFIERS)5)
1902
+ #define FIT_EXD_QUALIFIERS_MAXIMUM_LAP ((FIT_EXD_QUALIFIERS)6)
1903
+ #define FIT_EXD_QUALIFIERS_LAST_LAP ((FIT_EXD_QUALIFIERS)7)
1904
+ #define FIT_EXD_QUALIFIERS_AVERAGE_LAP ((FIT_EXD_QUALIFIERS)8)
1905
+ #define FIT_EXD_QUALIFIERS_TO_DESTINATION ((FIT_EXD_QUALIFIERS)9)
1906
+ #define FIT_EXD_QUALIFIERS_TO_GO ((FIT_EXD_QUALIFIERS)10)
1907
+ #define FIT_EXD_QUALIFIERS_TO_NEXT ((FIT_EXD_QUALIFIERS)11)
1908
+ #define FIT_EXD_QUALIFIERS_NEXT_COURSE_POINT ((FIT_EXD_QUALIFIERS)12)
1909
+ #define FIT_EXD_QUALIFIERS_TOTAL ((FIT_EXD_QUALIFIERS)13)
1910
+ #define FIT_EXD_QUALIFIERS_THREE_SECOND_AVERAGE ((FIT_EXD_QUALIFIERS)14)
1911
+ #define FIT_EXD_QUALIFIERS_TEN_SECOND_AVERAGE ((FIT_EXD_QUALIFIERS)15)
1912
+ #define FIT_EXD_QUALIFIERS_THIRTY_SECOND_AVERAGE ((FIT_EXD_QUALIFIERS)16)
1913
+ #define FIT_EXD_QUALIFIERS_PERCENT_MAXIMUM ((FIT_EXD_QUALIFIERS)17)
1914
+ #define FIT_EXD_QUALIFIERS_PERCENT_MAXIMUM_AVERAGE ((FIT_EXD_QUALIFIERS)18)
1915
+ #define FIT_EXD_QUALIFIERS_LAP_PERCENT_MAXIMUM ((FIT_EXD_QUALIFIERS)19)
1916
+ #define FIT_EXD_QUALIFIERS_ELAPSED ((FIT_EXD_QUALIFIERS)20)
1917
+ #define FIT_EXD_QUALIFIERS_SUNRISE ((FIT_EXD_QUALIFIERS)21)
1918
+ #define FIT_EXD_QUALIFIERS_SUNSET ((FIT_EXD_QUALIFIERS)22)
1919
+ #define FIT_EXD_QUALIFIERS_COMPARED_TO_VIRTUAL_PARTNER ((FIT_EXD_QUALIFIERS)23)
1920
+ #define FIT_EXD_QUALIFIERS_MAXIMUM_24H ((FIT_EXD_QUALIFIERS)24)
1921
+ #define FIT_EXD_QUALIFIERS_MINIMUM_24H ((FIT_EXD_QUALIFIERS)25)
1922
+ #define FIT_EXD_QUALIFIERS_MINIMUM ((FIT_EXD_QUALIFIERS)26)
1923
+ #define FIT_EXD_QUALIFIERS_FIRST ((FIT_EXD_QUALIFIERS)27)
1924
+ #define FIT_EXD_QUALIFIERS_SECOND ((FIT_EXD_QUALIFIERS)28)
1925
+ #define FIT_EXD_QUALIFIERS_THIRD ((FIT_EXD_QUALIFIERS)29)
1926
+ #define FIT_EXD_QUALIFIERS_SHIFTER ((FIT_EXD_QUALIFIERS)30)
1927
+ #define FIT_EXD_QUALIFIERS_LAST_SPORT ((FIT_EXD_QUALIFIERS)31)
1928
+ #define FIT_EXD_QUALIFIERS_ZONE_9 ((FIT_EXD_QUALIFIERS)242)
1929
+ #define FIT_EXD_QUALIFIERS_ZONE_8 ((FIT_EXD_QUALIFIERS)243)
1930
+ #define FIT_EXD_QUALIFIERS_ZONE_7 ((FIT_EXD_QUALIFIERS)244)
1931
+ #define FIT_EXD_QUALIFIERS_ZONE_6 ((FIT_EXD_QUALIFIERS)245)
1932
+ #define FIT_EXD_QUALIFIERS_ZONE_5 ((FIT_EXD_QUALIFIERS)246)
1933
+ #define FIT_EXD_QUALIFIERS_ZONE_4 ((FIT_EXD_QUALIFIERS)247)
1934
+ #define FIT_EXD_QUALIFIERS_ZONE_3 ((FIT_EXD_QUALIFIERS)248)
1935
+ #define FIT_EXD_QUALIFIERS_ZONE_2 ((FIT_EXD_QUALIFIERS)249)
1936
+ #define FIT_EXD_QUALIFIERS_ZONE_1 ((FIT_EXD_QUALIFIERS)250)
1937
+ #define FIT_EXD_QUALIFIERS_COUNT 41
1938
+
1939
+ typedef FIT_ENUM FIT_EXD_DESCRIPTORS;
1940
+ #define FIT_EXD_DESCRIPTORS_INVALID FIT_ENUM_INVALID
1941
+ #define FIT_EXD_DESCRIPTORS_BIKE_LIGHT_BATTERY_STATUS ((FIT_EXD_DESCRIPTORS)0)
1942
+ #define FIT_EXD_DESCRIPTORS_BEAM_ANGLE_STATUS ((FIT_EXD_DESCRIPTORS)1)
1943
+ #define FIT_EXD_DESCRIPTORS_BATERY_LEVEL ((FIT_EXD_DESCRIPTORS)2)
1944
+ #define FIT_EXD_DESCRIPTORS_LIGHT_NETWORK_MODE ((FIT_EXD_DESCRIPTORS)3)
1945
+ #define FIT_EXD_DESCRIPTORS_NUMBER_LIGHTS_CONNECTED ((FIT_EXD_DESCRIPTORS)4)
1946
+ #define FIT_EXD_DESCRIPTORS_CADENCE ((FIT_EXD_DESCRIPTORS)5)
1947
+ #define FIT_EXD_DESCRIPTORS_DISTANCE ((FIT_EXD_DESCRIPTORS)6)
1948
+ #define FIT_EXD_DESCRIPTORS_ESTIMATED_TIME_OF_ARRIVAL ((FIT_EXD_DESCRIPTORS)7)
1949
+ #define FIT_EXD_DESCRIPTORS_HEADING ((FIT_EXD_DESCRIPTORS)8)
1950
+ #define FIT_EXD_DESCRIPTORS_TIME ((FIT_EXD_DESCRIPTORS)9)
1951
+ #define FIT_EXD_DESCRIPTORS_BATTERY_LEVEL ((FIT_EXD_DESCRIPTORS)10)
1952
+ #define FIT_EXD_DESCRIPTORS_TRAINER_RESISTANCE ((FIT_EXD_DESCRIPTORS)11)
1953
+ #define FIT_EXD_DESCRIPTORS_TRAINER_TARGET_POWER ((FIT_EXD_DESCRIPTORS)12)
1954
+ #define FIT_EXD_DESCRIPTORS_TIME_SEATED ((FIT_EXD_DESCRIPTORS)13)
1955
+ #define FIT_EXD_DESCRIPTORS_TIME_STANDING ((FIT_EXD_DESCRIPTORS)14)
1956
+ #define FIT_EXD_DESCRIPTORS_ELEVATION ((FIT_EXD_DESCRIPTORS)15)
1957
+ #define FIT_EXD_DESCRIPTORS_GRADE ((FIT_EXD_DESCRIPTORS)16)
1958
+ #define FIT_EXD_DESCRIPTORS_ASCENT ((FIT_EXD_DESCRIPTORS)17)
1959
+ #define FIT_EXD_DESCRIPTORS_DESCENT ((FIT_EXD_DESCRIPTORS)18)
1960
+ #define FIT_EXD_DESCRIPTORS_VERTICAL_SPEED ((FIT_EXD_DESCRIPTORS)19)
1961
+ #define FIT_EXD_DESCRIPTORS_DI2_BATTERY_LEVEL ((FIT_EXD_DESCRIPTORS)20)
1962
+ #define FIT_EXD_DESCRIPTORS_FRONT_GEAR ((FIT_EXD_DESCRIPTORS)21)
1963
+ #define FIT_EXD_DESCRIPTORS_REAR_GEAR ((FIT_EXD_DESCRIPTORS)22)
1964
+ #define FIT_EXD_DESCRIPTORS_GEAR_RATIO ((FIT_EXD_DESCRIPTORS)23)
1965
+ #define FIT_EXD_DESCRIPTORS_HEART_RATE ((FIT_EXD_DESCRIPTORS)24)
1966
+ #define FIT_EXD_DESCRIPTORS_HEART_RATE_ZONE ((FIT_EXD_DESCRIPTORS)25)
1967
+ #define FIT_EXD_DESCRIPTORS_TIME_IN_HEART_RATE_ZONE ((FIT_EXD_DESCRIPTORS)26)
1968
+ #define FIT_EXD_DESCRIPTORS_HEART_RATE_RESERVE ((FIT_EXD_DESCRIPTORS)27)
1969
+ #define FIT_EXD_DESCRIPTORS_CALORIES ((FIT_EXD_DESCRIPTORS)28)
1970
+ #define FIT_EXD_DESCRIPTORS_GPS_ACCURACY ((FIT_EXD_DESCRIPTORS)29)
1971
+ #define FIT_EXD_DESCRIPTORS_GPS_SIGNAL_STRENGTH ((FIT_EXD_DESCRIPTORS)30)
1972
+ #define FIT_EXD_DESCRIPTORS_TEMPERATURE ((FIT_EXD_DESCRIPTORS)31)
1973
+ #define FIT_EXD_DESCRIPTORS_TIME_OF_DAY ((FIT_EXD_DESCRIPTORS)32)
1974
+ #define FIT_EXD_DESCRIPTORS_BALANCE ((FIT_EXD_DESCRIPTORS)33)
1975
+ #define FIT_EXD_DESCRIPTORS_PEDAL_SMOOTHNESS ((FIT_EXD_DESCRIPTORS)34)
1976
+ #define FIT_EXD_DESCRIPTORS_POWER ((FIT_EXD_DESCRIPTORS)35)
1977
+ #define FIT_EXD_DESCRIPTORS_FUNCTIONAL_THRESHOLD_POWER ((FIT_EXD_DESCRIPTORS)36)
1978
+ #define FIT_EXD_DESCRIPTORS_INTENSITY_FACTOR ((FIT_EXD_DESCRIPTORS)37)
1979
+ #define FIT_EXD_DESCRIPTORS_WORK ((FIT_EXD_DESCRIPTORS)38)
1980
+ #define FIT_EXD_DESCRIPTORS_POWER_RATIO ((FIT_EXD_DESCRIPTORS)39)
1981
+ #define FIT_EXD_DESCRIPTORS_NORMALIZED_POWER ((FIT_EXD_DESCRIPTORS)40)
1982
+ #define FIT_EXD_DESCRIPTORS_TRAINING_STRESS_SCORE ((FIT_EXD_DESCRIPTORS)41)
1983
+ #define FIT_EXD_DESCRIPTORS_TIME_ON_ZONE ((FIT_EXD_DESCRIPTORS)42)
1984
+ #define FIT_EXD_DESCRIPTORS_SPEED ((FIT_EXD_DESCRIPTORS)43)
1985
+ #define FIT_EXD_DESCRIPTORS_LAPS ((FIT_EXD_DESCRIPTORS)44)
1986
+ #define FIT_EXD_DESCRIPTORS_REPS ((FIT_EXD_DESCRIPTORS)45)
1987
+ #define FIT_EXD_DESCRIPTORS_WORKOUT_STEP ((FIT_EXD_DESCRIPTORS)46)
1988
+ #define FIT_EXD_DESCRIPTORS_COURSE_DISTANCE ((FIT_EXD_DESCRIPTORS)47)
1989
+ #define FIT_EXD_DESCRIPTORS_NAVIGATION_DISTANCE ((FIT_EXD_DESCRIPTORS)48)
1990
+ #define FIT_EXD_DESCRIPTORS_COURSE_ESTIMATED_TIME_OF_ARRIVAL ((FIT_EXD_DESCRIPTORS)49)
1991
+ #define FIT_EXD_DESCRIPTORS_NAVIGATION_ESTIMATED_TIME_OF_ARRIVAL ((FIT_EXD_DESCRIPTORS)50)
1992
+ #define FIT_EXD_DESCRIPTORS_COURSE_TIME ((FIT_EXD_DESCRIPTORS)51)
1993
+ #define FIT_EXD_DESCRIPTORS_NAVIGATION_TIME ((FIT_EXD_DESCRIPTORS)52)
1994
+ #define FIT_EXD_DESCRIPTORS_COURSE_HEADING ((FIT_EXD_DESCRIPTORS)53)
1995
+ #define FIT_EXD_DESCRIPTORS_NAVIGATION_HEADING ((FIT_EXD_DESCRIPTORS)54)
1996
+ #define FIT_EXD_DESCRIPTORS_POWER_ZONE ((FIT_EXD_DESCRIPTORS)55)
1997
+ #define FIT_EXD_DESCRIPTORS_TORQUE_EFFECTIVENESS ((FIT_EXD_DESCRIPTORS)56)
1998
+ #define FIT_EXD_DESCRIPTORS_TIMER_TIME ((FIT_EXD_DESCRIPTORS)57)
1999
+ #define FIT_EXD_DESCRIPTORS_POWER_WEIGHT_RATIO ((FIT_EXD_DESCRIPTORS)58)
2000
+ #define FIT_EXD_DESCRIPTORS_LEFT_PLATFORM_CENTER_OFFSET ((FIT_EXD_DESCRIPTORS)59)
2001
+ #define FIT_EXD_DESCRIPTORS_RIGHT_PLATFORM_CENTER_OFFSET ((FIT_EXD_DESCRIPTORS)60)
2002
+ #define FIT_EXD_DESCRIPTORS_LEFT_POWER_PHASE_START_ANGLE ((FIT_EXD_DESCRIPTORS)61)
2003
+ #define FIT_EXD_DESCRIPTORS_RIGHT_POWER_PHASE_START_ANGLE ((FIT_EXD_DESCRIPTORS)62)
2004
+ #define FIT_EXD_DESCRIPTORS_LEFT_POWER_PHASE_FINISH_ANGLE ((FIT_EXD_DESCRIPTORS)63)
2005
+ #define FIT_EXD_DESCRIPTORS_RIGHT_POWER_PHASE_FINISH_ANGLE ((FIT_EXD_DESCRIPTORS)64)
2006
+ #define FIT_EXD_DESCRIPTORS_GEARS ((FIT_EXD_DESCRIPTORS)65) // Combined gear information
2007
+ #define FIT_EXD_DESCRIPTORS_PACE ((FIT_EXD_DESCRIPTORS)66)
2008
+ #define FIT_EXD_DESCRIPTORS_TRAINING_EFFECT ((FIT_EXD_DESCRIPTORS)67)
2009
+ #define FIT_EXD_DESCRIPTORS_VERTICAL_OSCILLATION ((FIT_EXD_DESCRIPTORS)68)
2010
+ #define FIT_EXD_DESCRIPTORS_VERTICAL_RATIO ((FIT_EXD_DESCRIPTORS)69)
2011
+ #define FIT_EXD_DESCRIPTORS_GROUND_CONTACT_TIME ((FIT_EXD_DESCRIPTORS)70)
2012
+ #define FIT_EXD_DESCRIPTORS_LEFT_GROUND_CONTACT_TIME_BALANCE ((FIT_EXD_DESCRIPTORS)71)
2013
+ #define FIT_EXD_DESCRIPTORS_RIGHT_GROUND_CONTACT_TIME_BALANCE ((FIT_EXD_DESCRIPTORS)72)
2014
+ #define FIT_EXD_DESCRIPTORS_STRIDE_LENGTH ((FIT_EXD_DESCRIPTORS)73)
2015
+ #define FIT_EXD_DESCRIPTORS_RUNNING_CADENCE ((FIT_EXD_DESCRIPTORS)74)
2016
+ #define FIT_EXD_DESCRIPTORS_PERFORMANCE_CONDITION ((FIT_EXD_DESCRIPTORS)75)
2017
+ #define FIT_EXD_DESCRIPTORS_COURSE_TYPE ((FIT_EXD_DESCRIPTORS)76)
2018
+ #define FIT_EXD_DESCRIPTORS_TIME_IN_POWER_ZONE ((FIT_EXD_DESCRIPTORS)77)
2019
+ #define FIT_EXD_DESCRIPTORS_NAVIGATION_TURN ((FIT_EXD_DESCRIPTORS)78)
2020
+ #define FIT_EXD_DESCRIPTORS_COURSE_LOCATION ((FIT_EXD_DESCRIPTORS)79)
2021
+ #define FIT_EXD_DESCRIPTORS_NAVIGATION_LOCATION ((FIT_EXD_DESCRIPTORS)80)
2022
+ #define FIT_EXD_DESCRIPTORS_COMPASS ((FIT_EXD_DESCRIPTORS)81)
2023
+ #define FIT_EXD_DESCRIPTORS_GEAR_COMBO ((FIT_EXD_DESCRIPTORS)82)
2024
+ #define FIT_EXD_DESCRIPTORS_MUSCLE_OXYGEN ((FIT_EXD_DESCRIPTORS)83)
2025
+ #define FIT_EXD_DESCRIPTORS_ICON ((FIT_EXD_DESCRIPTORS)84)
2026
+ #define FIT_EXD_DESCRIPTORS_COUNT 85
2027
+
2028
+ typedef FIT_UINT32 FIT_AUTO_ACTIVITY_DETECT;
2029
+ #define FIT_AUTO_ACTIVITY_DETECT_INVALID FIT_UINT32_INVALID
2030
+ #define FIT_AUTO_ACTIVITY_DETECT_NONE ((FIT_AUTO_ACTIVITY_DETECT)0x00000000)
2031
+ #define FIT_AUTO_ACTIVITY_DETECT_RUNNING ((FIT_AUTO_ACTIVITY_DETECT)0x00000001)
2032
+ #define FIT_AUTO_ACTIVITY_DETECT_CYCLING ((FIT_AUTO_ACTIVITY_DETECT)0x00000002)
2033
+ #define FIT_AUTO_ACTIVITY_DETECT_SWIMMING ((FIT_AUTO_ACTIVITY_DETECT)0x00000004)
2034
+ #define FIT_AUTO_ACTIVITY_DETECT_WALKING ((FIT_AUTO_ACTIVITY_DETECT)0x00000008)
2035
+ #define FIT_AUTO_ACTIVITY_DETECT_ELLIPTICAL ((FIT_AUTO_ACTIVITY_DETECT)0x00000020)
2036
+ #define FIT_AUTO_ACTIVITY_DETECT_SEDENTARY ((FIT_AUTO_ACTIVITY_DETECT)0x00000400)
2037
+ #define FIT_AUTO_ACTIVITY_DETECT_COUNT 7
2038
+
2039
+ typedef FIT_UINT32Z FIT_SUPPORTED_EXD_SCREEN_LAYOUTS;
2040
+ #define FIT_SUPPORTED_EXD_SCREEN_LAYOUTS_INVALID FIT_UINT32Z_INVALID
2041
+ #define FIT_SUPPORTED_EXD_SCREEN_LAYOUTS_FULL_SCREEN ((FIT_SUPPORTED_EXD_SCREEN_LAYOUTS)0x00000001)
2042
+ #define FIT_SUPPORTED_EXD_SCREEN_LAYOUTS_HALF_VERTICAL ((FIT_SUPPORTED_EXD_SCREEN_LAYOUTS)0x00000002)
2043
+ #define FIT_SUPPORTED_EXD_SCREEN_LAYOUTS_HALF_HORIZONTAL ((FIT_SUPPORTED_EXD_SCREEN_LAYOUTS)0x00000004)
2044
+ #define FIT_SUPPORTED_EXD_SCREEN_LAYOUTS_HALF_VERTICAL_RIGHT_SPLIT ((FIT_SUPPORTED_EXD_SCREEN_LAYOUTS)0x00000008)
2045
+ #define FIT_SUPPORTED_EXD_SCREEN_LAYOUTS_HALF_HORIZONTAL_BOTTOM_SPLIT ((FIT_SUPPORTED_EXD_SCREEN_LAYOUTS)0x00000010)
2046
+ #define FIT_SUPPORTED_EXD_SCREEN_LAYOUTS_FULL_QUARTER_SPLIT ((FIT_SUPPORTED_EXD_SCREEN_LAYOUTS)0x00000020)
2047
+ #define FIT_SUPPORTED_EXD_SCREEN_LAYOUTS_HALF_VERTICAL_LEFT_SPLIT ((FIT_SUPPORTED_EXD_SCREEN_LAYOUTS)0x00000040)
2048
+ #define FIT_SUPPORTED_EXD_SCREEN_LAYOUTS_HALF_HORIZONTAL_TOP_SPLIT ((FIT_SUPPORTED_EXD_SCREEN_LAYOUTS)0x00000080)
2049
+ #define FIT_SUPPORTED_EXD_SCREEN_LAYOUTS_COUNT 8
2050
+
2051
+ typedef FIT_UINT8 FIT_FIT_BASE_TYPE;
2052
+ #define FIT_FIT_BASE_TYPE_INVALID FIT_UINT8_INVALID
2053
+ #define FIT_FIT_BASE_TYPE_ENUM ((FIT_FIT_BASE_TYPE)0)
2054
+ #define FIT_FIT_BASE_TYPE_SINT8 ((FIT_FIT_BASE_TYPE)1)
2055
+ #define FIT_FIT_BASE_TYPE_UINT8 ((FIT_FIT_BASE_TYPE)2)
2056
+ #define FIT_FIT_BASE_TYPE_SINT16 ((FIT_FIT_BASE_TYPE)131)
2057
+ #define FIT_FIT_BASE_TYPE_UINT16 ((FIT_FIT_BASE_TYPE)132)
2058
+ #define FIT_FIT_BASE_TYPE_SINT32 ((FIT_FIT_BASE_TYPE)133)
2059
+ #define FIT_FIT_BASE_TYPE_UINT32 ((FIT_FIT_BASE_TYPE)134)
2060
+ #define FIT_FIT_BASE_TYPE_STRING ((FIT_FIT_BASE_TYPE)7)
2061
+ #define FIT_FIT_BASE_TYPE_FLOAT32 ((FIT_FIT_BASE_TYPE)136)
2062
+ #define FIT_FIT_BASE_TYPE_FLOAT64 ((FIT_FIT_BASE_TYPE)137)
2063
+ #define FIT_FIT_BASE_TYPE_UINT8Z ((FIT_FIT_BASE_TYPE)10)
2064
+ #define FIT_FIT_BASE_TYPE_UINT16Z ((FIT_FIT_BASE_TYPE)139)
2065
+ #define FIT_FIT_BASE_TYPE_UINT32Z ((FIT_FIT_BASE_TYPE)140)
2066
+ #define FIT_FIT_BASE_TYPE_BYTE ((FIT_FIT_BASE_TYPE)13)
2067
+ #define FIT_FIT_BASE_TYPE_SINT64 ((FIT_FIT_BASE_TYPE)142)
2068
+ #define FIT_FIT_BASE_TYPE_UINT64 ((FIT_FIT_BASE_TYPE)143)
2069
+ #define FIT_FIT_BASE_TYPE_UINT64Z ((FIT_FIT_BASE_TYPE)144)
2070
+ #define FIT_FIT_BASE_TYPE_COUNT 17
2071
+
2072
+ typedef FIT_ENUM FIT_TURN_TYPE;
2073
+ #define FIT_TURN_TYPE_INVALID FIT_ENUM_INVALID
2074
+ #define FIT_TURN_TYPE_ARRIVING_IDX ((FIT_TURN_TYPE)0)
2075
+ #define FIT_TURN_TYPE_ARRIVING_LEFT_IDX ((FIT_TURN_TYPE)1)
2076
+ #define FIT_TURN_TYPE_ARRIVING_RIGHT_IDX ((FIT_TURN_TYPE)2)
2077
+ #define FIT_TURN_TYPE_ARRIVING_VIA_IDX ((FIT_TURN_TYPE)3)
2078
+ #define FIT_TURN_TYPE_ARRIVING_VIA_LEFT_IDX ((FIT_TURN_TYPE)4)
2079
+ #define FIT_TURN_TYPE_ARRIVING_VIA_RIGHT_IDX ((FIT_TURN_TYPE)5)
2080
+ #define FIT_TURN_TYPE_BEAR_KEEP_LEFT_IDX ((FIT_TURN_TYPE)6)
2081
+ #define FIT_TURN_TYPE_BEAR_KEEP_RIGHT_IDX ((FIT_TURN_TYPE)7)
2082
+ #define FIT_TURN_TYPE_CONTINUE_IDX ((FIT_TURN_TYPE)8)
2083
+ #define FIT_TURN_TYPE_EXIT_LEFT_IDX ((FIT_TURN_TYPE)9)
2084
+ #define FIT_TURN_TYPE_EXIT_RIGHT_IDX ((FIT_TURN_TYPE)10)
2085
+ #define FIT_TURN_TYPE_FERRY_IDX ((FIT_TURN_TYPE)11)
2086
+ #define FIT_TURN_TYPE_ROUNDABOUT_45_IDX ((FIT_TURN_TYPE)12)
2087
+ #define FIT_TURN_TYPE_ROUNDABOUT_90_IDX ((FIT_TURN_TYPE)13)
2088
+ #define FIT_TURN_TYPE_ROUNDABOUT_135_IDX ((FIT_TURN_TYPE)14)
2089
+ #define FIT_TURN_TYPE_ROUNDABOUT_180_IDX ((FIT_TURN_TYPE)15)
2090
+ #define FIT_TURN_TYPE_ROUNDABOUT_225_IDX ((FIT_TURN_TYPE)16)
2091
+ #define FIT_TURN_TYPE_ROUNDABOUT_270_IDX ((FIT_TURN_TYPE)17)
2092
+ #define FIT_TURN_TYPE_ROUNDABOUT_315_IDX ((FIT_TURN_TYPE)18)
2093
+ #define FIT_TURN_TYPE_ROUNDABOUT_360_IDX ((FIT_TURN_TYPE)19)
2094
+ #define FIT_TURN_TYPE_ROUNDABOUT_NEG_45_IDX ((FIT_TURN_TYPE)20)
2095
+ #define FIT_TURN_TYPE_ROUNDABOUT_NEG_90_IDX ((FIT_TURN_TYPE)21)
2096
+ #define FIT_TURN_TYPE_ROUNDABOUT_NEG_135_IDX ((FIT_TURN_TYPE)22)
2097
+ #define FIT_TURN_TYPE_ROUNDABOUT_NEG_180_IDX ((FIT_TURN_TYPE)23)
2098
+ #define FIT_TURN_TYPE_ROUNDABOUT_NEG_225_IDX ((FIT_TURN_TYPE)24)
2099
+ #define FIT_TURN_TYPE_ROUNDABOUT_NEG_270_IDX ((FIT_TURN_TYPE)25)
2100
+ #define FIT_TURN_TYPE_ROUNDABOUT_NEG_315_IDX ((FIT_TURN_TYPE)26)
2101
+ #define FIT_TURN_TYPE_ROUNDABOUT_NEG_360_IDX ((FIT_TURN_TYPE)27)
2102
+ #define FIT_TURN_TYPE_ROUNDABOUT_GENERIC_IDX ((FIT_TURN_TYPE)28)
2103
+ #define FIT_TURN_TYPE_ROUNDABOUT_NEG_GENERIC_IDX ((FIT_TURN_TYPE)29)
2104
+ #define FIT_TURN_TYPE_SHARP_TURN_LEFT_IDX ((FIT_TURN_TYPE)30)
2105
+ #define FIT_TURN_TYPE_SHARP_TURN_RIGHT_IDX ((FIT_TURN_TYPE)31)
2106
+ #define FIT_TURN_TYPE_TURN_LEFT_IDX ((FIT_TURN_TYPE)32)
2107
+ #define FIT_TURN_TYPE_TURN_RIGHT_IDX ((FIT_TURN_TYPE)33)
2108
+ #define FIT_TURN_TYPE_UTURN_LEFT_IDX ((FIT_TURN_TYPE)34)
2109
+ #define FIT_TURN_TYPE_UTURN_RIGHT_IDX ((FIT_TURN_TYPE)35)
2110
+ #define FIT_TURN_TYPE_ICON_INV_IDX ((FIT_TURN_TYPE)36)
2111
+ #define FIT_TURN_TYPE_ICON_IDX_CNT ((FIT_TURN_TYPE)37)
2112
+ #define FIT_TURN_TYPE_COUNT 38
2113
+
2114
+ typedef FIT_ENUM FIT_BIKE_LIGHT_BEAM_ANGLE_MODE;
2115
+ #define FIT_BIKE_LIGHT_BEAM_ANGLE_MODE_INVALID FIT_ENUM_INVALID
2116
+ #define FIT_BIKE_LIGHT_BEAM_ANGLE_MODE_MANUAL ((FIT_BIKE_LIGHT_BEAM_ANGLE_MODE)0)
2117
+ #define FIT_BIKE_LIGHT_BEAM_ANGLE_MODE_AUTO ((FIT_BIKE_LIGHT_BEAM_ANGLE_MODE)1)
2118
+ #define FIT_BIKE_LIGHT_BEAM_ANGLE_MODE_COUNT 2
2119
+
2120
+ typedef FIT_UINT16 FIT_FIT_BASE_UNIT;
2121
+ #define FIT_FIT_BASE_UNIT_INVALID FIT_UINT16_INVALID
2122
+ #define FIT_FIT_BASE_UNIT_OTHER ((FIT_FIT_BASE_UNIT)0)
2123
+ #define FIT_FIT_BASE_UNIT_COUNT 1
2124
+
985
2125
 
986
2126
  ///////////////////////////////////////////////////////////////////////
987
2127
  // Message Conversion Structures
@@ -1001,7 +2141,7 @@ typedef struct
1001
2141
  FIT_UINT8 arch;
1002
2142
  FIT_MESG_NUM global_mesg_num;
1003
2143
  FIT_UINT8 num_fields;
1004
- FIT_FIELD_CONVERT fields[81];
2144
+ FIT_FIELD_CONVERT fields[89];
1005
2145
  } FIT_MESG_CONVERT;
1006
2146
 
1007
2147
 
@@ -1009,8 +2149,8 @@ typedef struct
1009
2149
  // Messages
1010
2150
  ///////////////////////////////////////////////////////////////////////
1011
2151
 
1012
- #define FIT_MESG_SIZE 181
1013
- #define FIT_MESG_DEF_SIZE 248
2152
+ #define FIT_MESG_SIZE 254
2153
+ #define FIT_MESG_DEF_SIZE 272
1014
2154
 
1015
2155
  // pad message
1016
2156
 
@@ -1027,23 +2167,26 @@ typedef struct
1027
2167
 
1028
2168
  // file_id message
1029
2169
 
1030
- #define FIT_FILE_ID_MESG_SIZE 15
1031
- #define FIT_FILE_ID_MESG_DEF_SIZE 23
2170
+ #define FIT_FILE_ID_MESG_SIZE 35
2171
+ #define FIT_FILE_ID_MESG_DEF_SIZE 26
2172
+ #define FIT_FILE_ID_MESG_PRODUCT_NAME_COUNT 20
1032
2173
 
1033
2174
  typedef struct
1034
2175
  {
1035
- FIT_UINT32Z serial_number; //
2176
+ FIT_UINT32Z serial_number; //
1036
2177
  FIT_DATE_TIME time_created; // Only set for files that are can be created/erased.
1037
- FIT_MANUFACTURER manufacturer; //
1038
- FIT_UINT16 product; //
2178
+ FIT_STRING product_name[FIT_FILE_ID_MESG_PRODUCT_NAME_COUNT]; // Optional free form string to indicate the devices name or model
2179
+ FIT_MANUFACTURER manufacturer; //
2180
+ FIT_UINT16 product; //
1039
2181
  FIT_UINT16 number; // Only set for files that are not created/erased.
1040
- FIT_FILE type; //
2182
+ FIT_FILE type; //
1041
2183
  } FIT_FILE_ID_MESG;
1042
2184
 
1043
2185
  typedef enum
1044
2186
  {
1045
2187
  FIT_FILE_ID_FIELD_NUM_SERIAL_NUMBER = 3,
1046
2188
  FIT_FILE_ID_FIELD_NUM_TIME_CREATED = 4,
2189
+ FIT_FILE_ID_FIELD_NUM_PRODUCT_NAME = 8,
1047
2190
  FIT_FILE_ID_FIELD_NUM_MANUFACTURER = 1,
1048
2191
  FIT_FILE_ID_FIELD_NUM_PRODUCT = 2,
1049
2192
  FIT_FILE_ID_FIELD_NUM_NUMBER = 5,
@@ -1054,6 +2197,7 @@ typedef enum
1054
2197
  {
1055
2198
  FIT_FILE_ID_MESG_SERIAL_NUMBER,
1056
2199
  FIT_FILE_ID_MESG_TIME_CREATED,
2200
+ FIT_FILE_ID_MESG_PRODUCT_NAME,
1057
2201
  FIT_FILE_ID_MESG_MANUFACTURER,
1058
2202
  FIT_FILE_ID_MESG_PRODUCT,
1059
2203
  FIT_FILE_ID_MESG_NUMBER,
@@ -1077,8 +2221,8 @@ typedef struct
1077
2221
 
1078
2222
  typedef struct
1079
2223
  {
1080
- FIT_UINT16 software_version; //
1081
- FIT_UINT8 hardware_version; //
2224
+ FIT_UINT16 software_version; //
2225
+ FIT_UINT8 hardware_version; //
1082
2226
  } FIT_FILE_CREATOR_MESG;
1083
2227
 
1084
2228
  typedef enum
@@ -1111,9 +2255,9 @@ typedef struct
1111
2255
 
1112
2256
  typedef struct
1113
2257
  {
1114
- FIT_STRING part_number[FIT_SOFTWARE_MESG_PART_NUMBER_COUNT]; //
1115
- FIT_MESSAGE_INDEX message_index; //
1116
- FIT_UINT16 version; //
2258
+ FIT_STRING part_number[FIT_SOFTWARE_MESG_PART_NUMBER_COUNT]; //
2259
+ FIT_MESSAGE_INDEX message_index; //
2260
+ FIT_UINT16 version; //
1117
2261
  } FIT_SOFTWARE_MESG;
1118
2262
 
1119
2263
  typedef enum
@@ -1147,8 +2291,8 @@ typedef struct
1147
2291
 
1148
2292
  typedef struct
1149
2293
  {
1150
- FIT_MANUFACTURER manufacturer; //
1151
- FIT_UINT16 product; //
2294
+ FIT_MANUFACTURER manufacturer; //
2295
+ FIT_UINT16 product; //
1152
2296
  } FIT_SLAVE_DEVICE_MESG;
1153
2297
 
1154
2298
  typedef enum
@@ -1183,8 +2327,8 @@ typedef struct
1183
2327
  typedef struct
1184
2328
  {
1185
2329
  FIT_UINT8Z languages[FIT_CAPABILITIES_MESG_LANGUAGES_COUNT]; // Use language_bits_x types where x is index of array.
1186
- FIT_WORKOUT_CAPABILITIES workouts_supported; //
1187
- FIT_CONNECTIVITY_CAPABILITIES connectivity_supported; //
2330
+ FIT_WORKOUT_CAPABILITIES workouts_supported; //
2331
+ FIT_CONNECTIVITY_CAPABILITIES connectivity_supported; //
1188
2332
  FIT_SPORT_BITS_0 sports[FIT_CAPABILITIES_MESG_SPORTS_COUNT]; // Use sport_bits_x types where x is index of array.
1189
2333
  } FIT_CAPABILITIES_MESG;
1190
2334
 
@@ -1222,12 +2366,12 @@ typedef struct
1222
2366
 
1223
2367
  typedef struct
1224
2368
  {
1225
- FIT_STRING directory[FIT_FILE_CAPABILITIES_MESG_DIRECTORY_COUNT]; //
1226
- FIT_UINT32 max_size; // bytes,
1227
- FIT_MESSAGE_INDEX message_index; //
1228
- FIT_UINT16 max_count; //
1229
- FIT_FILE type; //
1230
- FIT_FILE_FLAGS flags; //
2369
+ FIT_STRING directory[FIT_FILE_CAPABILITIES_MESG_DIRECTORY_COUNT]; //
2370
+ FIT_UINT32 max_size; // 1 * bytes + 0,
2371
+ FIT_MESSAGE_INDEX message_index; //
2372
+ FIT_UINT16 max_count; //
2373
+ FIT_FILE type; //
2374
+ FIT_FILE_FLAGS flags; //
1231
2375
  } FIT_FILE_CAPABILITIES_MESG;
1232
2376
 
1233
2377
  typedef enum
@@ -1267,11 +2411,11 @@ typedef struct
1267
2411
 
1268
2412
  typedef struct
1269
2413
  {
1270
- FIT_MESSAGE_INDEX message_index; //
1271
- FIT_MESG_NUM mesg_num; //
1272
- FIT_UINT16 count; //
1273
- FIT_FILE file; //
1274
- FIT_MESG_COUNT count_type; //
2414
+ FIT_MESSAGE_INDEX message_index; //
2415
+ FIT_MESG_NUM mesg_num; //
2416
+ FIT_UINT16 count; //
2417
+ FIT_FILE file; //
2418
+ FIT_MESG_COUNT count_type; //
1275
2419
  } FIT_MESG_CAPABILITIES_MESG;
1276
2420
 
1277
2421
  typedef enum
@@ -1309,11 +2453,11 @@ typedef struct
1309
2453
 
1310
2454
  typedef struct
1311
2455
  {
1312
- FIT_MESSAGE_INDEX message_index; //
1313
- FIT_MESG_NUM mesg_num; //
1314
- FIT_UINT16 count; //
1315
- FIT_FILE file; //
1316
- FIT_UINT8 field_num; //
2456
+ FIT_MESSAGE_INDEX message_index; //
2457
+ FIT_MESG_NUM mesg_num; //
2458
+ FIT_UINT16 count; //
2459
+ FIT_FILE file; //
2460
+ FIT_UINT8 field_num; //
1317
2461
  } FIT_FIELD_CAPABILITIES_MESG;
1318
2462
 
1319
2463
  typedef enum
@@ -1346,22 +2490,72 @@ typedef struct
1346
2490
 
1347
2491
  // device_settings message
1348
2492
 
1349
- #define FIT_DEVICE_SETTINGS_MESG_SIZE 4
1350
- #define FIT_DEVICE_SETTINGS_MESG_DEF_SIZE 8
2493
+ #define FIT_DEVICE_SETTINGS_MESG_SIZE 35
2494
+ #define FIT_DEVICE_SETTINGS_MESG_DEF_SIZE 53
2495
+ #define FIT_DEVICE_SETTINGS_MESG_TIME_OFFSET_COUNT 2
2496
+ #define FIT_DEVICE_SETTINGS_MESG_PAGES_ENABLED_COUNT 1
2497
+ #define FIT_DEVICE_SETTINGS_MESG_DEFAULT_PAGE_COUNT 1
2498
+ #define FIT_DEVICE_SETTINGS_MESG_TIME_MODE_COUNT 2
2499
+ #define FIT_DEVICE_SETTINGS_MESG_TIME_ZONE_OFFSET_COUNT 2
1351
2500
 
1352
2501
  typedef struct
1353
2502
  {
1354
2503
  FIT_UINT32 utc_offset; // Offset from system time. Required to convert timestamp from system time to UTC.
2504
+ FIT_UINT32 time_offset[FIT_DEVICE_SETTINGS_MESG_TIME_OFFSET_COUNT]; // 1 * s + 0, Offset from system time.
2505
+ FIT_DATE_TIME clock_time; // UTC timestamp used to set the devices clock and date
2506
+ FIT_UINT16 pages_enabled[FIT_DEVICE_SETTINGS_MESG_PAGES_ENABLED_COUNT]; // Bitfield to configure enabled screens for each supported loop
2507
+ FIT_UINT16 default_page[FIT_DEVICE_SETTINGS_MESG_DEFAULT_PAGE_COUNT]; // Bitfield to indicate one page as default for each supported loop
2508
+ FIT_UINT16 autosync_min_steps; // 1 * steps + 0, Minimum steps before an autosync can occur
2509
+ FIT_UINT16 autosync_min_time; // 1 * minutes + 0, Minimum minutes before an autosync can occur
2510
+ FIT_UINT8 active_time_zone; // Index into time zone arrays.
2511
+ FIT_TIME_MODE time_mode[FIT_DEVICE_SETTINGS_MESG_TIME_MODE_COUNT]; // Display mode for the time
2512
+ FIT_SINT8 time_zone_offset[FIT_DEVICE_SETTINGS_MESG_TIME_ZONE_OFFSET_COUNT]; // 4 * hr + 0, timezone offset in 1/4 hour increments
2513
+ FIT_BACKLIGHT_MODE backlight_mode; // Mode for backlight
2514
+ FIT_BOOL activity_tracker_enabled; // Enabled state of the activity tracker functionality
2515
+ FIT_BOOL move_alert_enabled; // Enabled state of the move alert
2516
+ FIT_DATE_MODE date_mode; // Display mode for the date
2517
+ FIT_DISPLAY_ORIENTATION display_orientation; //
2518
+ FIT_SIDE mounting_side; //
1355
2519
  } FIT_DEVICE_SETTINGS_MESG;
1356
2520
 
1357
2521
  typedef enum
1358
2522
  {
1359
- FIT_DEVICE_SETTINGS_FIELD_NUM_UTC_OFFSET = 1
2523
+ FIT_DEVICE_SETTINGS_FIELD_NUM_UTC_OFFSET = 1,
2524
+ FIT_DEVICE_SETTINGS_FIELD_NUM_TIME_OFFSET = 2,
2525
+ FIT_DEVICE_SETTINGS_FIELD_NUM_CLOCK_TIME = 39,
2526
+ FIT_DEVICE_SETTINGS_FIELD_NUM_PAGES_ENABLED = 40,
2527
+ FIT_DEVICE_SETTINGS_FIELD_NUM_DEFAULT_PAGE = 57,
2528
+ FIT_DEVICE_SETTINGS_FIELD_NUM_AUTOSYNC_MIN_STEPS = 58,
2529
+ FIT_DEVICE_SETTINGS_FIELD_NUM_AUTOSYNC_MIN_TIME = 59,
2530
+ FIT_DEVICE_SETTINGS_FIELD_NUM_ACTIVE_TIME_ZONE = 0,
2531
+ FIT_DEVICE_SETTINGS_FIELD_NUM_TIME_MODE = 4,
2532
+ FIT_DEVICE_SETTINGS_FIELD_NUM_TIME_ZONE_OFFSET = 5,
2533
+ FIT_DEVICE_SETTINGS_FIELD_NUM_BACKLIGHT_MODE = 12,
2534
+ FIT_DEVICE_SETTINGS_FIELD_NUM_ACTIVITY_TRACKER_ENABLED = 36,
2535
+ FIT_DEVICE_SETTINGS_FIELD_NUM_MOVE_ALERT_ENABLED = 46,
2536
+ FIT_DEVICE_SETTINGS_FIELD_NUM_DATE_MODE = 47,
2537
+ FIT_DEVICE_SETTINGS_FIELD_NUM_DISPLAY_ORIENTATION = 55,
2538
+ FIT_DEVICE_SETTINGS_FIELD_NUM_MOUNTING_SIDE = 56
1360
2539
  } FIT_DEVICE_SETTINGS_FIELD_NUM;
1361
2540
 
1362
2541
  typedef enum
1363
2542
  {
1364
2543
  FIT_DEVICE_SETTINGS_MESG_UTC_OFFSET,
2544
+ FIT_DEVICE_SETTINGS_MESG_TIME_OFFSET,
2545
+ FIT_DEVICE_SETTINGS_MESG_CLOCK_TIME,
2546
+ FIT_DEVICE_SETTINGS_MESG_PAGES_ENABLED,
2547
+ FIT_DEVICE_SETTINGS_MESG_DEFAULT_PAGE,
2548
+ FIT_DEVICE_SETTINGS_MESG_AUTOSYNC_MIN_STEPS,
2549
+ FIT_DEVICE_SETTINGS_MESG_AUTOSYNC_MIN_TIME,
2550
+ FIT_DEVICE_SETTINGS_MESG_ACTIVE_TIME_ZONE,
2551
+ FIT_DEVICE_SETTINGS_MESG_TIME_MODE,
2552
+ FIT_DEVICE_SETTINGS_MESG_TIME_ZONE_OFFSET,
2553
+ FIT_DEVICE_SETTINGS_MESG_BACKLIGHT_MODE,
2554
+ FIT_DEVICE_SETTINGS_MESG_ACTIVITY_TRACKER_ENABLED,
2555
+ FIT_DEVICE_SETTINGS_MESG_MOVE_ALERT_ENABLED,
2556
+ FIT_DEVICE_SETTINGS_MESG_DATE_MODE,
2557
+ FIT_DEVICE_SETTINGS_MESG_DISPLAY_ORIENTATION,
2558
+ FIT_DEVICE_SETTINGS_MESG_MOUNTING_SIDE,
1365
2559
  FIT_DEVICE_SETTINGS_MESG_FIELDS
1366
2560
  } FIT_DEVICE_SETTINGS_MESG_FIELD;
1367
2561
 
@@ -1376,36 +2570,38 @@ typedef struct
1376
2570
 
1377
2571
  // user_profile message
1378
2572
 
1379
- #define FIT_USER_PROFILE_MESG_SIZE 46
1380
- #define FIT_USER_PROFILE_MESG_DEF_SIZE 74
2573
+ #define FIT_USER_PROFILE_MESG_SIZE 50
2574
+ #define FIT_USER_PROFILE_MESG_DEF_SIZE 80
1381
2575
  #define FIT_USER_PROFILE_MESG_FRIENDLY_NAME_COUNT 16
1382
2576
  #define FIT_USER_PROFILE_MESG_GLOBAL_ID_COUNT 6
1383
2577
 
1384
2578
  typedef struct
1385
2579
  {
1386
- FIT_STRING friendly_name[FIT_USER_PROFILE_MESG_FRIENDLY_NAME_COUNT]; //
1387
- FIT_MESSAGE_INDEX message_index; //
1388
- FIT_UINT16 weight; // 10 * kg,
1389
- FIT_USER_LOCAL_ID local_id; //
1390
- FIT_GENDER gender; //
1391
- FIT_UINT8 age; // years,
1392
- FIT_UINT8 height; // 100 * m,
1393
- FIT_LANGUAGE language; //
1394
- FIT_DISPLAY_MEASURE elev_setting; //
1395
- FIT_DISPLAY_MEASURE weight_setting; //
1396
- FIT_UINT8 resting_heart_rate; // bpm,
1397
- FIT_UINT8 default_max_running_heart_rate; // bpm,
1398
- FIT_UINT8 default_max_biking_heart_rate; // bpm,
1399
- FIT_UINT8 default_max_heart_rate; // bpm,
1400
- FIT_DISPLAY_HEART hr_setting; //
1401
- FIT_DISPLAY_MEASURE speed_setting; //
1402
- FIT_DISPLAY_MEASURE dist_setting; //
1403
- FIT_DISPLAY_POWER power_setting; //
1404
- FIT_ACTIVITY_CLASS activity_class; //
1405
- FIT_DISPLAY_POSITION position_setting; //
1406
- FIT_DISPLAY_MEASURE temperature_setting; //
1407
- FIT_BYTE global_id[FIT_USER_PROFILE_MESG_GLOBAL_ID_COUNT]; //
1408
- FIT_DISPLAY_MEASURE height_setting; //
2580
+ FIT_STRING friendly_name[FIT_USER_PROFILE_MESG_FRIENDLY_NAME_COUNT]; //
2581
+ FIT_MESSAGE_INDEX message_index; //
2582
+ FIT_UINT16 weight; // 10 * kg + 0,
2583
+ FIT_USER_LOCAL_ID local_id; //
2584
+ FIT_UINT16 user_running_step_length; // 1000 * m + 0, User defined running step length set to 0 for auto length
2585
+ FIT_UINT16 user_walking_step_length; // 1000 * m + 0, User defined walking step length set to 0 for auto length
2586
+ FIT_GENDER gender; //
2587
+ FIT_UINT8 age; // 1 * years + 0,
2588
+ FIT_UINT8 height; // 100 * m + 0,
2589
+ FIT_LANGUAGE language; //
2590
+ FIT_DISPLAY_MEASURE elev_setting; //
2591
+ FIT_DISPLAY_MEASURE weight_setting; //
2592
+ FIT_UINT8 resting_heart_rate; // 1 * bpm + 0,
2593
+ FIT_UINT8 default_max_running_heart_rate; // 1 * bpm + 0,
2594
+ FIT_UINT8 default_max_biking_heart_rate; // 1 * bpm + 0,
2595
+ FIT_UINT8 default_max_heart_rate; // 1 * bpm + 0,
2596
+ FIT_DISPLAY_HEART hr_setting; //
2597
+ FIT_DISPLAY_MEASURE speed_setting; //
2598
+ FIT_DISPLAY_MEASURE dist_setting; //
2599
+ FIT_DISPLAY_POWER power_setting; //
2600
+ FIT_ACTIVITY_CLASS activity_class; //
2601
+ FIT_DISPLAY_POSITION position_setting; //
2602
+ FIT_DISPLAY_MEASURE temperature_setting; //
2603
+ FIT_BYTE global_id[FIT_USER_PROFILE_MESG_GLOBAL_ID_COUNT]; //
2604
+ FIT_DISPLAY_MEASURE height_setting; //
1409
2605
  } FIT_USER_PROFILE_MESG;
1410
2606
 
1411
2607
  typedef enum
@@ -1414,6 +2610,8 @@ typedef enum
1414
2610
  FIT_USER_PROFILE_FIELD_NUM_MESSAGE_INDEX = 254,
1415
2611
  FIT_USER_PROFILE_FIELD_NUM_WEIGHT = 4,
1416
2612
  FIT_USER_PROFILE_FIELD_NUM_LOCAL_ID = 22,
2613
+ FIT_USER_PROFILE_FIELD_NUM_USER_RUNNING_STEP_LENGTH = 31,
2614
+ FIT_USER_PROFILE_FIELD_NUM_USER_WALKING_STEP_LENGTH = 32,
1417
2615
  FIT_USER_PROFILE_FIELD_NUM_GENDER = 1,
1418
2616
  FIT_USER_PROFILE_FIELD_NUM_AGE = 2,
1419
2617
  FIT_USER_PROFILE_FIELD_NUM_HEIGHT = 3,
@@ -1441,6 +2639,8 @@ typedef enum
1441
2639
  FIT_USER_PROFILE_MESG_MESSAGE_INDEX,
1442
2640
  FIT_USER_PROFILE_MESG_WEIGHT,
1443
2641
  FIT_USER_PROFILE_MESG_LOCAL_ID,
2642
+ FIT_USER_PROFILE_MESG_USER_RUNNING_STEP_LENGTH,
2643
+ FIT_USER_PROFILE_MESG_USER_WALKING_STEP_LENGTH,
1444
2644
  FIT_USER_PROFILE_MESG_GENDER,
1445
2645
  FIT_USER_PROFILE_MESG_AGE,
1446
2646
  FIT_USER_PROFILE_MESG_HEIGHT,
@@ -1479,11 +2679,11 @@ typedef struct
1479
2679
 
1480
2680
  typedef struct
1481
2681
  {
1482
- FIT_MESSAGE_INDEX message_index; //
1483
- FIT_UINT16Z hrm_ant_id; //
1484
- FIT_BOOL enabled; //
1485
- FIT_BOOL log_hrv; //
1486
- FIT_UINT8Z hrm_ant_id_trans_type; //
2682
+ FIT_MESSAGE_INDEX message_index; //
2683
+ FIT_UINT16Z hrm_ant_id; //
2684
+ FIT_BOOL enabled; //
2685
+ FIT_BOOL log_hrv; //
2686
+ FIT_UINT8Z hrm_ant_id_trans_type; //
1487
2687
  } FIT_HRM_PROFILE_MESG;
1488
2688
 
1489
2689
  typedef enum
@@ -1521,13 +2721,13 @@ typedef struct
1521
2721
 
1522
2722
  typedef struct
1523
2723
  {
1524
- FIT_UINT32 odometer; // 100 * m,
1525
- FIT_MESSAGE_INDEX message_index; //
1526
- FIT_UINT16Z sdm_ant_id; //
1527
- FIT_UINT16 sdm_cal_factor; // 10 * %,
1528
- FIT_BOOL enabled; //
2724
+ FIT_UINT32 odometer; // 100 * m + 0,
2725
+ FIT_MESSAGE_INDEX message_index; //
2726
+ FIT_UINT16Z sdm_ant_id; //
2727
+ FIT_UINT16 sdm_cal_factor; // 10 * % + 0,
2728
+ FIT_BOOL enabled; //
1529
2729
  FIT_BOOL speed_source; // Use footpod for speed source instead of GPS
1530
- FIT_UINT8Z sdm_ant_id_trans_type; //
2730
+ FIT_UINT8Z sdm_ant_id_trans_type; //
1531
2731
  FIT_UINT8 odometer_rollover; // Rollover counter that can be used to extend the odometer
1532
2732
  } FIT_SDM_PROFILE_MESG;
1533
2733
 
@@ -1567,45 +2767,46 @@ typedef struct
1567
2767
 
1568
2768
  // bike_profile message
1569
2769
 
1570
- #define FIT_BIKE_PROFILE_MESG_SIZE 58
1571
- #define FIT_BIKE_PROFILE_MESG_DEF_SIZE 98
2770
+ #define FIT_BIKE_PROFILE_MESG_SIZE 59
2771
+ #define FIT_BIKE_PROFILE_MESG_DEF_SIZE 101
1572
2772
  #define FIT_BIKE_PROFILE_MESG_NAME_COUNT 16
1573
2773
  #define FIT_BIKE_PROFILE_MESG_FRONT_GEAR_COUNT 1
1574
2774
  #define FIT_BIKE_PROFILE_MESG_REAR_GEAR_COUNT 1
1575
2775
 
1576
2776
  typedef struct
1577
2777
  {
1578
- FIT_STRING name[FIT_BIKE_PROFILE_MESG_NAME_COUNT]; //
1579
- FIT_UINT32 odometer; // 100 * m,
1580
- FIT_MESSAGE_INDEX message_index; //
1581
- FIT_UINT16Z bike_spd_ant_id; //
1582
- FIT_UINT16Z bike_cad_ant_id; //
1583
- FIT_UINT16Z bike_spdcad_ant_id; //
1584
- FIT_UINT16Z bike_power_ant_id; //
1585
- FIT_UINT16 custom_wheelsize; // 1000 * m,
1586
- FIT_UINT16 auto_wheelsize; // 1000 * m,
1587
- FIT_UINT16 bike_weight; // 10 * kg,
1588
- FIT_UINT16 power_cal_factor; // 10 * %,
1589
- FIT_SPORT sport; //
1590
- FIT_SUB_SPORT sub_sport; //
1591
- FIT_BOOL auto_wheel_cal; //
1592
- FIT_BOOL auto_power_zero; //
1593
- FIT_UINT8 id; //
1594
- FIT_BOOL spd_enabled; //
1595
- FIT_BOOL cad_enabled; //
1596
- FIT_BOOL spdcad_enabled; //
1597
- FIT_BOOL power_enabled; //
2778
+ FIT_STRING name[FIT_BIKE_PROFILE_MESG_NAME_COUNT]; //
2779
+ FIT_UINT32 odometer; // 100 * m + 0,
2780
+ FIT_MESSAGE_INDEX message_index; //
2781
+ FIT_UINT16Z bike_spd_ant_id; //
2782
+ FIT_UINT16Z bike_cad_ant_id; //
2783
+ FIT_UINT16Z bike_spdcad_ant_id; //
2784
+ FIT_UINT16Z bike_power_ant_id; //
2785
+ FIT_UINT16 custom_wheelsize; // 1000 * m + 0,
2786
+ FIT_UINT16 auto_wheelsize; // 1000 * m + 0,
2787
+ FIT_UINT16 bike_weight; // 10 * kg + 0,
2788
+ FIT_UINT16 power_cal_factor; // 10 * % + 0,
2789
+ FIT_SPORT sport; //
2790
+ FIT_SUB_SPORT sub_sport; //
2791
+ FIT_BOOL auto_wheel_cal; //
2792
+ FIT_BOOL auto_power_zero; //
2793
+ FIT_UINT8 id; //
2794
+ FIT_BOOL spd_enabled; //
2795
+ FIT_BOOL cad_enabled; //
2796
+ FIT_BOOL spdcad_enabled; //
2797
+ FIT_BOOL power_enabled; //
1598
2798
  FIT_UINT8 crank_length; // 2 * mm + -110,
1599
- FIT_BOOL enabled; //
1600
- FIT_UINT8Z bike_spd_ant_id_trans_type; //
1601
- FIT_UINT8Z bike_cad_ant_id_trans_type; //
1602
- FIT_UINT8Z bike_spdcad_ant_id_trans_type; //
1603
- FIT_UINT8Z bike_power_ant_id_trans_type; //
2799
+ FIT_BOOL enabled; //
2800
+ FIT_UINT8Z bike_spd_ant_id_trans_type; //
2801
+ FIT_UINT8Z bike_cad_ant_id_trans_type; //
2802
+ FIT_UINT8Z bike_spdcad_ant_id_trans_type; //
2803
+ FIT_UINT8Z bike_power_ant_id_trans_type; //
1604
2804
  FIT_UINT8 odometer_rollover; // Rollover counter that can be used to extend the odometer
1605
2805
  FIT_UINT8Z front_gear_num; // Number of front gears
1606
2806
  FIT_UINT8Z front_gear[FIT_BIKE_PROFILE_MESG_FRONT_GEAR_COUNT]; // Number of teeth on each gear 0 is innermost
1607
2807
  FIT_UINT8Z rear_gear_num; // Number of rear gears
1608
2808
  FIT_UINT8Z rear_gear[FIT_BIKE_PROFILE_MESG_REAR_GEAR_COUNT]; // Number of teeth on each gear 0 is innermost
2809
+ FIT_BOOL shimano_di2_enabled; //
1609
2810
  } FIT_BIKE_PROFILE_MESG;
1610
2811
 
1611
2812
  typedef enum
@@ -1640,7 +2841,8 @@ typedef enum
1640
2841
  FIT_BIKE_PROFILE_FIELD_NUM_FRONT_GEAR_NUM = 38,
1641
2842
  FIT_BIKE_PROFILE_FIELD_NUM_FRONT_GEAR = 39,
1642
2843
  FIT_BIKE_PROFILE_FIELD_NUM_REAR_GEAR_NUM = 40,
1643
- FIT_BIKE_PROFILE_FIELD_NUM_REAR_GEAR = 41
2844
+ FIT_BIKE_PROFILE_FIELD_NUM_REAR_GEAR = 41,
2845
+ FIT_BIKE_PROFILE_FIELD_NUM_SHIMANO_DI2_ENABLED = 44
1644
2846
  } FIT_BIKE_PROFILE_FIELD_NUM;
1645
2847
 
1646
2848
  typedef enum
@@ -1676,6 +2878,7 @@ typedef enum
1676
2878
  FIT_BIKE_PROFILE_MESG_FRONT_GEAR,
1677
2879
  FIT_BIKE_PROFILE_MESG_REAR_GEAR_NUM,
1678
2880
  FIT_BIKE_PROFILE_MESG_REAR_GEAR,
2881
+ FIT_BIKE_PROFILE_MESG_SHIMANO_DI2_ENABLED,
1679
2882
  FIT_BIKE_PROFILE_MESG_FIELDS
1680
2883
  } FIT_BIKE_PROFILE_MESG_FIELD;
1681
2884
 
@@ -1688,6 +2891,73 @@ typedef struct
1688
2891
  FIT_UINT8 fields[FIT_BIKE_PROFILE_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
1689
2892
  } FIT_BIKE_PROFILE_MESG_DEF;
1690
2893
 
2894
+ // connectivity message
2895
+
2896
+ #define FIT_CONNECTIVITY_MESG_SIZE 36
2897
+ #define FIT_CONNECTIVITY_MESG_DEF_SIZE 44
2898
+ #define FIT_CONNECTIVITY_MESG_NAME_COUNT 24
2899
+
2900
+ typedef struct
2901
+ {
2902
+ FIT_STRING name[FIT_CONNECTIVITY_MESG_NAME_COUNT]; //
2903
+ FIT_BOOL bluetooth_enabled; // Use Bluetooth for connectivity features
2904
+ FIT_BOOL bluetooth_le_enabled; // Use Bluetooth Low Energy for connectivity features
2905
+ FIT_BOOL ant_enabled; // Use ANT for connectivity features
2906
+ FIT_BOOL live_tracking_enabled; //
2907
+ FIT_BOOL weather_conditions_enabled; //
2908
+ FIT_BOOL weather_alerts_enabled; //
2909
+ FIT_BOOL auto_activity_upload_enabled; //
2910
+ FIT_BOOL course_download_enabled; //
2911
+ FIT_BOOL workout_download_enabled; //
2912
+ FIT_BOOL gps_ephemeris_download_enabled; //
2913
+ FIT_BOOL incident_detection_enabled; //
2914
+ FIT_BOOL grouptrack_enabled; //
2915
+ } FIT_CONNECTIVITY_MESG;
2916
+
2917
+ typedef enum
2918
+ {
2919
+ FIT_CONNECTIVITY_FIELD_NUM_NAME = 3,
2920
+ FIT_CONNECTIVITY_FIELD_NUM_BLUETOOTH_ENABLED = 0,
2921
+ FIT_CONNECTIVITY_FIELD_NUM_BLUETOOTH_LE_ENABLED = 1,
2922
+ FIT_CONNECTIVITY_FIELD_NUM_ANT_ENABLED = 2,
2923
+ FIT_CONNECTIVITY_FIELD_NUM_LIVE_TRACKING_ENABLED = 4,
2924
+ FIT_CONNECTIVITY_FIELD_NUM_WEATHER_CONDITIONS_ENABLED = 5,
2925
+ FIT_CONNECTIVITY_FIELD_NUM_WEATHER_ALERTS_ENABLED = 6,
2926
+ FIT_CONNECTIVITY_FIELD_NUM_AUTO_ACTIVITY_UPLOAD_ENABLED = 7,
2927
+ FIT_CONNECTIVITY_FIELD_NUM_COURSE_DOWNLOAD_ENABLED = 8,
2928
+ FIT_CONNECTIVITY_FIELD_NUM_WORKOUT_DOWNLOAD_ENABLED = 9,
2929
+ FIT_CONNECTIVITY_FIELD_NUM_GPS_EPHEMERIS_DOWNLOAD_ENABLED = 10,
2930
+ FIT_CONNECTIVITY_FIELD_NUM_INCIDENT_DETECTION_ENABLED = 11,
2931
+ FIT_CONNECTIVITY_FIELD_NUM_GROUPTRACK_ENABLED = 12
2932
+ } FIT_CONNECTIVITY_FIELD_NUM;
2933
+
2934
+ typedef enum
2935
+ {
2936
+ FIT_CONNECTIVITY_MESG_NAME,
2937
+ FIT_CONNECTIVITY_MESG_BLUETOOTH_ENABLED,
2938
+ FIT_CONNECTIVITY_MESG_BLUETOOTH_LE_ENABLED,
2939
+ FIT_CONNECTIVITY_MESG_ANT_ENABLED,
2940
+ FIT_CONNECTIVITY_MESG_LIVE_TRACKING_ENABLED,
2941
+ FIT_CONNECTIVITY_MESG_WEATHER_CONDITIONS_ENABLED,
2942
+ FIT_CONNECTIVITY_MESG_WEATHER_ALERTS_ENABLED,
2943
+ FIT_CONNECTIVITY_MESG_AUTO_ACTIVITY_UPLOAD_ENABLED,
2944
+ FIT_CONNECTIVITY_MESG_COURSE_DOWNLOAD_ENABLED,
2945
+ FIT_CONNECTIVITY_MESG_WORKOUT_DOWNLOAD_ENABLED,
2946
+ FIT_CONNECTIVITY_MESG_GPS_EPHEMERIS_DOWNLOAD_ENABLED,
2947
+ FIT_CONNECTIVITY_MESG_INCIDENT_DETECTION_ENABLED,
2948
+ FIT_CONNECTIVITY_MESG_GROUPTRACK_ENABLED,
2949
+ FIT_CONNECTIVITY_MESG_FIELDS
2950
+ } FIT_CONNECTIVITY_MESG_FIELD;
2951
+
2952
+ typedef struct
2953
+ {
2954
+ FIT_UINT8 reserved_1;
2955
+ FIT_UINT8 arch;
2956
+ FIT_MESG_NUM global_mesg_num;
2957
+ FIT_UINT8 num_fields;
2958
+ FIT_UINT8 fields[FIT_CONNECTIVITY_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
2959
+ } FIT_CONNECTIVITY_MESG_DEF;
2960
+
1691
2961
  // zones_target message
1692
2962
 
1693
2963
  #define FIT_ZONES_TARGET_MESG_SIZE 6
@@ -1695,11 +2965,11 @@ typedef struct
1695
2965
 
1696
2966
  typedef struct
1697
2967
  {
1698
- FIT_UINT16 functional_threshold_power; //
1699
- FIT_UINT8 max_heart_rate; //
1700
- FIT_UINT8 threshold_heart_rate; //
1701
- FIT_HR_ZONE_CALC hr_calc_type; //
1702
- FIT_PWR_ZONE_CALC pwr_calc_type; //
2968
+ FIT_UINT16 functional_threshold_power; //
2969
+ FIT_UINT8 max_heart_rate; //
2970
+ FIT_UINT8 threshold_heart_rate; //
2971
+ FIT_HR_ZONE_CALC hr_calc_type; //
2972
+ FIT_PWR_ZONE_CALC pwr_calc_type; //
1703
2973
  } FIT_ZONES_TARGET_MESG;
1704
2974
 
1705
2975
  typedef enum
@@ -1738,9 +3008,9 @@ typedef struct
1738
3008
 
1739
3009
  typedef struct
1740
3010
  {
1741
- FIT_STRING name[FIT_SPORT_MESG_NAME_COUNT]; //
1742
- FIT_SPORT sport; //
1743
- FIT_SUB_SPORT sub_sport; //
3011
+ FIT_STRING name[FIT_SPORT_MESG_NAME_COUNT]; //
3012
+ FIT_SPORT sport; //
3013
+ FIT_SUB_SPORT sub_sport; //
1744
3014
  } FIT_SPORT_MESG;
1745
3015
 
1746
3016
  typedef enum
@@ -1775,9 +3045,9 @@ typedef struct
1775
3045
 
1776
3046
  typedef struct
1777
3047
  {
1778
- FIT_STRING name[FIT_HR_ZONE_MESG_NAME_COUNT]; //
1779
- FIT_MESSAGE_INDEX message_index; //
1780
- FIT_UINT8 high_bpm; // bpm,
3048
+ FIT_STRING name[FIT_HR_ZONE_MESG_NAME_COUNT]; //
3049
+ FIT_MESSAGE_INDEX message_index; //
3050
+ FIT_UINT8 high_bpm; // 1 * bpm + 0,
1781
3051
  } FIT_HR_ZONE_MESG;
1782
3052
 
1783
3053
  typedef enum
@@ -1812,9 +3082,9 @@ typedef struct
1812
3082
 
1813
3083
  typedef struct
1814
3084
  {
1815
- FIT_STRING name[FIT_SPEED_ZONE_MESG_NAME_COUNT]; //
1816
- FIT_MESSAGE_INDEX message_index; //
1817
- FIT_UINT16 high_value; // 1000 * m/s,
3085
+ FIT_STRING name[FIT_SPEED_ZONE_MESG_NAME_COUNT]; //
3086
+ FIT_MESSAGE_INDEX message_index; //
3087
+ FIT_UINT16 high_value; // 1000 * m/s + 0,
1818
3088
  } FIT_SPEED_ZONE_MESG;
1819
3089
 
1820
3090
  typedef enum
@@ -1849,9 +3119,9 @@ typedef struct
1849
3119
 
1850
3120
  typedef struct
1851
3121
  {
1852
- FIT_STRING name[FIT_CADENCE_ZONE_MESG_NAME_COUNT]; //
1853
- FIT_MESSAGE_INDEX message_index; //
1854
- FIT_UINT8 high_value; // rpm,
3122
+ FIT_STRING name[FIT_CADENCE_ZONE_MESG_NAME_COUNT]; //
3123
+ FIT_MESSAGE_INDEX message_index; //
3124
+ FIT_UINT8 high_value; // 1 * rpm + 0,
1855
3125
  } FIT_CADENCE_ZONE_MESG;
1856
3126
 
1857
3127
  typedef enum
@@ -1886,9 +3156,9 @@ typedef struct
1886
3156
 
1887
3157
  typedef struct
1888
3158
  {
1889
- FIT_STRING name[FIT_POWER_ZONE_MESG_NAME_COUNT]; //
1890
- FIT_MESSAGE_INDEX message_index; //
1891
- FIT_UINT16 high_value; // watts,
3159
+ FIT_STRING name[FIT_POWER_ZONE_MESG_NAME_COUNT]; //
3160
+ FIT_MESSAGE_INDEX message_index; //
3161
+ FIT_UINT16 high_value; // 1 * watts + 0,
1892
3162
  } FIT_POWER_ZONE_MESG;
1893
3163
 
1894
3164
  typedef enum
@@ -1922,10 +3192,10 @@ typedef struct
1922
3192
 
1923
3193
  typedef struct
1924
3194
  {
1925
- FIT_MESSAGE_INDEX message_index; //
1926
- FIT_UINT16 calories; // 10 * kcal / min,
1927
- FIT_UINT8 high_bpm; //
1928
- FIT_UINT8 fat_calories; // 10 * kcal / min,
3195
+ FIT_MESSAGE_INDEX message_index; //
3196
+ FIT_UINT16 calories; // 10 * kcal / min + 0,
3197
+ FIT_UINT8 high_bpm; //
3198
+ FIT_UINT8 fat_calories; // 10 * kcal / min + 0,
1929
3199
  } FIT_MET_ZONE_MESG;
1930
3200
 
1931
3201
  typedef enum
@@ -1956,23 +3226,24 @@ typedef struct
1956
3226
 
1957
3227
  // goal message
1958
3228
 
1959
- #define FIT_GOAL_MESG_SIZE 26
1960
- #define FIT_GOAL_MESG_DEF_SIZE 41
3229
+ #define FIT_GOAL_MESG_SIZE 27
3230
+ #define FIT_GOAL_MESG_DEF_SIZE 44
1961
3231
 
1962
3232
  typedef struct
1963
3233
  {
1964
- FIT_DATE_TIME start_date; //
1965
- FIT_DATE_TIME end_date; //
1966
- FIT_UINT32 value; //
1967
- FIT_UINT32 target_value; //
1968
- FIT_MESSAGE_INDEX message_index; //
1969
- FIT_UINT16 recurrence_value; //
1970
- FIT_SPORT sport; //
1971
- FIT_SUB_SPORT sub_sport; //
1972
- FIT_GOAL type; //
1973
- FIT_BOOL repeat; //
1974
- FIT_GOAL_RECURRENCE recurrence; //
1975
- FIT_BOOL enabled; //
3234
+ FIT_DATE_TIME start_date; //
3235
+ FIT_DATE_TIME end_date; //
3236
+ FIT_UINT32 value; //
3237
+ FIT_UINT32 target_value; //
3238
+ FIT_MESSAGE_INDEX message_index; //
3239
+ FIT_UINT16 recurrence_value; //
3240
+ FIT_SPORT sport; //
3241
+ FIT_SUB_SPORT sub_sport; //
3242
+ FIT_GOAL type; //
3243
+ FIT_BOOL repeat; //
3244
+ FIT_GOAL_RECURRENCE recurrence; //
3245
+ FIT_BOOL enabled; //
3246
+ FIT_GOAL_SOURCE source; //
1976
3247
  } FIT_GOAL_MESG;
1977
3248
 
1978
3249
  typedef enum
@@ -1988,7 +3259,8 @@ typedef enum
1988
3259
  FIT_GOAL_FIELD_NUM_TYPE = 4,
1989
3260
  FIT_GOAL_FIELD_NUM_REPEAT = 6,
1990
3261
  FIT_GOAL_FIELD_NUM_RECURRENCE = 8,
1991
- FIT_GOAL_FIELD_NUM_ENABLED = 10
3262
+ FIT_GOAL_FIELD_NUM_ENABLED = 10,
3263
+ FIT_GOAL_FIELD_NUM_SOURCE = 11
1992
3264
  } FIT_GOAL_FIELD_NUM;
1993
3265
 
1994
3266
  typedef enum
@@ -2005,6 +3277,7 @@ typedef enum
2005
3277
  FIT_GOAL_MESG_REPEAT,
2006
3278
  FIT_GOAL_MESG_RECURRENCE,
2007
3279
  FIT_GOAL_MESG_ENABLED,
3280
+ FIT_GOAL_MESG_SOURCE,
2008
3281
  FIT_GOAL_MESG_FIELDS
2009
3282
  } FIT_GOAL_MESG_FIELD;
2010
3283
 
@@ -2024,14 +3297,14 @@ typedef struct
2024
3297
 
2025
3298
  typedef struct
2026
3299
  {
2027
- FIT_DATE_TIME timestamp; //
2028
- FIT_UINT32 total_timer_time; // 1000 * s,Exclude pauses
3300
+ FIT_DATE_TIME timestamp; //
3301
+ FIT_UINT32 total_timer_time; // 1000 * s + 0, Exclude pauses
2029
3302
  FIT_LOCAL_DATE_TIME local_timestamp; // timestamp epoch expressed in local time, used to convert activity timestamps to local time
2030
- FIT_UINT16 num_sessions; //
2031
- FIT_ACTIVITY type; //
2032
- FIT_EVENT event; //
2033
- FIT_EVENT_TYPE event_type; //
2034
- FIT_UINT8 event_group; //
3303
+ FIT_UINT16 num_sessions; //
3304
+ FIT_ACTIVITY type; //
3305
+ FIT_EVENT event; //
3306
+ FIT_EVENT_TYPE event_type; //
3307
+ FIT_UINT8 event_group; //
2035
3308
  } FIT_ACTIVITY_MESG;
2036
3309
 
2037
3310
  typedef enum
@@ -2070,8 +3343,8 @@ typedef struct
2070
3343
 
2071
3344
  // session message
2072
3345
 
2073
- #define FIT_SESSION_MESG_SIZE 181
2074
- #define FIT_SESSION_MESG_DEF_SIZE 248
3346
+ #define FIT_SESSION_MESG_SIZE 205
3347
+ #define FIT_SESSION_MESG_DEF_SIZE 272
2075
3348
  #define FIT_SESSION_MESG_TIME_IN_HR_ZONE_COUNT 1
2076
3349
  #define FIT_SESSION_MESG_TIME_IN_SPEED_ZONE_COUNT 1
2077
3350
  #define FIT_SESSION_MESG_TIME_IN_CADENCE_ZONE_COUNT 1
@@ -2082,87 +3355,95 @@ typedef struct
2082
3355
 
2083
3356
  typedef struct
2084
3357
  {
2085
- FIT_DATE_TIME timestamp; // s,Sesson end time.
2086
- FIT_DATE_TIME start_time; //
2087
- FIT_SINT32 start_position_lat; // semicircles,
2088
- FIT_SINT32 start_position_long; // semicircles,
2089
- FIT_UINT32 total_elapsed_time; // 1000 * s,Time (includes pauses)
2090
- FIT_UINT32 total_timer_time; // 1000 * s,Timer Time (excludes pauses)
2091
- FIT_UINT32 total_distance; // 100 * m,
2092
- FIT_UINT32 total_cycles; // cycles,
2093
- FIT_SINT32 nec_lat; // semicircles,
2094
- FIT_SINT32 nec_long; // semicircles,
2095
- FIT_SINT32 swc_lat; // semicircles,
2096
- FIT_SINT32 swc_long; // semicircles,
2097
- FIT_UINT32 avg_stroke_count; // 10 * strokes/lap,
2098
- FIT_UINT32 total_work; // J,
2099
- FIT_UINT32 total_moving_time; // 1000 * s,
2100
- FIT_UINT32 time_in_hr_zone[FIT_SESSION_MESG_TIME_IN_HR_ZONE_COUNT]; // 1000 * s,
2101
- FIT_UINT32 time_in_speed_zone[FIT_SESSION_MESG_TIME_IN_SPEED_ZONE_COUNT]; // 1000 * s,
2102
- FIT_UINT32 time_in_cadence_zone[FIT_SESSION_MESG_TIME_IN_CADENCE_ZONE_COUNT]; // 1000 * s,
2103
- FIT_UINT32 time_in_power_zone[FIT_SESSION_MESG_TIME_IN_POWER_ZONE_COUNT]; // 1000 * s,
2104
- FIT_UINT32 avg_lap_time; // 1000 * s,
3358
+ FIT_DATE_TIME timestamp; // 1 * s + 0, Sesson end time.
3359
+ FIT_DATE_TIME start_time; //
3360
+ FIT_SINT32 start_position_lat; // 1 * semicircles + 0,
3361
+ FIT_SINT32 start_position_long; // 1 * semicircles + 0,
3362
+ FIT_UINT32 total_elapsed_time; // 1000 * s + 0, Time (includes pauses)
3363
+ FIT_UINT32 total_timer_time; // 1000 * s + 0, Timer Time (excludes pauses)
3364
+ FIT_UINT32 total_distance; // 100 * m + 0,
3365
+ FIT_UINT32 total_cycles; // 1 * cycles + 0,
3366
+ FIT_SINT32 nec_lat; // 1 * semicircles + 0,
3367
+ FIT_SINT32 nec_long; // 1 * semicircles + 0,
3368
+ FIT_SINT32 swc_lat; // 1 * semicircles + 0,
3369
+ FIT_SINT32 swc_long; // 1 * semicircles + 0,
3370
+ FIT_UINT32 avg_stroke_count; // 10 * strokes/lap + 0,
3371
+ FIT_UINT32 total_work; // 1 * J + 0,
3372
+ FIT_UINT32 total_moving_time; // 1000 * s + 0,
3373
+ FIT_UINT32 time_in_hr_zone[FIT_SESSION_MESG_TIME_IN_HR_ZONE_COUNT]; // 1000 * s + 0,
3374
+ FIT_UINT32 time_in_speed_zone[FIT_SESSION_MESG_TIME_IN_SPEED_ZONE_COUNT]; // 1000 * s + 0,
3375
+ FIT_UINT32 time_in_cadence_zone[FIT_SESSION_MESG_TIME_IN_CADENCE_ZONE_COUNT]; // 1000 * s + 0,
3376
+ FIT_UINT32 time_in_power_zone[FIT_SESSION_MESG_TIME_IN_POWER_ZONE_COUNT]; // 1000 * s + 0,
3377
+ FIT_UINT32 avg_lap_time; // 1000 * s + 0,
3378
+ FIT_UINT32 enhanced_avg_speed; // 1000 * m/s + 0, total_distance / total_timer_time
3379
+ FIT_UINT32 enhanced_max_speed; // 1000 * m/s + 0,
3380
+ FIT_UINT32 enhanced_avg_altitude; // 5 * m + 500,
3381
+ FIT_UINT32 enhanced_min_altitude; // 5 * m + 500,
3382
+ FIT_UINT32 enhanced_max_altitude; // 5 * m + 500,
2105
3383
  FIT_MESSAGE_INDEX message_index; // Selected bit is set for the current session.
2106
- FIT_UINT16 total_calories; // kcal,
2107
- FIT_UINT16 total_fat_calories; // kcal,
2108
- FIT_UINT16 avg_speed; // 1000 * m/s,total_distance / total_timer_time
2109
- FIT_UINT16 max_speed; // 1000 * m/s,
2110
- FIT_UINT16 avg_power; // watts,total_power / total_timer_time if non_zero_avg_power otherwise total_power / total_elapsed_time
2111
- FIT_UINT16 max_power; // watts,
2112
- FIT_UINT16 total_ascent; // m,
2113
- FIT_UINT16 total_descent; // m,
2114
- FIT_UINT16 first_lap_index; //
2115
- FIT_UINT16 num_laps; //
2116
- FIT_UINT16 normalized_power; // watts,
2117
- FIT_UINT16 training_stress_score; // 10 * tss,
2118
- FIT_UINT16 intensity_factor; // 1000 * if,
2119
- FIT_LEFT_RIGHT_BALANCE_100 left_right_balance; //
2120
- FIT_UINT16 avg_stroke_distance; // 100 * m,
2121
- FIT_UINT16 pool_length; // 100 * m,
2122
- FIT_UINT16 num_active_lengths; // lengths,# of active lengths of swim pool
3384
+ FIT_UINT16 total_calories; // 1 * kcal + 0,
3385
+ FIT_UINT16 total_fat_calories; // 1 * kcal + 0,
3386
+ FIT_UINT16 avg_speed; // 1000 * m/s + 0, total_distance / total_timer_time
3387
+ FIT_UINT16 max_speed; // 1000 * m/s + 0,
3388
+ FIT_UINT16 avg_power; // 1 * watts + 0, total_power / total_timer_time if non_zero_avg_power otherwise total_power / total_elapsed_time
3389
+ FIT_UINT16 max_power; // 1 * watts + 0,
3390
+ FIT_UINT16 total_ascent; // 1 * m + 0,
3391
+ FIT_UINT16 total_descent; // 1 * m + 0,
3392
+ FIT_UINT16 first_lap_index; //
3393
+ FIT_UINT16 num_laps; //
3394
+ FIT_UINT16 normalized_power; // 1 * watts + 0,
3395
+ FIT_UINT16 training_stress_score; // 10 * tss + 0,
3396
+ FIT_UINT16 intensity_factor; // 1000 * if + 0,
3397
+ FIT_LEFT_RIGHT_BALANCE_100 left_right_balance; //
3398
+ FIT_UINT16 avg_stroke_distance; // 100 * m + 0,
3399
+ FIT_UINT16 pool_length; // 100 * m + 0,
3400
+ FIT_UINT16 threshold_power; // 1 * watts + 0,
3401
+ FIT_UINT16 num_active_lengths; // 1 * lengths + 0, # of active lengths of swim pool
2123
3402
  FIT_UINT16 avg_altitude; // 5 * m + 500,
2124
3403
  FIT_UINT16 max_altitude; // 5 * m + 500,
2125
- FIT_SINT16 avg_grade; // 100 * %,
2126
- FIT_SINT16 avg_pos_grade; // 100 * %,
2127
- FIT_SINT16 avg_neg_grade; // 100 * %,
2128
- FIT_SINT16 max_pos_grade; // 100 * %,
2129
- FIT_SINT16 max_neg_grade; // 100 * %,
2130
- FIT_SINT16 avg_pos_vertical_speed; // 1000 * m/s,
2131
- FIT_SINT16 avg_neg_vertical_speed; // 1000 * m/s,
2132
- FIT_SINT16 max_pos_vertical_speed; // 1000 * m/s,
2133
- FIT_SINT16 max_neg_vertical_speed; // 1000 * m/s,
2134
- FIT_UINT16 best_lap_index; //
3404
+ FIT_SINT16 avg_grade; // 100 * % + 0,
3405
+ FIT_SINT16 avg_pos_grade; // 100 * % + 0,
3406
+ FIT_SINT16 avg_neg_grade; // 100 * % + 0,
3407
+ FIT_SINT16 max_pos_grade; // 100 * % + 0,
3408
+ FIT_SINT16 max_neg_grade; // 100 * % + 0,
3409
+ FIT_SINT16 avg_pos_vertical_speed; // 1000 * m/s + 0,
3410
+ FIT_SINT16 avg_neg_vertical_speed; // 1000 * m/s + 0,
3411
+ FIT_SINT16 max_pos_vertical_speed; // 1000 * m/s + 0,
3412
+ FIT_SINT16 max_neg_vertical_speed; // 1000 * m/s + 0,
3413
+ FIT_UINT16 best_lap_index; //
2135
3414
  FIT_UINT16 min_altitude; // 5 * m + 500,
2136
- FIT_UINT16 player_score; //
2137
- FIT_UINT16 opponent_score; //
2138
- FIT_UINT16 stroke_count[FIT_SESSION_MESG_STROKE_COUNT_COUNT]; // counts,stroke_type enum used as the index
2139
- FIT_UINT16 zone_count[FIT_SESSION_MESG_ZONE_COUNT_COUNT]; // counts,zone number used as the index
2140
- FIT_UINT16 max_ball_speed; // 100 * m/s,
2141
- FIT_UINT16 avg_ball_speed; // 100 * m/s,
2142
- FIT_UINT16 avg_vertical_oscillation; // 10 * mm,
2143
- FIT_UINT16 avg_stance_time_percent; // 100 * percent,
2144
- FIT_UINT16 avg_stance_time; // 10 * ms,
3415
+ FIT_UINT16 player_score; //
3416
+ FIT_UINT16 opponent_score; //
3417
+ FIT_UINT16 stroke_count[FIT_SESSION_MESG_STROKE_COUNT_COUNT]; // 1 * counts + 0, stroke_type enum used as the index
3418
+ FIT_UINT16 zone_count[FIT_SESSION_MESG_ZONE_COUNT_COUNT]; // 1 * counts + 0, zone number used as the index
3419
+ FIT_UINT16 max_ball_speed; // 100 * m/s + 0,
3420
+ FIT_UINT16 avg_ball_speed; // 100 * m/s + 0,
3421
+ FIT_UINT16 avg_vertical_oscillation; // 10 * mm + 0,
3422
+ FIT_UINT16 avg_stance_time_percent; // 100 * percent + 0,
3423
+ FIT_UINT16 avg_stance_time; // 10 * ms + 0,
2145
3424
  FIT_EVENT event; // session
2146
3425
  FIT_EVENT_TYPE event_type; // stop
2147
- FIT_SPORT sport; //
2148
- FIT_SUB_SPORT sub_sport; //
2149
- FIT_UINT8 avg_heart_rate; // bpm,average heart rate (excludes pause time)
2150
- FIT_UINT8 max_heart_rate; // bpm,
2151
- FIT_UINT8 avg_cadence; // rpm,total_cycles / total_timer_time if non_zero_avg_cadence otherwise total_cycles / total_elapsed_time
2152
- FIT_UINT8 max_cadence; // rpm,
2153
- FIT_UINT8 total_training_effect; //
2154
- FIT_UINT8 event_group; //
2155
- FIT_SESSION_TRIGGER trigger; //
2156
- FIT_SWIM_STROKE swim_stroke; // swim_stroke,
2157
- FIT_DISPLAY_MEASURE pool_length_unit; //
2158
- FIT_UINT8 gps_accuracy; // m,
2159
- FIT_SINT8 avg_temperature; // C,
2160
- FIT_SINT8 max_temperature; // C,
2161
- FIT_UINT8 min_heart_rate; // bpm,
2162
- FIT_STRING opponent_name[FIT_SESSION_MESG_OPPONENT_NAME_COUNT]; //
2163
- FIT_UINT8 avg_fractional_cadence; // 128 * rpm,fractional part of the avg_cadence
2164
- FIT_UINT8 max_fractional_cadence; // 128 * rpm,fractional part of the max_cadence
2165
- FIT_UINT8 total_fractional_cycles; // 128 * cycles,fractional part of the total_cycles
3426
+ FIT_SPORT sport; //
3427
+ FIT_SUB_SPORT sub_sport; //
3428
+ FIT_UINT8 avg_heart_rate; // 1 * bpm + 0, average heart rate (excludes pause time)
3429
+ FIT_UINT8 max_heart_rate; // 1 * bpm + 0,
3430
+ FIT_UINT8 avg_cadence; // 1 * rpm + 0, total_cycles / total_timer_time if non_zero_avg_cadence otherwise total_cycles / total_elapsed_time
3431
+ FIT_UINT8 max_cadence; // 1 * rpm + 0,
3432
+ FIT_UINT8 total_training_effect; //
3433
+ FIT_UINT8 event_group; //
3434
+ FIT_SESSION_TRIGGER trigger; //
3435
+ FIT_SWIM_STROKE swim_stroke; // 1 * swim_stroke + 0,
3436
+ FIT_DISPLAY_MEASURE pool_length_unit; //
3437
+ FIT_UINT8 gps_accuracy; // 1 * m + 0,
3438
+ FIT_SINT8 avg_temperature; // 1 * C + 0,
3439
+ FIT_SINT8 max_temperature; // 1 * C + 0,
3440
+ FIT_UINT8 min_heart_rate; // 1 * bpm + 0,
3441
+ FIT_STRING opponent_name[FIT_SESSION_MESG_OPPONENT_NAME_COUNT]; //
3442
+ FIT_UINT8 avg_fractional_cadence; // 128 * rpm + 0, fractional part of the avg_cadence
3443
+ FIT_UINT8 max_fractional_cadence; // 128 * rpm + 0, fractional part of the max_cadence
3444
+ FIT_UINT8 total_fractional_cycles; // 128 * cycles + 0, fractional part of the total_cycles
3445
+ FIT_UINT8 sport_index; //
3446
+ FIT_UINT8 total_anaerobic_training_effect; //
2166
3447
  } FIT_SESSION_MESG;
2167
3448
 
2168
3449
  typedef enum
@@ -2187,6 +3468,11 @@ typedef enum
2187
3468
  FIT_SESSION_FIELD_NUM_TIME_IN_CADENCE_ZONE = 67,
2188
3469
  FIT_SESSION_FIELD_NUM_TIME_IN_POWER_ZONE = 68,
2189
3470
  FIT_SESSION_FIELD_NUM_AVG_LAP_TIME = 69,
3471
+ FIT_SESSION_FIELD_NUM_ENHANCED_AVG_SPEED = 124,
3472
+ FIT_SESSION_FIELD_NUM_ENHANCED_MAX_SPEED = 125,
3473
+ FIT_SESSION_FIELD_NUM_ENHANCED_AVG_ALTITUDE = 126,
3474
+ FIT_SESSION_FIELD_NUM_ENHANCED_MIN_ALTITUDE = 127,
3475
+ FIT_SESSION_FIELD_NUM_ENHANCED_MAX_ALTITUDE = 128,
2190
3476
  FIT_SESSION_FIELD_NUM_MESSAGE_INDEX = 254,
2191
3477
  FIT_SESSION_FIELD_NUM_TOTAL_CALORIES = 11,
2192
3478
  FIT_SESSION_FIELD_NUM_TOTAL_FAT_CALORIES = 13,
@@ -2204,6 +3490,7 @@ typedef enum
2204
3490
  FIT_SESSION_FIELD_NUM_LEFT_RIGHT_BALANCE = 37,
2205
3491
  FIT_SESSION_FIELD_NUM_AVG_STROKE_DISTANCE = 42,
2206
3492
  FIT_SESSION_FIELD_NUM_POOL_LENGTH = 44,
3493
+ FIT_SESSION_FIELD_NUM_THRESHOLD_POWER = 45,
2207
3494
  FIT_SESSION_FIELD_NUM_NUM_ACTIVE_LENGTHS = 47,
2208
3495
  FIT_SESSION_FIELD_NUM_AVG_ALTITUDE = 49,
2209
3496
  FIT_SESSION_FIELD_NUM_MAX_ALTITUDE = 50,
@@ -2247,7 +3534,9 @@ typedef enum
2247
3534
  FIT_SESSION_FIELD_NUM_OPPONENT_NAME = 84,
2248
3535
  FIT_SESSION_FIELD_NUM_AVG_FRACTIONAL_CADENCE = 92,
2249
3536
  FIT_SESSION_FIELD_NUM_MAX_FRACTIONAL_CADENCE = 93,
2250
- FIT_SESSION_FIELD_NUM_TOTAL_FRACTIONAL_CYCLES = 94
3537
+ FIT_SESSION_FIELD_NUM_TOTAL_FRACTIONAL_CYCLES = 94,
3538
+ FIT_SESSION_FIELD_NUM_SPORT_INDEX = 111,
3539
+ FIT_SESSION_FIELD_NUM_TOTAL_ANAEROBIC_TRAINING_EFFECT = 137
2251
3540
  } FIT_SESSION_FIELD_NUM;
2252
3541
 
2253
3542
  typedef enum
@@ -2272,6 +3561,11 @@ typedef enum
2272
3561
  FIT_SESSION_MESG_TIME_IN_CADENCE_ZONE,
2273
3562
  FIT_SESSION_MESG_TIME_IN_POWER_ZONE,
2274
3563
  FIT_SESSION_MESG_AVG_LAP_TIME,
3564
+ FIT_SESSION_MESG_ENHANCED_AVG_SPEED,
3565
+ FIT_SESSION_MESG_ENHANCED_MAX_SPEED,
3566
+ FIT_SESSION_MESG_ENHANCED_AVG_ALTITUDE,
3567
+ FIT_SESSION_MESG_ENHANCED_MIN_ALTITUDE,
3568
+ FIT_SESSION_MESG_ENHANCED_MAX_ALTITUDE,
2275
3569
  FIT_SESSION_MESG_MESSAGE_INDEX,
2276
3570
  FIT_SESSION_MESG_TOTAL_CALORIES,
2277
3571
  FIT_SESSION_MESG_TOTAL_FAT_CALORIES,
@@ -2289,6 +3583,7 @@ typedef enum
2289
3583
  FIT_SESSION_MESG_LEFT_RIGHT_BALANCE,
2290
3584
  FIT_SESSION_MESG_AVG_STROKE_DISTANCE,
2291
3585
  FIT_SESSION_MESG_POOL_LENGTH,
3586
+ FIT_SESSION_MESG_THRESHOLD_POWER,
2292
3587
  FIT_SESSION_MESG_NUM_ACTIVE_LENGTHS,
2293
3588
  FIT_SESSION_MESG_AVG_ALTITUDE,
2294
3589
  FIT_SESSION_MESG_MAX_ALTITUDE,
@@ -2333,6 +3628,8 @@ typedef enum
2333
3628
  FIT_SESSION_MESG_AVG_FRACTIONAL_CADENCE,
2334
3629
  FIT_SESSION_MESG_MAX_FRACTIONAL_CADENCE,
2335
3630
  FIT_SESSION_MESG_TOTAL_FRACTIONAL_CYCLES,
3631
+ FIT_SESSION_MESG_SPORT_INDEX,
3632
+ FIT_SESSION_MESG_TOTAL_ANAEROBIC_TRAINING_EFFECT,
2336
3633
  FIT_SESSION_MESG_FIELDS
2337
3634
  } FIT_SESSION_MESG_FIELD;
2338
3635
 
@@ -2347,8 +3644,8 @@ typedef struct
2347
3644
 
2348
3645
  // lap message
2349
3646
 
2350
- #define FIT_LAP_MESG_SIZE 167
2351
- #define FIT_LAP_MESG_DEF_SIZE 236
3647
+ #define FIT_LAP_MESG_SIZE 187
3648
+ #define FIT_LAP_MESG_DEF_SIZE 251
2352
3649
  #define FIT_LAP_MESG_TIME_IN_HR_ZONE_COUNT 1
2353
3650
  #define FIT_LAP_MESG_TIME_IN_SPEED_ZONE_COUNT 1
2354
3651
  #define FIT_LAP_MESG_TIME_IN_CADENCE_ZONE_COUNT 1
@@ -2364,83 +3661,88 @@ typedef struct
2364
3661
 
2365
3662
  typedef struct
2366
3663
  {
2367
- FIT_DATE_TIME timestamp; // s,Lap end time.
2368
- FIT_DATE_TIME start_time; //
2369
- FIT_SINT32 start_position_lat; // semicircles,
2370
- FIT_SINT32 start_position_long; // semicircles,
2371
- FIT_SINT32 end_position_lat; // semicircles,
2372
- FIT_SINT32 end_position_long; // semicircles,
2373
- FIT_UINT32 total_elapsed_time; // 1000 * s,Time (includes pauses)
2374
- FIT_UINT32 total_timer_time; // 1000 * s,Timer Time (excludes pauses)
2375
- FIT_UINT32 total_distance; // 100 * m,
2376
- FIT_UINT32 total_cycles; // cycles,
2377
- FIT_UINT32 total_work; // J,
2378
- FIT_UINT32 total_moving_time; // 1000 * s,
2379
- FIT_UINT32 time_in_hr_zone[FIT_LAP_MESG_TIME_IN_HR_ZONE_COUNT]; // 1000 * s,
2380
- FIT_UINT32 time_in_speed_zone[FIT_LAP_MESG_TIME_IN_SPEED_ZONE_COUNT]; // 1000 * s,
2381
- FIT_UINT32 time_in_cadence_zone[FIT_LAP_MESG_TIME_IN_CADENCE_ZONE_COUNT]; // 1000 * s,
2382
- FIT_UINT32 time_in_power_zone[FIT_LAP_MESG_TIME_IN_POWER_ZONE_COUNT]; // 1000 * s,
2383
- FIT_MESSAGE_INDEX message_index; //
2384
- FIT_UINT16 total_calories; // kcal,
2385
- FIT_UINT16 total_fat_calories; // kcal,If New Leaf
2386
- FIT_UINT16 avg_speed; // 1000 * m/s,
2387
- FIT_UINT16 max_speed; // 1000 * m/s,
2388
- FIT_UINT16 avg_power; // watts,total_power / total_timer_time if non_zero_avg_power otherwise total_power / total_elapsed_time
2389
- FIT_UINT16 max_power; // watts,
2390
- FIT_UINT16 total_ascent; // m,
2391
- FIT_UINT16 total_descent; // m,
2392
- FIT_UINT16 num_lengths; // lengths,# of lengths of swim pool
2393
- FIT_UINT16 normalized_power; // watts,
2394
- FIT_LEFT_RIGHT_BALANCE_100 left_right_balance; //
2395
- FIT_UINT16 first_length_index; //
2396
- FIT_UINT16 avg_stroke_distance; // 100 * m,
2397
- FIT_UINT16 num_active_lengths; // lengths,# of active lengths of swim pool
3664
+ FIT_DATE_TIME timestamp; // 1 * s + 0, Lap end time.
3665
+ FIT_DATE_TIME start_time; //
3666
+ FIT_SINT32 start_position_lat; // 1 * semicircles + 0,
3667
+ FIT_SINT32 start_position_long; // 1 * semicircles + 0,
3668
+ FIT_SINT32 end_position_lat; // 1 * semicircles + 0,
3669
+ FIT_SINT32 end_position_long; // 1 * semicircles + 0,
3670
+ FIT_UINT32 total_elapsed_time; // 1000 * s + 0, Time (includes pauses)
3671
+ FIT_UINT32 total_timer_time; // 1000 * s + 0, Timer Time (excludes pauses)
3672
+ FIT_UINT32 total_distance; // 100 * m + 0,
3673
+ FIT_UINT32 total_cycles; // 1 * cycles + 0,
3674
+ FIT_UINT32 total_work; // 1 * J + 0,
3675
+ FIT_UINT32 total_moving_time; // 1000 * s + 0,
3676
+ FIT_UINT32 time_in_hr_zone[FIT_LAP_MESG_TIME_IN_HR_ZONE_COUNT]; // 1000 * s + 0,
3677
+ FIT_UINT32 time_in_speed_zone[FIT_LAP_MESG_TIME_IN_SPEED_ZONE_COUNT]; // 1000 * s + 0,
3678
+ FIT_UINT32 time_in_cadence_zone[FIT_LAP_MESG_TIME_IN_CADENCE_ZONE_COUNT]; // 1000 * s + 0,
3679
+ FIT_UINT32 time_in_power_zone[FIT_LAP_MESG_TIME_IN_POWER_ZONE_COUNT]; // 1000 * s + 0,
3680
+ FIT_UINT32 enhanced_avg_speed; // 1000 * m/s + 0,
3681
+ FIT_UINT32 enhanced_max_speed; // 1000 * m/s + 0,
3682
+ FIT_UINT32 enhanced_avg_altitude; // 5 * m + 500,
3683
+ FIT_UINT32 enhanced_min_altitude; // 5 * m + 500,
3684
+ FIT_UINT32 enhanced_max_altitude; // 5 * m + 500,
3685
+ FIT_MESSAGE_INDEX message_index; //
3686
+ FIT_UINT16 total_calories; // 1 * kcal + 0,
3687
+ FIT_UINT16 total_fat_calories; // 1 * kcal + 0, If New Leaf
3688
+ FIT_UINT16 avg_speed; // 1000 * m/s + 0,
3689
+ FIT_UINT16 max_speed; // 1000 * m/s + 0,
3690
+ FIT_UINT16 avg_power; // 1 * watts + 0, total_power / total_timer_time if non_zero_avg_power otherwise total_power / total_elapsed_time
3691
+ FIT_UINT16 max_power; // 1 * watts + 0,
3692
+ FIT_UINT16 total_ascent; // 1 * m + 0,
3693
+ FIT_UINT16 total_descent; // 1 * m + 0,
3694
+ FIT_UINT16 num_lengths; // 1 * lengths + 0, # of lengths of swim pool
3695
+ FIT_UINT16 normalized_power; // 1 * watts + 0,
3696
+ FIT_LEFT_RIGHT_BALANCE_100 left_right_balance; //
3697
+ FIT_UINT16 first_length_index; //
3698
+ FIT_UINT16 avg_stroke_distance; // 100 * m + 0,
3699
+ FIT_UINT16 num_active_lengths; // 1 * lengths + 0, # of active lengths of swim pool
2398
3700
  FIT_UINT16 avg_altitude; // 5 * m + 500,
2399
3701
  FIT_UINT16 max_altitude; // 5 * m + 500,
2400
- FIT_SINT16 avg_grade; // 100 * %,
2401
- FIT_SINT16 avg_pos_grade; // 100 * %,
2402
- FIT_SINT16 avg_neg_grade; // 100 * %,
2403
- FIT_SINT16 max_pos_grade; // 100 * %,
2404
- FIT_SINT16 max_neg_grade; // 100 * %,
2405
- FIT_SINT16 avg_pos_vertical_speed; // 1000 * m/s,
2406
- FIT_SINT16 avg_neg_vertical_speed; // 1000 * m/s,
2407
- FIT_SINT16 max_pos_vertical_speed; // 1000 * m/s,
2408
- FIT_SINT16 max_neg_vertical_speed; // 1000 * m/s,
2409
- FIT_UINT16 repetition_num; //
3702
+ FIT_SINT16 avg_grade; // 100 * % + 0,
3703
+ FIT_SINT16 avg_pos_grade; // 100 * % + 0,
3704
+ FIT_SINT16 avg_neg_grade; // 100 * % + 0,
3705
+ FIT_SINT16 max_pos_grade; // 100 * % + 0,
3706
+ FIT_SINT16 max_neg_grade; // 100 * % + 0,
3707
+ FIT_SINT16 avg_pos_vertical_speed; // 1000 * m/s + 0,
3708
+ FIT_SINT16 avg_neg_vertical_speed; // 1000 * m/s + 0,
3709
+ FIT_SINT16 max_pos_vertical_speed; // 1000 * m/s + 0,
3710
+ FIT_SINT16 max_neg_vertical_speed; // 1000 * m/s + 0,
3711
+ FIT_UINT16 repetition_num; //
2410
3712
  FIT_UINT16 min_altitude; // 5 * m + 500,
2411
- FIT_MESSAGE_INDEX wkt_step_index; //
2412
- FIT_UINT16 opponent_score; //
2413
- FIT_UINT16 stroke_count[FIT_LAP_MESG_STROKE_COUNT_COUNT]; // counts,stroke_type enum used as the index
2414
- FIT_UINT16 zone_count[FIT_LAP_MESG_ZONE_COUNT_COUNT]; // counts,zone number used as the index
2415
- FIT_UINT16 avg_vertical_oscillation; // 10 * mm,
2416
- FIT_UINT16 avg_stance_time_percent; // 100 * percent,
2417
- FIT_UINT16 avg_stance_time; // 10 * ms,
2418
- FIT_UINT16 player_score; //
2419
- FIT_UINT16 avg_total_hemoglobin_conc[FIT_LAP_MESG_AVG_TOTAL_HEMOGLOBIN_CONC_COUNT]; // 100 * g/dL,Avg saturated and unsaturated hemoglobin
2420
- FIT_UINT16 min_total_hemoglobin_conc[FIT_LAP_MESG_MIN_TOTAL_HEMOGLOBIN_CONC_COUNT]; // 100 * g/dL,Min saturated and unsaturated hemoglobin
2421
- FIT_UINT16 max_total_hemoglobin_conc[FIT_LAP_MESG_MAX_TOTAL_HEMOGLOBIN_CONC_COUNT]; // 100 * g/dL,Max saturated and unsaturated hemoglobin
2422
- FIT_UINT16 avg_saturated_hemoglobin_percent[FIT_LAP_MESG_AVG_SATURATED_HEMOGLOBIN_PERCENT_COUNT]; // 10 * %,Avg percentage of hemoglobin saturated with oxygen
2423
- FIT_UINT16 min_saturated_hemoglobin_percent[FIT_LAP_MESG_MIN_SATURATED_HEMOGLOBIN_PERCENT_COUNT]; // 10 * %,Min percentage of hemoglobin saturated with oxygen
2424
- FIT_UINT16 max_saturated_hemoglobin_percent[FIT_LAP_MESG_MAX_SATURATED_HEMOGLOBIN_PERCENT_COUNT]; // 10 * %,Max percentage of hemoglobin saturated with oxygen
2425
- FIT_EVENT event; //
2426
- FIT_EVENT_TYPE event_type; //
2427
- FIT_UINT8 avg_heart_rate; // bpm,
2428
- FIT_UINT8 max_heart_rate; // bpm,
2429
- FIT_UINT8 avg_cadence; // rpm,total_cycles / total_timer_time if non_zero_avg_cadence otherwise total_cycles / total_elapsed_time
2430
- FIT_UINT8 max_cadence; // rpm,
2431
- FIT_INTENSITY intensity; //
2432
- FIT_LAP_TRIGGER lap_trigger; //
2433
- FIT_SPORT sport; //
2434
- FIT_UINT8 event_group; //
2435
- FIT_SWIM_STROKE swim_stroke; //
2436
- FIT_SUB_SPORT sub_sport; //
2437
- FIT_UINT8 gps_accuracy; // m,
2438
- FIT_SINT8 avg_temperature; // C,
2439
- FIT_SINT8 max_temperature; // C,
2440
- FIT_UINT8 min_heart_rate; // bpm,
2441
- FIT_UINT8 avg_fractional_cadence; // 128 * rpm,fractional part of the avg_cadence
2442
- FIT_UINT8 max_fractional_cadence; // 128 * rpm,fractional part of the max_cadence
2443
- FIT_UINT8 total_fractional_cycles; // 128 * cycles,fractional part of the total_cycles
3713
+ FIT_MESSAGE_INDEX wkt_step_index; //
3714
+ FIT_UINT16 opponent_score; //
3715
+ FIT_UINT16 stroke_count[FIT_LAP_MESG_STROKE_COUNT_COUNT]; // 1 * counts + 0, stroke_type enum used as the index
3716
+ FIT_UINT16 zone_count[FIT_LAP_MESG_ZONE_COUNT_COUNT]; // 1 * counts + 0, zone number used as the index
3717
+ FIT_UINT16 avg_vertical_oscillation; // 10 * mm + 0,
3718
+ FIT_UINT16 avg_stance_time_percent; // 100 * percent + 0,
3719
+ FIT_UINT16 avg_stance_time; // 10 * ms + 0,
3720
+ FIT_UINT16 player_score; //
3721
+ FIT_UINT16 avg_total_hemoglobin_conc[FIT_LAP_MESG_AVG_TOTAL_HEMOGLOBIN_CONC_COUNT]; // 100 * g/dL + 0, Avg saturated and unsaturated hemoglobin
3722
+ FIT_UINT16 min_total_hemoglobin_conc[FIT_LAP_MESG_MIN_TOTAL_HEMOGLOBIN_CONC_COUNT]; // 100 * g/dL + 0, Min saturated and unsaturated hemoglobin
3723
+ FIT_UINT16 max_total_hemoglobin_conc[FIT_LAP_MESG_MAX_TOTAL_HEMOGLOBIN_CONC_COUNT]; // 100 * g/dL + 0, Max saturated and unsaturated hemoglobin
3724
+ FIT_UINT16 avg_saturated_hemoglobin_percent[FIT_LAP_MESG_AVG_SATURATED_HEMOGLOBIN_PERCENT_COUNT]; // 10 * % + 0, Avg percentage of hemoglobin saturated with oxygen
3725
+ FIT_UINT16 min_saturated_hemoglobin_percent[FIT_LAP_MESG_MIN_SATURATED_HEMOGLOBIN_PERCENT_COUNT]; // 10 * % + 0, Min percentage of hemoglobin saturated with oxygen
3726
+ FIT_UINT16 max_saturated_hemoglobin_percent[FIT_LAP_MESG_MAX_SATURATED_HEMOGLOBIN_PERCENT_COUNT]; // 10 * % + 0, Max percentage of hemoglobin saturated with oxygen
3727
+ FIT_EVENT event; //
3728
+ FIT_EVENT_TYPE event_type; //
3729
+ FIT_UINT8 avg_heart_rate; // 1 * bpm + 0,
3730
+ FIT_UINT8 max_heart_rate; // 1 * bpm + 0,
3731
+ FIT_UINT8 avg_cadence; // 1 * rpm + 0, total_cycles / total_timer_time if non_zero_avg_cadence otherwise total_cycles / total_elapsed_time
3732
+ FIT_UINT8 max_cadence; // 1 * rpm + 0,
3733
+ FIT_INTENSITY intensity; //
3734
+ FIT_LAP_TRIGGER lap_trigger; //
3735
+ FIT_SPORT sport; //
3736
+ FIT_UINT8 event_group; //
3737
+ FIT_SWIM_STROKE swim_stroke; //
3738
+ FIT_SUB_SPORT sub_sport; //
3739
+ FIT_UINT8 gps_accuracy; // 1 * m + 0,
3740
+ FIT_SINT8 avg_temperature; // 1 * C + 0,
3741
+ FIT_SINT8 max_temperature; // 1 * C + 0,
3742
+ FIT_UINT8 min_heart_rate; // 1 * bpm + 0,
3743
+ FIT_UINT8 avg_fractional_cadence; // 128 * rpm + 0, fractional part of the avg_cadence
3744
+ FIT_UINT8 max_fractional_cadence; // 128 * rpm + 0, fractional part of the max_cadence
3745
+ FIT_UINT8 total_fractional_cycles; // 128 * cycles + 0, fractional part of the total_cycles
2444
3746
  } FIT_LAP_MESG;
2445
3747
 
2446
3748
  typedef enum
@@ -2461,6 +3763,11 @@ typedef enum
2461
3763
  FIT_LAP_FIELD_NUM_TIME_IN_SPEED_ZONE = 58,
2462
3764
  FIT_LAP_FIELD_NUM_TIME_IN_CADENCE_ZONE = 59,
2463
3765
  FIT_LAP_FIELD_NUM_TIME_IN_POWER_ZONE = 60,
3766
+ FIT_LAP_FIELD_NUM_ENHANCED_AVG_SPEED = 110,
3767
+ FIT_LAP_FIELD_NUM_ENHANCED_MAX_SPEED = 111,
3768
+ FIT_LAP_FIELD_NUM_ENHANCED_AVG_ALTITUDE = 112,
3769
+ FIT_LAP_FIELD_NUM_ENHANCED_MIN_ALTITUDE = 113,
3770
+ FIT_LAP_FIELD_NUM_ENHANCED_MAX_ALTITUDE = 114,
2464
3771
  FIT_LAP_FIELD_NUM_MESSAGE_INDEX = 254,
2465
3772
  FIT_LAP_FIELD_NUM_TOTAL_CALORIES = 11,
2466
3773
  FIT_LAP_FIELD_NUM_TOTAL_FAT_CALORIES = 12,
@@ -2542,6 +3849,11 @@ typedef enum
2542
3849
  FIT_LAP_MESG_TIME_IN_SPEED_ZONE,
2543
3850
  FIT_LAP_MESG_TIME_IN_CADENCE_ZONE,
2544
3851
  FIT_LAP_MESG_TIME_IN_POWER_ZONE,
3852
+ FIT_LAP_MESG_ENHANCED_AVG_SPEED,
3853
+ FIT_LAP_MESG_ENHANCED_MAX_SPEED,
3854
+ FIT_LAP_MESG_ENHANCED_AVG_ALTITUDE,
3855
+ FIT_LAP_MESG_ENHANCED_MIN_ALTITUDE,
3856
+ FIT_LAP_MESG_ENHANCED_MAX_ALTITUDE,
2545
3857
  FIT_LAP_MESG_MESSAGE_INDEX,
2546
3858
  FIT_LAP_MESG_TOTAL_CALORIES,
2547
3859
  FIT_LAP_MESG_TOTAL_FAT_CALORIES,
@@ -2624,24 +3936,24 @@ typedef struct
2624
3936
 
2625
3937
  typedef struct
2626
3938
  {
2627
- FIT_DATE_TIME timestamp; //
2628
- FIT_DATE_TIME start_time; //
2629
- FIT_UINT32 total_elapsed_time; // 1000 * s,
2630
- FIT_UINT32 total_timer_time; // 1000 * s,
2631
- FIT_MESSAGE_INDEX message_index; //
2632
- FIT_UINT16 total_strokes; // strokes,
2633
- FIT_UINT16 avg_speed; // 1000 * m/s,
2634
- FIT_UINT16 total_calories; // kcal,
2635
- FIT_UINT16 player_score; //
2636
- FIT_UINT16 opponent_score; //
2637
- FIT_UINT16 stroke_count[FIT_LENGTH_MESG_STROKE_COUNT_COUNT]; // counts,stroke_type enum used as the index
2638
- FIT_UINT16 zone_count[FIT_LENGTH_MESG_ZONE_COUNT_COUNT]; // counts,zone number used as the index
2639
- FIT_EVENT event; //
2640
- FIT_EVENT_TYPE event_type; //
2641
- FIT_SWIM_STROKE swim_stroke; // swim_stroke,
2642
- FIT_UINT8 avg_swimming_cadence; // strokes/min,
2643
- FIT_UINT8 event_group; //
2644
- FIT_LENGTH_TYPE length_type; //
3939
+ FIT_DATE_TIME timestamp; //
3940
+ FIT_DATE_TIME start_time; //
3941
+ FIT_UINT32 total_elapsed_time; // 1000 * s + 0,
3942
+ FIT_UINT32 total_timer_time; // 1000 * s + 0,
3943
+ FIT_MESSAGE_INDEX message_index; //
3944
+ FIT_UINT16 total_strokes; // 1 * strokes + 0,
3945
+ FIT_UINT16 avg_speed; // 1000 * m/s + 0,
3946
+ FIT_UINT16 total_calories; // 1 * kcal + 0,
3947
+ FIT_UINT16 player_score; //
3948
+ FIT_UINT16 opponent_score; //
3949
+ FIT_UINT16 stroke_count[FIT_LENGTH_MESG_STROKE_COUNT_COUNT]; // 1 * counts + 0, stroke_type enum used as the index
3950
+ FIT_UINT16 zone_count[FIT_LENGTH_MESG_ZONE_COUNT_COUNT]; // 1 * counts + 0, zone number used as the index
3951
+ FIT_EVENT event; //
3952
+ FIT_EVENT_TYPE event_type; //
3953
+ FIT_SWIM_STROKE swim_stroke; // 1 * swim_stroke + 0,
3954
+ FIT_UINT8 avg_swimming_cadence; // 1 * strokes/min + 0,
3955
+ FIT_UINT8 event_group; //
3956
+ FIT_LENGTH_TYPE length_type; //
2645
3957
  } FIT_LENGTH_MESG;
2646
3958
 
2647
3959
  typedef enum
@@ -2700,58 +4012,61 @@ typedef struct
2700
4012
 
2701
4013
  // record message
2702
4014
 
2703
- #define FIT_RECORD_MESG_SIZE 90
2704
- #define FIT_RECORD_MESG_DEF_SIZE 140
4015
+ #define FIT_RECORD_MESG_SIZE 99
4016
+ #define FIT_RECORD_MESG_DEF_SIZE 149
2705
4017
  #define FIT_RECORD_MESG_COMPRESSED_SPEED_DISTANCE_COUNT 3
2706
4018
  #define FIT_RECORD_MESG_SPEED_1S_COUNT 5
2707
4019
 
2708
4020
  typedef struct
2709
4021
  {
2710
- FIT_DATE_TIME timestamp; // s,
2711
- FIT_SINT32 position_lat; // semicircles,
2712
- FIT_SINT32 position_long; // semicircles,
2713
- FIT_UINT32 distance; // 100 * m,
2714
- FIT_SINT32 time_from_course; // 1000 * s,
2715
- FIT_UINT32 total_cycles; // cycles,
2716
- FIT_UINT32 accumulated_power; // watts,
4022
+ FIT_DATE_TIME timestamp; // 1 * s + 0,
4023
+ FIT_SINT32 position_lat; // 1 * semicircles + 0,
4024
+ FIT_SINT32 position_long; // 1 * semicircles + 0,
4025
+ FIT_UINT32 distance; // 100 * m + 0,
4026
+ FIT_SINT32 time_from_course; // 1000 * s + 0,
4027
+ FIT_UINT32 total_cycles; // 1 * cycles + 0,
4028
+ FIT_UINT32 accumulated_power; // 1 * watts + 0,
4029
+ FIT_UINT32 enhanced_speed; // 1000 * m/s + 0,
4030
+ FIT_UINT32 enhanced_altitude; // 5 * m + 500,
2717
4031
  FIT_UINT16 altitude; // 5 * m + 500,
2718
- FIT_UINT16 speed; // 1000 * m/s,
2719
- FIT_UINT16 power; // watts,
2720
- FIT_SINT16 grade; // 100 * %,
2721
- FIT_UINT16 compressed_accumulated_power; //
2722
- FIT_SINT16 vertical_speed; // 1000 * m/s,
2723
- FIT_UINT16 calories; // kcal,
2724
- FIT_UINT16 vertical_oscillation; // 10 * mm,
2725
- FIT_UINT16 stance_time_percent; // 100 * percent,
2726
- FIT_UINT16 stance_time; // 10 * ms,
2727
- FIT_UINT16 ball_speed; // 100 * m/s,
2728
- FIT_UINT16 cadence256; // 256 * rpm,Log cadence and fractional cadence for backwards compatability
2729
- FIT_UINT16 total_hemoglobin_conc; // 100 * g/dL,Total saturated and unsaturated hemoglobin
2730
- FIT_UINT16 total_hemoglobin_conc_min; // 100 * g/dL,Min saturated and unsaturated hemoglobin
2731
- FIT_UINT16 total_hemoglobin_conc_max; // 100 * g/dL,Max saturated and unsaturated hemoglobin
2732
- FIT_UINT16 saturated_hemoglobin_percent; // 10 * %,Percentage of hemoglobin saturated with oxygen
2733
- FIT_UINT16 saturated_hemoglobin_percent_min; // 10 * %,Min percentage of hemoglobin saturated with oxygen
2734
- FIT_UINT16 saturated_hemoglobin_percent_max; // 10 * %,Max percentage of hemoglobin saturated with oxygen
2735
- FIT_UINT8 heart_rate; // bpm,
2736
- FIT_UINT8 cadence; // rpm,
2737
- FIT_BYTE compressed_speed_distance[FIT_RECORD_MESG_COMPRESSED_SPEED_DISTANCE_COUNT]; //
4032
+ FIT_UINT16 speed; // 1000 * m/s + 0,
4033
+ FIT_UINT16 power; // 1 * watts + 0,
4034
+ FIT_SINT16 grade; // 100 * % + 0,
4035
+ FIT_UINT16 compressed_accumulated_power; // 1 * watts + 0,
4036
+ FIT_SINT16 vertical_speed; // 1000 * m/s + 0,
4037
+ FIT_UINT16 calories; // 1 * kcal + 0,
4038
+ FIT_UINT16 vertical_oscillation; // 10 * mm + 0,
4039
+ FIT_UINT16 stance_time_percent; // 100 * percent + 0,
4040
+ FIT_UINT16 stance_time; // 10 * ms + 0,
4041
+ FIT_UINT16 ball_speed; // 100 * m/s + 0,
4042
+ FIT_UINT16 cadence256; // 256 * rpm + 0, Log cadence and fractional cadence for backwards compatability
4043
+ FIT_UINT16 total_hemoglobin_conc; // 100 * g/dL + 0, Total saturated and unsaturated hemoglobin
4044
+ FIT_UINT16 total_hemoglobin_conc_min; // 100 * g/dL + 0, Min saturated and unsaturated hemoglobin
4045
+ FIT_UINT16 total_hemoglobin_conc_max; // 100 * g/dL + 0, Max saturated and unsaturated hemoglobin
4046
+ FIT_UINT16 saturated_hemoglobin_percent; // 10 * % + 0, Percentage of hemoglobin saturated with oxygen
4047
+ FIT_UINT16 saturated_hemoglobin_percent_min; // 10 * % + 0, Min percentage of hemoglobin saturated with oxygen
4048
+ FIT_UINT16 saturated_hemoglobin_percent_max; // 10 * % + 0, Max percentage of hemoglobin saturated with oxygen
4049
+ FIT_UINT8 heart_rate; // 1 * bpm + 0,
4050
+ FIT_UINT8 cadence; // 1 * rpm + 0,
4051
+ FIT_BYTE compressed_speed_distance[FIT_RECORD_MESG_COMPRESSED_SPEED_DISTANCE_COUNT]; //
2738
4052
  FIT_UINT8 resistance; // Relative. 0 is none 254 is Max.
2739
- FIT_UINT8 cycle_length; // 100 * m,
2740
- FIT_SINT8 temperature; // C,
2741
- FIT_UINT8 speed_1s[FIT_RECORD_MESG_SPEED_1S_COUNT]; // 16 * m/s,Speed at 1s intervals. Timestamp field indicates time of last array element.
2742
- FIT_UINT8 cycles; //
2743
- FIT_LEFT_RIGHT_BALANCE left_right_balance; //
2744
- FIT_UINT8 gps_accuracy; // m,
2745
- FIT_ACTIVITY_TYPE activity_type; //
2746
- FIT_UINT8 left_torque_effectiveness; // 2 * percent,
2747
- FIT_UINT8 right_torque_effectiveness; // 2 * percent,
2748
- FIT_UINT8 left_pedal_smoothness; // 2 * percent,
2749
- FIT_UINT8 right_pedal_smoothness; // 2 * percent,
2750
- FIT_UINT8 combined_pedal_smoothness; // 2 * percent,
2751
- FIT_UINT8 time128; // 128 * s,
2752
- FIT_STROKE_TYPE stroke_type; //
2753
- FIT_UINT8 zone; //
2754
- FIT_DEVICE_INDEX device_index; //
4053
+ FIT_UINT8 cycle_length; // 100 * m + 0,
4054
+ FIT_SINT8 temperature; // 1 * C + 0,
4055
+ FIT_UINT8 speed_1s[FIT_RECORD_MESG_SPEED_1S_COUNT]; // 16 * m/s + 0, Speed at 1s intervals. Timestamp field indicates time of last array element.
4056
+ FIT_UINT8 cycles; // 1 * cycles + 0,
4057
+ FIT_LEFT_RIGHT_BALANCE left_right_balance; //
4058
+ FIT_UINT8 gps_accuracy; // 1 * m + 0,
4059
+ FIT_ACTIVITY_TYPE activity_type; //
4060
+ FIT_UINT8 left_torque_effectiveness; // 2 * percent + 0,
4061
+ FIT_UINT8 right_torque_effectiveness; // 2 * percent + 0,
4062
+ FIT_UINT8 left_pedal_smoothness; // 2 * percent + 0,
4063
+ FIT_UINT8 right_pedal_smoothness; // 2 * percent + 0,
4064
+ FIT_UINT8 combined_pedal_smoothness; // 2 * percent + 0,
4065
+ FIT_UINT8 time128; // 128 * s + 0,
4066
+ FIT_STROKE_TYPE stroke_type; //
4067
+ FIT_UINT8 zone; //
4068
+ FIT_UINT8 fractional_cadence; // 128 * rpm + 0,
4069
+ FIT_DEVICE_INDEX device_index; //
2755
4070
  } FIT_RECORD_MESG;
2756
4071
 
2757
4072
  typedef enum
@@ -2763,6 +4078,8 @@ typedef enum
2763
4078
  FIT_RECORD_FIELD_NUM_TIME_FROM_COURSE = 11,
2764
4079
  FIT_RECORD_FIELD_NUM_TOTAL_CYCLES = 19,
2765
4080
  FIT_RECORD_FIELD_NUM_ACCUMULATED_POWER = 29,
4081
+ FIT_RECORD_FIELD_NUM_ENHANCED_SPEED = 73,
4082
+ FIT_RECORD_FIELD_NUM_ENHANCED_ALTITUDE = 78,
2766
4083
  FIT_RECORD_FIELD_NUM_ALTITUDE = 2,
2767
4084
  FIT_RECORD_FIELD_NUM_SPEED = 6,
2768
4085
  FIT_RECORD_FIELD_NUM_POWER = 7,
@@ -2800,6 +4117,7 @@ typedef enum
2800
4117
  FIT_RECORD_FIELD_NUM_TIME128 = 48,
2801
4118
  FIT_RECORD_FIELD_NUM_STROKE_TYPE = 49,
2802
4119
  FIT_RECORD_FIELD_NUM_ZONE = 50,
4120
+ FIT_RECORD_FIELD_NUM_FRACTIONAL_CADENCE = 53,
2803
4121
  FIT_RECORD_FIELD_NUM_DEVICE_INDEX = 62
2804
4122
  } FIT_RECORD_FIELD_NUM;
2805
4123
 
@@ -2812,6 +4130,8 @@ typedef enum
2812
4130
  FIT_RECORD_MESG_TIME_FROM_COURSE,
2813
4131
  FIT_RECORD_MESG_TOTAL_CYCLES,
2814
4132
  FIT_RECORD_MESG_ACCUMULATED_POWER,
4133
+ FIT_RECORD_MESG_ENHANCED_SPEED,
4134
+ FIT_RECORD_MESG_ENHANCED_ALTITUDE,
2815
4135
  FIT_RECORD_MESG_ALTITUDE,
2816
4136
  FIT_RECORD_MESG_SPEED,
2817
4137
  FIT_RECORD_MESG_POWER,
@@ -2849,6 +4169,7 @@ typedef enum
2849
4169
  FIT_RECORD_MESG_TIME128,
2850
4170
  FIT_RECORD_MESG_STROKE_TYPE,
2851
4171
  FIT_RECORD_MESG_ZONE,
4172
+ FIT_RECORD_MESG_FRACTIONAL_CADENCE,
2852
4173
  FIT_RECORD_MESG_DEVICE_INDEX,
2853
4174
  FIT_RECORD_MESG_FIELDS
2854
4175
  } FIT_RECORD_MESG_FIELD;
@@ -2869,14 +4190,14 @@ typedef struct
2869
4190
 
2870
4191
  typedef struct
2871
4192
  {
2872
- FIT_DATE_TIME timestamp; // s,
2873
- FIT_UINT32 data; //
2874
- FIT_UINT16 data16; //
4193
+ FIT_DATE_TIME timestamp; // 1 * s + 0,
4194
+ FIT_UINT32 data; //
4195
+ FIT_UINT16 data16; //
2875
4196
  FIT_UINT16 score; // Do not populate directly. Autogenerated by decoder for sport_point subfield components
2876
4197
  FIT_UINT16 opponent_score; // Do not populate directly. Autogenerated by decoder for sport_point subfield components
2877
- FIT_EVENT event; //
2878
- FIT_EVENT_TYPE event_type; //
2879
- FIT_UINT8 event_group; //
4198
+ FIT_EVENT event; //
4199
+ FIT_EVENT_TYPE event_type; //
4200
+ FIT_UINT8 event_group; //
2880
4201
  FIT_UINT8Z front_gear_num; // Do not populate directly. Autogenerated by decoder for gear_change subfield components. Front gear number. 1 is innermost.
2881
4202
  FIT_UINT8Z front_gear; // Do not populate directly. Autogenerated by decoder for gear_change subfield components. Number of front teeth.
2882
4203
  FIT_UINT8Z rear_gear_num; // Do not populate directly. Autogenerated by decoder for gear_change subfield components. Rear gear number. 1 is innermost.
@@ -2927,29 +4248,31 @@ typedef struct
2927
4248
 
2928
4249
  // device_info message
2929
4250
 
2930
- #define FIT_DEVICE_INFO_MESG_SIZE 31
2931
- #define FIT_DEVICE_INFO_MESG_DEF_SIZE 56
4251
+ #define FIT_DEVICE_INFO_MESG_SIZE 51
4252
+ #define FIT_DEVICE_INFO_MESG_DEF_SIZE 59
4253
+ #define FIT_DEVICE_INFO_MESG_PRODUCT_NAME_COUNT 20
2932
4254
  #define FIT_DEVICE_INFO_MESG_DESCRIPTOR_COUNT 1
2933
4255
 
2934
4256
  typedef struct
2935
4257
  {
2936
- FIT_DATE_TIME timestamp; // s,
2937
- FIT_UINT32Z serial_number; //
2938
- FIT_UINT32 cum_operating_time; // s,Reset by new battery or charge.
2939
- FIT_MANUFACTURER manufacturer; //
2940
- FIT_UINT16 product; //
2941
- FIT_UINT16 software_version; //
2942
- FIT_UINT16 battery_voltage; // 256 * V,
2943
- FIT_UINT16Z ant_device_number; //
2944
- FIT_DEVICE_INDEX device_index; //
2945
- FIT_UINT8 device_type; //
2946
- FIT_UINT8 hardware_version; //
2947
- FIT_BATTERY_STATUS battery_status; //
4258
+ FIT_DATE_TIME timestamp; // 1 * s + 0,
4259
+ FIT_UINT32Z serial_number; //
4260
+ FIT_UINT32 cum_operating_time; // 1 * s + 0, Reset by new battery or charge.
4261
+ FIT_STRING product_name[FIT_DEVICE_INFO_MESG_PRODUCT_NAME_COUNT]; // Optional free form string to indicate the devices name or model
4262
+ FIT_MANUFACTURER manufacturer; //
4263
+ FIT_UINT16 product; //
4264
+ FIT_UINT16 software_version; //
4265
+ FIT_UINT16 battery_voltage; // 256 * V + 0,
4266
+ FIT_UINT16Z ant_device_number; //
4267
+ FIT_DEVICE_INDEX device_index; //
4268
+ FIT_UINT8 device_type; //
4269
+ FIT_UINT8 hardware_version; //
4270
+ FIT_BATTERY_STATUS battery_status; //
2948
4271
  FIT_BODY_LOCATION sensor_position; // Indicates the location of the sensor
2949
4272
  FIT_STRING descriptor[FIT_DEVICE_INFO_MESG_DESCRIPTOR_COUNT]; // Used to describe the sensor or location
2950
- FIT_UINT8Z ant_transmission_type; //
2951
- FIT_ANT_NETWORK ant_network; //
2952
- FIT_SOURCE_TYPE source_type; //
4273
+ FIT_UINT8Z ant_transmission_type; //
4274
+ FIT_ANT_NETWORK ant_network; //
4275
+ FIT_SOURCE_TYPE source_type; //
2953
4276
  } FIT_DEVICE_INFO_MESG;
2954
4277
 
2955
4278
  typedef enum
@@ -2957,6 +4280,7 @@ typedef enum
2957
4280
  FIT_DEVICE_INFO_FIELD_NUM_TIMESTAMP = 253,
2958
4281
  FIT_DEVICE_INFO_FIELD_NUM_SERIAL_NUMBER = 3,
2959
4282
  FIT_DEVICE_INFO_FIELD_NUM_CUM_OPERATING_TIME = 7,
4283
+ FIT_DEVICE_INFO_FIELD_NUM_PRODUCT_NAME = 27,
2960
4284
  FIT_DEVICE_INFO_FIELD_NUM_MANUFACTURER = 2,
2961
4285
  FIT_DEVICE_INFO_FIELD_NUM_PRODUCT = 4,
2962
4286
  FIT_DEVICE_INFO_FIELD_NUM_SOFTWARE_VERSION = 5,
@@ -2978,6 +4302,7 @@ typedef enum
2978
4302
  FIT_DEVICE_INFO_MESG_TIMESTAMP,
2979
4303
  FIT_DEVICE_INFO_MESG_SERIAL_NUMBER,
2980
4304
  FIT_DEVICE_INFO_MESG_CUM_OPERATING_TIME,
4305
+ FIT_DEVICE_INFO_MESG_PRODUCT_NAME,
2981
4306
  FIT_DEVICE_INFO_MESG_MANUFACTURER,
2982
4307
  FIT_DEVICE_INFO_MESG_PRODUCT,
2983
4308
  FIT_DEVICE_INFO_MESG_SOFTWARE_VERSION,
@@ -3004,6 +4329,51 @@ typedef struct
3004
4329
  FIT_UINT8 fields[FIT_DEVICE_INFO_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
3005
4330
  } FIT_DEVICE_INFO_MESG_DEF;
3006
4331
 
4332
+ // training_file message
4333
+
4334
+ #define FIT_TRAINING_FILE_MESG_SIZE 17
4335
+ #define FIT_TRAINING_FILE_MESG_DEF_SIZE 23
4336
+
4337
+ typedef struct
4338
+ {
4339
+ FIT_DATE_TIME timestamp; //
4340
+ FIT_UINT32Z serial_number; //
4341
+ FIT_DATE_TIME time_created; //
4342
+ FIT_MANUFACTURER manufacturer; //
4343
+ FIT_UINT16 product; //
4344
+ FIT_FILE type; //
4345
+ } FIT_TRAINING_FILE_MESG;
4346
+
4347
+ typedef enum
4348
+ {
4349
+ FIT_TRAINING_FILE_FIELD_NUM_TIMESTAMP = 253,
4350
+ FIT_TRAINING_FILE_FIELD_NUM_SERIAL_NUMBER = 3,
4351
+ FIT_TRAINING_FILE_FIELD_NUM_TIME_CREATED = 4,
4352
+ FIT_TRAINING_FILE_FIELD_NUM_MANUFACTURER = 1,
4353
+ FIT_TRAINING_FILE_FIELD_NUM_PRODUCT = 2,
4354
+ FIT_TRAINING_FILE_FIELD_NUM_TYPE = 0
4355
+ } FIT_TRAINING_FILE_FIELD_NUM;
4356
+
4357
+ typedef enum
4358
+ {
4359
+ FIT_TRAINING_FILE_MESG_TIMESTAMP,
4360
+ FIT_TRAINING_FILE_MESG_SERIAL_NUMBER,
4361
+ FIT_TRAINING_FILE_MESG_TIME_CREATED,
4362
+ FIT_TRAINING_FILE_MESG_MANUFACTURER,
4363
+ FIT_TRAINING_FILE_MESG_PRODUCT,
4364
+ FIT_TRAINING_FILE_MESG_TYPE,
4365
+ FIT_TRAINING_FILE_MESG_FIELDS
4366
+ } FIT_TRAINING_FILE_MESG_FIELD;
4367
+
4368
+ typedef struct
4369
+ {
4370
+ FIT_UINT8 reserved_1;
4371
+ FIT_UINT8 arch;
4372
+ FIT_MESG_NUM global_mesg_num;
4373
+ FIT_UINT8 num_fields;
4374
+ FIT_UINT8 fields[FIT_TRAINING_FILE_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
4375
+ } FIT_TRAINING_FILE_MESG_DEF;
4376
+
3007
4377
  // hrv message
3008
4378
 
3009
4379
  #define FIT_HRV_MESG_SIZE 2
@@ -3012,7 +4382,7 @@ typedef struct
3012
4382
 
3013
4383
  typedef struct
3014
4384
  {
3015
- FIT_UINT16 time[FIT_HRV_MESG_TIME_COUNT]; // 1000 * s,Time between beats
4385
+ FIT_UINT16 time[FIT_HRV_MESG_TIME_COUNT]; // 1000 * s + 0, Time between beats
3016
4386
  } FIT_HRV_MESG;
3017
4387
 
3018
4388
  typedef enum
@@ -3035,24 +4405,332 @@ typedef struct
3035
4405
  FIT_UINT8 fields[FIT_HRV_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
3036
4406
  } FIT_HRV_MESG_DEF;
3037
4407
 
4408
+ // weather_conditions message
4409
+
4410
+ #define FIT_WEATHER_CONDITIONS_MESG_SIZE 93
4411
+ #define FIT_WEATHER_CONDITIONS_MESG_DEF_SIZE 53
4412
+ #define FIT_WEATHER_CONDITIONS_MESG_LOCATION_COUNT 64
4413
+
4414
+ typedef struct
4415
+ {
4416
+ FIT_DATE_TIME timestamp; // time of update for current conditions, else forecast time
4417
+ FIT_STRING location[FIT_WEATHER_CONDITIONS_MESG_LOCATION_COUNT]; // string corresponding to GCS response location string
4418
+ FIT_DATE_TIME observed_at_time; //
4419
+ FIT_SINT32 observed_location_lat; // 1 * semicircles + 0,
4420
+ FIT_SINT32 observed_location_long; // 1 * semicircles + 0,
4421
+ FIT_UINT16 wind_direction; // 1 * degrees + 0,
4422
+ FIT_UINT16 wind_speed; // 1000 * m/s + 0,
4423
+ FIT_WEATHER_REPORT weather_report; // Current or forecast
4424
+ FIT_SINT8 temperature; // 1 * C + 0,
4425
+ FIT_WEATHER_STATUS condition; // Corresponds to GSC Response weatherIcon field
4426
+ FIT_UINT8 precipitation_probability; // range 0-100
4427
+ FIT_SINT8 temperature_feels_like; // 1 * C + 0, Heat Index if GCS heatIdx above or equal to 90F or wind chill if GCS windChill below or equal to 32F
4428
+ FIT_UINT8 relative_humidity; //
4429
+ FIT_DAY_OF_WEEK day_of_week; //
4430
+ FIT_SINT8 high_temperature; // 1 * C + 0,
4431
+ FIT_SINT8 low_temperature; // 1 * C + 0,
4432
+ } FIT_WEATHER_CONDITIONS_MESG;
4433
+
4434
+ typedef enum
4435
+ {
4436
+ FIT_WEATHER_CONDITIONS_FIELD_NUM_TIMESTAMP = 253,
4437
+ FIT_WEATHER_CONDITIONS_FIELD_NUM_LOCATION = 8,
4438
+ FIT_WEATHER_CONDITIONS_FIELD_NUM_OBSERVED_AT_TIME = 9,
4439
+ FIT_WEATHER_CONDITIONS_FIELD_NUM_OBSERVED_LOCATION_LAT = 10,
4440
+ FIT_WEATHER_CONDITIONS_FIELD_NUM_OBSERVED_LOCATION_LONG = 11,
4441
+ FIT_WEATHER_CONDITIONS_FIELD_NUM_WIND_DIRECTION = 3,
4442
+ FIT_WEATHER_CONDITIONS_FIELD_NUM_WIND_SPEED = 4,
4443
+ FIT_WEATHER_CONDITIONS_FIELD_NUM_WEATHER_REPORT = 0,
4444
+ FIT_WEATHER_CONDITIONS_FIELD_NUM_TEMPERATURE = 1,
4445
+ FIT_WEATHER_CONDITIONS_FIELD_NUM_CONDITION = 2,
4446
+ FIT_WEATHER_CONDITIONS_FIELD_NUM_PRECIPITATION_PROBABILITY = 5,
4447
+ FIT_WEATHER_CONDITIONS_FIELD_NUM_TEMPERATURE_FEELS_LIKE = 6,
4448
+ FIT_WEATHER_CONDITIONS_FIELD_NUM_RELATIVE_HUMIDITY = 7,
4449
+ FIT_WEATHER_CONDITIONS_FIELD_NUM_DAY_OF_WEEK = 12,
4450
+ FIT_WEATHER_CONDITIONS_FIELD_NUM_HIGH_TEMPERATURE = 13,
4451
+ FIT_WEATHER_CONDITIONS_FIELD_NUM_LOW_TEMPERATURE = 14
4452
+ } FIT_WEATHER_CONDITIONS_FIELD_NUM;
4453
+
4454
+ typedef enum
4455
+ {
4456
+ FIT_WEATHER_CONDITIONS_MESG_TIMESTAMP,
4457
+ FIT_WEATHER_CONDITIONS_MESG_LOCATION,
4458
+ FIT_WEATHER_CONDITIONS_MESG_OBSERVED_AT_TIME,
4459
+ FIT_WEATHER_CONDITIONS_MESG_OBSERVED_LOCATION_LAT,
4460
+ FIT_WEATHER_CONDITIONS_MESG_OBSERVED_LOCATION_LONG,
4461
+ FIT_WEATHER_CONDITIONS_MESG_WIND_DIRECTION,
4462
+ FIT_WEATHER_CONDITIONS_MESG_WIND_SPEED,
4463
+ FIT_WEATHER_CONDITIONS_MESG_WEATHER_REPORT,
4464
+ FIT_WEATHER_CONDITIONS_MESG_TEMPERATURE,
4465
+ FIT_WEATHER_CONDITIONS_MESG_CONDITION,
4466
+ FIT_WEATHER_CONDITIONS_MESG_PRECIPITATION_PROBABILITY,
4467
+ FIT_WEATHER_CONDITIONS_MESG_TEMPERATURE_FEELS_LIKE,
4468
+ FIT_WEATHER_CONDITIONS_MESG_RELATIVE_HUMIDITY,
4469
+ FIT_WEATHER_CONDITIONS_MESG_DAY_OF_WEEK,
4470
+ FIT_WEATHER_CONDITIONS_MESG_HIGH_TEMPERATURE,
4471
+ FIT_WEATHER_CONDITIONS_MESG_LOW_TEMPERATURE,
4472
+ FIT_WEATHER_CONDITIONS_MESG_FIELDS
4473
+ } FIT_WEATHER_CONDITIONS_MESG_FIELD;
4474
+
4475
+ typedef struct
4476
+ {
4477
+ FIT_UINT8 reserved_1;
4478
+ FIT_UINT8 arch;
4479
+ FIT_MESG_NUM global_mesg_num;
4480
+ FIT_UINT8 num_fields;
4481
+ FIT_UINT8 fields[FIT_WEATHER_CONDITIONS_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
4482
+ } FIT_WEATHER_CONDITIONS_MESG_DEF;
4483
+
4484
+ // weather_alert message
4485
+
4486
+ #define FIT_WEATHER_ALERT_MESG_SIZE 26
4487
+ #define FIT_WEATHER_ALERT_MESG_DEF_SIZE 23
4488
+ #define FIT_WEATHER_ALERT_MESG_REPORT_ID_COUNT 12
4489
+
4490
+ typedef struct
4491
+ {
4492
+ FIT_DATE_TIME timestamp; //
4493
+ FIT_STRING report_id[FIT_WEATHER_ALERT_MESG_REPORT_ID_COUNT]; // Unique identifier from GCS report ID string, length is 12
4494
+ FIT_DATE_TIME issue_time; // Time alert was issued
4495
+ FIT_DATE_TIME expire_time; // Time alert expires
4496
+ FIT_WEATHER_SEVERITY severity; // Warning, Watch, Advisory, Statement
4497
+ FIT_WEATHER_SEVERE_TYPE type; // Tornado, Severe Thunderstorm, etc.
4498
+ } FIT_WEATHER_ALERT_MESG;
4499
+
4500
+ typedef enum
4501
+ {
4502
+ FIT_WEATHER_ALERT_FIELD_NUM_TIMESTAMP = 253,
4503
+ FIT_WEATHER_ALERT_FIELD_NUM_REPORT_ID = 0,
4504
+ FIT_WEATHER_ALERT_FIELD_NUM_ISSUE_TIME = 1,
4505
+ FIT_WEATHER_ALERT_FIELD_NUM_EXPIRE_TIME = 2,
4506
+ FIT_WEATHER_ALERT_FIELD_NUM_SEVERITY = 3,
4507
+ FIT_WEATHER_ALERT_FIELD_NUM_TYPE = 4
4508
+ } FIT_WEATHER_ALERT_FIELD_NUM;
4509
+
4510
+ typedef enum
4511
+ {
4512
+ FIT_WEATHER_ALERT_MESG_TIMESTAMP,
4513
+ FIT_WEATHER_ALERT_MESG_REPORT_ID,
4514
+ FIT_WEATHER_ALERT_MESG_ISSUE_TIME,
4515
+ FIT_WEATHER_ALERT_MESG_EXPIRE_TIME,
4516
+ FIT_WEATHER_ALERT_MESG_SEVERITY,
4517
+ FIT_WEATHER_ALERT_MESG_TYPE,
4518
+ FIT_WEATHER_ALERT_MESG_FIELDS
4519
+ } FIT_WEATHER_ALERT_MESG_FIELD;
4520
+
4521
+ typedef struct
4522
+ {
4523
+ FIT_UINT8 reserved_1;
4524
+ FIT_UINT8 arch;
4525
+ FIT_MESG_NUM global_mesg_num;
4526
+ FIT_UINT8 num_fields;
4527
+ FIT_UINT8 fields[FIT_WEATHER_ALERT_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
4528
+ } FIT_WEATHER_ALERT_MESG_DEF;
4529
+
4530
+ // nmea_sentence message
4531
+
4532
+ #define FIT_NMEA_SENTENCE_MESG_SIZE 89
4533
+ #define FIT_NMEA_SENTENCE_MESG_DEF_SIZE 14
4534
+ #define FIT_NMEA_SENTENCE_MESG_SENTENCE_COUNT 83
4535
+
4536
+ typedef struct
4537
+ {
4538
+ FIT_DATE_TIME timestamp; // 1 * s + 0, Timestamp message was output
4539
+ FIT_UINT16 timestamp_ms; // 1 * ms + 0, Fractional part of timestamp, added to timestamp
4540
+ FIT_STRING sentence[FIT_NMEA_SENTENCE_MESG_SENTENCE_COUNT]; // NMEA sentence
4541
+ } FIT_NMEA_SENTENCE_MESG;
4542
+
4543
+ typedef enum
4544
+ {
4545
+ FIT_NMEA_SENTENCE_FIELD_NUM_TIMESTAMP = 253,
4546
+ FIT_NMEA_SENTENCE_FIELD_NUM_TIMESTAMP_MS = 0,
4547
+ FIT_NMEA_SENTENCE_FIELD_NUM_SENTENCE = 1
4548
+ } FIT_NMEA_SENTENCE_FIELD_NUM;
4549
+
4550
+ typedef enum
4551
+ {
4552
+ FIT_NMEA_SENTENCE_MESG_TIMESTAMP,
4553
+ FIT_NMEA_SENTENCE_MESG_TIMESTAMP_MS,
4554
+ FIT_NMEA_SENTENCE_MESG_SENTENCE,
4555
+ FIT_NMEA_SENTENCE_MESG_FIELDS
4556
+ } FIT_NMEA_SENTENCE_MESG_FIELD;
4557
+
4558
+ typedef struct
4559
+ {
4560
+ FIT_UINT8 reserved_1;
4561
+ FIT_UINT8 arch;
4562
+ FIT_MESG_NUM global_mesg_num;
4563
+ FIT_UINT8 num_fields;
4564
+ FIT_UINT8 fields[FIT_NMEA_SENTENCE_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
4565
+ } FIT_NMEA_SENTENCE_MESG_DEF;
4566
+
4567
+ // aviation_attitude message
4568
+
4569
+ #define FIT_AVIATION_ATTITUDE_MESG_SIZE 26
4570
+ #define FIT_AVIATION_ATTITUDE_MESG_DEF_SIZE 41
4571
+ #define FIT_AVIATION_ATTITUDE_MESG_SYSTEM_TIME_COUNT 1
4572
+ #define FIT_AVIATION_ATTITUDE_MESG_PITCH_COUNT 1
4573
+ #define FIT_AVIATION_ATTITUDE_MESG_ROLL_COUNT 1
4574
+ #define FIT_AVIATION_ATTITUDE_MESG_ACCEL_LATERAL_COUNT 1
4575
+ #define FIT_AVIATION_ATTITUDE_MESG_ACCEL_NORMAL_COUNT 1
4576
+ #define FIT_AVIATION_ATTITUDE_MESG_TURN_RATE_COUNT 1
4577
+ #define FIT_AVIATION_ATTITUDE_MESG_TRACK_COUNT 1
4578
+ #define FIT_AVIATION_ATTITUDE_MESG_VALIDITY_COUNT 1
4579
+ #define FIT_AVIATION_ATTITUDE_MESG_STAGE_COUNT 1
4580
+ #define FIT_AVIATION_ATTITUDE_MESG_ATTITUDE_STAGE_COMPLETE_COUNT 1
4581
+
4582
+ typedef struct
4583
+ {
4584
+ FIT_DATE_TIME timestamp; // 1 * s + 0, Timestamp message was output
4585
+ FIT_UINT32 system_time[FIT_AVIATION_ATTITUDE_MESG_SYSTEM_TIME_COUNT]; // 1 * ms + 0, System time associated with sample expressed in ms.
4586
+ FIT_UINT16 timestamp_ms; // 1 * ms + 0, Fractional part of timestamp, added to timestamp
4587
+ FIT_SINT16 pitch[FIT_AVIATION_ATTITUDE_MESG_PITCH_COUNT]; // 10430.38 * radians + 0, Range -PI/2 to +PI/2
4588
+ FIT_SINT16 roll[FIT_AVIATION_ATTITUDE_MESG_ROLL_COUNT]; // 10430.38 * radians + 0, Range -PI to +PI
4589
+ FIT_SINT16 accel_lateral[FIT_AVIATION_ATTITUDE_MESG_ACCEL_LATERAL_COUNT]; // 100 * m/s^2 + 0, Range -78.4 to +78.4 (-8 Gs to 8 Gs)
4590
+ FIT_SINT16 accel_normal[FIT_AVIATION_ATTITUDE_MESG_ACCEL_NORMAL_COUNT]; // 100 * m/s^2 + 0, Range -78.4 to +78.4 (-8 Gs to 8 Gs)
4591
+ FIT_SINT16 turn_rate[FIT_AVIATION_ATTITUDE_MESG_TURN_RATE_COUNT]; // 1024 * radians/second + 0, Range -8.727 to +8.727 (-500 degs/sec to +500 degs/sec)
4592
+ FIT_UINT16 track[FIT_AVIATION_ATTITUDE_MESG_TRACK_COUNT]; // 10430.38 * radians + 0, Track Angle/Heading Range 0 - 2pi
4593
+ FIT_ATTITUDE_VALIDITY validity[FIT_AVIATION_ATTITUDE_MESG_VALIDITY_COUNT]; //
4594
+ FIT_ATTITUDE_STAGE stage[FIT_AVIATION_ATTITUDE_MESG_STAGE_COUNT]; //
4595
+ FIT_UINT8 attitude_stage_complete[FIT_AVIATION_ATTITUDE_MESG_ATTITUDE_STAGE_COMPLETE_COUNT]; // 1 * % + 0, The percent complete of the current attitude stage. Set to 0 for attitude stages 0, 1 and 2 and to 100 for attitude stage 3 by AHRS modules that do not support it. Range - 100
4596
+ } FIT_AVIATION_ATTITUDE_MESG;
4597
+
4598
+ typedef enum
4599
+ {
4600
+ FIT_AVIATION_ATTITUDE_FIELD_NUM_TIMESTAMP = 253,
4601
+ FIT_AVIATION_ATTITUDE_FIELD_NUM_SYSTEM_TIME = 1,
4602
+ FIT_AVIATION_ATTITUDE_FIELD_NUM_TIMESTAMP_MS = 0,
4603
+ FIT_AVIATION_ATTITUDE_FIELD_NUM_PITCH = 2,
4604
+ FIT_AVIATION_ATTITUDE_FIELD_NUM_ROLL = 3,
4605
+ FIT_AVIATION_ATTITUDE_FIELD_NUM_ACCEL_LATERAL = 4,
4606
+ FIT_AVIATION_ATTITUDE_FIELD_NUM_ACCEL_NORMAL = 5,
4607
+ FIT_AVIATION_ATTITUDE_FIELD_NUM_TURN_RATE = 6,
4608
+ FIT_AVIATION_ATTITUDE_FIELD_NUM_TRACK = 9,
4609
+ FIT_AVIATION_ATTITUDE_FIELD_NUM_VALIDITY = 10,
4610
+ FIT_AVIATION_ATTITUDE_FIELD_NUM_STAGE = 7,
4611
+ FIT_AVIATION_ATTITUDE_FIELD_NUM_ATTITUDE_STAGE_COMPLETE = 8
4612
+ } FIT_AVIATION_ATTITUDE_FIELD_NUM;
4613
+
4614
+ typedef enum
4615
+ {
4616
+ FIT_AVIATION_ATTITUDE_MESG_TIMESTAMP,
4617
+ FIT_AVIATION_ATTITUDE_MESG_SYSTEM_TIME,
4618
+ FIT_AVIATION_ATTITUDE_MESG_TIMESTAMP_MS,
4619
+ FIT_AVIATION_ATTITUDE_MESG_PITCH,
4620
+ FIT_AVIATION_ATTITUDE_MESG_ROLL,
4621
+ FIT_AVIATION_ATTITUDE_MESG_ACCEL_LATERAL,
4622
+ FIT_AVIATION_ATTITUDE_MESG_ACCEL_NORMAL,
4623
+ FIT_AVIATION_ATTITUDE_MESG_TURN_RATE,
4624
+ FIT_AVIATION_ATTITUDE_MESG_TRACK,
4625
+ FIT_AVIATION_ATTITUDE_MESG_VALIDITY,
4626
+ FIT_AVIATION_ATTITUDE_MESG_STAGE,
4627
+ FIT_AVIATION_ATTITUDE_MESG_ATTITUDE_STAGE_COMPLETE,
4628
+ FIT_AVIATION_ATTITUDE_MESG_FIELDS
4629
+ } FIT_AVIATION_ATTITUDE_MESG_FIELD;
4630
+
4631
+ typedef struct
4632
+ {
4633
+ FIT_UINT8 reserved_1;
4634
+ FIT_UINT8 arch;
4635
+ FIT_MESG_NUM global_mesg_num;
4636
+ FIT_UINT8 num_fields;
4637
+ FIT_UINT8 fields[FIT_AVIATION_ATTITUDE_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
4638
+ } FIT_AVIATION_ATTITUDE_MESG_DEF;
4639
+
4640
+ // video_title message
4641
+
4642
+ #define FIT_VIDEO_TITLE_MESG_SIZE 84
4643
+ #define FIT_VIDEO_TITLE_MESG_DEF_SIZE 14
4644
+ #define FIT_VIDEO_TITLE_MESG_TEXT_COUNT 80
4645
+
4646
+ typedef struct
4647
+ {
4648
+ FIT_STRING text[FIT_VIDEO_TITLE_MESG_TEXT_COUNT]; //
4649
+ FIT_MESSAGE_INDEX message_index; // Long titles will be split into multiple parts
4650
+ FIT_UINT16 message_count; // Total number of title parts
4651
+ } FIT_VIDEO_TITLE_MESG;
4652
+
4653
+ typedef enum
4654
+ {
4655
+ FIT_VIDEO_TITLE_FIELD_NUM_TEXT = 1,
4656
+ FIT_VIDEO_TITLE_FIELD_NUM_MESSAGE_INDEX = 254,
4657
+ FIT_VIDEO_TITLE_FIELD_NUM_MESSAGE_COUNT = 0
4658
+ } FIT_VIDEO_TITLE_FIELD_NUM;
4659
+
4660
+ typedef enum
4661
+ {
4662
+ FIT_VIDEO_TITLE_MESG_TEXT,
4663
+ FIT_VIDEO_TITLE_MESG_MESSAGE_INDEX,
4664
+ FIT_VIDEO_TITLE_MESG_MESSAGE_COUNT,
4665
+ FIT_VIDEO_TITLE_MESG_FIELDS
4666
+ } FIT_VIDEO_TITLE_MESG_FIELD;
4667
+
4668
+ typedef struct
4669
+ {
4670
+ FIT_UINT8 reserved_1;
4671
+ FIT_UINT8 arch;
4672
+ FIT_MESG_NUM global_mesg_num;
4673
+ FIT_UINT8 num_fields;
4674
+ FIT_UINT8 fields[FIT_VIDEO_TITLE_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
4675
+ } FIT_VIDEO_TITLE_MESG_DEF;
4676
+
4677
+ // video_description message
4678
+
4679
+ #define FIT_VIDEO_DESCRIPTION_MESG_SIZE 254
4680
+ #define FIT_VIDEO_DESCRIPTION_MESG_DEF_SIZE 14
4681
+ #define FIT_VIDEO_DESCRIPTION_MESG_TEXT_COUNT 250
4682
+
4683
+ typedef struct
4684
+ {
4685
+ FIT_MESSAGE_INDEX message_index; // Long descriptions will be split into multiple parts
4686
+ FIT_UINT16 message_count; // Total number of description parts
4687
+ FIT_STRING text[FIT_VIDEO_DESCRIPTION_MESG_TEXT_COUNT]; //
4688
+ } FIT_VIDEO_DESCRIPTION_MESG;
4689
+
4690
+ typedef enum
4691
+ {
4692
+ FIT_VIDEO_DESCRIPTION_FIELD_NUM_MESSAGE_INDEX = 254,
4693
+ FIT_VIDEO_DESCRIPTION_FIELD_NUM_MESSAGE_COUNT = 0,
4694
+ FIT_VIDEO_DESCRIPTION_FIELD_NUM_TEXT = 1
4695
+ } FIT_VIDEO_DESCRIPTION_FIELD_NUM;
4696
+
4697
+ typedef enum
4698
+ {
4699
+ FIT_VIDEO_DESCRIPTION_MESG_MESSAGE_INDEX,
4700
+ FIT_VIDEO_DESCRIPTION_MESG_MESSAGE_COUNT,
4701
+ FIT_VIDEO_DESCRIPTION_MESG_TEXT,
4702
+ FIT_VIDEO_DESCRIPTION_MESG_FIELDS
4703
+ } FIT_VIDEO_DESCRIPTION_MESG_FIELD;
4704
+
4705
+ typedef struct
4706
+ {
4707
+ FIT_UINT8 reserved_1;
4708
+ FIT_UINT8 arch;
4709
+ FIT_MESG_NUM global_mesg_num;
4710
+ FIT_UINT8 num_fields;
4711
+ FIT_UINT8 fields[FIT_VIDEO_DESCRIPTION_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
4712
+ } FIT_VIDEO_DESCRIPTION_MESG_DEF;
4713
+
3038
4714
  // course message
3039
4715
 
3040
- #define FIT_COURSE_MESG_SIZE 21
3041
- #define FIT_COURSE_MESG_DEF_SIZE 14
4716
+ #define FIT_COURSE_MESG_SIZE 22
4717
+ #define FIT_COURSE_MESG_DEF_SIZE 17
3042
4718
  #define FIT_COURSE_MESG_NAME_COUNT 16
3043
4719
 
3044
4720
  typedef struct
3045
4721
  {
3046
- FIT_STRING name[FIT_COURSE_MESG_NAME_COUNT]; //
3047
- FIT_COURSE_CAPABILITIES capabilities; //
3048
- FIT_SPORT sport; //
4722
+ FIT_STRING name[FIT_COURSE_MESG_NAME_COUNT]; //
4723
+ FIT_COURSE_CAPABILITIES capabilities; //
4724
+ FIT_SPORT sport; //
4725
+ FIT_SUB_SPORT sub_sport; //
3049
4726
  } FIT_COURSE_MESG;
3050
4727
 
3051
4728
  typedef enum
3052
4729
  {
3053
4730
  FIT_COURSE_FIELD_NUM_NAME = 5,
3054
4731
  FIT_COURSE_FIELD_NUM_CAPABILITIES = 6,
3055
- FIT_COURSE_FIELD_NUM_SPORT = 4
4732
+ FIT_COURSE_FIELD_NUM_SPORT = 4,
4733
+ FIT_COURSE_FIELD_NUM_SUB_SPORT = 7
3056
4734
  } FIT_COURSE_FIELD_NUM;
3057
4735
 
3058
4736
  typedef enum
@@ -3060,6 +4738,7 @@ typedef enum
3060
4738
  FIT_COURSE_MESG_NAME,
3061
4739
  FIT_COURSE_MESG_CAPABILITIES,
3062
4740
  FIT_COURSE_MESG_SPORT,
4741
+ FIT_COURSE_MESG_SUB_SPORT,
3063
4742
  FIT_COURSE_MESG_FIELDS
3064
4743
  } FIT_COURSE_MESG_FIELD;
3065
4744
 
@@ -3074,19 +4753,20 @@ typedef struct
3074
4753
 
3075
4754
  // course_point message
3076
4755
 
3077
- #define FIT_COURSE_POINT_MESG_SIZE 35
3078
- #define FIT_COURSE_POINT_MESG_DEF_SIZE 26
4756
+ #define FIT_COURSE_POINT_MESG_SIZE 36
4757
+ #define FIT_COURSE_POINT_MESG_DEF_SIZE 29
3079
4758
  #define FIT_COURSE_POINT_MESG_NAME_COUNT 16
3080
4759
 
3081
4760
  typedef struct
3082
4761
  {
3083
- FIT_DATE_TIME timestamp; //
3084
- FIT_SINT32 position_lat; // semicircles,
3085
- FIT_SINT32 position_long; // semicircles,
3086
- FIT_UINT32 distance; // 100 * m,
3087
- FIT_STRING name[FIT_COURSE_POINT_MESG_NAME_COUNT]; //
3088
- FIT_MESSAGE_INDEX message_index; //
3089
- FIT_COURSE_POINT type; //
4762
+ FIT_DATE_TIME timestamp; //
4763
+ FIT_SINT32 position_lat; // 1 * semicircles + 0,
4764
+ FIT_SINT32 position_long; // 1 * semicircles + 0,
4765
+ FIT_UINT32 distance; // 100 * m + 0,
4766
+ FIT_STRING name[FIT_COURSE_POINT_MESG_NAME_COUNT]; //
4767
+ FIT_MESSAGE_INDEX message_index; //
4768
+ FIT_COURSE_POINT type; //
4769
+ FIT_BOOL favorite; //
3090
4770
  } FIT_COURSE_POINT_MESG;
3091
4771
 
3092
4772
  typedef enum
@@ -3097,7 +4777,8 @@ typedef enum
3097
4777
  FIT_COURSE_POINT_FIELD_NUM_DISTANCE = 4,
3098
4778
  FIT_COURSE_POINT_FIELD_NUM_NAME = 6,
3099
4779
  FIT_COURSE_POINT_FIELD_NUM_MESSAGE_INDEX = 254,
3100
- FIT_COURSE_POINT_FIELD_NUM_TYPE = 5
4780
+ FIT_COURSE_POINT_FIELD_NUM_TYPE = 5,
4781
+ FIT_COURSE_POINT_FIELD_NUM_FAVORITE = 8
3101
4782
  } FIT_COURSE_POINT_FIELD_NUM;
3102
4783
 
3103
4784
  typedef enum
@@ -3109,6 +4790,7 @@ typedef enum
3109
4790
  FIT_COURSE_POINT_MESG_NAME,
3110
4791
  FIT_COURSE_POINT_MESG_MESSAGE_INDEX,
3111
4792
  FIT_COURSE_POINT_MESG_TYPE,
4793
+ FIT_COURSE_POINT_MESG_FAVORITE,
3112
4794
  FIT_COURSE_POINT_MESG_FIELDS
3113
4795
  } FIT_COURSE_POINT_MESG_FIELD;
3114
4796
 
@@ -3121,6 +4803,458 @@ typedef struct
3121
4803
  FIT_UINT8 fields[FIT_COURSE_POINT_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
3122
4804
  } FIT_COURSE_POINT_MESG_DEF;
3123
4805
 
4806
+ // segment_id message
4807
+
4808
+ #define FIT_SEGMENT_ID_MESG_SIZE 15
4809
+ #define FIT_SEGMENT_ID_MESG_DEF_SIZE 32
4810
+ #define FIT_SEGMENT_ID_MESG_NAME_COUNT 1
4811
+ #define FIT_SEGMENT_ID_MESG_UUID_COUNT 1
4812
+
4813
+ typedef struct
4814
+ {
4815
+ FIT_UINT32 user_profile_primary_key; // Primary key of the user that created the segment
4816
+ FIT_UINT32 device_id; // ID of the device that created the segment
4817
+ FIT_STRING name[FIT_SEGMENT_ID_MESG_NAME_COUNT]; // Friendly name assigned to segment
4818
+ FIT_STRING uuid[FIT_SEGMENT_ID_MESG_UUID_COUNT]; // UUID of the segment
4819
+ FIT_SPORT sport; // Sport associated with the segment
4820
+ FIT_BOOL enabled; // Segment enabled for evaluation
4821
+ FIT_UINT8 default_race_leader; // Index for the Leader Board entry selected as the default race participant
4822
+ FIT_SEGMENT_DELETE_STATUS delete_status; // Indicates if any segments should be deleted
4823
+ FIT_SEGMENT_SELECTION_TYPE selection_type; // Indicates how the segment was selected to be sent to the device
4824
+ } FIT_SEGMENT_ID_MESG;
4825
+
4826
+ typedef enum
4827
+ {
4828
+ FIT_SEGMENT_ID_FIELD_NUM_USER_PROFILE_PRIMARY_KEY = 4,
4829
+ FIT_SEGMENT_ID_FIELD_NUM_DEVICE_ID = 5,
4830
+ FIT_SEGMENT_ID_FIELD_NUM_NAME = 0,
4831
+ FIT_SEGMENT_ID_FIELD_NUM_UUID = 1,
4832
+ FIT_SEGMENT_ID_FIELD_NUM_SPORT = 2,
4833
+ FIT_SEGMENT_ID_FIELD_NUM_ENABLED = 3,
4834
+ FIT_SEGMENT_ID_FIELD_NUM_DEFAULT_RACE_LEADER = 6,
4835
+ FIT_SEGMENT_ID_FIELD_NUM_DELETE_STATUS = 7,
4836
+ FIT_SEGMENT_ID_FIELD_NUM_SELECTION_TYPE = 8
4837
+ } FIT_SEGMENT_ID_FIELD_NUM;
4838
+
4839
+ typedef enum
4840
+ {
4841
+ FIT_SEGMENT_ID_MESG_USER_PROFILE_PRIMARY_KEY,
4842
+ FIT_SEGMENT_ID_MESG_DEVICE_ID,
4843
+ FIT_SEGMENT_ID_MESG_NAME,
4844
+ FIT_SEGMENT_ID_MESG_UUID,
4845
+ FIT_SEGMENT_ID_MESG_SPORT,
4846
+ FIT_SEGMENT_ID_MESG_ENABLED,
4847
+ FIT_SEGMENT_ID_MESG_DEFAULT_RACE_LEADER,
4848
+ FIT_SEGMENT_ID_MESG_DELETE_STATUS,
4849
+ FIT_SEGMENT_ID_MESG_SELECTION_TYPE,
4850
+ FIT_SEGMENT_ID_MESG_FIELDS
4851
+ } FIT_SEGMENT_ID_MESG_FIELD;
4852
+
4853
+ typedef struct
4854
+ {
4855
+ FIT_UINT8 reserved_1;
4856
+ FIT_UINT8 arch;
4857
+ FIT_MESG_NUM global_mesg_num;
4858
+ FIT_UINT8 num_fields;
4859
+ FIT_UINT8 fields[FIT_SEGMENT_ID_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
4860
+ } FIT_SEGMENT_ID_MESG_DEF;
4861
+
4862
+ // segment_leaderboard_entry message
4863
+
4864
+ #define FIT_SEGMENT_LEADERBOARD_ENTRY_MESG_SIZE 16
4865
+ #define FIT_SEGMENT_LEADERBOARD_ENTRY_MESG_DEF_SIZE 23
4866
+ #define FIT_SEGMENT_LEADERBOARD_ENTRY_MESG_NAME_COUNT 1
4867
+
4868
+ typedef struct
4869
+ {
4870
+ FIT_UINT32 group_primary_key; // Primary user ID of this leader
4871
+ FIT_UINT32 activity_id; // ID of the activity associated with this leader time
4872
+ FIT_UINT32 segment_time; // 1000 * s + 0, Segment Time (includes pauses)
4873
+ FIT_MESSAGE_INDEX message_index; //
4874
+ FIT_STRING name[FIT_SEGMENT_LEADERBOARD_ENTRY_MESG_NAME_COUNT]; // Friendly name assigned to leader
4875
+ FIT_SEGMENT_LEADERBOARD_TYPE type; // Leader classification
4876
+ } FIT_SEGMENT_LEADERBOARD_ENTRY_MESG;
4877
+
4878
+ typedef enum
4879
+ {
4880
+ FIT_SEGMENT_LEADERBOARD_ENTRY_FIELD_NUM_GROUP_PRIMARY_KEY = 2,
4881
+ FIT_SEGMENT_LEADERBOARD_ENTRY_FIELD_NUM_ACTIVITY_ID = 3,
4882
+ FIT_SEGMENT_LEADERBOARD_ENTRY_FIELD_NUM_SEGMENT_TIME = 4,
4883
+ FIT_SEGMENT_LEADERBOARD_ENTRY_FIELD_NUM_MESSAGE_INDEX = 254,
4884
+ FIT_SEGMENT_LEADERBOARD_ENTRY_FIELD_NUM_NAME = 0,
4885
+ FIT_SEGMENT_LEADERBOARD_ENTRY_FIELD_NUM_TYPE = 1
4886
+ } FIT_SEGMENT_LEADERBOARD_ENTRY_FIELD_NUM;
4887
+
4888
+ typedef enum
4889
+ {
4890
+ FIT_SEGMENT_LEADERBOARD_ENTRY_MESG_GROUP_PRIMARY_KEY,
4891
+ FIT_SEGMENT_LEADERBOARD_ENTRY_MESG_ACTIVITY_ID,
4892
+ FIT_SEGMENT_LEADERBOARD_ENTRY_MESG_SEGMENT_TIME,
4893
+ FIT_SEGMENT_LEADERBOARD_ENTRY_MESG_MESSAGE_INDEX,
4894
+ FIT_SEGMENT_LEADERBOARD_ENTRY_MESG_NAME,
4895
+ FIT_SEGMENT_LEADERBOARD_ENTRY_MESG_TYPE,
4896
+ FIT_SEGMENT_LEADERBOARD_ENTRY_MESG_FIELDS
4897
+ } FIT_SEGMENT_LEADERBOARD_ENTRY_MESG_FIELD;
4898
+
4899
+ typedef struct
4900
+ {
4901
+ FIT_UINT8 reserved_1;
4902
+ FIT_UINT8 arch;
4903
+ FIT_MESG_NUM global_mesg_num;
4904
+ FIT_UINT8 num_fields;
4905
+ FIT_UINT8 fields[FIT_SEGMENT_LEADERBOARD_ENTRY_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
4906
+ } FIT_SEGMENT_LEADERBOARD_ENTRY_MESG_DEF;
4907
+
4908
+ // segment_point message
4909
+
4910
+ #define FIT_SEGMENT_POINT_MESG_SIZE 20
4911
+ #define FIT_SEGMENT_POINT_MESG_DEF_SIZE 23
4912
+ #define FIT_SEGMENT_POINT_MESG_LEADER_TIME_COUNT 1
4913
+
4914
+ typedef struct
4915
+ {
4916
+ FIT_SINT32 position_lat; // 1 * semicircles + 0,
4917
+ FIT_SINT32 position_long; // 1 * semicircles + 0,
4918
+ FIT_UINT32 distance; // 100 * m + 0, Accumulated distance along the segment at the described point
4919
+ FIT_UINT32 leader_time[FIT_SEGMENT_POINT_MESG_LEADER_TIME_COUNT]; // 1000 * s + 0, Accumualted time each leader board member required to reach the described point. This value is zero for all leader board members at the starting point of the segment.
4920
+ FIT_MESSAGE_INDEX message_index; //
4921
+ FIT_UINT16 altitude; // 5 * m + 500, Accumulated altitude along the segment at the described point
4922
+ } FIT_SEGMENT_POINT_MESG;
4923
+
4924
+ typedef enum
4925
+ {
4926
+ FIT_SEGMENT_POINT_FIELD_NUM_POSITION_LAT = 1,
4927
+ FIT_SEGMENT_POINT_FIELD_NUM_POSITION_LONG = 2,
4928
+ FIT_SEGMENT_POINT_FIELD_NUM_DISTANCE = 3,
4929
+ FIT_SEGMENT_POINT_FIELD_NUM_LEADER_TIME = 5,
4930
+ FIT_SEGMENT_POINT_FIELD_NUM_MESSAGE_INDEX = 254,
4931
+ FIT_SEGMENT_POINT_FIELD_NUM_ALTITUDE = 4
4932
+ } FIT_SEGMENT_POINT_FIELD_NUM;
4933
+
4934
+ typedef enum
4935
+ {
4936
+ FIT_SEGMENT_POINT_MESG_POSITION_LAT,
4937
+ FIT_SEGMENT_POINT_MESG_POSITION_LONG,
4938
+ FIT_SEGMENT_POINT_MESG_DISTANCE,
4939
+ FIT_SEGMENT_POINT_MESG_LEADER_TIME,
4940
+ FIT_SEGMENT_POINT_MESG_MESSAGE_INDEX,
4941
+ FIT_SEGMENT_POINT_MESG_ALTITUDE,
4942
+ FIT_SEGMENT_POINT_MESG_FIELDS
4943
+ } FIT_SEGMENT_POINT_MESG_FIELD;
4944
+
4945
+ typedef struct
4946
+ {
4947
+ FIT_UINT8 reserved_1;
4948
+ FIT_UINT8 arch;
4949
+ FIT_MESG_NUM global_mesg_num;
4950
+ FIT_UINT8 num_fields;
4951
+ FIT_UINT8 fields[FIT_SEGMENT_POINT_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
4952
+ } FIT_SEGMENT_POINT_MESG_DEF;
4953
+
4954
+ // segment_lap message
4955
+
4956
+ #define FIT_SEGMENT_LAP_MESG_SIZE 210
4957
+ #define FIT_SEGMENT_LAP_MESG_DEF_SIZE 224
4958
+ #define FIT_SEGMENT_LAP_MESG_NAME_COUNT 16
4959
+ #define FIT_SEGMENT_LAP_MESG_TIME_IN_HR_ZONE_COUNT 1
4960
+ #define FIT_SEGMENT_LAP_MESG_TIME_IN_SPEED_ZONE_COUNT 1
4961
+ #define FIT_SEGMENT_LAP_MESG_TIME_IN_CADENCE_ZONE_COUNT 1
4962
+ #define FIT_SEGMENT_LAP_MESG_TIME_IN_POWER_ZONE_COUNT 1
4963
+ #define FIT_SEGMENT_LAP_MESG_UUID_COUNT 33
4964
+
4965
+ typedef struct
4966
+ {
4967
+ FIT_DATE_TIME timestamp; // 1 * s + 0, Lap end time.
4968
+ FIT_DATE_TIME start_time; //
4969
+ FIT_SINT32 start_position_lat; // 1 * semicircles + 0,
4970
+ FIT_SINT32 start_position_long; // 1 * semicircles + 0,
4971
+ FIT_SINT32 end_position_lat; // 1 * semicircles + 0,
4972
+ FIT_SINT32 end_position_long; // 1 * semicircles + 0,
4973
+ FIT_UINT32 total_elapsed_time; // 1000 * s + 0, Time (includes pauses)
4974
+ FIT_UINT32 total_timer_time; // 1000 * s + 0, Timer Time (excludes pauses)
4975
+ FIT_UINT32 total_distance; // 100 * m + 0,
4976
+ FIT_UINT32 total_cycles; // 1 * cycles + 0,
4977
+ FIT_SINT32 nec_lat; // 1 * semicircles + 0, North east corner latitude.
4978
+ FIT_SINT32 nec_long; // 1 * semicircles + 0, North east corner longitude.
4979
+ FIT_SINT32 swc_lat; // 1 * semicircles + 0, South west corner latitude.
4980
+ FIT_SINT32 swc_long; // 1 * semicircles + 0, South west corner latitude.
4981
+ FIT_STRING name[FIT_SEGMENT_LAP_MESG_NAME_COUNT]; //
4982
+ FIT_UINT32 total_work; // 1 * J + 0,
4983
+ FIT_UINT32 total_moving_time; // 1000 * s + 0,
4984
+ FIT_UINT32 time_in_hr_zone[FIT_SEGMENT_LAP_MESG_TIME_IN_HR_ZONE_COUNT]; // 1000 * s + 0,
4985
+ FIT_UINT32 time_in_speed_zone[FIT_SEGMENT_LAP_MESG_TIME_IN_SPEED_ZONE_COUNT]; // 1000 * s + 0,
4986
+ FIT_UINT32 time_in_cadence_zone[FIT_SEGMENT_LAP_MESG_TIME_IN_CADENCE_ZONE_COUNT]; // 1000 * s + 0,
4987
+ FIT_UINT32 time_in_power_zone[FIT_SEGMENT_LAP_MESG_TIME_IN_POWER_ZONE_COUNT]; // 1000 * s + 0,
4988
+ FIT_UINT32 active_time; // 1000 * s + 0,
4989
+ FIT_MESSAGE_INDEX message_index; //
4990
+ FIT_UINT16 total_calories; // 1 * kcal + 0,
4991
+ FIT_UINT16 total_fat_calories; // 1 * kcal + 0, If New Leaf
4992
+ FIT_UINT16 avg_speed; // 1000 * m/s + 0,
4993
+ FIT_UINT16 max_speed; // 1000 * m/s + 0,
4994
+ FIT_UINT16 avg_power; // 1 * watts + 0, total_power / total_timer_time if non_zero_avg_power otherwise total_power / total_elapsed_time
4995
+ FIT_UINT16 max_power; // 1 * watts + 0,
4996
+ FIT_UINT16 total_ascent; // 1 * m + 0,
4997
+ FIT_UINT16 total_descent; // 1 * m + 0,
4998
+ FIT_UINT16 normalized_power; // 1 * watts + 0,
4999
+ FIT_LEFT_RIGHT_BALANCE_100 left_right_balance; //
5000
+ FIT_UINT16 avg_altitude; // 5 * m + 500,
5001
+ FIT_UINT16 max_altitude; // 5 * m + 500,
5002
+ FIT_SINT16 avg_grade; // 100 * % + 0,
5003
+ FIT_SINT16 avg_pos_grade; // 100 * % + 0,
5004
+ FIT_SINT16 avg_neg_grade; // 100 * % + 0,
5005
+ FIT_SINT16 max_pos_grade; // 100 * % + 0,
5006
+ FIT_SINT16 max_neg_grade; // 100 * % + 0,
5007
+ FIT_SINT16 avg_pos_vertical_speed; // 1000 * m/s + 0,
5008
+ FIT_SINT16 avg_neg_vertical_speed; // 1000 * m/s + 0,
5009
+ FIT_SINT16 max_pos_vertical_speed; // 1000 * m/s + 0,
5010
+ FIT_SINT16 max_neg_vertical_speed; // 1000 * m/s + 0,
5011
+ FIT_UINT16 repetition_num; //
5012
+ FIT_UINT16 min_altitude; // 5 * m + 500,
5013
+ FIT_MESSAGE_INDEX wkt_step_index; //
5014
+ FIT_UINT16 front_gear_shift_count; //
5015
+ FIT_UINT16 rear_gear_shift_count; //
5016
+ FIT_EVENT event; //
5017
+ FIT_EVENT_TYPE event_type; //
5018
+ FIT_UINT8 avg_heart_rate; // 1 * bpm + 0,
5019
+ FIT_UINT8 max_heart_rate; // 1 * bpm + 0,
5020
+ FIT_UINT8 avg_cadence; // 1 * rpm + 0, total_cycles / total_timer_time if non_zero_avg_cadence otherwise total_cycles / total_elapsed_time
5021
+ FIT_UINT8 max_cadence; // 1 * rpm + 0,
5022
+ FIT_SPORT sport; //
5023
+ FIT_UINT8 event_group; //
5024
+ FIT_SUB_SPORT sub_sport; //
5025
+ FIT_UINT8 gps_accuracy; // 1 * m + 0,
5026
+ FIT_SINT8 avg_temperature; // 1 * C + 0,
5027
+ FIT_SINT8 max_temperature; // 1 * C + 0,
5028
+ FIT_UINT8 min_heart_rate; // 1 * bpm + 0,
5029
+ FIT_SPORT_EVENT sport_event; //
5030
+ FIT_UINT8 avg_left_torque_effectiveness; // 2 * percent + 0,
5031
+ FIT_UINT8 avg_right_torque_effectiveness; // 2 * percent + 0,
5032
+ FIT_UINT8 avg_left_pedal_smoothness; // 2 * percent + 0,
5033
+ FIT_UINT8 avg_right_pedal_smoothness; // 2 * percent + 0,
5034
+ FIT_UINT8 avg_combined_pedal_smoothness; // 2 * percent + 0,
5035
+ FIT_SEGMENT_LAP_STATUS status; //
5036
+ FIT_STRING uuid[FIT_SEGMENT_LAP_MESG_UUID_COUNT]; //
5037
+ FIT_UINT8 avg_fractional_cadence; // 128 * rpm + 0, fractional part of the avg_cadence
5038
+ FIT_UINT8 max_fractional_cadence; // 128 * rpm + 0, fractional part of the max_cadence
5039
+ FIT_UINT8 total_fractional_cycles; // 128 * cycles + 0, fractional part of the total_cycles
5040
+ } FIT_SEGMENT_LAP_MESG;
5041
+
5042
+ typedef enum
5043
+ {
5044
+ FIT_SEGMENT_LAP_FIELD_NUM_TIMESTAMP = 253,
5045
+ FIT_SEGMENT_LAP_FIELD_NUM_START_TIME = 2,
5046
+ FIT_SEGMENT_LAP_FIELD_NUM_START_POSITION_LAT = 3,
5047
+ FIT_SEGMENT_LAP_FIELD_NUM_START_POSITION_LONG = 4,
5048
+ FIT_SEGMENT_LAP_FIELD_NUM_END_POSITION_LAT = 5,
5049
+ FIT_SEGMENT_LAP_FIELD_NUM_END_POSITION_LONG = 6,
5050
+ FIT_SEGMENT_LAP_FIELD_NUM_TOTAL_ELAPSED_TIME = 7,
5051
+ FIT_SEGMENT_LAP_FIELD_NUM_TOTAL_TIMER_TIME = 8,
5052
+ FIT_SEGMENT_LAP_FIELD_NUM_TOTAL_DISTANCE = 9,
5053
+ FIT_SEGMENT_LAP_FIELD_NUM_TOTAL_CYCLES = 10,
5054
+ FIT_SEGMENT_LAP_FIELD_NUM_NEC_LAT = 25,
5055
+ FIT_SEGMENT_LAP_FIELD_NUM_NEC_LONG = 26,
5056
+ FIT_SEGMENT_LAP_FIELD_NUM_SWC_LAT = 27,
5057
+ FIT_SEGMENT_LAP_FIELD_NUM_SWC_LONG = 28,
5058
+ FIT_SEGMENT_LAP_FIELD_NUM_NAME = 29,
5059
+ FIT_SEGMENT_LAP_FIELD_NUM_TOTAL_WORK = 33,
5060
+ FIT_SEGMENT_LAP_FIELD_NUM_TOTAL_MOVING_TIME = 44,
5061
+ FIT_SEGMENT_LAP_FIELD_NUM_TIME_IN_HR_ZONE = 49,
5062
+ FIT_SEGMENT_LAP_FIELD_NUM_TIME_IN_SPEED_ZONE = 50,
5063
+ FIT_SEGMENT_LAP_FIELD_NUM_TIME_IN_CADENCE_ZONE = 51,
5064
+ FIT_SEGMENT_LAP_FIELD_NUM_TIME_IN_POWER_ZONE = 52,
5065
+ FIT_SEGMENT_LAP_FIELD_NUM_ACTIVE_TIME = 56,
5066
+ FIT_SEGMENT_LAP_FIELD_NUM_MESSAGE_INDEX = 254,
5067
+ FIT_SEGMENT_LAP_FIELD_NUM_TOTAL_CALORIES = 11,
5068
+ FIT_SEGMENT_LAP_FIELD_NUM_TOTAL_FAT_CALORIES = 12,
5069
+ FIT_SEGMENT_LAP_FIELD_NUM_AVG_SPEED = 13,
5070
+ FIT_SEGMENT_LAP_FIELD_NUM_MAX_SPEED = 14,
5071
+ FIT_SEGMENT_LAP_FIELD_NUM_AVG_POWER = 19,
5072
+ FIT_SEGMENT_LAP_FIELD_NUM_MAX_POWER = 20,
5073
+ FIT_SEGMENT_LAP_FIELD_NUM_TOTAL_ASCENT = 21,
5074
+ FIT_SEGMENT_LAP_FIELD_NUM_TOTAL_DESCENT = 22,
5075
+ FIT_SEGMENT_LAP_FIELD_NUM_NORMALIZED_POWER = 30,
5076
+ FIT_SEGMENT_LAP_FIELD_NUM_LEFT_RIGHT_BALANCE = 31,
5077
+ FIT_SEGMENT_LAP_FIELD_NUM_AVG_ALTITUDE = 34,
5078
+ FIT_SEGMENT_LAP_FIELD_NUM_MAX_ALTITUDE = 35,
5079
+ FIT_SEGMENT_LAP_FIELD_NUM_AVG_GRADE = 37,
5080
+ FIT_SEGMENT_LAP_FIELD_NUM_AVG_POS_GRADE = 38,
5081
+ FIT_SEGMENT_LAP_FIELD_NUM_AVG_NEG_GRADE = 39,
5082
+ FIT_SEGMENT_LAP_FIELD_NUM_MAX_POS_GRADE = 40,
5083
+ FIT_SEGMENT_LAP_FIELD_NUM_MAX_NEG_GRADE = 41,
5084
+ FIT_SEGMENT_LAP_FIELD_NUM_AVG_POS_VERTICAL_SPEED = 45,
5085
+ FIT_SEGMENT_LAP_FIELD_NUM_AVG_NEG_VERTICAL_SPEED = 46,
5086
+ FIT_SEGMENT_LAP_FIELD_NUM_MAX_POS_VERTICAL_SPEED = 47,
5087
+ FIT_SEGMENT_LAP_FIELD_NUM_MAX_NEG_VERTICAL_SPEED = 48,
5088
+ FIT_SEGMENT_LAP_FIELD_NUM_REPETITION_NUM = 53,
5089
+ FIT_SEGMENT_LAP_FIELD_NUM_MIN_ALTITUDE = 54,
5090
+ FIT_SEGMENT_LAP_FIELD_NUM_WKT_STEP_INDEX = 57,
5091
+ FIT_SEGMENT_LAP_FIELD_NUM_FRONT_GEAR_SHIFT_COUNT = 69,
5092
+ FIT_SEGMENT_LAP_FIELD_NUM_REAR_GEAR_SHIFT_COUNT = 70,
5093
+ FIT_SEGMENT_LAP_FIELD_NUM_EVENT = 0,
5094
+ FIT_SEGMENT_LAP_FIELD_NUM_EVENT_TYPE = 1,
5095
+ FIT_SEGMENT_LAP_FIELD_NUM_AVG_HEART_RATE = 15,
5096
+ FIT_SEGMENT_LAP_FIELD_NUM_MAX_HEART_RATE = 16,
5097
+ FIT_SEGMENT_LAP_FIELD_NUM_AVG_CADENCE = 17,
5098
+ FIT_SEGMENT_LAP_FIELD_NUM_MAX_CADENCE = 18,
5099
+ FIT_SEGMENT_LAP_FIELD_NUM_SPORT = 23,
5100
+ FIT_SEGMENT_LAP_FIELD_NUM_EVENT_GROUP = 24,
5101
+ FIT_SEGMENT_LAP_FIELD_NUM_SUB_SPORT = 32,
5102
+ FIT_SEGMENT_LAP_FIELD_NUM_GPS_ACCURACY = 36,
5103
+ FIT_SEGMENT_LAP_FIELD_NUM_AVG_TEMPERATURE = 42,
5104
+ FIT_SEGMENT_LAP_FIELD_NUM_MAX_TEMPERATURE = 43,
5105
+ FIT_SEGMENT_LAP_FIELD_NUM_MIN_HEART_RATE = 55,
5106
+ FIT_SEGMENT_LAP_FIELD_NUM_SPORT_EVENT = 58,
5107
+ FIT_SEGMENT_LAP_FIELD_NUM_AVG_LEFT_TORQUE_EFFECTIVENESS = 59,
5108
+ FIT_SEGMENT_LAP_FIELD_NUM_AVG_RIGHT_TORQUE_EFFECTIVENESS = 60,
5109
+ FIT_SEGMENT_LAP_FIELD_NUM_AVG_LEFT_PEDAL_SMOOTHNESS = 61,
5110
+ FIT_SEGMENT_LAP_FIELD_NUM_AVG_RIGHT_PEDAL_SMOOTHNESS = 62,
5111
+ FIT_SEGMENT_LAP_FIELD_NUM_AVG_COMBINED_PEDAL_SMOOTHNESS = 63,
5112
+ FIT_SEGMENT_LAP_FIELD_NUM_STATUS = 64,
5113
+ FIT_SEGMENT_LAP_FIELD_NUM_UUID = 65,
5114
+ FIT_SEGMENT_LAP_FIELD_NUM_AVG_FRACTIONAL_CADENCE = 66,
5115
+ FIT_SEGMENT_LAP_FIELD_NUM_MAX_FRACTIONAL_CADENCE = 67,
5116
+ FIT_SEGMENT_LAP_FIELD_NUM_TOTAL_FRACTIONAL_CYCLES = 68
5117
+ } FIT_SEGMENT_LAP_FIELD_NUM;
5118
+
5119
+ typedef enum
5120
+ {
5121
+ FIT_SEGMENT_LAP_MESG_TIMESTAMP,
5122
+ FIT_SEGMENT_LAP_MESG_START_TIME,
5123
+ FIT_SEGMENT_LAP_MESG_START_POSITION_LAT,
5124
+ FIT_SEGMENT_LAP_MESG_START_POSITION_LONG,
5125
+ FIT_SEGMENT_LAP_MESG_END_POSITION_LAT,
5126
+ FIT_SEGMENT_LAP_MESG_END_POSITION_LONG,
5127
+ FIT_SEGMENT_LAP_MESG_TOTAL_ELAPSED_TIME,
5128
+ FIT_SEGMENT_LAP_MESG_TOTAL_TIMER_TIME,
5129
+ FIT_SEGMENT_LAP_MESG_TOTAL_DISTANCE,
5130
+ FIT_SEGMENT_LAP_MESG_TOTAL_CYCLES,
5131
+ FIT_SEGMENT_LAP_MESG_NEC_LAT,
5132
+ FIT_SEGMENT_LAP_MESG_NEC_LONG,
5133
+ FIT_SEGMENT_LAP_MESG_SWC_LAT,
5134
+ FIT_SEGMENT_LAP_MESG_SWC_LONG,
5135
+ FIT_SEGMENT_LAP_MESG_NAME,
5136
+ FIT_SEGMENT_LAP_MESG_TOTAL_WORK,
5137
+ FIT_SEGMENT_LAP_MESG_TOTAL_MOVING_TIME,
5138
+ FIT_SEGMENT_LAP_MESG_TIME_IN_HR_ZONE,
5139
+ FIT_SEGMENT_LAP_MESG_TIME_IN_SPEED_ZONE,
5140
+ FIT_SEGMENT_LAP_MESG_TIME_IN_CADENCE_ZONE,
5141
+ FIT_SEGMENT_LAP_MESG_TIME_IN_POWER_ZONE,
5142
+ FIT_SEGMENT_LAP_MESG_ACTIVE_TIME,
5143
+ FIT_SEGMENT_LAP_MESG_MESSAGE_INDEX,
5144
+ FIT_SEGMENT_LAP_MESG_TOTAL_CALORIES,
5145
+ FIT_SEGMENT_LAP_MESG_TOTAL_FAT_CALORIES,
5146
+ FIT_SEGMENT_LAP_MESG_AVG_SPEED,
5147
+ FIT_SEGMENT_LAP_MESG_MAX_SPEED,
5148
+ FIT_SEGMENT_LAP_MESG_AVG_POWER,
5149
+ FIT_SEGMENT_LAP_MESG_MAX_POWER,
5150
+ FIT_SEGMENT_LAP_MESG_TOTAL_ASCENT,
5151
+ FIT_SEGMENT_LAP_MESG_TOTAL_DESCENT,
5152
+ FIT_SEGMENT_LAP_MESG_NORMALIZED_POWER,
5153
+ FIT_SEGMENT_LAP_MESG_LEFT_RIGHT_BALANCE,
5154
+ FIT_SEGMENT_LAP_MESG_AVG_ALTITUDE,
5155
+ FIT_SEGMENT_LAP_MESG_MAX_ALTITUDE,
5156
+ FIT_SEGMENT_LAP_MESG_AVG_GRADE,
5157
+ FIT_SEGMENT_LAP_MESG_AVG_POS_GRADE,
5158
+ FIT_SEGMENT_LAP_MESG_AVG_NEG_GRADE,
5159
+ FIT_SEGMENT_LAP_MESG_MAX_POS_GRADE,
5160
+ FIT_SEGMENT_LAP_MESG_MAX_NEG_GRADE,
5161
+ FIT_SEGMENT_LAP_MESG_AVG_POS_VERTICAL_SPEED,
5162
+ FIT_SEGMENT_LAP_MESG_AVG_NEG_VERTICAL_SPEED,
5163
+ FIT_SEGMENT_LAP_MESG_MAX_POS_VERTICAL_SPEED,
5164
+ FIT_SEGMENT_LAP_MESG_MAX_NEG_VERTICAL_SPEED,
5165
+ FIT_SEGMENT_LAP_MESG_REPETITION_NUM,
5166
+ FIT_SEGMENT_LAP_MESG_MIN_ALTITUDE,
5167
+ FIT_SEGMENT_LAP_MESG_WKT_STEP_INDEX,
5168
+ FIT_SEGMENT_LAP_MESG_FRONT_GEAR_SHIFT_COUNT,
5169
+ FIT_SEGMENT_LAP_MESG_REAR_GEAR_SHIFT_COUNT,
5170
+ FIT_SEGMENT_LAP_MESG_EVENT,
5171
+ FIT_SEGMENT_LAP_MESG_EVENT_TYPE,
5172
+ FIT_SEGMENT_LAP_MESG_AVG_HEART_RATE,
5173
+ FIT_SEGMENT_LAP_MESG_MAX_HEART_RATE,
5174
+ FIT_SEGMENT_LAP_MESG_AVG_CADENCE,
5175
+ FIT_SEGMENT_LAP_MESG_MAX_CADENCE,
5176
+ FIT_SEGMENT_LAP_MESG_SPORT,
5177
+ FIT_SEGMENT_LAP_MESG_EVENT_GROUP,
5178
+ FIT_SEGMENT_LAP_MESG_SUB_SPORT,
5179
+ FIT_SEGMENT_LAP_MESG_GPS_ACCURACY,
5180
+ FIT_SEGMENT_LAP_MESG_AVG_TEMPERATURE,
5181
+ FIT_SEGMENT_LAP_MESG_MAX_TEMPERATURE,
5182
+ FIT_SEGMENT_LAP_MESG_MIN_HEART_RATE,
5183
+ FIT_SEGMENT_LAP_MESG_SPORT_EVENT,
5184
+ FIT_SEGMENT_LAP_MESG_AVG_LEFT_TORQUE_EFFECTIVENESS,
5185
+ FIT_SEGMENT_LAP_MESG_AVG_RIGHT_TORQUE_EFFECTIVENESS,
5186
+ FIT_SEGMENT_LAP_MESG_AVG_LEFT_PEDAL_SMOOTHNESS,
5187
+ FIT_SEGMENT_LAP_MESG_AVG_RIGHT_PEDAL_SMOOTHNESS,
5188
+ FIT_SEGMENT_LAP_MESG_AVG_COMBINED_PEDAL_SMOOTHNESS,
5189
+ FIT_SEGMENT_LAP_MESG_STATUS,
5190
+ FIT_SEGMENT_LAP_MESG_UUID,
5191
+ FIT_SEGMENT_LAP_MESG_AVG_FRACTIONAL_CADENCE,
5192
+ FIT_SEGMENT_LAP_MESG_MAX_FRACTIONAL_CADENCE,
5193
+ FIT_SEGMENT_LAP_MESG_TOTAL_FRACTIONAL_CYCLES,
5194
+ FIT_SEGMENT_LAP_MESG_FIELDS
5195
+ } FIT_SEGMENT_LAP_MESG_FIELD;
5196
+
5197
+ typedef struct
5198
+ {
5199
+ FIT_UINT8 reserved_1;
5200
+ FIT_UINT8 arch;
5201
+ FIT_MESG_NUM global_mesg_num;
5202
+ FIT_UINT8 num_fields;
5203
+ FIT_UINT8 fields[FIT_SEGMENT_LAP_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
5204
+ } FIT_SEGMENT_LAP_MESG_DEF;
5205
+
5206
+ // segment_file message
5207
+
5208
+ #define FIT_SEGMENT_FILE_MESG_SIZE 17
5209
+ #define FIT_SEGMENT_FILE_MESG_DEF_SIZE 26
5210
+ #define FIT_SEGMENT_FILE_MESG_LEADER_GROUP_PRIMARY_KEY_COUNT 1
5211
+ #define FIT_SEGMENT_FILE_MESG_LEADER_ACTIVITY_ID_COUNT 1
5212
+ #define FIT_SEGMENT_FILE_MESG_FILE_UUID_COUNT 1
5213
+ #define FIT_SEGMENT_FILE_MESG_LEADER_TYPE_COUNT 1
5214
+
5215
+ typedef struct
5216
+ {
5217
+ FIT_UINT32 user_profile_primary_key; // Primary key of the user that created the segment file
5218
+ FIT_UINT32 leader_group_primary_key[FIT_SEGMENT_FILE_MESG_LEADER_GROUP_PRIMARY_KEY_COUNT]; // Group primary key of each leader in the segment file
5219
+ FIT_UINT32 leader_activity_id[FIT_SEGMENT_FILE_MESG_LEADER_ACTIVITY_ID_COUNT]; // Activity ID of each leader in the segment file
5220
+ FIT_MESSAGE_INDEX message_index; //
5221
+ FIT_STRING file_uuid[FIT_SEGMENT_FILE_MESG_FILE_UUID_COUNT]; // UUID of the segment file
5222
+ FIT_BOOL enabled; // Enabled state of the segment file
5223
+ FIT_SEGMENT_LEADERBOARD_TYPE leader_type[FIT_SEGMENT_FILE_MESG_LEADER_TYPE_COUNT]; // Leader type of each leader in the segment file
5224
+ } FIT_SEGMENT_FILE_MESG;
5225
+
5226
+ typedef enum
5227
+ {
5228
+ FIT_SEGMENT_FILE_FIELD_NUM_USER_PROFILE_PRIMARY_KEY = 4,
5229
+ FIT_SEGMENT_FILE_FIELD_NUM_LEADER_GROUP_PRIMARY_KEY = 8,
5230
+ FIT_SEGMENT_FILE_FIELD_NUM_LEADER_ACTIVITY_ID = 9,
5231
+ FIT_SEGMENT_FILE_FIELD_NUM_MESSAGE_INDEX = 254,
5232
+ FIT_SEGMENT_FILE_FIELD_NUM_FILE_UUID = 1,
5233
+ FIT_SEGMENT_FILE_FIELD_NUM_ENABLED = 3,
5234
+ FIT_SEGMENT_FILE_FIELD_NUM_LEADER_TYPE = 7
5235
+ } FIT_SEGMENT_FILE_FIELD_NUM;
5236
+
5237
+ typedef enum
5238
+ {
5239
+ FIT_SEGMENT_FILE_MESG_USER_PROFILE_PRIMARY_KEY,
5240
+ FIT_SEGMENT_FILE_MESG_LEADER_GROUP_PRIMARY_KEY,
5241
+ FIT_SEGMENT_FILE_MESG_LEADER_ACTIVITY_ID,
5242
+ FIT_SEGMENT_FILE_MESG_MESSAGE_INDEX,
5243
+ FIT_SEGMENT_FILE_MESG_FILE_UUID,
5244
+ FIT_SEGMENT_FILE_MESG_ENABLED,
5245
+ FIT_SEGMENT_FILE_MESG_LEADER_TYPE,
5246
+ FIT_SEGMENT_FILE_MESG_FIELDS
5247
+ } FIT_SEGMENT_FILE_MESG_FIELD;
5248
+
5249
+ typedef struct
5250
+ {
5251
+ FIT_UINT8 reserved_1;
5252
+ FIT_UINT8 arch;
5253
+ FIT_MESG_NUM global_mesg_num;
5254
+ FIT_UINT8 num_fields;
5255
+ FIT_UINT8 fields[FIT_SEGMENT_FILE_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
5256
+ } FIT_SEGMENT_FILE_MESG_DEF;
5257
+
3124
5258
  // workout message
3125
5259
 
3126
5260
  #define FIT_WORKOUT_MESG_SIZE 23
@@ -3129,10 +5263,10 @@ typedef struct
3129
5263
 
3130
5264
  typedef struct
3131
5265
  {
3132
- FIT_WORKOUT_CAPABILITIES capabilities; //
3133
- FIT_STRING wkt_name[FIT_WORKOUT_MESG_WKT_NAME_COUNT]; //
5266
+ FIT_WORKOUT_CAPABILITIES capabilities; //
5267
+ FIT_STRING wkt_name[FIT_WORKOUT_MESG_WKT_NAME_COUNT]; //
3134
5268
  FIT_UINT16 num_valid_steps; // number of valid steps
3135
- FIT_SPORT sport; //
5269
+ FIT_SPORT sport; //
3136
5270
  } FIT_WORKOUT_MESG;
3137
5271
 
3138
5272
  typedef enum
@@ -3169,15 +5303,15 @@ typedef struct
3169
5303
 
3170
5304
  typedef struct
3171
5305
  {
3172
- FIT_STRING wkt_step_name[FIT_WORKOUT_STEP_MESG_WKT_STEP_NAME_COUNT]; //
3173
- FIT_UINT32 duration_value; //
3174
- FIT_UINT32 target_value; //
3175
- FIT_UINT32 custom_target_value_low; //
3176
- FIT_UINT32 custom_target_value_high; //
3177
- FIT_MESSAGE_INDEX message_index; //
3178
- FIT_WKT_STEP_DURATION duration_type; //
3179
- FIT_WKT_STEP_TARGET target_type; //
3180
- FIT_INTENSITY intensity; //
5306
+ FIT_STRING wkt_step_name[FIT_WORKOUT_STEP_MESG_WKT_STEP_NAME_COUNT]; //
5307
+ FIT_UINT32 duration_value; //
5308
+ FIT_UINT32 target_value; //
5309
+ FIT_UINT32 custom_target_value_low; //
5310
+ FIT_UINT32 custom_target_value_high; //
5311
+ FIT_MESSAGE_INDEX message_index; //
5312
+ FIT_WKT_STEP_DURATION duration_type; //
5313
+ FIT_WKT_STEP_TARGET target_type; //
5314
+ FIT_INTENSITY intensity; //
3181
5315
  } FIT_WORKOUT_STEP_MESG;
3182
5316
 
3183
5317
  typedef enum
@@ -3225,11 +5359,11 @@ typedef struct
3225
5359
  {
3226
5360
  FIT_UINT32Z serial_number; // Corresponds to file_id of scheduled workout / course.
3227
5361
  FIT_DATE_TIME time_created; // Corresponds to file_id of scheduled workout / course.
3228
- FIT_LOCAL_DATE_TIME scheduled_time; //
5362
+ FIT_LOCAL_DATE_TIME scheduled_time; //
3229
5363
  FIT_MANUFACTURER manufacturer; // Corresponds to file_id of scheduled workout / course.
3230
5364
  FIT_UINT16 product; // Corresponds to file_id of scheduled workout / course.
3231
5365
  FIT_BOOL completed; // TRUE if this activity has been started
3232
- FIT_SCHEDULE type; //
5366
+ FIT_SCHEDULE type; //
3233
5367
  } FIT_SCHEDULE_MESG;
3234
5368
 
3235
5369
  typedef enum
@@ -3271,15 +5405,15 @@ typedef struct
3271
5405
 
3272
5406
  typedef struct
3273
5407
  {
3274
- FIT_DATE_TIME timestamp; // s,
3275
- FIT_UINT32 timer_time; // s,Excludes pauses
3276
- FIT_UINT32 distance; // m,
3277
- FIT_UINT32 calories; // kcal,
3278
- FIT_UINT32 elapsed_time; // s,Includes pauses
3279
- FIT_UINT32 active_time; // s,
3280
- FIT_MESSAGE_INDEX message_index; //
3281
- FIT_UINT16 sessions; //
3282
- FIT_SPORT sport; //
5408
+ FIT_DATE_TIME timestamp; // 1 * s + 0,
5409
+ FIT_UINT32 timer_time; // 1 * s + 0, Excludes pauses
5410
+ FIT_UINT32 distance; // 1 * m + 0,
5411
+ FIT_UINT32 calories; // 1 * kcal + 0,
5412
+ FIT_UINT32 elapsed_time; // 1 * s + 0, Includes pauses
5413
+ FIT_UINT32 active_time; // 1 * s + 0,
5414
+ FIT_MESSAGE_INDEX message_index; //
5415
+ FIT_UINT16 sessions; //
5416
+ FIT_SPORT sport; //
3283
5417
  } FIT_TOTALS_MESG;
3284
5418
 
3285
5419
  typedef enum
@@ -3325,19 +5459,19 @@ typedef struct
3325
5459
 
3326
5460
  typedef struct
3327
5461
  {
3328
- FIT_DATE_TIME timestamp; // s,
3329
- FIT_WEIGHT weight; // 100 * kg,
3330
- FIT_UINT16 percent_fat; // 100 * %,
3331
- FIT_UINT16 percent_hydration; // 100 * %,
3332
- FIT_UINT16 visceral_fat_mass; // 100 * kg,
3333
- FIT_UINT16 bone_mass; // 100 * kg,
3334
- FIT_UINT16 muscle_mass; // 100 * kg,
3335
- FIT_UINT16 basal_met; // 4 * kcal/day,
3336
- FIT_UINT16 active_met; // 4 * kcal/day,~4kJ per kcal, 0.25 allows max 16384 kcal
5462
+ FIT_DATE_TIME timestamp; // 1 * s + 0,
5463
+ FIT_WEIGHT weight; // 100 * kg + 0,
5464
+ FIT_UINT16 percent_fat; // 100 * % + 0,
5465
+ FIT_UINT16 percent_hydration; // 100 * % + 0,
5466
+ FIT_UINT16 visceral_fat_mass; // 100 * kg + 0,
5467
+ FIT_UINT16 bone_mass; // 100 * kg + 0,
5468
+ FIT_UINT16 muscle_mass; // 100 * kg + 0,
5469
+ FIT_UINT16 basal_met; // 4 * kcal/day + 0,
5470
+ FIT_UINT16 active_met; // 4 * kcal/day + 0, ~4kJ per kcal, 0.25 allows max 16384 kcal
3337
5471
  FIT_MESSAGE_INDEX user_profile_index; // Associates this weight scale message to a user. This corresponds to the index of the user profile message in the weight scale file.
3338
- FIT_UINT8 physique_rating; //
3339
- FIT_UINT8 metabolic_age; // years,
3340
- FIT_UINT8 visceral_fat_rating; //
5472
+ FIT_UINT8 physique_rating; //
5473
+ FIT_UINT8 metabolic_age; // 1 * years + 0,
5474
+ FIT_UINT8 visceral_fat_rating; //
3341
5475
  } FIT_WEIGHT_SCALE_MESG;
3342
5476
 
3343
5477
  typedef enum
@@ -3391,17 +5525,17 @@ typedef struct
3391
5525
 
3392
5526
  typedef struct
3393
5527
  {
3394
- FIT_DATE_TIME timestamp; // s,
3395
- FIT_UINT16 systolic_pressure; // mmHg,
3396
- FIT_UINT16 diastolic_pressure; // mmHg,
3397
- FIT_UINT16 mean_arterial_pressure; // mmHg,
3398
- FIT_UINT16 map_3_sample_mean; // mmHg,
3399
- FIT_UINT16 map_morning_values; // mmHg,
3400
- FIT_UINT16 map_evening_values; // mmHg,
5528
+ FIT_DATE_TIME timestamp; // 1 * s + 0,
5529
+ FIT_UINT16 systolic_pressure; // 1 * mmHg + 0,
5530
+ FIT_UINT16 diastolic_pressure; // 1 * mmHg + 0,
5531
+ FIT_UINT16 mean_arterial_pressure; // 1 * mmHg + 0,
5532
+ FIT_UINT16 map_3_sample_mean; // 1 * mmHg + 0,
5533
+ FIT_UINT16 map_morning_values; // 1 * mmHg + 0,
5534
+ FIT_UINT16 map_evening_values; // 1 * mmHg + 0,
3401
5535
  FIT_MESSAGE_INDEX user_profile_index; // Associates this blood pressure message to a user. This corresponds to the index of the user profile message in the blood pressure file.
3402
- FIT_UINT8 heart_rate; // bpm,
3403
- FIT_HR_TYPE heart_rate_type; //
3404
- FIT_BP_STATUS status; //
5536
+ FIT_UINT8 heart_rate; // 1 * bpm + 0,
5537
+ FIT_HR_TYPE heart_rate_type; //
5538
+ FIT_BP_STATUS status; //
3405
5539
  } FIT_BLOOD_PRESSURE_MESG;
3406
5540
 
3407
5541
  typedef enum
@@ -3451,8 +5585,8 @@ typedef struct
3451
5585
 
3452
5586
  typedef struct
3453
5587
  {
3454
- FIT_DATE_TIME timestamp; //
3455
- FIT_LOCAL_DATE_TIME local_timestamp; // Use to convert activity timestamps to local time if device does not support time zone and daylight savings time correction.
5588
+ FIT_DATE_TIME timestamp; // 1 * s + 0,
5589
+ FIT_LOCAL_DATE_TIME local_timestamp; // 1 * s + 0, Use to convert activity timestamps to local time if device does not support time zone and daylight savings time correction.
3456
5590
  } FIT_MONITORING_INFO_MESG;
3457
5591
 
3458
5592
  typedef enum
@@ -3484,18 +5618,18 @@ typedef struct
3484
5618
 
3485
5619
  typedef struct
3486
5620
  {
3487
- FIT_DATE_TIME timestamp; // s,Must align to logging interval, for example, time must be 00:00:00 for daily log.
3488
- FIT_UINT32 distance; // 100 * m,Accumulated distance. Maintained by MonitoringReader for each activity_type. See SDK documentation.
3489
- FIT_UINT32 cycles; // 2 * cycles,Accumulated cycles. Maintained by MonitoringReader for each activity_type. See SDK documentation.
3490
- FIT_UINT32 active_time; // 1000 * s,
5621
+ FIT_DATE_TIME timestamp; // 1 * s + 0, Must align to logging interval, for example, time must be 00:00:00 for daily log.
5622
+ FIT_UINT32 distance; // 100 * m + 0, Accumulated distance. Maintained by MonitoringReader for each activity_type. See SDK documentation.
5623
+ FIT_UINT32 cycles; // 2 * cycles + 0, Accumulated cycles. Maintained by MonitoringReader for each activity_type. See SDK documentation.
5624
+ FIT_UINT32 active_time; // 1000 * s + 0,
3491
5625
  FIT_LOCAL_DATE_TIME local_timestamp; // Must align to logging interval, for example, time must be 00:00:00 for daily log.
3492
- FIT_UINT16 calories; // kcal,Accumulated total calories. Maintained by MonitoringReader for each activity_type. See SDK documentation
3493
- FIT_UINT16 distance_16; // 100 * m,
3494
- FIT_UINT16 cycles_16; // 2 * cycles (steps),
3495
- FIT_UINT16 active_time_16; // s,
5626
+ FIT_UINT16 calories; // 1 * kcal + 0, Accumulated total calories. Maintained by MonitoringReader for each activity_type. See SDK documentation
5627
+ FIT_UINT16 distance_16; // 1 * 100 * m + 0,
5628
+ FIT_UINT16 cycles_16; // 1 * 2 * cycles (steps) + 0,
5629
+ FIT_UINT16 active_time_16; // 1 * s + 0,
3496
5630
  FIT_DEVICE_INDEX device_index; // Associates this data to device_info message. Not required for file with single device (sensor).
3497
- FIT_ACTIVITY_TYPE activity_type; //
3498
- FIT_ACTIVITY_SUBTYPE activity_subtype; //
5631
+ FIT_ACTIVITY_TYPE activity_type; //
5632
+ FIT_ACTIVITY_SUBTYPE activity_subtype; //
3499
5633
  } FIT_MONITORING_MESG;
3500
5634
 
3501
5635
  typedef enum
@@ -3540,6 +5674,396 @@ typedef struct
3540
5674
  FIT_UINT8 fields[FIT_MONITORING_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
3541
5675
  } FIT_MONITORING_MESG_DEF;
3542
5676
 
5677
+ // hr message
5678
+
5679
+ #define FIT_HR_MESG_SIZE 13
5680
+ #define FIT_HR_MESG_DEF_SIZE 23
5681
+ #define FIT_HR_MESG_EVENT_TIMESTAMP_COUNT 1
5682
+ #define FIT_HR_MESG_FILTERED_BPM_COUNT 1
5683
+ #define FIT_HR_MESG_EVENT_TIMESTAMP_12_COUNT 1
5684
+
5685
+ typedef struct
5686
+ {
5687
+ FIT_DATE_TIME timestamp; //
5688
+ FIT_UINT32 event_timestamp[FIT_HR_MESG_EVENT_TIMESTAMP_COUNT]; // 1024 * s + 0,
5689
+ FIT_UINT16 fractional_timestamp; // 32768 * s + 0,
5690
+ FIT_UINT8 time256; // 256 * s + 0,
5691
+ FIT_UINT8 filtered_bpm[FIT_HR_MESG_FILTERED_BPM_COUNT]; // 1 * bpm + 0,
5692
+ FIT_BYTE event_timestamp_12[FIT_HR_MESG_EVENT_TIMESTAMP_12_COUNT]; //
5693
+ } FIT_HR_MESG;
5694
+
5695
+ typedef enum
5696
+ {
5697
+ FIT_HR_FIELD_NUM_TIMESTAMP = 253,
5698
+ FIT_HR_FIELD_NUM_EVENT_TIMESTAMP = 9,
5699
+ FIT_HR_FIELD_NUM_FRACTIONAL_TIMESTAMP = 0,
5700
+ FIT_HR_FIELD_NUM_TIME256 = 1,
5701
+ FIT_HR_FIELD_NUM_FILTERED_BPM = 6,
5702
+ FIT_HR_FIELD_NUM_EVENT_TIMESTAMP_12 = 10
5703
+ } FIT_HR_FIELD_NUM;
5704
+
5705
+ typedef enum
5706
+ {
5707
+ FIT_HR_MESG_TIMESTAMP,
5708
+ FIT_HR_MESG_EVENT_TIMESTAMP,
5709
+ FIT_HR_MESG_FRACTIONAL_TIMESTAMP,
5710
+ FIT_HR_MESG_TIME256,
5711
+ FIT_HR_MESG_FILTERED_BPM,
5712
+ FIT_HR_MESG_EVENT_TIMESTAMP_12,
5713
+ FIT_HR_MESG_FIELDS
5714
+ } FIT_HR_MESG_FIELD;
5715
+
5716
+ typedef struct
5717
+ {
5718
+ FIT_UINT8 reserved_1;
5719
+ FIT_UINT8 arch;
5720
+ FIT_MESG_NUM global_mesg_num;
5721
+ FIT_UINT8 num_fields;
5722
+ FIT_UINT8 fields[FIT_HR_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
5723
+ } FIT_HR_MESG_DEF;
5724
+
5725
+ // ant_rx message
5726
+
5727
+ #define FIT_ANT_RX_MESG_SIZE 25
5728
+ #define FIT_ANT_RX_MESG_DEF_SIZE 23
5729
+ #define FIT_ANT_RX_MESG_DATA_COUNT 8
5730
+ #define FIT_ANT_RX_MESG_MESG_DATA_COUNT 9
5731
+
5732
+ typedef struct
5733
+ {
5734
+ FIT_DATE_TIME timestamp; // 1 * s + 0,
5735
+ FIT_BYTE data[FIT_ANT_RX_MESG_DATA_COUNT]; //
5736
+ FIT_UINT16 fractional_timestamp; // 32768 * s + 0,
5737
+ FIT_BYTE mesg_id; //
5738
+ FIT_BYTE mesg_data[FIT_ANT_RX_MESG_MESG_DATA_COUNT]; //
5739
+ FIT_UINT8 channel_number; //
5740
+ } FIT_ANT_RX_MESG;
5741
+
5742
+ typedef enum
5743
+ {
5744
+ FIT_ANT_RX_FIELD_NUM_TIMESTAMP = 253,
5745
+ FIT_ANT_RX_FIELD_NUM_DATA = 4,
5746
+ FIT_ANT_RX_FIELD_NUM_FRACTIONAL_TIMESTAMP = 0,
5747
+ FIT_ANT_RX_FIELD_NUM_MESG_ID = 1,
5748
+ FIT_ANT_RX_FIELD_NUM_MESG_DATA = 2,
5749
+ FIT_ANT_RX_FIELD_NUM_CHANNEL_NUMBER = 3
5750
+ } FIT_ANT_RX_FIELD_NUM;
5751
+
5752
+ typedef enum
5753
+ {
5754
+ FIT_ANT_RX_MESG_TIMESTAMP,
5755
+ FIT_ANT_RX_MESG_DATA,
5756
+ FIT_ANT_RX_MESG_FRACTIONAL_TIMESTAMP,
5757
+ FIT_ANT_RX_MESG_MESG_ID,
5758
+ FIT_ANT_RX_MESG_MESG_DATA,
5759
+ FIT_ANT_RX_MESG_CHANNEL_NUMBER,
5760
+ FIT_ANT_RX_MESG_FIELDS
5761
+ } FIT_ANT_RX_MESG_FIELD;
5762
+
5763
+ typedef struct
5764
+ {
5765
+ FIT_UINT8 reserved_1;
5766
+ FIT_UINT8 arch;
5767
+ FIT_MESG_NUM global_mesg_num;
5768
+ FIT_UINT8 num_fields;
5769
+ FIT_UINT8 fields[FIT_ANT_RX_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
5770
+ } FIT_ANT_RX_MESG_DEF;
5771
+
5772
+ // ant_tx message
5773
+
5774
+ #define FIT_ANT_TX_MESG_SIZE 25
5775
+ #define FIT_ANT_TX_MESG_DEF_SIZE 23
5776
+ #define FIT_ANT_TX_MESG_DATA_COUNT 8
5777
+ #define FIT_ANT_TX_MESG_MESG_DATA_COUNT 9
5778
+
5779
+ typedef struct
5780
+ {
5781
+ FIT_DATE_TIME timestamp; // 1 * s + 0,
5782
+ FIT_BYTE data[FIT_ANT_TX_MESG_DATA_COUNT]; //
5783
+ FIT_UINT16 fractional_timestamp; // 32768 * s + 0,
5784
+ FIT_BYTE mesg_id; //
5785
+ FIT_BYTE mesg_data[FIT_ANT_TX_MESG_MESG_DATA_COUNT]; //
5786
+ FIT_UINT8 channel_number; //
5787
+ } FIT_ANT_TX_MESG;
5788
+
5789
+ typedef enum
5790
+ {
5791
+ FIT_ANT_TX_FIELD_NUM_TIMESTAMP = 253,
5792
+ FIT_ANT_TX_FIELD_NUM_DATA = 4,
5793
+ FIT_ANT_TX_FIELD_NUM_FRACTIONAL_TIMESTAMP = 0,
5794
+ FIT_ANT_TX_FIELD_NUM_MESG_ID = 1,
5795
+ FIT_ANT_TX_FIELD_NUM_MESG_DATA = 2,
5796
+ FIT_ANT_TX_FIELD_NUM_CHANNEL_NUMBER = 3
5797
+ } FIT_ANT_TX_FIELD_NUM;
5798
+
5799
+ typedef enum
5800
+ {
5801
+ FIT_ANT_TX_MESG_TIMESTAMP,
5802
+ FIT_ANT_TX_MESG_DATA,
5803
+ FIT_ANT_TX_MESG_FRACTIONAL_TIMESTAMP,
5804
+ FIT_ANT_TX_MESG_MESG_ID,
5805
+ FIT_ANT_TX_MESG_MESG_DATA,
5806
+ FIT_ANT_TX_MESG_CHANNEL_NUMBER,
5807
+ FIT_ANT_TX_MESG_FIELDS
5808
+ } FIT_ANT_TX_MESG_FIELD;
5809
+
5810
+ typedef struct
5811
+ {
5812
+ FIT_UINT8 reserved_1;
5813
+ FIT_UINT8 arch;
5814
+ FIT_MESG_NUM global_mesg_num;
5815
+ FIT_UINT8 num_fields;
5816
+ FIT_UINT8 fields[FIT_ANT_TX_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
5817
+ } FIT_ANT_TX_MESG_DEF;
5818
+
5819
+ // exd_screen_configuration message
5820
+
5821
+ #define FIT_EXD_SCREEN_CONFIGURATION_MESG_SIZE 4
5822
+ #define FIT_EXD_SCREEN_CONFIGURATION_MESG_DEF_SIZE 17
5823
+
5824
+ typedef struct
5825
+ {
5826
+ FIT_UINT8 screen_index; //
5827
+ FIT_UINT8 field_count; // number of fields in screen
5828
+ FIT_EXD_LAYOUT layout; //
5829
+ FIT_BOOL screen_enabled; //
5830
+ } FIT_EXD_SCREEN_CONFIGURATION_MESG;
5831
+
5832
+ typedef enum
5833
+ {
5834
+ FIT_EXD_SCREEN_CONFIGURATION_FIELD_NUM_SCREEN_INDEX = 0,
5835
+ FIT_EXD_SCREEN_CONFIGURATION_FIELD_NUM_FIELD_COUNT = 1,
5836
+ FIT_EXD_SCREEN_CONFIGURATION_FIELD_NUM_LAYOUT = 2,
5837
+ FIT_EXD_SCREEN_CONFIGURATION_FIELD_NUM_SCREEN_ENABLED = 3
5838
+ } FIT_EXD_SCREEN_CONFIGURATION_FIELD_NUM;
5839
+
5840
+ typedef enum
5841
+ {
5842
+ FIT_EXD_SCREEN_CONFIGURATION_MESG_SCREEN_INDEX,
5843
+ FIT_EXD_SCREEN_CONFIGURATION_MESG_FIELD_COUNT,
5844
+ FIT_EXD_SCREEN_CONFIGURATION_MESG_LAYOUT,
5845
+ FIT_EXD_SCREEN_CONFIGURATION_MESG_SCREEN_ENABLED,
5846
+ FIT_EXD_SCREEN_CONFIGURATION_MESG_FIELDS
5847
+ } FIT_EXD_SCREEN_CONFIGURATION_MESG_FIELD;
5848
+
5849
+ typedef struct
5850
+ {
5851
+ FIT_UINT8 reserved_1;
5852
+ FIT_UINT8 arch;
5853
+ FIT_MESG_NUM global_mesg_num;
5854
+ FIT_UINT8 num_fields;
5855
+ FIT_UINT8 fields[FIT_EXD_SCREEN_CONFIGURATION_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
5856
+ } FIT_EXD_SCREEN_CONFIGURATION_MESG_DEF;
5857
+
5858
+ // exd_data_field_configuration message
5859
+
5860
+ #define FIT_EXD_DATA_FIELD_CONFIGURATION_MESG_SIZE 6
5861
+ #define FIT_EXD_DATA_FIELD_CONFIGURATION_MESG_DEF_SIZE 23
5862
+ #define FIT_EXD_DATA_FIELD_CONFIGURATION_MESG_TITLE_COUNT 1
5863
+
5864
+ typedef struct
5865
+ {
5866
+ FIT_UINT8 screen_index; //
5867
+ FIT_BYTE concept_field; //
5868
+ FIT_UINT8 field_id; //
5869
+ FIT_UINT8 concept_count; //
5870
+ FIT_EXD_DISPLAY_TYPE display_type; //
5871
+ FIT_STRING title[FIT_EXD_DATA_FIELD_CONFIGURATION_MESG_TITLE_COUNT]; //
5872
+ } FIT_EXD_DATA_FIELD_CONFIGURATION_MESG;
5873
+
5874
+ typedef enum
5875
+ {
5876
+ FIT_EXD_DATA_FIELD_CONFIGURATION_FIELD_NUM_SCREEN_INDEX = 0,
5877
+ FIT_EXD_DATA_FIELD_CONFIGURATION_FIELD_NUM_CONCEPT_FIELD = 1,
5878
+ FIT_EXD_DATA_FIELD_CONFIGURATION_FIELD_NUM_FIELD_ID = 2,
5879
+ FIT_EXD_DATA_FIELD_CONFIGURATION_FIELD_NUM_CONCEPT_COUNT = 3,
5880
+ FIT_EXD_DATA_FIELD_CONFIGURATION_FIELD_NUM_DISPLAY_TYPE = 4,
5881
+ FIT_EXD_DATA_FIELD_CONFIGURATION_FIELD_NUM_TITLE = 5
5882
+ } FIT_EXD_DATA_FIELD_CONFIGURATION_FIELD_NUM;
5883
+
5884
+ typedef enum
5885
+ {
5886
+ FIT_EXD_DATA_FIELD_CONFIGURATION_MESG_SCREEN_INDEX,
5887
+ FIT_EXD_DATA_FIELD_CONFIGURATION_MESG_CONCEPT_FIELD,
5888
+ FIT_EXD_DATA_FIELD_CONFIGURATION_MESG_FIELD_ID,
5889
+ FIT_EXD_DATA_FIELD_CONFIGURATION_MESG_CONCEPT_COUNT,
5890
+ FIT_EXD_DATA_FIELD_CONFIGURATION_MESG_DISPLAY_TYPE,
5891
+ FIT_EXD_DATA_FIELD_CONFIGURATION_MESG_TITLE,
5892
+ FIT_EXD_DATA_FIELD_CONFIGURATION_MESG_FIELDS
5893
+ } FIT_EXD_DATA_FIELD_CONFIGURATION_MESG_FIELD;
5894
+
5895
+ typedef struct
5896
+ {
5897
+ FIT_UINT8 reserved_1;
5898
+ FIT_UINT8 arch;
5899
+ FIT_MESG_NUM global_mesg_num;
5900
+ FIT_UINT8 num_fields;
5901
+ FIT_UINT8 fields[FIT_EXD_DATA_FIELD_CONFIGURATION_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
5902
+ } FIT_EXD_DATA_FIELD_CONFIGURATION_MESG_DEF;
5903
+
5904
+ // exd_data_concept_configuration message
5905
+
5906
+ #define FIT_EXD_DATA_CONCEPT_CONFIGURATION_MESG_SIZE 11
5907
+ #define FIT_EXD_DATA_CONCEPT_CONFIGURATION_MESG_DEF_SIZE 38
5908
+
5909
+ typedef struct
5910
+ {
5911
+ FIT_UINT8 screen_index; //
5912
+ FIT_BYTE concept_field; //
5913
+ FIT_UINT8 field_id; //
5914
+ FIT_UINT8 concept_index; //
5915
+ FIT_UINT8 data_page; //
5916
+ FIT_UINT8 concept_key; //
5917
+ FIT_UINT8 scaling; //
5918
+ FIT_EXD_DATA_UNITS data_units; //
5919
+ FIT_EXD_QUALIFIERS qualifier; //
5920
+ FIT_EXD_DESCRIPTORS descriptor; //
5921
+ FIT_BOOL is_signed; //
5922
+ } FIT_EXD_DATA_CONCEPT_CONFIGURATION_MESG;
5923
+
5924
+ typedef enum
5925
+ {
5926
+ FIT_EXD_DATA_CONCEPT_CONFIGURATION_FIELD_NUM_SCREEN_INDEX = 0,
5927
+ FIT_EXD_DATA_CONCEPT_CONFIGURATION_FIELD_NUM_CONCEPT_FIELD = 1,
5928
+ FIT_EXD_DATA_CONCEPT_CONFIGURATION_FIELD_NUM_FIELD_ID = 2,
5929
+ FIT_EXD_DATA_CONCEPT_CONFIGURATION_FIELD_NUM_CONCEPT_INDEX = 3,
5930
+ FIT_EXD_DATA_CONCEPT_CONFIGURATION_FIELD_NUM_DATA_PAGE = 4,
5931
+ FIT_EXD_DATA_CONCEPT_CONFIGURATION_FIELD_NUM_CONCEPT_KEY = 5,
5932
+ FIT_EXD_DATA_CONCEPT_CONFIGURATION_FIELD_NUM_SCALING = 6,
5933
+ FIT_EXD_DATA_CONCEPT_CONFIGURATION_FIELD_NUM_DATA_UNITS = 8,
5934
+ FIT_EXD_DATA_CONCEPT_CONFIGURATION_FIELD_NUM_QUALIFIER = 9,
5935
+ FIT_EXD_DATA_CONCEPT_CONFIGURATION_FIELD_NUM_DESCRIPTOR = 10,
5936
+ FIT_EXD_DATA_CONCEPT_CONFIGURATION_FIELD_NUM_IS_SIGNED = 11
5937
+ } FIT_EXD_DATA_CONCEPT_CONFIGURATION_FIELD_NUM;
5938
+
5939
+ typedef enum
5940
+ {
5941
+ FIT_EXD_DATA_CONCEPT_CONFIGURATION_MESG_SCREEN_INDEX,
5942
+ FIT_EXD_DATA_CONCEPT_CONFIGURATION_MESG_CONCEPT_FIELD,
5943
+ FIT_EXD_DATA_CONCEPT_CONFIGURATION_MESG_FIELD_ID,
5944
+ FIT_EXD_DATA_CONCEPT_CONFIGURATION_MESG_CONCEPT_INDEX,
5945
+ FIT_EXD_DATA_CONCEPT_CONFIGURATION_MESG_DATA_PAGE,
5946
+ FIT_EXD_DATA_CONCEPT_CONFIGURATION_MESG_CONCEPT_KEY,
5947
+ FIT_EXD_DATA_CONCEPT_CONFIGURATION_MESG_SCALING,
5948
+ FIT_EXD_DATA_CONCEPT_CONFIGURATION_MESG_DATA_UNITS,
5949
+ FIT_EXD_DATA_CONCEPT_CONFIGURATION_MESG_QUALIFIER,
5950
+ FIT_EXD_DATA_CONCEPT_CONFIGURATION_MESG_DESCRIPTOR,
5951
+ FIT_EXD_DATA_CONCEPT_CONFIGURATION_MESG_IS_SIGNED,
5952
+ FIT_EXD_DATA_CONCEPT_CONFIGURATION_MESG_FIELDS
5953
+ } FIT_EXD_DATA_CONCEPT_CONFIGURATION_MESG_FIELD;
5954
+
5955
+ typedef struct
5956
+ {
5957
+ FIT_UINT8 reserved_1;
5958
+ FIT_UINT8 arch;
5959
+ FIT_MESG_NUM global_mesg_num;
5960
+ FIT_UINT8 num_fields;
5961
+ FIT_UINT8 fields[FIT_EXD_DATA_CONCEPT_CONFIGURATION_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
5962
+ } FIT_EXD_DATA_CONCEPT_CONFIGURATION_MESG_DEF;
5963
+
5964
+ // field_description message
5965
+
5966
+ #define FIT_FIELD_DESCRIPTION_MESG_SIZE 90
5967
+ #define FIT_FIELD_DESCRIPTION_MESG_DEF_SIZE 35
5968
+ #define FIT_FIELD_DESCRIPTION_MESG_FIELD_NAME_COUNT 64
5969
+ #define FIT_FIELD_DESCRIPTION_MESG_UNITS_COUNT 16
5970
+
5971
+ typedef struct
5972
+ {
5973
+ FIT_STRING field_name[FIT_FIELD_DESCRIPTION_MESG_FIELD_NAME_COUNT]; //
5974
+ FIT_STRING units[FIT_FIELD_DESCRIPTION_MESG_UNITS_COUNT]; //
5975
+ FIT_FIT_BASE_UNIT fit_base_unit_id; //
5976
+ FIT_MESG_NUM native_mesg_num; //
5977
+ FIT_UINT8 developer_data_index; //
5978
+ FIT_UINT8 field_definition_number; //
5979
+ FIT_FIT_BASE_TYPE fit_base_type_id; //
5980
+ FIT_UINT8 scale; //
5981
+ FIT_SINT8 offset; //
5982
+ FIT_UINT8 native_field_num; //
5983
+ } FIT_FIELD_DESCRIPTION_MESG;
5984
+
5985
+ typedef enum
5986
+ {
5987
+ FIT_FIELD_DESCRIPTION_FIELD_NUM_FIELD_NAME = 3,
5988
+ FIT_FIELD_DESCRIPTION_FIELD_NUM_UNITS = 8,
5989
+ FIT_FIELD_DESCRIPTION_FIELD_NUM_FIT_BASE_UNIT_ID = 13,
5990
+ FIT_FIELD_DESCRIPTION_FIELD_NUM_NATIVE_MESG_NUM = 14,
5991
+ FIT_FIELD_DESCRIPTION_FIELD_NUM_DEVELOPER_DATA_INDEX = 0,
5992
+ FIT_FIELD_DESCRIPTION_FIELD_NUM_FIELD_DEFINITION_NUMBER = 1,
5993
+ FIT_FIELD_DESCRIPTION_FIELD_NUM_FIT_BASE_TYPE_ID = 2,
5994
+ FIT_FIELD_DESCRIPTION_FIELD_NUM_SCALE = 6,
5995
+ FIT_FIELD_DESCRIPTION_FIELD_NUM_OFFSET = 7,
5996
+ FIT_FIELD_DESCRIPTION_FIELD_NUM_NATIVE_FIELD_NUM = 15
5997
+ } FIT_FIELD_DESCRIPTION_FIELD_NUM;
5998
+
5999
+ typedef enum
6000
+ {
6001
+ FIT_FIELD_DESCRIPTION_MESG_FIELD_NAME,
6002
+ FIT_FIELD_DESCRIPTION_MESG_UNITS,
6003
+ FIT_FIELD_DESCRIPTION_MESG_FIT_BASE_UNIT_ID,
6004
+ FIT_FIELD_DESCRIPTION_MESG_NATIVE_MESG_NUM,
6005
+ FIT_FIELD_DESCRIPTION_MESG_DEVELOPER_DATA_INDEX,
6006
+ FIT_FIELD_DESCRIPTION_MESG_FIELD_DEFINITION_NUMBER,
6007
+ FIT_FIELD_DESCRIPTION_MESG_FIT_BASE_TYPE_ID,
6008
+ FIT_FIELD_DESCRIPTION_MESG_SCALE,
6009
+ FIT_FIELD_DESCRIPTION_MESG_OFFSET,
6010
+ FIT_FIELD_DESCRIPTION_MESG_NATIVE_FIELD_NUM,
6011
+ FIT_FIELD_DESCRIPTION_MESG_FIELDS
6012
+ } FIT_FIELD_DESCRIPTION_MESG_FIELD;
6013
+
6014
+ typedef struct
6015
+ {
6016
+ FIT_UINT8 reserved_1;
6017
+ FIT_UINT8 arch;
6018
+ FIT_MESG_NUM global_mesg_num;
6019
+ FIT_UINT8 num_fields;
6020
+ FIT_UINT8 fields[FIT_FIELD_DESCRIPTION_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
6021
+ } FIT_FIELD_DESCRIPTION_MESG_DEF;
6022
+
6023
+ // developer_data_id message
6024
+
6025
+ #define FIT_DEVELOPER_DATA_ID_MESG_SIZE 39
6026
+ #define FIT_DEVELOPER_DATA_ID_MESG_DEF_SIZE 20
6027
+ #define FIT_DEVELOPER_DATA_ID_MESG_DEVELOPER_ID_COUNT 16
6028
+ #define FIT_DEVELOPER_DATA_ID_MESG_APPLICATION_ID_COUNT 16
6029
+
6030
+ typedef struct
6031
+ {
6032
+ FIT_BYTE developer_id[FIT_DEVELOPER_DATA_ID_MESG_DEVELOPER_ID_COUNT]; //
6033
+ FIT_BYTE application_id[FIT_DEVELOPER_DATA_ID_MESG_APPLICATION_ID_COUNT]; //
6034
+ FIT_UINT32 application_version; //
6035
+ FIT_MANUFACTURER manufacturer_id; //
6036
+ FIT_UINT8 developer_data_index; //
6037
+ } FIT_DEVELOPER_DATA_ID_MESG;
6038
+
6039
+ typedef enum
6040
+ {
6041
+ FIT_DEVELOPER_DATA_ID_FIELD_NUM_DEVELOPER_ID = 0,
6042
+ FIT_DEVELOPER_DATA_ID_FIELD_NUM_APPLICATION_ID = 1,
6043
+ FIT_DEVELOPER_DATA_ID_FIELD_NUM_APPLICATION_VERSION = 4,
6044
+ FIT_DEVELOPER_DATA_ID_FIELD_NUM_MANUFACTURER_ID = 2,
6045
+ FIT_DEVELOPER_DATA_ID_FIELD_NUM_DEVELOPER_DATA_INDEX = 3
6046
+ } FIT_DEVELOPER_DATA_ID_FIELD_NUM;
6047
+
6048
+ typedef enum
6049
+ {
6050
+ FIT_DEVELOPER_DATA_ID_MESG_DEVELOPER_ID,
6051
+ FIT_DEVELOPER_DATA_ID_MESG_APPLICATION_ID,
6052
+ FIT_DEVELOPER_DATA_ID_MESG_APPLICATION_VERSION,
6053
+ FIT_DEVELOPER_DATA_ID_MESG_MANUFACTURER_ID,
6054
+ FIT_DEVELOPER_DATA_ID_MESG_DEVELOPER_DATA_INDEX,
6055
+ FIT_DEVELOPER_DATA_ID_MESG_FIELDS
6056
+ } FIT_DEVELOPER_DATA_ID_MESG_FIELD;
6057
+
6058
+ typedef struct
6059
+ {
6060
+ FIT_UINT8 reserved_1;
6061
+ FIT_UINT8 arch;
6062
+ FIT_MESG_NUM global_mesg_num;
6063
+ FIT_UINT8 num_fields;
6064
+ FIT_UINT8 fields[FIT_DEVELOPER_DATA_ID_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
6065
+ } FIT_DEVELOPER_DATA_ID_MESG_DEF;
6066
+
3543
6067
  typedef enum {
3544
6068
  FIT_MESG_PAD,
3545
6069
  FIT_MESG_FILE_ID,
@@ -3555,6 +6079,7 @@ typedef enum {
3555
6079
  FIT_MESG_HRM_PROFILE,
3556
6080
  FIT_MESG_SDM_PROFILE,
3557
6081
  FIT_MESG_BIKE_PROFILE,
6082
+ FIT_MESG_CONNECTIVITY,
3558
6083
  FIT_MESG_ZONES_TARGET,
3559
6084
  FIT_MESG_SPORT,
3560
6085
  FIT_MESG_HR_ZONE,
@@ -3570,9 +6095,21 @@ typedef enum {
3570
6095
  FIT_MESG_RECORD,
3571
6096
  FIT_MESG_EVENT,
3572
6097
  FIT_MESG_DEVICE_INFO,
6098
+ FIT_MESG_TRAINING_FILE,
3573
6099
  FIT_MESG_HRV,
6100
+ FIT_MESG_WEATHER_CONDITIONS,
6101
+ FIT_MESG_WEATHER_ALERT,
6102
+ FIT_MESG_NMEA_SENTENCE,
6103
+ FIT_MESG_AVIATION_ATTITUDE,
6104
+ FIT_MESG_VIDEO_TITLE,
6105
+ FIT_MESG_VIDEO_DESCRIPTION,
3574
6106
  FIT_MESG_COURSE,
3575
6107
  FIT_MESG_COURSE_POINT,
6108
+ FIT_MESG_SEGMENT_ID,
6109
+ FIT_MESG_SEGMENT_LEADERBOARD_ENTRY,
6110
+ FIT_MESG_SEGMENT_POINT,
6111
+ FIT_MESG_SEGMENT_LAP,
6112
+ FIT_MESG_SEGMENT_FILE,
3576
6113
  FIT_MESG_WORKOUT,
3577
6114
  FIT_MESG_WORKOUT_STEP,
3578
6115
  FIT_MESG_SCHEDULE,
@@ -3581,11 +6118,19 @@ typedef enum {
3581
6118
  FIT_MESG_BLOOD_PRESSURE,
3582
6119
  FIT_MESG_MONITORING_INFO,
3583
6120
  FIT_MESG_MONITORING,
6121
+ FIT_MESG_HR,
6122
+ FIT_MESG_ANT_RX,
6123
+ FIT_MESG_ANT_TX,
6124
+ FIT_MESG_EXD_SCREEN_CONFIGURATION,
6125
+ FIT_MESG_EXD_DATA_FIELD_CONFIGURATION,
6126
+ FIT_MESG_EXD_DATA_CONCEPT_CONFIGURATION,
6127
+ FIT_MESG_FIELD_DESCRIPTION,
6128
+ FIT_MESG_DEVELOPER_DATA_ID,
3584
6129
  FIT_MESGS
3585
6130
  } FIT_MESG;
3586
6131
 
3587
6132
  typedef const FIT_MESG_DEF * FIT_CONST_MESG_DEF_PTR;
3588
- const extern FIT_CONST_MESG_DEF_PTR fit_mesg_defs[FIT_MESGS];
6133
+ extern const FIT_CONST_MESG_DEF_PTR fit_mesg_defs[FIT_MESGS];
3589
6134
 
3590
6135
 
3591
6136
 
@@ -3599,4 +6144,4 @@ const extern FIT_CONST_MESG_DEF_PTR fit_mesg_defs[FIT_MESGS];
3599
6144
  #endif
3600
6145
 
3601
6146
  #endif // !defined(FIT_EXAMPLE_H)
3602
-
6147
+