rubyfit 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,15 +1,13 @@
1
1
  ////////////////////////////////////////////////////////////////////////////////
2
- // The following .FIT software provided may be used with .FIT devices only and
3
- // remains the copyrighted property of Dynastream Innovations Inc.
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
4
  // The software is being provided on an "as-is" basis and as an accommodation,
5
5
  // and therefore all warranties, representations, or guarantees of any kind
6
6
  // (whether express, implied or statutory) including, without limitation,
7
7
  // warranties of merchantability, non-infringement, or fitness for a particular
8
8
  // purpose, are specifically disclaimed.
9
9
  //
10
- // Copyright 2008 Dynastream Innovations Inc.
11
- // All rights reserved. This software may not be reproduced by any means
12
- // without express written approval of Dynastream Innovations Inc.
10
+ // Copyright 2013 Dynastream Innovations Inc.
13
11
  ////////////////////////////////////////////////////////////////////////////////
14
12
 
15
13
 
@@ -21,13 +19,15 @@
21
19
  extern "C" {
22
20
  #endif
23
21
 
24
- #define FIT_LOCAL_MESGS 16 // Adjust to suit RAM requirements.
22
+ #define FIT_USE_STDINT_H // Define to use stdint.h types. By default size in bytes of integer types assumed to be char=1, short=2, long=4.
23
+
24
+ #define FIT_LOCAL_MESGS 16 // 1-16. Sets maximum number of local messages that can be decoded. Lower to minimize RAM requirements.
25
25
  #define FIT_ARCH_ENDIAN FIT_ARCH_ENDIAN_LITTLE // Set to correct endian for build architecture.
26
26
 
27
27
  #define FIT_CONVERT_CHECK_CRC // Define to check file crc.
28
+ #define FIT_CONVERT_CHECK_FILE_HDR_DATA_TYPE // Define to check file header for FIT data type. Verifies file is FIT format before starting decode.
28
29
  #define FIT_CONVERT_TIME_RECORD // Define to support time records (compressed timestamp).
29
30
  //#define FIT_CONVERT_MULTI_THREAD // Define to support multiple conversion threads.
30
- //#define FIT_CONVERT_CHECK_FILE_HDR_DATA_TYPE // Define to check file header for .FIT data type. Verifies file is .FIT format before starting decode.
31
31
 
32
32
  #if defined(__cplusplus)
33
33
  }
@@ -1,16 +1,21 @@
1
1
  ////////////////////////////////////////////////////////////////////////////////
2
- // The following .FIT software provided may be used with .FIT devices only and
3
- // remains the copyrighted property of Dynastream Innovations Inc.
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
4
  // The software is being provided on an "as-is" basis and as an accommodation,
5
5
  // and therefore all warranties, representations, or guarantees of any kind
6
6
  // (whether express, implied or statutory) including, without limitation,
7
7
  // warranties of merchantability, non-infringement, or fitness for a particular
8
8
  // purpose, are specifically disclaimed.
9
9
  //
10
- // Copyright 2008 Dynastream Innovations Inc.
11
- // All rights reserved. This software may not be reproduced by any means
12
- // without express written approval of Dynastream Innovations Inc.
10
+ // Copyright 2013 Dynastream Innovations Inc.
13
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
+
14
19
 
15
20
  #include <string.h>
16
21
 
@@ -103,7 +108,8 @@
103
108
  switch (state->decode_state)
104
109
  {
105
110
  case FIT_CONVERT_DECODE_FILE_HDR:
106
- *((FIT_UINT8 *) &state->u.file_hdr + state->mesg_offset) = datum;
111
+ if (state->mesg_offset < FIT_FILE_HDR_SIZE)
112
+ *((FIT_UINT8 *) &state->u.file_hdr + state->mesg_offset) = datum;
107
113
 
108
114
  if (state->mesg_offset == 0)
109
115
  state->file_bytes_left = state->u.file_hdr.header_size + 2; // Increase to read header and CRC.
@@ -118,14 +124,14 @@
118
124
  state->file_bytes_left |= (FIT_UINT32)*((FIT_UINT8 *) &state->u.file_hdr.data_size + 3) << 24;
119
125
  state->file_bytes_left += 2; // CRC.
120
126
 
121
- if ((state->u.file_hdr.protocol_version & FIT_PROTOCOL_VERSION_MAJOR_MASK) > (FIT_PROTOCOL_VERSION_MAJOR << FIT_PROTOCOL_VERSION_MAJOR_SHIFT))
122
- return FIT_CONVERT_PROTOCOL_VERSION_NOT_SUPPORTED;
123
-
124
127
  #if defined(FIT_CONVERT_CHECK_FILE_HDR_DATA_TYPE)
125
128
  if (memcmp(state->u.file_hdr.data_type, ".FIT", 4) != 0)
126
129
  return FIT_CONVERT_DATA_TYPE_NOT_SUPPORTED;
127
130
  #endif
128
131
 
132
+ if ((state->u.file_hdr.protocol_version & FIT_PROTOCOL_VERSION_MAJOR_MASK) > (FIT_PROTOCOL_VERSION_MAJOR << FIT_PROTOCOL_VERSION_MAJOR_SHIFT))
133
+ return FIT_CONVERT_PROTOCOL_VERSION_NOT_SUPPORTED;
134
+
129
135
  state->decode_state = FIT_CONVERT_DECODE_RECORD;
130
136
  }
131
137
  break;
@@ -173,7 +179,7 @@
173
179
  #if defined(FIT_CONVERT_TIME_RECORD)
174
180
  if (datum & FIT_HDR_TIME_REC_BIT)
175
181
  {
176
- FIT_UINT8 field_offset = Fit_GetFieldOffset(state->mesg_def, FIT_TIMESTAMP_FIELD_NUM);
182
+ FIT_UINT8 field_offset = Fit_GetFieldOffset(state->mesg_def, FIT_FIELD_NUM_TIMESTAMP);
177
183
 
178
184
  if (field_offset != FIT_UINT8_INVALID)
179
185
  memcpy(&state->u.mesg[field_offset], &state->timestamp, sizeof(state->timestamp));
@@ -334,11 +340,19 @@
334
340
  ((state->convert_table[state->mesg_index].arch & FIT_ARCH_ENDIAN_MASK) != (Fit_GetArch() & FIT_ARCH_ENDIAN_MASK))
335
341
  )
336
342
  {
337
- FIT_UINT8 type_size = fit_base_type_sizes[state->convert_table[state->mesg_index].fields[state->field_index].base_type & FIT_BASE_TYPE_NUM_MASK];
338
- FIT_UINT8 element_size = state->convert_table[state->mesg_index].fields[state->field_index].size / type_size;
343
+ FIT_UINT8 type_size;
344
+ FIT_UINT8 element_size;
339
345
  FIT_UINT8 element;
340
346
  FIT_UINT8 index;
341
347
 
348
+ index = state->convert_table[state->mesg_index].fields[state->field_index].base_type & FIT_BASE_TYPE_NUM_MASK;
349
+
350
+ if (index >= FIT_BASE_TYPES)
351
+ return FIT_CONVERT_ERROR;
352
+
353
+ type_size = fit_base_type_sizes[index];
354
+ element_size = state->convert_table[state->mesg_index].fields[state->field_index].size / type_size;
355
+
342
356
  for (element = 0; element < element_size; element++)
343
357
  {
344
358
  for (index = 0; index < (type_size / 2); index++)
@@ -350,6 +364,45 @@
350
364
  }
351
365
  }
352
366
 
367
+ // Null terminate last character if multi-byte beyond end of field.
368
+ if (state->convert_table[state->mesg_index].fields[state->field_index].base_type == FIT_BASE_TYPE_STRING)
369
+ {
370
+ FIT_UINT8 length = state->convert_table[state->mesg_index].fields[state->field_index].size;
371
+ FIT_UINT8 index = 0;
372
+
373
+ while (index < length)
374
+ {
375
+ FIT_UINT8 char_size;
376
+ FIT_UINT8 size_mask = 0x80;
377
+
378
+ if (field[index] & size_mask)
379
+ {
380
+ char_size = 0;
381
+
382
+ while (field[index] & size_mask) // # of bytes in character = # of MSBits
383
+ {
384
+ char_size++;
385
+ size_mask >>= 1;
386
+ }
387
+ }
388
+ else
389
+ {
390
+ char_size = 1;
391
+ }
392
+
393
+ if ((FIT_UINT16)(index + char_size) > length)
394
+ {
395
+ while (index < length)
396
+ {
397
+ field[index++] = 0;
398
+ }
399
+ break;
400
+ }
401
+
402
+ index += char_size;
403
+ }
404
+ }
405
+
353
406
  state->field_offset = 0; // Reset the offset.
354
407
  state->field_index++; // Move on to the next field.
355
408
 
