rubyfit 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/ext/rubyfit/fit.c +96 -25
- data/ext/rubyfit/fit.h +127 -44
- data/ext/rubyfit/fit_config.h +7 -7
- data/ext/rubyfit/fit_convert.c +66 -13
- data/ext/rubyfit/fit_convert.h +28 -23
- data/ext/rubyfit/fit_crc.c +30 -6
- data/ext/rubyfit/fit_crc.h +12 -5
- data/ext/rubyfit/fit_example.c +899 -0
- data/ext/rubyfit/fit_example.h +3299 -0
- data/ext/rubyfit/fit_ram.c +203 -0
- data/ext/rubyfit/fit_ram.h +39 -0
- data/ext/rubyfit/rubyfit.c +25 -36
- data/lib/rubyfit/version.rb +1 -1
- metadata +14 -16
- data/ext/rubyfit/fit_product.c +0 -21
- data/ext/rubyfit/fit_product.h +0 -21
- data/ext/rubyfit/fit_sdk.c +0 -618
- data/ext/rubyfit/fit_sdk.h +0 -2083
@@ -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
|
+
|