rubyfit 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,3299 @@
1
+ ////////////////////////////////////////////////////////////////////////////////
2
+ // The following FIT Protocol software provided may be used with FIT protocol
3
+ // devices only and remains the copyrighted property of Dynastream Innovations Inc.
4
+ // The software is being provided on an "as-is" basis and as an accommodation,
5
+ // and therefore all warranties, representations, or guarantees of any kind
6
+ // (whether express, implied or statutory) including, without limitation,
7
+ // warranties of merchantability, non-infringement, or fitness for a particular
8
+ // purpose, are specifically disclaimed.
9
+ //
10
+ // Copyright 2013 Dynastream Innovations Inc.
11
+ ////////////////////////////////////////////////////////////////////////////////
12
+ // ****WARNING**** This file is auto-generated! Do NOT edit this file.
13
+ // Profile Version = 8.10Release
14
+ // Tag = $Name: AKW8_100 $
15
+ // Product = EXAMPLE
16
+ // Alignment = 4 bytes, padding disabled.
17
+ ////////////////////////////////////////////////////////////////////////////////
18
+
19
+
20
+ #if !defined(FIT_EXAMPLE_H)
21
+ #define FIT_EXAMPLE_H
22
+
23
+ #include "fit.h"
24
+
25
+ #if defined(__cplusplus)
26
+ extern "C" {
27
+ #endif
28
+
29
+
30
+ ///////////////////////////////////////////////////////////////////////
31
+ // Public Definitions
32
+ ///////////////////////////////////////////////////////////////////////
33
+
34
+ #define FIT_ALIGNMENT 4
35
+
36
+ ///////////////////////////////////////////////////////////////////////
37
+ // Types
38
+ ///////////////////////////////////////////////////////////////////////
39
+
40
+
41
+ typedef FIT_ENUM FIT_FILE;
42
+ #define FIT_FILE_INVALID FIT_ENUM_INVALID
43
+ #define FIT_FILE_DEVICE ((FIT_FILE)1) // Read only, single file. Must be in root directory.
44
+ #define FIT_FILE_SETTINGS ((FIT_FILE)2) // Read/write, single file. Directory=Settings
45
+ #define FIT_FILE_SPORT ((FIT_FILE)3) // Read/write, multiple files, file number = sport type. Directory=Sports
46
+ #define FIT_FILE_ACTIVITY ((FIT_FILE)4) // Read/erase, multiple files. Directory=Activities
47
+ #define FIT_FILE_WORKOUT ((FIT_FILE)5) // Read/write/erase, multiple files. Directory=Workouts
48
+ #define FIT_FILE_COURSE ((FIT_FILE)6) // Read/write/erase, multiple files. Directory=Courses
49
+ #define FIT_FILE_SCHEDULES ((FIT_FILE)7) // Read/write, single file. Directory=Schedules
50
+ #define FIT_FILE_WEIGHT ((FIT_FILE)9) // Read only, single file. Circular buffer. All message definitions at start of file. Directory=Weight
51
+ #define FIT_FILE_TOTALS ((FIT_FILE)10) // Read only, single file. Directory=Totals
52
+ #define FIT_FILE_GOALS ((FIT_FILE)11) // Read/write, single file. Directory=Goals
53
+ #define FIT_FILE_BLOOD_PRESSURE ((FIT_FILE)14) // Read only. Directory=Blood Pressure
54
+ #define FIT_FILE_MONITORING ((FIT_FILE)15) // Read only. Directory=Monitoring
55
+ #define FIT_FILE_ACTIVITY_SUMMARY ((FIT_FILE)20) // Read/erase, multiple files. Directory=Activities
56
+ #define FIT_FILE_MONITORING_DAILY ((FIT_FILE)28)
57
+ #define FIT_FILE_COUNT 14
58
+
59
+ typedef FIT_UINT16 FIT_MESG_NUM;
60
+ #define FIT_MESG_NUM_INVALID FIT_UINT16_INVALID
61
+ #define FIT_MESG_NUM_FILE_ID ((FIT_MESG_NUM)0)
62
+ #define FIT_MESG_NUM_CAPABILITIES ((FIT_MESG_NUM)1)
63
+ #define FIT_MESG_NUM_DEVICE_SETTINGS ((FIT_MESG_NUM)2)
64
+ #define FIT_MESG_NUM_USER_PROFILE ((FIT_MESG_NUM)3)
65
+ #define FIT_MESG_NUM_HRM_PROFILE ((FIT_MESG_NUM)4)
66
+ #define FIT_MESG_NUM_SDM_PROFILE ((FIT_MESG_NUM)5)
67
+ #define FIT_MESG_NUM_BIKE_PROFILE ((FIT_MESG_NUM)6)
68
+ #define FIT_MESG_NUM_ZONES_TARGET ((FIT_MESG_NUM)7)
69
+ #define FIT_MESG_NUM_HR_ZONE ((FIT_MESG_NUM)8)
70
+ #define FIT_MESG_NUM_POWER_ZONE ((FIT_MESG_NUM)9)
71
+ #define FIT_MESG_NUM_MET_ZONE ((FIT_MESG_NUM)10)
72
+ #define FIT_MESG_NUM_SPORT ((FIT_MESG_NUM)12)
73
+ #define FIT_MESG_NUM_GOAL ((FIT_MESG_NUM)15)
74
+ #define FIT_MESG_NUM_SESSION ((FIT_MESG_NUM)18)
75
+ #define FIT_MESG_NUM_LAP ((FIT_MESG_NUM)19)
76
+ #define FIT_MESG_NUM_RECORD ((FIT_MESG_NUM)20)
77
+ #define FIT_MESG_NUM_EVENT ((FIT_MESG_NUM)21)
78
+ #define FIT_MESG_NUM_DEVICE_INFO ((FIT_MESG_NUM)23)
79
+ #define FIT_MESG_NUM_WORKOUT ((FIT_MESG_NUM)26)
80
+ #define FIT_MESG_NUM_WORKOUT_STEP ((FIT_MESG_NUM)27)
81
+ #define FIT_MESG_NUM_SCHEDULE ((FIT_MESG_NUM)28)
82
+ #define FIT_MESG_NUM_WEIGHT_SCALE ((FIT_MESG_NUM)30)
83
+ #define FIT_MESG_NUM_COURSE ((FIT_MESG_NUM)31)
84
+ #define FIT_MESG_NUM_COURSE_POINT ((FIT_MESG_NUM)32)
85
+ #define FIT_MESG_NUM_TOTALS ((FIT_MESG_NUM)33)
86
+ #define FIT_MESG_NUM_ACTIVITY ((FIT_MESG_NUM)34)
87
+ #define FIT_MESG_NUM_SOFTWARE ((FIT_MESG_NUM)35)
88
+ #define FIT_MESG_NUM_FILE_CAPABILITIES ((FIT_MESG_NUM)37)
89
+ #define FIT_MESG_NUM_MESG_CAPABILITIES ((FIT_MESG_NUM)38)
90
+ #define FIT_MESG_NUM_FIELD_CAPABILITIES ((FIT_MESG_NUM)39)
91
+ #define FIT_MESG_NUM_FILE_CREATOR ((FIT_MESG_NUM)49)
92
+ #define FIT_MESG_NUM_BLOOD_PRESSURE ((FIT_MESG_NUM)51)
93
+ #define FIT_MESG_NUM_SPEED_ZONE ((FIT_MESG_NUM)53)
94
+ #define FIT_MESG_NUM_MONITORING ((FIT_MESG_NUM)55)
95
+ #define FIT_MESG_NUM_HRV ((FIT_MESG_NUM)78)
96
+ #define FIT_MESG_NUM_LENGTH ((FIT_MESG_NUM)101)
97
+ #define FIT_MESG_NUM_MONITORING_INFO ((FIT_MESG_NUM)103)
98
+ #define FIT_MESG_NUM_PAD ((FIT_MESG_NUM)105)
99
+ #define FIT_MESG_NUM_SLAVE_DEVICE ((FIT_MESG_NUM)106)
100
+ #define FIT_MESG_NUM_CADENCE_ZONE ((FIT_MESG_NUM)131)
101
+ #define FIT_MESG_NUM_MFG_RANGE_MIN ((FIT_MESG_NUM)0xFF00) // 0xFF00 - 0xFFFE reserved for manufacturer specific messages
102
+ #define FIT_MESG_NUM_MFG_RANGE_MAX ((FIT_MESG_NUM)0xFFFE) // 0xFF00 - 0xFFFE reserved for manufacturer specific messages
103
+ #define FIT_MESG_NUM_COUNT 42
104
+
105
+ typedef FIT_UINT8 FIT_CHECKSUM;
106
+ #define FIT_CHECKSUM_INVALID FIT_UINT8_INVALID
107
+ #define FIT_CHECKSUM_CLEAR ((FIT_CHECKSUM)0) // Allows clear of checksum for flash memory where can only write 1 to 0 without erasing sector.
108
+ #define FIT_CHECKSUM_OK ((FIT_CHECKSUM)1) // Set to mark checksum as valid if computes to invalid values 0 or 0xFF. Checksum can also be set to ok to save encoding computation time.
109
+ #define FIT_CHECKSUM_COUNT 2
110
+
111
+ typedef FIT_UINT8Z FIT_FILE_FLAGS;
112
+ #define FIT_FILE_FLAGS_INVALID FIT_UINT8Z_INVALID
113
+ #define FIT_FILE_FLAGS_READ ((FIT_FILE_FLAGS)0x02)
114
+ #define FIT_FILE_FLAGS_WRITE ((FIT_FILE_FLAGS)0x04)
115
+ #define FIT_FILE_FLAGS_ERASE ((FIT_FILE_FLAGS)0x08)
116
+ #define FIT_FILE_FLAGS_COUNT 3
117
+
118
+ typedef FIT_ENUM FIT_MESG_COUNT;
119
+ #define FIT_MESG_COUNT_INVALID FIT_ENUM_INVALID
120
+ #define FIT_MESG_COUNT_NUM_PER_FILE ((FIT_MESG_COUNT)0)
121
+ #define FIT_MESG_COUNT_MAX_PER_FILE ((FIT_MESG_COUNT)1)
122
+ #define FIT_MESG_COUNT_MAX_PER_FILE_TYPE ((FIT_MESG_COUNT)2)
123
+ #define FIT_MESG_COUNT_COUNT 3
124
+
125
+ typedef FIT_UINT32 FIT_DATE_TIME; // seconds since UTC 00:00 Dec 31 1989
126
+ #define FIT_DATE_TIME_INVALID FIT_UINT32_INVALID
127
+ #define FIT_DATE_TIME_MIN ((FIT_DATE_TIME)0x10000000) // if date_time is < 0x10000000 then it is system time (seconds from device power on)
128
+ #define FIT_DATE_TIME_COUNT 1
129
+
130
+ typedef FIT_UINT32 FIT_LOCAL_DATE_TIME; // seconds since 00:00 Dec 31 1989 in local time zone
131
+ #define FIT_LOCAL_DATE_TIME_INVALID FIT_UINT32_INVALID
132
+ #define FIT_LOCAL_DATE_TIME_COUNT 0
133
+
134
+ typedef FIT_UINT16 FIT_MESSAGE_INDEX;
135
+ #define FIT_MESSAGE_INDEX_INVALID FIT_UINT16_INVALID
136
+ #define FIT_MESSAGE_INDEX_SELECTED ((FIT_MESSAGE_INDEX)0x8000) // message is selected if set
137
+ #define FIT_MESSAGE_INDEX_RESERVED ((FIT_MESSAGE_INDEX)0x7000) // reserved (default 0)
138
+ #define FIT_MESSAGE_INDEX_MASK ((FIT_MESSAGE_INDEX)0x0FFF) // index
139
+ #define FIT_MESSAGE_INDEX_COUNT 3
140
+
141
+ typedef FIT_UINT8 FIT_DEVICE_INDEX;
142
+ #define FIT_DEVICE_INDEX_INVALID FIT_UINT8_INVALID
143
+ #define FIT_DEVICE_INDEX_CREATOR ((FIT_DEVICE_INDEX)0) // Creator of the file is always device index 0.
144
+ #define FIT_DEVICE_INDEX_COUNT 1
145
+
146
+ typedef FIT_ENUM FIT_GENDER;
147
+ #define FIT_GENDER_INVALID FIT_ENUM_INVALID
148
+ #define FIT_GENDER_FEMALE ((FIT_GENDER)0)
149
+ #define FIT_GENDER_MALE ((FIT_GENDER)1)
150
+ #define FIT_GENDER_COUNT 2
151
+
152
+ typedef FIT_ENUM FIT_LANGUAGE;
153
+ #define FIT_LANGUAGE_INVALID FIT_ENUM_INVALID
154
+ #define FIT_LANGUAGE_ENGLISH ((FIT_LANGUAGE)0)
155
+ #define FIT_LANGUAGE_FRENCH ((FIT_LANGUAGE)1)
156
+ #define FIT_LANGUAGE_ITALIAN ((FIT_LANGUAGE)2)
157
+ #define FIT_LANGUAGE_GERMAN ((FIT_LANGUAGE)3)
158
+ #define FIT_LANGUAGE_SPANISH ((FIT_LANGUAGE)4)
159
+ #define FIT_LANGUAGE_CROATIAN ((FIT_LANGUAGE)5)
160
+ #define FIT_LANGUAGE_CZECH ((FIT_LANGUAGE)6)
161
+ #define FIT_LANGUAGE_DANISH ((FIT_LANGUAGE)7)
162
+ #define FIT_LANGUAGE_DUTCH ((FIT_LANGUAGE)8)
163
+ #define FIT_LANGUAGE_FINNISH ((FIT_LANGUAGE)9)
164
+ #define FIT_LANGUAGE_GREEK ((FIT_LANGUAGE)10)
165
+ #define FIT_LANGUAGE_HUNGARIAN ((FIT_LANGUAGE)11)
166
+ #define FIT_LANGUAGE_NORWEGIAN ((FIT_LANGUAGE)12)
167
+ #define FIT_LANGUAGE_POLISH ((FIT_LANGUAGE)13)
168
+ #define FIT_LANGUAGE_PORTUGUESE ((FIT_LANGUAGE)14)
169
+ #define FIT_LANGUAGE_SLOVAKIAN ((FIT_LANGUAGE)15)
170
+ #define FIT_LANGUAGE_SLOVENIAN ((FIT_LANGUAGE)16)
171
+ #define FIT_LANGUAGE_SWEDISH ((FIT_LANGUAGE)17)
172
+ #define FIT_LANGUAGE_RUSSIAN ((FIT_LANGUAGE)18)
173
+ #define FIT_LANGUAGE_TURKISH ((FIT_LANGUAGE)19)
174
+ #define FIT_LANGUAGE_LATVIAN ((FIT_LANGUAGE)20)
175
+ #define FIT_LANGUAGE_UKRAINIAN ((FIT_LANGUAGE)21)
176
+ #define FIT_LANGUAGE_ARABIC ((FIT_LANGUAGE)22)
177
+ #define FIT_LANGUAGE_FARSI ((FIT_LANGUAGE)23)
178
+ #define FIT_LANGUAGE_BULGARIAN ((FIT_LANGUAGE)24)
179
+ #define FIT_LANGUAGE_ROMANIAN ((FIT_LANGUAGE)25)
180
+ #define FIT_LANGUAGE_CUSTOM ((FIT_LANGUAGE)254)
181
+ #define FIT_LANGUAGE_COUNT 27
182
+
183
+ typedef FIT_ENUM FIT_DISPLAY_MEASURE;
184
+ #define FIT_DISPLAY_MEASURE_INVALID FIT_ENUM_INVALID
185
+ #define FIT_DISPLAY_MEASURE_METRIC ((FIT_DISPLAY_MEASURE)0)
186
+ #define FIT_DISPLAY_MEASURE_STATUTE ((FIT_DISPLAY_MEASURE)1)
187
+ #define FIT_DISPLAY_MEASURE_COUNT 2
188
+
189
+ typedef FIT_ENUM FIT_DISPLAY_HEART;
190
+ #define FIT_DISPLAY_HEART_INVALID FIT_ENUM_INVALID
191
+ #define FIT_DISPLAY_HEART_BPM ((FIT_DISPLAY_HEART)0)
192
+ #define FIT_DISPLAY_HEART_MAX ((FIT_DISPLAY_HEART)1)
193
+ #define FIT_DISPLAY_HEART_RESERVE ((FIT_DISPLAY_HEART)2)
194
+ #define FIT_DISPLAY_HEART_COUNT 3
195
+
196
+ typedef FIT_ENUM FIT_DISPLAY_POWER;
197
+ #define FIT_DISPLAY_POWER_INVALID FIT_ENUM_INVALID
198
+ #define FIT_DISPLAY_POWER_WATTS ((FIT_DISPLAY_POWER)0)
199
+ #define FIT_DISPLAY_POWER_PERCENT_FTP ((FIT_DISPLAY_POWER)1)
200
+ #define FIT_DISPLAY_POWER_COUNT 2
201
+
202
+ typedef FIT_ENUM FIT_DISPLAY_POSITION;
203
+ #define FIT_DISPLAY_POSITION_INVALID FIT_ENUM_INVALID
204
+ #define FIT_DISPLAY_POSITION_DEGREE ((FIT_DISPLAY_POSITION)0) // dd.dddddd
205
+ #define FIT_DISPLAY_POSITION_DEGREE_MINUTE ((FIT_DISPLAY_POSITION)1) // dddmm.mmm
206
+ #define FIT_DISPLAY_POSITION_DEGREE_MINUTE_SECOND ((FIT_DISPLAY_POSITION)2) // dddmmss
207
+ #define FIT_DISPLAY_POSITION_AUSTRIAN_GRID ((FIT_DISPLAY_POSITION)3) // Austrian Grid (BMN)
208
+ #define FIT_DISPLAY_POSITION_BRITISH_GRID ((FIT_DISPLAY_POSITION)4) // British National Grid
209
+ #define FIT_DISPLAY_POSITION_DUTCH_GRID ((FIT_DISPLAY_POSITION)5) // Dutch grid system
210
+ #define FIT_DISPLAY_POSITION_HUNGARIAN_GRID ((FIT_DISPLAY_POSITION)6) // Hungarian grid system
211
+ #define FIT_DISPLAY_POSITION_FINNISH_GRID ((FIT_DISPLAY_POSITION)7) // Finnish grid system Zone3 KKJ27
212
+ #define FIT_DISPLAY_POSITION_GERMAN_GRID ((FIT_DISPLAY_POSITION)8) // Gausss Krueger (German)
213
+ #define FIT_DISPLAY_POSITION_ICELANDIC_GRID ((FIT_DISPLAY_POSITION)9) // Icelandic Grid
214
+ #define FIT_DISPLAY_POSITION_INDONESIAN_EQUATORIAL ((FIT_DISPLAY_POSITION)10) // Indonesian Equatorial LCO
215
+ #define FIT_DISPLAY_POSITION_INDONESIAN_IRIAN ((FIT_DISPLAY_POSITION)11) // Indonesian Irian LCO
216
+ #define FIT_DISPLAY_POSITION_INDONESIAN_SOUTHERN ((FIT_DISPLAY_POSITION)12) // Indonesian Southern LCO
217
+ #define FIT_DISPLAY_POSITION_INDIA_ZONE_0 ((FIT_DISPLAY_POSITION)13) // India zone 0
218
+ #define FIT_DISPLAY_POSITION_INDIA_ZONE_IA ((FIT_DISPLAY_POSITION)14) // India zone IA
219
+ #define FIT_DISPLAY_POSITION_INDIA_ZONE_IB ((FIT_DISPLAY_POSITION)15) // India zone IB
220
+ #define FIT_DISPLAY_POSITION_INDIA_ZONE_IIA ((FIT_DISPLAY_POSITION)16) // India zone IIA
221
+ #define FIT_DISPLAY_POSITION_INDIA_ZONE_IIB ((FIT_DISPLAY_POSITION)17) // India zone IIB
222
+ #define FIT_DISPLAY_POSITION_INDIA_ZONE_IIIA ((FIT_DISPLAY_POSITION)18) // India zone IIIA
223
+ #define FIT_DISPLAY_POSITION_INDIA_ZONE_IIIB ((FIT_DISPLAY_POSITION)19) // India zone IIIB
224
+ #define FIT_DISPLAY_POSITION_INDIA_ZONE_IVA ((FIT_DISPLAY_POSITION)20) // India zone IVA
225
+ #define FIT_DISPLAY_POSITION_INDIA_ZONE_IVB ((FIT_DISPLAY_POSITION)21) // India zone IVB
226
+ #define FIT_DISPLAY_POSITION_IRISH_TRANSVERSE ((FIT_DISPLAY_POSITION)22) // Irish Transverse Mercator
227
+ #define FIT_DISPLAY_POSITION_IRISH_GRID ((FIT_DISPLAY_POSITION)23) // Irish Grid
228
+ #define FIT_DISPLAY_POSITION_LORAN ((FIT_DISPLAY_POSITION)24) // Loran TD
229
+ #define FIT_DISPLAY_POSITION_MAIDENHEAD_GRID ((FIT_DISPLAY_POSITION)25) // Maidenhead grid system
230
+ #define FIT_DISPLAY_POSITION_MGRS_GRID ((FIT_DISPLAY_POSITION)26) // MGRS grid system
231
+ #define FIT_DISPLAY_POSITION_NEW_ZEALAND_GRID ((FIT_DISPLAY_POSITION)27) // New Zealand grid system
232
+ #define FIT_DISPLAY_POSITION_NEW_ZEALAND_TRANSVERSE ((FIT_DISPLAY_POSITION)28) // New Zealand Transverse Mercator
233
+ #define FIT_DISPLAY_POSITION_QATAR_GRID ((FIT_DISPLAY_POSITION)29) // Qatar National Grid
234
+ #define FIT_DISPLAY_POSITION_MODIFIED_SWEDISH_GRID ((FIT_DISPLAY_POSITION)30) // Modified RT-90 (Sweden)
235
+ #define FIT_DISPLAY_POSITION_SWEDISH_GRID ((FIT_DISPLAY_POSITION)31) // RT-90 (Sweden)
236
+ #define FIT_DISPLAY_POSITION_SOUTH_AFRICAN_GRID ((FIT_DISPLAY_POSITION)32) // South African Grid
237
+ #define FIT_DISPLAY_POSITION_SWISS_GRID ((FIT_DISPLAY_POSITION)33) // Swiss CH-1903 grid
238
+ #define FIT_DISPLAY_POSITION_TAIWAN_GRID ((FIT_DISPLAY_POSITION)34) // Taiwan Grid
239
+ #define FIT_DISPLAY_POSITION_UNITED_STATES_GRID ((FIT_DISPLAY_POSITION)35) // United States National Grid
240
+ #define FIT_DISPLAY_POSITION_UTM_UPS_GRID ((FIT_DISPLAY_POSITION)36) // UTM/UPS grid system
241
+ #define FIT_DISPLAY_POSITION_WEST_MALAYAN ((FIT_DISPLAY_POSITION)37) // West Malayan RSO
242
+ #define FIT_DISPLAY_POSITION_BORNEO_RSO ((FIT_DISPLAY_POSITION)38) // Borneo RSO
243
+ #define FIT_DISPLAY_POSITION_ESTONIAN_GRID ((FIT_DISPLAY_POSITION)39) // Estonian grid system
244
+ #define FIT_DISPLAY_POSITION_LATVIAN_GRID ((FIT_DISPLAY_POSITION)40) // Latvian Transverse Mercator
245
+ #define FIT_DISPLAY_POSITION_SWEDISH_REF_99_GRID ((FIT_DISPLAY_POSITION)41) // Reference Grid 99 TM (Swedish)
246
+ #define FIT_DISPLAY_POSITION_COUNT 42
247
+
248
+ typedef FIT_ENUM FIT_SPORT;
249
+ #define FIT_SPORT_INVALID FIT_ENUM_INVALID
250
+ #define FIT_SPORT_GENERIC ((FIT_SPORT)0)
251
+ #define FIT_SPORT_RUNNING ((FIT_SPORT)1)
252
+ #define FIT_SPORT_CYCLING ((FIT_SPORT)2)
253
+ #define FIT_SPORT_TRANSITION ((FIT_SPORT)3) // Mulitsport transition
254
+ #define FIT_SPORT_FITNESS_EQUIPMENT ((FIT_SPORT)4)
255
+ #define FIT_SPORT_SWIMMING ((FIT_SPORT)5)
256
+ #define FIT_SPORT_BASKETBALL ((FIT_SPORT)6)
257
+ #define FIT_SPORT_SOCCER ((FIT_SPORT)7)
258
+ #define FIT_SPORT_TENNIS ((FIT_SPORT)8)
259
+ #define FIT_SPORT_AMERICAN_FOOTBALL ((FIT_SPORT)9)
260
+ #define FIT_SPORT_TRAINING ((FIT_SPORT)10)
261
+ #define FIT_SPORT_ALL ((FIT_SPORT)254) // All is for goals only to include all sports.
262
+ #define FIT_SPORT_COUNT 12
263
+
264
+ typedef FIT_UINT8Z FIT_SPORT_BITS_0; // Bit field corresponding to sport enum type (1 << sport).
265
+ #define FIT_SPORT_BITS_0_INVALID FIT_UINT8Z_INVALID
266
+ #define FIT_SPORT_BITS_0_GENERIC ((FIT_SPORT_BITS_0)0x01)
267
+ #define FIT_SPORT_BITS_0_RUNNING ((FIT_SPORT_BITS_0)0x02)
268
+ #define FIT_SPORT_BITS_0_CYCLING ((FIT_SPORT_BITS_0)0x04)
269
+ #define FIT_SPORT_BITS_0_TRANSITION ((FIT_SPORT_BITS_0)0x08) // Mulitsport transition
270
+ #define FIT_SPORT_BITS_0_FITNESS_EQUIPMENT ((FIT_SPORT_BITS_0)0x10)
271
+ #define FIT_SPORT_BITS_0_SWIMMING ((FIT_SPORT_BITS_0)0x20)
272
+ #define FIT_SPORT_BITS_0_BASKETBALL ((FIT_SPORT_BITS_0)0x40)
273
+ #define FIT_SPORT_BITS_0_SOCCER ((FIT_SPORT_BITS_0)0x80)
274
+ #define FIT_SPORT_BITS_0_COUNT 8
275
+
276
+ typedef FIT_UINT8Z FIT_SPORT_BITS_1; // Bit field corresponding to sport enum type (1 << (sport-8)).
277
+ #define FIT_SPORT_BITS_1_INVALID FIT_UINT8Z_INVALID
278
+ #define FIT_SPORT_BITS_1_TENNIS ((FIT_SPORT_BITS_1)0x01)
279
+ #define FIT_SPORT_BITS_1_AMERICAN_FOOTBALL ((FIT_SPORT_BITS_1)0x02)
280
+ #define FIT_SPORT_BITS_1_TRAINING ((FIT_SPORT_BITS_1)0x04)
281
+ #define FIT_SPORT_BITS_1_COUNT 3
282
+
283
+ typedef FIT_ENUM FIT_SUB_SPORT;
284
+ #define FIT_SUB_SPORT_INVALID FIT_ENUM_INVALID
285
+ #define FIT_SUB_SPORT_GENERIC ((FIT_SUB_SPORT)0)
286
+ #define FIT_SUB_SPORT_TREADMILL ((FIT_SUB_SPORT)1) // Run
287
+ #define FIT_SUB_SPORT_STREET ((FIT_SUB_SPORT)2) // Run
288
+ #define FIT_SUB_SPORT_TRAIL ((FIT_SUB_SPORT)3) // Run
289
+ #define FIT_SUB_SPORT_TRACK ((FIT_SUB_SPORT)4) // Run
290
+ #define FIT_SUB_SPORT_SPIN ((FIT_SUB_SPORT)5) // Cycling
291
+ #define FIT_SUB_SPORT_INDOOR_CYCLING ((FIT_SUB_SPORT)6) // Cycling
292
+ #define FIT_SUB_SPORT_ROAD ((FIT_SUB_SPORT)7) // Cycling
293
+ #define FIT_SUB_SPORT_MOUNTAIN ((FIT_SUB_SPORT)8) // Cycling
294
+ #define FIT_SUB_SPORT_DOWNHILL ((FIT_SUB_SPORT)9) // Cycling
295
+ #define FIT_SUB_SPORT_RECUMBENT ((FIT_SUB_SPORT)10) // Cycling
296
+ #define FIT_SUB_SPORT_CYCLOCROSS ((FIT_SUB_SPORT)11) // Cycling
297
+ #define FIT_SUB_SPORT_HAND_CYCLING ((FIT_SUB_SPORT)12) // Cycling
298
+ #define FIT_SUB_SPORT_TRACK_CYCLING ((FIT_SUB_SPORT)13) // Cycling
299
+ #define FIT_SUB_SPORT_INDOOR_ROWING ((FIT_SUB_SPORT)14) // Fitness Equipment
300
+ #define FIT_SUB_SPORT_ELLIPTICAL ((FIT_SUB_SPORT)15) // Fitness Equipment
301
+ #define FIT_SUB_SPORT_STAIR_CLIMBING ((FIT_SUB_SPORT)16) // Fitness Equipment
302
+ #define FIT_SUB_SPORT_LAP_SWIMMING ((FIT_SUB_SPORT)17) // Swimming
303
+ #define FIT_SUB_SPORT_OPEN_WATER ((FIT_SUB_SPORT)18) // Swimming
304
+ #define FIT_SUB_SPORT_FLEXIBILITY_TRAINING ((FIT_SUB_SPORT)19) // Training
305
+ #define FIT_SUB_SPORT_STRENGTH_TRAINING ((FIT_SUB_SPORT)20) // Training
306
+ #define FIT_SUB_SPORT_WARM_UP ((FIT_SUB_SPORT)21) // Tennis
307
+ #define FIT_SUB_SPORT_MATCH ((FIT_SUB_SPORT)22) // Tennis
308
+ #define FIT_SUB_SPORT_EXERCISE ((FIT_SUB_SPORT)23) // Tennis
309
+ #define FIT_SUB_SPORT_CHALLENGE ((FIT_SUB_SPORT)24) // Tennis
310
+ #define FIT_SUB_SPORT_ALL ((FIT_SUB_SPORT)254)
311
+ #define FIT_SUB_SPORT_COUNT 26
312
+
313
+ typedef FIT_ENUM FIT_ACTIVITY;
314
+ #define FIT_ACTIVITY_INVALID FIT_ENUM_INVALID
315
+ #define FIT_ACTIVITY_MANUAL ((FIT_ACTIVITY)0)
316
+ #define FIT_ACTIVITY_AUTO_MULTI_SPORT ((FIT_ACTIVITY)1)
317
+ #define FIT_ACTIVITY_COUNT 2
318
+
319
+ typedef FIT_ENUM FIT_INTENSITY;
320
+ #define FIT_INTENSITY_INVALID FIT_ENUM_INVALID
321
+ #define FIT_INTENSITY_ACTIVE ((FIT_INTENSITY)0)
322
+ #define FIT_INTENSITY_REST ((FIT_INTENSITY)1)
323
+ #define FIT_INTENSITY_WARMUP ((FIT_INTENSITY)2)
324
+ #define FIT_INTENSITY_COOLDOWN ((FIT_INTENSITY)3)
325
+ #define FIT_INTENSITY_COUNT 4
326
+
327
+ typedef FIT_ENUM FIT_SESSION_TRIGGER;
328
+ #define FIT_SESSION_TRIGGER_INVALID FIT_ENUM_INVALID
329
+ #define FIT_SESSION_TRIGGER_ACTIVITY_END ((FIT_SESSION_TRIGGER)0)
330
+ #define FIT_SESSION_TRIGGER_MANUAL ((FIT_SESSION_TRIGGER)1) // User changed sport.
331
+ #define FIT_SESSION_TRIGGER_AUTO_MULTI_SPORT ((FIT_SESSION_TRIGGER)2) // Auto multi-sport feature is enabled and user pressed lap button to advance session.
332
+ #define FIT_SESSION_TRIGGER_FITNESS_EQUIPMENT ((FIT_SESSION_TRIGGER)3) // Auto sport change caused by user linking to fitness equipment.
333
+ #define FIT_SESSION_TRIGGER_COUNT 4
334
+
335
+ typedef FIT_ENUM FIT_AUTOLAP_TRIGGER;
336
+ #define FIT_AUTOLAP_TRIGGER_INVALID FIT_ENUM_INVALID
337
+ #define FIT_AUTOLAP_TRIGGER_TIME ((FIT_AUTOLAP_TRIGGER)0)
338
+ #define FIT_AUTOLAP_TRIGGER_DISTANCE ((FIT_AUTOLAP_TRIGGER)1)
339
+ #define FIT_AUTOLAP_TRIGGER_POSITION_START ((FIT_AUTOLAP_TRIGGER)2)
340
+ #define FIT_AUTOLAP_TRIGGER_POSITION_LAP ((FIT_AUTOLAP_TRIGGER)3)
341
+ #define FIT_AUTOLAP_TRIGGER_POSITION_WAYPOINT ((FIT_AUTOLAP_TRIGGER)4)
342
+ #define FIT_AUTOLAP_TRIGGER_POSITION_MARKED ((FIT_AUTOLAP_TRIGGER)5)
343
+ #define FIT_AUTOLAP_TRIGGER_OFF ((FIT_AUTOLAP_TRIGGER)6)
344
+ #define FIT_AUTOLAP_TRIGGER_COUNT 7
345
+
346
+ typedef FIT_ENUM FIT_LAP_TRIGGER;
347
+ #define FIT_LAP_TRIGGER_INVALID FIT_ENUM_INVALID
348
+ #define FIT_LAP_TRIGGER_MANUAL ((FIT_LAP_TRIGGER)0)
349
+ #define FIT_LAP_TRIGGER_TIME ((FIT_LAP_TRIGGER)1)
350
+ #define FIT_LAP_TRIGGER_DISTANCE ((FIT_LAP_TRIGGER)2)
351
+ #define FIT_LAP_TRIGGER_POSITION_START ((FIT_LAP_TRIGGER)3)
352
+ #define FIT_LAP_TRIGGER_POSITION_LAP ((FIT_LAP_TRIGGER)4)
353
+ #define FIT_LAP_TRIGGER_POSITION_WAYPOINT ((FIT_LAP_TRIGGER)5)
354
+ #define FIT_LAP_TRIGGER_POSITION_MARKED ((FIT_LAP_TRIGGER)6)
355
+ #define FIT_LAP_TRIGGER_SESSION_END ((FIT_LAP_TRIGGER)7)
356
+ #define FIT_LAP_TRIGGER_FITNESS_EQUIPMENT ((FIT_LAP_TRIGGER)8)
357
+ #define FIT_LAP_TRIGGER_COUNT 9
358
+
359
+ typedef FIT_ENUM FIT_EVENT;
360
+ #define FIT_EVENT_INVALID FIT_ENUM_INVALID
361
+ #define FIT_EVENT_TIMER ((FIT_EVENT)0) // Group 0. Start / stop_all
362
+ #define FIT_EVENT_WORKOUT ((FIT_EVENT)3) // start / stop
363
+ #define FIT_EVENT_WORKOUT_STEP ((FIT_EVENT)4) // Start at beginning of workout. Stop at end of each step.
364
+ #define FIT_EVENT_POWER_DOWN ((FIT_EVENT)5) // stop_all group 0
365
+ #define FIT_EVENT_POWER_UP ((FIT_EVENT)6) // stop_all group 0
366
+ #define FIT_EVENT_OFF_COURSE ((FIT_EVENT)7) // start / stop group 0
367
+ #define FIT_EVENT_SESSION ((FIT_EVENT)8) // Stop at end of each session.
368
+ #define FIT_EVENT_LAP ((FIT_EVENT)9) // Stop at end of each lap.
369
+ #define FIT_EVENT_COURSE_POINT ((FIT_EVENT)10) // marker
370
+ #define FIT_EVENT_BATTERY ((FIT_EVENT)11) // marker
371
+ #define FIT_EVENT_VIRTUAL_PARTNER_PACE ((FIT_EVENT)12) // Group 1. Start at beginning of activity if VP enabled, when VP pace is changed during activity or VP enabled mid activity. stop_disable when VP disabled.
372
+ #define FIT_EVENT_HR_HIGH_ALERT ((FIT_EVENT)13) // Group 0. Start / stop when in alert condition.
373
+ #define FIT_EVENT_HR_LOW_ALERT ((FIT_EVENT)14) // Group 0. Start / stop when in alert condition.
374
+ #define FIT_EVENT_SPEED_HIGH_ALERT ((FIT_EVENT)15) // Group 0. Start / stop when in alert condition.
375
+ #define FIT_EVENT_SPEED_LOW_ALERT ((FIT_EVENT)16) // Group 0. Start / stop when in alert condition.
376
+ #define FIT_EVENT_CAD_HIGH_ALERT ((FIT_EVENT)17) // Group 0. Start / stop when in alert condition.
377
+ #define FIT_EVENT_CAD_LOW_ALERT ((FIT_EVENT)18) // Group 0. Start / stop when in alert condition.
378
+ #define FIT_EVENT_POWER_HIGH_ALERT ((FIT_EVENT)19) // Group 0. Start / stop when in alert condition.
379
+ #define FIT_EVENT_POWER_LOW_ALERT ((FIT_EVENT)20) // Group 0. Start / stop when in alert condition.
380
+ #define FIT_EVENT_RECOVERY_HR ((FIT_EVENT)21) // marker
381
+ #define FIT_EVENT_BATTERY_LOW ((FIT_EVENT)22) // marker
382
+ #define FIT_EVENT_TIME_DURATION_ALERT ((FIT_EVENT)23) // Group 1. Start if enabled mid activity (not required at start of activity). Stop when duration is reached. stop_disable if disabled.
383
+ #define FIT_EVENT_DISTANCE_DURATION_ALERT ((FIT_EVENT)24) // Group 1. Start if enabled mid activity (not required at start of activity). Stop when duration is reached. stop_disable if disabled.
384
+ #define FIT_EVENT_CALORIE_DURATION_ALERT ((FIT_EVENT)25) // Group 1. Start if enabled mid activity (not required at start of activity). Stop when duration is reached. stop_disable if disabled.
385
+ #define FIT_EVENT_ACTIVITY ((FIT_EVENT)26) // Group 1.. Stop at end of activity.
386
+ #define FIT_EVENT_FITNESS_EQUIPMENT ((FIT_EVENT)27) // marker
387
+ #define FIT_EVENT_LENGTH ((FIT_EVENT)28) // Stop at end of each length.
388
+ #define FIT_EVENT_USER_MARKER ((FIT_EVENT)32) // marker
389
+ #define FIT_EVENT_SPORT_POINT ((FIT_EVENT)33) // marker
390
+ #define FIT_EVENT_CALIBRATION ((FIT_EVENT)36) // start/stop/marker
391
+ #define FIT_EVENT_COUNT 30
392
+
393
+ typedef FIT_ENUM FIT_EVENT_TYPE;
394
+ #define FIT_EVENT_TYPE_INVALID FIT_ENUM_INVALID
395
+ #define FIT_EVENT_TYPE_START ((FIT_EVENT_TYPE)0)
396
+ #define FIT_EVENT_TYPE_STOP ((FIT_EVENT_TYPE)1)
397
+ #define FIT_EVENT_TYPE_CONSECUTIVE_DEPRECIATED ((FIT_EVENT_TYPE)2)
398
+ #define FIT_EVENT_TYPE_MARKER ((FIT_EVENT_TYPE)3)
399
+ #define FIT_EVENT_TYPE_STOP_ALL ((FIT_EVENT_TYPE)4)
400
+ #define FIT_EVENT_TYPE_BEGIN_DEPRECIATED ((FIT_EVENT_TYPE)5)
401
+ #define FIT_EVENT_TYPE_END_DEPRECIATED ((FIT_EVENT_TYPE)6)
402
+ #define FIT_EVENT_TYPE_END_ALL_DEPRECIATED ((FIT_EVENT_TYPE)7)
403
+ #define FIT_EVENT_TYPE_STOP_DISABLE ((FIT_EVENT_TYPE)8)
404
+ #define FIT_EVENT_TYPE_STOP_DISABLE_ALL ((FIT_EVENT_TYPE)9)
405
+ #define FIT_EVENT_TYPE_COUNT 10
406
+
407
+ typedef FIT_ENUM FIT_TIMER_TRIGGER; // timer event data
408
+ #define FIT_TIMER_TRIGGER_INVALID FIT_ENUM_INVALID
409
+ #define FIT_TIMER_TRIGGER_MANUAL ((FIT_TIMER_TRIGGER)0)
410
+ #define FIT_TIMER_TRIGGER_AUTO ((FIT_TIMER_TRIGGER)1)
411
+ #define FIT_TIMER_TRIGGER_FITNESS_EQUIPMENT ((FIT_TIMER_TRIGGER)2)
412
+ #define FIT_TIMER_TRIGGER_COUNT 3
413
+
414
+ typedef FIT_ENUM FIT_FITNESS_EQUIPMENT_STATE; // fitness equipment event data
415
+ #define FIT_FITNESS_EQUIPMENT_STATE_INVALID FIT_ENUM_INVALID
416
+ #define FIT_FITNESS_EQUIPMENT_STATE_READY ((FIT_FITNESS_EQUIPMENT_STATE)0)
417
+ #define FIT_FITNESS_EQUIPMENT_STATE_IN_USE ((FIT_FITNESS_EQUIPMENT_STATE)1)
418
+ #define FIT_FITNESS_EQUIPMENT_STATE_PAUSED ((FIT_FITNESS_EQUIPMENT_STATE)2)
419
+ #define FIT_FITNESS_EQUIPMENT_STATE_UNKNOWN ((FIT_FITNESS_EQUIPMENT_STATE)3) // lost connection to fitness equipment
420
+ #define FIT_FITNESS_EQUIPMENT_STATE_COUNT 4
421
+
422
+ typedef FIT_ENUM FIT_ACTIVITY_CLASS;
423
+ #define FIT_ACTIVITY_CLASS_INVALID FIT_ENUM_INVALID
424
+ #define FIT_ACTIVITY_CLASS_LEVEL ((FIT_ACTIVITY_CLASS)0x7F) // 0 to 100
425
+ #define FIT_ACTIVITY_CLASS_LEVEL_MAX ((FIT_ACTIVITY_CLASS)100)
426
+ #define FIT_ACTIVITY_CLASS_ATHLETE ((FIT_ACTIVITY_CLASS)0x80)
427
+ #define FIT_ACTIVITY_CLASS_COUNT 3
428
+
429
+ typedef FIT_ENUM FIT_HR_ZONE_CALC;
430
+ #define FIT_HR_ZONE_CALC_INVALID FIT_ENUM_INVALID
431
+ #define FIT_HR_ZONE_CALC_CUSTOM ((FIT_HR_ZONE_CALC)0)
432
+ #define FIT_HR_ZONE_CALC_PERCENT_MAX_HR ((FIT_HR_ZONE_CALC)1)
433
+ #define FIT_HR_ZONE_CALC_PERCENT_HRR ((FIT_HR_ZONE_CALC)2)
434
+ #define FIT_HR_ZONE_CALC_COUNT 3
435
+
436
+ typedef FIT_ENUM FIT_PWR_ZONE_CALC;
437
+ #define FIT_PWR_ZONE_CALC_INVALID FIT_ENUM_INVALID
438
+ #define FIT_PWR_ZONE_CALC_CUSTOM ((FIT_PWR_ZONE_CALC)0)
439
+ #define FIT_PWR_ZONE_CALC_PERCENT_FTP ((FIT_PWR_ZONE_CALC)1)
440
+ #define FIT_PWR_ZONE_CALC_COUNT 2
441
+
442
+ typedef FIT_ENUM FIT_WKT_STEP_DURATION;
443
+ #define FIT_WKT_STEP_DURATION_INVALID FIT_ENUM_INVALID
444
+ #define FIT_WKT_STEP_DURATION_TIME ((FIT_WKT_STEP_DURATION)0)
445
+ #define FIT_WKT_STEP_DURATION_DISTANCE ((FIT_WKT_STEP_DURATION)1)
446
+ #define FIT_WKT_STEP_DURATION_HR_LESS_THAN ((FIT_WKT_STEP_DURATION)2)
447
+ #define FIT_WKT_STEP_DURATION_HR_GREATER_THAN ((FIT_WKT_STEP_DURATION)3)
448
+ #define FIT_WKT_STEP_DURATION_CALORIES ((FIT_WKT_STEP_DURATION)4)
449
+ #define FIT_WKT_STEP_DURATION_OPEN ((FIT_WKT_STEP_DURATION)5)
450
+ #define FIT_WKT_STEP_DURATION_REPEAT_UNTIL_STEPS_CMPLT ((FIT_WKT_STEP_DURATION)6)
451
+ #define FIT_WKT_STEP_DURATION_REPEAT_UNTIL_TIME ((FIT_WKT_STEP_DURATION)7)
452
+ #define FIT_WKT_STEP_DURATION_REPEAT_UNTIL_DISTANCE ((FIT_WKT_STEP_DURATION)8)
453
+ #define FIT_WKT_STEP_DURATION_REPEAT_UNTIL_CALORIES ((FIT_WKT_STEP_DURATION)9)
454
+ #define FIT_WKT_STEP_DURATION_REPEAT_UNTIL_HR_LESS_THAN ((FIT_WKT_STEP_DURATION)10)
455
+ #define FIT_WKT_STEP_DURATION_REPEAT_UNTIL_HR_GREATER_THAN ((FIT_WKT_STEP_DURATION)11)
456
+ #define FIT_WKT_STEP_DURATION_REPEAT_UNTIL_POWER_LESS_THAN ((FIT_WKT_STEP_DURATION)12)
457
+ #define FIT_WKT_STEP_DURATION_REPEAT_UNTIL_POWER_GREATER_THAN ((FIT_WKT_STEP_DURATION)13)
458
+ #define FIT_WKT_STEP_DURATION_POWER_LESS_THAN ((FIT_WKT_STEP_DURATION)14)
459
+ #define FIT_WKT_STEP_DURATION_POWER_GREATER_THAN ((FIT_WKT_STEP_DURATION)15)
460
+ #define FIT_WKT_STEP_DURATION_COUNT 16
461
+
462
+ typedef FIT_ENUM FIT_WKT_STEP_TARGET;
463
+ #define FIT_WKT_STEP_TARGET_INVALID FIT_ENUM_INVALID
464
+ #define FIT_WKT_STEP_TARGET_SPEED ((FIT_WKT_STEP_TARGET)0)
465
+ #define FIT_WKT_STEP_TARGET_HEART_RATE ((FIT_WKT_STEP_TARGET)1)
466
+ #define FIT_WKT_STEP_TARGET_OPEN ((FIT_WKT_STEP_TARGET)2)
467
+ #define FIT_WKT_STEP_TARGET_CADENCE ((FIT_WKT_STEP_TARGET)3)
468
+ #define FIT_WKT_STEP_TARGET_POWER ((FIT_WKT_STEP_TARGET)4)
469
+ #define FIT_WKT_STEP_TARGET_GRADE ((FIT_WKT_STEP_TARGET)5)
470
+ #define FIT_WKT_STEP_TARGET_RESISTANCE ((FIT_WKT_STEP_TARGET)6)
471
+ #define FIT_WKT_STEP_TARGET_COUNT 7
472
+
473
+ typedef FIT_ENUM FIT_GOAL;
474
+ #define FIT_GOAL_INVALID FIT_ENUM_INVALID
475
+ #define FIT_GOAL_TIME ((FIT_GOAL)0)
476
+ #define FIT_GOAL_DISTANCE ((FIT_GOAL)1)
477
+ #define FIT_GOAL_CALORIES ((FIT_GOAL)2)
478
+ #define FIT_GOAL_FREQUENCY ((FIT_GOAL)3)
479
+ #define FIT_GOAL_STEPS ((FIT_GOAL)4)
480
+ #define FIT_GOAL_COUNT 5
481
+
482
+ typedef FIT_ENUM FIT_GOAL_RECURRENCE;
483
+ #define FIT_GOAL_RECURRENCE_INVALID FIT_ENUM_INVALID
484
+ #define FIT_GOAL_RECURRENCE_OFF ((FIT_GOAL_RECURRENCE)0)
485
+ #define FIT_GOAL_RECURRENCE_DAILY ((FIT_GOAL_RECURRENCE)1)
486
+ #define FIT_GOAL_RECURRENCE_WEEKLY ((FIT_GOAL_RECURRENCE)2)
487
+ #define FIT_GOAL_RECURRENCE_MONTHLY ((FIT_GOAL_RECURRENCE)3)
488
+ #define FIT_GOAL_RECURRENCE_YEARLY ((FIT_GOAL_RECURRENCE)4)
489
+ #define FIT_GOAL_RECURRENCE_CUSTOM ((FIT_GOAL_RECURRENCE)5)
490
+ #define FIT_GOAL_RECURRENCE_COUNT 6
491
+
492
+ typedef FIT_ENUM FIT_SCHEDULE;
493
+ #define FIT_SCHEDULE_INVALID FIT_ENUM_INVALID
494
+ #define FIT_SCHEDULE_WORKOUT ((FIT_SCHEDULE)0)
495
+ #define FIT_SCHEDULE_COURSE ((FIT_SCHEDULE)1)
496
+ #define FIT_SCHEDULE_COUNT 2
497
+
498
+ typedef FIT_ENUM FIT_COURSE_POINT;
499
+ #define FIT_COURSE_POINT_INVALID FIT_ENUM_INVALID
500
+ #define FIT_COURSE_POINT_GENERIC ((FIT_COURSE_POINT)0)
501
+ #define FIT_COURSE_POINT_SUMMIT ((FIT_COURSE_POINT)1)
502
+ #define FIT_COURSE_POINT_VALLEY ((FIT_COURSE_POINT)2)
503
+ #define FIT_COURSE_POINT_WATER ((FIT_COURSE_POINT)3)
504
+ #define FIT_COURSE_POINT_FOOD ((FIT_COURSE_POINT)4)
505
+ #define FIT_COURSE_POINT_DANGER ((FIT_COURSE_POINT)5)
506
+ #define FIT_COURSE_POINT_LEFT ((FIT_COURSE_POINT)6)
507
+ #define FIT_COURSE_POINT_RIGHT ((FIT_COURSE_POINT)7)
508
+ #define FIT_COURSE_POINT_STRAIGHT ((FIT_COURSE_POINT)8)
509
+ #define FIT_COURSE_POINT_FIRST_AID ((FIT_COURSE_POINT)9)
510
+ #define FIT_COURSE_POINT_FOURTH_CATEGORY ((FIT_COURSE_POINT)10)
511
+ #define FIT_COURSE_POINT_THIRD_CATEGORY ((FIT_COURSE_POINT)11)
512
+ #define FIT_COURSE_POINT_SECOND_CATEGORY ((FIT_COURSE_POINT)12)
513
+ #define FIT_COURSE_POINT_FIRST_CATEGORY ((FIT_COURSE_POINT)13)
514
+ #define FIT_COURSE_POINT_HORS_CATEGORY ((FIT_COURSE_POINT)14)
515
+ #define FIT_COURSE_POINT_SPRINT ((FIT_COURSE_POINT)15)
516
+ #define FIT_COURSE_POINT_LEFT_FORK ((FIT_COURSE_POINT)16)
517
+ #define FIT_COURSE_POINT_RIGHT_FORK ((FIT_COURSE_POINT)17)
518
+ #define FIT_COURSE_POINT_MIDDLE_FORK ((FIT_COURSE_POINT)18)
519
+ #define FIT_COURSE_POINT_SLIGHT_LEFT ((FIT_COURSE_POINT)19)
520
+ #define FIT_COURSE_POINT_SHARP_LEFT ((FIT_COURSE_POINT)20)
521
+ #define FIT_COURSE_POINT_SLIGHT_RIGHT ((FIT_COURSE_POINT)21)
522
+ #define FIT_COURSE_POINT_SHARP_RIGHT ((FIT_COURSE_POINT)22)
523
+ #define FIT_COURSE_POINT_U_TURN ((FIT_COURSE_POINT)23)
524
+ #define FIT_COURSE_POINT_COUNT 24
525
+
526
+ typedef FIT_UINT16 FIT_MANUFACTURER;
527
+ #define FIT_MANUFACTURER_INVALID FIT_UINT16_INVALID
528
+ #define FIT_MANUFACTURER_GARMIN ((FIT_MANUFACTURER)1)
529
+ #define FIT_MANUFACTURER_GARMIN_FR405_ANTFS ((FIT_MANUFACTURER)2) // Do not use. Used by FR405 for ANTFS man id.
530
+ #define FIT_MANUFACTURER_ZEPHYR ((FIT_MANUFACTURER)3)
531
+ #define FIT_MANUFACTURER_DAYTON ((FIT_MANUFACTURER)4)
532
+ #define FIT_MANUFACTURER_IDT ((FIT_MANUFACTURER)5)
533
+ #define FIT_MANUFACTURER_SRM ((FIT_MANUFACTURER)6)
534
+ #define FIT_MANUFACTURER_QUARQ ((FIT_MANUFACTURER)7)
535
+ #define FIT_MANUFACTURER_IBIKE ((FIT_MANUFACTURER)8)
536
+ #define FIT_MANUFACTURER_SARIS ((FIT_MANUFACTURER)9)
537
+ #define FIT_MANUFACTURER_SPARK_HK ((FIT_MANUFACTURER)10)
538
+ #define FIT_MANUFACTURER_TANITA ((FIT_MANUFACTURER)11)
539
+ #define FIT_MANUFACTURER_ECHOWELL ((FIT_MANUFACTURER)12)
540
+ #define FIT_MANUFACTURER_DYNASTREAM_OEM ((FIT_MANUFACTURER)13)
541
+ #define FIT_MANUFACTURER_NAUTILUS ((FIT_MANUFACTURER)14)
542
+ #define FIT_MANUFACTURER_DYNASTREAM ((FIT_MANUFACTURER)15)
543
+ #define FIT_MANUFACTURER_TIMEX ((FIT_MANUFACTURER)16)
544
+ #define FIT_MANUFACTURER_METRIGEAR ((FIT_MANUFACTURER)17)
545
+ #define FIT_MANUFACTURER_XELIC ((FIT_MANUFACTURER)18)
546
+ #define FIT_MANUFACTURER_BEURER ((FIT_MANUFACTURER)19)
547
+ #define FIT_MANUFACTURER_CARDIOSPORT ((FIT_MANUFACTURER)20)
548
+ #define FIT_MANUFACTURER_A_AND_D ((FIT_MANUFACTURER)21)
549
+ #define FIT_MANUFACTURER_HMM ((FIT_MANUFACTURER)22)
550
+ #define FIT_MANUFACTURER_SUUNTO ((FIT_MANUFACTURER)23)
551
+ #define FIT_MANUFACTURER_THITA_ELEKTRONIK ((FIT_MANUFACTURER)24)
552
+ #define FIT_MANUFACTURER_GPULSE ((FIT_MANUFACTURER)25)
553
+ #define FIT_MANUFACTURER_CLEAN_MOBILE ((FIT_MANUFACTURER)26)
554
+ #define FIT_MANUFACTURER_PEDAL_BRAIN ((FIT_MANUFACTURER)27)
555
+ #define FIT_MANUFACTURER_PEAKSWARE ((FIT_MANUFACTURER)28)
556
+ #define FIT_MANUFACTURER_SAXONAR ((FIT_MANUFACTURER)29)
557
+ #define FIT_MANUFACTURER_LEMOND_FITNESS ((FIT_MANUFACTURER)30)
558
+ #define FIT_MANUFACTURER_DEXCOM ((FIT_MANUFACTURER)31)
559
+ #define FIT_MANUFACTURER_WAHOO_FITNESS ((FIT_MANUFACTURER)32)
560
+ #define FIT_MANUFACTURER_OCTANE_FITNESS ((FIT_MANUFACTURER)33)
561
+ #define FIT_MANUFACTURER_ARCHINOETICS ((FIT_MANUFACTURER)34)
562
+ #define FIT_MANUFACTURER_THE_HURT_BOX ((FIT_MANUFACTURER)35)
563
+ #define FIT_MANUFACTURER_CITIZEN_SYSTEMS ((FIT_MANUFACTURER)36)
564
+ #define FIT_MANUFACTURER_MAGELLAN ((FIT_MANUFACTURER)37)
565
+ #define FIT_MANUFACTURER_OSYNCE ((FIT_MANUFACTURER)38)
566
+ #define FIT_MANUFACTURER_HOLUX ((FIT_MANUFACTURER)39)
567
+ #define FIT_MANUFACTURER_CONCEPT2 ((FIT_MANUFACTURER)40)
568
+ #define FIT_MANUFACTURER_ONE_GIANT_LEAP ((FIT_MANUFACTURER)42)
569
+ #define FIT_MANUFACTURER_ACE_SENSOR ((FIT_MANUFACTURER)43)
570
+ #define FIT_MANUFACTURER_BRIM_BROTHERS ((FIT_MANUFACTURER)44)
571
+ #define FIT_MANUFACTURER_XPLOVA ((FIT_MANUFACTURER)45)
572
+ #define FIT_MANUFACTURER_PERCEPTION_DIGITAL ((FIT_MANUFACTURER)46)
573
+ #define FIT_MANUFACTURER_BF1SYSTEMS ((FIT_MANUFACTURER)47)
574
+ #define FIT_MANUFACTURER_PIONEER ((FIT_MANUFACTURER)48)
575
+ #define FIT_MANUFACTURER_SPANTEC ((FIT_MANUFACTURER)49)
576
+ #define FIT_MANUFACTURER_METALOGICS ((FIT_MANUFACTURER)50)
577
+ #define FIT_MANUFACTURER_4IIIIS ((FIT_MANUFACTURER)51)
578
+ #define FIT_MANUFACTURER_SEIKO_EPSON ((FIT_MANUFACTURER)52)
579
+ #define FIT_MANUFACTURER_SEIKO_EPSON_OEM ((FIT_MANUFACTURER)53)
580
+ #define FIT_MANUFACTURER_IFOR_POWELL ((FIT_MANUFACTURER)54)
581
+ #define FIT_MANUFACTURER_MAXWELL_GUIDER ((FIT_MANUFACTURER)55)
582
+ #define FIT_MANUFACTURER_STAR_TRAC ((FIT_MANUFACTURER)56)
583
+ #define FIT_MANUFACTURER_BREAKAWAY ((FIT_MANUFACTURER)57)
584
+ #define FIT_MANUFACTURER_ALATECH_TECHNOLOGY_LTD ((FIT_MANUFACTURER)58)
585
+ #define FIT_MANUFACTURER_MIO_TECHNOLOGY_EUROPE ((FIT_MANUFACTURER)59)
586
+ #define FIT_MANUFACTURER_ROTOR ((FIT_MANUFACTURER)60)
587
+ #define FIT_MANUFACTURER_GEONAUTE ((FIT_MANUFACTURER)61)
588
+ #define FIT_MANUFACTURER_ID_BIKE ((FIT_MANUFACTURER)62)
589
+ #define FIT_MANUFACTURER_SPECIALIZED ((FIT_MANUFACTURER)63)
590
+ #define FIT_MANUFACTURER_WTEK ((FIT_MANUFACTURER)64)
591
+ #define FIT_MANUFACTURER_PHYSICAL_ENTERPRISES ((FIT_MANUFACTURER)65)
592
+ #define FIT_MANUFACTURER_NORTH_POLE_ENGINEERING ((FIT_MANUFACTURER)66)
593
+ #define FIT_MANUFACTURER_BKOOL ((FIT_MANUFACTURER)67)
594
+ #define FIT_MANUFACTURER_CATEYE ((FIT_MANUFACTURER)68)
595
+ #define FIT_MANUFACTURER_STAGES_CYCLING ((FIT_MANUFACTURER)69)
596
+ #define FIT_MANUFACTURER_SIGMASPORT ((FIT_MANUFACTURER)70)
597
+ #define FIT_MANUFACTURER_TOMTOM ((FIT_MANUFACTURER)71)
598
+ #define FIT_MANUFACTURER_PERIPEDAL ((FIT_MANUFACTURER)72)
599
+ #define FIT_MANUFACTURER_MOXY ((FIT_MANUFACTURER)76)
600
+ #define FIT_MANUFACTURER_DEVELOPMENT ((FIT_MANUFACTURER)255)
601
+ #define FIT_MANUFACTURER_ACTIGRAPHCORP ((FIT_MANUFACTURER)5759)
602
+ #define FIT_MANUFACTURER_COUNT 74
603
+
604
+ typedef FIT_UINT16 FIT_GARMIN_PRODUCT;
605
+ #define FIT_GARMIN_PRODUCT_INVALID FIT_UINT16_INVALID
606
+ #define FIT_GARMIN_PRODUCT_HRM1 ((FIT_GARMIN_PRODUCT)1)
607
+ #define FIT_GARMIN_PRODUCT_AXH01 ((FIT_GARMIN_PRODUCT)2) // AXH01 HRM chipset
608
+ #define FIT_GARMIN_PRODUCT_AXB01 ((FIT_GARMIN_PRODUCT)3)
609
+ #define FIT_GARMIN_PRODUCT_AXB02 ((FIT_GARMIN_PRODUCT)4)
610
+ #define FIT_GARMIN_PRODUCT_HRM2SS ((FIT_GARMIN_PRODUCT)5)
611
+ #define FIT_GARMIN_PRODUCT_DSI_ALF02 ((FIT_GARMIN_PRODUCT)6)
612
+ #define FIT_GARMIN_PRODUCT_FR405 ((FIT_GARMIN_PRODUCT)717) // Forerunner 405
613
+ #define FIT_GARMIN_PRODUCT_FR50 ((FIT_GARMIN_PRODUCT)782) // Forerunner 50
614
+ #define FIT_GARMIN_PRODUCT_FR60 ((FIT_GARMIN_PRODUCT)988) // Forerunner 60
615
+ #define FIT_GARMIN_PRODUCT_DSI_ALF01 ((FIT_GARMIN_PRODUCT)1011)
616
+ #define FIT_GARMIN_PRODUCT_FR310XT ((FIT_GARMIN_PRODUCT)1018) // Forerunner 310
617
+ #define FIT_GARMIN_PRODUCT_EDGE500 ((FIT_GARMIN_PRODUCT)1036)
618
+ #define FIT_GARMIN_PRODUCT_FR110 ((FIT_GARMIN_PRODUCT)1124) // Forerunner 110
619
+ #define FIT_GARMIN_PRODUCT_EDGE800 ((FIT_GARMIN_PRODUCT)1169)
620
+ #define FIT_GARMIN_PRODUCT_CHIRP ((FIT_GARMIN_PRODUCT)1253)
621
+ #define FIT_GARMIN_PRODUCT_EDGE200 ((FIT_GARMIN_PRODUCT)1325)
622
+ #define FIT_GARMIN_PRODUCT_FR910XT ((FIT_GARMIN_PRODUCT)1328)
623
+ #define FIT_GARMIN_PRODUCT_ALF04 ((FIT_GARMIN_PRODUCT)1341)
624
+ #define FIT_GARMIN_PRODUCT_FR610 ((FIT_GARMIN_PRODUCT)1345)
625
+ #define FIT_GARMIN_PRODUCT_FR70 ((FIT_GARMIN_PRODUCT)1436)
626
+ #define FIT_GARMIN_PRODUCT_FR310XT_4T ((FIT_GARMIN_PRODUCT)1446)
627
+ #define FIT_GARMIN_PRODUCT_AMX ((FIT_GARMIN_PRODUCT)1461)
628
+ #define FIT_GARMIN_PRODUCT_FR10 ((FIT_GARMIN_PRODUCT)1482)
629
+ #define FIT_GARMIN_PRODUCT_SWIM ((FIT_GARMIN_PRODUCT)1499)
630
+ #define FIT_GARMIN_PRODUCT_FENIX ((FIT_GARMIN_PRODUCT)1551)
631
+ #define FIT_GARMIN_PRODUCT_EDGE510 ((FIT_GARMIN_PRODUCT)1561)
632
+ #define FIT_GARMIN_PRODUCT_EDGE810 ((FIT_GARMIN_PRODUCT)1567)
633
+ #define FIT_GARMIN_PRODUCT_TEMPE ((FIT_GARMIN_PRODUCT)1570)
634
+ #define FIT_GARMIN_PRODUCT_VIRB_ELITE ((FIT_GARMIN_PRODUCT)1735)
635
+ #define FIT_GARMIN_PRODUCT_EDGE_TOURING ((FIT_GARMIN_PRODUCT)1736)
636
+ #define FIT_GARMIN_PRODUCT_SDM4 ((FIT_GARMIN_PRODUCT)10007) // SDM4 footpod
637
+ #define FIT_GARMIN_PRODUCT_TRAINING_CENTER ((FIT_GARMIN_PRODUCT)20119)
638
+ #define FIT_GARMIN_PRODUCT_ANDROID_ANTPLUS_PLUGIN ((FIT_GARMIN_PRODUCT)65532)
639
+ #define FIT_GARMIN_PRODUCT_CONNECT ((FIT_GARMIN_PRODUCT)65534) // Garmin Connect website
640
+ #define FIT_GARMIN_PRODUCT_COUNT 34
641
+
642
+ typedef FIT_UINT8 FIT_DEVICE_TYPE;
643
+ #define FIT_DEVICE_TYPE_INVALID FIT_UINT8_INVALID
644
+ #define FIT_DEVICE_TYPE_ANTFS ((FIT_DEVICE_TYPE)1)
645
+ #define FIT_DEVICE_TYPE_BIKE_POWER ((FIT_DEVICE_TYPE)11)
646
+ #define FIT_DEVICE_TYPE_ENVIRONMENT_SENSOR_LEGACY ((FIT_DEVICE_TYPE)12)
647
+ #define FIT_DEVICE_TYPE_MULTI_SPORT_SPEED_DISTANCE ((FIT_DEVICE_TYPE)15)
648
+ #define FIT_DEVICE_TYPE_CONTROL ((FIT_DEVICE_TYPE)16)
649
+ #define FIT_DEVICE_TYPE_FITNESS_EQUIPMENT ((FIT_DEVICE_TYPE)17)
650
+ #define FIT_DEVICE_TYPE_BLOOD_PRESSURE ((FIT_DEVICE_TYPE)18)
651
+ #define FIT_DEVICE_TYPE_GEOCACHE_NODE ((FIT_DEVICE_TYPE)19)
652
+ #define FIT_DEVICE_TYPE_LIGHT_ELECTRIC_VEHICLE ((FIT_DEVICE_TYPE)20)
653
+ #define FIT_DEVICE_TYPE_ENV_SENSOR ((FIT_DEVICE_TYPE)25)
654
+ #define FIT_DEVICE_TYPE_RACQUET ((FIT_DEVICE_TYPE)26)
655
+ #define FIT_DEVICE_TYPE_WEIGHT_SCALE ((FIT_DEVICE_TYPE)119)
656
+ #define FIT_DEVICE_TYPE_HEART_RATE ((FIT_DEVICE_TYPE)120)
657
+ #define FIT_DEVICE_TYPE_BIKE_SPEED_CADENCE ((FIT_DEVICE_TYPE)121)
658
+ #define FIT_DEVICE_TYPE_BIKE_CADENCE ((FIT_DEVICE_TYPE)122)
659
+ #define FIT_DEVICE_TYPE_BIKE_SPEED ((FIT_DEVICE_TYPE)123)
660
+ #define FIT_DEVICE_TYPE_STRIDE_SPEED_DISTANCE ((FIT_DEVICE_TYPE)124)
661
+ #define FIT_DEVICE_TYPE_COUNT 17
662
+
663
+ typedef FIT_UINT32Z FIT_WORKOUT_CAPABILITIES;
664
+ #define FIT_WORKOUT_CAPABILITIES_INVALID FIT_UINT32Z_INVALID
665
+ #define FIT_WORKOUT_CAPABILITIES_INTERVAL ((FIT_WORKOUT_CAPABILITIES)0x00000001)
666
+ #define FIT_WORKOUT_CAPABILITIES_CUSTOM ((FIT_WORKOUT_CAPABILITIES)0x00000002)
667
+ #define FIT_WORKOUT_CAPABILITIES_FITNESS_EQUIPMENT ((FIT_WORKOUT_CAPABILITIES)0x00000004)
668
+ #define FIT_WORKOUT_CAPABILITIES_FIRSTBEAT ((FIT_WORKOUT_CAPABILITIES)0x00000008)
669
+ #define FIT_WORKOUT_CAPABILITIES_NEW_LEAF ((FIT_WORKOUT_CAPABILITIES)0x00000010)
670
+ #define FIT_WORKOUT_CAPABILITIES_TCX ((FIT_WORKOUT_CAPABILITIES)0x00000020) // For backwards compatibility. Watch should add missing id fields then clear flag.
671
+ #define FIT_WORKOUT_CAPABILITIES_SPEED ((FIT_WORKOUT_CAPABILITIES)0x00000080) // Speed source required for workout step.
672
+ #define FIT_WORKOUT_CAPABILITIES_HEART_RATE ((FIT_WORKOUT_CAPABILITIES)0x00000100) // Heart rate source required for workout step.
673
+ #define FIT_WORKOUT_CAPABILITIES_DISTANCE ((FIT_WORKOUT_CAPABILITIES)0x00000200) // Distance source required for workout step.
674
+ #define FIT_WORKOUT_CAPABILITIES_CADENCE ((FIT_WORKOUT_CAPABILITIES)0x00000400) // Cadence source required for workout step.
675
+ #define FIT_WORKOUT_CAPABILITIES_POWER ((FIT_WORKOUT_CAPABILITIES)0x00000800) // Power source required for workout step.
676
+ #define FIT_WORKOUT_CAPABILITIES_GRADE ((FIT_WORKOUT_CAPABILITIES)0x00001000) // Grade source required for workout step.
677
+ #define FIT_WORKOUT_CAPABILITIES_RESISTANCE ((FIT_WORKOUT_CAPABILITIES)0x00002000) // Resistance source required for workout step.
678
+ #define FIT_WORKOUT_CAPABILITIES_PROTECTED ((FIT_WORKOUT_CAPABILITIES)0x00004000)
679
+ #define FIT_WORKOUT_CAPABILITIES_COUNT 14
680
+
681
+ typedef FIT_UINT8 FIT_BATTERY_STATUS;
682
+ #define FIT_BATTERY_STATUS_INVALID FIT_UINT8_INVALID
683
+ #define FIT_BATTERY_STATUS_NEW ((FIT_BATTERY_STATUS)1)
684
+ #define FIT_BATTERY_STATUS_GOOD ((FIT_BATTERY_STATUS)2)
685
+ #define FIT_BATTERY_STATUS_OK ((FIT_BATTERY_STATUS)3)
686
+ #define FIT_BATTERY_STATUS_LOW ((FIT_BATTERY_STATUS)4)
687
+ #define FIT_BATTERY_STATUS_CRITICAL ((FIT_BATTERY_STATUS)5)
688
+ #define FIT_BATTERY_STATUS_COUNT 5
689
+
690
+ typedef FIT_ENUM FIT_HR_TYPE;
691
+ #define FIT_HR_TYPE_INVALID FIT_ENUM_INVALID
692
+ #define FIT_HR_TYPE_NORMAL ((FIT_HR_TYPE)0)
693
+ #define FIT_HR_TYPE_IRREGULAR ((FIT_HR_TYPE)1)
694
+ #define FIT_HR_TYPE_COUNT 2
695
+
696
+ typedef FIT_UINT32Z FIT_COURSE_CAPABILITIES;
697
+ #define FIT_COURSE_CAPABILITIES_INVALID FIT_UINT32Z_INVALID
698
+ #define FIT_COURSE_CAPABILITIES_PROCESSED ((FIT_COURSE_CAPABILITIES)0x00000001)
699
+ #define FIT_COURSE_CAPABILITIES_VALID ((FIT_COURSE_CAPABILITIES)0x00000002)
700
+ #define FIT_COURSE_CAPABILITIES_TIME ((FIT_COURSE_CAPABILITIES)0x00000004)
701
+ #define FIT_COURSE_CAPABILITIES_DISTANCE ((FIT_COURSE_CAPABILITIES)0x00000008)
702
+ #define FIT_COURSE_CAPABILITIES_POSITION ((FIT_COURSE_CAPABILITIES)0x00000010)
703
+ #define FIT_COURSE_CAPABILITIES_HEART_RATE ((FIT_COURSE_CAPABILITIES)0x00000020)
704
+ #define FIT_COURSE_CAPABILITIES_POWER ((FIT_COURSE_CAPABILITIES)0x00000040)
705
+ #define FIT_COURSE_CAPABILITIES_CADENCE ((FIT_COURSE_CAPABILITIES)0x00000080)
706
+ #define FIT_COURSE_CAPABILITIES_TRAINING ((FIT_COURSE_CAPABILITIES)0x00000100)
707
+ #define FIT_COURSE_CAPABILITIES_NAVIGATION ((FIT_COURSE_CAPABILITIES)0x00000200)
708
+ #define FIT_COURSE_CAPABILITIES_COUNT 10
709
+
710
+ typedef FIT_UINT16 FIT_WEIGHT;
711
+ #define FIT_WEIGHT_INVALID FIT_UINT16_INVALID
712
+ #define FIT_WEIGHT_CALCULATING ((FIT_WEIGHT)0xFFFE)
713
+ #define FIT_WEIGHT_COUNT 1
714
+
715
+ typedef FIT_UINT32 FIT_WORKOUT_HR; // 0 - 100 indicates% of maz hr; >100 indicates bpm (255 max) plus 100
716
+ #define FIT_WORKOUT_HR_INVALID FIT_UINT32_INVALID
717
+ #define FIT_WORKOUT_HR_BPM_OFFSET ((FIT_WORKOUT_HR)100)
718
+ #define FIT_WORKOUT_HR_COUNT 1
719
+
720
+ typedef FIT_UINT32 FIT_WORKOUT_POWER; // 0 - 1000 indicates % of functional threshold power; >1000 indicates watts plus 1000.
721
+ #define FIT_WORKOUT_POWER_INVALID FIT_UINT32_INVALID
722
+ #define FIT_WORKOUT_POWER_WATTS_OFFSET ((FIT_WORKOUT_POWER)1000)
723
+ #define FIT_WORKOUT_POWER_COUNT 1
724
+
725
+ typedef FIT_ENUM FIT_BP_STATUS;
726
+ #define FIT_BP_STATUS_INVALID FIT_ENUM_INVALID
727
+ #define FIT_BP_STATUS_NO_ERROR ((FIT_BP_STATUS)0)
728
+ #define FIT_BP_STATUS_ERROR_INCOMPLETE_DATA ((FIT_BP_STATUS)1)
729
+ #define FIT_BP_STATUS_ERROR_NO_MEASUREMENT ((FIT_BP_STATUS)2)
730
+ #define FIT_BP_STATUS_ERROR_DATA_OUT_OF_RANGE ((FIT_BP_STATUS)3)
731
+ #define FIT_BP_STATUS_ERROR_IRREGULAR_HEART_RATE ((FIT_BP_STATUS)4)
732
+ #define FIT_BP_STATUS_COUNT 5
733
+
734
+ typedef FIT_UINT16 FIT_USER_LOCAL_ID;
735
+ #define FIT_USER_LOCAL_ID_INVALID FIT_UINT16_INVALID
736
+ #define FIT_USER_LOCAL_ID_LOCAL_MIN ((FIT_USER_LOCAL_ID)0x0001)
737
+ #define FIT_USER_LOCAL_ID_LOCAL_MAX ((FIT_USER_LOCAL_ID)0x000F)
738
+ #define FIT_USER_LOCAL_ID_STATIONARY_MIN ((FIT_USER_LOCAL_ID)0x0010)
739
+ #define FIT_USER_LOCAL_ID_STATIONARY_MAX ((FIT_USER_LOCAL_ID)0x00FF)
740
+ #define FIT_USER_LOCAL_ID_PORTABLE_MIN ((FIT_USER_LOCAL_ID)0x0100)
741
+ #define FIT_USER_LOCAL_ID_PORTABLE_MAX ((FIT_USER_LOCAL_ID)0xFFFE)
742
+ #define FIT_USER_LOCAL_ID_COUNT 6
743
+
744
+ typedef FIT_ENUM FIT_SWIM_STROKE;
745
+ #define FIT_SWIM_STROKE_INVALID FIT_ENUM_INVALID
746
+ #define FIT_SWIM_STROKE_FREESTYLE ((FIT_SWIM_STROKE)0)
747
+ #define FIT_SWIM_STROKE_BACKSTROKE ((FIT_SWIM_STROKE)1)
748
+ #define FIT_SWIM_STROKE_BREASTSTROKE ((FIT_SWIM_STROKE)2)
749
+ #define FIT_SWIM_STROKE_BUTTERFLY ((FIT_SWIM_STROKE)3)
750
+ #define FIT_SWIM_STROKE_DRILL ((FIT_SWIM_STROKE)4)
751
+ #define FIT_SWIM_STROKE_MIXED ((FIT_SWIM_STROKE)5)
752
+ #define FIT_SWIM_STROKE_IM ((FIT_SWIM_STROKE)6) // IM is a mixed interval containing the same number of lengths for each of: Butterfly, Backstroke, Breaststroke, Freestyle, swam in that order.
753
+ #define FIT_SWIM_STROKE_COUNT 7
754
+
755
+ typedef FIT_ENUM FIT_ACTIVITY_TYPE;
756
+ #define FIT_ACTIVITY_TYPE_INVALID FIT_ENUM_INVALID
757
+ #define FIT_ACTIVITY_TYPE_GENERIC ((FIT_ACTIVITY_TYPE)0)
758
+ #define FIT_ACTIVITY_TYPE_RUNNING ((FIT_ACTIVITY_TYPE)1)
759
+ #define FIT_ACTIVITY_TYPE_CYCLING ((FIT_ACTIVITY_TYPE)2)
760
+ #define FIT_ACTIVITY_TYPE_TRANSITION ((FIT_ACTIVITY_TYPE)3) // Mulitsport transition
761
+ #define FIT_ACTIVITY_TYPE_FITNESS_EQUIPMENT ((FIT_ACTIVITY_TYPE)4)
762
+ #define FIT_ACTIVITY_TYPE_SWIMMING ((FIT_ACTIVITY_TYPE)5)
763
+ #define FIT_ACTIVITY_TYPE_WALKING ((FIT_ACTIVITY_TYPE)6)
764
+ #define FIT_ACTIVITY_TYPE_ALL ((FIT_ACTIVITY_TYPE)254) // All is for goals only to include all sports.
765
+ #define FIT_ACTIVITY_TYPE_COUNT 8
766
+
767
+ typedef FIT_ENUM FIT_ACTIVITY_SUBTYPE;
768
+ #define FIT_ACTIVITY_SUBTYPE_INVALID FIT_ENUM_INVALID
769
+ #define FIT_ACTIVITY_SUBTYPE_GENERIC ((FIT_ACTIVITY_SUBTYPE)0)
770
+ #define FIT_ACTIVITY_SUBTYPE_TREADMILL ((FIT_ACTIVITY_SUBTYPE)1) // Run
771
+ #define FIT_ACTIVITY_SUBTYPE_STREET ((FIT_ACTIVITY_SUBTYPE)2) // Run
772
+ #define FIT_ACTIVITY_SUBTYPE_TRAIL ((FIT_ACTIVITY_SUBTYPE)3) // Run
773
+ #define FIT_ACTIVITY_SUBTYPE_TRACK ((FIT_ACTIVITY_SUBTYPE)4) // Run
774
+ #define FIT_ACTIVITY_SUBTYPE_SPIN ((FIT_ACTIVITY_SUBTYPE)5) // Cycling
775
+ #define FIT_ACTIVITY_SUBTYPE_INDOOR_CYCLING ((FIT_ACTIVITY_SUBTYPE)6) // Cycling
776
+ #define FIT_ACTIVITY_SUBTYPE_ROAD ((FIT_ACTIVITY_SUBTYPE)7) // Cycling
777
+ #define FIT_ACTIVITY_SUBTYPE_MOUNTAIN ((FIT_ACTIVITY_SUBTYPE)8) // Cycling
778
+ #define FIT_ACTIVITY_SUBTYPE_DOWNHILL ((FIT_ACTIVITY_SUBTYPE)9) // Cycling
779
+ #define FIT_ACTIVITY_SUBTYPE_RECUMBENT ((FIT_ACTIVITY_SUBTYPE)10) // Cycling
780
+ #define FIT_ACTIVITY_SUBTYPE_CYCLOCROSS ((FIT_ACTIVITY_SUBTYPE)11) // Cycling
781
+ #define FIT_ACTIVITY_SUBTYPE_HAND_CYCLING ((FIT_ACTIVITY_SUBTYPE)12) // Cycling
782
+ #define FIT_ACTIVITY_SUBTYPE_TRACK_CYCLING ((FIT_ACTIVITY_SUBTYPE)13) // Cycling
783
+ #define FIT_ACTIVITY_SUBTYPE_INDOOR_ROWING ((FIT_ACTIVITY_SUBTYPE)14) // Fitness Equipment
784
+ #define FIT_ACTIVITY_SUBTYPE_ELLIPTICAL ((FIT_ACTIVITY_SUBTYPE)15) // Fitness Equipment
785
+ #define FIT_ACTIVITY_SUBTYPE_STAIR_CLIMBING ((FIT_ACTIVITY_SUBTYPE)16) // Fitness Equipment
786
+ #define FIT_ACTIVITY_SUBTYPE_LAP_SWIMMING ((FIT_ACTIVITY_SUBTYPE)17) // Swimming
787
+ #define FIT_ACTIVITY_SUBTYPE_OPEN_WATER ((FIT_ACTIVITY_SUBTYPE)18) // Swimming
788
+ #define FIT_ACTIVITY_SUBTYPE_ALL ((FIT_ACTIVITY_SUBTYPE)254)
789
+ #define FIT_ACTIVITY_SUBTYPE_COUNT 20
790
+
791
+ typedef FIT_ENUM FIT_ACTIVITY_LEVEL;
792
+ #define FIT_ACTIVITY_LEVEL_INVALID FIT_ENUM_INVALID
793
+ #define FIT_ACTIVITY_LEVEL_LOW ((FIT_ACTIVITY_LEVEL)0)
794
+ #define FIT_ACTIVITY_LEVEL_MEDIUM ((FIT_ACTIVITY_LEVEL)1)
795
+ #define FIT_ACTIVITY_LEVEL_HIGH ((FIT_ACTIVITY_LEVEL)2)
796
+ #define FIT_ACTIVITY_LEVEL_COUNT 3
797
+
798
+ typedef FIT_UINT8 FIT_LEFT_RIGHT_BALANCE;
799
+ #define FIT_LEFT_RIGHT_BALANCE_INVALID FIT_UINT8_INVALID
800
+ #define FIT_LEFT_RIGHT_BALANCE_MASK ((FIT_LEFT_RIGHT_BALANCE)0x7F) // % contribution
801
+ #define FIT_LEFT_RIGHT_BALANCE_RIGHT ((FIT_LEFT_RIGHT_BALANCE)0x80) // data corresponds to right if set, otherwise unknown
802
+ #define FIT_LEFT_RIGHT_BALANCE_COUNT 2
803
+
804
+ typedef FIT_UINT16 FIT_LEFT_RIGHT_BALANCE_100;
805
+ #define FIT_LEFT_RIGHT_BALANCE_100_INVALID FIT_UINT16_INVALID
806
+ #define FIT_LEFT_RIGHT_BALANCE_100_MASK ((FIT_LEFT_RIGHT_BALANCE_100)0x3FFF) // % contribution scaled by 100
807
+ #define FIT_LEFT_RIGHT_BALANCE_100_RIGHT ((FIT_LEFT_RIGHT_BALANCE_100)0x8000) // data corresponds to right if set, otherwise unknown
808
+ #define FIT_LEFT_RIGHT_BALANCE_100_COUNT 2
809
+
810
+ typedef FIT_ENUM FIT_LENGTH_TYPE;
811
+ #define FIT_LENGTH_TYPE_INVALID FIT_ENUM_INVALID
812
+ #define FIT_LENGTH_TYPE_IDLE ((FIT_LENGTH_TYPE)0) // Rest period. Length with no strokes
813
+ #define FIT_LENGTH_TYPE_ACTIVE ((FIT_LENGTH_TYPE)1) // Length with strokes.
814
+ #define FIT_LENGTH_TYPE_COUNT 2
815
+
816
+ typedef FIT_ENUM FIT_STROKE_TYPE;
817
+ #define FIT_STROKE_TYPE_INVALID FIT_ENUM_INVALID
818
+ #define FIT_STROKE_TYPE_NO_EVENT ((FIT_STROKE_TYPE)0)
819
+ #define FIT_STROKE_TYPE_OTHER ((FIT_STROKE_TYPE)1) // stroke was detected but cannot be identified
820
+ #define FIT_STROKE_TYPE_SERVE ((FIT_STROKE_TYPE)2)
821
+ #define FIT_STROKE_TYPE_FOREHAND ((FIT_STROKE_TYPE)3)
822
+ #define FIT_STROKE_TYPE_BACKHAND ((FIT_STROKE_TYPE)4)
823
+ #define FIT_STROKE_TYPE_SMASH ((FIT_STROKE_TYPE)5)
824
+ #define FIT_STROKE_TYPE_COUNT 6
825
+
826
+
827
+ ///////////////////////////////////////////////////////////////////////
828
+ // Message Conversion Structures
829
+ ///////////////////////////////////////////////////////////////////////
830
+
831
+ typedef struct
832
+ {
833
+ FIT_UINT8 base_type;
834
+ FIT_UINT8 offset_in;
835
+ FIT_UINT8 offset_local;
836
+ FIT_UINT8 size;
837
+ } FIT_FIELD_CONVERT;
838
+
839
+ typedef struct
840
+ {
841
+ FIT_UINT8 reserved_1;
842
+ FIT_UINT8 arch;
843
+ FIT_MESG_NUM global_mesg_num;
844
+ FIT_UINT8 num_fields;
845
+ FIT_FIELD_CONVERT fields[75];
846
+ } FIT_MESG_CONVERT;
847
+
848
+
849
+ ///////////////////////////////////////////////////////////////////////
850
+ // Messages
851
+ ///////////////////////////////////////////////////////////////////////
852
+
853
+ #define FIT_MESG_SIZE 172
854
+ #define FIT_MESG_DEF_SIZE 230
855
+
856
+ // pad message
857
+
858
+ #define FIT_PAD_MESG_DEF_SIZE 5
859
+
860
+ typedef struct
861
+ {
862
+ FIT_UINT8 reserved_1;
863
+ FIT_UINT8 arch;
864
+ FIT_MESG_NUM global_mesg_num;
865
+ FIT_UINT8 num_fields;
866
+ } FIT_PAD_MESG_DEF;
867
+
868
+
869
+ // file_id message
870
+
871
+ #define FIT_FILE_ID_MESG_SIZE 15
872
+ #define FIT_FILE_ID_MESG_DEF_SIZE 23
873
+
874
+ typedef struct
875
+ {
876
+ FIT_UINT32Z serial_number; //
877
+ FIT_DATE_TIME time_created; // Only set for files that are can be created/erased.
878
+ FIT_MANUFACTURER manufacturer; //
879
+ FIT_UINT16 product; //
880
+ FIT_UINT16 number; // Only set for files that are not created/erased.
881
+ FIT_FILE type; //
882
+ } FIT_FILE_ID_MESG;
883
+
884
+ typedef enum
885
+ {
886
+ FIT_FILE_ID_FIELD_NUM_SERIAL_NUMBER = 3,
887
+ FIT_FILE_ID_FIELD_NUM_TIME_CREATED = 4,
888
+ FIT_FILE_ID_FIELD_NUM_MANUFACTURER = 1,
889
+ FIT_FILE_ID_FIELD_NUM_PRODUCT = 2,
890
+ FIT_FILE_ID_FIELD_NUM_NUMBER = 5,
891
+ FIT_FILE_ID_FIELD_NUM_TYPE = 0
892
+ } FIT_FILE_ID_FIELD_NUM;
893
+
894
+ typedef enum
895
+ {
896
+ FIT_FILE_ID_MESG_SERIAL_NUMBER,
897
+ FIT_FILE_ID_MESG_TIME_CREATED,
898
+ FIT_FILE_ID_MESG_MANUFACTURER,
899
+ FIT_FILE_ID_MESG_PRODUCT,
900
+ FIT_FILE_ID_MESG_NUMBER,
901
+ FIT_FILE_ID_MESG_TYPE,
902
+ FIT_FILE_ID_MESG_FIELDS
903
+ } FIT_FILE_ID_MESG_FIELD;
904
+
905
+ typedef struct
906
+ {
907
+ FIT_UINT8 reserved_1;
908
+ FIT_UINT8 arch;
909
+ FIT_MESG_NUM global_mesg_num;
910
+ FIT_UINT8 num_fields;
911
+ FIT_UINT8 fields[FIT_FILE_ID_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
912
+ } FIT_FILE_ID_MESG_DEF;
913
+
914
+ // file_creator message
915
+
916
+ #define FIT_FILE_CREATOR_MESG_SIZE 3
917
+ #define FIT_FILE_CREATOR_MESG_DEF_SIZE 11
918
+
919
+ typedef struct
920
+ {
921
+ FIT_UINT16 software_version; //
922
+ FIT_UINT8 hardware_version; //
923
+ } FIT_FILE_CREATOR_MESG;
924
+
925
+ typedef enum
926
+ {
927
+ FIT_FILE_CREATOR_FIELD_NUM_SOFTWARE_VERSION = 0,
928
+ FIT_FILE_CREATOR_FIELD_NUM_HARDWARE_VERSION = 1
929
+ } FIT_FILE_CREATOR_FIELD_NUM;
930
+
931
+ typedef enum
932
+ {
933
+ FIT_FILE_CREATOR_MESG_SOFTWARE_VERSION,
934
+ FIT_FILE_CREATOR_MESG_HARDWARE_VERSION,
935
+ FIT_FILE_CREATOR_MESG_FIELDS
936
+ } FIT_FILE_CREATOR_MESG_FIELD;
937
+
938
+ typedef struct
939
+ {
940
+ FIT_UINT8 reserved_1;
941
+ FIT_UINT8 arch;
942
+ FIT_MESG_NUM global_mesg_num;
943
+ FIT_UINT8 num_fields;
944
+ FIT_UINT8 fields[FIT_FILE_CREATOR_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
945
+ } FIT_FILE_CREATOR_MESG_DEF;
946
+
947
+ // software message
948
+
949
+ #define FIT_SOFTWARE_MESG_SIZE 20
950
+ #define FIT_SOFTWARE_MESG_DEF_SIZE 14
951
+ #define FIT_SOFTWARE_MESG_PART_NUMBER_COUNT 16
952
+
953
+ typedef struct
954
+ {
955
+ FIT_STRING part_number[FIT_SOFTWARE_MESG_PART_NUMBER_COUNT]; //
956
+ FIT_MESSAGE_INDEX message_index; //
957
+ FIT_UINT16 version; //
958
+ } FIT_SOFTWARE_MESG;
959
+
960
+ typedef enum
961
+ {
962
+ FIT_SOFTWARE_FIELD_NUM_PART_NUMBER = 5,
963
+ FIT_SOFTWARE_FIELD_NUM_MESSAGE_INDEX = 254,
964
+ FIT_SOFTWARE_FIELD_NUM_VERSION = 3
965
+ } FIT_SOFTWARE_FIELD_NUM;
966
+
967
+ typedef enum
968
+ {
969
+ FIT_SOFTWARE_MESG_PART_NUMBER,
970
+ FIT_SOFTWARE_MESG_MESSAGE_INDEX,
971
+ FIT_SOFTWARE_MESG_VERSION,
972
+ FIT_SOFTWARE_MESG_FIELDS
973
+ } FIT_SOFTWARE_MESG_FIELD;
974
+
975
+ typedef struct
976
+ {
977
+ FIT_UINT8 reserved_1;
978
+ FIT_UINT8 arch;
979
+ FIT_MESG_NUM global_mesg_num;
980
+ FIT_UINT8 num_fields;
981
+ FIT_UINT8 fields[FIT_SOFTWARE_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
982
+ } FIT_SOFTWARE_MESG_DEF;
983
+
984
+ // slave_device message
985
+
986
+ #define FIT_SLAVE_DEVICE_MESG_SIZE 4
987
+ #define FIT_SLAVE_DEVICE_MESG_DEF_SIZE 11
988
+
989
+ typedef struct
990
+ {
991
+ FIT_MANUFACTURER manufacturer; //
992
+ FIT_UINT16 product; //
993
+ } FIT_SLAVE_DEVICE_MESG;
994
+
995
+ typedef enum
996
+ {
997
+ FIT_SLAVE_DEVICE_FIELD_NUM_MANUFACTURER = 0,
998
+ FIT_SLAVE_DEVICE_FIELD_NUM_PRODUCT = 1
999
+ } FIT_SLAVE_DEVICE_FIELD_NUM;
1000
+
1001
+ typedef enum
1002
+ {
1003
+ FIT_SLAVE_DEVICE_MESG_MANUFACTURER,
1004
+ FIT_SLAVE_DEVICE_MESG_PRODUCT,
1005
+ FIT_SLAVE_DEVICE_MESG_FIELDS
1006
+ } FIT_SLAVE_DEVICE_MESG_FIELD;
1007
+
1008
+ typedef struct
1009
+ {
1010
+ FIT_UINT8 reserved_1;
1011
+ FIT_UINT8 arch;
1012
+ FIT_MESG_NUM global_mesg_num;
1013
+ FIT_UINT8 num_fields;
1014
+ FIT_UINT8 fields[FIT_SLAVE_DEVICE_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
1015
+ } FIT_SLAVE_DEVICE_MESG_DEF;
1016
+
1017
+ // capabilities message
1018
+
1019
+ #define FIT_CAPABILITIES_MESG_SIZE 9
1020
+ #define FIT_CAPABILITIES_MESG_DEF_SIZE 14
1021
+ #define FIT_CAPABILITIES_MESG_LANGUAGES_COUNT 4
1022
+ #define FIT_CAPABILITIES_MESG_SPORTS_COUNT 1
1023
+
1024
+ typedef struct
1025
+ {
1026
+ FIT_UINT8Z languages[FIT_CAPABILITIES_MESG_LANGUAGES_COUNT]; // Use language_bits_x types where x is index of array.
1027
+ FIT_WORKOUT_CAPABILITIES workouts_supported; //
1028
+ FIT_SPORT_BITS_0 sports[FIT_CAPABILITIES_MESG_SPORTS_COUNT]; // Use sport_bits_x types where x is index of array.
1029
+ } FIT_CAPABILITIES_MESG;
1030
+
1031
+ typedef enum
1032
+ {
1033
+ FIT_CAPABILITIES_FIELD_NUM_LANGUAGES = 0,
1034
+ FIT_CAPABILITIES_FIELD_NUM_WORKOUTS_SUPPORTED = 21,
1035
+ FIT_CAPABILITIES_FIELD_NUM_SPORTS = 1
1036
+ } FIT_CAPABILITIES_FIELD_NUM;
1037
+
1038
+ typedef enum
1039
+ {
1040
+ FIT_CAPABILITIES_MESG_LANGUAGES,
1041
+ FIT_CAPABILITIES_MESG_WORKOUTS_SUPPORTED,
1042
+ FIT_CAPABILITIES_MESG_SPORTS,
1043
+ FIT_CAPABILITIES_MESG_FIELDS
1044
+ } FIT_CAPABILITIES_MESG_FIELD;
1045
+
1046
+ typedef struct
1047
+ {
1048
+ FIT_UINT8 reserved_1;
1049
+ FIT_UINT8 arch;
1050
+ FIT_MESG_NUM global_mesg_num;
1051
+ FIT_UINT8 num_fields;
1052
+ FIT_UINT8 fields[FIT_CAPABILITIES_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
1053
+ } FIT_CAPABILITIES_MESG_DEF;
1054
+
1055
+ // file_capabilities message
1056
+
1057
+ #define FIT_FILE_CAPABILITIES_MESG_SIZE 26
1058
+ #define FIT_FILE_CAPABILITIES_MESG_DEF_SIZE 23
1059
+ #define FIT_FILE_CAPABILITIES_MESG_DIRECTORY_COUNT 16
1060
+
1061
+ typedef struct
1062
+ {
1063
+ FIT_STRING directory[FIT_FILE_CAPABILITIES_MESG_DIRECTORY_COUNT]; //
1064
+ FIT_UINT32 max_size; // bytes,
1065
+ FIT_MESSAGE_INDEX message_index; //
1066
+ FIT_UINT16 max_count; //
1067
+ FIT_FILE type; //
1068
+ FIT_FILE_FLAGS flags; //
1069
+ } FIT_FILE_CAPABILITIES_MESG;
1070
+
1071
+ typedef enum
1072
+ {
1073
+ FIT_FILE_CAPABILITIES_FIELD_NUM_DIRECTORY = 2,
1074
+ FIT_FILE_CAPABILITIES_FIELD_NUM_MAX_SIZE = 4,
1075
+ FIT_FILE_CAPABILITIES_FIELD_NUM_MESSAGE_INDEX = 254,
1076
+ FIT_FILE_CAPABILITIES_FIELD_NUM_MAX_COUNT = 3,
1077
+ FIT_FILE_CAPABILITIES_FIELD_NUM_TYPE = 0,
1078
+ FIT_FILE_CAPABILITIES_FIELD_NUM_FLAGS = 1
1079
+ } FIT_FILE_CAPABILITIES_FIELD_NUM;
1080
+
1081
+ typedef enum
1082
+ {
1083
+ FIT_FILE_CAPABILITIES_MESG_DIRECTORY,
1084
+ FIT_FILE_CAPABILITIES_MESG_MAX_SIZE,
1085
+ FIT_FILE_CAPABILITIES_MESG_MESSAGE_INDEX,
1086
+ FIT_FILE_CAPABILITIES_MESG_MAX_COUNT,
1087
+ FIT_FILE_CAPABILITIES_MESG_TYPE,
1088
+ FIT_FILE_CAPABILITIES_MESG_FLAGS,
1089
+ FIT_FILE_CAPABILITIES_MESG_FIELDS
1090
+ } FIT_FILE_CAPABILITIES_MESG_FIELD;
1091
+
1092
+ typedef struct
1093
+ {
1094
+ FIT_UINT8 reserved_1;
1095
+ FIT_UINT8 arch;
1096
+ FIT_MESG_NUM global_mesg_num;
1097
+ FIT_UINT8 num_fields;
1098
+ FIT_UINT8 fields[FIT_FILE_CAPABILITIES_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
1099
+ } FIT_FILE_CAPABILITIES_MESG_DEF;
1100
+
1101
+ // mesg_capabilities message
1102
+
1103
+ #define FIT_MESG_CAPABILITIES_MESG_SIZE 8
1104
+ #define FIT_MESG_CAPABILITIES_MESG_DEF_SIZE 20
1105
+
1106
+ typedef struct
1107
+ {
1108
+ FIT_MESSAGE_INDEX message_index; //
1109
+ FIT_MESG_NUM mesg_num; //
1110
+ FIT_UINT16 count; //
1111
+ FIT_FILE file; //
1112
+ FIT_MESG_COUNT count_type; //
1113
+ } FIT_MESG_CAPABILITIES_MESG;
1114
+
1115
+ typedef enum
1116
+ {
1117
+ FIT_MESG_CAPABILITIES_FIELD_NUM_MESSAGE_INDEX = 254,
1118
+ FIT_MESG_CAPABILITIES_FIELD_NUM_MESG_NUM = 1,
1119
+ FIT_MESG_CAPABILITIES_FIELD_NUM_COUNT = 3,
1120
+ FIT_MESG_CAPABILITIES_FIELD_NUM_FILE = 0,
1121
+ FIT_MESG_CAPABILITIES_FIELD_NUM_COUNT_TYPE = 2
1122
+ } FIT_MESG_CAPABILITIES_FIELD_NUM;
1123
+
1124
+ typedef enum
1125
+ {
1126
+ FIT_MESG_CAPABILITIES_MESG_MESSAGE_INDEX,
1127
+ FIT_MESG_CAPABILITIES_MESG_MESG_NUM,
1128
+ FIT_MESG_CAPABILITIES_MESG_COUNT,
1129
+ FIT_MESG_CAPABILITIES_MESG_FILE,
1130
+ FIT_MESG_CAPABILITIES_MESG_COUNT_TYPE,
1131
+ FIT_MESG_CAPABILITIES_MESG_FIELDS
1132
+ } FIT_MESG_CAPABILITIES_MESG_FIELD;
1133
+
1134
+ typedef struct
1135
+ {
1136
+ FIT_UINT8 reserved_1;
1137
+ FIT_UINT8 arch;
1138
+ FIT_MESG_NUM global_mesg_num;
1139
+ FIT_UINT8 num_fields;
1140
+ FIT_UINT8 fields[FIT_MESG_CAPABILITIES_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
1141
+ } FIT_MESG_CAPABILITIES_MESG_DEF;
1142
+
1143
+ // field_capabilities message
1144
+
1145
+ #define FIT_FIELD_CAPABILITIES_MESG_SIZE 8
1146
+ #define FIT_FIELD_CAPABILITIES_MESG_DEF_SIZE 20
1147
+
1148
+ typedef struct
1149
+ {
1150
+ FIT_MESSAGE_INDEX message_index; //
1151
+ FIT_MESG_NUM mesg_num; //
1152
+ FIT_UINT16 count; //
1153
+ FIT_FILE file; //
1154
+ FIT_UINT8 field_num; //
1155
+ } FIT_FIELD_CAPABILITIES_MESG;
1156
+
1157
+ typedef enum
1158
+ {
1159
+ FIT_FIELD_CAPABILITIES_FIELD_NUM_MESSAGE_INDEX = 254,
1160
+ FIT_FIELD_CAPABILITIES_FIELD_NUM_MESG_NUM = 1,
1161
+ FIT_FIELD_CAPABILITIES_FIELD_NUM_COUNT = 3,
1162
+ FIT_FIELD_CAPABILITIES_FIELD_NUM_FILE = 0,
1163
+ FIT_FIELD_CAPABILITIES_FIELD_NUM_FIELD_NUM = 2
1164
+ } FIT_FIELD_CAPABILITIES_FIELD_NUM;
1165
+
1166
+ typedef enum
1167
+ {
1168
+ FIT_FIELD_CAPABILITIES_MESG_MESSAGE_INDEX,
1169
+ FIT_FIELD_CAPABILITIES_MESG_MESG_NUM,
1170
+ FIT_FIELD_CAPABILITIES_MESG_COUNT,
1171
+ FIT_FIELD_CAPABILITIES_MESG_FILE,
1172
+ FIT_FIELD_CAPABILITIES_MESG_FIELD_NUM,
1173
+ FIT_FIELD_CAPABILITIES_MESG_FIELDS
1174
+ } FIT_FIELD_CAPABILITIES_MESG_FIELD;
1175
+
1176
+ typedef struct
1177
+ {
1178
+ FIT_UINT8 reserved_1;
1179
+ FIT_UINT8 arch;
1180
+ FIT_MESG_NUM global_mesg_num;
1181
+ FIT_UINT8 num_fields;
1182
+ FIT_UINT8 fields[FIT_FIELD_CAPABILITIES_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
1183
+ } FIT_FIELD_CAPABILITIES_MESG_DEF;
1184
+
1185
+ // device_settings message
1186
+
1187
+ #define FIT_DEVICE_SETTINGS_MESG_SIZE 4
1188
+ #define FIT_DEVICE_SETTINGS_MESG_DEF_SIZE 8
1189
+
1190
+ typedef struct
1191
+ {
1192
+ FIT_UINT32 utc_offset; // Offset from system time. Required to convert timestamp from system time to UTC.
1193
+ } FIT_DEVICE_SETTINGS_MESG;
1194
+
1195
+ typedef enum
1196
+ {
1197
+ FIT_DEVICE_SETTINGS_FIELD_NUM_UTC_OFFSET = 1
1198
+ } FIT_DEVICE_SETTINGS_FIELD_NUM;
1199
+
1200
+ typedef enum
1201
+ {
1202
+ FIT_DEVICE_SETTINGS_MESG_UTC_OFFSET,
1203
+ FIT_DEVICE_SETTINGS_MESG_FIELDS
1204
+ } FIT_DEVICE_SETTINGS_MESG_FIELD;
1205
+
1206
+ typedef struct
1207
+ {
1208
+ FIT_UINT8 reserved_1;
1209
+ FIT_UINT8 arch;
1210
+ FIT_MESG_NUM global_mesg_num;
1211
+ FIT_UINT8 num_fields;
1212
+ FIT_UINT8 fields[FIT_DEVICE_SETTINGS_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
1213
+ } FIT_DEVICE_SETTINGS_MESG_DEF;
1214
+
1215
+ // user_profile message
1216
+
1217
+ #define FIT_USER_PROFILE_MESG_SIZE 45
1218
+ #define FIT_USER_PROFILE_MESG_DEF_SIZE 71
1219
+ #define FIT_USER_PROFILE_MESG_FRIENDLY_NAME_COUNT 16
1220
+ #define FIT_USER_PROFILE_MESG_GLOBAL_ID_COUNT 6
1221
+
1222
+ typedef struct
1223
+ {
1224
+ FIT_STRING friendly_name[FIT_USER_PROFILE_MESG_FRIENDLY_NAME_COUNT]; //
1225
+ FIT_MESSAGE_INDEX message_index; //
1226
+ FIT_UINT16 weight; // 10 * kg,
1227
+ FIT_USER_LOCAL_ID local_id; //
1228
+ FIT_GENDER gender; //
1229
+ FIT_UINT8 age; // years,
1230
+ FIT_UINT8 height; // 100 * m,
1231
+ FIT_LANGUAGE language; //
1232
+ FIT_DISPLAY_MEASURE elev_setting; //
1233
+ FIT_DISPLAY_MEASURE weight_setting; //
1234
+ FIT_UINT8 resting_heart_rate; // bpm,
1235
+ FIT_UINT8 default_max_running_heart_rate; // bpm,
1236
+ FIT_UINT8 default_max_biking_heart_rate; // bpm,
1237
+ FIT_UINT8 default_max_heart_rate; // bpm,
1238
+ FIT_DISPLAY_HEART hr_setting; //
1239
+ FIT_DISPLAY_MEASURE speed_setting; //
1240
+ FIT_DISPLAY_MEASURE dist_setting; //
1241
+ FIT_DISPLAY_POWER power_setting; //
1242
+ FIT_ACTIVITY_CLASS activity_class; //
1243
+ FIT_DISPLAY_POSITION position_setting; //
1244
+ FIT_DISPLAY_MEASURE temperature_setting; //
1245
+ FIT_BYTE global_id[FIT_USER_PROFILE_MESG_GLOBAL_ID_COUNT]; //
1246
+ } FIT_USER_PROFILE_MESG;
1247
+
1248
+ typedef enum
1249
+ {
1250
+ FIT_USER_PROFILE_FIELD_NUM_FRIENDLY_NAME = 0,
1251
+ FIT_USER_PROFILE_FIELD_NUM_MESSAGE_INDEX = 254,
1252
+ FIT_USER_PROFILE_FIELD_NUM_WEIGHT = 4,
1253
+ FIT_USER_PROFILE_FIELD_NUM_LOCAL_ID = 22,
1254
+ FIT_USER_PROFILE_FIELD_NUM_GENDER = 1,
1255
+ FIT_USER_PROFILE_FIELD_NUM_AGE = 2,
1256
+ FIT_USER_PROFILE_FIELD_NUM_HEIGHT = 3,
1257
+ FIT_USER_PROFILE_FIELD_NUM_LANGUAGE = 5,
1258
+ FIT_USER_PROFILE_FIELD_NUM_ELEV_SETTING = 6,
1259
+ FIT_USER_PROFILE_FIELD_NUM_WEIGHT_SETTING = 7,
1260
+ FIT_USER_PROFILE_FIELD_NUM_RESTING_HEART_RATE = 8,
1261
+ FIT_USER_PROFILE_FIELD_NUM_DEFAULT_MAX_RUNNING_HEART_RATE = 9,
1262
+ FIT_USER_PROFILE_FIELD_NUM_DEFAULT_MAX_BIKING_HEART_RATE = 10,
1263
+ FIT_USER_PROFILE_FIELD_NUM_DEFAULT_MAX_HEART_RATE = 11,
1264
+ FIT_USER_PROFILE_FIELD_NUM_HR_SETTING = 12,
1265
+ FIT_USER_PROFILE_FIELD_NUM_SPEED_SETTING = 13,
1266
+ FIT_USER_PROFILE_FIELD_NUM_DIST_SETTING = 14,
1267
+ FIT_USER_PROFILE_FIELD_NUM_POWER_SETTING = 16,
1268
+ FIT_USER_PROFILE_FIELD_NUM_ACTIVITY_CLASS = 17,
1269
+ FIT_USER_PROFILE_FIELD_NUM_POSITION_SETTING = 18,
1270
+ FIT_USER_PROFILE_FIELD_NUM_TEMPERATURE_SETTING = 21,
1271
+ FIT_USER_PROFILE_FIELD_NUM_GLOBAL_ID = 23
1272
+ } FIT_USER_PROFILE_FIELD_NUM;
1273
+
1274
+ typedef enum
1275
+ {
1276
+ FIT_USER_PROFILE_MESG_FRIENDLY_NAME,
1277
+ FIT_USER_PROFILE_MESG_MESSAGE_INDEX,
1278
+ FIT_USER_PROFILE_MESG_WEIGHT,
1279
+ FIT_USER_PROFILE_MESG_LOCAL_ID,
1280
+ FIT_USER_PROFILE_MESG_GENDER,
1281
+ FIT_USER_PROFILE_MESG_AGE,
1282
+ FIT_USER_PROFILE_MESG_HEIGHT,
1283
+ FIT_USER_PROFILE_MESG_LANGUAGE,
1284
+ FIT_USER_PROFILE_MESG_ELEV_SETTING,
1285
+ FIT_USER_PROFILE_MESG_WEIGHT_SETTING,
1286
+ FIT_USER_PROFILE_MESG_RESTING_HEART_RATE,
1287
+ FIT_USER_PROFILE_MESG_DEFAULT_MAX_RUNNING_HEART_RATE,
1288
+ FIT_USER_PROFILE_MESG_DEFAULT_MAX_BIKING_HEART_RATE,
1289
+ FIT_USER_PROFILE_MESG_DEFAULT_MAX_HEART_RATE,
1290
+ FIT_USER_PROFILE_MESG_HR_SETTING,
1291
+ FIT_USER_PROFILE_MESG_SPEED_SETTING,
1292
+ FIT_USER_PROFILE_MESG_DIST_SETTING,
1293
+ FIT_USER_PROFILE_MESG_POWER_SETTING,
1294
+ FIT_USER_PROFILE_MESG_ACTIVITY_CLASS,
1295
+ FIT_USER_PROFILE_MESG_POSITION_SETTING,
1296
+ FIT_USER_PROFILE_MESG_TEMPERATURE_SETTING,
1297
+ FIT_USER_PROFILE_MESG_GLOBAL_ID,
1298
+ FIT_USER_PROFILE_MESG_FIELDS
1299
+ } FIT_USER_PROFILE_MESG_FIELD;
1300
+
1301
+ typedef struct
1302
+ {
1303
+ FIT_UINT8 reserved_1;
1304
+ FIT_UINT8 arch;
1305
+ FIT_MESG_NUM global_mesg_num;
1306
+ FIT_UINT8 num_fields;
1307
+ FIT_UINT8 fields[FIT_USER_PROFILE_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
1308
+ } FIT_USER_PROFILE_MESG_DEF;
1309
+
1310
+ // hrm_profile message
1311
+
1312
+ #define FIT_HRM_PROFILE_MESG_SIZE 7
1313
+ #define FIT_HRM_PROFILE_MESG_DEF_SIZE 20
1314
+
1315
+ typedef struct
1316
+ {
1317
+ FIT_MESSAGE_INDEX message_index; //
1318
+ FIT_UINT16Z hrm_ant_id; //
1319
+ FIT_BOOL enabled; //
1320
+ FIT_BOOL log_hrv; //
1321
+ FIT_UINT8Z hrm_ant_id_trans_type; //
1322
+ } FIT_HRM_PROFILE_MESG;
1323
+
1324
+ typedef enum
1325
+ {
1326
+ FIT_HRM_PROFILE_FIELD_NUM_MESSAGE_INDEX = 254,
1327
+ FIT_HRM_PROFILE_FIELD_NUM_HRM_ANT_ID = 1,
1328
+ FIT_HRM_PROFILE_FIELD_NUM_ENABLED = 0,
1329
+ FIT_HRM_PROFILE_FIELD_NUM_LOG_HRV = 2,
1330
+ FIT_HRM_PROFILE_FIELD_NUM_HRM_ANT_ID_TRANS_TYPE = 3
1331
+ } FIT_HRM_PROFILE_FIELD_NUM;
1332
+
1333
+ typedef enum
1334
+ {
1335
+ FIT_HRM_PROFILE_MESG_MESSAGE_INDEX,
1336
+ FIT_HRM_PROFILE_MESG_HRM_ANT_ID,
1337
+ FIT_HRM_PROFILE_MESG_ENABLED,
1338
+ FIT_HRM_PROFILE_MESG_LOG_HRV,
1339
+ FIT_HRM_PROFILE_MESG_HRM_ANT_ID_TRANS_TYPE,
1340
+ FIT_HRM_PROFILE_MESG_FIELDS
1341
+ } FIT_HRM_PROFILE_MESG_FIELD;
1342
+
1343
+ typedef struct
1344
+ {
1345
+ FIT_UINT8 reserved_1;
1346
+ FIT_UINT8 arch;
1347
+ FIT_MESG_NUM global_mesg_num;
1348
+ FIT_UINT8 num_fields;
1349
+ FIT_UINT8 fields[FIT_HRM_PROFILE_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
1350
+ } FIT_HRM_PROFILE_MESG_DEF;
1351
+
1352
+ // sdm_profile message
1353
+
1354
+ #define FIT_SDM_PROFILE_MESG_SIZE 14
1355
+ #define FIT_SDM_PROFILE_MESG_DEF_SIZE 29
1356
+
1357
+ typedef struct
1358
+ {
1359
+ FIT_UINT32 odometer; // 100 * m,
1360
+ FIT_MESSAGE_INDEX message_index; //
1361
+ FIT_UINT16Z sdm_ant_id; //
1362
+ FIT_UINT16 sdm_cal_factor; // 10 * %,
1363
+ FIT_BOOL enabled; //
1364
+ FIT_BOOL speed_source; // Use footpod for speed source instead of GPS
1365
+ FIT_UINT8Z sdm_ant_id_trans_type; //
1366
+ FIT_UINT8 odometer_rollover; // Rollover counter that can be used to extend the odometer
1367
+ } FIT_SDM_PROFILE_MESG;
1368
+
1369
+ typedef enum
1370
+ {
1371
+ FIT_SDM_PROFILE_FIELD_NUM_ODOMETER = 3,
1372
+ FIT_SDM_PROFILE_FIELD_NUM_MESSAGE_INDEX = 254,
1373
+ FIT_SDM_PROFILE_FIELD_NUM_SDM_ANT_ID = 1,
1374
+ FIT_SDM_PROFILE_FIELD_NUM_SDM_CAL_FACTOR = 2,
1375
+ FIT_SDM_PROFILE_FIELD_NUM_ENABLED = 0,
1376
+ FIT_SDM_PROFILE_FIELD_NUM_SPEED_SOURCE = 4,
1377
+ FIT_SDM_PROFILE_FIELD_NUM_SDM_ANT_ID_TRANS_TYPE = 5,
1378
+ FIT_SDM_PROFILE_FIELD_NUM_ODOMETER_ROLLOVER = 7
1379
+ } FIT_SDM_PROFILE_FIELD_NUM;
1380
+
1381
+ typedef enum
1382
+ {
1383
+ FIT_SDM_PROFILE_MESG_ODOMETER,
1384
+ FIT_SDM_PROFILE_MESG_MESSAGE_INDEX,
1385
+ FIT_SDM_PROFILE_MESG_SDM_ANT_ID,
1386
+ FIT_SDM_PROFILE_MESG_SDM_CAL_FACTOR,
1387
+ FIT_SDM_PROFILE_MESG_ENABLED,
1388
+ FIT_SDM_PROFILE_MESG_SPEED_SOURCE,
1389
+ FIT_SDM_PROFILE_MESG_SDM_ANT_ID_TRANS_TYPE,
1390
+ FIT_SDM_PROFILE_MESG_ODOMETER_ROLLOVER,
1391
+ FIT_SDM_PROFILE_MESG_FIELDS
1392
+ } FIT_SDM_PROFILE_MESG_FIELD;
1393
+
1394
+ typedef struct
1395
+ {
1396
+ FIT_UINT8 reserved_1;
1397
+ FIT_UINT8 arch;
1398
+ FIT_MESG_NUM global_mesg_num;
1399
+ FIT_UINT8 num_fields;
1400
+ FIT_UINT8 fields[FIT_SDM_PROFILE_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
1401
+ } FIT_SDM_PROFILE_MESG_DEF;
1402
+
1403
+ // bike_profile message
1404
+
1405
+ #define FIT_BIKE_PROFILE_MESG_SIZE 54
1406
+ #define FIT_BIKE_PROFILE_MESG_DEF_SIZE 86
1407
+ #define FIT_BIKE_PROFILE_MESG_NAME_COUNT 16
1408
+
1409
+ typedef struct
1410
+ {
1411
+ FIT_STRING name[FIT_BIKE_PROFILE_MESG_NAME_COUNT]; //
1412
+ FIT_UINT32 odometer; // 100 * m,
1413
+ FIT_MESSAGE_INDEX message_index; //
1414
+ FIT_UINT16Z bike_spd_ant_id; //
1415
+ FIT_UINT16Z bike_cad_ant_id; //
1416
+ FIT_UINT16Z bike_spdcad_ant_id; //
1417
+ FIT_UINT16Z bike_power_ant_id; //
1418
+ FIT_UINT16 custom_wheelsize; // 1000 * m,
1419
+ FIT_UINT16 auto_wheelsize; // 1000 * m,
1420
+ FIT_UINT16 bike_weight; // 10 * kg,
1421
+ FIT_UINT16 power_cal_factor; // 10 * %,
1422
+ FIT_SPORT sport; //
1423
+ FIT_SUB_SPORT sub_sport; //
1424
+ FIT_BOOL auto_wheel_cal; //
1425
+ FIT_BOOL auto_power_zero; //
1426
+ FIT_UINT8 id; //
1427
+ FIT_BOOL spd_enabled; //
1428
+ FIT_BOOL cad_enabled; //
1429
+ FIT_BOOL spdcad_enabled; //
1430
+ FIT_BOOL power_enabled; //
1431
+ FIT_UINT8 crank_length; // 2 * mm + -110,
1432
+ FIT_BOOL enabled; //
1433
+ FIT_UINT8Z bike_spd_ant_id_trans_type; //
1434
+ FIT_UINT8Z bike_cad_ant_id_trans_type; //
1435
+ FIT_UINT8Z bike_spdcad_ant_id_trans_type; //
1436
+ FIT_UINT8Z bike_power_ant_id_trans_type; //
1437
+ FIT_UINT8 odometer_rollover; // Rollover counter that can be used to extend the odometer
1438
+ } FIT_BIKE_PROFILE_MESG;
1439
+
1440
+ typedef enum
1441
+ {
1442
+ FIT_BIKE_PROFILE_FIELD_NUM_NAME = 0,
1443
+ FIT_BIKE_PROFILE_FIELD_NUM_ODOMETER = 3,
1444
+ FIT_BIKE_PROFILE_FIELD_NUM_MESSAGE_INDEX = 254,
1445
+ FIT_BIKE_PROFILE_FIELD_NUM_BIKE_SPD_ANT_ID = 4,
1446
+ FIT_BIKE_PROFILE_FIELD_NUM_BIKE_CAD_ANT_ID = 5,
1447
+ FIT_BIKE_PROFILE_FIELD_NUM_BIKE_SPDCAD_ANT_ID = 6,
1448
+ FIT_BIKE_PROFILE_FIELD_NUM_BIKE_POWER_ANT_ID = 7,
1449
+ FIT_BIKE_PROFILE_FIELD_NUM_CUSTOM_WHEELSIZE = 8,
1450
+ FIT_BIKE_PROFILE_FIELD_NUM_AUTO_WHEELSIZE = 9,
1451
+ FIT_BIKE_PROFILE_FIELD_NUM_BIKE_WEIGHT = 10,
1452
+ FIT_BIKE_PROFILE_FIELD_NUM_POWER_CAL_FACTOR = 11,
1453
+ FIT_BIKE_PROFILE_FIELD_NUM_SPORT = 1,
1454
+ FIT_BIKE_PROFILE_FIELD_NUM_SUB_SPORT = 2,
1455
+ FIT_BIKE_PROFILE_FIELD_NUM_AUTO_WHEEL_CAL = 12,
1456
+ FIT_BIKE_PROFILE_FIELD_NUM_AUTO_POWER_ZERO = 13,
1457
+ FIT_BIKE_PROFILE_FIELD_NUM_ID = 14,
1458
+ FIT_BIKE_PROFILE_FIELD_NUM_SPD_ENABLED = 15,
1459
+ FIT_BIKE_PROFILE_FIELD_NUM_CAD_ENABLED = 16,
1460
+ FIT_BIKE_PROFILE_FIELD_NUM_SPDCAD_ENABLED = 17,
1461
+ FIT_BIKE_PROFILE_FIELD_NUM_POWER_ENABLED = 18,
1462
+ FIT_BIKE_PROFILE_FIELD_NUM_CRANK_LENGTH = 19,
1463
+ FIT_BIKE_PROFILE_FIELD_NUM_ENABLED = 20,
1464
+ FIT_BIKE_PROFILE_FIELD_NUM_BIKE_SPD_ANT_ID_TRANS_TYPE = 21,
1465
+ FIT_BIKE_PROFILE_FIELD_NUM_BIKE_CAD_ANT_ID_TRANS_TYPE = 22,
1466
+ FIT_BIKE_PROFILE_FIELD_NUM_BIKE_SPDCAD_ANT_ID_TRANS_TYPE = 23,
1467
+ FIT_BIKE_PROFILE_FIELD_NUM_BIKE_POWER_ANT_ID_TRANS_TYPE = 24,
1468
+ FIT_BIKE_PROFILE_FIELD_NUM_ODOMETER_ROLLOVER = 37
1469
+ } FIT_BIKE_PROFILE_FIELD_NUM;
1470
+
1471
+ typedef enum
1472
+ {
1473
+ FIT_BIKE_PROFILE_MESG_NAME,
1474
+ FIT_BIKE_PROFILE_MESG_ODOMETER,
1475
+ FIT_BIKE_PROFILE_MESG_MESSAGE_INDEX,
1476
+ FIT_BIKE_PROFILE_MESG_BIKE_SPD_ANT_ID,
1477
+ FIT_BIKE_PROFILE_MESG_BIKE_CAD_ANT_ID,
1478
+ FIT_BIKE_PROFILE_MESG_BIKE_SPDCAD_ANT_ID,
1479
+ FIT_BIKE_PROFILE_MESG_BIKE_POWER_ANT_ID,
1480
+ FIT_BIKE_PROFILE_MESG_CUSTOM_WHEELSIZE,
1481
+ FIT_BIKE_PROFILE_MESG_AUTO_WHEELSIZE,
1482
+ FIT_BIKE_PROFILE_MESG_BIKE_WEIGHT,
1483
+ FIT_BIKE_PROFILE_MESG_POWER_CAL_FACTOR,
1484
+ FIT_BIKE_PROFILE_MESG_SPORT,
1485
+ FIT_BIKE_PROFILE_MESG_SUB_SPORT,
1486
+ FIT_BIKE_PROFILE_MESG_AUTO_WHEEL_CAL,
1487
+ FIT_BIKE_PROFILE_MESG_AUTO_POWER_ZERO,
1488
+ FIT_BIKE_PROFILE_MESG_ID,
1489
+ FIT_BIKE_PROFILE_MESG_SPD_ENABLED,
1490
+ FIT_BIKE_PROFILE_MESG_CAD_ENABLED,
1491
+ FIT_BIKE_PROFILE_MESG_SPDCAD_ENABLED,
1492
+ FIT_BIKE_PROFILE_MESG_POWER_ENABLED,
1493
+ FIT_BIKE_PROFILE_MESG_CRANK_LENGTH,
1494
+ FIT_BIKE_PROFILE_MESG_ENABLED,
1495
+ FIT_BIKE_PROFILE_MESG_BIKE_SPD_ANT_ID_TRANS_TYPE,
1496
+ FIT_BIKE_PROFILE_MESG_BIKE_CAD_ANT_ID_TRANS_TYPE,
1497
+ FIT_BIKE_PROFILE_MESG_BIKE_SPDCAD_ANT_ID_TRANS_TYPE,
1498
+ FIT_BIKE_PROFILE_MESG_BIKE_POWER_ANT_ID_TRANS_TYPE,
1499
+ FIT_BIKE_PROFILE_MESG_ODOMETER_ROLLOVER,
1500
+ FIT_BIKE_PROFILE_MESG_FIELDS
1501
+ } FIT_BIKE_PROFILE_MESG_FIELD;
1502
+
1503
+ typedef struct
1504
+ {
1505
+ FIT_UINT8 reserved_1;
1506
+ FIT_UINT8 arch;
1507
+ FIT_MESG_NUM global_mesg_num;
1508
+ FIT_UINT8 num_fields;
1509
+ FIT_UINT8 fields[FIT_BIKE_PROFILE_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
1510
+ } FIT_BIKE_PROFILE_MESG_DEF;
1511
+
1512
+ // zones_target message
1513
+
1514
+ #define FIT_ZONES_TARGET_MESG_SIZE 6
1515
+ #define FIT_ZONES_TARGET_MESG_DEF_SIZE 20
1516
+
1517
+ typedef struct
1518
+ {
1519
+ FIT_UINT16 functional_threshold_power; //
1520
+ FIT_UINT8 max_heart_rate; //
1521
+ FIT_UINT8 threshold_heart_rate; //
1522
+ FIT_HR_ZONE_CALC hr_calc_type; //
1523
+ FIT_PWR_ZONE_CALC pwr_calc_type; //
1524
+ } FIT_ZONES_TARGET_MESG;
1525
+
1526
+ typedef enum
1527
+ {
1528
+ FIT_ZONES_TARGET_FIELD_NUM_FUNCTIONAL_THRESHOLD_POWER = 3,
1529
+ FIT_ZONES_TARGET_FIELD_NUM_MAX_HEART_RATE = 1,
1530
+ FIT_ZONES_TARGET_FIELD_NUM_THRESHOLD_HEART_RATE = 2,
1531
+ FIT_ZONES_TARGET_FIELD_NUM_HR_CALC_TYPE = 5,
1532
+ FIT_ZONES_TARGET_FIELD_NUM_PWR_CALC_TYPE = 7
1533
+ } FIT_ZONES_TARGET_FIELD_NUM;
1534
+
1535
+ typedef enum
1536
+ {
1537
+ FIT_ZONES_TARGET_MESG_FUNCTIONAL_THRESHOLD_POWER,
1538
+ FIT_ZONES_TARGET_MESG_MAX_HEART_RATE,
1539
+ FIT_ZONES_TARGET_MESG_THRESHOLD_HEART_RATE,
1540
+ FIT_ZONES_TARGET_MESG_HR_CALC_TYPE,
1541
+ FIT_ZONES_TARGET_MESG_PWR_CALC_TYPE,
1542
+ FIT_ZONES_TARGET_MESG_FIELDS
1543
+ } FIT_ZONES_TARGET_MESG_FIELD;
1544
+
1545
+ typedef struct
1546
+ {
1547
+ FIT_UINT8 reserved_1;
1548
+ FIT_UINT8 arch;
1549
+ FIT_MESG_NUM global_mesg_num;
1550
+ FIT_UINT8 num_fields;
1551
+ FIT_UINT8 fields[FIT_ZONES_TARGET_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
1552
+ } FIT_ZONES_TARGET_MESG_DEF;
1553
+
1554
+ // sport message
1555
+
1556
+ #define FIT_SPORT_MESG_SIZE 18
1557
+ #define FIT_SPORT_MESG_DEF_SIZE 14
1558
+ #define FIT_SPORT_MESG_NAME_COUNT 16
1559
+
1560
+ typedef struct
1561
+ {
1562
+ FIT_STRING name[FIT_SPORT_MESG_NAME_COUNT]; //
1563
+ FIT_SPORT sport; //
1564
+ FIT_SUB_SPORT sub_sport; //
1565
+ } FIT_SPORT_MESG;
1566
+
1567
+ typedef enum
1568
+ {
1569
+ FIT_SPORT_FIELD_NUM_NAME = 3,
1570
+ FIT_SPORT_FIELD_NUM_SPORT = 0,
1571
+ FIT_SPORT_FIELD_NUM_SUB_SPORT = 1
1572
+ } FIT_SPORT_FIELD_NUM;
1573
+
1574
+ typedef enum
1575
+ {
1576
+ FIT_SPORT_MESG_NAME,
1577
+ FIT_SPORT_MESG_SPORT,
1578
+ FIT_SPORT_MESG_SUB_SPORT,
1579
+ FIT_SPORT_MESG_FIELDS
1580
+ } FIT_SPORT_MESG_FIELD;
1581
+
1582
+ typedef struct
1583
+ {
1584
+ FIT_UINT8 reserved_1;
1585
+ FIT_UINT8 arch;
1586
+ FIT_MESG_NUM global_mesg_num;
1587
+ FIT_UINT8 num_fields;
1588
+ FIT_UINT8 fields[FIT_SPORT_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
1589
+ } FIT_SPORT_MESG_DEF;
1590
+
1591
+ // hr_zone message
1592
+
1593
+ #define FIT_HR_ZONE_MESG_SIZE 19
1594
+ #define FIT_HR_ZONE_MESG_DEF_SIZE 14
1595
+ #define FIT_HR_ZONE_MESG_NAME_COUNT 16
1596
+
1597
+ typedef struct
1598
+ {
1599
+ FIT_STRING name[FIT_HR_ZONE_MESG_NAME_COUNT]; //
1600
+ FIT_MESSAGE_INDEX message_index; //
1601
+ FIT_UINT8 high_bpm; // bpm,
1602
+ } FIT_HR_ZONE_MESG;
1603
+
1604
+ typedef enum
1605
+ {
1606
+ FIT_HR_ZONE_FIELD_NUM_NAME = 2,
1607
+ FIT_HR_ZONE_FIELD_NUM_MESSAGE_INDEX = 254,
1608
+ FIT_HR_ZONE_FIELD_NUM_HIGH_BPM = 1
1609
+ } FIT_HR_ZONE_FIELD_NUM;
1610
+
1611
+ typedef enum
1612
+ {
1613
+ FIT_HR_ZONE_MESG_NAME,
1614
+ FIT_HR_ZONE_MESG_MESSAGE_INDEX,
1615
+ FIT_HR_ZONE_MESG_HIGH_BPM,
1616
+ FIT_HR_ZONE_MESG_FIELDS
1617
+ } FIT_HR_ZONE_MESG_FIELD;
1618
+
1619
+ typedef struct
1620
+ {
1621
+ FIT_UINT8 reserved_1;
1622
+ FIT_UINT8 arch;
1623
+ FIT_MESG_NUM global_mesg_num;
1624
+ FIT_UINT8 num_fields;
1625
+ FIT_UINT8 fields[FIT_HR_ZONE_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
1626
+ } FIT_HR_ZONE_MESG_DEF;
1627
+
1628
+ // speed_zone message
1629
+
1630
+ #define FIT_SPEED_ZONE_MESG_SIZE 20
1631
+ #define FIT_SPEED_ZONE_MESG_DEF_SIZE 14
1632
+ #define FIT_SPEED_ZONE_MESG_NAME_COUNT 16
1633
+
1634
+ typedef struct
1635
+ {
1636
+ FIT_STRING name[FIT_SPEED_ZONE_MESG_NAME_COUNT]; //
1637
+ FIT_MESSAGE_INDEX message_index; //
1638
+ FIT_UINT16 high_value; // 1000 * m/s,
1639
+ } FIT_SPEED_ZONE_MESG;
1640
+
1641
+ typedef enum
1642
+ {
1643
+ FIT_SPEED_ZONE_FIELD_NUM_NAME = 1,
1644
+ FIT_SPEED_ZONE_FIELD_NUM_MESSAGE_INDEX = 254,
1645
+ FIT_SPEED_ZONE_FIELD_NUM_HIGH_VALUE = 0
1646
+ } FIT_SPEED_ZONE_FIELD_NUM;
1647
+
1648
+ typedef enum
1649
+ {
1650
+ FIT_SPEED_ZONE_MESG_NAME,
1651
+ FIT_SPEED_ZONE_MESG_MESSAGE_INDEX,
1652
+ FIT_SPEED_ZONE_MESG_HIGH_VALUE,
1653
+ FIT_SPEED_ZONE_MESG_FIELDS
1654
+ } FIT_SPEED_ZONE_MESG_FIELD;
1655
+
1656
+ typedef struct
1657
+ {
1658
+ FIT_UINT8 reserved_1;
1659
+ FIT_UINT8 arch;
1660
+ FIT_MESG_NUM global_mesg_num;
1661
+ FIT_UINT8 num_fields;
1662
+ FIT_UINT8 fields[FIT_SPEED_ZONE_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
1663
+ } FIT_SPEED_ZONE_MESG_DEF;
1664
+
1665
+ // cadence_zone message
1666
+
1667
+ #define FIT_CADENCE_ZONE_MESG_SIZE 19
1668
+ #define FIT_CADENCE_ZONE_MESG_DEF_SIZE 14
1669
+ #define FIT_CADENCE_ZONE_MESG_NAME_COUNT 16
1670
+
1671
+ typedef struct
1672
+ {
1673
+ FIT_STRING name[FIT_CADENCE_ZONE_MESG_NAME_COUNT]; //
1674
+ FIT_MESSAGE_INDEX message_index; //
1675
+ FIT_UINT8 high_value; // rpm,
1676
+ } FIT_CADENCE_ZONE_MESG;
1677
+
1678
+ typedef enum
1679
+ {
1680
+ FIT_CADENCE_ZONE_FIELD_NUM_NAME = 1,
1681
+ FIT_CADENCE_ZONE_FIELD_NUM_MESSAGE_INDEX = 254,
1682
+ FIT_CADENCE_ZONE_FIELD_NUM_HIGH_VALUE = 0
1683
+ } FIT_CADENCE_ZONE_FIELD_NUM;
1684
+
1685
+ typedef enum
1686
+ {
1687
+ FIT_CADENCE_ZONE_MESG_NAME,
1688
+ FIT_CADENCE_ZONE_MESG_MESSAGE_INDEX,
1689
+ FIT_CADENCE_ZONE_MESG_HIGH_VALUE,
1690
+ FIT_CADENCE_ZONE_MESG_FIELDS
1691
+ } FIT_CADENCE_ZONE_MESG_FIELD;
1692
+
1693
+ typedef struct
1694
+ {
1695
+ FIT_UINT8 reserved_1;
1696
+ FIT_UINT8 arch;
1697
+ FIT_MESG_NUM global_mesg_num;
1698
+ FIT_UINT8 num_fields;
1699
+ FIT_UINT8 fields[FIT_CADENCE_ZONE_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
1700
+ } FIT_CADENCE_ZONE_MESG_DEF;
1701
+
1702
+ // power_zone message
1703
+
1704
+ #define FIT_POWER_ZONE_MESG_SIZE 20
1705
+ #define FIT_POWER_ZONE_MESG_DEF_SIZE 14
1706
+ #define FIT_POWER_ZONE_MESG_NAME_COUNT 16
1707
+
1708
+ typedef struct
1709
+ {
1710
+ FIT_STRING name[FIT_POWER_ZONE_MESG_NAME_COUNT]; //
1711
+ FIT_MESSAGE_INDEX message_index; //
1712
+ FIT_UINT16 high_value; // watts,
1713
+ } FIT_POWER_ZONE_MESG;
1714
+
1715
+ typedef enum
1716
+ {
1717
+ FIT_POWER_ZONE_FIELD_NUM_NAME = 2,
1718
+ FIT_POWER_ZONE_FIELD_NUM_MESSAGE_INDEX = 254,
1719
+ FIT_POWER_ZONE_FIELD_NUM_HIGH_VALUE = 1
1720
+ } FIT_POWER_ZONE_FIELD_NUM;
1721
+
1722
+ typedef enum
1723
+ {
1724
+ FIT_POWER_ZONE_MESG_NAME,
1725
+ FIT_POWER_ZONE_MESG_MESSAGE_INDEX,
1726
+ FIT_POWER_ZONE_MESG_HIGH_VALUE,
1727
+ FIT_POWER_ZONE_MESG_FIELDS
1728
+ } FIT_POWER_ZONE_MESG_FIELD;
1729
+
1730
+ typedef struct
1731
+ {
1732
+ FIT_UINT8 reserved_1;
1733
+ FIT_UINT8 arch;
1734
+ FIT_MESG_NUM global_mesg_num;
1735
+ FIT_UINT8 num_fields;
1736
+ FIT_UINT8 fields[FIT_POWER_ZONE_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
1737
+ } FIT_POWER_ZONE_MESG_DEF;
1738
+
1739
+ // met_zone message
1740
+
1741
+ #define FIT_MET_ZONE_MESG_SIZE 6
1742
+ #define FIT_MET_ZONE_MESG_DEF_SIZE 17
1743
+
1744
+ typedef struct
1745
+ {
1746
+ FIT_MESSAGE_INDEX message_index; //
1747
+ FIT_UINT16 calories; // 10 * kcal / min,
1748
+ FIT_UINT8 high_bpm; //
1749
+ FIT_UINT8 fat_calories; // 10 * kcal / min,
1750
+ } FIT_MET_ZONE_MESG;
1751
+
1752
+ typedef enum
1753
+ {
1754
+ FIT_MET_ZONE_FIELD_NUM_MESSAGE_INDEX = 254,
1755
+ FIT_MET_ZONE_FIELD_NUM_CALORIES = 2,
1756
+ FIT_MET_ZONE_FIELD_NUM_HIGH_BPM = 1,
1757
+ FIT_MET_ZONE_FIELD_NUM_FAT_CALORIES = 3
1758
+ } FIT_MET_ZONE_FIELD_NUM;
1759
+
1760
+ typedef enum
1761
+ {
1762
+ FIT_MET_ZONE_MESG_MESSAGE_INDEX,
1763
+ FIT_MET_ZONE_MESG_CALORIES,
1764
+ FIT_MET_ZONE_MESG_HIGH_BPM,
1765
+ FIT_MET_ZONE_MESG_FAT_CALORIES,
1766
+ FIT_MET_ZONE_MESG_FIELDS
1767
+ } FIT_MET_ZONE_MESG_FIELD;
1768
+
1769
+ typedef struct
1770
+ {
1771
+ FIT_UINT8 reserved_1;
1772
+ FIT_UINT8 arch;
1773
+ FIT_MESG_NUM global_mesg_num;
1774
+ FIT_UINT8 num_fields;
1775
+ FIT_UINT8 fields[FIT_MET_ZONE_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
1776
+ } FIT_MET_ZONE_MESG_DEF;
1777
+
1778
+ // goal message
1779
+
1780
+ #define FIT_GOAL_MESG_SIZE 26
1781
+ #define FIT_GOAL_MESG_DEF_SIZE 41
1782
+
1783
+ typedef struct
1784
+ {
1785
+ FIT_DATE_TIME start_date; //
1786
+ FIT_DATE_TIME end_date; //
1787
+ FIT_UINT32 value; //
1788
+ FIT_UINT32 target_value; //
1789
+ FIT_MESSAGE_INDEX message_index; //
1790
+ FIT_UINT16 recurrence_value; //
1791
+ FIT_SPORT sport; //
1792
+ FIT_SUB_SPORT sub_sport; //
1793
+ FIT_GOAL type; //
1794
+ FIT_BOOL repeat; //
1795
+ FIT_GOAL_RECURRENCE recurrence; //
1796
+ FIT_BOOL enabled; //
1797
+ } FIT_GOAL_MESG;
1798
+
1799
+ typedef enum
1800
+ {
1801
+ FIT_GOAL_FIELD_NUM_START_DATE = 2,
1802
+ FIT_GOAL_FIELD_NUM_END_DATE = 3,
1803
+ FIT_GOAL_FIELD_NUM_VALUE = 5,
1804
+ FIT_GOAL_FIELD_NUM_TARGET_VALUE = 7,
1805
+ FIT_GOAL_FIELD_NUM_MESSAGE_INDEX = 254,
1806
+ FIT_GOAL_FIELD_NUM_RECURRENCE_VALUE = 9,
1807
+ FIT_GOAL_FIELD_NUM_SPORT = 0,
1808
+ FIT_GOAL_FIELD_NUM_SUB_SPORT = 1,
1809
+ FIT_GOAL_FIELD_NUM_TYPE = 4,
1810
+ FIT_GOAL_FIELD_NUM_REPEAT = 6,
1811
+ FIT_GOAL_FIELD_NUM_RECURRENCE = 8,
1812
+ FIT_GOAL_FIELD_NUM_ENABLED = 10
1813
+ } FIT_GOAL_FIELD_NUM;
1814
+
1815
+ typedef enum
1816
+ {
1817
+ FIT_GOAL_MESG_START_DATE,
1818
+ FIT_GOAL_MESG_END_DATE,
1819
+ FIT_GOAL_MESG_VALUE,
1820
+ FIT_GOAL_MESG_TARGET_VALUE,
1821
+ FIT_GOAL_MESG_MESSAGE_INDEX,
1822
+ FIT_GOAL_MESG_RECURRENCE_VALUE,
1823
+ FIT_GOAL_MESG_SPORT,
1824
+ FIT_GOAL_MESG_SUB_SPORT,
1825
+ FIT_GOAL_MESG_TYPE,
1826
+ FIT_GOAL_MESG_REPEAT,
1827
+ FIT_GOAL_MESG_RECURRENCE,
1828
+ FIT_GOAL_MESG_ENABLED,
1829
+ FIT_GOAL_MESG_FIELDS
1830
+ } FIT_GOAL_MESG_FIELD;
1831
+
1832
+ typedef struct
1833
+ {
1834
+ FIT_UINT8 reserved_1;
1835
+ FIT_UINT8 arch;
1836
+ FIT_MESG_NUM global_mesg_num;
1837
+ FIT_UINT8 num_fields;
1838
+ FIT_UINT8 fields[FIT_GOAL_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
1839
+ } FIT_GOAL_MESG_DEF;
1840
+
1841
+ // activity message
1842
+
1843
+ #define FIT_ACTIVITY_MESG_SIZE 18
1844
+ #define FIT_ACTIVITY_MESG_DEF_SIZE 29
1845
+
1846
+ typedef struct
1847
+ {
1848
+ FIT_DATE_TIME timestamp; //
1849
+ FIT_UINT32 total_timer_time; // 1000 * s,Exclude pauses
1850
+ FIT_LOCAL_DATE_TIME local_timestamp; // timestamp epoch expressed in local time, used to convert activity timestamps to local time
1851
+ FIT_UINT16 num_sessions; //
1852
+ FIT_ACTIVITY type; //
1853
+ FIT_EVENT event; //
1854
+ FIT_EVENT_TYPE event_type; //
1855
+ FIT_UINT8 event_group; //
1856
+ } FIT_ACTIVITY_MESG;
1857
+
1858
+ typedef enum
1859
+ {
1860
+ FIT_ACTIVITY_FIELD_NUM_TIMESTAMP = 253,
1861
+ FIT_ACTIVITY_FIELD_NUM_TOTAL_TIMER_TIME = 0,
1862
+ FIT_ACTIVITY_FIELD_NUM_LOCAL_TIMESTAMP = 5,
1863
+ FIT_ACTIVITY_FIELD_NUM_NUM_SESSIONS = 1,
1864
+ FIT_ACTIVITY_FIELD_NUM_TYPE = 2,
1865
+ FIT_ACTIVITY_FIELD_NUM_EVENT = 3,
1866
+ FIT_ACTIVITY_FIELD_NUM_EVENT_TYPE = 4,
1867
+ FIT_ACTIVITY_FIELD_NUM_EVENT_GROUP = 6
1868
+ } FIT_ACTIVITY_FIELD_NUM;
1869
+
1870
+ typedef enum
1871
+ {
1872
+ FIT_ACTIVITY_MESG_TIMESTAMP,
1873
+ FIT_ACTIVITY_MESG_TOTAL_TIMER_TIME,
1874
+ FIT_ACTIVITY_MESG_LOCAL_TIMESTAMP,
1875
+ FIT_ACTIVITY_MESG_NUM_SESSIONS,
1876
+ FIT_ACTIVITY_MESG_TYPE,
1877
+ FIT_ACTIVITY_MESG_EVENT,
1878
+ FIT_ACTIVITY_MESG_EVENT_TYPE,
1879
+ FIT_ACTIVITY_MESG_EVENT_GROUP,
1880
+ FIT_ACTIVITY_MESG_FIELDS
1881
+ } FIT_ACTIVITY_MESG_FIELD;
1882
+
1883
+ typedef struct
1884
+ {
1885
+ FIT_UINT8 reserved_1;
1886
+ FIT_UINT8 arch;
1887
+ FIT_MESG_NUM global_mesg_num;
1888
+ FIT_UINT8 num_fields;
1889
+ FIT_UINT8 fields[FIT_ACTIVITY_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
1890
+ } FIT_ACTIVITY_MESG_DEF;
1891
+
1892
+ // session message
1893
+
1894
+ #define FIT_SESSION_MESG_SIZE 172
1895
+ #define FIT_SESSION_MESG_DEF_SIZE 230
1896
+ #define FIT_SESSION_MESG_TIME_IN_HR_ZONE_COUNT 1
1897
+ #define FIT_SESSION_MESG_TIME_IN_SPEED_ZONE_COUNT 1
1898
+ #define FIT_SESSION_MESG_TIME_IN_CADENCE_ZONE_COUNT 1
1899
+ #define FIT_SESSION_MESG_TIME_IN_POWER_ZONE_COUNT 1
1900
+ #define FIT_SESSION_MESG_STROKE_COUNT_COUNT 1
1901
+ #define FIT_SESSION_MESG_ZONE_COUNT_COUNT 1
1902
+ #define FIT_SESSION_MESG_OPPONENT_NAME_COUNT 1
1903
+
1904
+ typedef struct
1905
+ {
1906
+ FIT_DATE_TIME timestamp; // s,Sesson end time.
1907
+ FIT_DATE_TIME start_time; //
1908
+ FIT_SINT32 start_position_lat; // semicircles,
1909
+ FIT_SINT32 start_position_long; // semicircles,
1910
+ FIT_UINT32 total_elapsed_time; // 1000 * s,Time (includes pauses)
1911
+ FIT_UINT32 total_timer_time; // 1000 * s,Timer Time (excludes pauses)
1912
+ FIT_UINT32 total_distance; // 100 * m,
1913
+ FIT_UINT32 total_cycles; // cycles,
1914
+ FIT_SINT32 nec_lat; // semicircles,
1915
+ FIT_SINT32 nec_long; // semicircles,
1916
+ FIT_SINT32 swc_lat; // semicircles,
1917
+ FIT_SINT32 swc_long; // semicircles,
1918
+ FIT_UINT32 avg_stroke_count; // 10 * strokes/lap,
1919
+ FIT_UINT32 total_work; // J,
1920
+ FIT_UINT32 total_moving_time; // 1000 * s,
1921
+ FIT_UINT32 time_in_hr_zone[FIT_SESSION_MESG_TIME_IN_HR_ZONE_COUNT]; // 1000 * s,
1922
+ FIT_UINT32 time_in_speed_zone[FIT_SESSION_MESG_TIME_IN_SPEED_ZONE_COUNT]; // 1000 * s,
1923
+ FIT_UINT32 time_in_cadence_zone[FIT_SESSION_MESG_TIME_IN_CADENCE_ZONE_COUNT]; // 1000 * s,
1924
+ FIT_UINT32 time_in_power_zone[FIT_SESSION_MESG_TIME_IN_POWER_ZONE_COUNT]; // 1000 * s,
1925
+ FIT_UINT32 avg_lap_time; // 1000 * s,
1926
+ FIT_MESSAGE_INDEX message_index; // Selected bit is set for the current session.
1927
+ FIT_UINT16 total_calories; // kcal,
1928
+ FIT_UINT16 total_fat_calories; // kcal,
1929
+ FIT_UINT16 avg_speed; // 1000 * m/s,total_distance / total_timer_time
1930
+ FIT_UINT16 max_speed; // 1000 * m/s,
1931
+ FIT_UINT16 avg_power; // watts,total_power / total_timer_time if non_zero_avg_power otherwise total_power / total_elapsed_time
1932
+ FIT_UINT16 max_power; // watts,
1933
+ FIT_UINT16 total_ascent; // m,
1934
+ FIT_UINT16 total_descent; // m,
1935
+ FIT_UINT16 first_lap_index; //
1936
+ FIT_UINT16 num_laps; //
1937
+ FIT_UINT16 normalized_power; // watts,
1938
+ FIT_UINT16 training_stress_score; // 10 * tss,
1939
+ FIT_UINT16 intensity_factor; // 1000 * if,
1940
+ FIT_LEFT_RIGHT_BALANCE_100 left_right_balance; //
1941
+ FIT_UINT16 avg_stroke_distance; // 100 * m,
1942
+ FIT_UINT16 pool_length; // 100 * m,
1943
+ FIT_UINT16 num_active_lengths; // lengths,# of active lengths of swim pool
1944
+ FIT_UINT16 avg_altitude; // 5 * m + 500,
1945
+ FIT_UINT16 max_altitude; // 5 * m + 500,
1946
+ FIT_SINT16 avg_grade; // 100 * %,
1947
+ FIT_SINT16 avg_pos_grade; // 100 * %,
1948
+ FIT_SINT16 avg_neg_grade; // 100 * %,
1949
+ FIT_SINT16 max_pos_grade; // 100 * %,
1950
+ FIT_SINT16 max_neg_grade; // 100 * %,
1951
+ FIT_SINT16 avg_pos_vertical_speed; // 1000 * m/s,
1952
+ FIT_SINT16 avg_neg_vertical_speed; // 1000 * m/s,
1953
+ FIT_SINT16 max_pos_vertical_speed; // 1000 * m/s,
1954
+ FIT_SINT16 max_neg_vertical_speed; // 1000 * m/s,
1955
+ FIT_UINT16 best_lap_index; //
1956
+ FIT_UINT16 min_altitude; // 5 * m + 500,
1957
+ FIT_UINT16 player_score; //
1958
+ FIT_UINT16 opponent_score; //
1959
+ FIT_UINT16 stroke_count[FIT_SESSION_MESG_STROKE_COUNT_COUNT]; // counts,stroke_type enum used as the index
1960
+ FIT_UINT16 zone_count[FIT_SESSION_MESG_ZONE_COUNT_COUNT]; // counts,zone number used as the index
1961
+ FIT_UINT16 max_ball_speed; // 100 * m/s,
1962
+ FIT_UINT16 avg_ball_speed; // 100 * m/s,
1963
+ FIT_EVENT event; // session
1964
+ FIT_EVENT_TYPE event_type; // stop
1965
+ FIT_SPORT sport; //
1966
+ FIT_SUB_SPORT sub_sport; //
1967
+ FIT_UINT8 avg_heart_rate; // bpm,average heart rate (excludes pause time)
1968
+ FIT_UINT8 max_heart_rate; // bpm,
1969
+ FIT_UINT8 avg_cadence; // rpm,total_cycles / total_timer_time if non_zero_avg_cadence otherwise total_cycles / total_elapsed_time
1970
+ FIT_UINT8 max_cadence; // rpm,
1971
+ FIT_UINT8 total_training_effect; //
1972
+ FIT_UINT8 event_group; //
1973
+ FIT_SESSION_TRIGGER trigger; //
1974
+ FIT_SWIM_STROKE swim_stroke; // swim_stroke,
1975
+ FIT_DISPLAY_MEASURE pool_length_unit; //
1976
+ FIT_UINT8 gps_accuracy; // m,
1977
+ FIT_SINT8 avg_temperature; // C,
1978
+ FIT_SINT8 max_temperature; // C,
1979
+ FIT_UINT8 min_heart_rate; // bpm,
1980
+ FIT_STRING opponent_name[FIT_SESSION_MESG_OPPONENT_NAME_COUNT]; //
1981
+ } FIT_SESSION_MESG;
1982
+
1983
+ typedef enum
1984
+ {
1985
+ FIT_SESSION_FIELD_NUM_TIMESTAMP = 253,
1986
+ FIT_SESSION_FIELD_NUM_START_TIME = 2,
1987
+ FIT_SESSION_FIELD_NUM_START_POSITION_LAT = 3,
1988
+ FIT_SESSION_FIELD_NUM_START_POSITION_LONG = 4,
1989
+ FIT_SESSION_FIELD_NUM_TOTAL_ELAPSED_TIME = 7,
1990
+ FIT_SESSION_FIELD_NUM_TOTAL_TIMER_TIME = 8,
1991
+ FIT_SESSION_FIELD_NUM_TOTAL_DISTANCE = 9,
1992
+ FIT_SESSION_FIELD_NUM_TOTAL_CYCLES = 10,
1993
+ FIT_SESSION_FIELD_NUM_NEC_LAT = 29,
1994
+ FIT_SESSION_FIELD_NUM_NEC_LONG = 30,
1995
+ FIT_SESSION_FIELD_NUM_SWC_LAT = 31,
1996
+ FIT_SESSION_FIELD_NUM_SWC_LONG = 32,
1997
+ FIT_SESSION_FIELD_NUM_AVG_STROKE_COUNT = 41,
1998
+ FIT_SESSION_FIELD_NUM_TOTAL_WORK = 48,
1999
+ FIT_SESSION_FIELD_NUM_TOTAL_MOVING_TIME = 59,
2000
+ FIT_SESSION_FIELD_NUM_TIME_IN_HR_ZONE = 65,
2001
+ FIT_SESSION_FIELD_NUM_TIME_IN_SPEED_ZONE = 66,
2002
+ FIT_SESSION_FIELD_NUM_TIME_IN_CADENCE_ZONE = 67,
2003
+ FIT_SESSION_FIELD_NUM_TIME_IN_POWER_ZONE = 68,
2004
+ FIT_SESSION_FIELD_NUM_AVG_LAP_TIME = 69,
2005
+ FIT_SESSION_FIELD_NUM_MESSAGE_INDEX = 254,
2006
+ FIT_SESSION_FIELD_NUM_TOTAL_CALORIES = 11,
2007
+ FIT_SESSION_FIELD_NUM_TOTAL_FAT_CALORIES = 13,
2008
+ FIT_SESSION_FIELD_NUM_AVG_SPEED = 14,
2009
+ FIT_SESSION_FIELD_NUM_MAX_SPEED = 15,
2010
+ FIT_SESSION_FIELD_NUM_AVG_POWER = 20,
2011
+ FIT_SESSION_FIELD_NUM_MAX_POWER = 21,
2012
+ FIT_SESSION_FIELD_NUM_TOTAL_ASCENT = 22,
2013
+ FIT_SESSION_FIELD_NUM_TOTAL_DESCENT = 23,
2014
+ FIT_SESSION_FIELD_NUM_FIRST_LAP_INDEX = 25,
2015
+ FIT_SESSION_FIELD_NUM_NUM_LAPS = 26,
2016
+ FIT_SESSION_FIELD_NUM_NORMALIZED_POWER = 34,
2017
+ FIT_SESSION_FIELD_NUM_TRAINING_STRESS_SCORE = 35,
2018
+ FIT_SESSION_FIELD_NUM_INTENSITY_FACTOR = 36,
2019
+ FIT_SESSION_FIELD_NUM_LEFT_RIGHT_BALANCE = 37,
2020
+ FIT_SESSION_FIELD_NUM_AVG_STROKE_DISTANCE = 42,
2021
+ FIT_SESSION_FIELD_NUM_POOL_LENGTH = 44,
2022
+ FIT_SESSION_FIELD_NUM_NUM_ACTIVE_LENGTHS = 47,
2023
+ FIT_SESSION_FIELD_NUM_AVG_ALTITUDE = 49,
2024
+ FIT_SESSION_FIELD_NUM_MAX_ALTITUDE = 50,
2025
+ FIT_SESSION_FIELD_NUM_AVG_GRADE = 52,
2026
+ FIT_SESSION_FIELD_NUM_AVG_POS_GRADE = 53,
2027
+ FIT_SESSION_FIELD_NUM_AVG_NEG_GRADE = 54,
2028
+ FIT_SESSION_FIELD_NUM_MAX_POS_GRADE = 55,
2029
+ FIT_SESSION_FIELD_NUM_MAX_NEG_GRADE = 56,
2030
+ FIT_SESSION_FIELD_NUM_AVG_POS_VERTICAL_SPEED = 60,
2031
+ FIT_SESSION_FIELD_NUM_AVG_NEG_VERTICAL_SPEED = 61,
2032
+ FIT_SESSION_FIELD_NUM_MAX_POS_VERTICAL_SPEED = 62,
2033
+ FIT_SESSION_FIELD_NUM_MAX_NEG_VERTICAL_SPEED = 63,
2034
+ FIT_SESSION_FIELD_NUM_BEST_LAP_INDEX = 70,
2035
+ FIT_SESSION_FIELD_NUM_MIN_ALTITUDE = 71,
2036
+ FIT_SESSION_FIELD_NUM_PLAYER_SCORE = 82,
2037
+ FIT_SESSION_FIELD_NUM_OPPONENT_SCORE = 83,
2038
+ FIT_SESSION_FIELD_NUM_STROKE_COUNT = 85,
2039
+ FIT_SESSION_FIELD_NUM_ZONE_COUNT = 86,
2040
+ FIT_SESSION_FIELD_NUM_MAX_BALL_SPEED = 87,
2041
+ FIT_SESSION_FIELD_NUM_AVG_BALL_SPEED = 88,
2042
+ FIT_SESSION_FIELD_NUM_EVENT = 0,
2043
+ FIT_SESSION_FIELD_NUM_EVENT_TYPE = 1,
2044
+ FIT_SESSION_FIELD_NUM_SPORT = 5,
2045
+ FIT_SESSION_FIELD_NUM_SUB_SPORT = 6,
2046
+ FIT_SESSION_FIELD_NUM_AVG_HEART_RATE = 16,
2047
+ FIT_SESSION_FIELD_NUM_MAX_HEART_RATE = 17,
2048
+ FIT_SESSION_FIELD_NUM_AVG_CADENCE = 18,
2049
+ FIT_SESSION_FIELD_NUM_MAX_CADENCE = 19,
2050
+ FIT_SESSION_FIELD_NUM_TOTAL_TRAINING_EFFECT = 24,
2051
+ FIT_SESSION_FIELD_NUM_EVENT_GROUP = 27,
2052
+ FIT_SESSION_FIELD_NUM_TRIGGER = 28,
2053
+ FIT_SESSION_FIELD_NUM_SWIM_STROKE = 43,
2054
+ FIT_SESSION_FIELD_NUM_POOL_LENGTH_UNIT = 46,
2055
+ FIT_SESSION_FIELD_NUM_GPS_ACCURACY = 51,
2056
+ FIT_SESSION_FIELD_NUM_AVG_TEMPERATURE = 57,
2057
+ FIT_SESSION_FIELD_NUM_MAX_TEMPERATURE = 58,
2058
+ FIT_SESSION_FIELD_NUM_MIN_HEART_RATE = 64,
2059
+ FIT_SESSION_FIELD_NUM_OPPONENT_NAME = 84
2060
+ } FIT_SESSION_FIELD_NUM;
2061
+
2062
+ typedef enum
2063
+ {
2064
+ FIT_SESSION_MESG_TIMESTAMP,
2065
+ FIT_SESSION_MESG_START_TIME,
2066
+ FIT_SESSION_MESG_START_POSITION_LAT,
2067
+ FIT_SESSION_MESG_START_POSITION_LONG,
2068
+ FIT_SESSION_MESG_TOTAL_ELAPSED_TIME,
2069
+ FIT_SESSION_MESG_TOTAL_TIMER_TIME,
2070
+ FIT_SESSION_MESG_TOTAL_DISTANCE,
2071
+ FIT_SESSION_MESG_TOTAL_CYCLES,
2072
+ FIT_SESSION_MESG_NEC_LAT,
2073
+ FIT_SESSION_MESG_NEC_LONG,
2074
+ FIT_SESSION_MESG_SWC_LAT,
2075
+ FIT_SESSION_MESG_SWC_LONG,
2076
+ FIT_SESSION_MESG_AVG_STROKE_COUNT,
2077
+ FIT_SESSION_MESG_TOTAL_WORK,
2078
+ FIT_SESSION_MESG_TOTAL_MOVING_TIME,
2079
+ FIT_SESSION_MESG_TIME_IN_HR_ZONE,
2080
+ FIT_SESSION_MESG_TIME_IN_SPEED_ZONE,
2081
+ FIT_SESSION_MESG_TIME_IN_CADENCE_ZONE,
2082
+ FIT_SESSION_MESG_TIME_IN_POWER_ZONE,
2083
+ FIT_SESSION_MESG_AVG_LAP_TIME,
2084
+ FIT_SESSION_MESG_MESSAGE_INDEX,
2085
+ FIT_SESSION_MESG_TOTAL_CALORIES,
2086
+ FIT_SESSION_MESG_TOTAL_FAT_CALORIES,
2087
+ FIT_SESSION_MESG_AVG_SPEED,
2088
+ FIT_SESSION_MESG_MAX_SPEED,
2089
+ FIT_SESSION_MESG_AVG_POWER,
2090
+ FIT_SESSION_MESG_MAX_POWER,
2091
+ FIT_SESSION_MESG_TOTAL_ASCENT,
2092
+ FIT_SESSION_MESG_TOTAL_DESCENT,
2093
+ FIT_SESSION_MESG_FIRST_LAP_INDEX,
2094
+ FIT_SESSION_MESG_NUM_LAPS,
2095
+ FIT_SESSION_MESG_NORMALIZED_POWER,
2096
+ FIT_SESSION_MESG_TRAINING_STRESS_SCORE,
2097
+ FIT_SESSION_MESG_INTENSITY_FACTOR,
2098
+ FIT_SESSION_MESG_LEFT_RIGHT_BALANCE,
2099
+ FIT_SESSION_MESG_AVG_STROKE_DISTANCE,
2100
+ FIT_SESSION_MESG_POOL_LENGTH,
2101
+ FIT_SESSION_MESG_NUM_ACTIVE_LENGTHS,
2102
+ FIT_SESSION_MESG_AVG_ALTITUDE,
2103
+ FIT_SESSION_MESG_MAX_ALTITUDE,
2104
+ FIT_SESSION_MESG_AVG_GRADE,
2105
+ FIT_SESSION_MESG_AVG_POS_GRADE,
2106
+ FIT_SESSION_MESG_AVG_NEG_GRADE,
2107
+ FIT_SESSION_MESG_MAX_POS_GRADE,
2108
+ FIT_SESSION_MESG_MAX_NEG_GRADE,
2109
+ FIT_SESSION_MESG_AVG_POS_VERTICAL_SPEED,
2110
+ FIT_SESSION_MESG_AVG_NEG_VERTICAL_SPEED,
2111
+ FIT_SESSION_MESG_MAX_POS_VERTICAL_SPEED,
2112
+ FIT_SESSION_MESG_MAX_NEG_VERTICAL_SPEED,
2113
+ FIT_SESSION_MESG_BEST_LAP_INDEX,
2114
+ FIT_SESSION_MESG_MIN_ALTITUDE,
2115
+ FIT_SESSION_MESG_PLAYER_SCORE,
2116
+ FIT_SESSION_MESG_OPPONENT_SCORE,
2117
+ FIT_SESSION_MESG_STROKE_COUNT,
2118
+ FIT_SESSION_MESG_ZONE_COUNT,
2119
+ FIT_SESSION_MESG_MAX_BALL_SPEED,
2120
+ FIT_SESSION_MESG_AVG_BALL_SPEED,
2121
+ FIT_SESSION_MESG_EVENT,
2122
+ FIT_SESSION_MESG_EVENT_TYPE,
2123
+ FIT_SESSION_MESG_SPORT,
2124
+ FIT_SESSION_MESG_SUB_SPORT,
2125
+ FIT_SESSION_MESG_AVG_HEART_RATE,
2126
+ FIT_SESSION_MESG_MAX_HEART_RATE,
2127
+ FIT_SESSION_MESG_AVG_CADENCE,
2128
+ FIT_SESSION_MESG_MAX_CADENCE,
2129
+ FIT_SESSION_MESG_TOTAL_TRAINING_EFFECT,
2130
+ FIT_SESSION_MESG_EVENT_GROUP,
2131
+ FIT_SESSION_MESG_TRIGGER,
2132
+ FIT_SESSION_MESG_SWIM_STROKE,
2133
+ FIT_SESSION_MESG_POOL_LENGTH_UNIT,
2134
+ FIT_SESSION_MESG_GPS_ACCURACY,
2135
+ FIT_SESSION_MESG_AVG_TEMPERATURE,
2136
+ FIT_SESSION_MESG_MAX_TEMPERATURE,
2137
+ FIT_SESSION_MESG_MIN_HEART_RATE,
2138
+ FIT_SESSION_MESG_OPPONENT_NAME,
2139
+ FIT_SESSION_MESG_FIELDS
2140
+ } FIT_SESSION_MESG_FIELD;
2141
+
2142
+ typedef struct
2143
+ {
2144
+ FIT_UINT8 reserved_1;
2145
+ FIT_UINT8 arch;
2146
+ FIT_MESG_NUM global_mesg_num;
2147
+ FIT_UINT8 num_fields;
2148
+ FIT_UINT8 fields[FIT_SESSION_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
2149
+ } FIT_SESSION_MESG_DEF;
2150
+
2151
+ // lap message
2152
+
2153
+ #define FIT_LAP_MESG_SIZE 146
2154
+ #define FIT_LAP_MESG_DEF_SIZE 200
2155
+ #define FIT_LAP_MESG_TIME_IN_HR_ZONE_COUNT 1
2156
+ #define FIT_LAP_MESG_TIME_IN_SPEED_ZONE_COUNT 1
2157
+ #define FIT_LAP_MESG_TIME_IN_CADENCE_ZONE_COUNT 1
2158
+ #define FIT_LAP_MESG_TIME_IN_POWER_ZONE_COUNT 1
2159
+ #define FIT_LAP_MESG_STROKE_COUNT_COUNT 1
2160
+ #define FIT_LAP_MESG_ZONE_COUNT_COUNT 1
2161
+
2162
+ typedef struct
2163
+ {
2164
+ FIT_DATE_TIME timestamp; // s,Lap end time.
2165
+ FIT_DATE_TIME start_time; //
2166
+ FIT_SINT32 start_position_lat; // semicircles,
2167
+ FIT_SINT32 start_position_long; // semicircles,
2168
+ FIT_SINT32 end_position_lat; // semicircles,
2169
+ FIT_SINT32 end_position_long; // semicircles,
2170
+ FIT_UINT32 total_elapsed_time; // 1000 * s,Time (includes pauses)
2171
+ FIT_UINT32 total_timer_time; // 1000 * s,Timer Time (excludes pauses)
2172
+ FIT_UINT32 total_distance; // 100 * m,
2173
+ FIT_UINT32 total_cycles; // cycles,
2174
+ FIT_UINT32 total_work; // J,
2175
+ FIT_UINT32 total_moving_time; // 1000 * s,
2176
+ FIT_UINT32 time_in_hr_zone[FIT_LAP_MESG_TIME_IN_HR_ZONE_COUNT]; // 1000 * s,
2177
+ FIT_UINT32 time_in_speed_zone[FIT_LAP_MESG_TIME_IN_SPEED_ZONE_COUNT]; // 1000 * s,
2178
+ FIT_UINT32 time_in_cadence_zone[FIT_LAP_MESG_TIME_IN_CADENCE_ZONE_COUNT]; // 1000 * s,
2179
+ FIT_UINT32 time_in_power_zone[FIT_LAP_MESG_TIME_IN_POWER_ZONE_COUNT]; // 1000 * s,
2180
+ FIT_MESSAGE_INDEX message_index; //
2181
+ FIT_UINT16 total_calories; // kcal,
2182
+ FIT_UINT16 total_fat_calories; // kcal,If New Leaf
2183
+ FIT_UINT16 avg_speed; // 1000 * m/s,
2184
+ FIT_UINT16 max_speed; // 1000 * m/s,
2185
+ FIT_UINT16 avg_power; // watts,total_power / total_timer_time if non_zero_avg_power otherwise total_power / total_elapsed_time
2186
+ FIT_UINT16 max_power; // watts,
2187
+ FIT_UINT16 total_ascent; // m,
2188
+ FIT_UINT16 total_descent; // m,
2189
+ FIT_UINT16 num_lengths; // lengths,# of lengths of swim pool
2190
+ FIT_UINT16 normalized_power; // watts,
2191
+ FIT_LEFT_RIGHT_BALANCE_100 left_right_balance; //
2192
+ FIT_UINT16 first_length_index; //
2193
+ FIT_UINT16 avg_stroke_distance; // 100 * m,
2194
+ FIT_UINT16 num_active_lengths; // lengths,# of active lengths of swim pool
2195
+ FIT_UINT16 avg_altitude; // 5 * m + 500,
2196
+ FIT_UINT16 max_altitude; // 5 * m + 500,
2197
+ FIT_SINT16 avg_grade; // 100 * %,
2198
+ FIT_SINT16 avg_pos_grade; // 100 * %,
2199
+ FIT_SINT16 avg_neg_grade; // 100 * %,
2200
+ FIT_SINT16 max_pos_grade; // 100 * %,
2201
+ FIT_SINT16 max_neg_grade; // 100 * %,
2202
+ FIT_SINT16 avg_pos_vertical_speed; // 1000 * m/s,
2203
+ FIT_SINT16 avg_neg_vertical_speed; // 1000 * m/s,
2204
+ FIT_SINT16 max_pos_vertical_speed; // 1000 * m/s,
2205
+ FIT_SINT16 max_neg_vertical_speed; // 1000 * m/s,
2206
+ FIT_UINT16 repetition_num; //
2207
+ FIT_UINT16 min_altitude; // 5 * m + 500,
2208
+ FIT_MESSAGE_INDEX wkt_step_index; //
2209
+ FIT_UINT16 opponent_score; //
2210
+ FIT_UINT16 stroke_count[FIT_LAP_MESG_STROKE_COUNT_COUNT]; // counts,stroke_type enum used as the index
2211
+ FIT_UINT16 zone_count[FIT_LAP_MESG_ZONE_COUNT_COUNT]; // counts,zone number used as the index
2212
+ FIT_UINT16 player_score; //
2213
+ FIT_EVENT event; //
2214
+ FIT_EVENT_TYPE event_type; //
2215
+ FIT_UINT8 avg_heart_rate; // bpm,
2216
+ FIT_UINT8 max_heart_rate; // bpm,
2217
+ FIT_UINT8 avg_cadence; // rpm,total_cycles / total_timer_time if non_zero_avg_cadence otherwise total_cycles / total_elapsed_time
2218
+ FIT_UINT8 max_cadence; // rpm,
2219
+ FIT_INTENSITY intensity; //
2220
+ FIT_LAP_TRIGGER lap_trigger; //
2221
+ FIT_SPORT sport; //
2222
+ FIT_UINT8 event_group; //
2223
+ FIT_SWIM_STROKE swim_stroke; //
2224
+ FIT_SUB_SPORT sub_sport; //
2225
+ FIT_UINT8 gps_accuracy; // m,
2226
+ FIT_SINT8 avg_temperature; // C,
2227
+ FIT_SINT8 max_temperature; // C,
2228
+ FIT_UINT8 min_heart_rate; // bpm,
2229
+ } FIT_LAP_MESG;
2230
+
2231
+ typedef enum
2232
+ {
2233
+ FIT_LAP_FIELD_NUM_TIMESTAMP = 253,
2234
+ FIT_LAP_FIELD_NUM_START_TIME = 2,
2235
+ FIT_LAP_FIELD_NUM_START_POSITION_LAT = 3,
2236
+ FIT_LAP_FIELD_NUM_START_POSITION_LONG = 4,
2237
+ FIT_LAP_FIELD_NUM_END_POSITION_LAT = 5,
2238
+ FIT_LAP_FIELD_NUM_END_POSITION_LONG = 6,
2239
+ FIT_LAP_FIELD_NUM_TOTAL_ELAPSED_TIME = 7,
2240
+ FIT_LAP_FIELD_NUM_TOTAL_TIMER_TIME = 8,
2241
+ FIT_LAP_FIELD_NUM_TOTAL_DISTANCE = 9,
2242
+ FIT_LAP_FIELD_NUM_TOTAL_CYCLES = 10,
2243
+ FIT_LAP_FIELD_NUM_TOTAL_WORK = 41,
2244
+ FIT_LAP_FIELD_NUM_TOTAL_MOVING_TIME = 52,
2245
+ FIT_LAP_FIELD_NUM_TIME_IN_HR_ZONE = 57,
2246
+ FIT_LAP_FIELD_NUM_TIME_IN_SPEED_ZONE = 58,
2247
+ FIT_LAP_FIELD_NUM_TIME_IN_CADENCE_ZONE = 59,
2248
+ FIT_LAP_FIELD_NUM_TIME_IN_POWER_ZONE = 60,
2249
+ FIT_LAP_FIELD_NUM_MESSAGE_INDEX = 254,
2250
+ FIT_LAP_FIELD_NUM_TOTAL_CALORIES = 11,
2251
+ FIT_LAP_FIELD_NUM_TOTAL_FAT_CALORIES = 12,
2252
+ FIT_LAP_FIELD_NUM_AVG_SPEED = 13,
2253
+ FIT_LAP_FIELD_NUM_MAX_SPEED = 14,
2254
+ FIT_LAP_FIELD_NUM_AVG_POWER = 19,
2255
+ FIT_LAP_FIELD_NUM_MAX_POWER = 20,
2256
+ FIT_LAP_FIELD_NUM_TOTAL_ASCENT = 21,
2257
+ FIT_LAP_FIELD_NUM_TOTAL_DESCENT = 22,
2258
+ FIT_LAP_FIELD_NUM_NUM_LENGTHS = 32,
2259
+ FIT_LAP_FIELD_NUM_NORMALIZED_POWER = 33,
2260
+ FIT_LAP_FIELD_NUM_LEFT_RIGHT_BALANCE = 34,
2261
+ FIT_LAP_FIELD_NUM_FIRST_LENGTH_INDEX = 35,
2262
+ FIT_LAP_FIELD_NUM_AVG_STROKE_DISTANCE = 37,
2263
+ FIT_LAP_FIELD_NUM_NUM_ACTIVE_LENGTHS = 40,
2264
+ FIT_LAP_FIELD_NUM_AVG_ALTITUDE = 42,
2265
+ FIT_LAP_FIELD_NUM_MAX_ALTITUDE = 43,
2266
+ FIT_LAP_FIELD_NUM_AVG_GRADE = 45,
2267
+ FIT_LAP_FIELD_NUM_AVG_POS_GRADE = 46,
2268
+ FIT_LAP_FIELD_NUM_AVG_NEG_GRADE = 47,
2269
+ FIT_LAP_FIELD_NUM_MAX_POS_GRADE = 48,
2270
+ FIT_LAP_FIELD_NUM_MAX_NEG_GRADE = 49,
2271
+ FIT_LAP_FIELD_NUM_AVG_POS_VERTICAL_SPEED = 53,
2272
+ FIT_LAP_FIELD_NUM_AVG_NEG_VERTICAL_SPEED = 54,
2273
+ FIT_LAP_FIELD_NUM_MAX_POS_VERTICAL_SPEED = 55,
2274
+ FIT_LAP_FIELD_NUM_MAX_NEG_VERTICAL_SPEED = 56,
2275
+ FIT_LAP_FIELD_NUM_REPETITION_NUM = 61,
2276
+ FIT_LAP_FIELD_NUM_MIN_ALTITUDE = 62,
2277
+ FIT_LAP_FIELD_NUM_WKT_STEP_INDEX = 71,
2278
+ FIT_LAP_FIELD_NUM_OPPONENT_SCORE = 74,
2279
+ FIT_LAP_FIELD_NUM_STROKE_COUNT = 75,
2280
+ FIT_LAP_FIELD_NUM_ZONE_COUNT = 76,
2281
+ FIT_LAP_FIELD_NUM_PLAYER_SCORE = 83,
2282
+ FIT_LAP_FIELD_NUM_EVENT = 0,
2283
+ FIT_LAP_FIELD_NUM_EVENT_TYPE = 1,
2284
+ FIT_LAP_FIELD_NUM_AVG_HEART_RATE = 15,
2285
+ FIT_LAP_FIELD_NUM_MAX_HEART_RATE = 16,
2286
+ FIT_LAP_FIELD_NUM_AVG_CADENCE = 17,
2287
+ FIT_LAP_FIELD_NUM_MAX_CADENCE = 18,
2288
+ FIT_LAP_FIELD_NUM_INTENSITY = 23,
2289
+ FIT_LAP_FIELD_NUM_LAP_TRIGGER = 24,
2290
+ FIT_LAP_FIELD_NUM_SPORT = 25,
2291
+ FIT_LAP_FIELD_NUM_EVENT_GROUP = 26,
2292
+ FIT_LAP_FIELD_NUM_SWIM_STROKE = 38,
2293
+ FIT_LAP_FIELD_NUM_SUB_SPORT = 39,
2294
+ FIT_LAP_FIELD_NUM_GPS_ACCURACY = 44,
2295
+ FIT_LAP_FIELD_NUM_AVG_TEMPERATURE = 50,
2296
+ FIT_LAP_FIELD_NUM_MAX_TEMPERATURE = 51,
2297
+ FIT_LAP_FIELD_NUM_MIN_HEART_RATE = 63
2298
+ } FIT_LAP_FIELD_NUM;
2299
+
2300
+ typedef enum
2301
+ {
2302
+ FIT_LAP_MESG_TIMESTAMP,
2303
+ FIT_LAP_MESG_START_TIME,
2304
+ FIT_LAP_MESG_START_POSITION_LAT,
2305
+ FIT_LAP_MESG_START_POSITION_LONG,
2306
+ FIT_LAP_MESG_END_POSITION_LAT,
2307
+ FIT_LAP_MESG_END_POSITION_LONG,
2308
+ FIT_LAP_MESG_TOTAL_ELAPSED_TIME,
2309
+ FIT_LAP_MESG_TOTAL_TIMER_TIME,
2310
+ FIT_LAP_MESG_TOTAL_DISTANCE,
2311
+ FIT_LAP_MESG_TOTAL_CYCLES,
2312
+ FIT_LAP_MESG_TOTAL_WORK,
2313
+ FIT_LAP_MESG_TOTAL_MOVING_TIME,
2314
+ FIT_LAP_MESG_TIME_IN_HR_ZONE,
2315
+ FIT_LAP_MESG_TIME_IN_SPEED_ZONE,
2316
+ FIT_LAP_MESG_TIME_IN_CADENCE_ZONE,
2317
+ FIT_LAP_MESG_TIME_IN_POWER_ZONE,
2318
+ FIT_LAP_MESG_MESSAGE_INDEX,
2319
+ FIT_LAP_MESG_TOTAL_CALORIES,
2320
+ FIT_LAP_MESG_TOTAL_FAT_CALORIES,
2321
+ FIT_LAP_MESG_AVG_SPEED,
2322
+ FIT_LAP_MESG_MAX_SPEED,
2323
+ FIT_LAP_MESG_AVG_POWER,
2324
+ FIT_LAP_MESG_MAX_POWER,
2325
+ FIT_LAP_MESG_TOTAL_ASCENT,
2326
+ FIT_LAP_MESG_TOTAL_DESCENT,
2327
+ FIT_LAP_MESG_NUM_LENGTHS,
2328
+ FIT_LAP_MESG_NORMALIZED_POWER,
2329
+ FIT_LAP_MESG_LEFT_RIGHT_BALANCE,
2330
+ FIT_LAP_MESG_FIRST_LENGTH_INDEX,
2331
+ FIT_LAP_MESG_AVG_STROKE_DISTANCE,
2332
+ FIT_LAP_MESG_NUM_ACTIVE_LENGTHS,
2333
+ FIT_LAP_MESG_AVG_ALTITUDE,
2334
+ FIT_LAP_MESG_MAX_ALTITUDE,
2335
+ FIT_LAP_MESG_AVG_GRADE,
2336
+ FIT_LAP_MESG_AVG_POS_GRADE,
2337
+ FIT_LAP_MESG_AVG_NEG_GRADE,
2338
+ FIT_LAP_MESG_MAX_POS_GRADE,
2339
+ FIT_LAP_MESG_MAX_NEG_GRADE,
2340
+ FIT_LAP_MESG_AVG_POS_VERTICAL_SPEED,
2341
+ FIT_LAP_MESG_AVG_NEG_VERTICAL_SPEED,
2342
+ FIT_LAP_MESG_MAX_POS_VERTICAL_SPEED,
2343
+ FIT_LAP_MESG_MAX_NEG_VERTICAL_SPEED,
2344
+ FIT_LAP_MESG_REPETITION_NUM,
2345
+ FIT_LAP_MESG_MIN_ALTITUDE,
2346
+ FIT_LAP_MESG_WKT_STEP_INDEX,
2347
+ FIT_LAP_MESG_OPPONENT_SCORE,
2348
+ FIT_LAP_MESG_STROKE_COUNT,
2349
+ FIT_LAP_MESG_ZONE_COUNT,
2350
+ FIT_LAP_MESG_PLAYER_SCORE,
2351
+ FIT_LAP_MESG_EVENT,
2352
+ FIT_LAP_MESG_EVENT_TYPE,
2353
+ FIT_LAP_MESG_AVG_HEART_RATE,
2354
+ FIT_LAP_MESG_MAX_HEART_RATE,
2355
+ FIT_LAP_MESG_AVG_CADENCE,
2356
+ FIT_LAP_MESG_MAX_CADENCE,
2357
+ FIT_LAP_MESG_INTENSITY,
2358
+ FIT_LAP_MESG_LAP_TRIGGER,
2359
+ FIT_LAP_MESG_SPORT,
2360
+ FIT_LAP_MESG_EVENT_GROUP,
2361
+ FIT_LAP_MESG_SWIM_STROKE,
2362
+ FIT_LAP_MESG_SUB_SPORT,
2363
+ FIT_LAP_MESG_GPS_ACCURACY,
2364
+ FIT_LAP_MESG_AVG_TEMPERATURE,
2365
+ FIT_LAP_MESG_MAX_TEMPERATURE,
2366
+ FIT_LAP_MESG_MIN_HEART_RATE,
2367
+ FIT_LAP_MESG_FIELDS
2368
+ } FIT_LAP_MESG_FIELD;
2369
+
2370
+ typedef struct
2371
+ {
2372
+ FIT_UINT8 reserved_1;
2373
+ FIT_UINT8 arch;
2374
+ FIT_MESG_NUM global_mesg_num;
2375
+ FIT_UINT8 num_fields;
2376
+ FIT_UINT8 fields[FIT_LAP_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
2377
+ } FIT_LAP_MESG_DEF;
2378
+
2379
+ // length message
2380
+
2381
+ #define FIT_LENGTH_MESG_SIZE 38
2382
+ #define FIT_LENGTH_MESG_DEF_SIZE 59
2383
+ #define FIT_LENGTH_MESG_STROKE_COUNT_COUNT 1
2384
+ #define FIT_LENGTH_MESG_ZONE_COUNT_COUNT 1
2385
+
2386
+ typedef struct
2387
+ {
2388
+ FIT_DATE_TIME timestamp; //
2389
+ FIT_DATE_TIME start_time; //
2390
+ FIT_UINT32 total_elapsed_time; // 1000 * s,
2391
+ FIT_UINT32 total_timer_time; // 1000 * s,
2392
+ FIT_MESSAGE_INDEX message_index; //
2393
+ FIT_UINT16 total_strokes; // strokes,
2394
+ FIT_UINT16 avg_speed; // 1000 * m/s,
2395
+ FIT_UINT16 total_calories; // kcal,
2396
+ FIT_UINT16 player_score; //
2397
+ FIT_UINT16 opponent_score; //
2398
+ FIT_UINT16 stroke_count[FIT_LENGTH_MESG_STROKE_COUNT_COUNT]; // counts,stroke_type enum used as the index
2399
+ FIT_UINT16 zone_count[FIT_LENGTH_MESG_ZONE_COUNT_COUNT]; // counts,zone number used as the index
2400
+ FIT_EVENT event; //
2401
+ FIT_EVENT_TYPE event_type; //
2402
+ FIT_SWIM_STROKE swim_stroke; // swim_stroke,
2403
+ FIT_UINT8 avg_swimming_cadence; // strokes/min,
2404
+ FIT_UINT8 event_group; //
2405
+ FIT_LENGTH_TYPE length_type; //
2406
+ } FIT_LENGTH_MESG;
2407
+
2408
+ typedef enum
2409
+ {
2410
+ FIT_LENGTH_FIELD_NUM_TIMESTAMP = 253,
2411
+ FIT_LENGTH_FIELD_NUM_START_TIME = 2,
2412
+ FIT_LENGTH_FIELD_NUM_TOTAL_ELAPSED_TIME = 3,
2413
+ FIT_LENGTH_FIELD_NUM_TOTAL_TIMER_TIME = 4,
2414
+ FIT_LENGTH_FIELD_NUM_MESSAGE_INDEX = 254,
2415
+ FIT_LENGTH_FIELD_NUM_TOTAL_STROKES = 5,
2416
+ FIT_LENGTH_FIELD_NUM_AVG_SPEED = 6,
2417
+ FIT_LENGTH_FIELD_NUM_TOTAL_CALORIES = 11,
2418
+ FIT_LENGTH_FIELD_NUM_PLAYER_SCORE = 18,
2419
+ FIT_LENGTH_FIELD_NUM_OPPONENT_SCORE = 19,
2420
+ FIT_LENGTH_FIELD_NUM_STROKE_COUNT = 20,
2421
+ FIT_LENGTH_FIELD_NUM_ZONE_COUNT = 21,
2422
+ FIT_LENGTH_FIELD_NUM_EVENT = 0,
2423
+ FIT_LENGTH_FIELD_NUM_EVENT_TYPE = 1,
2424
+ FIT_LENGTH_FIELD_NUM_SWIM_STROKE = 7,
2425
+ FIT_LENGTH_FIELD_NUM_AVG_SWIMMING_CADENCE = 9,
2426
+ FIT_LENGTH_FIELD_NUM_EVENT_GROUP = 10,
2427
+ FIT_LENGTH_FIELD_NUM_LENGTH_TYPE = 12
2428
+ } FIT_LENGTH_FIELD_NUM;
2429
+
2430
+ typedef enum
2431
+ {
2432
+ FIT_LENGTH_MESG_TIMESTAMP,
2433
+ FIT_LENGTH_MESG_START_TIME,
2434
+ FIT_LENGTH_MESG_TOTAL_ELAPSED_TIME,
2435
+ FIT_LENGTH_MESG_TOTAL_TIMER_TIME,
2436
+ FIT_LENGTH_MESG_MESSAGE_INDEX,
2437
+ FIT_LENGTH_MESG_TOTAL_STROKES,
2438
+ FIT_LENGTH_MESG_AVG_SPEED,
2439
+ FIT_LENGTH_MESG_TOTAL_CALORIES,
2440
+ FIT_LENGTH_MESG_PLAYER_SCORE,
2441
+ FIT_LENGTH_MESG_OPPONENT_SCORE,
2442
+ FIT_LENGTH_MESG_STROKE_COUNT,
2443
+ FIT_LENGTH_MESG_ZONE_COUNT,
2444
+ FIT_LENGTH_MESG_EVENT,
2445
+ FIT_LENGTH_MESG_EVENT_TYPE,
2446
+ FIT_LENGTH_MESG_SWIM_STROKE,
2447
+ FIT_LENGTH_MESG_AVG_SWIMMING_CADENCE,
2448
+ FIT_LENGTH_MESG_EVENT_GROUP,
2449
+ FIT_LENGTH_MESG_LENGTH_TYPE,
2450
+ FIT_LENGTH_MESG_FIELDS
2451
+ } FIT_LENGTH_MESG_FIELD;
2452
+
2453
+ typedef struct
2454
+ {
2455
+ FIT_UINT8 reserved_1;
2456
+ FIT_UINT8 arch;
2457
+ FIT_MESG_NUM global_mesg_num;
2458
+ FIT_UINT8 num_fields;
2459
+ FIT_UINT8 fields[FIT_LENGTH_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
2460
+ } FIT_LENGTH_MESG_DEF;
2461
+
2462
+ // record message
2463
+
2464
+ #define FIT_RECORD_MESG_SIZE 70
2465
+ #define FIT_RECORD_MESG_DEF_SIZE 107
2466
+ #define FIT_RECORD_MESG_COMPRESSED_SPEED_DISTANCE_COUNT 3
2467
+ #define FIT_RECORD_MESG_SPEED_1S_COUNT 5
2468
+
2469
+ typedef struct
2470
+ {
2471
+ FIT_DATE_TIME timestamp; // s,
2472
+ FIT_SINT32 position_lat; // semicircles,
2473
+ FIT_SINT32 position_long; // semicircles,
2474
+ FIT_UINT32 distance; // 100 * m,
2475
+ FIT_SINT32 time_from_course; // 1000 * s,
2476
+ FIT_UINT32 total_cycles; // cycles,
2477
+ FIT_UINT32 accumulated_power; // watts,
2478
+ FIT_UINT16 altitude; // 5 * m + 500,
2479
+ FIT_UINT16 speed; // 1000 * m/s,
2480
+ FIT_UINT16 power; // watts,
2481
+ FIT_SINT16 grade; // 100 * %,
2482
+ FIT_UINT16 compressed_accumulated_power; //
2483
+ FIT_SINT16 vertical_speed; // 1000 * m/s,
2484
+ FIT_UINT16 calories; // kcal,
2485
+ FIT_UINT16 ball_speed; // 100 * m/s,
2486
+ FIT_UINT16 cadence256; // 256 * rpm,Log cadence and fractional cadence for backwards compatability
2487
+ FIT_UINT8 heart_rate; // bpm,
2488
+ FIT_UINT8 cadence; // rpm,
2489
+ FIT_BYTE compressed_speed_distance[FIT_RECORD_MESG_COMPRESSED_SPEED_DISTANCE_COUNT]; //
2490
+ FIT_UINT8 resistance; // Relative. 0 is none 254 is Max.
2491
+ FIT_UINT8 cycle_length; // 100 * m,
2492
+ FIT_SINT8 temperature; // C,
2493
+ 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.
2494
+ FIT_UINT8 cycles; //
2495
+ FIT_LEFT_RIGHT_BALANCE left_right_balance; //
2496
+ FIT_UINT8 gps_accuracy; // m,
2497
+ FIT_UINT8 left_torque_effectiveness; // 2 * percent,
2498
+ FIT_UINT8 right_torque_effectiveness; // 2 * percent,
2499
+ FIT_UINT8 left_pedal_smoothness; // 2 * percent,
2500
+ FIT_UINT8 right_pedal_smoothness; // 2 * percent,
2501
+ FIT_UINT8 combined_pedal_smoothness; // 2 * percent,
2502
+ FIT_UINT8 time128; // 128 * s,
2503
+ FIT_STROKE_TYPE stroke_type; //
2504
+ FIT_UINT8 zone; //
2505
+ } FIT_RECORD_MESG;
2506
+
2507
+ typedef enum
2508
+ {
2509
+ FIT_RECORD_FIELD_NUM_TIMESTAMP = 253,
2510
+ FIT_RECORD_FIELD_NUM_POSITION_LAT = 0,
2511
+ FIT_RECORD_FIELD_NUM_POSITION_LONG = 1,
2512
+ FIT_RECORD_FIELD_NUM_DISTANCE = 5,
2513
+ FIT_RECORD_FIELD_NUM_TIME_FROM_COURSE = 11,
2514
+ FIT_RECORD_FIELD_NUM_TOTAL_CYCLES = 19,
2515
+ FIT_RECORD_FIELD_NUM_ACCUMULATED_POWER = 29,
2516
+ FIT_RECORD_FIELD_NUM_ALTITUDE = 2,
2517
+ FIT_RECORD_FIELD_NUM_SPEED = 6,
2518
+ FIT_RECORD_FIELD_NUM_POWER = 7,
2519
+ FIT_RECORD_FIELD_NUM_GRADE = 9,
2520
+ FIT_RECORD_FIELD_NUM_COMPRESSED_ACCUMULATED_POWER = 28,
2521
+ FIT_RECORD_FIELD_NUM_VERTICAL_SPEED = 32,
2522
+ FIT_RECORD_FIELD_NUM_CALORIES = 33,
2523
+ FIT_RECORD_FIELD_NUM_BALL_SPEED = 51,
2524
+ FIT_RECORD_FIELD_NUM_CADENCE256 = 52,
2525
+ FIT_RECORD_FIELD_NUM_HEART_RATE = 3,
2526
+ FIT_RECORD_FIELD_NUM_CADENCE = 4,
2527
+ FIT_RECORD_FIELD_NUM_COMPRESSED_SPEED_DISTANCE = 8,
2528
+ FIT_RECORD_FIELD_NUM_RESISTANCE = 10,
2529
+ FIT_RECORD_FIELD_NUM_CYCLE_LENGTH = 12,
2530
+ FIT_RECORD_FIELD_NUM_TEMPERATURE = 13,
2531
+ FIT_RECORD_FIELD_NUM_SPEED_1S = 17,
2532
+ FIT_RECORD_FIELD_NUM_CYCLES = 18,
2533
+ FIT_RECORD_FIELD_NUM_LEFT_RIGHT_BALANCE = 30,
2534
+ FIT_RECORD_FIELD_NUM_GPS_ACCURACY = 31,
2535
+ FIT_RECORD_FIELD_NUM_LEFT_TORQUE_EFFECTIVENESS = 43,
2536
+ FIT_RECORD_FIELD_NUM_RIGHT_TORQUE_EFFECTIVENESS = 44,
2537
+ FIT_RECORD_FIELD_NUM_LEFT_PEDAL_SMOOTHNESS = 45,
2538
+ FIT_RECORD_FIELD_NUM_RIGHT_PEDAL_SMOOTHNESS = 46,
2539
+ FIT_RECORD_FIELD_NUM_COMBINED_PEDAL_SMOOTHNESS = 47,
2540
+ FIT_RECORD_FIELD_NUM_TIME128 = 48,
2541
+ FIT_RECORD_FIELD_NUM_STROKE_TYPE = 49,
2542
+ FIT_RECORD_FIELD_NUM_ZONE = 50
2543
+ } FIT_RECORD_FIELD_NUM;
2544
+
2545
+ typedef enum
2546
+ {
2547
+ FIT_RECORD_MESG_TIMESTAMP,
2548
+ FIT_RECORD_MESG_POSITION_LAT,
2549
+ FIT_RECORD_MESG_POSITION_LONG,
2550
+ FIT_RECORD_MESG_DISTANCE,
2551
+ FIT_RECORD_MESG_TIME_FROM_COURSE,
2552
+ FIT_RECORD_MESG_TOTAL_CYCLES,
2553
+ FIT_RECORD_MESG_ACCUMULATED_POWER,
2554
+ FIT_RECORD_MESG_ALTITUDE,
2555
+ FIT_RECORD_MESG_SPEED,
2556
+ FIT_RECORD_MESG_POWER,
2557
+ FIT_RECORD_MESG_GRADE,
2558
+ FIT_RECORD_MESG_COMPRESSED_ACCUMULATED_POWER,
2559
+ FIT_RECORD_MESG_VERTICAL_SPEED,
2560
+ FIT_RECORD_MESG_CALORIES,
2561
+ FIT_RECORD_MESG_BALL_SPEED,
2562
+ FIT_RECORD_MESG_CADENCE256,
2563
+ FIT_RECORD_MESG_HEART_RATE,
2564
+ FIT_RECORD_MESG_CADENCE,
2565
+ FIT_RECORD_MESG_COMPRESSED_SPEED_DISTANCE,
2566
+ FIT_RECORD_MESG_RESISTANCE,
2567
+ FIT_RECORD_MESG_CYCLE_LENGTH,
2568
+ FIT_RECORD_MESG_TEMPERATURE,
2569
+ FIT_RECORD_MESG_SPEED_1S,
2570
+ FIT_RECORD_MESG_CYCLES,
2571
+ FIT_RECORD_MESG_LEFT_RIGHT_BALANCE,
2572
+ FIT_RECORD_MESG_GPS_ACCURACY,
2573
+ FIT_RECORD_MESG_LEFT_TORQUE_EFFECTIVENESS,
2574
+ FIT_RECORD_MESG_RIGHT_TORQUE_EFFECTIVENESS,
2575
+ FIT_RECORD_MESG_LEFT_PEDAL_SMOOTHNESS,
2576
+ FIT_RECORD_MESG_RIGHT_PEDAL_SMOOTHNESS,
2577
+ FIT_RECORD_MESG_COMBINED_PEDAL_SMOOTHNESS,
2578
+ FIT_RECORD_MESG_TIME128,
2579
+ FIT_RECORD_MESG_STROKE_TYPE,
2580
+ FIT_RECORD_MESG_ZONE,
2581
+ FIT_RECORD_MESG_FIELDS
2582
+ } FIT_RECORD_MESG_FIELD;
2583
+
2584
+ typedef struct
2585
+ {
2586
+ FIT_UINT8 reserved_1;
2587
+ FIT_UINT8 arch;
2588
+ FIT_MESG_NUM global_mesg_num;
2589
+ FIT_UINT8 num_fields;
2590
+ FIT_UINT8 fields[FIT_RECORD_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
2591
+ } FIT_RECORD_MESG_DEF;
2592
+
2593
+ // event message
2594
+
2595
+ #define FIT_EVENT_MESG_SIZE 17
2596
+ #define FIT_EVENT_MESG_DEF_SIZE 29
2597
+
2598
+ typedef struct
2599
+ {
2600
+ FIT_DATE_TIME timestamp; // s,
2601
+ FIT_UINT32 data; //
2602
+ FIT_UINT16 data16; //
2603
+ FIT_UINT16 score; // Do not use. Placeholder for sport_point subfield components
2604
+ FIT_UINT16 opponent_score; // Do not use. Placeholder for sport_point subfield components
2605
+ FIT_EVENT event; //
2606
+ FIT_EVENT_TYPE event_type; //
2607
+ FIT_UINT8 event_group; //
2608
+ } FIT_EVENT_MESG;
2609
+
2610
+ typedef enum
2611
+ {
2612
+ FIT_EVENT_FIELD_NUM_TIMESTAMP = 253,
2613
+ FIT_EVENT_FIELD_NUM_DATA = 3,
2614
+ FIT_EVENT_FIELD_NUM_DATA16 = 2,
2615
+ FIT_EVENT_FIELD_NUM_SCORE = 7,
2616
+ FIT_EVENT_FIELD_NUM_OPPONENT_SCORE = 8,
2617
+ FIT_EVENT_FIELD_NUM_EVENT = 0,
2618
+ FIT_EVENT_FIELD_NUM_EVENT_TYPE = 1,
2619
+ FIT_EVENT_FIELD_NUM_EVENT_GROUP = 4
2620
+ } FIT_EVENT_FIELD_NUM;
2621
+
2622
+ typedef enum
2623
+ {
2624
+ FIT_EVENT_MESG_TIMESTAMP,
2625
+ FIT_EVENT_MESG_DATA,
2626
+ FIT_EVENT_MESG_DATA16,
2627
+ FIT_EVENT_MESG_SCORE,
2628
+ FIT_EVENT_MESG_OPPONENT_SCORE,
2629
+ FIT_EVENT_MESG_EVENT,
2630
+ FIT_EVENT_MESG_EVENT_TYPE,
2631
+ FIT_EVENT_MESG_EVENT_GROUP,
2632
+ FIT_EVENT_MESG_FIELDS
2633
+ } FIT_EVENT_MESG_FIELD;
2634
+
2635
+ typedef struct
2636
+ {
2637
+ FIT_UINT8 reserved_1;
2638
+ FIT_UINT8 arch;
2639
+ FIT_MESG_NUM global_mesg_num;
2640
+ FIT_UINT8 num_fields;
2641
+ FIT_UINT8 fields[FIT_EVENT_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
2642
+ } FIT_EVENT_MESG_DEF;
2643
+
2644
+ // device_info message
2645
+
2646
+ #define FIT_DEVICE_INFO_MESG_SIZE 24
2647
+ #define FIT_DEVICE_INFO_MESG_DEF_SIZE 38
2648
+
2649
+ typedef struct
2650
+ {
2651
+ FIT_DATE_TIME timestamp; // s,
2652
+ FIT_UINT32Z serial_number; //
2653
+ FIT_UINT32 cum_operating_time; // s,Reset by new battery or charge.
2654
+ FIT_MANUFACTURER manufacturer; //
2655
+ FIT_UINT16 product; //
2656
+ FIT_UINT16 software_version; //
2657
+ FIT_UINT16 battery_voltage; // 256 * V,
2658
+ FIT_DEVICE_INDEX device_index; //
2659
+ FIT_DEVICE_TYPE device_type; //
2660
+ FIT_UINT8 hardware_version; //
2661
+ FIT_BATTERY_STATUS battery_status; //
2662
+ } FIT_DEVICE_INFO_MESG;
2663
+
2664
+ typedef enum
2665
+ {
2666
+ FIT_DEVICE_INFO_FIELD_NUM_TIMESTAMP = 253,
2667
+ FIT_DEVICE_INFO_FIELD_NUM_SERIAL_NUMBER = 3,
2668
+ FIT_DEVICE_INFO_FIELD_NUM_CUM_OPERATING_TIME = 7,
2669
+ FIT_DEVICE_INFO_FIELD_NUM_MANUFACTURER = 2,
2670
+ FIT_DEVICE_INFO_FIELD_NUM_PRODUCT = 4,
2671
+ FIT_DEVICE_INFO_FIELD_NUM_SOFTWARE_VERSION = 5,
2672
+ FIT_DEVICE_INFO_FIELD_NUM_BATTERY_VOLTAGE = 10,
2673
+ FIT_DEVICE_INFO_FIELD_NUM_DEVICE_INDEX = 0,
2674
+ FIT_DEVICE_INFO_FIELD_NUM_DEVICE_TYPE = 1,
2675
+ FIT_DEVICE_INFO_FIELD_NUM_HARDWARE_VERSION = 6,
2676
+ FIT_DEVICE_INFO_FIELD_NUM_BATTERY_STATUS = 11
2677
+ } FIT_DEVICE_INFO_FIELD_NUM;
2678
+
2679
+ typedef enum
2680
+ {
2681
+ FIT_DEVICE_INFO_MESG_TIMESTAMP,
2682
+ FIT_DEVICE_INFO_MESG_SERIAL_NUMBER,
2683
+ FIT_DEVICE_INFO_MESG_CUM_OPERATING_TIME,
2684
+ FIT_DEVICE_INFO_MESG_MANUFACTURER,
2685
+ FIT_DEVICE_INFO_MESG_PRODUCT,
2686
+ FIT_DEVICE_INFO_MESG_SOFTWARE_VERSION,
2687
+ FIT_DEVICE_INFO_MESG_BATTERY_VOLTAGE,
2688
+ FIT_DEVICE_INFO_MESG_DEVICE_INDEX,
2689
+ FIT_DEVICE_INFO_MESG_DEVICE_TYPE,
2690
+ FIT_DEVICE_INFO_MESG_HARDWARE_VERSION,
2691
+ FIT_DEVICE_INFO_MESG_BATTERY_STATUS,
2692
+ FIT_DEVICE_INFO_MESG_FIELDS
2693
+ } FIT_DEVICE_INFO_MESG_FIELD;
2694
+
2695
+ typedef struct
2696
+ {
2697
+ FIT_UINT8 reserved_1;
2698
+ FIT_UINT8 arch;
2699
+ FIT_MESG_NUM global_mesg_num;
2700
+ FIT_UINT8 num_fields;
2701
+ FIT_UINT8 fields[FIT_DEVICE_INFO_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
2702
+ } FIT_DEVICE_INFO_MESG_DEF;
2703
+
2704
+ // hrv message
2705
+
2706
+ #define FIT_HRV_MESG_SIZE 2
2707
+ #define FIT_HRV_MESG_DEF_SIZE 8
2708
+ #define FIT_HRV_MESG_TIME_COUNT 1
2709
+
2710
+ typedef struct
2711
+ {
2712
+ FIT_UINT16 time[FIT_HRV_MESG_TIME_COUNT]; // 1000 * s,Time between beats
2713
+ } FIT_HRV_MESG;
2714
+
2715
+ typedef enum
2716
+ {
2717
+ FIT_HRV_FIELD_NUM_TIME = 0
2718
+ } FIT_HRV_FIELD_NUM;
2719
+
2720
+ typedef enum
2721
+ {
2722
+ FIT_HRV_MESG_TIME,
2723
+ FIT_HRV_MESG_FIELDS
2724
+ } FIT_HRV_MESG_FIELD;
2725
+
2726
+ typedef struct
2727
+ {
2728
+ FIT_UINT8 reserved_1;
2729
+ FIT_UINT8 arch;
2730
+ FIT_MESG_NUM global_mesg_num;
2731
+ FIT_UINT8 num_fields;
2732
+ FIT_UINT8 fields[FIT_HRV_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
2733
+ } FIT_HRV_MESG_DEF;
2734
+
2735
+ // course message
2736
+
2737
+ #define FIT_COURSE_MESG_SIZE 21
2738
+ #define FIT_COURSE_MESG_DEF_SIZE 14
2739
+ #define FIT_COURSE_MESG_NAME_COUNT 16
2740
+
2741
+ typedef struct
2742
+ {
2743
+ FIT_STRING name[FIT_COURSE_MESG_NAME_COUNT]; //
2744
+ FIT_COURSE_CAPABILITIES capabilities; //
2745
+ FIT_SPORT sport; //
2746
+ } FIT_COURSE_MESG;
2747
+
2748
+ typedef enum
2749
+ {
2750
+ FIT_COURSE_FIELD_NUM_NAME = 5,
2751
+ FIT_COURSE_FIELD_NUM_CAPABILITIES = 6,
2752
+ FIT_COURSE_FIELD_NUM_SPORT = 4
2753
+ } FIT_COURSE_FIELD_NUM;
2754
+
2755
+ typedef enum
2756
+ {
2757
+ FIT_COURSE_MESG_NAME,
2758
+ FIT_COURSE_MESG_CAPABILITIES,
2759
+ FIT_COURSE_MESG_SPORT,
2760
+ FIT_COURSE_MESG_FIELDS
2761
+ } FIT_COURSE_MESG_FIELD;
2762
+
2763
+ typedef struct
2764
+ {
2765
+ FIT_UINT8 reserved_1;
2766
+ FIT_UINT8 arch;
2767
+ FIT_MESG_NUM global_mesg_num;
2768
+ FIT_UINT8 num_fields;
2769
+ FIT_UINT8 fields[FIT_COURSE_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
2770
+ } FIT_COURSE_MESG_DEF;
2771
+
2772
+ // course_point message
2773
+
2774
+ #define FIT_COURSE_POINT_MESG_SIZE 35
2775
+ #define FIT_COURSE_POINT_MESG_DEF_SIZE 26
2776
+ #define FIT_COURSE_POINT_MESG_NAME_COUNT 16
2777
+
2778
+ typedef struct
2779
+ {
2780
+ FIT_DATE_TIME timestamp; //
2781
+ FIT_SINT32 position_lat; // semicircles,
2782
+ FIT_SINT32 position_long; // semicircles,
2783
+ FIT_UINT32 distance; // 100 * m,
2784
+ FIT_STRING name[FIT_COURSE_POINT_MESG_NAME_COUNT]; //
2785
+ FIT_MESSAGE_INDEX message_index; //
2786
+ FIT_COURSE_POINT type; //
2787
+ } FIT_COURSE_POINT_MESG;
2788
+
2789
+ typedef enum
2790
+ {
2791
+ FIT_COURSE_POINT_FIELD_NUM_TIMESTAMP = 1,
2792
+ FIT_COURSE_POINT_FIELD_NUM_POSITION_LAT = 2,
2793
+ FIT_COURSE_POINT_FIELD_NUM_POSITION_LONG = 3,
2794
+ FIT_COURSE_POINT_FIELD_NUM_DISTANCE = 4,
2795
+ FIT_COURSE_POINT_FIELD_NUM_NAME = 6,
2796
+ FIT_COURSE_POINT_FIELD_NUM_MESSAGE_INDEX = 254,
2797
+ FIT_COURSE_POINT_FIELD_NUM_TYPE = 5
2798
+ } FIT_COURSE_POINT_FIELD_NUM;
2799
+
2800
+ typedef enum
2801
+ {
2802
+ FIT_COURSE_POINT_MESG_TIMESTAMP,
2803
+ FIT_COURSE_POINT_MESG_POSITION_LAT,
2804
+ FIT_COURSE_POINT_MESG_POSITION_LONG,
2805
+ FIT_COURSE_POINT_MESG_DISTANCE,
2806
+ FIT_COURSE_POINT_MESG_NAME,
2807
+ FIT_COURSE_POINT_MESG_MESSAGE_INDEX,
2808
+ FIT_COURSE_POINT_MESG_TYPE,
2809
+ FIT_COURSE_POINT_MESG_FIELDS
2810
+ } FIT_COURSE_POINT_MESG_FIELD;
2811
+
2812
+ typedef struct
2813
+ {
2814
+ FIT_UINT8 reserved_1;
2815
+ FIT_UINT8 arch;
2816
+ FIT_MESG_NUM global_mesg_num;
2817
+ FIT_UINT8 num_fields;
2818
+ FIT_UINT8 fields[FIT_COURSE_POINT_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
2819
+ } FIT_COURSE_POINT_MESG_DEF;
2820
+
2821
+ // workout message
2822
+
2823
+ #define FIT_WORKOUT_MESG_SIZE 23
2824
+ #define FIT_WORKOUT_MESG_DEF_SIZE 17
2825
+ #define FIT_WORKOUT_MESG_WKT_NAME_COUNT 16
2826
+
2827
+ typedef struct
2828
+ {
2829
+ FIT_WORKOUT_CAPABILITIES capabilities; //
2830
+ FIT_STRING wkt_name[FIT_WORKOUT_MESG_WKT_NAME_COUNT]; //
2831
+ FIT_UINT16 num_valid_steps; // number of valid steps
2832
+ FIT_SPORT sport; //
2833
+ } FIT_WORKOUT_MESG;
2834
+
2835
+ typedef enum
2836
+ {
2837
+ FIT_WORKOUT_FIELD_NUM_CAPABILITIES = 5,
2838
+ FIT_WORKOUT_FIELD_NUM_WKT_NAME = 8,
2839
+ FIT_WORKOUT_FIELD_NUM_NUM_VALID_STEPS = 6,
2840
+ FIT_WORKOUT_FIELD_NUM_SPORT = 4
2841
+ } FIT_WORKOUT_FIELD_NUM;
2842
+
2843
+ typedef enum
2844
+ {
2845
+ FIT_WORKOUT_MESG_CAPABILITIES,
2846
+ FIT_WORKOUT_MESG_WKT_NAME,
2847
+ FIT_WORKOUT_MESG_NUM_VALID_STEPS,
2848
+ FIT_WORKOUT_MESG_SPORT,
2849
+ FIT_WORKOUT_MESG_FIELDS
2850
+ } FIT_WORKOUT_MESG_FIELD;
2851
+
2852
+ typedef struct
2853
+ {
2854
+ FIT_UINT8 reserved_1;
2855
+ FIT_UINT8 arch;
2856
+ FIT_MESG_NUM global_mesg_num;
2857
+ FIT_UINT8 num_fields;
2858
+ FIT_UINT8 fields[FIT_WORKOUT_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
2859
+ } FIT_WORKOUT_MESG_DEF;
2860
+
2861
+ // workout_step message
2862
+
2863
+ #define FIT_WORKOUT_STEP_MESG_SIZE 37
2864
+ #define FIT_WORKOUT_STEP_MESG_DEF_SIZE 32
2865
+ #define FIT_WORKOUT_STEP_MESG_WKT_STEP_NAME_COUNT 16
2866
+
2867
+ typedef struct
2868
+ {
2869
+ FIT_STRING wkt_step_name[FIT_WORKOUT_STEP_MESG_WKT_STEP_NAME_COUNT]; //
2870
+ FIT_UINT32 duration_value; //
2871
+ FIT_UINT32 target_value; //
2872
+ FIT_UINT32 custom_target_value_low; //
2873
+ FIT_UINT32 custom_target_value_high; //
2874
+ FIT_MESSAGE_INDEX message_index; //
2875
+ FIT_WKT_STEP_DURATION duration_type; //
2876
+ FIT_WKT_STEP_TARGET target_type; //
2877
+ FIT_INTENSITY intensity; //
2878
+ } FIT_WORKOUT_STEP_MESG;
2879
+
2880
+ typedef enum
2881
+ {
2882
+ FIT_WORKOUT_STEP_FIELD_NUM_WKT_STEP_NAME = 0,
2883
+ FIT_WORKOUT_STEP_FIELD_NUM_DURATION_VALUE = 2,
2884
+ FIT_WORKOUT_STEP_FIELD_NUM_TARGET_VALUE = 4,
2885
+ FIT_WORKOUT_STEP_FIELD_NUM_CUSTOM_TARGET_VALUE_LOW = 5,
2886
+ FIT_WORKOUT_STEP_FIELD_NUM_CUSTOM_TARGET_VALUE_HIGH = 6,
2887
+ FIT_WORKOUT_STEP_FIELD_NUM_MESSAGE_INDEX = 254,
2888
+ FIT_WORKOUT_STEP_FIELD_NUM_DURATION_TYPE = 1,
2889
+ FIT_WORKOUT_STEP_FIELD_NUM_TARGET_TYPE = 3,
2890
+ FIT_WORKOUT_STEP_FIELD_NUM_INTENSITY = 7
2891
+ } FIT_WORKOUT_STEP_FIELD_NUM;
2892
+
2893
+ typedef enum
2894
+ {
2895
+ FIT_WORKOUT_STEP_MESG_WKT_STEP_NAME,
2896
+ FIT_WORKOUT_STEP_MESG_DURATION_VALUE,
2897
+ FIT_WORKOUT_STEP_MESG_TARGET_VALUE,
2898
+ FIT_WORKOUT_STEP_MESG_CUSTOM_TARGET_VALUE_LOW,
2899
+ FIT_WORKOUT_STEP_MESG_CUSTOM_TARGET_VALUE_HIGH,
2900
+ FIT_WORKOUT_STEP_MESG_MESSAGE_INDEX,
2901
+ FIT_WORKOUT_STEP_MESG_DURATION_TYPE,
2902
+ FIT_WORKOUT_STEP_MESG_TARGET_TYPE,
2903
+ FIT_WORKOUT_STEP_MESG_INTENSITY,
2904
+ FIT_WORKOUT_STEP_MESG_FIELDS
2905
+ } FIT_WORKOUT_STEP_MESG_FIELD;
2906
+
2907
+ typedef struct
2908
+ {
2909
+ FIT_UINT8 reserved_1;
2910
+ FIT_UINT8 arch;
2911
+ FIT_MESG_NUM global_mesg_num;
2912
+ FIT_UINT8 num_fields;
2913
+ FIT_UINT8 fields[FIT_WORKOUT_STEP_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
2914
+ } FIT_WORKOUT_STEP_MESG_DEF;
2915
+
2916
+ // schedule message
2917
+
2918
+ #define FIT_SCHEDULE_MESG_SIZE 18
2919
+ #define FIT_SCHEDULE_MESG_DEF_SIZE 26
2920
+
2921
+ typedef struct
2922
+ {
2923
+ FIT_UINT32Z serial_number; // Corresponds to file_id of scheduled workout / course.
2924
+ FIT_DATE_TIME time_created; // Corresponds to file_id of scheduled workout / course.
2925
+ FIT_LOCAL_DATE_TIME scheduled_time; //
2926
+ FIT_MANUFACTURER manufacturer; // Corresponds to file_id of scheduled workout / course.
2927
+ FIT_UINT16 product; // Corresponds to file_id of scheduled workout / course.
2928
+ FIT_BOOL completed; // TRUE if this activity has been started
2929
+ FIT_SCHEDULE type; //
2930
+ } FIT_SCHEDULE_MESG;
2931
+
2932
+ typedef enum
2933
+ {
2934
+ FIT_SCHEDULE_FIELD_NUM_SERIAL_NUMBER = 2,
2935
+ FIT_SCHEDULE_FIELD_NUM_TIME_CREATED = 3,
2936
+ FIT_SCHEDULE_FIELD_NUM_SCHEDULED_TIME = 6,
2937
+ FIT_SCHEDULE_FIELD_NUM_MANUFACTURER = 0,
2938
+ FIT_SCHEDULE_FIELD_NUM_PRODUCT = 1,
2939
+ FIT_SCHEDULE_FIELD_NUM_COMPLETED = 4,
2940
+ FIT_SCHEDULE_FIELD_NUM_TYPE = 5
2941
+ } FIT_SCHEDULE_FIELD_NUM;
2942
+
2943
+ typedef enum
2944
+ {
2945
+ FIT_SCHEDULE_MESG_SERIAL_NUMBER,
2946
+ FIT_SCHEDULE_MESG_TIME_CREATED,
2947
+ FIT_SCHEDULE_MESG_SCHEDULED_TIME,
2948
+ FIT_SCHEDULE_MESG_MANUFACTURER,
2949
+ FIT_SCHEDULE_MESG_PRODUCT,
2950
+ FIT_SCHEDULE_MESG_COMPLETED,
2951
+ FIT_SCHEDULE_MESG_TYPE,
2952
+ FIT_SCHEDULE_MESG_FIELDS
2953
+ } FIT_SCHEDULE_MESG_FIELD;
2954
+
2955
+ typedef struct
2956
+ {
2957
+ FIT_UINT8 reserved_1;
2958
+ FIT_UINT8 arch;
2959
+ FIT_MESG_NUM global_mesg_num;
2960
+ FIT_UINT8 num_fields;
2961
+ FIT_UINT8 fields[FIT_SCHEDULE_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
2962
+ } FIT_SCHEDULE_MESG_DEF;
2963
+
2964
+ // totals message
2965
+
2966
+ #define FIT_TOTALS_MESG_SIZE 29
2967
+ #define FIT_TOTALS_MESG_DEF_SIZE 32
2968
+
2969
+ typedef struct
2970
+ {
2971
+ FIT_DATE_TIME timestamp; // s,
2972
+ FIT_UINT32 timer_time; // s,Excludes pauses
2973
+ FIT_UINT32 distance; // m,
2974
+ FIT_UINT32 calories; // kcal,
2975
+ FIT_UINT32 elapsed_time; // s,Includes pauses
2976
+ FIT_UINT32 active_time; // s,
2977
+ FIT_MESSAGE_INDEX message_index; //
2978
+ FIT_UINT16 sessions; //
2979
+ FIT_SPORT sport; //
2980
+ } FIT_TOTALS_MESG;
2981
+
2982
+ typedef enum
2983
+ {
2984
+ FIT_TOTALS_FIELD_NUM_TIMESTAMP = 253,
2985
+ FIT_TOTALS_FIELD_NUM_TIMER_TIME = 0,
2986
+ FIT_TOTALS_FIELD_NUM_DISTANCE = 1,
2987
+ FIT_TOTALS_FIELD_NUM_CALORIES = 2,
2988
+ FIT_TOTALS_FIELD_NUM_ELAPSED_TIME = 4,
2989
+ FIT_TOTALS_FIELD_NUM_ACTIVE_TIME = 6,
2990
+ FIT_TOTALS_FIELD_NUM_MESSAGE_INDEX = 254,
2991
+ FIT_TOTALS_FIELD_NUM_SESSIONS = 5,
2992
+ FIT_TOTALS_FIELD_NUM_SPORT = 3
2993
+ } FIT_TOTALS_FIELD_NUM;
2994
+
2995
+ typedef enum
2996
+ {
2997
+ FIT_TOTALS_MESG_TIMESTAMP,
2998
+ FIT_TOTALS_MESG_TIMER_TIME,
2999
+ FIT_TOTALS_MESG_DISTANCE,
3000
+ FIT_TOTALS_MESG_CALORIES,
3001
+ FIT_TOTALS_MESG_ELAPSED_TIME,
3002
+ FIT_TOTALS_MESG_ACTIVE_TIME,
3003
+ FIT_TOTALS_MESG_MESSAGE_INDEX,
3004
+ FIT_TOTALS_MESG_SESSIONS,
3005
+ FIT_TOTALS_MESG_SPORT,
3006
+ FIT_TOTALS_MESG_FIELDS
3007
+ } FIT_TOTALS_MESG_FIELD;
3008
+
3009
+ typedef struct
3010
+ {
3011
+ FIT_UINT8 reserved_1;
3012
+ FIT_UINT8 arch;
3013
+ FIT_MESG_NUM global_mesg_num;
3014
+ FIT_UINT8 num_fields;
3015
+ FIT_UINT8 fields[FIT_TOTALS_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
3016
+ } FIT_TOTALS_MESG_DEF;
3017
+
3018
+ // weight_scale message
3019
+
3020
+ #define FIT_WEIGHT_SCALE_MESG_SIZE 25
3021
+ #define FIT_WEIGHT_SCALE_MESG_DEF_SIZE 44
3022
+
3023
+ typedef struct
3024
+ {
3025
+ FIT_DATE_TIME timestamp; // s,
3026
+ FIT_WEIGHT weight; // 100 * kg,
3027
+ FIT_UINT16 percent_fat; // 100 * %,
3028
+ FIT_UINT16 percent_hydration; // 100 * %,
3029
+ FIT_UINT16 visceral_fat_mass; // 100 * kg,
3030
+ FIT_UINT16 bone_mass; // 100 * kg,
3031
+ FIT_UINT16 muscle_mass; // 100 * kg,
3032
+ FIT_UINT16 basal_met; // 4 * kcal/day,
3033
+ FIT_UINT16 active_met; // 4 * kcal/day,~4kJ per kcal, 0.25 allows max 16384 kcal
3034
+ 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.
3035
+ FIT_UINT8 physique_rating; //
3036
+ FIT_UINT8 metabolic_age; // years,
3037
+ FIT_UINT8 visceral_fat_rating; //
3038
+ } FIT_WEIGHT_SCALE_MESG;
3039
+
3040
+ typedef enum
3041
+ {
3042
+ FIT_WEIGHT_SCALE_FIELD_NUM_TIMESTAMP = 253,
3043
+ FIT_WEIGHT_SCALE_FIELD_NUM_WEIGHT = 0,
3044
+ FIT_WEIGHT_SCALE_FIELD_NUM_PERCENT_FAT = 1,
3045
+ FIT_WEIGHT_SCALE_FIELD_NUM_PERCENT_HYDRATION = 2,
3046
+ FIT_WEIGHT_SCALE_FIELD_NUM_VISCERAL_FAT_MASS = 3,
3047
+ FIT_WEIGHT_SCALE_FIELD_NUM_BONE_MASS = 4,
3048
+ FIT_WEIGHT_SCALE_FIELD_NUM_MUSCLE_MASS = 5,
3049
+ FIT_WEIGHT_SCALE_FIELD_NUM_BASAL_MET = 7,
3050
+ FIT_WEIGHT_SCALE_FIELD_NUM_ACTIVE_MET = 9,
3051
+ FIT_WEIGHT_SCALE_FIELD_NUM_USER_PROFILE_INDEX = 12,
3052
+ FIT_WEIGHT_SCALE_FIELD_NUM_PHYSIQUE_RATING = 8,
3053
+ FIT_WEIGHT_SCALE_FIELD_NUM_METABOLIC_AGE = 10,
3054
+ FIT_WEIGHT_SCALE_FIELD_NUM_VISCERAL_FAT_RATING = 11
3055
+ } FIT_WEIGHT_SCALE_FIELD_NUM;
3056
+
3057
+ typedef enum
3058
+ {
3059
+ FIT_WEIGHT_SCALE_MESG_TIMESTAMP,
3060
+ FIT_WEIGHT_SCALE_MESG_WEIGHT,
3061
+ FIT_WEIGHT_SCALE_MESG_PERCENT_FAT,
3062
+ FIT_WEIGHT_SCALE_MESG_PERCENT_HYDRATION,
3063
+ FIT_WEIGHT_SCALE_MESG_VISCERAL_FAT_MASS,
3064
+ FIT_WEIGHT_SCALE_MESG_BONE_MASS,
3065
+ FIT_WEIGHT_SCALE_MESG_MUSCLE_MASS,
3066
+ FIT_WEIGHT_SCALE_MESG_BASAL_MET,
3067
+ FIT_WEIGHT_SCALE_MESG_ACTIVE_MET,
3068
+ FIT_WEIGHT_SCALE_MESG_USER_PROFILE_INDEX,
3069
+ FIT_WEIGHT_SCALE_MESG_PHYSIQUE_RATING,
3070
+ FIT_WEIGHT_SCALE_MESG_METABOLIC_AGE,
3071
+ FIT_WEIGHT_SCALE_MESG_VISCERAL_FAT_RATING,
3072
+ FIT_WEIGHT_SCALE_MESG_FIELDS
3073
+ } FIT_WEIGHT_SCALE_MESG_FIELD;
3074
+
3075
+ typedef struct
3076
+ {
3077
+ FIT_UINT8 reserved_1;
3078
+ FIT_UINT8 arch;
3079
+ FIT_MESG_NUM global_mesg_num;
3080
+ FIT_UINT8 num_fields;
3081
+ FIT_UINT8 fields[FIT_WEIGHT_SCALE_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
3082
+ } FIT_WEIGHT_SCALE_MESG_DEF;
3083
+
3084
+ // blood_pressure message
3085
+
3086
+ #define FIT_BLOOD_PRESSURE_MESG_SIZE 21
3087
+ #define FIT_BLOOD_PRESSURE_MESG_DEF_SIZE 38
3088
+
3089
+ typedef struct
3090
+ {
3091
+ FIT_DATE_TIME timestamp; // s,
3092
+ FIT_UINT16 systolic_pressure; // mmHg,
3093
+ FIT_UINT16 diastolic_pressure; // mmHg,
3094
+ FIT_UINT16 mean_arterial_pressure; // mmHg,
3095
+ FIT_UINT16 map_3_sample_mean; // mmHg,
3096
+ FIT_UINT16 map_morning_values; // mmHg,
3097
+ FIT_UINT16 map_evening_values; // mmHg,
3098
+ 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.
3099
+ FIT_UINT8 heart_rate; // bpm,
3100
+ FIT_HR_TYPE heart_rate_type; //
3101
+ FIT_BP_STATUS status; //
3102
+ } FIT_BLOOD_PRESSURE_MESG;
3103
+
3104
+ typedef enum
3105
+ {
3106
+ FIT_BLOOD_PRESSURE_FIELD_NUM_TIMESTAMP = 253,
3107
+ FIT_BLOOD_PRESSURE_FIELD_NUM_SYSTOLIC_PRESSURE = 0,
3108
+ FIT_BLOOD_PRESSURE_FIELD_NUM_DIASTOLIC_PRESSURE = 1,
3109
+ FIT_BLOOD_PRESSURE_FIELD_NUM_MEAN_ARTERIAL_PRESSURE = 2,
3110
+ FIT_BLOOD_PRESSURE_FIELD_NUM_MAP_3_SAMPLE_MEAN = 3,
3111
+ FIT_BLOOD_PRESSURE_FIELD_NUM_MAP_MORNING_VALUES = 4,
3112
+ FIT_BLOOD_PRESSURE_FIELD_NUM_MAP_EVENING_VALUES = 5,
3113
+ FIT_BLOOD_PRESSURE_FIELD_NUM_USER_PROFILE_INDEX = 9,
3114
+ FIT_BLOOD_PRESSURE_FIELD_NUM_HEART_RATE = 6,
3115
+ FIT_BLOOD_PRESSURE_FIELD_NUM_HEART_RATE_TYPE = 7,
3116
+ FIT_BLOOD_PRESSURE_FIELD_NUM_STATUS = 8
3117
+ } FIT_BLOOD_PRESSURE_FIELD_NUM;
3118
+
3119
+ typedef enum
3120
+ {
3121
+ FIT_BLOOD_PRESSURE_MESG_TIMESTAMP,
3122
+ FIT_BLOOD_PRESSURE_MESG_SYSTOLIC_PRESSURE,
3123
+ FIT_BLOOD_PRESSURE_MESG_DIASTOLIC_PRESSURE,
3124
+ FIT_BLOOD_PRESSURE_MESG_MEAN_ARTERIAL_PRESSURE,
3125
+ FIT_BLOOD_PRESSURE_MESG_MAP_3_SAMPLE_MEAN,
3126
+ FIT_BLOOD_PRESSURE_MESG_MAP_MORNING_VALUES,
3127
+ FIT_BLOOD_PRESSURE_MESG_MAP_EVENING_VALUES,
3128
+ FIT_BLOOD_PRESSURE_MESG_USER_PROFILE_INDEX,
3129
+ FIT_BLOOD_PRESSURE_MESG_HEART_RATE,
3130
+ FIT_BLOOD_PRESSURE_MESG_HEART_RATE_TYPE,
3131
+ FIT_BLOOD_PRESSURE_MESG_STATUS,
3132
+ FIT_BLOOD_PRESSURE_MESG_FIELDS
3133
+ } FIT_BLOOD_PRESSURE_MESG_FIELD;
3134
+
3135
+ typedef struct
3136
+ {
3137
+ FIT_UINT8 reserved_1;
3138
+ FIT_UINT8 arch;
3139
+ FIT_MESG_NUM global_mesg_num;
3140
+ FIT_UINT8 num_fields;
3141
+ FIT_UINT8 fields[FIT_BLOOD_PRESSURE_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
3142
+ } FIT_BLOOD_PRESSURE_MESG_DEF;
3143
+
3144
+ // monitoring_info message
3145
+
3146
+ #define FIT_MONITORING_INFO_MESG_SIZE 8
3147
+ #define FIT_MONITORING_INFO_MESG_DEF_SIZE 11
3148
+
3149
+ typedef struct
3150
+ {
3151
+ FIT_DATE_TIME timestamp; //
3152
+ 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.
3153
+ } FIT_MONITORING_INFO_MESG;
3154
+
3155
+ typedef enum
3156
+ {
3157
+ FIT_MONITORING_INFO_FIELD_NUM_TIMESTAMP = 253,
3158
+ FIT_MONITORING_INFO_FIELD_NUM_LOCAL_TIMESTAMP = 0
3159
+ } FIT_MONITORING_INFO_FIELD_NUM;
3160
+
3161
+ typedef enum
3162
+ {
3163
+ FIT_MONITORING_INFO_MESG_TIMESTAMP,
3164
+ FIT_MONITORING_INFO_MESG_LOCAL_TIMESTAMP,
3165
+ FIT_MONITORING_INFO_MESG_FIELDS
3166
+ } FIT_MONITORING_INFO_MESG_FIELD;
3167
+
3168
+ typedef struct
3169
+ {
3170
+ FIT_UINT8 reserved_1;
3171
+ FIT_UINT8 arch;
3172
+ FIT_MESG_NUM global_mesg_num;
3173
+ FIT_UINT8 num_fields;
3174
+ FIT_UINT8 fields[FIT_MONITORING_INFO_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
3175
+ } FIT_MONITORING_INFO_MESG_DEF;
3176
+
3177
+ // monitoring message
3178
+
3179
+ #define FIT_MONITORING_MESG_SIZE 31
3180
+ #define FIT_MONITORING_MESG_DEF_SIZE 41
3181
+
3182
+ typedef struct
3183
+ {
3184
+ FIT_DATE_TIME timestamp; // s,Must align to logging interval, for example, time must be 00:00:00 for daily log.
3185
+ FIT_UINT32 distance; // 100 * m,
3186
+ FIT_UINT32 cycles; // cycles,
3187
+ FIT_UINT32 active_time; // 1000 * s,
3188
+ FIT_LOCAL_DATE_TIME local_timestamp; // Must align to logging interval, for example, time must be 00:00:00 for daily log.
3189
+ FIT_UINT16 calories; // kcal,total calories
3190
+ FIT_UINT16 compressed_distance; //
3191
+ FIT_UINT16 compressed_cycles; //
3192
+ FIT_UINT16 compressed_active_time; //
3193
+ FIT_DEVICE_INDEX device_index; // Associates this data to device_info message. Not required for file with single device (sensor).
3194
+ FIT_ACTIVITY_TYPE activity_type; //
3195
+ FIT_ACTIVITY_SUBTYPE activity_subtype; //
3196
+ } FIT_MONITORING_MESG;
3197
+
3198
+ typedef enum
3199
+ {
3200
+ FIT_MONITORING_FIELD_NUM_TIMESTAMP = 253,
3201
+ FIT_MONITORING_FIELD_NUM_DISTANCE = 2,
3202
+ FIT_MONITORING_FIELD_NUM_CYCLES = 3,
3203
+ FIT_MONITORING_FIELD_NUM_ACTIVE_TIME = 4,
3204
+ FIT_MONITORING_FIELD_NUM_LOCAL_TIMESTAMP = 11,
3205
+ FIT_MONITORING_FIELD_NUM_CALORIES = 1,
3206
+ FIT_MONITORING_FIELD_NUM_COMPRESSED_DISTANCE = 8,
3207
+ FIT_MONITORING_FIELD_NUM_COMPRESSED_CYCLES = 9,
3208
+ FIT_MONITORING_FIELD_NUM_COMPRESSED_ACTIVE_TIME = 10,
3209
+ FIT_MONITORING_FIELD_NUM_DEVICE_INDEX = 0,
3210
+ FIT_MONITORING_FIELD_NUM_ACTIVITY_TYPE = 5,
3211
+ FIT_MONITORING_FIELD_NUM_ACTIVITY_SUBTYPE = 6
3212
+ } FIT_MONITORING_FIELD_NUM;
3213
+
3214
+ typedef enum
3215
+ {
3216
+ FIT_MONITORING_MESG_TIMESTAMP,
3217
+ FIT_MONITORING_MESG_DISTANCE,
3218
+ FIT_MONITORING_MESG_CYCLES,
3219
+ FIT_MONITORING_MESG_ACTIVE_TIME,
3220
+ FIT_MONITORING_MESG_LOCAL_TIMESTAMP,
3221
+ FIT_MONITORING_MESG_CALORIES,
3222
+ FIT_MONITORING_MESG_COMPRESSED_DISTANCE,
3223
+ FIT_MONITORING_MESG_COMPRESSED_CYCLES,
3224
+ FIT_MONITORING_MESG_COMPRESSED_ACTIVE_TIME,
3225
+ FIT_MONITORING_MESG_DEVICE_INDEX,
3226
+ FIT_MONITORING_MESG_ACTIVITY_TYPE,
3227
+ FIT_MONITORING_MESG_ACTIVITY_SUBTYPE,
3228
+ FIT_MONITORING_MESG_FIELDS
3229
+ } FIT_MONITORING_MESG_FIELD;
3230
+
3231
+ typedef struct
3232
+ {
3233
+ FIT_UINT8 reserved_1;
3234
+ FIT_UINT8 arch;
3235
+ FIT_MESG_NUM global_mesg_num;
3236
+ FIT_UINT8 num_fields;
3237
+ FIT_UINT8 fields[FIT_MONITORING_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
3238
+ } FIT_MONITORING_MESG_DEF;
3239
+
3240
+ typedef enum {
3241
+ FIT_MESG_PAD,
3242
+ FIT_MESG_FILE_ID,
3243
+ FIT_MESG_FILE_CREATOR,
3244
+ FIT_MESG_SOFTWARE,
3245
+ FIT_MESG_SLAVE_DEVICE,
3246
+ FIT_MESG_CAPABILITIES,
3247
+ FIT_MESG_FILE_CAPABILITIES,
3248
+ FIT_MESG_MESG_CAPABILITIES,
3249
+ FIT_MESG_FIELD_CAPABILITIES,
3250
+ FIT_MESG_DEVICE_SETTINGS,
3251
+ FIT_MESG_USER_PROFILE,
3252
+ FIT_MESG_HRM_PROFILE,
3253
+ FIT_MESG_SDM_PROFILE,
3254
+ FIT_MESG_BIKE_PROFILE,
3255
+ FIT_MESG_ZONES_TARGET,
3256
+ FIT_MESG_SPORT,
3257
+ FIT_MESG_HR_ZONE,
3258
+ FIT_MESG_SPEED_ZONE,
3259
+ FIT_MESG_CADENCE_ZONE,
3260
+ FIT_MESG_POWER_ZONE,
3261
+ FIT_MESG_MET_ZONE,
3262
+ FIT_MESG_GOAL,
3263
+ FIT_MESG_ACTIVITY,
3264
+ FIT_MESG_SESSION,
3265
+ FIT_MESG_LAP,
3266
+ FIT_MESG_LENGTH,
3267
+ FIT_MESG_RECORD,
3268
+ FIT_MESG_EVENT,
3269
+ FIT_MESG_DEVICE_INFO,
3270
+ FIT_MESG_HRV,
3271
+ FIT_MESG_COURSE,
3272
+ FIT_MESG_COURSE_POINT,
3273
+ FIT_MESG_WORKOUT,
3274
+ FIT_MESG_WORKOUT_STEP,
3275
+ FIT_MESG_SCHEDULE,
3276
+ FIT_MESG_TOTALS,
3277
+ FIT_MESG_WEIGHT_SCALE,
3278
+ FIT_MESG_BLOOD_PRESSURE,
3279
+ FIT_MESG_MONITORING_INFO,
3280
+ FIT_MESG_MONITORING,
3281
+ FIT_MESGS
3282
+ } FIT_MESG;
3283
+
3284
+ typedef const FIT_MESG_DEF * FIT_CONST_MESG_DEF_PTR;
3285
+ const extern FIT_CONST_MESG_DEF_PTR fit_mesg_defs[FIT_MESGS];
3286
+
3287
+
3288
+
3289
+
3290
+
3291
+
3292
+
3293
+
3294
+ #if defined(__cplusplus)
3295
+ }
3296
+ #endif
3297
+
3298
+ #endif // !defined(FIT_EXAMPLE_H)
3299
+