rubyfit 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,2083 @@
1
+ ////////////////////////////////////////////////////////////////////////////////
2
+ // The following .FIT software provided may be used with .FIT devices only and
3
+ // 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 2008 Dynastream Innovations Inc.
11
+ // All rights reserved. This software may not be reproduced by any means
12
+ // without express written approval of Dynastream Innovations Inc.
13
+ ////////////////////////////////////////////////////////////////////////////////
14
+ // ****WARNING**** This file is auto-generated! Do NOT edit this file.
15
+ // Profile Version = 0.62
16
+ // Product = 'SDK'
17
+ // Alignment = '4'
18
+ //////////////////////////////////////////////////////////////////////////////////
19
+
20
+
21
+ #if !defined(FIT_SDK_H)
22
+ #define FIT_SDK_H
23
+
24
+ #include "fit.h"
25
+
26
+ #if defined(__cplusplus)
27
+ extern "C" {
28
+ #endif
29
+
30
+
31
+ ///////////////////////////////////////////////////////////////////////
32
+ // Version
33
+ ///////////////////////////////////////////////////////////////////////
34
+
35
+ #define FIT_PROFILE_VERSION_MAJOR 0
36
+ #define FIT_PROFILE_VERSION_MINOR 62
37
+
38
+
39
+ ///////////////////////////////////////////////////////////////////////
40
+ // Types
41
+ ///////////////////////////////////////////////////////////////////////
42
+
43
+ typedef FIT_ENUM FIT_FILE;
44
+ #define FIT_FILE_INVALID FIT_ENUM_INVALID
45
+ #define FIT_FILE_DEVICE ((FIT_FILE)1) // Read only, single file. Must be in root directory.
46
+ #define FIT_FILE_SETTINGS ((FIT_FILE)2) // Read/write, single file. Directory=Settings
47
+ #define FIT_FILE_SPORT ((FIT_FILE)3) // Read/write, multiple files, file number = sport type. Directory=Sports
48
+ #define FIT_FILE_ACTIVITY ((FIT_FILE)4) // Read/erase, multiple files. Directory=Activities
49
+ #define FIT_FILE_WORKOUT ((FIT_FILE)5) // Read/write/erase, multiple files. Directory=Workouts
50
+ #define FIT_FILE_COURSE ((FIT_FILE)6) // Read/write/erase, multiple files. Directory=Courses
51
+ #define FIT_FILE_SCHEDULES ((FIT_FILE)7) // Read/write, single file. Directory=Schedules
52
+ #define FIT_FILE_MONITORING ((FIT_FILE)9) // Read only, single file. Circular buffer. All message definitions at start of file. Directory=Monitoring
53
+ #define FIT_FILE_TOTALS ((FIT_FILE)10) // Read only, single file. Directory=Totals
54
+ #define FIT_FILE_COUNT 9
55
+
56
+ typedef FIT_UINT16 FIT_MESG_NUM;
57
+ #define FIT_MESG_NUM_INVALID FIT_UINT16_INVALID
58
+ #define FIT_MESG_NUM_FILE_ID ((FIT_MESG_NUM)0)
59
+ #define FIT_MESG_NUM_CAPABILITIES ((FIT_MESG_NUM)1)
60
+ #define FIT_MESG_NUM_DEVICE_SETTINGS ((FIT_MESG_NUM)2)
61
+ #define FIT_MESG_NUM_USER_PROFILE ((FIT_MESG_NUM)3)
62
+ #define FIT_MESG_NUM_HRM_PROFILE ((FIT_MESG_NUM)4)
63
+ #define FIT_MESG_NUM_ZONES_TARGET ((FIT_MESG_NUM)7)
64
+ #define FIT_MESG_NUM_HR_ZONE ((FIT_MESG_NUM)8)
65
+ #define FIT_MESG_NUM_POWER_ZONE ((FIT_MESG_NUM)9)
66
+ #define FIT_MESG_NUM_MET_ZONE ((FIT_MESG_NUM)10)
67
+ #define FIT_MESG_NUM_SPORT ((FIT_MESG_NUM)12)
68
+ #define FIT_MESG_NUM_SESSION ((FIT_MESG_NUM)18)
69
+ #define FIT_MESG_NUM_LAP ((FIT_MESG_NUM)19)
70
+ #define FIT_MESG_NUM_RECORD ((FIT_MESG_NUM)20)
71
+ #define FIT_MESG_NUM_EVENT ((FIT_MESG_NUM)21)
72
+ #define FIT_MESG_NUM_DEVICE_INFO ((FIT_MESG_NUM)23)
73
+ #define FIT_MESG_NUM_WORKOUT ((FIT_MESG_NUM)26)
74
+ #define FIT_MESG_NUM_WORKOUT_STEP ((FIT_MESG_NUM)27)
75
+ #define FIT_MESG_NUM_SCHEDULE ((FIT_MESG_NUM)28)
76
+ #define FIT_MESG_NUM_WEIGHT_SCALE ((FIT_MESG_NUM)30)
77
+ #define FIT_MESG_NUM_COURSE ((FIT_MESG_NUM)31)
78
+ #define FIT_MESG_NUM_COURSE_POINT ((FIT_MESG_NUM)32)
79
+ #define FIT_MESG_NUM_TOTALS ((FIT_MESG_NUM)33)
80
+ #define FIT_MESG_NUM_ACTIVITY ((FIT_MESG_NUM)34)
81
+ #define FIT_MESG_NUM_SOFTWARE ((FIT_MESG_NUM)35)
82
+ #define FIT_MESG_NUM_FILE_CAPABILITIES ((FIT_MESG_NUM)37)
83
+ #define FIT_MESG_NUM_MESG_CAPABILITIES ((FIT_MESG_NUM)38)
84
+ #define FIT_MESG_NUM_FIELD_CAPABILITIES ((FIT_MESG_NUM)39)
85
+ #define FIT_MESG_NUM_FILE_CREATOR ((FIT_MESG_NUM)49)
86
+ #define FIT_MESG_NUM_SPEED_ZONE ((FIT_MESG_NUM)53)
87
+ #define FIT_MESG_NUM_COUNT 29
88
+
89
+ typedef FIT_UINT8Z FIT_FILE_FLAGS;
90
+ #define FIT_FILE_FLAGS_INVALID FIT_UINT8Z_INVALID
91
+ #define FIT_FILE_FLAGS_READ ((FIT_FILE_FLAGS)0x02)
92
+ #define FIT_FILE_FLAGS_WRITE ((FIT_FILE_FLAGS)0x04)
93
+ #define FIT_FILE_FLAGS_ERASE ((FIT_FILE_FLAGS)0x08)
94
+ #define FIT_FILE_FLAGS_COUNT 3
95
+
96
+ typedef FIT_ENUM FIT_MESG_COUNT;
97
+ #define FIT_MESG_COUNT_INVALID FIT_ENUM_INVALID
98
+ #define FIT_MESG_COUNT_NUM_PER_FILE ((FIT_MESG_COUNT)0)
99
+ #define FIT_MESG_COUNT_MAX_PER_FILE ((FIT_MESG_COUNT)1)
100
+ #define FIT_MESG_COUNT_MAX_PER_FILE_TYPE ((FIT_MESG_COUNT)2)
101
+ #define FIT_MESG_COUNT_COUNT 3
102
+
103
+ typedef FIT_UINT32 FIT_DATE_TIME; // seconds since UTC 00:00 Dec 31 1989
104
+ #define FIT_DATE_TIME_INVALID FIT_UINT32_INVALID
105
+ #define FIT_DATE_TIME_MIN ((FIT_DATE_TIME)0x10000000) // if date_time is < 0x10000000 then it is system time (seconds from device power on)
106
+ #define FIT_DATE_TIME_COUNT 1
107
+
108
+ typedef FIT_UINT16 FIT_MESSAGE_INDEX;
109
+ #define FIT_MESSAGE_INDEX_INVALID FIT_UINT16_INVALID
110
+ #define FIT_MESSAGE_INDEX_CURRENT ((FIT_MESSAGE_INDEX)0x8000) // message selected as current if set
111
+ #define FIT_MESSAGE_INDEX_RESERVED ((FIT_MESSAGE_INDEX)0x7000) // reserved (default 0)
112
+ #define FIT_MESSAGE_INDEX_MASK ((FIT_MESSAGE_INDEX)0x0FFF) // index
113
+ #define FIT_MESSAGE_INDEX_COUNT 3
114
+
115
+ typedef FIT_UINT8 FIT_DEVICE_INDEX;
116
+ #define FIT_DEVICE_INDEX_INVALID FIT_UINT8_INVALID
117
+ #define FIT_DEVICE_INDEX_CREATOR ((FIT_DEVICE_INDEX)0) // Creator of the file is always device index 0.
118
+ #define FIT_DEVICE_INDEX_COUNT 1
119
+
120
+ typedef FIT_ENUM FIT_GENDER;
121
+ #define FIT_GENDER_INVALID FIT_ENUM_INVALID
122
+ #define FIT_GENDER_FEMALE ((FIT_GENDER)0)
123
+ #define FIT_GENDER_MALE ((FIT_GENDER)1)
124
+ #define FIT_GENDER_COUNT 2
125
+
126
+ typedef FIT_ENUM FIT_LANGUAGE;
127
+ #define FIT_LANGUAGE_INVALID FIT_ENUM_INVALID
128
+ #define FIT_LANGUAGE_ENGLISH ((FIT_LANGUAGE)0)
129
+ #define FIT_LANGUAGE_FRENCH ((FIT_LANGUAGE)1)
130
+ #define FIT_LANGUAGE_ITALIAN ((FIT_LANGUAGE)2)
131
+ #define FIT_LANGUAGE_GERMAN ((FIT_LANGUAGE)3)
132
+ #define FIT_LANGUAGE_SPANISH ((FIT_LANGUAGE)4)
133
+ #define FIT_LANGUAGE_CROATIAN ((FIT_LANGUAGE)5)
134
+ #define FIT_LANGUAGE_CZECH ((FIT_LANGUAGE)6)
135
+ #define FIT_LANGUAGE_DANISH ((FIT_LANGUAGE)7)
136
+ #define FIT_LANGUAGE_DUTCH ((FIT_LANGUAGE)8)
137
+ #define FIT_LANGUAGE_FINNISH ((FIT_LANGUAGE)9)
138
+ #define FIT_LANGUAGE_GREEK ((FIT_LANGUAGE)10)
139
+ #define FIT_LANGUAGE_HUNGARIAN ((FIT_LANGUAGE)11)
140
+ #define FIT_LANGUAGE_NORWEGIAN ((FIT_LANGUAGE)12)
141
+ #define FIT_LANGUAGE_POLISH ((FIT_LANGUAGE)13)
142
+ #define FIT_LANGUAGE_PORTUGUESE ((FIT_LANGUAGE)14)
143
+ #define FIT_LANGUAGE_SLOVAKIAN ((FIT_LANGUAGE)15)
144
+ #define FIT_LANGUAGE_SLOVENIAN ((FIT_LANGUAGE)16)
145
+ #define FIT_LANGUAGE_SWEDISH ((FIT_LANGUAGE)17)
146
+ #define FIT_LANGUAGE_RUSSIAN ((FIT_LANGUAGE)18)
147
+ #define FIT_LANGUAGE_CUSTOM ((FIT_LANGUAGE)254)
148
+ #define FIT_LANGUAGE_COUNT 20
149
+
150
+ typedef FIT_ENUM FIT_DISPLAY_MEASURE;
151
+ #define FIT_DISPLAY_MEASURE_INVALID FIT_ENUM_INVALID
152
+ #define FIT_DISPLAY_MEASURE_METRIC ((FIT_DISPLAY_MEASURE)0)
153
+ #define FIT_DISPLAY_MEASURE_STATUTE ((FIT_DISPLAY_MEASURE)1)
154
+ #define FIT_DISPLAY_MEASURE_COUNT 2
155
+
156
+ typedef FIT_ENUM FIT_DISPLAY_HEART;
157
+ #define FIT_DISPLAY_HEART_INVALID FIT_ENUM_INVALID
158
+ #define FIT_DISPLAY_HEART_BPM ((FIT_DISPLAY_HEART)0)
159
+ #define FIT_DISPLAY_HEART_MAX ((FIT_DISPLAY_HEART)1)
160
+ #define FIT_DISPLAY_HEART_RESERVE ((FIT_DISPLAY_HEART)2)
161
+ #define FIT_DISPLAY_HEART_COUNT 3
162
+
163
+ typedef FIT_ENUM FIT_DISPLAY_POWER;
164
+ #define FIT_DISPLAY_POWER_INVALID FIT_ENUM_INVALID
165
+ #define FIT_DISPLAY_POWER_WATTS ((FIT_DISPLAY_POWER)0)
166
+ #define FIT_DISPLAY_POWER_PERCENT_FTP ((FIT_DISPLAY_POWER)1)
167
+ #define FIT_DISPLAY_POWER_COUNT 2
168
+
169
+ typedef FIT_ENUM FIT_DISPLAY_POSITION;
170
+ #define FIT_DISPLAY_POSITION_INVALID FIT_ENUM_INVALID
171
+ #define FIT_DISPLAY_POSITION_DEGREE ((FIT_DISPLAY_POSITION)0) // dd.dddddd
172
+ #define FIT_DISPLAY_POSITION_DEGREE_MINUTE ((FIT_DISPLAY_POSITION)1) // dddmm.mmm
173
+ #define FIT_DISPLAY_POSITION_DEGREE_MINUTE_SECOND ((FIT_DISPLAY_POSITION)2) // dddmmss
174
+ #define FIT_DISPLAY_POSITION_AUSTRIAN_GRID ((FIT_DISPLAY_POSITION)3) // Austrian Grid (BMN)
175
+ #define FIT_DISPLAY_POSITION_BRITISH_GRID ((FIT_DISPLAY_POSITION)4) // British National Grid
176
+ #define FIT_DISPLAY_POSITION_DUTCH_GRID ((FIT_DISPLAY_POSITION)5) // Dutch grid system
177
+ #define FIT_DISPLAY_POSITION_HUNGARIAN_GRID ((FIT_DISPLAY_POSITION)6) // Hungarian grid system
178
+ #define FIT_DISPLAY_POSITION_FINNISH_GRID ((FIT_DISPLAY_POSITION)7) // Finnish grid system Zone3 KKJ27
179
+ #define FIT_DISPLAY_POSITION_GERMAN_GRID ((FIT_DISPLAY_POSITION)8) // Gausss Krueger (German)
180
+ #define FIT_DISPLAY_POSITION_ICELANDIC_GRID ((FIT_DISPLAY_POSITION)9) // Icelandic Grid
181
+ #define FIT_DISPLAY_POSITION_INDONESIAN_EQUATORIAL ((FIT_DISPLAY_POSITION)10) // Indonesian Equatorial LCO
182
+ #define FIT_DISPLAY_POSITION_INDONESIAN_IRIAN ((FIT_DISPLAY_POSITION)11) // Indonesian Irian LCO
183
+ #define FIT_DISPLAY_POSITION_INDONESIAN_SOUTHERN ((FIT_DISPLAY_POSITION)12) // Indonesian Southern LCO
184
+ #define FIT_DISPLAY_POSITION_INDIA_ZONE_0 ((FIT_DISPLAY_POSITION)13) // India zone 0
185
+ #define FIT_DISPLAY_POSITION_INDIA_ZONE_IA ((FIT_DISPLAY_POSITION)14) // India zone IA
186
+ #define FIT_DISPLAY_POSITION_INDIA_ZONE_IB ((FIT_DISPLAY_POSITION)15) // India zone IB
187
+ #define FIT_DISPLAY_POSITION_INDIA_ZONE_IIA ((FIT_DISPLAY_POSITION)16) // India zone IIA
188
+ #define FIT_DISPLAY_POSITION_INDIA_ZONE_IIB ((FIT_DISPLAY_POSITION)17) // India zone IIB
189
+ #define FIT_DISPLAY_POSITION_INDIA_ZONE_IIIA ((FIT_DISPLAY_POSITION)18) // India zone IIIA
190
+ #define FIT_DISPLAY_POSITION_INDIA_ZONE_IIIB ((FIT_DISPLAY_POSITION)19) // India zone IIIB
191
+ #define FIT_DISPLAY_POSITION_INDIA_ZONE_IVA ((FIT_DISPLAY_POSITION)20) // India zone IVA
192
+ #define FIT_DISPLAY_POSITION_INDIA_ZONE_IVB ((FIT_DISPLAY_POSITION)21) // India zone IVB
193
+ #define FIT_DISPLAY_POSITION_IRISH_TRANSVERSE ((FIT_DISPLAY_POSITION)22) // Irish Transverse Mercator
194
+ #define FIT_DISPLAY_POSITION_IRISH_GRID ((FIT_DISPLAY_POSITION)23) // Irish Grid
195
+ #define FIT_DISPLAY_POSITION_LORAN ((FIT_DISPLAY_POSITION)24) // Loran TD
196
+ #define FIT_DISPLAY_POSITION_MAIDENHEAD_GRID ((FIT_DISPLAY_POSITION)25) // Maidenhead grid system
197
+ #define FIT_DISPLAY_POSITION_MGRS_GRID ((FIT_DISPLAY_POSITION)26) // MGRS grid system
198
+ #define FIT_DISPLAY_POSITION_NEW_ZEALAND_GRID ((FIT_DISPLAY_POSITION)27) // New Zealand grid system
199
+ #define FIT_DISPLAY_POSITION_NEW_ZEALAND_TRANSVERSE ((FIT_DISPLAY_POSITION)28) // New Zealand Transverse Mercator
200
+ #define FIT_DISPLAY_POSITION_QATAR_GRID ((FIT_DISPLAY_POSITION)29) // Qatar National Grid
201
+ #define FIT_DISPLAY_POSITION_MODIFIED_SWEDISH_GRID ((FIT_DISPLAY_POSITION)30) // Modified RT-90 (Sweden)
202
+ #define FIT_DISPLAY_POSITION_SWEDISH_GRID ((FIT_DISPLAY_POSITION)31) // RT-90 (Sweden)
203
+ #define FIT_DISPLAY_POSITION_SOUTH_AFRICAN_GRID ((FIT_DISPLAY_POSITION)32) // South African Grid
204
+ #define FIT_DISPLAY_POSITION_SWISS_GRID ((FIT_DISPLAY_POSITION)33) // Swiss CH-1903 grid
205
+ #define FIT_DISPLAY_POSITION_TAIWAN_GRID ((FIT_DISPLAY_POSITION)34) // Taiwan Grid
206
+ #define FIT_DISPLAY_POSITION_UNITED_STATES_GRID ((FIT_DISPLAY_POSITION)35) // United States National Grid
207
+ #define FIT_DISPLAY_POSITION_UTM_UPS_GRID ((FIT_DISPLAY_POSITION)36) // UTM/UPS grid system
208
+ #define FIT_DISPLAY_POSITION_WEST_MALAYAN ((FIT_DISPLAY_POSITION)37) // West Malayan RSO
209
+ #define FIT_DISPLAY_POSITION_COUNT 38
210
+
211
+ typedef FIT_ENUM FIT_SPORT;
212
+ #define FIT_SPORT_INVALID FIT_ENUM_INVALID
213
+ #define FIT_SPORT_GENERIC ((FIT_SPORT)0)
214
+ #define FIT_SPORT_RUNNING ((FIT_SPORT)1)
215
+ #define FIT_SPORT_CYCLING ((FIT_SPORT)2)
216
+ #define FIT_SPORT_TRANSITION ((FIT_SPORT)3) // Mulitsport transition
217
+ #define FIT_SPORT_FITNESS_EQUIPMENT ((FIT_SPORT)4)
218
+ #define FIT_SPORT_SWIMMING ((FIT_SPORT)5)
219
+ #define FIT_SPORT_ALL ((FIT_SPORT)254) // All is for goals only to include all sports.
220
+ #define FIT_SPORT_COUNT 7
221
+
222
+ typedef FIT_ENUM FIT_SUB_SPORT;
223
+ #define FIT_SUB_SPORT_INVALID FIT_ENUM_INVALID
224
+ #define FIT_SUB_SPORT_GENERIC ((FIT_SUB_SPORT)0)
225
+ #define FIT_SUB_SPORT_TREADMILL ((FIT_SUB_SPORT)1) // Run
226
+ #define FIT_SUB_SPORT_STREET ((FIT_SUB_SPORT)2) // Run
227
+ #define FIT_SUB_SPORT_TRAIL ((FIT_SUB_SPORT)3) // Run
228
+ #define FIT_SUB_SPORT_TRACK ((FIT_SUB_SPORT)4) // Run
229
+ #define FIT_SUB_SPORT_SPIN ((FIT_SUB_SPORT)5) // Cycling
230
+ #define FIT_SUB_SPORT_INDOOR_CYCLING ((FIT_SUB_SPORT)6) // Cycling
231
+ #define FIT_SUB_SPORT_ROAD ((FIT_SUB_SPORT)7) // Cycling
232
+ #define FIT_SUB_SPORT_MOUNTAIN ((FIT_SUB_SPORT)8) // Cycling
233
+ #define FIT_SUB_SPORT_DOWNHILL ((FIT_SUB_SPORT)9) // Cycling
234
+ #define FIT_SUB_SPORT_RECUMBENT ((FIT_SUB_SPORT)10) // Cycling
235
+ #define FIT_SUB_SPORT_CYCLOCROSS ((FIT_SUB_SPORT)11) // Cycling
236
+ #define FIT_SUB_SPORT_HAND_CYCLING ((FIT_SUB_SPORT)12) // Cycling
237
+ #define FIT_SUB_SPORT_TRACK_CYCLING ((FIT_SUB_SPORT)13) // Cycling
238
+ #define FIT_SUB_SPORT_INDOOR_ROWING ((FIT_SUB_SPORT)14) // Fitness Equipment
239
+ #define FIT_SUB_SPORT_ELLIPTICAL ((FIT_SUB_SPORT)15) // Fitness Equipment
240
+ #define FIT_SUB_SPORT_STAIR_CLIMBING ((FIT_SUB_SPORT)16) // Fitness Equipment
241
+ #define FIT_SUB_SPORT_LAP_SWIMMING ((FIT_SUB_SPORT)17) // Swimming
242
+ #define FIT_SUB_SPORT_OPEN_WATER ((FIT_SUB_SPORT)18) // Swimming
243
+ #define FIT_SUB_SPORT_ALL ((FIT_SUB_SPORT)254)
244
+ #define FIT_SUB_SPORT_COUNT 20
245
+
246
+ typedef FIT_ENUM FIT_ACTIVITY;
247
+ #define FIT_ACTIVITY_INVALID FIT_ENUM_INVALID
248
+ #define FIT_ACTIVITY_MANUAL ((FIT_ACTIVITY)0)
249
+ #define FIT_ACTIVITY_AUTO_MULTI_SPORT ((FIT_ACTIVITY)1)
250
+ #define FIT_ACTIVITY_COUNT 2
251
+
252
+ typedef FIT_ENUM FIT_INTENSITY;
253
+ #define FIT_INTENSITY_INVALID FIT_ENUM_INVALID
254
+ #define FIT_INTENSITY_ACTIVE ((FIT_INTENSITY)0)
255
+ #define FIT_INTENSITY_REST ((FIT_INTENSITY)1)
256
+ #define FIT_INTENSITY_WARMUP ((FIT_INTENSITY)2)
257
+ #define FIT_INTENSITY_COOLDOWN ((FIT_INTENSITY)3)
258
+ #define FIT_INTENSITY_COUNT 4
259
+
260
+ typedef FIT_ENUM FIT_SESSION_TRIGGER;
261
+ #define FIT_SESSION_TRIGGER_INVALID FIT_ENUM_INVALID
262
+ #define FIT_SESSION_TRIGGER_ACTIVITY_END ((FIT_SESSION_TRIGGER)0)
263
+ #define FIT_SESSION_TRIGGER_MANUAL ((FIT_SESSION_TRIGGER)1) // User changed sport.
264
+ #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.
265
+ #define FIT_SESSION_TRIGGER_FITNESS_EQUIPMENT ((FIT_SESSION_TRIGGER)3) // Auto sport change caused by user linking to fitness equipment.
266
+ #define FIT_SESSION_TRIGGER_COUNT 4
267
+
268
+ typedef FIT_ENUM FIT_LAP_TRIGGER;
269
+ #define FIT_LAP_TRIGGER_INVALID FIT_ENUM_INVALID
270
+ #define FIT_LAP_TRIGGER_MANUAL ((FIT_LAP_TRIGGER)0)
271
+ #define FIT_LAP_TRIGGER_TIME ((FIT_LAP_TRIGGER)1)
272
+ #define FIT_LAP_TRIGGER_DISTANCE ((FIT_LAP_TRIGGER)2)
273
+ #define FIT_LAP_TRIGGER_POSITION_START ((FIT_LAP_TRIGGER)3)
274
+ #define FIT_LAP_TRIGGER_POSITION_LAP ((FIT_LAP_TRIGGER)4)
275
+ #define FIT_LAP_TRIGGER_POSITION_WAYPOINT ((FIT_LAP_TRIGGER)5)
276
+ #define FIT_LAP_TRIGGER_POSITION_MARKED ((FIT_LAP_TRIGGER)6)
277
+ #define FIT_LAP_TRIGGER_SESSION_END ((FIT_LAP_TRIGGER)7)
278
+ #define FIT_LAP_TRIGGER_FITNESS_EQUIPMENT ((FIT_LAP_TRIGGER)8)
279
+ #define FIT_LAP_TRIGGER_COUNT 9
280
+
281
+ typedef FIT_ENUM FIT_EVENT;
282
+ #define FIT_EVENT_INVALID FIT_ENUM_INVALID
283
+ #define FIT_EVENT_TIMER ((FIT_EVENT)0) // Group 0. Start / stop_all
284
+ #define FIT_EVENT_WORKOUT ((FIT_EVENT)3) // start / stop
285
+ #define FIT_EVENT_WORKOUT_STEP ((FIT_EVENT)4) // Start at beginning of workout. Stop at end of each step.
286
+ #define FIT_EVENT_POWER_DOWN ((FIT_EVENT)5) // stop_all group 0
287
+ #define FIT_EVENT_POWER_UP ((FIT_EVENT)6) // stop_all group 0
288
+ #define FIT_EVENT_OFF_COURSE ((FIT_EVENT)7) // start / stop group 0
289
+ #define FIT_EVENT_SESSION ((FIT_EVENT)8) // Stop at end of each session.
290
+ #define FIT_EVENT_LAP ((FIT_EVENT)9) // Stop at end of each lap.
291
+ #define FIT_EVENT_COURSE_POINT ((FIT_EVENT)10) // marker
292
+ #define FIT_EVENT_BATTERY ((FIT_EVENT)11) // marker
293
+ #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.
294
+ #define FIT_EVENT_HR_HIGH_ALERT ((FIT_EVENT)13) // Group 0. Start / stop when in alert condition.
295
+ #define FIT_EVENT_HR_LOW_ALERT ((FIT_EVENT)14) // Group 0. Start / stop when in alert condition.
296
+ #define FIT_EVENT_SPEED_HIGH_ALERT ((FIT_EVENT)15) // Group 0. Start / stop when in alert condition.
297
+ #define FIT_EVENT_SPEED_LOW_ALERT ((FIT_EVENT)16) // Group 0. Start / stop when in alert condition.
298
+ #define FIT_EVENT_CAD_HIGH_ALERT ((FIT_EVENT)17) // Group 0. Start / stop when in alert condition.
299
+ #define FIT_EVENT_CAD_LOW_ALERT ((FIT_EVENT)18) // Group 0. Start / stop when in alert condition.
300
+ #define FIT_EVENT_POWER_HIGH_ALERT ((FIT_EVENT)19) // Group 0. Start / stop when in alert condition.
301
+ #define FIT_EVENT_POWER_LOW_ALERT ((FIT_EVENT)20) // Group 0. Start / stop when in alert condition.
302
+ #define FIT_EVENT_RECOVERY_HR ((FIT_EVENT)21) // marker
303
+ #define FIT_EVENT_BATTERY_LOW ((FIT_EVENT)22) // marker
304
+ #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.
305
+ #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.
306
+ #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.
307
+ #define FIT_EVENT_ACTIVITY ((FIT_EVENT)26) // Group 1.. Stop at end of activity.
308
+ #define FIT_EVENT_FITNESS_EQUIPMENT ((FIT_EVENT)27) // marker
309
+ #define FIT_EVENT_COUNT 26
310
+
311
+ typedef FIT_ENUM FIT_EVENT_TYPE;
312
+ #define FIT_EVENT_TYPE_INVALID FIT_ENUM_INVALID
313
+ #define FIT_EVENT_TYPE_START ((FIT_EVENT_TYPE)0)
314
+ #define FIT_EVENT_TYPE_STOP ((FIT_EVENT_TYPE)1)
315
+ #define FIT_EVENT_TYPE_CONSECUTIVE_DEPRECIATED ((FIT_EVENT_TYPE)2)
316
+ #define FIT_EVENT_TYPE_MARKER ((FIT_EVENT_TYPE)3)
317
+ #define FIT_EVENT_TYPE_STOP_ALL ((FIT_EVENT_TYPE)4)
318
+ #define FIT_EVENT_TYPE_BEGIN_DEPRECIATED ((FIT_EVENT_TYPE)5)
319
+ #define FIT_EVENT_TYPE_END_DEPRECIATED ((FIT_EVENT_TYPE)6)
320
+ #define FIT_EVENT_TYPE_END_ALL_DEPRECIATED ((FIT_EVENT_TYPE)7)
321
+ #define FIT_EVENT_TYPE_STOP_DISABLE ((FIT_EVENT_TYPE)8)
322
+ #define FIT_EVENT_TYPE_STOP_DISABLE_ALL ((FIT_EVENT_TYPE)9)
323
+ #define FIT_EVENT_TYPE_COUNT 10
324
+
325
+ typedef FIT_ENUM FIT_TIMER_TRIGGER; // timer event data
326
+ #define FIT_TIMER_TRIGGER_INVALID FIT_ENUM_INVALID
327
+ #define FIT_TIMER_TRIGGER_MANUAL ((FIT_TIMER_TRIGGER)0)
328
+ #define FIT_TIMER_TRIGGER_AUTO ((FIT_TIMER_TRIGGER)1)
329
+ #define FIT_TIMER_TRIGGER_FITNESS_EQUIPMENT ((FIT_TIMER_TRIGGER)2)
330
+ #define FIT_TIMER_TRIGGER_COUNT 3
331
+
332
+ typedef FIT_ENUM FIT_FITNESS_EQUIPMENT_STATE; // fitness equipment event data
333
+ #define FIT_FITNESS_EQUIPMENT_STATE_INVALID FIT_ENUM_INVALID
334
+ #define FIT_FITNESS_EQUIPMENT_STATE_READY ((FIT_FITNESS_EQUIPMENT_STATE)0)
335
+ #define FIT_FITNESS_EQUIPMENT_STATE_IN_USE ((FIT_FITNESS_EQUIPMENT_STATE)1)
336
+ #define FIT_FITNESS_EQUIPMENT_STATE_PAUSED ((FIT_FITNESS_EQUIPMENT_STATE)2)
337
+ #define FIT_FITNESS_EQUIPMENT_STATE_UNKNOWN ((FIT_FITNESS_EQUIPMENT_STATE)3) // lost connection to fitness equipment
338
+ #define FIT_FITNESS_EQUIPMENT_STATE_COUNT 4
339
+
340
+ typedef FIT_ENUM FIT_ACTIVITY_CLASS;
341
+ #define FIT_ACTIVITY_CLASS_INVALID FIT_ENUM_INVALID
342
+ #define FIT_ACTIVITY_CLASS_LEVEL ((FIT_ACTIVITY_CLASS)0x7F) // 0 to 100
343
+ #define FIT_ACTIVITY_CLASS_LEVEL_MAX ((FIT_ACTIVITY_CLASS)100)
344
+ #define FIT_ACTIVITY_CLASS_ATHLETE ((FIT_ACTIVITY_CLASS)0x80)
345
+ #define FIT_ACTIVITY_CLASS_COUNT 3
346
+
347
+ typedef FIT_ENUM FIT_HR_ZONE_CALC;
348
+ #define FIT_HR_ZONE_CALC_INVALID FIT_ENUM_INVALID
349
+ #define FIT_HR_ZONE_CALC_CUSTOM ((FIT_HR_ZONE_CALC)0)
350
+ #define FIT_HR_ZONE_CALC_PERCENT_MAX_HR ((FIT_HR_ZONE_CALC)1)
351
+ #define FIT_HR_ZONE_CALC_PERCENT_HRR ((FIT_HR_ZONE_CALC)2)
352
+ #define FIT_HR_ZONE_CALC_COUNT 3
353
+
354
+ typedef FIT_ENUM FIT_PWR_ZONE_CALC;
355
+ #define FIT_PWR_ZONE_CALC_INVALID FIT_ENUM_INVALID
356
+ #define FIT_PWR_ZONE_CALC_CUSTOM ((FIT_PWR_ZONE_CALC)0)
357
+ #define FIT_PWR_ZONE_CALC_PERCENT_FTP ((FIT_PWR_ZONE_CALC)1)
358
+ #define FIT_PWR_ZONE_CALC_COUNT 2
359
+
360
+ typedef FIT_ENUM FIT_WKT_STEP_DURATION;
361
+ #define FIT_WKT_STEP_DURATION_INVALID FIT_ENUM_INVALID
362
+ #define FIT_WKT_STEP_DURATION_TIME ((FIT_WKT_STEP_DURATION)0)
363
+ #define FIT_WKT_STEP_DURATION_DISTANCE ((FIT_WKT_STEP_DURATION)1)
364
+ #define FIT_WKT_STEP_DURATION_HR_LESS_THAN ((FIT_WKT_STEP_DURATION)2)
365
+ #define FIT_WKT_STEP_DURATION_HR_GREATER_THAN ((FIT_WKT_STEP_DURATION)3)
366
+ #define FIT_WKT_STEP_DURATION_CALORIES ((FIT_WKT_STEP_DURATION)4)
367
+ #define FIT_WKT_STEP_DURATION_OPEN ((FIT_WKT_STEP_DURATION)5)
368
+ #define FIT_WKT_STEP_DURATION_REPEAT_UNTIL_STEPS_CMPLT ((FIT_WKT_STEP_DURATION)6)
369
+ #define FIT_WKT_STEP_DURATION_REPEAT_UNTIL_TIME ((FIT_WKT_STEP_DURATION)7)
370
+ #define FIT_WKT_STEP_DURATION_REPEAT_UNTIL_DISTANCE ((FIT_WKT_STEP_DURATION)8)
371
+ #define FIT_WKT_STEP_DURATION_REPEAT_UNTIL_CALORIES ((FIT_WKT_STEP_DURATION)9)
372
+ #define FIT_WKT_STEP_DURATION_REPEAT_UNTIL_HR_LESS_THAN ((FIT_WKT_STEP_DURATION)10)
373
+ #define FIT_WKT_STEP_DURATION_REPEAT_UNTIL_HR_GREATER_THAN ((FIT_WKT_STEP_DURATION)11)
374
+ #define FIT_WKT_STEP_DURATION_REPEAT_UNTIL_POWER_LESS_THAN ((FIT_WKT_STEP_DURATION)12)
375
+ #define FIT_WKT_STEP_DURATION_REPEAT_UNTIL_POWER_GREATER_THAN ((FIT_WKT_STEP_DURATION)13)
376
+ #define FIT_WKT_STEP_DURATION_POWER_LESS_THAN ((FIT_WKT_STEP_DURATION)14)
377
+ #define FIT_WKT_STEP_DURATION_POWER_GREATER_THAN ((FIT_WKT_STEP_DURATION)15)
378
+ #define FIT_WKT_STEP_DURATION_COUNT 16
379
+
380
+ typedef FIT_ENUM FIT_WKT_STEP_TARGET;
381
+ #define FIT_WKT_STEP_TARGET_INVALID FIT_ENUM_INVALID
382
+ #define FIT_WKT_STEP_TARGET_SPEED ((FIT_WKT_STEP_TARGET)0)
383
+ #define FIT_WKT_STEP_TARGET_HEART_RATE ((FIT_WKT_STEP_TARGET)1)
384
+ #define FIT_WKT_STEP_TARGET_OPEN ((FIT_WKT_STEP_TARGET)2)
385
+ #define FIT_WKT_STEP_TARGET_CADENCE ((FIT_WKT_STEP_TARGET)3)
386
+ #define FIT_WKT_STEP_TARGET_POWER ((FIT_WKT_STEP_TARGET)4)
387
+ #define FIT_WKT_STEP_TARGET_GRADE ((FIT_WKT_STEP_TARGET)5)
388
+ #define FIT_WKT_STEP_TARGET_RESISTANCE ((FIT_WKT_STEP_TARGET)6)
389
+ #define FIT_WKT_STEP_TARGET_COUNT 7
390
+
391
+ typedef FIT_ENUM FIT_SCHEDULE;
392
+ #define FIT_SCHEDULE_INVALID FIT_ENUM_INVALID
393
+ #define FIT_SCHEDULE_WORKOUT ((FIT_SCHEDULE)0)
394
+ #define FIT_SCHEDULE_COURSE ((FIT_SCHEDULE)1)
395
+ #define FIT_SCHEDULE_COUNT 2
396
+
397
+ typedef FIT_ENUM FIT_COURSE_POINT;
398
+ #define FIT_COURSE_POINT_INVALID FIT_ENUM_INVALID
399
+ #define FIT_COURSE_POINT_GENERIC ((FIT_COURSE_POINT)0)
400
+ #define FIT_COURSE_POINT_SUMMIT ((FIT_COURSE_POINT)1)
401
+ #define FIT_COURSE_POINT_VALLEY ((FIT_COURSE_POINT)2)
402
+ #define FIT_COURSE_POINT_WATER ((FIT_COURSE_POINT)3)
403
+ #define FIT_COURSE_POINT_FOOD ((FIT_COURSE_POINT)4)
404
+ #define FIT_COURSE_POINT_DANGER ((FIT_COURSE_POINT)5)
405
+ #define FIT_COURSE_POINT_LEFT ((FIT_COURSE_POINT)6)
406
+ #define FIT_COURSE_POINT_RIGHT ((FIT_COURSE_POINT)7)
407
+ #define FIT_COURSE_POINT_STRAIGHT ((FIT_COURSE_POINT)8)
408
+ #define FIT_COURSE_POINT_FIRST_AID ((FIT_COURSE_POINT)9)
409
+ #define FIT_COURSE_POINT_FOURTH_CATEGORY ((FIT_COURSE_POINT)10)
410
+ #define FIT_COURSE_POINT_THIRD_CATEGORY ((FIT_COURSE_POINT)11)
411
+ #define FIT_COURSE_POINT_SECOND_CATEGORY ((FIT_COURSE_POINT)12)
412
+ #define FIT_COURSE_POINT_FIRST_CATEGORY ((FIT_COURSE_POINT)13)
413
+ #define FIT_COURSE_POINT_HORS_CATEGORY ((FIT_COURSE_POINT)14)
414
+ #define FIT_COURSE_POINT_SPRINT ((FIT_COURSE_POINT)15)
415
+ #define FIT_COURSE_POINT_LEFT_FORK ((FIT_COURSE_POINT)16)
416
+ #define FIT_COURSE_POINT_RIGHT_FORK ((FIT_COURSE_POINT)17)
417
+ #define FIT_COURSE_POINT_MIDDLE_FORK ((FIT_COURSE_POINT)18)
418
+ #define FIT_COURSE_POINT_COUNT 19
419
+
420
+ typedef FIT_UINT16 FIT_MANUFACTURER;
421
+ #define FIT_MANUFACTURER_INVALID FIT_UINT16_INVALID
422
+ #define FIT_MANUFACTURER_GARMIN ((FIT_MANUFACTURER)1)
423
+ #define FIT_MANUFACTURER_GARMIN_FR405_ANTFS ((FIT_MANUFACTURER)2) // Do not use. Used by FR405 for ANTFS man id.
424
+ #define FIT_MANUFACTURER_ZEPHYR ((FIT_MANUFACTURER)3)
425
+ #define FIT_MANUFACTURER_DAYTON ((FIT_MANUFACTURER)4)
426
+ #define FIT_MANUFACTURER_IDT ((FIT_MANUFACTURER)5)
427
+ #define FIT_MANUFACTURER_SRM ((FIT_MANUFACTURER)6)
428
+ #define FIT_MANUFACTURER_QUARQ ((FIT_MANUFACTURER)7)
429
+ #define FIT_MANUFACTURER_IBIKE ((FIT_MANUFACTURER)8)
430
+ #define FIT_MANUFACTURER_SARIS ((FIT_MANUFACTURER)9)
431
+ #define FIT_MANUFACTURER_SPARK_HK ((FIT_MANUFACTURER)10)
432
+ #define FIT_MANUFACTURER_TANITA ((FIT_MANUFACTURER)11)
433
+ #define FIT_MANUFACTURER_ECHOWELL ((FIT_MANUFACTURER)12)
434
+ #define FIT_MANUFACTURER_DYNASTREAM_OEM ((FIT_MANUFACTURER)13)
435
+ #define FIT_MANUFACTURER_NAUTILUS ((FIT_MANUFACTURER)14)
436
+ #define FIT_MANUFACTURER_DYNASTREAM ((FIT_MANUFACTURER)15)
437
+ #define FIT_MANUFACTURER_COUNT 15
438
+
439
+ typedef FIT_UINT16 FIT_GARMIN_PRODUCT;
440
+ #define FIT_GARMIN_PRODUCT_INVALID FIT_UINT16_INVALID
441
+ #define FIT_GARMIN_PRODUCT_HRM_BIKE ((FIT_GARMIN_PRODUCT)0) // 0-255 reserved for HRM / Bike devices with 1 byte product id.
442
+ #define FIT_GARMIN_PRODUCT_HRM1 ((FIT_GARMIN_PRODUCT)1)
443
+ #define FIT_GARMIN_PRODUCT_AXH01 ((FIT_GARMIN_PRODUCT)2) // AXH01 HRM chipset
444
+ #define FIT_GARMIN_PRODUCT_AXB01 ((FIT_GARMIN_PRODUCT)3)
445
+ #define FIT_GARMIN_PRODUCT_AXB02 ((FIT_GARMIN_PRODUCT)4)
446
+ #define FIT_GARMIN_PRODUCT_HRM2SS ((FIT_GARMIN_PRODUCT)5)
447
+ #define FIT_GARMIN_PRODUCT_FR405 ((FIT_GARMIN_PRODUCT)717) // Forerunner 405
448
+ #define FIT_GARMIN_PRODUCT_FR50 ((FIT_GARMIN_PRODUCT)782) // Forerunner 50
449
+ #define FIT_GARMIN_PRODUCT_FR60 ((FIT_GARMIN_PRODUCT)988) // Forerunner 60
450
+ #define FIT_GARMIN_PRODUCT_FR310XT ((FIT_GARMIN_PRODUCT)1018) // Forerunner 310
451
+ #define FIT_GARMIN_PRODUCT_EDGE500 ((FIT_GARMIN_PRODUCT)1036)
452
+ #define FIT_GARMIN_PRODUCT_SDM4 ((FIT_GARMIN_PRODUCT)10007) // SDM4 footpod
453
+ #define FIT_GARMIN_PRODUCT_TRAINING_CENTER ((FIT_GARMIN_PRODUCT)20119)
454
+ #define FIT_GARMIN_PRODUCT_CONNECT ((FIT_GARMIN_PRODUCT)65534) // Garmin Connect website
455
+ #define FIT_GARMIN_PRODUCT_COUNT 14
456
+
457
+ typedef FIT_UINT8 FIT_DEVICE_TYPE;
458
+ #define FIT_DEVICE_TYPE_INVALID FIT_UINT8_INVALID
459
+ #define FIT_DEVICE_TYPE_ANTFS ((FIT_DEVICE_TYPE)1)
460
+ #define FIT_DEVICE_TYPE_BIKE_POWER ((FIT_DEVICE_TYPE)11)
461
+ #define FIT_DEVICE_TYPE_ENVIRONMENT_SENSOR ((FIT_DEVICE_TYPE)12)
462
+ #define FIT_DEVICE_TYPE_FITNESS_EQUIPMENT ((FIT_DEVICE_TYPE)17)
463
+ #define FIT_DEVICE_TYPE_WEIGHT_SCALE ((FIT_DEVICE_TYPE)119)
464
+ #define FIT_DEVICE_TYPE_HRM ((FIT_DEVICE_TYPE)120)
465
+ #define FIT_DEVICE_TYPE_BIKE_SPEED_CADENCE ((FIT_DEVICE_TYPE)121)
466
+ #define FIT_DEVICE_TYPE_BIKE_CADENCE ((FIT_DEVICE_TYPE)122)
467
+ #define FIT_DEVICE_TYPE_BIKE_SPEED ((FIT_DEVICE_TYPE)123)
468
+ #define FIT_DEVICE_TYPE_SDM ((FIT_DEVICE_TYPE)124)
469
+ #define FIT_DEVICE_TYPE_COUNT 10
470
+
471
+ typedef FIT_UINT32Z FIT_WORKOUT_CAPABILITIES;
472
+ #define FIT_WORKOUT_CAPABILITIES_INVALID FIT_UINT32Z_INVALID
473
+ #define FIT_WORKOUT_CAPABILITIES_INTERVAL ((FIT_WORKOUT_CAPABILITIES)0x00000001)
474
+ #define FIT_WORKOUT_CAPABILITIES_CUSTOM ((FIT_WORKOUT_CAPABILITIES)0x00000002)
475
+ #define FIT_WORKOUT_CAPABILITIES_FITNESS_EQUIPMENT ((FIT_WORKOUT_CAPABILITIES)0x00000004)
476
+ #define FIT_WORKOUT_CAPABILITIES_FIRSTBEAT ((FIT_WORKOUT_CAPABILITIES)0x00000008)
477
+ #define FIT_WORKOUT_CAPABILITIES_NEW_LEAF ((FIT_WORKOUT_CAPABILITIES)0x00000010)
478
+ #define FIT_WORKOUT_CAPABILITIES_TCX ((FIT_WORKOUT_CAPABILITIES)0x00000020) // For backwards compatibility. Watch should add missing id fields then clear flag.
479
+ #define FIT_WORKOUT_CAPABILITIES_SPEED ((FIT_WORKOUT_CAPABILITIES)0x00000080) // Speed source required for workout step.
480
+ #define FIT_WORKOUT_CAPABILITIES_HEART_RATE ((FIT_WORKOUT_CAPABILITIES)0x00000100) // Heart rate source required for workout step.
481
+ #define FIT_WORKOUT_CAPABILITIES_DISTANCE ((FIT_WORKOUT_CAPABILITIES)0x00000200) // Distance source required for workout step.
482
+ #define FIT_WORKOUT_CAPABILITIES_CADENCE ((FIT_WORKOUT_CAPABILITIES)0x00000400) // Cadence source required for workout step.
483
+ #define FIT_WORKOUT_CAPABILITIES_POWER ((FIT_WORKOUT_CAPABILITIES)0x00000800) // Power source required for workout step.
484
+ #define FIT_WORKOUT_CAPABILITIES_GRADE ((FIT_WORKOUT_CAPABILITIES)0x00001000) // Grade source required for workout step.
485
+ #define FIT_WORKOUT_CAPABILITIES_RESISTANCE ((FIT_WORKOUT_CAPABILITIES)0x00002000) // Resistance source required for workout step.
486
+ #define FIT_WORKOUT_CAPABILITIES_PROTECTED ((FIT_WORKOUT_CAPABILITIES)0x00004000)
487
+ #define FIT_WORKOUT_CAPABILITIES_COUNT 14
488
+
489
+ typedef FIT_UINT8 FIT_BATTERY_STATUS;
490
+ #define FIT_BATTERY_STATUS_INVALID FIT_UINT8_INVALID
491
+ #define FIT_BATTERY_STATUS_NEW ((FIT_BATTERY_STATUS)1)
492
+ #define FIT_BATTERY_STATUS_GOOD ((FIT_BATTERY_STATUS)2)
493
+ #define FIT_BATTERY_STATUS_OK ((FIT_BATTERY_STATUS)3)
494
+ #define FIT_BATTERY_STATUS_LOW ((FIT_BATTERY_STATUS)4)
495
+ #define FIT_BATTERY_STATUS_CRITICAL ((FIT_BATTERY_STATUS)5)
496
+ #define FIT_BATTERY_STATUS_COUNT 5
497
+
498
+ typedef FIT_UINT32Z FIT_COURSE_CAPABILITIES;
499
+ #define FIT_COURSE_CAPABILITIES_INVALID FIT_UINT32Z_INVALID
500
+ #define FIT_COURSE_CAPABILITIES_PROCESSED ((FIT_COURSE_CAPABILITIES)0x00000001)
501
+ #define FIT_COURSE_CAPABILITIES_VALID ((FIT_COURSE_CAPABILITIES)0x00000002)
502
+ #define FIT_COURSE_CAPABILITIES_TIME ((FIT_COURSE_CAPABILITIES)0x00000004)
503
+ #define FIT_COURSE_CAPABILITIES_DISTANCE ((FIT_COURSE_CAPABILITIES)0x00000008)
504
+ #define FIT_COURSE_CAPABILITIES_POSITION ((FIT_COURSE_CAPABILITIES)0x00000010)
505
+ #define FIT_COURSE_CAPABILITIES_HEART_RATE ((FIT_COURSE_CAPABILITIES)0x00000020)
506
+ #define FIT_COURSE_CAPABILITIES_POWER ((FIT_COURSE_CAPABILITIES)0x00000040)
507
+ #define FIT_COURSE_CAPABILITIES_CADENCE ((FIT_COURSE_CAPABILITIES)0x00000080)
508
+ #define FIT_COURSE_CAPABILITIES_COUNT 8
509
+
510
+ typedef FIT_UINT16 FIT_WEIGHT;
511
+ #define FIT_WEIGHT_INVALID FIT_UINT16_INVALID
512
+ #define FIT_WEIGHT_CALCULATING ((FIT_WEIGHT)0xFFFE)
513
+ #define FIT_WEIGHT_COUNT 1
514
+
515
+
516
+
517
+ ///////////////////////////////////////////////////////////////////////
518
+ // Message Conversion Structures
519
+ ///////////////////////////////////////////////////////////////////////
520
+
521
+ typedef struct
522
+ {
523
+ FIT_UINT8 base_type;
524
+ FIT_UINT8 offset_in;
525
+ FIT_UINT8 offset_local;
526
+ FIT_UINT8 size;
527
+ } FIT_FIELD_CONVERT;
528
+
529
+ typedef struct
530
+ {
531
+ FIT_UINT8 reserved_1;
532
+ FIT_UINT8 arch;
533
+ FIT_MESG_NUM global_mesg_num;
534
+ FIT_UINT8 num_fields;
535
+ FIT_FIELD_CONVERT fields[34];
536
+ } FIT_MESG_CONVERT;
537
+
538
+
539
+ ///////////////////////////////////////////////////////////////////////
540
+ // Messages
541
+ ///////////////////////////////////////////////////////////////////////
542
+
543
+ #define FIT_MESG_SIZE 84
544
+ #define FIT_MESG_DEF_SIZE 107
545
+
546
+
547
+ typedef struct
548
+ {
549
+ FIT_UINT32Z serial_number; //
550
+ FIT_DATE_TIME time_created; // Only set for files that are can be created/erased.
551
+ FIT_MANUFACTURER manufacturer; //
552
+ FIT_UINT16 product; //
553
+ FIT_UINT16 number; // Only set for files that are not created/erased.
554
+ FIT_FILE type; //
555
+ } FIT_FILE_ID_MESG;
556
+
557
+ #define FIT_FILE_ID_MESG_SIZE 15
558
+
559
+ typedef enum
560
+ {
561
+ FIT_FILE_ID_FIELD_NUM_SERIAL_NUMBER = 3,
562
+ FIT_FILE_ID_FIELD_NUM_TIME_CREATED = 4,
563
+ FIT_FILE_ID_FIELD_NUM_MANUFACTURER = 1,
564
+ FIT_FILE_ID_FIELD_NUM_PRODUCT = 2,
565
+ FIT_FILE_ID_FIELD_NUM_NUMBER = 5,
566
+ FIT_FILE_ID_FIELD_NUM_TYPE = 0
567
+ } FIT_FILE_ID_FIELD_NUM;
568
+
569
+ typedef enum
570
+ {
571
+ FIT_FILE_ID_MESG_SERIAL_NUMBER,
572
+ FIT_FILE_ID_MESG_TIME_CREATED,
573
+ FIT_FILE_ID_MESG_MANUFACTURER,
574
+ FIT_FILE_ID_MESG_PRODUCT,
575
+ FIT_FILE_ID_MESG_NUMBER,
576
+ FIT_FILE_ID_MESG_TYPE,
577
+ FIT_FILE_ID_MESG_FIELDS
578
+ } FIT_FILE_ID_MESG_FIELD;
579
+
580
+ typedef struct
581
+ {
582
+ FIT_UINT8 reserved_1;
583
+ FIT_UINT8 arch;
584
+ FIT_MESG_NUM global_mesg_num;
585
+ FIT_UINT8 num_fields;
586
+ FIT_UINT8 fields[FIT_FILE_ID_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
587
+ } FIT_FILE_ID_MESG_DEF;
588
+
589
+ #define FIT_FILE_ID_MESG_DEF_SIZE 23
590
+
591
+
592
+ typedef struct
593
+ {
594
+ FIT_UINT16 software_version; //
595
+ FIT_UINT8 hardware_version; //
596
+ } FIT_FILE_CREATOR_MESG;
597
+
598
+ #define FIT_FILE_CREATOR_MESG_SIZE 3
599
+
600
+ typedef enum
601
+ {
602
+ FIT_FILE_CREATOR_FIELD_NUM_SOFTWARE_VERSION = 0,
603
+ FIT_FILE_CREATOR_FIELD_NUM_HARDWARE_VERSION = 1
604
+ } FIT_FILE_CREATOR_FIELD_NUM;
605
+
606
+ typedef enum
607
+ {
608
+ FIT_FILE_CREATOR_MESG_SOFTWARE_VERSION,
609
+ FIT_FILE_CREATOR_MESG_HARDWARE_VERSION,
610
+ FIT_FILE_CREATOR_MESG_FIELDS
611
+ } FIT_FILE_CREATOR_MESG_FIELD;
612
+
613
+ typedef struct
614
+ {
615
+ FIT_UINT8 reserved_1;
616
+ FIT_UINT8 arch;
617
+ FIT_MESG_NUM global_mesg_num;
618
+ FIT_UINT8 num_fields;
619
+ FIT_UINT8 fields[FIT_FILE_CREATOR_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
620
+ } FIT_FILE_CREATOR_MESG_DEF;
621
+
622
+ #define FIT_FILE_CREATOR_MESG_DEF_SIZE 11
623
+
624
+ #define FIT_SOFTWARE_MESG_PART_NUMBER_COUNT 16
625
+
626
+ typedef struct
627
+ {
628
+ FIT_STRING part_number[FIT_SOFTWARE_MESG_PART_NUMBER_COUNT]; //
629
+ FIT_MESSAGE_INDEX message_index; //
630
+ FIT_UINT16 version; //
631
+ } FIT_SOFTWARE_MESG;
632
+
633
+ #define FIT_SOFTWARE_MESG_SIZE 20
634
+
635
+ typedef enum
636
+ {
637
+ FIT_SOFTWARE_FIELD_NUM_PART_NUMBER = 5,
638
+ FIT_SOFTWARE_FIELD_NUM_MESSAGE_INDEX = 254,
639
+ FIT_SOFTWARE_FIELD_NUM_VERSION = 3
640
+ } FIT_SOFTWARE_FIELD_NUM;
641
+
642
+ typedef enum
643
+ {
644
+ FIT_SOFTWARE_MESG_PART_NUMBER,
645
+ FIT_SOFTWARE_MESG_MESSAGE_INDEX,
646
+ FIT_SOFTWARE_MESG_VERSION,
647
+ FIT_SOFTWARE_MESG_FIELDS
648
+ } FIT_SOFTWARE_MESG_FIELD;
649
+
650
+ typedef struct
651
+ {
652
+ FIT_UINT8 reserved_1;
653
+ FIT_UINT8 arch;
654
+ FIT_MESG_NUM global_mesg_num;
655
+ FIT_UINT8 num_fields;
656
+ FIT_UINT8 fields[FIT_SOFTWARE_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
657
+ } FIT_SOFTWARE_MESG_DEF;
658
+
659
+ #define FIT_SOFTWARE_MESG_DEF_SIZE 14
660
+
661
+
662
+ typedef struct
663
+ {
664
+ FIT_WORKOUT_CAPABILITIES workouts_supported; //
665
+ } FIT_CAPABILITIES_MESG;
666
+
667
+ #define FIT_CAPABILITIES_MESG_SIZE 4
668
+
669
+ typedef enum
670
+ {
671
+ FIT_CAPABILITIES_FIELD_NUM_WORKOUTS_SUPPORTED = 21
672
+ } FIT_CAPABILITIES_FIELD_NUM;
673
+
674
+ typedef enum
675
+ {
676
+ FIT_CAPABILITIES_MESG_WORKOUTS_SUPPORTED,
677
+ FIT_CAPABILITIES_MESG_FIELDS
678
+ } FIT_CAPABILITIES_MESG_FIELD;
679
+
680
+ typedef struct
681
+ {
682
+ FIT_UINT8 reserved_1;
683
+ FIT_UINT8 arch;
684
+ FIT_MESG_NUM global_mesg_num;
685
+ FIT_UINT8 num_fields;
686
+ FIT_UINT8 fields[FIT_CAPABILITIES_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
687
+ } FIT_CAPABILITIES_MESG_DEF;
688
+
689
+ #define FIT_CAPABILITIES_MESG_DEF_SIZE 8
690
+
691
+ #define FIT_FILE_CAPABILITIES_MESG_DIRECTORY_COUNT 16
692
+
693
+ typedef struct
694
+ {
695
+ FIT_STRING directory[FIT_FILE_CAPABILITIES_MESG_DIRECTORY_COUNT]; //
696
+ FIT_UINT32 max_size; // bytes,
697
+ FIT_MESSAGE_INDEX message_index; //
698
+ FIT_UINT16 max_count; //
699
+ FIT_FILE type; //
700
+ FIT_FILE_FLAGS flags; //
701
+ } FIT_FILE_CAPABILITIES_MESG;
702
+
703
+ #define FIT_FILE_CAPABILITIES_MESG_SIZE 26
704
+
705
+ typedef enum
706
+ {
707
+ FIT_FILE_CAPABILITIES_FIELD_NUM_DIRECTORY = 2,
708
+ FIT_FILE_CAPABILITIES_FIELD_NUM_MAX_SIZE = 4,
709
+ FIT_FILE_CAPABILITIES_FIELD_NUM_MESSAGE_INDEX = 254,
710
+ FIT_FILE_CAPABILITIES_FIELD_NUM_MAX_COUNT = 3,
711
+ FIT_FILE_CAPABILITIES_FIELD_NUM_TYPE = 0,
712
+ FIT_FILE_CAPABILITIES_FIELD_NUM_FLAGS = 1
713
+ } FIT_FILE_CAPABILITIES_FIELD_NUM;
714
+
715
+ typedef enum
716
+ {
717
+ FIT_FILE_CAPABILITIES_MESG_DIRECTORY,
718
+ FIT_FILE_CAPABILITIES_MESG_MAX_SIZE,
719
+ FIT_FILE_CAPABILITIES_MESG_MESSAGE_INDEX,
720
+ FIT_FILE_CAPABILITIES_MESG_MAX_COUNT,
721
+ FIT_FILE_CAPABILITIES_MESG_TYPE,
722
+ FIT_FILE_CAPABILITIES_MESG_FLAGS,
723
+ FIT_FILE_CAPABILITIES_MESG_FIELDS
724
+ } FIT_FILE_CAPABILITIES_MESG_FIELD;
725
+
726
+ typedef struct
727
+ {
728
+ FIT_UINT8 reserved_1;
729
+ FIT_UINT8 arch;
730
+ FIT_MESG_NUM global_mesg_num;
731
+ FIT_UINT8 num_fields;
732
+ FIT_UINT8 fields[FIT_FILE_CAPABILITIES_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
733
+ } FIT_FILE_CAPABILITIES_MESG_DEF;
734
+
735
+ #define FIT_FILE_CAPABILITIES_MESG_DEF_SIZE 23
736
+
737
+
738
+ typedef struct
739
+ {
740
+ FIT_MESSAGE_INDEX message_index; //
741
+ FIT_MESG_NUM mesg_num; //
742
+ FIT_UINT16 count; //
743
+ FIT_FILE file; //
744
+ FIT_MESG_COUNT count_type; //
745
+ } FIT_MESG_CAPABILITIES_MESG;
746
+
747
+ #define FIT_MESG_CAPABILITIES_MESG_SIZE 8
748
+
749
+ typedef enum
750
+ {
751
+ FIT_MESG_CAPABILITIES_FIELD_NUM_MESSAGE_INDEX = 254,
752
+ FIT_MESG_CAPABILITIES_FIELD_NUM_MESG_NUM = 1,
753
+ FIT_MESG_CAPABILITIES_FIELD_NUM_COUNT = 3,
754
+ FIT_MESG_CAPABILITIES_FIELD_NUM_FILE = 0,
755
+ FIT_MESG_CAPABILITIES_FIELD_NUM_COUNT_TYPE = 2
756
+ } FIT_MESG_CAPABILITIES_FIELD_NUM;
757
+
758
+ typedef enum
759
+ {
760
+ FIT_MESG_CAPABILITIES_MESG_MESSAGE_INDEX,
761
+ FIT_MESG_CAPABILITIES_MESG_MESG_NUM,
762
+ FIT_MESG_CAPABILITIES_MESG_COUNT,
763
+ FIT_MESG_CAPABILITIES_MESG_FILE,
764
+ FIT_MESG_CAPABILITIES_MESG_COUNT_TYPE,
765
+ FIT_MESG_CAPABILITIES_MESG_FIELDS
766
+ } FIT_MESG_CAPABILITIES_MESG_FIELD;
767
+
768
+ typedef struct
769
+ {
770
+ FIT_UINT8 reserved_1;
771
+ FIT_UINT8 arch;
772
+ FIT_MESG_NUM global_mesg_num;
773
+ FIT_UINT8 num_fields;
774
+ FIT_UINT8 fields[FIT_MESG_CAPABILITIES_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
775
+ } FIT_MESG_CAPABILITIES_MESG_DEF;
776
+
777
+ #define FIT_MESG_CAPABILITIES_MESG_DEF_SIZE 20
778
+
779
+
780
+ typedef struct
781
+ {
782
+ FIT_MESSAGE_INDEX message_index; //
783
+ FIT_MESG_NUM mesg_num; //
784
+ FIT_UINT16 count; //
785
+ FIT_FILE file; //
786
+ FIT_UINT8 field_num; //
787
+ } FIT_FIELD_CAPABILITIES_MESG;
788
+
789
+ #define FIT_FIELD_CAPABILITIES_MESG_SIZE 8
790
+
791
+ typedef enum
792
+ {
793
+ FIT_FIELD_CAPABILITIES_FIELD_NUM_MESSAGE_INDEX = 254,
794
+ FIT_FIELD_CAPABILITIES_FIELD_NUM_MESG_NUM = 1,
795
+ FIT_FIELD_CAPABILITIES_FIELD_NUM_COUNT = 3,
796
+ FIT_FIELD_CAPABILITIES_FIELD_NUM_FILE = 0,
797
+ FIT_FIELD_CAPABILITIES_FIELD_NUM_FIELD_NUM = 2
798
+ } FIT_FIELD_CAPABILITIES_FIELD_NUM;
799
+
800
+ typedef enum
801
+ {
802
+ FIT_FIELD_CAPABILITIES_MESG_MESSAGE_INDEX,
803
+ FIT_FIELD_CAPABILITIES_MESG_MESG_NUM,
804
+ FIT_FIELD_CAPABILITIES_MESG_COUNT,
805
+ FIT_FIELD_CAPABILITIES_MESG_FILE,
806
+ FIT_FIELD_CAPABILITIES_MESG_FIELD_NUM,
807
+ FIT_FIELD_CAPABILITIES_MESG_FIELDS
808
+ } FIT_FIELD_CAPABILITIES_MESG_FIELD;
809
+
810
+ typedef struct
811
+ {
812
+ FIT_UINT8 reserved_1;
813
+ FIT_UINT8 arch;
814
+ FIT_MESG_NUM global_mesg_num;
815
+ FIT_UINT8 num_fields;
816
+ FIT_UINT8 fields[FIT_FIELD_CAPABILITIES_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
817
+ } FIT_FIELD_CAPABILITIES_MESG_DEF;
818
+
819
+ #define FIT_FIELD_CAPABILITIES_MESG_DEF_SIZE 20
820
+
821
+
822
+ typedef struct
823
+ {
824
+ FIT_UINT32 utc_offset; // Offset from system time. Required to convert timestamp from system time to UTC.
825
+ } FIT_DEVICE_SETTINGS_MESG;
826
+
827
+ #define FIT_DEVICE_SETTINGS_MESG_SIZE 4
828
+
829
+ typedef enum
830
+ {
831
+ FIT_DEVICE_SETTINGS_FIELD_NUM_UTC_OFFSET = 1
832
+ } FIT_DEVICE_SETTINGS_FIELD_NUM;
833
+
834
+ typedef enum
835
+ {
836
+ FIT_DEVICE_SETTINGS_MESG_UTC_OFFSET,
837
+ FIT_DEVICE_SETTINGS_MESG_FIELDS
838
+ } FIT_DEVICE_SETTINGS_MESG_FIELD;
839
+
840
+ typedef struct
841
+ {
842
+ FIT_UINT8 reserved_1;
843
+ FIT_UINT8 arch;
844
+ FIT_MESG_NUM global_mesg_num;
845
+ FIT_UINT8 num_fields;
846
+ FIT_UINT8 fields[FIT_DEVICE_SETTINGS_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
847
+ } FIT_DEVICE_SETTINGS_MESG_DEF;
848
+
849
+ #define FIT_DEVICE_SETTINGS_MESG_DEF_SIZE 8
850
+
851
+ #define FIT_USER_PROFILE_MESG_FRIENDLY_NAME_COUNT 16
852
+
853
+ typedef struct
854
+ {
855
+ FIT_STRING friendly_name[FIT_USER_PROFILE_MESG_FRIENDLY_NAME_COUNT]; //
856
+ FIT_MESSAGE_INDEX message_index; //
857
+ FIT_UINT16 weight; // 10.000 * kg,
858
+ FIT_GENDER gender; //
859
+ FIT_UINT8 age; // years,
860
+ FIT_UINT8 height; // 100.000 * m,
861
+ FIT_LANGUAGE language; //
862
+ FIT_DISPLAY_MEASURE elev_setting; //
863
+ FIT_DISPLAY_MEASURE weight_setting; //
864
+ FIT_UINT8 resting_heart_rate; // bpm,
865
+ FIT_UINT8 default_max_running_heart_rate; // bpm,
866
+ FIT_UINT8 default_max_biking_heart_rate; // bpm,
867
+ FIT_UINT8 default_max_heart_rate; // bpm,
868
+ FIT_DISPLAY_HEART hr_setting; //
869
+ FIT_DISPLAY_MEASURE speed_setting; //
870
+ FIT_DISPLAY_MEASURE dist_setting; //
871
+ FIT_DISPLAY_POWER power_setting; //
872
+ FIT_ACTIVITY_CLASS activity_class; //
873
+ FIT_DISPLAY_POSITION position_setting; //
874
+ } FIT_USER_PROFILE_MESG;
875
+
876
+ #define FIT_USER_PROFILE_MESG_SIZE 36
877
+
878
+ typedef enum
879
+ {
880
+ FIT_USER_PROFILE_FIELD_NUM_FRIENDLY_NAME = 0,
881
+ FIT_USER_PROFILE_FIELD_NUM_MESSAGE_INDEX = 254,
882
+ FIT_USER_PROFILE_FIELD_NUM_WEIGHT = 4,
883
+ FIT_USER_PROFILE_FIELD_NUM_GENDER = 1,
884
+ FIT_USER_PROFILE_FIELD_NUM_AGE = 2,
885
+ FIT_USER_PROFILE_FIELD_NUM_HEIGHT = 3,
886
+ FIT_USER_PROFILE_FIELD_NUM_LANGUAGE = 5,
887
+ FIT_USER_PROFILE_FIELD_NUM_ELEV_SETTING = 6,
888
+ FIT_USER_PROFILE_FIELD_NUM_WEIGHT_SETTING = 7,
889
+ FIT_USER_PROFILE_FIELD_NUM_RESTING_HEART_RATE = 8,
890
+ FIT_USER_PROFILE_FIELD_NUM_DEFAULT_MAX_RUNNING_HEART_RATE = 9,
891
+ FIT_USER_PROFILE_FIELD_NUM_DEFAULT_MAX_BIKING_HEART_RATE = 10,
892
+ FIT_USER_PROFILE_FIELD_NUM_DEFAULT_MAX_HEART_RATE = 11,
893
+ FIT_USER_PROFILE_FIELD_NUM_HR_SETTING = 12,
894
+ FIT_USER_PROFILE_FIELD_NUM_SPEED_SETTING = 13,
895
+ FIT_USER_PROFILE_FIELD_NUM_DIST_SETTING = 14,
896
+ FIT_USER_PROFILE_FIELD_NUM_POWER_SETTING = 16,
897
+ FIT_USER_PROFILE_FIELD_NUM_ACTIVITY_CLASS = 17,
898
+ FIT_USER_PROFILE_FIELD_NUM_POSITION_SETTING = 18
899
+ } FIT_USER_PROFILE_FIELD_NUM;
900
+
901
+ typedef enum
902
+ {
903
+ FIT_USER_PROFILE_MESG_FRIENDLY_NAME,
904
+ FIT_USER_PROFILE_MESG_MESSAGE_INDEX,
905
+ FIT_USER_PROFILE_MESG_WEIGHT,
906
+ FIT_USER_PROFILE_MESG_GENDER,
907
+ FIT_USER_PROFILE_MESG_AGE,
908
+ FIT_USER_PROFILE_MESG_HEIGHT,
909
+ FIT_USER_PROFILE_MESG_LANGUAGE,
910
+ FIT_USER_PROFILE_MESG_ELEV_SETTING,
911
+ FIT_USER_PROFILE_MESG_WEIGHT_SETTING,
912
+ FIT_USER_PROFILE_MESG_RESTING_HEART_RATE,
913
+ FIT_USER_PROFILE_MESG_DEFAULT_MAX_RUNNING_HEART_RATE,
914
+ FIT_USER_PROFILE_MESG_DEFAULT_MAX_BIKING_HEART_RATE,
915
+ FIT_USER_PROFILE_MESG_DEFAULT_MAX_HEART_RATE,
916
+ FIT_USER_PROFILE_MESG_HR_SETTING,
917
+ FIT_USER_PROFILE_MESG_SPEED_SETTING,
918
+ FIT_USER_PROFILE_MESG_DIST_SETTING,
919
+ FIT_USER_PROFILE_MESG_POWER_SETTING,
920
+ FIT_USER_PROFILE_MESG_ACTIVITY_CLASS,
921
+ FIT_USER_PROFILE_MESG_POSITION_SETTING,
922
+ FIT_USER_PROFILE_MESG_FIELDS
923
+ } FIT_USER_PROFILE_MESG_FIELD;
924
+
925
+ typedef struct
926
+ {
927
+ FIT_UINT8 reserved_1;
928
+ FIT_UINT8 arch;
929
+ FIT_MESG_NUM global_mesg_num;
930
+ FIT_UINT8 num_fields;
931
+ FIT_UINT8 fields[FIT_USER_PROFILE_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
932
+ } FIT_USER_PROFILE_MESG_DEF;
933
+
934
+ #define FIT_USER_PROFILE_MESG_DEF_SIZE 62
935
+
936
+
937
+ typedef struct
938
+ {
939
+ FIT_MESSAGE_INDEX message_index; //
940
+ FIT_UINT16Z hrm_ant_id; //
941
+ FIT_BOOL enabled; //
942
+ } FIT_HRM_PROFILE_MESG;
943
+
944
+ #define FIT_HRM_PROFILE_MESG_SIZE 5
945
+
946
+ typedef enum
947
+ {
948
+ FIT_HRM_PROFILE_FIELD_NUM_MESSAGE_INDEX = 254,
949
+ FIT_HRM_PROFILE_FIELD_NUM_HRM_ANT_ID = 1,
950
+ FIT_HRM_PROFILE_FIELD_NUM_ENABLED = 0
951
+ } FIT_HRM_PROFILE_FIELD_NUM;
952
+
953
+ typedef enum
954
+ {
955
+ FIT_HRM_PROFILE_MESG_MESSAGE_INDEX,
956
+ FIT_HRM_PROFILE_MESG_HRM_ANT_ID,
957
+ FIT_HRM_PROFILE_MESG_ENABLED,
958
+ FIT_HRM_PROFILE_MESG_FIELDS
959
+ } FIT_HRM_PROFILE_MESG_FIELD;
960
+
961
+ typedef struct
962
+ {
963
+ FIT_UINT8 reserved_1;
964
+ FIT_UINT8 arch;
965
+ FIT_MESG_NUM global_mesg_num;
966
+ FIT_UINT8 num_fields;
967
+ FIT_UINT8 fields[FIT_HRM_PROFILE_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
968
+ } FIT_HRM_PROFILE_MESG_DEF;
969
+
970
+ #define FIT_HRM_PROFILE_MESG_DEF_SIZE 14
971
+
972
+
973
+ typedef struct
974
+ {
975
+ FIT_UINT16 functional_threshold_power; //
976
+ FIT_UINT8 max_heart_rate; //
977
+ FIT_UINT8 threshold_heart_rate; //
978
+ FIT_HR_ZONE_CALC hr_calc_type; //
979
+ FIT_PWR_ZONE_CALC pwr_calc_type; //
980
+ } FIT_ZONES_TARGET_MESG;
981
+
982
+ #define FIT_ZONES_TARGET_MESG_SIZE 6
983
+
984
+ typedef enum
985
+ {
986
+ FIT_ZONES_TARGET_FIELD_NUM_FUNCTIONAL_THRESHOLD_POWER = 3,
987
+ FIT_ZONES_TARGET_FIELD_NUM_MAX_HEART_RATE = 1,
988
+ FIT_ZONES_TARGET_FIELD_NUM_THRESHOLD_HEART_RATE = 2,
989
+ FIT_ZONES_TARGET_FIELD_NUM_HR_CALC_TYPE = 5,
990
+ FIT_ZONES_TARGET_FIELD_NUM_PWR_CALC_TYPE = 7
991
+ } FIT_ZONES_TARGET_FIELD_NUM;
992
+
993
+ typedef enum
994
+ {
995
+ FIT_ZONES_TARGET_MESG_FUNCTIONAL_THRESHOLD_POWER,
996
+ FIT_ZONES_TARGET_MESG_MAX_HEART_RATE,
997
+ FIT_ZONES_TARGET_MESG_THRESHOLD_HEART_RATE,
998
+ FIT_ZONES_TARGET_MESG_HR_CALC_TYPE,
999
+ FIT_ZONES_TARGET_MESG_PWR_CALC_TYPE,
1000
+ FIT_ZONES_TARGET_MESG_FIELDS
1001
+ } FIT_ZONES_TARGET_MESG_FIELD;
1002
+
1003
+ typedef struct
1004
+ {
1005
+ FIT_UINT8 reserved_1;
1006
+ FIT_UINT8 arch;
1007
+ FIT_MESG_NUM global_mesg_num;
1008
+ FIT_UINT8 num_fields;
1009
+ FIT_UINT8 fields[FIT_ZONES_TARGET_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
1010
+ } FIT_ZONES_TARGET_MESG_DEF;
1011
+
1012
+ #define FIT_ZONES_TARGET_MESG_DEF_SIZE 20
1013
+
1014
+ #define FIT_SPORT_MESG_NAME_COUNT 16
1015
+
1016
+ typedef struct
1017
+ {
1018
+ FIT_STRING name[FIT_SPORT_MESG_NAME_COUNT]; //
1019
+ FIT_SPORT sport; //
1020
+ FIT_SUB_SPORT sub_sport; //
1021
+ } FIT_SPORT_MESG;
1022
+
1023
+ #define FIT_SPORT_MESG_SIZE 18
1024
+
1025
+ typedef enum
1026
+ {
1027
+ FIT_SPORT_FIELD_NUM_NAME = 3,
1028
+ FIT_SPORT_FIELD_NUM_SPORT = 0,
1029
+ FIT_SPORT_FIELD_NUM_SUB_SPORT = 1
1030
+ } FIT_SPORT_FIELD_NUM;
1031
+
1032
+ typedef enum
1033
+ {
1034
+ FIT_SPORT_MESG_NAME,
1035
+ FIT_SPORT_MESG_SPORT,
1036
+ FIT_SPORT_MESG_SUB_SPORT,
1037
+ FIT_SPORT_MESG_FIELDS
1038
+ } FIT_SPORT_MESG_FIELD;
1039
+
1040
+ typedef struct
1041
+ {
1042
+ FIT_UINT8 reserved_1;
1043
+ FIT_UINT8 arch;
1044
+ FIT_MESG_NUM global_mesg_num;
1045
+ FIT_UINT8 num_fields;
1046
+ FIT_UINT8 fields[FIT_SPORT_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
1047
+ } FIT_SPORT_MESG_DEF;
1048
+
1049
+ #define FIT_SPORT_MESG_DEF_SIZE 14
1050
+
1051
+ #define FIT_HR_ZONE_MESG_NAME_COUNT 1
1052
+
1053
+ typedef struct
1054
+ {
1055
+ FIT_MESSAGE_INDEX message_index; //
1056
+ FIT_UINT8 high_bpm; // bpm,
1057
+ FIT_STRING name[FIT_HR_ZONE_MESG_NAME_COUNT]; //
1058
+ } FIT_HR_ZONE_MESG;
1059
+
1060
+ #define FIT_HR_ZONE_MESG_SIZE 4
1061
+
1062
+ typedef enum
1063
+ {
1064
+ FIT_HR_ZONE_FIELD_NUM_MESSAGE_INDEX = 254,
1065
+ FIT_HR_ZONE_FIELD_NUM_HIGH_BPM = 1,
1066
+ FIT_HR_ZONE_FIELD_NUM_NAME = 2
1067
+ } FIT_HR_ZONE_FIELD_NUM;
1068
+
1069
+ typedef enum
1070
+ {
1071
+ FIT_HR_ZONE_MESG_MESSAGE_INDEX,
1072
+ FIT_HR_ZONE_MESG_HIGH_BPM,
1073
+ FIT_HR_ZONE_MESG_NAME,
1074
+ FIT_HR_ZONE_MESG_FIELDS
1075
+ } FIT_HR_ZONE_MESG_FIELD;
1076
+
1077
+ typedef struct
1078
+ {
1079
+ FIT_UINT8 reserved_1;
1080
+ FIT_UINT8 arch;
1081
+ FIT_MESG_NUM global_mesg_num;
1082
+ FIT_UINT8 num_fields;
1083
+ FIT_UINT8 fields[FIT_HR_ZONE_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
1084
+ } FIT_HR_ZONE_MESG_DEF;
1085
+
1086
+ #define FIT_HR_ZONE_MESG_DEF_SIZE 14
1087
+
1088
+ #define FIT_SPEED_ZONE_MESG_NAME_COUNT 1
1089
+
1090
+ typedef struct
1091
+ {
1092
+ FIT_MESSAGE_INDEX message_index; //
1093
+ FIT_UINT16 high_value; // 1000.000 * m/s,
1094
+ FIT_STRING name[FIT_SPEED_ZONE_MESG_NAME_COUNT]; //
1095
+ } FIT_SPEED_ZONE_MESG;
1096
+
1097
+ #define FIT_SPEED_ZONE_MESG_SIZE 5
1098
+
1099
+ typedef enum
1100
+ {
1101
+ FIT_SPEED_ZONE_FIELD_NUM_MESSAGE_INDEX = 254,
1102
+ FIT_SPEED_ZONE_FIELD_NUM_HIGH_VALUE = 0,
1103
+ FIT_SPEED_ZONE_FIELD_NUM_NAME = 1
1104
+ } FIT_SPEED_ZONE_FIELD_NUM;
1105
+
1106
+ typedef enum
1107
+ {
1108
+ FIT_SPEED_ZONE_MESG_MESSAGE_INDEX,
1109
+ FIT_SPEED_ZONE_MESG_HIGH_VALUE,
1110
+ FIT_SPEED_ZONE_MESG_NAME,
1111
+ FIT_SPEED_ZONE_MESG_FIELDS
1112
+ } FIT_SPEED_ZONE_MESG_FIELD;
1113
+
1114
+ typedef struct
1115
+ {
1116
+ FIT_UINT8 reserved_1;
1117
+ FIT_UINT8 arch;
1118
+ FIT_MESG_NUM global_mesg_num;
1119
+ FIT_UINT8 num_fields;
1120
+ FIT_UINT8 fields[FIT_SPEED_ZONE_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
1121
+ } FIT_SPEED_ZONE_MESG_DEF;
1122
+
1123
+ #define FIT_SPEED_ZONE_MESG_DEF_SIZE 14
1124
+
1125
+ #define FIT_POWER_ZONE_MESG_NAME_COUNT 1
1126
+
1127
+ typedef struct
1128
+ {
1129
+ FIT_MESSAGE_INDEX message_index; //
1130
+ FIT_UINT16 high_value; //
1131
+ FIT_STRING name[FIT_POWER_ZONE_MESG_NAME_COUNT]; //
1132
+ } FIT_POWER_ZONE_MESG;
1133
+
1134
+ #define FIT_POWER_ZONE_MESG_SIZE 5
1135
+
1136
+ typedef enum
1137
+ {
1138
+ FIT_POWER_ZONE_FIELD_NUM_MESSAGE_INDEX = 254,
1139
+ FIT_POWER_ZONE_FIELD_NUM_HIGH_VALUE = 1,
1140
+ FIT_POWER_ZONE_FIELD_NUM_NAME = 2
1141
+ } FIT_POWER_ZONE_FIELD_NUM;
1142
+
1143
+ typedef enum
1144
+ {
1145
+ FIT_POWER_ZONE_MESG_MESSAGE_INDEX,
1146
+ FIT_POWER_ZONE_MESG_HIGH_VALUE,
1147
+ FIT_POWER_ZONE_MESG_NAME,
1148
+ FIT_POWER_ZONE_MESG_FIELDS
1149
+ } FIT_POWER_ZONE_MESG_FIELD;
1150
+
1151
+ typedef struct
1152
+ {
1153
+ FIT_UINT8 reserved_1;
1154
+ FIT_UINT8 arch;
1155
+ FIT_MESG_NUM global_mesg_num;
1156
+ FIT_UINT8 num_fields;
1157
+ FIT_UINT8 fields[FIT_POWER_ZONE_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
1158
+ } FIT_POWER_ZONE_MESG_DEF;
1159
+
1160
+ #define FIT_POWER_ZONE_MESG_DEF_SIZE 14
1161
+
1162
+
1163
+ typedef struct
1164
+ {
1165
+ FIT_MESSAGE_INDEX message_index; //
1166
+ FIT_UINT16 calories; // 10.000 * kcal / min,
1167
+ FIT_UINT8 high_bpm; //
1168
+ FIT_UINT8 fat_calories; // 10.000 * kcal / min,
1169
+ } FIT_MET_ZONE_MESG;
1170
+
1171
+ #define FIT_MET_ZONE_MESG_SIZE 6
1172
+
1173
+ typedef enum
1174
+ {
1175
+ FIT_MET_ZONE_FIELD_NUM_MESSAGE_INDEX = 254,
1176
+ FIT_MET_ZONE_FIELD_NUM_CALORIES = 2,
1177
+ FIT_MET_ZONE_FIELD_NUM_HIGH_BPM = 1,
1178
+ FIT_MET_ZONE_FIELD_NUM_FAT_CALORIES = 3
1179
+ } FIT_MET_ZONE_FIELD_NUM;
1180
+
1181
+ typedef enum
1182
+ {
1183
+ FIT_MET_ZONE_MESG_MESSAGE_INDEX,
1184
+ FIT_MET_ZONE_MESG_CALORIES,
1185
+ FIT_MET_ZONE_MESG_HIGH_BPM,
1186
+ FIT_MET_ZONE_MESG_FAT_CALORIES,
1187
+ FIT_MET_ZONE_MESG_FIELDS
1188
+ } FIT_MET_ZONE_MESG_FIELD;
1189
+
1190
+ typedef struct
1191
+ {
1192
+ FIT_UINT8 reserved_1;
1193
+ FIT_UINT8 arch;
1194
+ FIT_MESG_NUM global_mesg_num;
1195
+ FIT_UINT8 num_fields;
1196
+ FIT_UINT8 fields[FIT_MET_ZONE_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
1197
+ } FIT_MET_ZONE_MESG_DEF;
1198
+
1199
+ #define FIT_MET_ZONE_MESG_DEF_SIZE 17
1200
+
1201
+
1202
+ typedef struct
1203
+ {
1204
+ FIT_DATE_TIME timestamp; //
1205
+ FIT_UINT32 total_timer_time; // 1000.000 * s, Exclude pauses
1206
+ FIT_DATE_TIME local_timestamp; // Use to convert activity timestamps to local time if device does not support time zone and daylight savings time correction.
1207
+ FIT_UINT16 num_sessions; //
1208
+ FIT_ACTIVITY type; //
1209
+ FIT_EVENT event; // default = activity,
1210
+ FIT_EVENT_TYPE event_type; // default = consecutive,
1211
+ FIT_UINT8 event_group; //
1212
+ } FIT_ACTIVITY_MESG;
1213
+
1214
+ #define FIT_ACTIVITY_MESG_SIZE 18
1215
+
1216
+ typedef enum
1217
+ {
1218
+ FIT_ACTIVITY_FIELD_NUM_TIMESTAMP = 253,
1219
+ FIT_ACTIVITY_FIELD_NUM_TOTAL_TIMER_TIME = 0,
1220
+ FIT_ACTIVITY_FIELD_NUM_LOCAL_TIMESTAMP = 5,
1221
+ FIT_ACTIVITY_FIELD_NUM_NUM_SESSIONS = 1,
1222
+ FIT_ACTIVITY_FIELD_NUM_TYPE = 2,
1223
+ FIT_ACTIVITY_FIELD_NUM_EVENT = 3,
1224
+ FIT_ACTIVITY_FIELD_NUM_EVENT_TYPE = 4,
1225
+ FIT_ACTIVITY_FIELD_NUM_EVENT_GROUP = 6
1226
+ } FIT_ACTIVITY_FIELD_NUM;
1227
+
1228
+ typedef enum
1229
+ {
1230
+ FIT_ACTIVITY_MESG_TIMESTAMP,
1231
+ FIT_ACTIVITY_MESG_TOTAL_TIMER_TIME,
1232
+ FIT_ACTIVITY_MESG_LOCAL_TIMESTAMP,
1233
+ FIT_ACTIVITY_MESG_NUM_SESSIONS,
1234
+ FIT_ACTIVITY_MESG_TYPE,
1235
+ FIT_ACTIVITY_MESG_EVENT,
1236
+ FIT_ACTIVITY_MESG_EVENT_TYPE,
1237
+ FIT_ACTIVITY_MESG_EVENT_GROUP,
1238
+ FIT_ACTIVITY_MESG_FIELDS
1239
+ } FIT_ACTIVITY_MESG_FIELD;
1240
+
1241
+ typedef struct
1242
+ {
1243
+ FIT_UINT8 reserved_1;
1244
+ FIT_UINT8 arch;
1245
+ FIT_MESG_NUM global_mesg_num;
1246
+ FIT_UINT8 num_fields;
1247
+ FIT_UINT8 fields[FIT_ACTIVITY_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
1248
+ } FIT_ACTIVITY_MESG_DEF;
1249
+
1250
+ #define FIT_ACTIVITY_MESG_DEF_SIZE 29
1251
+
1252
+
1253
+ typedef struct
1254
+ {
1255
+ FIT_DATE_TIME timestamp; // s, Sesson end time.
1256
+ FIT_DATE_TIME start_time; //
1257
+ FIT_SINT32 start_position_lat; // semicircles, **** Invalid is lat & long both 0x7FFFFFFF! Deg = 180 / (2^31)
1258
+ FIT_SINT32 start_position_long; // semicircles, **** Invalid is lat & long both 0x7FFFFFFF! Deg = 180 / (2^31)
1259
+ FIT_UINT32 total_elapsed_time; // 1000.000 * s, Time (includes pauses)
1260
+ FIT_UINT32 total_timer_time; // 1000.000 * s, Timer Time (excludes pauses)
1261
+ FIT_UINT32 total_distance; // 100.000 * m,
1262
+ FIT_UINT32 total_cycles; // cycles,
1263
+ FIT_SINT32 nec_lat; // semicircles,
1264
+ FIT_SINT32 nec_long; // semicircles,
1265
+ FIT_SINT32 swc_lat; // semicircles,
1266
+ FIT_SINT32 swc_long; // semicircles,
1267
+ FIT_MESSAGE_INDEX message_index; // default = 0,
1268
+ FIT_UINT16 total_calories; // kcal,
1269
+ FIT_UINT16 total_fat_calories; // kcal, If New Leaf
1270
+ FIT_UINT16 avg_speed; // 1000.000 * m/s, total_distance / total_timer_time
1271
+ FIT_UINT16 max_speed; // 1000.000 * m/s,
1272
+ FIT_UINT16 avg_power; // watts, total_power / total_timer_time if non_zero_avg_power otherwise total_power / total_elapsed_time
1273
+ FIT_UINT16 max_power; // watts,
1274
+ FIT_UINT16 total_ascent; // m,
1275
+ FIT_UINT16 total_descent; // m,
1276
+ FIT_UINT16 first_lap_index; // default = 0,
1277
+ FIT_UINT16 num_laps; // default = 1,
1278
+ FIT_EVENT event; // default = session,
1279
+ FIT_EVENT_TYPE event_type; // default = consecutive,
1280
+ FIT_SPORT sport; //
1281
+ FIT_SUB_SPORT sub_sport; //
1282
+ FIT_UINT8 avg_heart_rate; // bpm, average heart rate (excludes pause time)
1283
+ FIT_UINT8 max_heart_rate; // bpm,
1284
+ FIT_UINT8 avg_cadence; // rpm, total_cycles / total_timer_time if non_zero_avg_cadence otherwise total_cycles / total_elapsed_time
1285
+ FIT_UINT8 max_cadence; // rpm,
1286
+ FIT_UINT8 total_training_effect; //
1287
+ FIT_UINT8 event_group; //
1288
+ FIT_SESSION_TRIGGER trigger; //
1289
+ } FIT_SESSION_MESG;
1290
+
1291
+ #define FIT_SESSION_MESG_SIZE 81
1292
+
1293
+ typedef enum
1294
+ {
1295
+ FIT_SESSION_FIELD_NUM_TIMESTAMP = 253,
1296
+ FIT_SESSION_FIELD_NUM_START_TIME = 2,
1297
+ FIT_SESSION_FIELD_NUM_START_POSITION_LAT = 3,
1298
+ FIT_SESSION_FIELD_NUM_START_POSITION_LONG = 4,
1299
+ FIT_SESSION_FIELD_NUM_TOTAL_ELAPSED_TIME = 7,
1300
+ FIT_SESSION_FIELD_NUM_TOTAL_TIMER_TIME = 8,
1301
+ FIT_SESSION_FIELD_NUM_TOTAL_DISTANCE = 9,
1302
+ FIT_SESSION_FIELD_NUM_TOTAL_CYCLES = 10,
1303
+ FIT_SESSION_FIELD_NUM_NEC_LAT = 29,
1304
+ FIT_SESSION_FIELD_NUM_NEC_LONG = 30,
1305
+ FIT_SESSION_FIELD_NUM_SWC_LAT = 31,
1306
+ FIT_SESSION_FIELD_NUM_SWC_LONG = 32,
1307
+ FIT_SESSION_FIELD_NUM_MESSAGE_INDEX = 254,
1308
+ FIT_SESSION_FIELD_NUM_TOTAL_CALORIES = 11,
1309
+ FIT_SESSION_FIELD_NUM_TOTAL_FAT_CALORIES = 13,
1310
+ FIT_SESSION_FIELD_NUM_AVG_SPEED = 14,
1311
+ FIT_SESSION_FIELD_NUM_MAX_SPEED = 15,
1312
+ FIT_SESSION_FIELD_NUM_AVG_POWER = 20,
1313
+ FIT_SESSION_FIELD_NUM_MAX_POWER = 21,
1314
+ FIT_SESSION_FIELD_NUM_TOTAL_ASCENT = 22,
1315
+ FIT_SESSION_FIELD_NUM_TOTAL_DESCENT = 23,
1316
+ FIT_SESSION_FIELD_NUM_FIRST_LAP_INDEX = 25,
1317
+ FIT_SESSION_FIELD_NUM_NUM_LAPS = 26,
1318
+ FIT_SESSION_FIELD_NUM_EVENT = 0,
1319
+ FIT_SESSION_FIELD_NUM_EVENT_TYPE = 1,
1320
+ FIT_SESSION_FIELD_NUM_SPORT = 5,
1321
+ FIT_SESSION_FIELD_NUM_SUB_SPORT = 6,
1322
+ FIT_SESSION_FIELD_NUM_AVG_HEART_RATE = 16,
1323
+ FIT_SESSION_FIELD_NUM_MAX_HEART_RATE = 17,
1324
+ FIT_SESSION_FIELD_NUM_AVG_CADENCE = 18,
1325
+ FIT_SESSION_FIELD_NUM_MAX_CADENCE = 19,
1326
+ FIT_SESSION_FIELD_NUM_TOTAL_TRAINING_EFFECT = 24,
1327
+ FIT_SESSION_FIELD_NUM_EVENT_GROUP = 27,
1328
+ FIT_SESSION_FIELD_NUM_TRIGGER = 28
1329
+ } FIT_SESSION_FIELD_NUM;
1330
+
1331
+ typedef enum
1332
+ {
1333
+ FIT_SESSION_MESG_TIMESTAMP,
1334
+ FIT_SESSION_MESG_START_TIME,
1335
+ FIT_SESSION_MESG_START_POSITION_LAT,
1336
+ FIT_SESSION_MESG_START_POSITION_LONG,
1337
+ FIT_SESSION_MESG_TOTAL_ELAPSED_TIME,
1338
+ FIT_SESSION_MESG_TOTAL_TIMER_TIME,
1339
+ FIT_SESSION_MESG_TOTAL_DISTANCE,
1340
+ FIT_SESSION_MESG_TOTAL_CYCLES,
1341
+ FIT_SESSION_MESG_NEC_LAT,
1342
+ FIT_SESSION_MESG_NEC_LONG,
1343
+ FIT_SESSION_MESG_SWC_LAT,
1344
+ FIT_SESSION_MESG_SWC_LONG,
1345
+ FIT_SESSION_MESG_MESSAGE_INDEX,
1346
+ FIT_SESSION_MESG_TOTAL_CALORIES,
1347
+ FIT_SESSION_MESG_TOTAL_FAT_CALORIES,
1348
+ FIT_SESSION_MESG_AVG_SPEED,
1349
+ FIT_SESSION_MESG_MAX_SPEED,
1350
+ FIT_SESSION_MESG_AVG_POWER,
1351
+ FIT_SESSION_MESG_MAX_POWER,
1352
+ FIT_SESSION_MESG_TOTAL_ASCENT,
1353
+ FIT_SESSION_MESG_TOTAL_DESCENT,
1354
+ FIT_SESSION_MESG_FIRST_LAP_INDEX,
1355
+ FIT_SESSION_MESG_NUM_LAPS,
1356
+ FIT_SESSION_MESG_EVENT,
1357
+ FIT_SESSION_MESG_EVENT_TYPE,
1358
+ FIT_SESSION_MESG_SPORT,
1359
+ FIT_SESSION_MESG_SUB_SPORT,
1360
+ FIT_SESSION_MESG_AVG_HEART_RATE,
1361
+ FIT_SESSION_MESG_MAX_HEART_RATE,
1362
+ FIT_SESSION_MESG_AVG_CADENCE,
1363
+ FIT_SESSION_MESG_MAX_CADENCE,
1364
+ FIT_SESSION_MESG_TOTAL_TRAINING_EFFECT,
1365
+ FIT_SESSION_MESG_EVENT_GROUP,
1366
+ FIT_SESSION_MESG_TRIGGER,
1367
+ FIT_SESSION_MESG_FIELDS
1368
+ } FIT_SESSION_MESG_FIELD;
1369
+
1370
+ typedef struct
1371
+ {
1372
+ FIT_UINT8 reserved_1;
1373
+ FIT_UINT8 arch;
1374
+ FIT_MESG_NUM global_mesg_num;
1375
+ FIT_UINT8 num_fields;
1376
+ FIT_UINT8 fields[FIT_SESSION_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
1377
+ } FIT_SESSION_MESG_DEF;
1378
+
1379
+ #define FIT_SESSION_MESG_DEF_SIZE 107
1380
+
1381
+
1382
+ typedef struct
1383
+ {
1384
+ FIT_DATE_TIME timestamp; // s, Lap end time.
1385
+ FIT_DATE_TIME start_time; //
1386
+ FIT_SINT32 start_position_lat; // semicircles, **** Invalid is lat & long both 0x7FFFFFFF! Deg = 180 / (2^31)
1387
+ FIT_SINT32 start_position_long; // semicircles, **** Invalid is lat & long both 0x7FFFFFFF! Deg = 180 / (2^31)
1388
+ FIT_SINT32 end_position_lat; // semicircles, **** Invalid is lat & long both 0x7FFFFFFF! Deg = 180 / (2^31)
1389
+ FIT_SINT32 end_position_long; // semicircles, **** Invalid is lat & long both 0x7FFFFFFF! Deg = 180 / (2^31)
1390
+ FIT_UINT32 total_elapsed_time; // 1000.000 * s, Time (includes pauses)
1391
+ FIT_UINT32 total_timer_time; // 1000.000 * s, Timer Time (excludes pauses)
1392
+ FIT_UINT32 total_distance; // 100.000 * m,
1393
+ FIT_UINT32 total_cycles; // cycles,
1394
+ FIT_SINT32 nec_lat; // semicircles,
1395
+ FIT_SINT32 nec_long; // semicircles,
1396
+ FIT_SINT32 swc_lat; // semicircles,
1397
+ FIT_SINT32 swc_long; // semicircles,
1398
+ FIT_MESSAGE_INDEX message_index; //
1399
+ FIT_UINT16 total_calories; // kcal,
1400
+ FIT_UINT16 total_fat_calories; // kcal, If New Leaf
1401
+ FIT_UINT16 avg_speed; // 1000.000 * m/s,
1402
+ FIT_UINT16 max_speed; // 1000.000 * m/s,
1403
+ FIT_UINT16 avg_power; // watts, total_power / total_timer_time if non_zero_avg_power otherwise total_power / total_elapsed_time
1404
+ FIT_UINT16 max_power; // watts,
1405
+ FIT_UINT16 total_ascent; // m,
1406
+ FIT_UINT16 total_descent; // m,
1407
+ FIT_EVENT event; // default = lap,
1408
+ FIT_EVENT_TYPE event_type; // default = consecutive,
1409
+ FIT_UINT8 avg_heart_rate; // bpm,
1410
+ FIT_UINT8 max_heart_rate; // bpm,
1411
+ FIT_UINT8 avg_cadence; // rpm, total_cycles / total_timer_time if non_zero_avg_cadence otherwise total_cycles / total_elapsed_time
1412
+ FIT_UINT8 max_cadence; // rpm,
1413
+ FIT_INTENSITY intensity; //
1414
+ FIT_LAP_TRIGGER lap_trigger; //
1415
+ FIT_SPORT sport; //
1416
+ FIT_UINT8 event_group; //
1417
+ } FIT_LAP_MESG;
1418
+
1419
+ #define FIT_LAP_MESG_SIZE 84
1420
+
1421
+ typedef enum
1422
+ {
1423
+ FIT_LAP_FIELD_NUM_TIMESTAMP = 253,
1424
+ FIT_LAP_FIELD_NUM_START_TIME = 2,
1425
+ FIT_LAP_FIELD_NUM_START_POSITION_LAT = 3,
1426
+ FIT_LAP_FIELD_NUM_START_POSITION_LONG = 4,
1427
+ FIT_LAP_FIELD_NUM_END_POSITION_LAT = 5,
1428
+ FIT_LAP_FIELD_NUM_END_POSITION_LONG = 6,
1429
+ FIT_LAP_FIELD_NUM_TOTAL_ELAPSED_TIME = 7,
1430
+ FIT_LAP_FIELD_NUM_TOTAL_TIMER_TIME = 8,
1431
+ FIT_LAP_FIELD_NUM_TOTAL_DISTANCE = 9,
1432
+ FIT_LAP_FIELD_NUM_TOTAL_CYCLES = 10,
1433
+ FIT_LAP_FIELD_NUM_NEC_LAT = 27,
1434
+ FIT_LAP_FIELD_NUM_NEC_LONG = 28,
1435
+ FIT_LAP_FIELD_NUM_SWC_LAT = 29,
1436
+ FIT_LAP_FIELD_NUM_SWC_LONG = 30,
1437
+ FIT_LAP_FIELD_NUM_MESSAGE_INDEX = 254,
1438
+ FIT_LAP_FIELD_NUM_TOTAL_CALORIES = 11,
1439
+ FIT_LAP_FIELD_NUM_TOTAL_FAT_CALORIES = 12,
1440
+ FIT_LAP_FIELD_NUM_AVG_SPEED = 13,
1441
+ FIT_LAP_FIELD_NUM_MAX_SPEED = 14,
1442
+ FIT_LAP_FIELD_NUM_AVG_POWER = 19,
1443
+ FIT_LAP_FIELD_NUM_MAX_POWER = 20,
1444
+ FIT_LAP_FIELD_NUM_TOTAL_ASCENT = 21,
1445
+ FIT_LAP_FIELD_NUM_TOTAL_DESCENT = 22,
1446
+ FIT_LAP_FIELD_NUM_EVENT = 0,
1447
+ FIT_LAP_FIELD_NUM_EVENT_TYPE = 1,
1448
+ FIT_LAP_FIELD_NUM_AVG_HEART_RATE = 15,
1449
+ FIT_LAP_FIELD_NUM_MAX_HEART_RATE = 16,
1450
+ FIT_LAP_FIELD_NUM_AVG_CADENCE = 17,
1451
+ FIT_LAP_FIELD_NUM_MAX_CADENCE = 18,
1452
+ FIT_LAP_FIELD_NUM_INTENSITY = 23,
1453
+ FIT_LAP_FIELD_NUM_LAP_TRIGGER = 24,
1454
+ FIT_LAP_FIELD_NUM_SPORT = 25,
1455
+ FIT_LAP_FIELD_NUM_EVENT_GROUP = 26
1456
+ } FIT_LAP_FIELD_NUM;
1457
+
1458
+ typedef enum
1459
+ {
1460
+ FIT_LAP_MESG_TIMESTAMP,
1461
+ FIT_LAP_MESG_START_TIME,
1462
+ FIT_LAP_MESG_START_POSITION_LAT,
1463
+ FIT_LAP_MESG_START_POSITION_LONG,
1464
+ FIT_LAP_MESG_END_POSITION_LAT,
1465
+ FIT_LAP_MESG_END_POSITION_LONG,
1466
+ FIT_LAP_MESG_TOTAL_ELAPSED_TIME,
1467
+ FIT_LAP_MESG_TOTAL_TIMER_TIME,
1468
+ FIT_LAP_MESG_TOTAL_DISTANCE,
1469
+ FIT_LAP_MESG_TOTAL_CYCLES,
1470
+ FIT_LAP_MESG_NEC_LAT,
1471
+ FIT_LAP_MESG_NEC_LONG,
1472
+ FIT_LAP_MESG_SWC_LAT,
1473
+ FIT_LAP_MESG_SWC_LONG,
1474
+ FIT_LAP_MESG_MESSAGE_INDEX,
1475
+ FIT_LAP_MESG_TOTAL_CALORIES,
1476
+ FIT_LAP_MESG_TOTAL_FAT_CALORIES,
1477
+ FIT_LAP_MESG_AVG_SPEED,
1478
+ FIT_LAP_MESG_MAX_SPEED,
1479
+ FIT_LAP_MESG_AVG_POWER,
1480
+ FIT_LAP_MESG_MAX_POWER,
1481
+ FIT_LAP_MESG_TOTAL_ASCENT,
1482
+ FIT_LAP_MESG_TOTAL_DESCENT,
1483
+ FIT_LAP_MESG_EVENT,
1484
+ FIT_LAP_MESG_EVENT_TYPE,
1485
+ FIT_LAP_MESG_AVG_HEART_RATE,
1486
+ FIT_LAP_MESG_MAX_HEART_RATE,
1487
+ FIT_LAP_MESG_AVG_CADENCE,
1488
+ FIT_LAP_MESG_MAX_CADENCE,
1489
+ FIT_LAP_MESG_INTENSITY,
1490
+ FIT_LAP_MESG_LAP_TRIGGER,
1491
+ FIT_LAP_MESG_SPORT,
1492
+ FIT_LAP_MESG_EVENT_GROUP,
1493
+ FIT_LAP_MESG_FIELDS
1494
+ } FIT_LAP_MESG_FIELD;
1495
+
1496
+ typedef struct
1497
+ {
1498
+ FIT_UINT8 reserved_1;
1499
+ FIT_UINT8 arch;
1500
+ FIT_MESG_NUM global_mesg_num;
1501
+ FIT_UINT8 num_fields;
1502
+ FIT_UINT8 fields[FIT_LAP_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
1503
+ } FIT_LAP_MESG_DEF;
1504
+
1505
+ #define FIT_LAP_MESG_DEF_SIZE 104
1506
+
1507
+ #define FIT_RECORD_MESG_COMPRESSED_SPEED_DISTANCE_COUNT 3
1508
+
1509
+ typedef struct
1510
+ {
1511
+ FIT_DATE_TIME timestamp; // s,
1512
+ FIT_SINT32 position_lat; // semicircles, **** Invalid is lat & long both 0x7FFFFFFF! Deg = 180 / (2^31)
1513
+ FIT_SINT32 position_long; // semicircles, **** Invalid is lat & long both 0x7FFFFFFF! Deg = 180 / (2^31)
1514
+ FIT_UINT32 distance; // 100.000 * m,
1515
+ FIT_SINT32 time_from_course; // 1000.000 * s, required?
1516
+ FIT_BYTE compressed_speed_distance[FIT_RECORD_MESG_COMPRESSED_SPEED_DISTANCE_COUNT]; //
1517
+ FIT_UINT8 heart_rate; // bpm,
1518
+ FIT_UINT16 altitude; // 5.000 * (m + 500.000),
1519
+ FIT_UINT16 speed; // 1000.000 * m/s, Max 65.5m/s or 234km/hr
1520
+ FIT_UINT16 power; // watts,
1521
+ FIT_SINT16 grade; // 100.000 * %,
1522
+ FIT_UINT8 cadence; // rpm, Running CAD Bike CAD Rowing CAD
1523
+ FIT_UINT8 resistance; // Relative. 0 is none 254 is Max.
1524
+ FIT_UINT8 cycle_length; // 100.000 * m,
1525
+ FIT_SINT8 temperature; // �C,
1526
+ } FIT_RECORD_MESG;
1527
+
1528
+ #define FIT_RECORD_MESG_SIZE 36
1529
+
1530
+ typedef enum
1531
+ {
1532
+ FIT_RECORD_FIELD_NUM_TIMESTAMP = 253,
1533
+ FIT_RECORD_FIELD_NUM_POSITION_LAT = 0,
1534
+ FIT_RECORD_FIELD_NUM_POSITION_LONG = 1,
1535
+ FIT_RECORD_FIELD_NUM_DISTANCE = 5,
1536
+ FIT_RECORD_FIELD_NUM_TIME_FROM_COURSE = 11,
1537
+ FIT_RECORD_FIELD_NUM_COMPRESSED_SPEED_DISTANCE = 8,
1538
+ FIT_RECORD_FIELD_NUM_HEART_RATE = 3,
1539
+ FIT_RECORD_FIELD_NUM_ALTITUDE = 2,
1540
+ FIT_RECORD_FIELD_NUM_SPEED = 6,
1541
+ FIT_RECORD_FIELD_NUM_POWER = 7,
1542
+ FIT_RECORD_FIELD_NUM_GRADE = 9,
1543
+ FIT_RECORD_FIELD_NUM_CADENCE = 4,
1544
+ FIT_RECORD_FIELD_NUM_RESISTANCE = 10,
1545
+ FIT_RECORD_FIELD_NUM_CYCLE_LENGTH = 12,
1546
+ FIT_RECORD_FIELD_NUM_TEMPERATURE = 13
1547
+ } FIT_RECORD_FIELD_NUM;
1548
+
1549
+ typedef enum
1550
+ {
1551
+ FIT_RECORD_MESG_TIMESTAMP,
1552
+ FIT_RECORD_MESG_POSITION_LAT,
1553
+ FIT_RECORD_MESG_POSITION_LONG,
1554
+ FIT_RECORD_MESG_DISTANCE,
1555
+ FIT_RECORD_MESG_TIME_FROM_COURSE,
1556
+ FIT_RECORD_MESG_COMPRESSED_SPEED_DISTANCE,
1557
+ FIT_RECORD_MESG_HEART_RATE,
1558
+ FIT_RECORD_MESG_ALTITUDE,
1559
+ FIT_RECORD_MESG_SPEED,
1560
+ FIT_RECORD_MESG_POWER,
1561
+ FIT_RECORD_MESG_GRADE,
1562
+ FIT_RECORD_MESG_CADENCE,
1563
+ FIT_RECORD_MESG_RESISTANCE,
1564
+ FIT_RECORD_MESG_CYCLE_LENGTH,
1565
+ FIT_RECORD_MESG_TEMPERATURE,
1566
+ FIT_RECORD_MESG_FIELDS
1567
+ } FIT_RECORD_MESG_FIELD;
1568
+
1569
+ typedef struct
1570
+ {
1571
+ FIT_UINT8 reserved_1;
1572
+ FIT_UINT8 arch;
1573
+ FIT_MESG_NUM global_mesg_num;
1574
+ FIT_UINT8 num_fields;
1575
+ FIT_UINT8 fields[FIT_RECORD_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
1576
+ } FIT_RECORD_MESG_DEF;
1577
+
1578
+ #define FIT_RECORD_MESG_DEF_SIZE 50
1579
+
1580
+
1581
+ typedef struct
1582
+ {
1583
+ FIT_DATE_TIME timestamp; // s,
1584
+ FIT_UINT32 data; //
1585
+ FIT_UINT16 data16; //
1586
+ FIT_EVENT event; //
1587
+ FIT_EVENT_TYPE event_type; //
1588
+ FIT_UINT8 event_group; //
1589
+ } FIT_EVENT_MESG;
1590
+
1591
+ #define FIT_EVENT_MESG_SIZE 13
1592
+
1593
+ typedef enum
1594
+ {
1595
+ FIT_EVENT_FIELD_NUM_TIMESTAMP = 253,
1596
+ FIT_EVENT_FIELD_NUM_DATA = 3,
1597
+ FIT_EVENT_FIELD_NUM_DATA16 = 2,
1598
+ FIT_EVENT_FIELD_NUM_EVENT = 0,
1599
+ FIT_EVENT_FIELD_NUM_EVENT_TYPE = 1,
1600
+ FIT_EVENT_FIELD_NUM_EVENT_GROUP = 4
1601
+ } FIT_EVENT_FIELD_NUM;
1602
+
1603
+ typedef enum
1604
+ {
1605
+ FIT_EVENT_MESG_TIMESTAMP,
1606
+ FIT_EVENT_MESG_DATA,
1607
+ FIT_EVENT_MESG_DATA16,
1608
+ FIT_EVENT_MESG_EVENT,
1609
+ FIT_EVENT_MESG_EVENT_TYPE,
1610
+ FIT_EVENT_MESG_EVENT_GROUP,
1611
+ FIT_EVENT_MESG_FIELDS
1612
+ } FIT_EVENT_MESG_FIELD;
1613
+
1614
+ typedef struct
1615
+ {
1616
+ FIT_UINT8 reserved_1;
1617
+ FIT_UINT8 arch;
1618
+ FIT_MESG_NUM global_mesg_num;
1619
+ FIT_UINT8 num_fields;
1620
+ FIT_UINT8 fields[FIT_EVENT_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
1621
+ } FIT_EVENT_MESG_DEF;
1622
+
1623
+ #define FIT_EVENT_MESG_DEF_SIZE 23
1624
+
1625
+
1626
+ typedef struct
1627
+ {
1628
+ FIT_DATE_TIME timestamp; // s,
1629
+ FIT_UINT32Z serial_number; //
1630
+ FIT_MANUFACTURER manufacturer; //
1631
+ FIT_UINT16 product; //
1632
+ FIT_UINT16 software_version; //
1633
+ FIT_UINT16 battery_voltage; // 256.000 * V,
1634
+ FIT_DEVICE_INDEX device_index; //
1635
+ FIT_DEVICE_TYPE device_type; //
1636
+ FIT_UINT8 hardware_version; //
1637
+ FIT_BATTERY_STATUS battery_status; //
1638
+ } FIT_DEVICE_INFO_MESG;
1639
+
1640
+ #define FIT_DEVICE_INFO_MESG_SIZE 20
1641
+
1642
+ typedef enum
1643
+ {
1644
+ FIT_DEVICE_INFO_FIELD_NUM_TIMESTAMP = 253,
1645
+ FIT_DEVICE_INFO_FIELD_NUM_SERIAL_NUMBER = 3,
1646
+ FIT_DEVICE_INFO_FIELD_NUM_MANUFACTURER = 2,
1647
+ FIT_DEVICE_INFO_FIELD_NUM_PRODUCT = 4,
1648
+ FIT_DEVICE_INFO_FIELD_NUM_SOFTWARE_VERSION = 5,
1649
+ FIT_DEVICE_INFO_FIELD_NUM_BATTERY_VOLTAGE = 10,
1650
+ FIT_DEVICE_INFO_FIELD_NUM_DEVICE_INDEX = 0,
1651
+ FIT_DEVICE_INFO_FIELD_NUM_DEVICE_TYPE = 1,
1652
+ FIT_DEVICE_INFO_FIELD_NUM_HARDWARE_VERSION = 6,
1653
+ FIT_DEVICE_INFO_FIELD_NUM_BATTERY_STATUS = 11
1654
+ } FIT_DEVICE_INFO_FIELD_NUM;
1655
+
1656
+ typedef enum
1657
+ {
1658
+ FIT_DEVICE_INFO_MESG_TIMESTAMP,
1659
+ FIT_DEVICE_INFO_MESG_SERIAL_NUMBER,
1660
+ FIT_DEVICE_INFO_MESG_MANUFACTURER,
1661
+ FIT_DEVICE_INFO_MESG_PRODUCT,
1662
+ FIT_DEVICE_INFO_MESG_SOFTWARE_VERSION,
1663
+ FIT_DEVICE_INFO_MESG_BATTERY_VOLTAGE,
1664
+ FIT_DEVICE_INFO_MESG_DEVICE_INDEX,
1665
+ FIT_DEVICE_INFO_MESG_DEVICE_TYPE,
1666
+ FIT_DEVICE_INFO_MESG_HARDWARE_VERSION,
1667
+ FIT_DEVICE_INFO_MESG_BATTERY_STATUS,
1668
+ FIT_DEVICE_INFO_MESG_FIELDS
1669
+ } FIT_DEVICE_INFO_MESG_FIELD;
1670
+
1671
+ typedef struct
1672
+ {
1673
+ FIT_UINT8 reserved_1;
1674
+ FIT_UINT8 arch;
1675
+ FIT_MESG_NUM global_mesg_num;
1676
+ FIT_UINT8 num_fields;
1677
+ FIT_UINT8 fields[FIT_DEVICE_INFO_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
1678
+ } FIT_DEVICE_INFO_MESG_DEF;
1679
+
1680
+ #define FIT_DEVICE_INFO_MESG_DEF_SIZE 35
1681
+
1682
+ #define FIT_COURSE_MESG_NAME_COUNT 16
1683
+
1684
+ typedef struct
1685
+ {
1686
+ FIT_STRING name[FIT_COURSE_MESG_NAME_COUNT]; //
1687
+ FIT_COURSE_CAPABILITIES capabilities; //
1688
+ FIT_SPORT sport; //
1689
+ } FIT_COURSE_MESG;
1690
+
1691
+ #define FIT_COURSE_MESG_SIZE 21
1692
+
1693
+ typedef enum
1694
+ {
1695
+ FIT_COURSE_FIELD_NUM_NAME = 5,
1696
+ FIT_COURSE_FIELD_NUM_CAPABILITIES = 6,
1697
+ FIT_COURSE_FIELD_NUM_SPORT = 4
1698
+ } FIT_COURSE_FIELD_NUM;
1699
+
1700
+ typedef enum
1701
+ {
1702
+ FIT_COURSE_MESG_NAME,
1703
+ FIT_COURSE_MESG_CAPABILITIES,
1704
+ FIT_COURSE_MESG_SPORT,
1705
+ FIT_COURSE_MESG_FIELDS
1706
+ } FIT_COURSE_MESG_FIELD;
1707
+
1708
+ typedef struct
1709
+ {
1710
+ FIT_UINT8 reserved_1;
1711
+ FIT_UINT8 arch;
1712
+ FIT_MESG_NUM global_mesg_num;
1713
+ FIT_UINT8 num_fields;
1714
+ FIT_UINT8 fields[FIT_COURSE_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
1715
+ } FIT_COURSE_MESG_DEF;
1716
+
1717
+ #define FIT_COURSE_MESG_DEF_SIZE 14
1718
+
1719
+ #define FIT_COURSE_POINT_MESG_NAME_COUNT 16
1720
+
1721
+ typedef struct
1722
+ {
1723
+ FIT_UINT32 time; //
1724
+ FIT_SINT32 position_lat; // semicircles,
1725
+ FIT_SINT32 position_long; // semicircles,
1726
+ FIT_UINT32 distance; // 100.000 * m,
1727
+ FIT_STRING name[FIT_COURSE_POINT_MESG_NAME_COUNT]; //
1728
+ FIT_MESSAGE_INDEX message_index; //
1729
+ FIT_COURSE_POINT type; //
1730
+ } FIT_COURSE_POINT_MESG;
1731
+
1732
+ #define FIT_COURSE_POINT_MESG_SIZE 35
1733
+
1734
+ typedef enum
1735
+ {
1736
+ FIT_COURSE_POINT_FIELD_NUM_TIME = 1,
1737
+ FIT_COURSE_POINT_FIELD_NUM_POSITION_LAT = 2,
1738
+ FIT_COURSE_POINT_FIELD_NUM_POSITION_LONG = 3,
1739
+ FIT_COURSE_POINT_FIELD_NUM_DISTANCE = 4,
1740
+ FIT_COURSE_POINT_FIELD_NUM_NAME = 6,
1741
+ FIT_COURSE_POINT_FIELD_NUM_MESSAGE_INDEX = 254,
1742
+ FIT_COURSE_POINT_FIELD_NUM_TYPE = 5
1743
+ } FIT_COURSE_POINT_FIELD_NUM;
1744
+
1745
+ typedef enum
1746
+ {
1747
+ FIT_COURSE_POINT_MESG_TIME,
1748
+ FIT_COURSE_POINT_MESG_POSITION_LAT,
1749
+ FIT_COURSE_POINT_MESG_POSITION_LONG,
1750
+ FIT_COURSE_POINT_MESG_DISTANCE,
1751
+ FIT_COURSE_POINT_MESG_NAME,
1752
+ FIT_COURSE_POINT_MESG_MESSAGE_INDEX,
1753
+ FIT_COURSE_POINT_MESG_TYPE,
1754
+ FIT_COURSE_POINT_MESG_FIELDS
1755
+ } FIT_COURSE_POINT_MESG_FIELD;
1756
+
1757
+ typedef struct
1758
+ {
1759
+ FIT_UINT8 reserved_1;
1760
+ FIT_UINT8 arch;
1761
+ FIT_MESG_NUM global_mesg_num;
1762
+ FIT_UINT8 num_fields;
1763
+ FIT_UINT8 fields[FIT_COURSE_POINT_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
1764
+ } FIT_COURSE_POINT_MESG_DEF;
1765
+
1766
+ #define FIT_COURSE_POINT_MESG_DEF_SIZE 26
1767
+
1768
+ #define FIT_WORKOUT_MESG_WKT_NAME_COUNT 16
1769
+
1770
+ typedef struct
1771
+ {
1772
+ FIT_WORKOUT_CAPABILITIES capabilities; //
1773
+ FIT_STRING wkt_name[FIT_WORKOUT_MESG_WKT_NAME_COUNT]; //
1774
+ FIT_UINT16 num_valid_steps; // number of valid steps
1775
+ FIT_UINT16 protection; // some simple hash of the unit id and workout id for the unit to check. Allows this workout to only be run on the particular unit id
1776
+ FIT_SPORT sport; //
1777
+ } FIT_WORKOUT_MESG;
1778
+
1779
+ #define FIT_WORKOUT_MESG_SIZE 25
1780
+
1781
+ typedef enum
1782
+ {
1783
+ FIT_WORKOUT_FIELD_NUM_CAPABILITIES = 5,
1784
+ FIT_WORKOUT_FIELD_NUM_WKT_NAME = 8,
1785
+ FIT_WORKOUT_FIELD_NUM_NUM_VALID_STEPS = 6,
1786
+ FIT_WORKOUT_FIELD_NUM_PROTECTION = 7,
1787
+ FIT_WORKOUT_FIELD_NUM_SPORT = 4
1788
+ } FIT_WORKOUT_FIELD_NUM;
1789
+
1790
+ typedef enum
1791
+ {
1792
+ FIT_WORKOUT_MESG_CAPABILITIES,
1793
+ FIT_WORKOUT_MESG_WKT_NAME,
1794
+ FIT_WORKOUT_MESG_NUM_VALID_STEPS,
1795
+ FIT_WORKOUT_MESG_PROTECTION,
1796
+ FIT_WORKOUT_MESG_SPORT,
1797
+ FIT_WORKOUT_MESG_FIELDS
1798
+ } FIT_WORKOUT_MESG_FIELD;
1799
+
1800
+ typedef struct
1801
+ {
1802
+ FIT_UINT8 reserved_1;
1803
+ FIT_UINT8 arch;
1804
+ FIT_MESG_NUM global_mesg_num;
1805
+ FIT_UINT8 num_fields;
1806
+ FIT_UINT8 fields[FIT_WORKOUT_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
1807
+ } FIT_WORKOUT_MESG_DEF;
1808
+
1809
+ #define FIT_WORKOUT_MESG_DEF_SIZE 20
1810
+
1811
+ #define FIT_WORKOUT_STEP_MESG_WKT_STEP_NAME_COUNT 16
1812
+
1813
+ typedef struct
1814
+ {
1815
+ FIT_STRING wkt_step_name[FIT_WORKOUT_STEP_MESG_WKT_STEP_NAME_COUNT]; //
1816
+ FIT_UINT32 duration_value; //
1817
+ FIT_UINT32 target_value; //
1818
+ FIT_UINT32 custom_target_value_low; // could have # of target types
1819
+ FIT_UINT32 custom_target_value_high; //
1820
+ FIT_MESSAGE_INDEX message_index; //
1821
+ FIT_WKT_STEP_DURATION duration_type; //
1822
+ FIT_WKT_STEP_TARGET target_type; //
1823
+ FIT_INTENSITY intensity; // rest step?
1824
+ } FIT_WORKOUT_STEP_MESG;
1825
+
1826
+ #define FIT_WORKOUT_STEP_MESG_SIZE 37
1827
+
1828
+ typedef enum
1829
+ {
1830
+ FIT_WORKOUT_STEP_FIELD_NUM_WKT_STEP_NAME = 0,
1831
+ FIT_WORKOUT_STEP_FIELD_NUM_DURATION_VALUE = 2,
1832
+ FIT_WORKOUT_STEP_FIELD_NUM_TARGET_VALUE = 4,
1833
+ FIT_WORKOUT_STEP_FIELD_NUM_CUSTOM_TARGET_VALUE_LOW = 5,
1834
+ FIT_WORKOUT_STEP_FIELD_NUM_CUSTOM_TARGET_VALUE_HIGH = 6,
1835
+ FIT_WORKOUT_STEP_FIELD_NUM_MESSAGE_INDEX = 254,
1836
+ FIT_WORKOUT_STEP_FIELD_NUM_DURATION_TYPE = 1,
1837
+ FIT_WORKOUT_STEP_FIELD_NUM_TARGET_TYPE = 3,
1838
+ FIT_WORKOUT_STEP_FIELD_NUM_INTENSITY = 7
1839
+ } FIT_WORKOUT_STEP_FIELD_NUM;
1840
+
1841
+ typedef enum
1842
+ {
1843
+ FIT_WORKOUT_STEP_MESG_WKT_STEP_NAME,
1844
+ FIT_WORKOUT_STEP_MESG_DURATION_VALUE,
1845
+ FIT_WORKOUT_STEP_MESG_TARGET_VALUE,
1846
+ FIT_WORKOUT_STEP_MESG_CUSTOM_TARGET_VALUE_LOW,
1847
+ FIT_WORKOUT_STEP_MESG_CUSTOM_TARGET_VALUE_HIGH,
1848
+ FIT_WORKOUT_STEP_MESG_MESSAGE_INDEX,
1849
+ FIT_WORKOUT_STEP_MESG_DURATION_TYPE,
1850
+ FIT_WORKOUT_STEP_MESG_TARGET_TYPE,
1851
+ FIT_WORKOUT_STEP_MESG_INTENSITY,
1852
+ FIT_WORKOUT_STEP_MESG_FIELDS
1853
+ } FIT_WORKOUT_STEP_MESG_FIELD;
1854
+
1855
+ typedef struct
1856
+ {
1857
+ FIT_UINT8 reserved_1;
1858
+ FIT_UINT8 arch;
1859
+ FIT_MESG_NUM global_mesg_num;
1860
+ FIT_UINT8 num_fields;
1861
+ FIT_UINT8 fields[FIT_WORKOUT_STEP_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
1862
+ } FIT_WORKOUT_STEP_MESG_DEF;
1863
+
1864
+ #define FIT_WORKOUT_STEP_MESG_DEF_SIZE 32
1865
+
1866
+
1867
+ typedef struct
1868
+ {
1869
+ FIT_UINT32Z serial_number; // Corresponds to file_id of scheduled workout / course.
1870
+ FIT_DATE_TIME time_created; // Corresponds to file_id of scheduled workout / course.
1871
+ FIT_DATE_TIME scheduled_time; //
1872
+ FIT_MANUFACTURER manufacturer; // Corresponds to file_id of scheduled workout / course.
1873
+ FIT_UINT16 product; // Corresponds to file_id of scheduled workout / course.
1874
+ FIT_BOOL completed; // TRUE if this activity has been started
1875
+ FIT_SCHEDULE type; //
1876
+ } FIT_SCHEDULE_MESG;
1877
+
1878
+ #define FIT_SCHEDULE_MESG_SIZE 18
1879
+
1880
+ typedef enum
1881
+ {
1882
+ FIT_SCHEDULE_FIELD_NUM_SERIAL_NUMBER = 2,
1883
+ FIT_SCHEDULE_FIELD_NUM_TIME_CREATED = 3,
1884
+ FIT_SCHEDULE_FIELD_NUM_SCHEDULED_TIME = 6,
1885
+ FIT_SCHEDULE_FIELD_NUM_MANUFACTURER = 0,
1886
+ FIT_SCHEDULE_FIELD_NUM_PRODUCT = 1,
1887
+ FIT_SCHEDULE_FIELD_NUM_COMPLETED = 4,
1888
+ FIT_SCHEDULE_FIELD_NUM_TYPE = 5
1889
+ } FIT_SCHEDULE_FIELD_NUM;
1890
+
1891
+ typedef enum
1892
+ {
1893
+ FIT_SCHEDULE_MESG_SERIAL_NUMBER,
1894
+ FIT_SCHEDULE_MESG_TIME_CREATED,
1895
+ FIT_SCHEDULE_MESG_SCHEDULED_TIME,
1896
+ FIT_SCHEDULE_MESG_MANUFACTURER,
1897
+ FIT_SCHEDULE_MESG_PRODUCT,
1898
+ FIT_SCHEDULE_MESG_COMPLETED,
1899
+ FIT_SCHEDULE_MESG_TYPE,
1900
+ FIT_SCHEDULE_MESG_FIELDS
1901
+ } FIT_SCHEDULE_MESG_FIELD;
1902
+
1903
+ typedef struct
1904
+ {
1905
+ FIT_UINT8 reserved_1;
1906
+ FIT_UINT8 arch;
1907
+ FIT_MESG_NUM global_mesg_num;
1908
+ FIT_UINT8 num_fields;
1909
+ FIT_UINT8 fields[FIT_SCHEDULE_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
1910
+ } FIT_SCHEDULE_MESG_DEF;
1911
+
1912
+ #define FIT_SCHEDULE_MESG_DEF_SIZE 26
1913
+
1914
+
1915
+ typedef struct
1916
+ {
1917
+ FIT_DATE_TIME timestamp; // s,
1918
+ FIT_UINT32 timer_time; // s, Excludes pauses
1919
+ FIT_UINT32 distance; // m,
1920
+ FIT_UINT32 calories; // kcal,
1921
+ FIT_MESSAGE_INDEX message_index; //
1922
+ FIT_SPORT sport; //
1923
+ } FIT_TOTALS_MESG;
1924
+
1925
+ #define FIT_TOTALS_MESG_SIZE 19
1926
+
1927
+ typedef enum
1928
+ {
1929
+ FIT_TOTALS_FIELD_NUM_TIMESTAMP = 253,
1930
+ FIT_TOTALS_FIELD_NUM_TIMER_TIME = 0,
1931
+ FIT_TOTALS_FIELD_NUM_DISTANCE = 1,
1932
+ FIT_TOTALS_FIELD_NUM_CALORIES = 2,
1933
+ FIT_TOTALS_FIELD_NUM_MESSAGE_INDEX = 254,
1934
+ FIT_TOTALS_FIELD_NUM_SPORT = 3
1935
+ } FIT_TOTALS_FIELD_NUM;
1936
+
1937
+ typedef enum
1938
+ {
1939
+ FIT_TOTALS_MESG_TIMESTAMP,
1940
+ FIT_TOTALS_MESG_TIMER_TIME,
1941
+ FIT_TOTALS_MESG_DISTANCE,
1942
+ FIT_TOTALS_MESG_CALORIES,
1943
+ FIT_TOTALS_MESG_MESSAGE_INDEX,
1944
+ FIT_TOTALS_MESG_SPORT,
1945
+ FIT_TOTALS_MESG_FIELDS
1946
+ } FIT_TOTALS_MESG_FIELD;
1947
+
1948
+ typedef struct
1949
+ {
1950
+ FIT_UINT8 reserved_1;
1951
+ FIT_UINT8 arch;
1952
+ FIT_MESG_NUM global_mesg_num;
1953
+ FIT_UINT8 num_fields;
1954
+ FIT_UINT8 fields[FIT_TOTALS_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
1955
+ } FIT_TOTALS_MESG_DEF;
1956
+
1957
+ #define FIT_TOTALS_MESG_DEF_SIZE 23
1958
+
1959
+
1960
+ typedef struct
1961
+ {
1962
+ FIT_DATE_TIME timestamp; // s,
1963
+ FIT_WEIGHT weight; // 100.000 * kg,
1964
+ FIT_UINT16 percent_fat; // 100.000 * %,
1965
+ FIT_UINT16 percent_hydration; // 100.000 * %,
1966
+ FIT_UINT16 visceral_fat_mass; // 100.000 * kg,
1967
+ FIT_UINT16 bone_mass; // 100.000 * kg,
1968
+ FIT_UINT16 muscle_mass; // 100.000 * kg,
1969
+ FIT_UINT16 basal_met; // 4.000 * kcal/day,
1970
+ FIT_UINT16 active_met; // 4.000 * kcal/day, ~4kJ per kcal, 0.25 allows max 16384 kcal
1971
+ FIT_UINT8 physique_rating; //
1972
+ FIT_UINT8 metabolic_age; // years,
1973
+ FIT_UINT8 visceral_fat_rating; //
1974
+ } FIT_WEIGHT_SCALE_MESG;
1975
+
1976
+ #define FIT_WEIGHT_SCALE_MESG_SIZE 23
1977
+
1978
+ typedef enum
1979
+ {
1980
+ FIT_WEIGHT_SCALE_FIELD_NUM_TIMESTAMP = 253,
1981
+ FIT_WEIGHT_SCALE_FIELD_NUM_WEIGHT = 0,
1982
+ FIT_WEIGHT_SCALE_FIELD_NUM_PERCENT_FAT = 1,
1983
+ FIT_WEIGHT_SCALE_FIELD_NUM_PERCENT_HYDRATION = 2,
1984
+ FIT_WEIGHT_SCALE_FIELD_NUM_VISCERAL_FAT_MASS = 3,
1985
+ FIT_WEIGHT_SCALE_FIELD_NUM_BONE_MASS = 4,
1986
+ FIT_WEIGHT_SCALE_FIELD_NUM_MUSCLE_MASS = 5,
1987
+ FIT_WEIGHT_SCALE_FIELD_NUM_BASAL_MET = 7,
1988
+ FIT_WEIGHT_SCALE_FIELD_NUM_ACTIVE_MET = 9,
1989
+ FIT_WEIGHT_SCALE_FIELD_NUM_PHYSIQUE_RATING = 8,
1990
+ FIT_WEIGHT_SCALE_FIELD_NUM_METABOLIC_AGE = 10,
1991
+ FIT_WEIGHT_SCALE_FIELD_NUM_VISCERAL_FAT_RATING = 11
1992
+ } FIT_WEIGHT_SCALE_FIELD_NUM;
1993
+
1994
+ typedef enum
1995
+ {
1996
+ FIT_WEIGHT_SCALE_MESG_TIMESTAMP,
1997
+ FIT_WEIGHT_SCALE_MESG_WEIGHT,
1998
+ FIT_WEIGHT_SCALE_MESG_PERCENT_FAT,
1999
+ FIT_WEIGHT_SCALE_MESG_PERCENT_HYDRATION,
2000
+ FIT_WEIGHT_SCALE_MESG_VISCERAL_FAT_MASS,
2001
+ FIT_WEIGHT_SCALE_MESG_BONE_MASS,
2002
+ FIT_WEIGHT_SCALE_MESG_MUSCLE_MASS,
2003
+ FIT_WEIGHT_SCALE_MESG_BASAL_MET,
2004
+ FIT_WEIGHT_SCALE_MESG_ACTIVE_MET,
2005
+ FIT_WEIGHT_SCALE_MESG_PHYSIQUE_RATING,
2006
+ FIT_WEIGHT_SCALE_MESG_METABOLIC_AGE,
2007
+ FIT_WEIGHT_SCALE_MESG_VISCERAL_FAT_RATING,
2008
+ FIT_WEIGHT_SCALE_MESG_FIELDS
2009
+ } FIT_WEIGHT_SCALE_MESG_FIELD;
2010
+
2011
+ typedef struct
2012
+ {
2013
+ FIT_UINT8 reserved_1;
2014
+ FIT_UINT8 arch;
2015
+ FIT_MESG_NUM global_mesg_num;
2016
+ FIT_UINT8 num_fields;
2017
+ FIT_UINT8 fields[FIT_WEIGHT_SCALE_MESG_FIELDS * FIT_FIELD_DEF_SIZE];
2018
+ } FIT_WEIGHT_SCALE_MESG_DEF;
2019
+
2020
+ #define FIT_WEIGHT_SCALE_MESG_DEF_SIZE 41
2021
+
2022
+ typedef enum {
2023
+ FIT_MESG_FILE_ID,
2024
+ FIT_MESG_FILE_CREATOR,
2025
+ FIT_MESG_SOFTWARE,
2026
+ FIT_MESG_CAPABILITIES,
2027
+ FIT_MESG_FILE_CAPABILITIES,
2028
+ FIT_MESG_MESG_CAPABILITIES,
2029
+ FIT_MESG_FIELD_CAPABILITIES,
2030
+ FIT_MESG_DEVICE_SETTINGS,
2031
+ FIT_MESG_USER_PROFILE,
2032
+ FIT_MESG_HRM_PROFILE,
2033
+ FIT_MESG_ZONES_TARGET,
2034
+ FIT_MESG_SPORT,
2035
+ FIT_MESG_HR_ZONE,
2036
+ FIT_MESG_SPEED_ZONE,
2037
+ FIT_MESG_POWER_ZONE,
2038
+ FIT_MESG_MET_ZONE,
2039
+ FIT_MESG_ACTIVITY,
2040
+ FIT_MESG_SESSION,
2041
+ FIT_MESG_LAP,
2042
+ FIT_MESG_RECORD,
2043
+ FIT_MESG_EVENT,
2044
+ FIT_MESG_DEVICE_INFO,
2045
+ FIT_MESG_COURSE,
2046
+ FIT_MESG_COURSE_POINT,
2047
+ FIT_MESG_WORKOUT,
2048
+ FIT_MESG_WORKOUT_STEP,
2049
+ FIT_MESG_SCHEDULE,
2050
+ FIT_MESG_TOTALS,
2051
+ FIT_MESG_WEIGHT_SCALE,
2052
+ FIT_MESGS
2053
+ } FIT_MESG;
2054
+
2055
+
2056
+ ///////////////////////////////////////////////////////////////////////
2057
+ // File Structures
2058
+ // Use FIT_MESG_OFFSET macro get byte offset of messages in a file.
2059
+ ///////////////////////////////////////////////////////////////////////
2060
+
2061
+ #define FIT_DEVICE_FILE_FIELD_CAPABILITIES_MESGS 2
2062
+
2063
+ typedef struct
2064
+ {
2065
+ FIT_UINT8 field_capabilities_mesg_def[FIT_HDR_SIZE + FIT_FIELD_CAPABILITIES_MESG_DEF_SIZE];
2066
+ FIT_UINT8 field_capabilities_mesg[FIT_DEVICE_FILE_FIELD_CAPABILITIES_MESGS][FIT_HDR_SIZE + FIT_FIELD_CAPABILITIES_MESG_SIZE];
2067
+ } FIT_DEVICE_FILE;
2068
+
2069
+ #define FIT_DEVICE_FILE_SIZE (0 + FIT_HDR_SIZE + FIT_FIELD_CAPABILITIES_MESG_DEF_SIZE + FIT_DEVICE_FILE_FIELD_CAPABILITIES_MESGS * (FIT_HDR_SIZE + FIT_FIELD_CAPABILITIES_MESG_SIZE))
2070
+
2071
+
2072
+ ///////////////////////////////////////////////////////////////////////
2073
+ // Public Constants
2074
+ ///////////////////////////////////////////////////////////////////////
2075
+
2076
+ const extern FIT_MESG_DEF *fit_mesg_defs[FIT_MESGS];
2077
+ #define FIT_FIELD_CAPABILITIES_MESGS 2
2078
+ const extern FIT_FIELD_CAPABILITIES_MESG fit_field_capabilities[FIT_FIELD_CAPABILITIES_MESGS];
2079
+ #if defined(__cplusplus)
2080
+ }
2081
+ #endif
2082
+
2083
+ #endif // !defined(FIT_SDK_H)