rubyfit 0.0.2 → 0.0.3

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