@@ -357,7 +410,7 @@
357
410
  {
358
411
  #if defined(FIT_CONVERT_TIME_RECORD)
359
412
  {
360
- FIT_UINT8 timestamp_offset = Fit_GetFieldOffset(state->mesg_def, FIT_TIMESTAMP_FIELD_NUM);
413
+ FIT_UINT8 timestamp_offset = Fit_GetFieldOffset(state->mesg_def, FIT_FIELD_NUM_TIMESTAMP);
361
414
 
362
415
  if (timestamp_offset != FIT_UINT8_INVALID)
363
416
  {
@@ -1,21 +1,26 @@
1
1
  ////////////////////////////////////////////////////////////////////////////////
2
- // The following .FIT software provided may be used with .FIT devices only and
3
- // remains the copyrighted property of Dynastream Innovations Inc.
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
4
  // The software is being provided on an "as-is" basis and as an accommodation,
5
5
  // and therefore all warranties, representations, or guarantees of any kind
6
6
  // (whether express, implied or statutory) including, without limitation,
7
7
  // warranties of merchantability, non-infringement, or fitness for a particular
8
8
  // purpose, are specifically disclaimed.
9
9
  //
10
- // Copyright 2008 Dynastream Innovations Inc.
11
- // All rights reserved. This software may not be reproduced by any means
12
- // without express written approval of Dynastream Innovations Inc.
10
+ // Copyright 2013 Dynastream Innovations Inc.
13
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
+
14
19
 
15
20
  #if !defined(FIT_CONVERT_H)
16
21
  #define FIT_CONVERT_H
17
22
 
18
- #include "fit_product.h"
23
+ #include "fit_example.h"
19
24
 
20
25
 
21
26
  //////////////////////////////////////////////////////////////////////////////////
@@ -86,20 +91,15 @@ typedef struct
86
91
  extern "C" {
87
92
  #endif
88
93
 
89
- #if defined(FIT_CONVERT_MULTI_THREAD)
90
- void FitConvert_Init(FIT_CONVERT_STATE *state, FIT_BOOL read_file_header);
91
- #else
92
- void FitConvert_Init(FIT_BOOL read_file_header);
93
- #endif
94
94
  ///////////////////////////////////////////////////////////////////////
95
95
  // Initialize the state of the converter to start parsing the file.
96
96
  ///////////////////////////////////////////////////////////////////////
97
-
98
97
  #if defined(FIT_CONVERT_MULTI_THREAD)
99
- FIT_CONVERT_RETURN FitConvert_Read(FIT_CONVERT_STATE *state, const void *data, FIT_UINT32 size);
98
+ void FitConvert_Init(FIT_CONVERT_STATE *state, FIT_BOOL read_file_header);
100
99
  #else
101
- FIT_CONVERT_RETURN FitConvert_Read(const void *data, FIT_UINT32 size);
100
+ void FitConvert_Init(FIT_BOOL read_file_header);
102
101
  #endif
102
+
103
103
  ///////////////////////////////////////////////////////////////////////
104
104
  // Convert a stream of bytes.
105
105
  // Parameters:
@@ -116,35 +116,40 @@ typedef struct
116
116
  // Returns FIT_CONVERT_ERROR if a decoding error occurs.
117
117
  // Returns FIT_CONVERT_END_OF_FILE when the file has been decoded successfully.
118
118
  ///////////////////////////////////////////////////////////////////////
119
-
120
119
  #if defined(FIT_CONVERT_MULTI_THREAD)
121
- FIT_MESG_NUM FitConvert_GetMessageNumber(FIT_CONVERT_STATE *state);
120
+ FIT_CONVERT_RETURN FitConvert_Read(FIT_CONVERT_STATE *state, const void *data, FIT_UINT32 size);
122
121
  #else
123
- FIT_MESG_NUM FitConvert_GetMessageNumber(void);
122
+ FIT_CONVERT_RETURN FitConvert_Read(const void *data, FIT_UINT32 size);
124
123
  #endif
124
+
125
125
  ///////////////////////////////////////////////////////////////////////
126
126
  // Returns the global message number of the decoded message.
127
127
  ///////////////////////////////////////////////////////////////////////
128
-
129
128
  #if defined(FIT_CONVERT_MULTI_THREAD)
130
- const FIT_UINT8 *FitConvert_GetMessageData(FIT_CONVERT_STATE *state);
129
+ FIT_MESG_NUM FitConvert_GetMessageNumber(FIT_CONVERT_STATE *state);
131
130
  #else
132
- const FIT_UINT8 *FitConvert_GetMessageData(void);
131
+ FIT_MESG_NUM FitConvert_GetMessageNumber(void);
133
132
  #endif
133
+
134
134
  ///////////////////////////////////////////////////////////////////////
135
135
  // Returns a pointer to the data of the decoded message.
136
136
  // Copy or cast to FIT_*_MESG structure.
137
137
  ///////////////////////////////////////////////////////////////////////
138
-
139
138
  #if defined(FIT_CONVERT_MULTI_THREAD)
140
- void FitConvert_RestoreFields(FIT_CONVERT_STATE *state, const void *mesg_data);
139
+ const FIT_UINT8 *FitConvert_GetMessageData(FIT_CONVERT_STATE *state);
141
140
  #else
142
- void FitConvert_RestoreFields(const void *mesg_data);
141
+ const FIT_UINT8 *FitConvert_GetMessageData(void);
143
142
  #endif
143
+
144
144
  ///////////////////////////////////////////////////////////////////////
145
145
  // Restores fields that are not in decoded message from mesg_data.
146
146
  // Use when modifying an existing file.
147
147
  ///////////////////////////////////////////////////////////////////////
148
+ #if defined(FIT_CONVERT_MULTI_THREAD)
149
+ void FitConvert_RestoreFields(FIT_CONVERT_STATE *state, const void *mesg_data);
150
+ #else
151
+ void FitConvert_RestoreFields(const void *mesg_data);
152
+ #endif
148
153
 
149
154
  #if defined(__cplusplus)
150
155
  }
@@ -1,24 +1,29 @@
1
1
  ////////////////////////////////////////////////////////////////////////////////
2
- // The following .FIT software provided may be used with .FIT devices only and
3
- // remains the copyrighted property of Dynastream Innovations Inc.
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
4
  // The software is being provided on an "as-is" basis and as an accommodation,
5
5
  // and therefore all warranties, representations, or guarantees of any kind
6
6
  // (whether express, implied or statutory) including, without limitation,
7
7
  // warranties of merchantability, non-infringement, or fitness for a particular
8
8
  // purpose, are specifically disclaimed.
9
9
  //
10
- // Copyright 2008 Dynastream Innovations Inc.
11
- // All rights reserved. This software may not be reproduced by any means
12
- // without express written approval of Dynastream Innovations Inc.
10
+ // Copyright 2013 Dynastream Innovations Inc.
13
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
+
14
19
 
15
20
  #include "fit_crc.h"
16
21
 
22
+
17
23
  //////////////////////////////////////////////////////////////////////////////////
18
24
  // Public Functions
19
25
  //////////////////////////////////////////////////////////////////////////////////
20
26
 
21
- ///////////////////////////////////////////////////////////////////////
22
27
  FIT_UINT16 FitCRC_Get16(FIT_UINT16 crc, FIT_UINT8 byte)
23
28
  {
24
29
  static const FIT_UINT16 crc_table[16] =
@@ -41,3 +46,22 @@ FIT_UINT16 FitCRC_Get16(FIT_UINT16 crc, FIT_UINT8 byte)
41
46
  return crc;
42
47
  }
43
48
 
49
+ FIT_UINT16 FitCRC_Update16(FIT_UINT16 crc, const volatile void *data, FIT_UINT8 size)
50
+ {
51
+ FIT_BYTE *data_ptr = (FIT_BYTE *)data;
52
+
53
+ while (size)
54
+ {
55
+ crc = FitCRC_Get16(crc, *data_ptr);
56
+ data_ptr++;
57
+ size--;
58
+ }
59
+
60
+ return crc;
61
+ }
62
+
63
+ FIT_UINT16 FitCRC_Calc16(const volatile void *data, FIT_UINT8 size)
64
+ {
65
+ return FitCRC_Update16(0, data, size);
66
+ }
67
+
@@ -1,16 +1,21 @@
1
1
  ////////////////////////////////////////////////////////////////////////////////
2
- // The following .FIT software provided may be used with .FIT devices only and
3
- // remains the copyrighted property of Dynastream Innovations Inc.
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
4
  // The software is being provided on an "as-is" basis and as an accommodation,
5
5
  // and therefore all warranties, representations, or guarantees of any kind
6
6
  // (whether express, implied or statutory) including, without limitation,
7
7
  // warranties of merchantability, non-infringement, or fitness for a particular
8
8
  // purpose, are specifically disclaimed.
9
9
  //
10
- // Copyright 2008 Dynastream Innovations Inc.
11
- // All rights reserved. This software may not be reproduced by any means
12
- // without express written approval of Dynastream Innovations Inc.
10
+ // Copyright 2013 Dynastream Innovations Inc.
13
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
+
14
19
 
15
20
  #if !defined(FIT_CRC_H)
16
21
  #define FIT_CRC_H
@@ -27,6 +32,8 @@
27
32
  #endif
28
33
 
29
34
  FIT_UINT16 FitCRC_Get16(FIT_UINT16 crc, FIT_UINT8 byte);
35
+ FIT_UINT16 FitCRC_Update16(FIT_UINT16 crc, const volatile void *data, FIT_UINT8 size);
36
+ FIT_UINT16 FitCRC_Calc16(const volatile void *data, FIT_UINT8 size);
30
37
 
31
38
  #if defined(__cplusplus)
32
39
  }
@@ -0,0 +1,899 @@
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
+ #include "string.h"
21
+ #include "fit_config.h"
22
+ #include "fit_example.h"
23
+
24
+
25
+ ///////////////////////////////////////////////////////////////////////
26
+ // Messages
27
+ ///////////////////////////////////////////////////////////////////////
28
+
29
+ const static FIT_PAD_MESG_DEF pad_mesg_def =
30
+ {
31
+ 0, // reserved_1
32
+ FIT_ARCH_ENDIAN, // arch
33
+ FIT_MESG_NUM_PAD, // global_mesg_num
34
+ 0 // num_fields
35
+ };
36
+
37
+
38
+ const static FIT_FILE_ID_MESG_DEF file_id_mesg_def =
39
+ {
40
+ 0, // reserved_1
41
+ FIT_ARCH_ENDIAN, // arch
42
+ FIT_MESG_NUM_FILE_ID, // global_mesg_num
43
+ 6, // num_fields
44
+ { // field_def_num, size, base_type
45
+ FIT_FILE_ID_FIELD_NUM_SERIAL_NUMBER, (sizeof(FIT_UINT32Z)*1), FIT_BASE_TYPE_UINT32Z,
46
+ FIT_FILE_ID_FIELD_NUM_TIME_CREATED, (sizeof(FIT_DATE_TIME)*1), FIT_BASE_TYPE_UINT32,
47
+ FIT_FILE_ID_FIELD_NUM_MANUFACTURER, (sizeof(FIT_MANUFACTURER)*1), FIT_BASE_TYPE_UINT16,
48
+ FIT_FILE_ID_FIELD_NUM_PRODUCT, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
49
+ FIT_FILE_ID_FIELD_NUM_NUMBER, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
50
+ FIT_FILE_ID_FIELD_NUM_TYPE, (sizeof(FIT_FILE)*1), FIT_BASE_TYPE_ENUM,
51
+ }
52
+ };
53
+
54
+ const static FIT_FILE_CREATOR_MESG_DEF file_creator_mesg_def =
55
+ {
56
+ 0, // reserved_1
57
+ FIT_ARCH_ENDIAN, // arch
58
+ FIT_MESG_NUM_FILE_CREATOR, // global_mesg_num
59
+ 2, // num_fields
60
+ { // field_def_num, size, base_type
61
+ FIT_FILE_CREATOR_FIELD_NUM_SOFTWARE_VERSION, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
62
+ FIT_FILE_CREATOR_FIELD_NUM_HARDWARE_VERSION, (sizeof(FIT_UINT8)*1), FIT_BASE_TYPE_UINT8,
63
+ }
64
+ };
65
+
66
+ const static FIT_SOFTWARE_MESG_DEF software_mesg_def =
67
+ {
68
+ 0, // reserved_1
69
+ FIT_ARCH_ENDIAN, // arch
70
+ FIT_MESG_NUM_SOFTWARE, // global_mesg_num
71
+ 3, // num_fields
72
+ { // field_def_num, size, base_type
73
+ FIT_SOFTWARE_FIELD_NUM_PART_NUMBER, (sizeof(FIT_STRING)*16), FIT_BASE_TYPE_STRING,
74
+ FIT_SOFTWARE_FIELD_NUM_MESSAGE_INDEX, (sizeof(FIT_MESSAGE_INDEX)*1), FIT_BASE_TYPE_UINT16,
75
+ FIT_SOFTWARE_FIELD_NUM_VERSION, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
76
+ }
77
+ };
78
+
79
+ const static FIT_SLAVE_DEVICE_MESG_DEF slave_device_mesg_def =
80
+ {
81
+ 0, // reserved_1
82
+ FIT_ARCH_ENDIAN, // arch
83
+ FIT_MESG_NUM_SLAVE_DEVICE, // global_mesg_num
84
+ 2, // num_fields
85
+ { // field_def_num, size, base_type
86
+ FIT_SLAVE_DEVICE_FIELD_NUM_MANUFACTURER, (sizeof(FIT_MANUFACTURER)*1), FIT_BASE_TYPE_UINT16,
87
+ FIT_SLAVE_DEVICE_FIELD_NUM_PRODUCT, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
88
+ }
89
+ };
90
+
91
+ const static FIT_CAPABILITIES_MESG_DEF capabilities_mesg_def =
92
+ {
93
+ 0, // reserved_1
94
+ FIT_ARCH_ENDIAN, // arch
95
+ FIT_MESG_NUM_CAPABILITIES, // global_mesg_num
96
+ 3, // num_fields
97
+ { // field_def_num, size, base_type
98
+ FIT_CAPABILITIES_FIELD_NUM_LANGUAGES, (sizeof(FIT_UINT8Z)*4), FIT_BASE_TYPE_UINT8Z,
99
+ FIT_CAPABILITIES_FIELD_NUM_WORKOUTS_SUPPORTED, (sizeof(FIT_WORKOUT_CAPABILITIES)*1), FIT_BASE_TYPE_UINT32Z,
100
+ FIT_CAPABILITIES_FIELD_NUM_SPORTS, (sizeof(FIT_SPORT_BITS_0)*1), FIT_BASE_TYPE_UINT8Z,
101
+ }
102
+ };
103
+
104
+ const static FIT_FILE_CAPABILITIES_MESG_DEF file_capabilities_mesg_def =
105
+ {
106
+ 0, // reserved_1
107
+ FIT_ARCH_ENDIAN, // arch
108
+ FIT_MESG_NUM_FILE_CAPABILITIES, // global_mesg_num
109
+ 6, // num_fields
110
+ { // field_def_num, size, base_type
111
+ FIT_FILE_CAPABILITIES_FIELD_NUM_DIRECTORY, (sizeof(FIT_STRING)*16), FIT_BASE_TYPE_STRING,
112
+ FIT_FILE_CAPABILITIES_FIELD_NUM_MAX_SIZE, (sizeof(FIT_UINT32)*1), FIT_BASE_TYPE_UINT32,
113
+ FIT_FILE_CAPABILITIES_FIELD_NUM_MESSAGE_INDEX, (sizeof(FIT_MESSAGE_INDEX)*1), FIT_BASE_TYPE_UINT16,
114
+ FIT_FILE_CAPABILITIES_FIELD_NUM_MAX_COUNT, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
115
+ FIT_FILE_CAPABILITIES_FIELD_NUM_TYPE, (sizeof(FIT_FILE)*1), FIT_BASE_TYPE_ENUM,
116
+ FIT_FILE_CAPABILITIES_FIELD_NUM_FLAGS, (sizeof(FIT_FILE_FLAGS)*1), FIT_BASE_TYPE_UINT8Z,
117
+ }
118
+ };
119
+
120
+ const static FIT_MESG_CAPABILITIES_MESG_DEF mesg_capabilities_mesg_def =
121
+ {
122
+ 0, // reserved_1
123
+ FIT_ARCH_ENDIAN, // arch
124
+ FIT_MESG_NUM_MESG_CAPABILITIES, // global_mesg_num
125
+ 5, // num_fields
126
+ { // field_def_num, size, base_type
127
+ FIT_MESG_CAPABILITIES_FIELD_NUM_MESSAGE_INDEX, (sizeof(FIT_MESSAGE_INDEX)*1), FIT_BASE_TYPE_UINT16,
128
+ FIT_MESG_CAPABILITIES_FIELD_NUM_MESG_NUM, (sizeof(FIT_MESG_NUM)*1), FIT_BASE_TYPE_UINT16,
129
+ FIT_MESG_CAPABILITIES_FIELD_NUM_COUNT, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
130
+ FIT_MESG_CAPABILITIES_FIELD_NUM_FILE, (sizeof(FIT_FILE)*1), FIT_BASE_TYPE_ENUM,
131
+ FIT_MESG_CAPABILITIES_FIELD_NUM_COUNT_TYPE, (sizeof(FIT_MESG_COUNT)*1), FIT_BASE_TYPE_ENUM,
132
+ }
133
+ };
134
+
135
+ const static FIT_FIELD_CAPABILITIES_MESG_DEF field_capabilities_mesg_def =
136
+ {
137
+ 0, // reserved_1
138
+ FIT_ARCH_ENDIAN, // arch
139
+ FIT_MESG_NUM_FIELD_CAPABILITIES, // global_mesg_num
140
+ 5, // num_fields
141
+ { // field_def_num, size, base_type
142
+ FIT_FIELD_CAPABILITIES_FIELD_NUM_MESSAGE_INDEX, (sizeof(FIT_MESSAGE_INDEX)*1), FIT_BASE_TYPE_UINT16,
143
+ FIT_FIELD_CAPABILITIES_FIELD_NUM_MESG_NUM, (sizeof(FIT_MESG_NUM)*1), FIT_BASE_TYPE_UINT16,
144
+ FIT_FIELD_CAPABILITIES_FIELD_NUM_COUNT, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
145
+ FIT_FIELD_CAPABILITIES_FIELD_NUM_FILE, (sizeof(FIT_FILE)*1), FIT_BASE_TYPE_ENUM,
146
+ FIT_FIELD_CAPABILITIES_FIELD_NUM_FIELD_NUM, (sizeof(FIT_UINT8)*1), FIT_BASE_TYPE_UINT8,
147
+ }
148
+ };
149
+
150
+ const static FIT_DEVICE_SETTINGS_MESG_DEF device_settings_mesg_def =
151
+ {
152
+ 0, // reserved_1
153
+ FIT_ARCH_ENDIAN, // arch
154
+ FIT_MESG_NUM_DEVICE_SETTINGS, // global_mesg_num
155
+ 1, // num_fields
156
+ { // field_def_num, size, base_type
157
+ FIT_DEVICE_SETTINGS_FIELD_NUM_UTC_OFFSET, (sizeof(FIT_UINT32)*1), FIT_BASE_TYPE_UINT32,
158
+ }
159
+ };
160
+
161
+ const static FIT_USER_PROFILE_MESG_DEF user_profile_mesg_def =
162
+ {
163
+ 0, // reserved_1
164
+ FIT_ARCH_ENDIAN, // arch
165
+ FIT_MESG_NUM_USER_PROFILE, // global_mesg_num
166
+ 22, // num_fields
167
+ { // field_def_num, size, base_type
168
+ FIT_USER_PROFILE_FIELD_NUM_FRIENDLY_NAME, (sizeof(FIT_STRING)*16), FIT_BASE_TYPE_STRING,
169
+ FIT_USER_PROFILE_FIELD_NUM_MESSAGE_INDEX, (sizeof(FIT_MESSAGE_INDEX)*1), FIT_BASE_TYPE_UINT16,
170
+ FIT_USER_PROFILE_FIELD_NUM_WEIGHT, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
171
+ FIT_USER_PROFILE_FIELD_NUM_LOCAL_ID, (sizeof(FIT_USER_LOCAL_ID)*1), FIT_BASE_TYPE_UINT16,
172
+ FIT_USER_PROFILE_FIELD_NUM_GENDER, (sizeof(FIT_GENDER)*1), FIT_BASE_TYPE_ENUM,
173
+ FIT_USER_PROFILE_FIELD_NUM_AGE, (sizeof(FIT_UINT8)*1), FIT_BASE_TYPE_UINT8,
174
+ FIT_USER_PROFILE_FIELD_NUM_HEIGHT, (sizeof(FIT_UINT8)*1), FIT_BASE_TYPE_UINT8,
175
+ FIT_USER_PROFILE_FIELD_NUM_LANGUAGE, (sizeof(FIT_LANGUAGE)*1), FIT_BASE_TYPE_ENUM,
176
+ FIT_USER_PROFILE_FIELD_NUM_ELEV_SETTING, (sizeof(FIT_DISPLAY_MEASURE)*1), FIT_BASE_TYPE_ENUM,
177
+ FIT_USER_PROFILE_FIELD_NUM_WEIGHT_SETTING, (sizeof(FIT_DISPLAY_MEASURE)*1), FIT_BASE_TYPE_ENUM,
178
+ FIT_USER_PROFILE_FIELD_NUM_RESTING_HEART_RATE, (sizeof(FIT_UINT8)*1), FIT_BASE_TYPE_UINT8,
179
+ FIT_USER_PROFILE_FIELD_NUM_DEFAULT_MAX_RUNNING_HEART_RATE, (sizeof(FIT_UINT8)*1), FIT_BASE_TYPE_UINT8,
180
+ FIT_USER_PROFILE_FIELD_NUM_DEFAULT_MAX_BIKING_HEART_RATE, (sizeof(FIT_UINT8)*1), FIT_BASE_TYPE_UINT8,
181
+ FIT_USER_PROFILE_FIELD_NUM_DEFAULT_MAX_HEART_RATE, (sizeof(FIT_UINT8)*1), FIT_BASE_TYPE_UINT8,
182
+ FIT_USER_PROFILE_FIELD_NUM_HR_SETTING, (sizeof(FIT_DISPLAY_HEART)*1), FIT_BASE_TYPE_ENUM,
183
+ FIT_USER_PROFILE_FIELD_NUM_SPEED_SETTING, (sizeof(FIT_DISPLAY_MEASURE)*1), FIT_BASE_TYPE_ENUM,
184
+ FIT_USER_PROFILE_FIELD_NUM_DIST_SETTING, (sizeof(FIT_DISPLAY_MEASURE)*1), FIT_BASE_TYPE_ENUM,
185
+ FIT_USER_PROFILE_FIELD_NUM_POWER_SETTING, (sizeof(FIT_DISPLAY_POWER)*1), FIT_BASE_TYPE_ENUM,
186
+ FIT_USER_PROFILE_FIELD_NUM_ACTIVITY_CLASS, (sizeof(FIT_ACTIVITY_CLASS)*1), FIT_BASE_TYPE_ENUM,
187
+ FIT_USER_PROFILE_FIELD_NUM_POSITION_SETTING, (sizeof(FIT_DISPLAY_POSITION)*1), FIT_BASE_TYPE_ENUM,
188
+ FIT_USER_PROFILE_FIELD_NUM_TEMPERATURE_SETTING, (sizeof(FIT_DISPLAY_MEASURE)*1), FIT_BASE_TYPE_ENUM,
189
+ FIT_USER_PROFILE_FIELD_NUM_GLOBAL_ID, (sizeof(FIT_BYTE)*6), FIT_BASE_TYPE_BYTE,
190
+ }
191
+ };
192
+
193
+ const static FIT_HRM_PROFILE_MESG_DEF hrm_profile_mesg_def =
194
+ {
195
+ 0, // reserved_1
196
+ FIT_ARCH_ENDIAN, // arch
197
+ FIT_MESG_NUM_HRM_PROFILE, // global_mesg_num
198
+ 5, // num_fields
199
+ { // field_def_num, size, base_type
200
+ FIT_HRM_PROFILE_FIELD_NUM_MESSAGE_INDEX, (sizeof(FIT_MESSAGE_INDEX)*1), FIT_BASE_TYPE_UINT16,
201
+ FIT_HRM_PROFILE_FIELD_NUM_HRM_ANT_ID, (sizeof(FIT_UINT16Z)*1), FIT_BASE_TYPE_UINT16Z,
202
+ FIT_HRM_PROFILE_FIELD_NUM_ENABLED, (sizeof(FIT_BOOL)*1), FIT_BASE_TYPE_ENUM,
203
+ FIT_HRM_PROFILE_FIELD_NUM_LOG_HRV, (sizeof(FIT_BOOL)*1), FIT_BASE_TYPE_ENUM,
204
+ FIT_HRM_PROFILE_FIELD_NUM_HRM_ANT_ID_TRANS_TYPE, (sizeof(FIT_UINT8Z)*1), FIT_BASE_TYPE_UINT8Z,
205
+ }
206
+ };
207
+
208
+ const static FIT_SDM_PROFILE_MESG_DEF sdm_profile_mesg_def =
209
+ {
210
+ 0, // reserved_1
211
+ FIT_ARCH_ENDIAN, // arch
212
+ FIT_MESG_NUM_SDM_PROFILE, // global_mesg_num
213
+ 8, // num_fields
214
+ { // field_def_num, size, base_type
215
+ FIT_SDM_PROFILE_FIELD_NUM_ODOMETER, (sizeof(FIT_UINT32)*1), FIT_BASE_TYPE_UINT32,
216
+ FIT_SDM_PROFILE_FIELD_NUM_MESSAGE_INDEX, (sizeof(FIT_MESSAGE_INDEX)*1), FIT_BASE_TYPE_UINT16,
217
+ FIT_SDM_PROFILE_FIELD_NUM_SDM_ANT_ID, (sizeof(FIT_UINT16Z)*1), FIT_BASE_TYPE_UINT16Z,
218
+ FIT_SDM_PROFILE_FIELD_NUM_SDM_CAL_FACTOR, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
219
+ FIT_SDM_PROFILE_FIELD_NUM_ENABLED, (sizeof(FIT_BOOL)*1), FIT_BASE_TYPE_ENUM,
220
+ FIT_SDM_PROFILE_FIELD_NUM_SPEED_SOURCE, (sizeof(FIT_BOOL)*1), FIT_BASE_TYPE_ENUM,
221
+ FIT_SDM_PROFILE_FIELD_NUM_SDM_ANT_ID_TRANS_TYPE, (sizeof(FIT_UINT8Z)*1), FIT_BASE_TYPE_UINT8Z,
222
+ FIT_SDM_PROFILE_FIELD_NUM_ODOMETER_ROLLOVER, (sizeof(FIT_UINT8)*1), FIT_BASE_TYPE_UINT8,
223
+ }
224
+ };
225
+
226
+ const static FIT_BIKE_PROFILE_MESG_DEF bike_profile_mesg_def =
227
+ {
228
+ 0, // reserved_1
229
+ FIT_ARCH_ENDIAN, // arch
230
+ FIT_MESG_NUM_BIKE_PROFILE, // global_mesg_num
231
+ 27, // num_fields
232
+ { // field_def_num, size, base_type
233
+ FIT_BIKE_PROFILE_FIELD_NUM_NAME, (sizeof(FIT_STRING)*16), FIT_BASE_TYPE_STRING,
234
+ FIT_BIKE_PROFILE_FIELD_NUM_ODOMETER, (sizeof(FIT_UINT32)*1), FIT_BASE_TYPE_UINT32,
235
+ FIT_BIKE_PROFILE_FIELD_NUM_MESSAGE_INDEX, (sizeof(FIT_MESSAGE_INDEX)*1), FIT_BASE_TYPE_UINT16,
236
+ FIT_BIKE_PROFILE_FIELD_NUM_BIKE_SPD_ANT_ID, (sizeof(FIT_UINT16Z)*1), FIT_BASE_TYPE_UINT16Z,
237
+ FIT_BIKE_PROFILE_FIELD_NUM_BIKE_CAD_ANT_ID, (sizeof(FIT_UINT16Z)*1), FIT_BASE_TYPE_UINT16Z,
238
+ FIT_BIKE_PROFILE_FIELD_NUM_BIKE_SPDCAD_ANT_ID, (sizeof(FIT_UINT16Z)*1), FIT_BASE_TYPE_UINT16Z,
239
+ FIT_BIKE_PROFILE_FIELD_NUM_BIKE_POWER_ANT_ID, (sizeof(FIT_UINT16Z)*1), FIT_BASE_TYPE_UINT16Z,
240
+ FIT_BIKE_PROFILE_FIELD_NUM_CUSTOM_WHEELSIZE, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
241
+ FIT_BIKE_PROFILE_FIELD_NUM_AUTO_WHEELSIZE, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
242
+ FIT_BIKE_PROFILE_FIELD_NUM_BIKE_WEIGHT, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
243
+ FIT_BIKE_PROFILE_FIELD_NUM_POWER_CAL_FACTOR, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
244
+ FIT_BIKE_PROFILE_FIELD_NUM_SPORT, (sizeof(FIT_SPORT)*1), FIT_BASE_TYPE_ENUM,
245
+ FIT_BIKE_PROFILE_FIELD_NUM_SUB_SPORT, (sizeof(FIT_SUB_SPORT)*1), FIT_BASE_TYPE_ENUM,
246
+ FIT_BIKE_PROFILE_FIELD_NUM_AUTO_WHEEL_CAL, (sizeof(FIT_BOOL)*1), FIT_BASE_TYPE_ENUM,
247
+ FIT_BIKE_PROFILE_FIELD_NUM_AUTO_POWER_ZERO, (sizeof(FIT_BOOL)*1), FIT_BASE_TYPE_ENUM,
248
+ FIT_BIKE_PROFILE_FIELD_NUM_ID, (sizeof(FIT_UINT8)*1), FIT_BASE_TYPE_UINT8,
249
+ FIT_BIKE_PROFILE_FIELD_NUM_SPD_ENABLED, (sizeof(FIT_BOOL)*1), FIT_BASE_TYPE_ENUM,
250
+ FIT_BIKE_PROFILE_FIELD_NUM_CAD_ENABLED, (sizeof(FIT_BOOL)*1), FIT_BASE_TYPE_ENUM,
251
+ FIT_BIKE_PROFILE_FIELD_NUM_SPDCAD_ENABLED, (sizeof(FIT_BOOL)*1), FIT_BASE_TYPE_ENUM,
252
+ FIT_BIKE_PROFILE_FIELD_NUM_POWER_ENABLED, (sizeof(FIT_BOOL)*1), FIT_BASE_TYPE_ENUM,
253
+ FIT_BIKE_PROFILE_FIELD_NUM_CRANK_LENGTH, (sizeof(FIT_UINT8)*1), FIT_BASE_TYPE_UINT8,
254
+ FIT_BIKE_PROFILE_FIELD_NUM_ENABLED, (sizeof(FIT_BOOL)*1), FIT_BASE_TYPE_ENUM,
255
+ FIT_BIKE_PROFILE_FIELD_NUM_BIKE_SPD_ANT_ID_TRANS_TYPE, (sizeof(FIT_UINT8Z)*1), FIT_BASE_TYPE_UINT8Z,
256
+ FIT_BIKE_PROFILE_FIELD_NUM_BIKE_CAD_ANT_ID_TRANS_TYPE, (sizeof(FIT_UINT8Z)*1), FIT_BASE_TYPE_UINT8Z,
257
+ FIT_BIKE_PROFILE_FIELD_NUM_BIKE_SPDCAD_ANT_ID_TRANS_TYPE, (sizeof(FIT_UINT8Z)*1), FIT_BASE_TYPE_UINT8Z,
258
+ FIT_BIKE_PROFILE_FIELD_NUM_BIKE_POWER_ANT_ID_TRANS_TYPE, (sizeof(FIT_UINT8Z)*1), FIT_BASE_TYPE_UINT8Z,
259
+ FIT_BIKE_PROFILE_FIELD_NUM_ODOMETER_ROLLOVER, (sizeof(FIT_UINT8)*1), FIT_BASE_TYPE_UINT8,
260
+ }
261
+ };
262
+
263
+ const static FIT_ZONES_TARGET_MESG_DEF zones_target_mesg_def =
264
+ {
265
+ 0, // reserved_1
266
+ FIT_ARCH_ENDIAN, // arch
267
+ FIT_MESG_NUM_ZONES_TARGET, // global_mesg_num
268
+ 5, // num_fields
269
+ { // field_def_num, size, base_type
270
+ FIT_ZONES_TARGET_FIELD_NUM_FUNCTIONAL_THRESHOLD_POWER, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
271
+ FIT_ZONES_TARGET_FIELD_NUM_MAX_HEART_RATE, (sizeof(FIT_UINT8)*1), FIT_BASE_TYPE_UINT8,
272
+ FIT_ZONES_TARGET_FIELD_NUM_THRESHOLD_HEART_RATE, (sizeof(FIT_UINT8)*1), FIT_BASE_TYPE_UINT8,
273
+ FIT_ZONES_TARGET_FIELD_NUM_HR_CALC_TYPE, (sizeof(FIT_HR_ZONE_CALC)*1), FIT_BASE_TYPE_ENUM,
274
+ FIT_ZONES_TARGET_FIELD_NUM_PWR_CALC_TYPE, (sizeof(FIT_PWR_ZONE_CALC)*1), FIT_BASE_TYPE_ENUM,
275
+ }
276
+ };
277
+
278
+ const static FIT_SPORT_MESG_DEF sport_mesg_def =
279
+ {
280
+ 0, // reserved_1
281
+ FIT_ARCH_ENDIAN, // arch
282
+ FIT_MESG_NUM_SPORT, // global_mesg_num
283
+ 3, // num_fields
284
+ { // field_def_num, size, base_type
285
+ FIT_SPORT_FIELD_NUM_NAME, (sizeof(FIT_STRING)*16), FIT_BASE_TYPE_STRING,
286
+ FIT_SPORT_FIELD_NUM_SPORT, (sizeof(FIT_SPORT)*1), FIT_BASE_TYPE_ENUM,
287
+ FIT_SPORT_FIELD_NUM_SUB_SPORT, (sizeof(FIT_SUB_SPORT)*1), FIT_BASE_TYPE_ENUM,
288
+ }
289
+ };
290
+
291
+ const static FIT_HR_ZONE_MESG_DEF hr_zone_mesg_def =
292
+ {
293
+ 0, // reserved_1
294
+ FIT_ARCH_ENDIAN, // arch
295
+ FIT_MESG_NUM_HR_ZONE, // global_mesg_num
296
+ 3, // num_fields
297
+ { // field_def_num, size, base_type
298
+ FIT_HR_ZONE_FIELD_NUM_NAME, (sizeof(FIT_STRING)*16), FIT_BASE_TYPE_STRING,
299
+ FIT_HR_ZONE_FIELD_NUM_MESSAGE_INDEX, (sizeof(FIT_MESSAGE_INDEX)*1), FIT_BASE_TYPE_UINT16,
300
+ FIT_HR_ZONE_FIELD_NUM_HIGH_BPM, (sizeof(FIT_UINT8)*1), FIT_BASE_TYPE_UINT8,
301
+ }
302
+ };
303
+
304
+ const static FIT_SPEED_ZONE_MESG_DEF speed_zone_mesg_def =
305
+ {
306
+ 0, // reserved_1
307
+ FIT_ARCH_ENDIAN, // arch
308
+ FIT_MESG_NUM_SPEED_ZONE, // global_mesg_num
309
+ 3, // num_fields
310
+ { // field_def_num, size, base_type
311
+ FIT_SPEED_ZONE_FIELD_NUM_NAME, (sizeof(FIT_STRING)*16), FIT_BASE_TYPE_STRING,
312
+ FIT_SPEED_ZONE_FIELD_NUM_MESSAGE_INDEX, (sizeof(FIT_MESSAGE_INDEX)*1), FIT_BASE_TYPE_UINT16,
313
+ FIT_SPEED_ZONE_FIELD_NUM_HIGH_VALUE, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
314
+ }
315
+ };
316
+
317
+ const static FIT_CADENCE_ZONE_MESG_DEF cadence_zone_mesg_def =
318
+ {
319
+ 0, // reserved_1
320
+ FIT_ARCH_ENDIAN, // arch
321
+ FIT_MESG_NUM_CADENCE_ZONE, // global_mesg_num
322
+ 3, // num_fields
323
+ { // field_def_num, size, base_type
324
+ FIT_CADENCE_ZONE_FIELD_NUM_NAME, (sizeof(FIT_STRING)*16), FIT_BASE_TYPE_STRING,
325
+ FIT_CADENCE_ZONE_FIELD_NUM_MESSAGE_INDEX, (sizeof(FIT_MESSAGE_INDEX)*1), FIT_BASE_TYPE_UINT16,
326
+ FIT_CADENCE_ZONE_FIELD_NUM_HIGH_VALUE, (sizeof(FIT_UINT8)*1), FIT_BASE_TYPE_UINT8,
327
+ }
328
+ };
329
+
330
+ const static FIT_POWER_ZONE_MESG_DEF power_zone_mesg_def =
331
+ {
332
+ 0, // reserved_1
333
+ FIT_ARCH_ENDIAN, // arch
334
+ FIT_MESG_NUM_POWER_ZONE, // global_mesg_num
335
+ 3, // num_fields
336
+ { // field_def_num, size, base_type
337
+ FIT_POWER_ZONE_FIELD_NUM_NAME, (sizeof(FIT_STRING)*16), FIT_BASE_TYPE_STRING,
338
+ FIT_POWER_ZONE_FIELD_NUM_MESSAGE_INDEX, (sizeof(FIT_MESSAGE_INDEX)*1), FIT_BASE_TYPE_UINT16,
339
+ FIT_POWER_ZONE_FIELD_NUM_HIGH_VALUE, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
340
+ }
341
+ };
342
+
343
+ const static FIT_MET_ZONE_MESG_DEF met_zone_mesg_def =
344
+ {
345
+ 0, // reserved_1
346
+ FIT_ARCH_ENDIAN, // arch
347
+ FIT_MESG_NUM_MET_ZONE, // global_mesg_num
348
+ 4, // num_fields
349
+ { // field_def_num, size, base_type
350
+ FIT_MET_ZONE_FIELD_NUM_MESSAGE_INDEX, (sizeof(FIT_MESSAGE_INDEX)*1), FIT_BASE_TYPE_UINT16,
351
+ FIT_MET_ZONE_FIELD_NUM_CALORIES, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
352
+ FIT_MET_ZONE_FIELD_NUM_HIGH_BPM, (sizeof(FIT_UINT8)*1), FIT_BASE_TYPE_UINT8,
353
+ FIT_MET_ZONE_FIELD_NUM_FAT_CALORIES, (sizeof(FIT_UINT8)*1), FIT_BASE_TYPE_UINT8,
354
+ }
355
+ };
356
+
357
+ const static FIT_GOAL_MESG_DEF goal_mesg_def =
358
+ {
359
+ 0, // reserved_1
360
+ FIT_ARCH_ENDIAN, // arch
361
+ FIT_MESG_NUM_GOAL, // global_mesg_num
362
+ 12, // num_fields
363
+ { // field_def_num, size, base_type
364
+ FIT_GOAL_FIELD_NUM_START_DATE, (sizeof(FIT_DATE_TIME)*1), FIT_BASE_TYPE_UINT32,
365
+ FIT_GOAL_FIELD_NUM_END_DATE, (sizeof(FIT_DATE_TIME)*1), FIT_BASE_TYPE_UINT32,
366
+ FIT_GOAL_FIELD_NUM_VALUE, (sizeof(FIT_UINT32)*1), FIT_BASE_TYPE_UINT32,
367
+ FIT_GOAL_FIELD_NUM_TARGET_VALUE, (sizeof(FIT_UINT32)*1), FIT_BASE_TYPE_UINT32,
368
+ FIT_GOAL_FIELD_NUM_MESSAGE_INDEX, (sizeof(FIT_MESSAGE_INDEX)*1), FIT_BASE_TYPE_UINT16,
369
+ FIT_GOAL_FIELD_NUM_RECURRENCE_VALUE, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
370
+ FIT_GOAL_FIELD_NUM_SPORT, (sizeof(FIT_SPORT)*1), FIT_BASE_TYPE_ENUM,
371
+ FIT_GOAL_FIELD_NUM_SUB_SPORT, (sizeof(FIT_SUB_SPORT)*1), FIT_BASE_TYPE_ENUM,
372
+ FIT_GOAL_FIELD_NUM_TYPE, (sizeof(FIT_GOAL)*1), FIT_BASE_TYPE_ENUM,
373
+ FIT_GOAL_FIELD_NUM_REPEAT, (sizeof(FIT_BOOL)*1), FIT_BASE_TYPE_ENUM,
374
+ FIT_GOAL_FIELD_NUM_RECURRENCE, (sizeof(FIT_GOAL_RECURRENCE)*1), FIT_BASE_TYPE_ENUM,
375
+ FIT_GOAL_FIELD_NUM_ENABLED, (sizeof(FIT_BOOL)*1), FIT_BASE_TYPE_ENUM,
376
+ }
377
+ };
378
+
379
+ const static FIT_ACTIVITY_MESG_DEF activity_mesg_def =
380
+ {
381
+ 0, // reserved_1
382
+ FIT_ARCH_ENDIAN, // arch
383
+ FIT_MESG_NUM_ACTIVITY, // global_mesg_num
384
+ 8, // num_fields
385
+ { // field_def_num, size, base_type
386
+ FIT_ACTIVITY_FIELD_NUM_TIMESTAMP, (sizeof(FIT_DATE_TIME)*1), FIT_BASE_TYPE_UINT32,
387
+ FIT_ACTIVITY_FIELD_NUM_TOTAL_TIMER_TIME, (sizeof(FIT_UINT32)*1), FIT_BASE_TYPE_UINT32,
388
+ FIT_ACTIVITY_FIELD_NUM_LOCAL_TIMESTAMP, (sizeof(FIT_LOCAL_DATE_TIME)*1), FIT_BASE_TYPE_UINT32,
389
+ FIT_ACTIVITY_FIELD_NUM_NUM_SESSIONS, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
390
+ FIT_ACTIVITY_FIELD_NUM_TYPE, (sizeof(FIT_ACTIVITY)*1), FIT_BASE_TYPE_ENUM,
391
+ FIT_ACTIVITY_FIELD_NUM_EVENT, (sizeof(FIT_EVENT)*1), FIT_BASE_TYPE_ENUM,
392
+ FIT_ACTIVITY_FIELD_NUM_EVENT_TYPE, (sizeof(FIT_EVENT_TYPE)*1), FIT_BASE_TYPE_ENUM,
393
+ FIT_ACTIVITY_FIELD_NUM_EVENT_GROUP, (sizeof(FIT_UINT8)*1), FIT_BASE_TYPE_UINT8,
394
+ }
395
+ };
396
+
397
+ const static FIT_SESSION_MESG_DEF session_mesg_def =
398
+ {
399
+ 0, // reserved_1
400
+ FIT_ARCH_ENDIAN, // arch
401
+ FIT_MESG_NUM_SESSION, // global_mesg_num
402
+ 75, // num_fields
403
+ { // field_def_num, size, base_type
404
+ FIT_SESSION_FIELD_NUM_TIMESTAMP, (sizeof(FIT_DATE_TIME)*1), FIT_BASE_TYPE_UINT32,
405
+ FIT_SESSION_FIELD_NUM_START_TIME, (sizeof(FIT_DATE_TIME)*1), FIT_BASE_TYPE_UINT32,
406
+ FIT_SESSION_FIELD_NUM_START_POSITION_LAT, (sizeof(FIT_SINT32)*1), FIT_BASE_TYPE_SINT32,
407
+ FIT_SESSION_FIELD_NUM_START_POSITION_LONG, (sizeof(FIT_SINT32)*1), FIT_BASE_TYPE_SINT32,
408
+ FIT_SESSION_FIELD_NUM_TOTAL_ELAPSED_TIME, (sizeof(FIT_UINT32)*1), FIT_BASE_TYPE_UINT32,
409
+ FIT_SESSION_FIELD_NUM_TOTAL_TIMER_TIME, (sizeof(FIT_UINT32)*1), FIT_BASE_TYPE_UINT32,
410
+ FIT_SESSION_FIELD_NUM_TOTAL_DISTANCE, (sizeof(FIT_UINT32)*1), FIT_BASE_TYPE_UINT32,
411
+ FIT_SESSION_FIELD_NUM_TOTAL_CYCLES, (sizeof(FIT_UINT32)*1), FIT_BASE_TYPE_UINT32,
412
+ FIT_SESSION_FIELD_NUM_NEC_LAT, (sizeof(FIT_SINT32)*1), FIT_BASE_TYPE_SINT32,
413
+ FIT_SESSION_FIELD_NUM_NEC_LONG, (sizeof(FIT_SINT32)*1), FIT_BASE_TYPE_SINT32,
414
+ FIT_SESSION_FIELD_NUM_SWC_LAT, (sizeof(FIT_SINT32)*1), FIT_BASE_TYPE_SINT32,
415
+ FIT_SESSION_FIELD_NUM_SWC_LONG, (sizeof(FIT_SINT32)*1), FIT_BASE_TYPE_SINT32,
416
+ FIT_SESSION_FIELD_NUM_AVG_STROKE_COUNT, (sizeof(FIT_UINT32)*1), FIT_BASE_TYPE_UINT32,
417
+ FIT_SESSION_FIELD_NUM_TOTAL_WORK, (sizeof(FIT_UINT32)*1), FIT_BASE_TYPE_UINT32,
418
+ FIT_SESSION_FIELD_NUM_TOTAL_MOVING_TIME, (sizeof(FIT_UINT32)*1), FIT_BASE_TYPE_UINT32,
419
+ FIT_SESSION_FIELD_NUM_TIME_IN_HR_ZONE, (sizeof(FIT_UINT32)*1), FIT_BASE_TYPE_UINT32,
420
+ FIT_SESSION_FIELD_NUM_TIME_IN_SPEED_ZONE, (sizeof(FIT_UINT32)*1), FIT_BASE_TYPE_UINT32,
421
+ FIT_SESSION_FIELD_NUM_TIME_IN_CADENCE_ZONE, (sizeof(FIT_UINT32)*1), FIT_BASE_TYPE_UINT32,
422
+ FIT_SESSION_FIELD_NUM_TIME_IN_POWER_ZONE, (sizeof(FIT_UINT32)*1), FIT_BASE_TYPE_UINT32,
423
+ FIT_SESSION_FIELD_NUM_AVG_LAP_TIME, (sizeof(FIT_UINT32)*1), FIT_BASE_TYPE_UINT32,
424
+ FIT_SESSION_FIELD_NUM_MESSAGE_INDEX, (sizeof(FIT_MESSAGE_INDEX)*1), FIT_BASE_TYPE_UINT16,
425
+ FIT_SESSION_FIELD_NUM_TOTAL_CALORIES, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
426
+ FIT_SESSION_FIELD_NUM_TOTAL_FAT_CALORIES, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
427
+ FIT_SESSION_FIELD_NUM_AVG_SPEED, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
428
+ FIT_SESSION_FIELD_NUM_MAX_SPEED, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
429
+ FIT_SESSION_FIELD_NUM_AVG_POWER, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
430
+ FIT_SESSION_FIELD_NUM_MAX_POWER, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
431
+ FIT_SESSION_FIELD_NUM_TOTAL_ASCENT, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
432
+ FIT_SESSION_FIELD_NUM_TOTAL_DESCENT, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
433
+ FIT_SESSION_FIELD_NUM_FIRST_LAP_INDEX, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
434
+ FIT_SESSION_FIELD_NUM_NUM_LAPS, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
435
+ FIT_SESSION_FIELD_NUM_NORMALIZED_POWER, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
436
+ FIT_SESSION_FIELD_NUM_TRAINING_STRESS_SCORE, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
437
+ FIT_SESSION_FIELD_NUM_INTENSITY_FACTOR, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
438
+ FIT_SESSION_FIELD_NUM_LEFT_RIGHT_BALANCE, (sizeof(FIT_LEFT_RIGHT_BALANCE_100)*1), FIT_BASE_TYPE_UINT16,
439
+ FIT_SESSION_FIELD_NUM_AVG_STROKE_DISTANCE, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
440
+ FIT_SESSION_FIELD_NUM_POOL_LENGTH, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
441
+ FIT_SESSION_FIELD_NUM_NUM_ACTIVE_LENGTHS, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
442
+ FIT_SESSION_FIELD_NUM_AVG_ALTITUDE, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
443
+ FIT_SESSION_FIELD_NUM_MAX_ALTITUDE, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
444
+ FIT_SESSION_FIELD_NUM_AVG_GRADE, (sizeof(FIT_SINT16)*1), FIT_BASE_TYPE_SINT16,
445
+ FIT_SESSION_FIELD_NUM_AVG_POS_GRADE, (sizeof(FIT_SINT16)*1), FIT_BASE_TYPE_SINT16,
446
+ FIT_SESSION_FIELD_NUM_AVG_NEG_GRADE, (sizeof(FIT_SINT16)*1), FIT_BASE_TYPE_SINT16,
447
+ FIT_SESSION_FIELD_NUM_MAX_POS_GRADE, (sizeof(FIT_SINT16)*1), FIT_BASE_TYPE_SINT16,
448
+ FIT_SESSION_FIELD_NUM_MAX_NEG_GRADE, (sizeof(FIT_SINT16)*1), FIT_BASE_TYPE_SINT16,
449
+ FIT_SESSION_FIELD_NUM_AVG_POS_VERTICAL_SPEED, (sizeof(FIT_SINT16)*1), FIT_BASE_TYPE_SINT16,
450
+ FIT_SESSION_FIELD_NUM_AVG_NEG_VERTICAL_SPEED, (sizeof(FIT_SINT16)*1), FIT_BASE_TYPE_SINT16,
451
+ FIT_SESSION_FIELD_NUM_MAX_POS_VERTICAL_SPEED, (sizeof(FIT_SINT16)*1), FIT_BASE_TYPE_SINT16,
452
+ FIT_SESSION_FIELD_NUM_MAX_NEG_VERTICAL_SPEED, (sizeof(FIT_SINT16)*1), FIT_BASE_TYPE_SINT16,
453
+ FIT_SESSION_FIELD_NUM_BEST_LAP_INDEX, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
454
+ FIT_SESSION_FIELD_NUM_MIN_ALTITUDE, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
455
+ FIT_SESSION_FIELD_NUM_PLAYER_SCORE, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
456
+ FIT_SESSION_FIELD_NUM_OPPONENT_SCORE, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
457
+ FIT_SESSION_FIELD_NUM_STROKE_COUNT, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
458
+ FIT_SESSION_FIELD_NUM_ZONE_COUNT, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
459
+ FIT_SESSION_FIELD_NUM_MAX_BALL_SPEED, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
460
+ FIT_SESSION_FIELD_NUM_AVG_BALL_SPEED, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
461
+ FIT_SESSION_FIELD_NUM_EVENT, (sizeof(FIT_EVENT)*1), FIT_BASE_TYPE_ENUM,
462
+ FIT_SESSION_FIELD_NUM_EVENT_TYPE, (sizeof(FIT_EVENT_TYPE)*1), FIT_BASE_TYPE_ENUM,
463
+ FIT_SESSION_FIELD_NUM_SPORT, (sizeof(FIT_SPORT)*1), FIT_BASE_TYPE_ENUM,
464
+ FIT_SESSION_FIELD_NUM_SUB_SPORT, (sizeof(FIT_SUB_SPORT)*1), FIT_BASE_TYPE_ENUM,
465
+ FIT_SESSION_FIELD_NUM_AVG_HEART_RATE, (sizeof(FIT_UINT8)*1), FIT_BASE_TYPE_UINT8,
466
+ FIT_SESSION_FIELD_NUM_MAX_HEART_RATE, (sizeof(FIT_UINT8)*1), FIT_BASE_TYPE_UINT8,
467
+ FIT_SESSION_FIELD_NUM_AVG_CADENCE, (sizeof(FIT_UINT8)*1), FIT_BASE_TYPE_UINT8,
468
+ FIT_SESSION_FIELD_NUM_MAX_CADENCE, (sizeof(FIT_UINT8)*1), FIT_BASE_TYPE_UINT8,
469
+ FIT_SESSION_FIELD_NUM_TOTAL_TRAINING_EFFECT, (sizeof(FIT_UINT8)*1), FIT_BASE_TYPE_UINT8,
470
+ FIT_SESSION_FIELD_NUM_EVENT_GROUP, (sizeof(FIT_UINT8)*1), FIT_BASE_TYPE_UINT8,
471
+ FIT_SESSION_FIELD_NUM_TRIGGER, (sizeof(FIT_SESSION_TRIGGER)*1), FIT_BASE_TYPE_ENUM,
472
+ FIT_SESSION_FIELD_NUM_SWIM_STROKE, (sizeof(FIT_SWIM_STROKE)*1), FIT_BASE_TYPE_ENUM,
473
+ FIT_SESSION_FIELD_NUM_POOL_LENGTH_UNIT, (sizeof(FIT_DISPLAY_MEASURE)*1), FIT_BASE_TYPE_ENUM,
474
+ FIT_SESSION_FIELD_NUM_GPS_ACCURACY, (sizeof(FIT_UINT8)*1), FIT_BASE_TYPE_UINT8,
475
+ FIT_SESSION_FIELD_NUM_AVG_TEMPERATURE, (sizeof(FIT_SINT8)*1), FIT_BASE_TYPE_SINT8,
476
+ FIT_SESSION_FIELD_NUM_MAX_TEMPERATURE, (sizeof(FIT_SINT8)*1), FIT_BASE_TYPE_SINT8,
477
+ FIT_SESSION_FIELD_NUM_MIN_HEART_RATE, (sizeof(FIT_UINT8)*1), FIT_BASE_TYPE_UINT8,
478
+ FIT_SESSION_FIELD_NUM_OPPONENT_NAME, (sizeof(FIT_STRING)*1), FIT_BASE_TYPE_STRING,
479
+ }
480
+ };
481
+
482
+ const static FIT_LAP_MESG_DEF lap_mesg_def =
483
+ {
484
+ 0, // reserved_1
485
+ FIT_ARCH_ENDIAN, // arch
486
+ FIT_MESG_NUM_LAP, // global_mesg_num
487
+ 65, // num_fields
488
+ { // field_def_num, size, base_type
489
+ FIT_LAP_FIELD_NUM_TIMESTAMP, (sizeof(FIT_DATE_TIME)*1), FIT_BASE_TYPE_UINT32,
490
+ FIT_LAP_FIELD_NUM_START_TIME, (sizeof(FIT_DATE_TIME)*1), FIT_BASE_TYPE_UINT32,
491
+ FIT_LAP_FIELD_NUM_START_POSITION_LAT, (sizeof(FIT_SINT32)*1), FIT_BASE_TYPE_SINT32,
492
+ FIT_LAP_FIELD_NUM_START_POSITION_LONG, (sizeof(FIT_SINT32)*1), FIT_BASE_TYPE_SINT32,
493
+ FIT_LAP_FIELD_NUM_END_POSITION_LAT, (sizeof(FIT_SINT32)*1), FIT_BASE_TYPE_SINT32,
494
+ FIT_LAP_FIELD_NUM_END_POSITION_LONG, (sizeof(FIT_SINT32)*1), FIT_BASE_TYPE_SINT32,
495
+ FIT_LAP_FIELD_NUM_TOTAL_ELAPSED_TIME, (sizeof(FIT_UINT32)*1), FIT_BASE_TYPE_UINT32,
496
+ FIT_LAP_FIELD_NUM_TOTAL_TIMER_TIME, (sizeof(FIT_UINT32)*1), FIT_BASE_TYPE_UINT32,
497
+ FIT_LAP_FIELD_NUM_TOTAL_DISTANCE, (sizeof(FIT_UINT32)*1), FIT_BASE_TYPE_UINT32,
498
+ FIT_LAP_FIELD_NUM_TOTAL_CYCLES, (sizeof(FIT_UINT32)*1), FIT_BASE_TYPE_UINT32,
499
+ FIT_LAP_FIELD_NUM_TOTAL_WORK, (sizeof(FIT_UINT32)*1), FIT_BASE_TYPE_UINT32,
500
+ FIT_LAP_FIELD_NUM_TOTAL_MOVING_TIME, (sizeof(FIT_UINT32)*1), FIT_BASE_TYPE_UINT32,
501
+ FIT_LAP_FIELD_NUM_TIME_IN_HR_ZONE, (sizeof(FIT_UINT32)*1), FIT_BASE_TYPE_UINT32,
502
+ FIT_LAP_FIELD_NUM_TIME_IN_SPEED_ZONE, (sizeof(FIT_UINT32)*1), FIT_BASE_TYPE_UINT32,
503
+ FIT_LAP_FIELD_NUM_TIME_IN_CADENCE_ZONE, (sizeof(FIT_UINT32)*1), FIT_BASE_TYPE_UINT32,
504
+ FIT_LAP_FIELD_NUM_TIME_IN_POWER_ZONE, (sizeof(FIT_UINT32)*1), FIT_BASE_TYPE_UINT32,
505
+ FIT_LAP_FIELD_NUM_MESSAGE_INDEX, (sizeof(FIT_MESSAGE_INDEX)*1), FIT_BASE_TYPE_UINT16,
506
+ FIT_LAP_FIELD_NUM_TOTAL_CALORIES, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
507
+ FIT_LAP_FIELD_NUM_TOTAL_FAT_CALORIES, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
508
+ FIT_LAP_FIELD_NUM_AVG_SPEED, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
509
+ FIT_LAP_FIELD_NUM_MAX_SPEED, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
510
+ FIT_LAP_FIELD_NUM_AVG_POWER, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
511
+ FIT_LAP_FIELD_NUM_MAX_POWER, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
512
+ FIT_LAP_FIELD_NUM_TOTAL_ASCENT, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
513
+ FIT_LAP_FIELD_NUM_TOTAL_DESCENT, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
514
+ FIT_LAP_FIELD_NUM_NUM_LENGTHS, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
515
+ FIT_LAP_FIELD_NUM_NORMALIZED_POWER, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
516
+ FIT_LAP_FIELD_NUM_LEFT_RIGHT_BALANCE, (sizeof(FIT_LEFT_RIGHT_BALANCE_100)*1), FIT_BASE_TYPE_UINT16,
517
+ FIT_LAP_FIELD_NUM_FIRST_LENGTH_INDEX, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
518
+ FIT_LAP_FIELD_NUM_AVG_STROKE_DISTANCE, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
519
+ FIT_LAP_FIELD_NUM_NUM_ACTIVE_LENGTHS, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
520
+ FIT_LAP_FIELD_NUM_AVG_ALTITUDE, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
521
+ FIT_LAP_FIELD_NUM_MAX_ALTITUDE, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
522
+ FIT_LAP_FIELD_NUM_AVG_GRADE, (sizeof(FIT_SINT16)*1), FIT_BASE_TYPE_SINT16,
523
+ FIT_LAP_FIELD_NUM_AVG_POS_GRADE, (sizeof(FIT_SINT16)*1), FIT_BASE_TYPE_SINT16,
524
+ FIT_LAP_FIELD_NUM_AVG_NEG_GRADE, (sizeof(FIT_SINT16)*1), FIT_BASE_TYPE_SINT16,
525
+ FIT_LAP_FIELD_NUM_MAX_POS_GRADE, (sizeof(FIT_SINT16)*1), FIT_BASE_TYPE_SINT16,
526
+ FIT_LAP_FIELD_NUM_MAX_NEG_GRADE, (sizeof(FIT_SINT16)*1), FIT_BASE_TYPE_SINT16,
527
+ FIT_LAP_FIELD_NUM_AVG_POS_VERTICAL_SPEED, (sizeof(FIT_SINT16)*1), FIT_BASE_TYPE_SINT16,
528
+ FIT_LAP_FIELD_NUM_AVG_NEG_VERTICAL_SPEED, (sizeof(FIT_SINT16)*1), FIT_BASE_TYPE_SINT16,
529
+ FIT_LAP_FIELD_NUM_MAX_POS_VERTICAL_SPEED, (sizeof(FIT_SINT16)*1), FIT_BASE_TYPE_SINT16,
530
+ FIT_LAP_FIELD_NUM_MAX_NEG_VERTICAL_SPEED, (sizeof(FIT_SINT16)*1), FIT_BASE_TYPE_SINT16,
531
+ FIT_LAP_FIELD_NUM_REPETITION_NUM, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
532
+ FIT_LAP_FIELD_NUM_MIN_ALTITUDE, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
533
+ FIT_LAP_FIELD_NUM_WKT_STEP_INDEX, (sizeof(FIT_MESSAGE_INDEX)*1), FIT_BASE_TYPE_UINT16,
534
+ FIT_LAP_FIELD_NUM_OPPONENT_SCORE, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
535
+ FIT_LAP_FIELD_NUM_STROKE_COUNT, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
536
+ FIT_LAP_FIELD_NUM_ZONE_COUNT, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
537
+ FIT_LAP_FIELD_NUM_PLAYER_SCORE, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
538
+ FIT_LAP_FIELD_NUM_EVENT, (sizeof(FIT_EVENT)*1), FIT_BASE_TYPE_ENUM,
539
+ FIT_LAP_FIELD_NUM_EVENT_TYPE, (sizeof(FIT_EVENT_TYPE)*1), FIT_BASE_TYPE_ENUM,
540
+ FIT_LAP_FIELD_NUM_AVG_HEART_RATE, (sizeof(FIT_UINT8)*1), FIT_BASE_TYPE_UINT8,
541
+ FIT_LAP_FIELD_NUM_MAX_HEART_RATE, (sizeof(FIT_UINT8)*1), FIT_BASE_TYPE_UINT8,
542
+ FIT_LAP_FIELD_NUM_AVG_CADENCE, (sizeof(FIT_UINT8)*1), FIT_BASE_TYPE_UINT8,
543
+ FIT_LAP_FIELD_NUM_MAX_CADENCE, (sizeof(FIT_UINT8)*1), FIT_BASE_TYPE_UINT8,
544
+ FIT_LAP_FIELD_NUM_INTENSITY, (sizeof(FIT_INTENSITY)*1), FIT_BASE_TYPE_ENUM,
545
+ FIT_LAP_FIELD_NUM_LAP_TRIGGER, (sizeof(FIT_LAP_TRIGGER)*1), FIT_BASE_TYPE_ENUM,
546
+ FIT_LAP_FIELD_NUM_SPORT, (sizeof(FIT_SPORT)*1), FIT_BASE_TYPE_ENUM,
547
+ FIT_LAP_FIELD_NUM_EVENT_GROUP, (sizeof(FIT_UINT8)*1), FIT_BASE_TYPE_UINT8,
548
+ FIT_LAP_FIELD_NUM_SWIM_STROKE, (sizeof(FIT_SWIM_STROKE)*1), FIT_BASE_TYPE_ENUM,
549
+ FIT_LAP_FIELD_NUM_SUB_SPORT, (sizeof(FIT_SUB_SPORT)*1), FIT_BASE_TYPE_ENUM,
550
+ FIT_LAP_FIELD_NUM_GPS_ACCURACY, (sizeof(FIT_UINT8)*1), FIT_BASE_TYPE_UINT8,
551
+ FIT_LAP_FIELD_NUM_AVG_TEMPERATURE, (sizeof(FIT_SINT8)*1), FIT_BASE_TYPE_SINT8,
552
+ FIT_LAP_FIELD_NUM_MAX_TEMPERATURE, (sizeof(FIT_SINT8)*1), FIT_BASE_TYPE_SINT8,
553
+ FIT_LAP_FIELD_NUM_MIN_HEART_RATE, (sizeof(FIT_UINT8)*1), FIT_BASE_TYPE_UINT8,
554
+ }
555
+ };
556
+
557
+ const static FIT_LENGTH_MESG_DEF length_mesg_def =
558
+ {
559
+ 0, // reserved_1
560
+ FIT_ARCH_ENDIAN, // arch
561
+ FIT_MESG_NUM_LENGTH, // global_mesg_num
562
+ 18, // num_fields
563
+ { // field_def_num, size, base_type
564
+ FIT_LENGTH_FIELD_NUM_TIMESTAMP, (sizeof(FIT_DATE_TIME)*1), FIT_BASE_TYPE_UINT32,
565
+ FIT_LENGTH_FIELD_NUM_START_TIME, (sizeof(FIT_DATE_TIME)*1), FIT_BASE_TYPE_UINT32,
566
+ FIT_LENGTH_FIELD_NUM_TOTAL_ELAPSED_TIME, (sizeof(FIT_UINT32)*1), FIT_BASE_TYPE_UINT32,
567
+ FIT_LENGTH_FIELD_NUM_TOTAL_TIMER_TIME, (sizeof(FIT_UINT32)*1), FIT_BASE_TYPE_UINT32,
568
+ FIT_LENGTH_FIELD_NUM_MESSAGE_INDEX, (sizeof(FIT_MESSAGE_INDEX)*1), FIT_BASE_TYPE_UINT16,
569
+ FIT_LENGTH_FIELD_NUM_TOTAL_STROKES, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
570
+ FIT_LENGTH_FIELD_NUM_AVG_SPEED, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
571
+ FIT_LENGTH_FIELD_NUM_TOTAL_CALORIES, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
572
+ FIT_LENGTH_FIELD_NUM_PLAYER_SCORE, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
573
+ FIT_LENGTH_FIELD_NUM_OPPONENT_SCORE, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
574
+ FIT_LENGTH_FIELD_NUM_STROKE_COUNT, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
575
+ FIT_LENGTH_FIELD_NUM_ZONE_COUNT, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
576
+ FIT_LENGTH_FIELD_NUM_EVENT, (sizeof(FIT_EVENT)*1), FIT_BASE_TYPE_ENUM,
577
+ FIT_LENGTH_FIELD_NUM_EVENT_TYPE, (sizeof(FIT_EVENT_TYPE)*1), FIT_BASE_TYPE_ENUM,
578
+ FIT_LENGTH_FIELD_NUM_SWIM_STROKE, (sizeof(FIT_SWIM_STROKE)*1), FIT_BASE_TYPE_ENUM,
579
+ FIT_LENGTH_FIELD_NUM_AVG_SWIMMING_CADENCE, (sizeof(FIT_UINT8)*1), FIT_BASE_TYPE_UINT8,
580
+ FIT_LENGTH_FIELD_NUM_EVENT_GROUP, (sizeof(FIT_UINT8)*1), FIT_BASE_TYPE_UINT8,
581
+ FIT_LENGTH_FIELD_NUM_LENGTH_TYPE, (sizeof(FIT_LENGTH_TYPE)*1), FIT_BASE_TYPE_ENUM,
582
+ }
583
+ };
584
+
585
+ const static FIT_RECORD_MESG_DEF record_mesg_def =
586
+ {
587
+ 0, // reserved_1
588
+ FIT_ARCH_ENDIAN, // arch
589
+ FIT_MESG_NUM_RECORD, // global_mesg_num
590
+ 34, // num_fields
591
+ { // field_def_num, size, base_type
592
+ FIT_RECORD_FIELD_NUM_TIMESTAMP, (sizeof(FIT_DATE_TIME)*1), FIT_BASE_TYPE_UINT32,
593
+ FIT_RECORD_FIELD_NUM_POSITION_LAT, (sizeof(FIT_SINT32)*1), FIT_BASE_TYPE_SINT32,
594
+ FIT_RECORD_FIELD_NUM_POSITION_LONG, (sizeof(FIT_SINT32)*1), FIT_BASE_TYPE_SINT32,
595
+ FIT_RECORD_FIELD_NUM_DISTANCE, (sizeof(FIT_UINT32)*1), FIT_BASE_TYPE_UINT32,
596
+ FIT_RECORD_FIELD_NUM_TIME_FROM_COURSE, (sizeof(FIT_SINT32)*1), FIT_BASE_TYPE_SINT32,
597
+ FIT_RECORD_FIELD_NUM_TOTAL_CYCLES, (sizeof(FIT_UINT32)*1), FIT_BASE_TYPE_UINT32,
598
+ FIT_RECORD_FIELD_NUM_ACCUMULATED_POWER, (sizeof(FIT_UINT32)*1), FIT_BASE_TYPE_UINT32,
599
+ FIT_RECORD_FIELD_NUM_ALTITUDE, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
600
+ FIT_RECORD_FIELD_NUM_SPEED, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
601
+ FIT_RECORD_FIELD_NUM_POWER, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
602
+ FIT_RECORD_FIELD_NUM_GRADE, (sizeof(FIT_SINT16)*1), FIT_BASE_TYPE_SINT16,
603
+ FIT_RECORD_FIELD_NUM_COMPRESSED_ACCUMULATED_POWER, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
604
+ FIT_RECORD_FIELD_NUM_VERTICAL_SPEED, (sizeof(FIT_SINT16)*1), FIT_BASE_TYPE_SINT16,
605
+ FIT_RECORD_FIELD_NUM_CALORIES, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
606
+ FIT_RECORD_FIELD_NUM_BALL_SPEED, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
607
+ FIT_RECORD_FIELD_NUM_CADENCE256, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
608
+ FIT_RECORD_FIELD_NUM_HEART_RATE, (sizeof(FIT_UINT8)*1), FIT_BASE_TYPE_UINT8,
609
+ FIT_RECORD_FIELD_NUM_CADENCE, (sizeof(FIT_UINT8)*1), FIT_BASE_TYPE_UINT8,
610
+ FIT_RECORD_FIELD_NUM_COMPRESSED_SPEED_DISTANCE, (sizeof(FIT_BYTE)*3), FIT_BASE_TYPE_BYTE,
611
+ FIT_RECORD_FIELD_NUM_RESISTANCE, (sizeof(FIT_UINT8)*1), FIT_BASE_TYPE_UINT8,
612
+ FIT_RECORD_FIELD_NUM_CYCLE_LENGTH, (sizeof(FIT_UINT8)*1), FIT_BASE_TYPE_UINT8,
613
+ FIT_RECORD_FIELD_NUM_TEMPERATURE, (sizeof(FIT_SINT8)*1), FIT_BASE_TYPE_SINT8,
614
+ FIT_RECORD_FIELD_NUM_SPEED_1S, (sizeof(FIT_UINT8)*5), FIT_BASE_TYPE_UINT8,
615
+ FIT_RECORD_FIELD_NUM_CYCLES, (sizeof(FIT_UINT8)*1), FIT_BASE_TYPE_UINT8,
616
+ FIT_RECORD_FIELD_NUM_LEFT_RIGHT_BALANCE, (sizeof(FIT_LEFT_RIGHT_BALANCE)*1), FIT_BASE_TYPE_UINT8,
617
+ FIT_RECORD_FIELD_NUM_GPS_ACCURACY, (sizeof(FIT_UINT8)*1), FIT_BASE_TYPE_UINT8,
618
+ FIT_RECORD_FIELD_NUM_LEFT_TORQUE_EFFECTIVENESS, (sizeof(FIT_UINT8)*1), FIT_BASE_TYPE_UINT8,
619
+ FIT_RECORD_FIELD_NUM_RIGHT_TORQUE_EFFECTIVENESS, (sizeof(FIT_UINT8)*1), FIT_BASE_TYPE_UINT8,
620
+ FIT_RECORD_FIELD_NUM_LEFT_PEDAL_SMOOTHNESS, (sizeof(FIT_UINT8)*1), FIT_BASE_TYPE_UINT8,
621
+ FIT_RECORD_FIELD_NUM_RIGHT_PEDAL_SMOOTHNESS, (sizeof(FIT_UINT8)*1), FIT_BASE_TYPE_UINT8,
622
+ FIT_RECORD_FIELD_NUM_COMBINED_PEDAL_SMOOTHNESS, (sizeof(FIT_UINT8)*1), FIT_BASE_TYPE_UINT8,
623
+ FIT_RECORD_FIELD_NUM_TIME128, (sizeof(FIT_UINT8)*1), FIT_BASE_TYPE_UINT8,
624
+ FIT_RECORD_FIELD_NUM_STROKE_TYPE, (sizeof(FIT_STROKE_TYPE)*1), FIT_BASE_TYPE_ENUM,
625
+ FIT_RECORD_FIELD_NUM_ZONE, (sizeof(FIT_UINT8)*1), FIT_BASE_TYPE_UINT8,
626
+ }
627
+ };
628
+
629
+ const static FIT_EVENT_MESG_DEF event_mesg_def =
630
+ {
631
+ 0, // reserved_1
632
+ FIT_ARCH_ENDIAN, // arch
633
+ FIT_MESG_NUM_EVENT, // global_mesg_num
634
+ 8, // num_fields
635
+ { // field_def_num, size, base_type
636
+ FIT_EVENT_FIELD_NUM_TIMESTAMP, (sizeof(FIT_DATE_TIME)*1), FIT_BASE_TYPE_UINT32,
637
+ FIT_EVENT_FIELD_NUM_DATA, (sizeof(FIT_UINT32)*1), FIT_BASE_TYPE_UINT32,
638
+ FIT_EVENT_FIELD_NUM_DATA16, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
639
+ FIT_EVENT_FIELD_NUM_SCORE, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
640
+ FIT_EVENT_FIELD_NUM_OPPONENT_SCORE, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
641
+ FIT_EVENT_FIELD_NUM_EVENT, (sizeof(FIT_EVENT)*1), FIT_BASE_TYPE_ENUM,
642
+ FIT_EVENT_FIELD_NUM_EVENT_TYPE, (sizeof(FIT_EVENT_TYPE)*1), FIT_BASE_TYPE_ENUM,
643
+ FIT_EVENT_FIELD_NUM_EVENT_GROUP, (sizeof(FIT_UINT8)*1), FIT_BASE_TYPE_UINT8,
644
+ }
645
+ };
646
+
647
+ const static FIT_DEVICE_INFO_MESG_DEF device_info_mesg_def =
648
+ {
649
+ 0, // reserved_1
650
+ FIT_ARCH_ENDIAN, // arch
651
+ FIT_MESG_NUM_DEVICE_INFO, // global_mesg_num
652
+ 11, // num_fields
653
+ { // field_def_num, size, base_type
654
+ FIT_DEVICE_INFO_FIELD_NUM_TIMESTAMP, (sizeof(FIT_DATE_TIME)*1), FIT_BASE_TYPE_UINT32,
655
+ FIT_DEVICE_INFO_FIELD_NUM_SERIAL_NUMBER, (sizeof(FIT_UINT32Z)*1), FIT_BASE_TYPE_UINT32Z,
656
+ FIT_DEVICE_INFO_FIELD_NUM_CUM_OPERATING_TIME, (sizeof(FIT_UINT32)*1), FIT_BASE_TYPE_UINT32,
657
+ FIT_DEVICE_INFO_FIELD_NUM_MANUFACTURER, (sizeof(FIT_MANUFACTURER)*1), FIT_BASE_TYPE_UINT16,
658
+ FIT_DEVICE_INFO_FIELD_NUM_PRODUCT, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
659
+ FIT_DEVICE_INFO_FIELD_NUM_SOFTWARE_VERSION, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
660
+ FIT_DEVICE_INFO_FIELD_NUM_BATTERY_VOLTAGE, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
661
+ FIT_DEVICE_INFO_FIELD_NUM_DEVICE_INDEX, (sizeof(FIT_DEVICE_INDEX)*1), FIT_BASE_TYPE_UINT8,
662
+ FIT_DEVICE_INFO_FIELD_NUM_DEVICE_TYPE, (sizeof(FIT_DEVICE_TYPE)*1), FIT_BASE_TYPE_UINT8,
663
+ FIT_DEVICE_INFO_FIELD_NUM_HARDWARE_VERSION, (sizeof(FIT_UINT8)*1), FIT_BASE_TYPE_UINT8,
664
+ FIT_DEVICE_INFO_FIELD_NUM_BATTERY_STATUS, (sizeof(FIT_BATTERY_STATUS)*1), FIT_BASE_TYPE_UINT8,
665
+ }
666
+ };
667
+
668
+ const static FIT_HRV_MESG_DEF hrv_mesg_def =
669
+ {
670
+ 0, // reserved_1
671
+ FIT_ARCH_ENDIAN, // arch
672
+ FIT_MESG_NUM_HRV, // global_mesg_num
673
+ 1, // num_fields
674
+ { // field_def_num, size, base_type
675
+ FIT_HRV_FIELD_NUM_TIME, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
676
+ }
677
+ };
678
+
679
+ const static FIT_COURSE_MESG_DEF course_mesg_def =
680
+ {
681
+ 0, // reserved_1
682
+ FIT_ARCH_ENDIAN, // arch
683
+ FIT_MESG_NUM_COURSE, // global_mesg_num
684
+ 3, // num_fields
685
+ { // field_def_num, size, base_type
686
+ FIT_COURSE_FIELD_NUM_NAME, (sizeof(FIT_STRING)*16), FIT_BASE_TYPE_STRING,
687
+ FIT_COURSE_FIELD_NUM_CAPABILITIES, (sizeof(FIT_COURSE_CAPABILITIES)*1), FIT_BASE_TYPE_UINT32Z,
688
+ FIT_COURSE_FIELD_NUM_SPORT, (sizeof(FIT_SPORT)*1), FIT_BASE_TYPE_ENUM,
689
+ }
690
+ };
691
+
692
+ const static FIT_COURSE_POINT_MESG_DEF course_point_mesg_def =
693
+ {
694
+ 0, // reserved_1
695
+ FIT_ARCH_ENDIAN, // arch
696
+ FIT_MESG_NUM_COURSE_POINT, // global_mesg_num
697
+ 7, // num_fields
698
+ { // field_def_num, size, base_type
699
+ FIT_COURSE_POINT_FIELD_NUM_TIMESTAMP, (sizeof(FIT_DATE_TIME)*1), FIT_BASE_TYPE_UINT32,
700
+ FIT_COURSE_POINT_FIELD_NUM_POSITION_LAT, (sizeof(FIT_SINT32)*1), FIT_BASE_TYPE_SINT32,
701
+ FIT_COURSE_POINT_FIELD_NUM_POSITION_LONG, (sizeof(FIT_SINT32)*1), FIT_BASE_TYPE_SINT32,
702
+ FIT_COURSE_POINT_FIELD_NUM_DISTANCE, (sizeof(FIT_UINT32)*1), FIT_BASE_TYPE_UINT32,
703
+ FIT_COURSE_POINT_FIELD_NUM_NAME, (sizeof(FIT_STRING)*16), FIT_BASE_TYPE_STRING,
704
+ FIT_COURSE_POINT_FIELD_NUM_MESSAGE_INDEX, (sizeof(FIT_MESSAGE_INDEX)*1), FIT_BASE_TYPE_UINT16,
705
+ FIT_COURSE_POINT_FIELD_NUM_TYPE, (sizeof(FIT_COURSE_POINT)*1), FIT_BASE_TYPE_ENUM,
706
+ }
707
+ };
708
+
709
+ const static FIT_WORKOUT_MESG_DEF workout_mesg_def =
710
+ {
711
+ 0, // reserved_1
712
+ FIT_ARCH_ENDIAN, // arch
713
+ FIT_MESG_NUM_WORKOUT, // global_mesg_num
714
+ 4, // num_fields
715
+ { // field_def_num, size, base_type
716
+ FIT_WORKOUT_FIELD_NUM_CAPABILITIES, (sizeof(FIT_WORKOUT_CAPABILITIES)*1), FIT_BASE_TYPE_UINT32Z,
717
+ FIT_WORKOUT_FIELD_NUM_WKT_NAME, (sizeof(FIT_STRING)*16), FIT_BASE_TYPE_STRING,
718
+ FIT_WORKOUT_FIELD_NUM_NUM_VALID_STEPS, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
719
+ FIT_WORKOUT_FIELD_NUM_SPORT, (sizeof(FIT_SPORT)*1), FIT_BASE_TYPE_ENUM,
720
+ }
721
+ };
722
+
723
+ const static FIT_WORKOUT_STEP_MESG_DEF workout_step_mesg_def =
724
+ {
725
+ 0, // reserved_1
726
+ FIT_ARCH_ENDIAN, // arch
727
+ FIT_MESG_NUM_WORKOUT_STEP, // global_mesg_num
728
+ 9, // num_fields
729
+ { // field_def_num, size, base_type
730
+ FIT_WORKOUT_STEP_FIELD_NUM_WKT_STEP_NAME, (sizeof(FIT_STRING)*16), FIT_BASE_TYPE_STRING,
731
+ FIT_WORKOUT_STEP_FIELD_NUM_DURATION_VALUE, (sizeof(FIT_UINT32)*1), FIT_BASE_TYPE_UINT32,
732
+ FIT_WORKOUT_STEP_FIELD_NUM_TARGET_VALUE, (sizeof(FIT_UINT32)*1), FIT_BASE_TYPE_UINT32,
733
+ FIT_WORKOUT_STEP_FIELD_NUM_CUSTOM_TARGET_VALUE_LOW, (sizeof(FIT_UINT32)*1), FIT_BASE_TYPE_UINT32,
734
+ FIT_WORKOUT_STEP_FIELD_NUM_CUSTOM_TARGET_VALUE_HIGH, (sizeof(FIT_UINT32)*1), FIT_BASE_TYPE_UINT32,
735
+ FIT_WORKOUT_STEP_FIELD_NUM_MESSAGE_INDEX, (sizeof(FIT_MESSAGE_INDEX)*1), FIT_BASE_TYPE_UINT16,
736
+ FIT_WORKOUT_STEP_FIELD_NUM_DURATION_TYPE, (sizeof(FIT_WKT_STEP_DURATION)*1), FIT_BASE_TYPE_ENUM,
737
+ FIT_WORKOUT_STEP_FIELD_NUM_TARGET_TYPE, (sizeof(FIT_WKT_STEP_TARGET)*1), FIT_BASE_TYPE_ENUM,
738
+ FIT_WORKOUT_STEP_FIELD_NUM_INTENSITY, (sizeof(FIT_INTENSITY)*1), FIT_BASE_TYPE_ENUM,
739
+ }
740
+ };
741
+
742
+ const static FIT_SCHEDULE_MESG_DEF schedule_mesg_def =
743
+ {
744
+ 0, // reserved_1
745
+ FIT_ARCH_ENDIAN, // arch
746
+ FIT_MESG_NUM_SCHEDULE, // global_mesg_num
747
+ 7, // num_fields
748
+ { // field_def_num, size, base_type
749
+ FIT_SCHEDULE_FIELD_NUM_SERIAL_NUMBER, (sizeof(FIT_UINT32Z)*1), FIT_BASE_TYPE_UINT32Z,
750
+ FIT_SCHEDULE_FIELD_NUM_TIME_CREATED, (sizeof(FIT_DATE_TIME)*1), FIT_BASE_TYPE_UINT32,
751
+ FIT_SCHEDULE_FIELD_NUM_SCHEDULED_TIME, (sizeof(FIT_LOCAL_DATE_TIME)*1), FIT_BASE_TYPE_UINT32,
752
+ FIT_SCHEDULE_FIELD_NUM_MANUFACTURER, (sizeof(FIT_MANUFACTURER)*1), FIT_BASE_TYPE_UINT16,
753
+ FIT_SCHEDULE_FIELD_NUM_PRODUCT, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
754
+ FIT_SCHEDULE_FIELD_NUM_COMPLETED, (sizeof(FIT_BOOL)*1), FIT_BASE_TYPE_ENUM,
755
+ FIT_SCHEDULE_FIELD_NUM_TYPE, (sizeof(FIT_SCHEDULE)*1), FIT_BASE_TYPE_ENUM,
756
+ }
757
+ };
758
+
759
+ const static FIT_TOTALS_MESG_DEF totals_mesg_def =
760
+ {
761
+ 0, // reserved_1
762
+ FIT_ARCH_ENDIAN, // arch
763
+ FIT_MESG_NUM_TOTALS, // global_mesg_num
764
+ 9, // num_fields
765
+ { // field_def_num, size, base_type
766
+ FIT_TOTALS_FIELD_NUM_TIMESTAMP, (sizeof(FIT_DATE_TIME)*1), FIT_BASE_TYPE_UINT32,
767
+ FIT_TOTALS_FIELD_NUM_TIMER_TIME, (sizeof(FIT_UINT32)*1), FIT_BASE_TYPE_UINT32,
768
+ FIT_TOTALS_FIELD_NUM_DISTANCE, (sizeof(FIT_UINT32)*1), FIT_BASE_TYPE_UINT32,
769
+ FIT_TOTALS_FIELD_NUM_CALORIES, (sizeof(FIT_UINT32)*1), FIT_BASE_TYPE_UINT32,
770
+ FIT_TOTALS_FIELD_NUM_ELAPSED_TIME, (sizeof(FIT_UINT32)*1), FIT_BASE_TYPE_UINT32,
771
+ FIT_TOTALS_FIELD_NUM_ACTIVE_TIME, (sizeof(FIT_UINT32)*1), FIT_BASE_TYPE_UINT32,
772
+ FIT_TOTALS_FIELD_NUM_MESSAGE_INDEX, (sizeof(FIT_MESSAGE_INDEX)*1), FIT_BASE_TYPE_UINT16,
773
+ FIT_TOTALS_FIELD_NUM_SESSIONS, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
774
+ FIT_TOTALS_FIELD_NUM_SPORT, (sizeof(FIT_SPORT)*1), FIT_BASE_TYPE_ENUM,
775
+ }
776
+ };
777
+
778
+ const static FIT_WEIGHT_SCALE_MESG_DEF weight_scale_mesg_def =
779
+ {
780
+ 0, // reserved_1
781
+ FIT_ARCH_ENDIAN, // arch
782
+ FIT_MESG_NUM_WEIGHT_SCALE, // global_mesg_num
783
+ 13, // num_fields
784
+ { // field_def_num, size, base_type
785
+ FIT_WEIGHT_SCALE_FIELD_NUM_TIMESTAMP, (sizeof(FIT_DATE_TIME)*1), FIT_BASE_TYPE_UINT32,
786
+ FIT_WEIGHT_SCALE_FIELD_NUM_WEIGHT, (sizeof(FIT_WEIGHT)*1), FIT_BASE_TYPE_UINT16,
787
+ FIT_WEIGHT_SCALE_FIELD_NUM_PERCENT_FAT, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
788
+ FIT_WEIGHT_SCALE_FIELD_NUM_PERCENT_HYDRATION, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
789
+ FIT_WEIGHT_SCALE_FIELD_NUM_VISCERAL_FAT_MASS, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
790
+ FIT_WEIGHT_SCALE_FIELD_NUM_BONE_MASS, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
791
+ FIT_WEIGHT_SCALE_FIELD_NUM_MUSCLE_MASS, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
792
+ FIT_WEIGHT_SCALE_FIELD_NUM_BASAL_MET, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
793
+ FIT_WEIGHT_SCALE_FIELD_NUM_ACTIVE_MET, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
794
+ FIT_WEIGHT_SCALE_FIELD_NUM_USER_PROFILE_INDEX, (sizeof(FIT_MESSAGE_INDEX)*1), FIT_BASE_TYPE_UINT16,
795
+ FIT_WEIGHT_SCALE_FIELD_NUM_PHYSIQUE_RATING, (sizeof(FIT_UINT8)*1), FIT_BASE_TYPE_UINT8,
796
+ FIT_WEIGHT_SCALE_FIELD_NUM_METABOLIC_AGE, (sizeof(FIT_UINT8)*1), FIT_BASE_TYPE_UINT8,
797
+ FIT_WEIGHT_SCALE_FIELD_NUM_VISCERAL_FAT_RATING, (sizeof(FIT_UINT8)*1), FIT_BASE_TYPE_UINT8,
798
+ }
799
+ };
800
+
801
+ const static FIT_BLOOD_PRESSURE_MESG_DEF blood_pressure_mesg_def =
802
+ {
803
+ 0, // reserved_1
804
+ FIT_ARCH_ENDIAN, // arch
805
+ FIT_MESG_NUM_BLOOD_PRESSURE, // global_mesg_num
806
+ 11, // num_fields
807
+ { // field_def_num, size, base_type
808
+ FIT_BLOOD_PRESSURE_FIELD_NUM_TIMESTAMP, (sizeof(FIT_DATE_TIME)*1), FIT_BASE_TYPE_UINT32,
809
+ FIT_BLOOD_PRESSURE_FIELD_NUM_SYSTOLIC_PRESSURE, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
810
+ FIT_BLOOD_PRESSURE_FIELD_NUM_DIASTOLIC_PRESSURE, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
811
+ FIT_BLOOD_PRESSURE_FIELD_NUM_MEAN_ARTERIAL_PRESSURE, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
812
+ FIT_BLOOD_PRESSURE_FIELD_NUM_MAP_3_SAMPLE_MEAN, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
813
+ FIT_BLOOD_PRESSURE_FIELD_NUM_MAP_MORNING_VALUES, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
814
+ FIT_BLOOD_PRESSURE_FIELD_NUM_MAP_EVENING_VALUES, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
815
+ FIT_BLOOD_PRESSURE_FIELD_NUM_USER_PROFILE_INDEX, (sizeof(FIT_MESSAGE_INDEX)*1), FIT_BASE_TYPE_UINT16,
816
+ FIT_BLOOD_PRESSURE_FIELD_NUM_HEART_RATE, (sizeof(FIT_UINT8)*1), FIT_BASE_TYPE_UINT8,
817
+ FIT_BLOOD_PRESSURE_FIELD_NUM_HEART_RATE_TYPE, (sizeof(FIT_HR_TYPE)*1), FIT_BASE_TYPE_ENUM,
818
+ FIT_BLOOD_PRESSURE_FIELD_NUM_STATUS, (sizeof(FIT_BP_STATUS)*1), FIT_BASE_TYPE_ENUM,
819
+ }
820
+ };
821
+
822
+ const static FIT_MONITORING_INFO_MESG_DEF monitoring_info_mesg_def =
823
+ {
824
+ 0, // reserved_1
825
+ FIT_ARCH_ENDIAN, // arch
826
+ FIT_MESG_NUM_MONITORING_INFO, // global_mesg_num
827
+ 2, // num_fields
828
+ { // field_def_num, size, base_type
829
+ FIT_MONITORING_INFO_FIELD_NUM_TIMESTAMP, (sizeof(FIT_DATE_TIME)*1), FIT_BASE_TYPE_UINT32,
830
+ FIT_MONITORING_INFO_FIELD_NUM_LOCAL_TIMESTAMP, (sizeof(FIT_LOCAL_DATE_TIME)*1), FIT_BASE_TYPE_UINT32,
831
+ }
832
+ };
833
+
834
+ const static FIT_MONITORING_MESG_DEF monitoring_mesg_def =
835
+ {
836
+ 0, // reserved_1
837
+ FIT_ARCH_ENDIAN, // arch
838
+ FIT_MESG_NUM_MONITORING, // global_mesg_num
839
+ 12, // num_fields
840
+ { // field_def_num, size, base_type
841
+ FIT_MONITORING_FIELD_NUM_TIMESTAMP, (sizeof(FIT_DATE_TIME)*1), FIT_BASE_TYPE_UINT32,
842
+ FIT_MONITORING_FIELD_NUM_DISTANCE, (sizeof(FIT_UINT32)*1), FIT_BASE_TYPE_UINT32,
843
+ FIT_MONITORING_FIELD_NUM_CYCLES, (sizeof(FIT_UINT32)*1), FIT_BASE_TYPE_UINT32,
844
+ FIT_MONITORING_FIELD_NUM_ACTIVE_TIME, (sizeof(FIT_UINT32)*1), FIT_BASE_TYPE_UINT32,
845
+ FIT_MONITORING_FIELD_NUM_LOCAL_TIMESTAMP, (sizeof(FIT_LOCAL_DATE_TIME)*1), FIT_BASE_TYPE_UINT32,
846
+ FIT_MONITORING_FIELD_NUM_CALORIES, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
847
+ FIT_MONITORING_FIELD_NUM_COMPRESSED_DISTANCE, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
848
+ FIT_MONITORING_FIELD_NUM_COMPRESSED_CYCLES, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
849
+ FIT_MONITORING_FIELD_NUM_COMPRESSED_ACTIVE_TIME, (sizeof(FIT_UINT16)*1), FIT_BASE_TYPE_UINT16,
850
+ FIT_MONITORING_FIELD_NUM_DEVICE_INDEX, (sizeof(FIT_DEVICE_INDEX)*1), FIT_BASE_TYPE_UINT8,
851
+ FIT_MONITORING_FIELD_NUM_ACTIVITY_TYPE, (sizeof(FIT_ACTIVITY_TYPE)*1), FIT_BASE_TYPE_ENUM,
852
+ FIT_MONITORING_FIELD_NUM_ACTIVITY_SUBTYPE, (sizeof(FIT_ACTIVITY_SUBTYPE)*1), FIT_BASE_TYPE_ENUM,
853
+ }
854
+ };
855
+
856
+
857
+ const FIT_CONST_MESG_DEF_PTR fit_mesg_defs[] =
858
+ {
859
+ (FIT_CONST_MESG_DEF_PTR) &pad_mesg_def,
860
+ (FIT_CONST_MESG_DEF_PTR) &file_id_mesg_def,
861
+ (FIT_CONST_MESG_DEF_PTR) &file_creator_mesg_def,
862
+ (FIT_CONST_MESG_DEF_PTR) &software_mesg_def,
863
+ (FIT_CONST_MESG_DEF_PTR) &slave_device_mesg_def,
864
+ (FIT_CONST_MESG_DEF_PTR) &capabilities_mesg_def,
865
+ (FIT_CONST_MESG_DEF_PTR) &file_capabilities_mesg_def,
866
+ (FIT_CONST_MESG_DEF_PTR) &mesg_capabilities_mesg_def,
867
+ (FIT_CONST_MESG_DEF_PTR) &field_capabilities_mesg_def,
868
+ (FIT_CONST_MESG_DEF_PTR) &device_settings_mesg_def,
869
+ (FIT_CONST_MESG_DEF_PTR) &user_profile_mesg_def,
870
+ (FIT_CONST_MESG_DEF_PTR) &hrm_profile_mesg_def,
871
+ (FIT_CONST_MESG_DEF_PTR) &sdm_profile_mesg_def,
872
+ (FIT_CONST_MESG_DEF_PTR) &bike_profile_mesg_def,
873
+ (FIT_CONST_MESG_DEF_PTR) &zones_target_mesg_def,
874
+ (FIT_CONST_MESG_DEF_PTR) &sport_mesg_def,
875
+ (FIT_CONST_MESG_DEF_PTR) &hr_zone_mesg_def,
876
+ (FIT_CONST_MESG_DEF_PTR) &speed_zone_mesg_def,
877
+ (FIT_CONST_MESG_DEF_PTR) &cadence_zone_mesg_def,
878
+ (FIT_CONST_MESG_DEF_PTR) &power_zone_mesg_def,
879
+ (FIT_CONST_MESG_DEF_PTR) &met_zone_mesg_def,
880
+ (FIT_CONST_MESG_DEF_PTR) &goal_mesg_def,
881
+ (FIT_CONST_MESG_DEF_PTR) &activity_mesg_def,
882
+ (FIT_CONST_MESG_DEF_PTR) &session_mesg_def,
883
+ (FIT_CONST_MESG_DEF_PTR) &lap_mesg_def,
884
+ (FIT_CONST_MESG_DEF_PTR) &length_mesg_def,
885
+ (FIT_CONST_MESG_DEF_PTR) &record_mesg_def,
886
+ (FIT_CONST_MESG_DEF_PTR) &event_mesg_def,
887
+ (FIT_CONST_MESG_DEF_PTR) &device_info_mesg_def,
888
+ (FIT_CONST_MESG_DEF_PTR) &hrv_mesg_def,
889
+ (FIT_CONST_MESG_DEF_PTR) &course_mesg_def,
890
+ (FIT_CONST_MESG_DEF_PTR) &course_point_mesg_def,
891
+ (FIT_CONST_MESG_DEF_PTR) &workout_mesg_def,
892
+ (FIT_CONST_MESG_DEF_PTR) &workout_step_mesg_def,
893
+ (FIT_CONST_MESG_DEF_PTR) &schedule_mesg_def,
894
+ (FIT_CONST_MESG_DEF_PTR) &totals_mesg_def,
895
+ (FIT_CONST_MESG_DEF_PTR) &weight_scale_mesg_def,
896
+ (FIT_CONST_MESG_DEF_PTR) &blood_pressure_mesg_def,
897
+ (FIT_CONST_MESG_DEF_PTR) &monitoring_info_mesg_def,
898
+ (FIT_CONST_MESG_DEF_PTR) &monitoring_mesg_def,
899
+ };