rubyfit 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
+