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.
@@ -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
+ };