fit_parser 0.0.1

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.
Files changed (47) hide show
  1. checksums.yaml +7 -0
  2. data/.document +5 -0
  3. data/.rspec +1 -0
  4. data/Gemfile +15 -0
  5. data/Gemfile.lock +105 -0
  6. data/LICENSE.txt +20 -0
  7. data/README.md +27 -0
  8. data/Rakefile +38 -0
  9. data/lib/fit_parser/file/data.rb +99 -0
  10. data/lib/fit_parser/file/definition.rb +120 -0
  11. data/lib/fit_parser/file/definitions.rb +705 -0
  12. data/lib/fit_parser/file/header.rb +18 -0
  13. data/lib/fit_parser/file/record.rb +37 -0
  14. data/lib/fit_parser/file/record_header.rb +27 -0
  15. data/lib/fit_parser/file/type.rb +41 -0
  16. data/lib/fit_parser/file/types.rb +954 -0
  17. data/lib/fit_parser/file.rb +29 -0
  18. data/lib/fit_parser/version.rb +3 -0
  19. data/lib/fit_parser.rb +19 -0
  20. data/spec/file/data_spec.rb +111 -0
  21. data/spec/file/definition_spec.rb +26 -0
  22. data/spec/file/definitions_spec.rb +81 -0
  23. data/spec/file/header_spec.rb +28 -0
  24. data/spec/file/record_header_spec.rb +20 -0
  25. data/spec/file/record_spec.rb +56 -0
  26. data/spec/file/type_spec.rb +99 -0
  27. data/spec/file/types_spec.rb +100 -0
  28. data/spec/file_spec.rb +21 -0
  29. data/spec/fit_spec.rb +10 -0
  30. data/spec/spec_helper.rb +19 -0
  31. data/spec/support/examples/file/full_file_with_wrong_crc.fit +0 -0
  32. data/spec/support/examples/file/header +0 -0
  33. data/spec/support/examples/file/header_14b.fit +0 -0
  34. data/spec/support/examples/record/data_record_2.fit +0 -0
  35. data/spec/support/examples/record/data_record_2bis.fit +0 -0
  36. data/spec/support/examples/record/definition_record +0 -0
  37. data/spec/support/examples/record/definition_record_2.fit +0 -0
  38. data/spec/support/examples/record/message/data_dynamic_fields.fit +0 -0
  39. data/spec/support/examples/record/message/data_field_array.fit +0 -0
  40. data/spec/support/examples/record/message/data_file_capabilities_activities.fit +0 -0
  41. data/spec/support/examples/record/message/data_file_capabilities_settings.fit +0 -0
  42. data/spec/support/examples/record/message/definition +0 -0
  43. data/spec/support/examples/record/message/definition_dynamic_fields.fit +0 -0
  44. data/spec/support/examples/record/message/definition_field_array.fit +0 -0
  45. data/spec/support/examples/record/message/definition_file_capabilities.fit +0 -0
  46. data/spec/support/examples/record/normal_header +1 -0
  47. metadata +230 -0
@@ -0,0 +1,705 @@
1
+ module FitParser
2
+ class File
3
+ module Definitions
4
+
5
+ @@fields = Hash.new{ |h,k| h[k]= {} }
6
+ @@dyn_fields = Hash.new{ |h,k| h[k]= {} }
7
+ @@names = Hash.new
8
+
9
+ class << self
10
+ def add_field(global_msg_num, field_def_num, name, options = {})
11
+ if @@fields[global_msg_num].has_key? field_def_num
12
+ raise "bad definition of dynamic field (#{name}) without :ref_field_name or :ref_field_values" unless options.has_key?(:ref_field_name) && options.has_key?(:ref_field_values)
13
+ @@dyn_fields[global_msg_num][field_def_num] ||= {}
14
+ @@dyn_fields[global_msg_num][field_def_num][name.to_sym] = options
15
+ # let's put the ref_field_values with the raw_value instead of the real value
16
+ type = Types.get_type_definition(options[:ref_field_name].to_sym) if options[:ref_field_name]
17
+ # basic types are not found and returns nil (also some rspec dummy tests)
18
+ if type
19
+ type = type[:values].invert
20
+ @@dyn_fields[global_msg_num][field_def_num][name.to_sym][:ref_field_values] = options[:ref_field_values].map { |elt| type[elt.to_s] }
21
+ end
22
+ else
23
+ @@fields[global_msg_num][field_def_num] = options.merge(:name => name)
24
+ end
25
+ end
26
+
27
+ def get_field(global_msg_num, field_def_num)
28
+ @@fields[global_msg_num][field_def_num]
29
+ end
30
+
31
+ def get_dynamic_fields(global_msg_num, field_def_num)
32
+ @@dyn_fields[global_msg_num][field_def_num]
33
+ end
34
+
35
+ def add_name(global_msg_num, name)
36
+ @@names[global_msg_num] = name
37
+ end
38
+
39
+ def get_name(global_msg_num)
40
+ @@names[global_msg_num]
41
+ end
42
+ end
43
+
44
+ end
45
+ end
46
+ end
47
+
48
+ # DATA
49
+ Fit::File::Definitions.add_name 0, 'file_id'
50
+ Fit::File::Definitions.add_field 0, 0, 'type', :type => :file
51
+ Fit::File::Definitions.add_field 0, 1, 'manufacturer', :type => :manufacturer
52
+ Fit::File::Definitions.add_field 0, 2, 'product', :type => :uint16
53
+ Fit::File::Definitions.add_field 0, 2, 'garmin_product', :type => :garmin_product, :ref_field_name => 'manufacturer', :ref_field_values => [:garmin, :dynastream, :dynastream_oem]
54
+ Fit::File::Definitions.add_field 0, 3, 'serial_number', :type => :uint32z
55
+ Fit::File::Definitions.add_field 0, 4, 'time_created', :type => :date_time
56
+ Fit::File::Definitions.add_field 0, 5, 'number', :type => :uint16
57
+
58
+ Fit::File::Definitions.add_name 49, 'file_creator'
59
+ Fit::File::Definitions.add_field 49, 0, 'software_version', :type => :uint16
60
+ Fit::File::Definitions.add_field 49, 1, 'hardware_version', :type => :uint8
61
+
62
+ Fit::File::Definitions.add_name 35, 'software'
63
+ Fit::File::Definitions.add_field 35, 254, 'message_index', :type => :message_index
64
+ Fit::File::Definitions.add_field 35, 3, 'version', :type => :uint16, :scale => 100
65
+ Fit::File::Definitions.add_field 35, 5, 'part_number', :type => :string
66
+
67
+ Fit::File::Definitions.add_name 106, 'slave_device'
68
+ Fit::File::Definitions.add_field 106, 0, 'manufacturer', :type => :manufacturer
69
+ Fit::File::Definitions.add_field 106, 1, 'product', :type => :uint16
70
+ Fit::File::Definitions.add_field 106, 1, 'garmin_product', :type => :garmin_product, :ref_field_name => 'manufacturer', :ref_field_values => [:garmin, :dynastream, :dynastream_oem]
71
+
72
+ Fit::File::Definitions.add_name 1, 'capabilities'
73
+ Fit::File::Definitions.add_field 1, 0, 'languages', :type => :uint8z
74
+ Fit::File::Definitions.add_field 1, 1, 'sports', :type => :sport_bits_0
75
+ Fit::File::Definitions.add_field 1, 21, 'workouts_supported', :type => :workout_capabilities
76
+ Fit::File::Definitions.add_field 1, 23, 'connectivity_supported', :type => :connectivity_capabilities
77
+
78
+ Fit::File::Definitions.add_name 37, 'file_capabilities'
79
+ Fit::File::Definitions.add_field 37, 254, 'message_index', :type => :message_index
80
+ Fit::File::Definitions.add_field 37, 0, 'type', :type => :file
81
+ Fit::File::Definitions.add_field 37, 1, 'flags', :type => :file_flags
82
+ Fit::File::Definitions.add_field 37, 2, 'directory', :type => :string
83
+ Fit::File::Definitions.add_field 37, 3, 'max_count', :type => :uint16
84
+ Fit::File::Definitions.add_field 37, 4, 'max_size', :type => :uint32, :unit => 'bytes'
85
+
86
+ Fit::File::Definitions.add_name 38, 'mesg_capabilities'
87
+ Fit::File::Definitions.add_field 38, 254, 'message_index', :type => :message_index
88
+ Fit::File::Definitions.add_field 38, 0, 'file', :type => :file
89
+ Fit::File::Definitions.add_field 38, 1, 'mesg_num', :type => :mesg_num
90
+ Fit::File::Definitions.add_field 38, 2, 'count_type', :type => :mesg_count
91
+ Fit::File::Definitions.add_field 38, 3, 'count', :type => :uint16
92
+ Fit::File::Definitions.add_field 38, 3, 'num_per_file', :type => :uint16, :ref_field_name => 'count_type', :ref_field_values => [:num_per_file]
93
+ Fit::File::Definitions.add_field 38, 3, 'max_per_file', :type => :uint16, :ref_field_name => 'count_type', :ref_field_values => [:max_per_file]
94
+ Fit::File::Definitions.add_field 38, 3, 'max_per_file_type', :type => :uint16, :ref_field_name => 'count_type', :ref_field_values => [:max_per_file_type]
95
+
96
+ Fit::File::Definitions.add_name 39, 'field_capabilities'
97
+ Fit::File::Definitions.add_field 39, 254, 'message_index', :type => :message_index
98
+ Fit::File::Definitions.add_field 39, 0, 'file', :type => :file
99
+ Fit::File::Definitions.add_field 39, 1, 'mesg_num', :type => :mesg_num
100
+ Fit::File::Definitions.add_field 39, 2, 'field_num', :type => :uint8
101
+ Fit::File::Definitions.add_field 39, 3, 'count', :type => :uint16
102
+
103
+ Fit::File::Definitions.add_name 2, 'device_settings'
104
+ Fit::File::Definitions.add_field 2, 0, 'active_time_zone', :type => :uint8, :scale => 1
105
+ Fit::File::Definitions.add_field 2, 1, 'utc_offset', :type => :uint32
106
+ Fit::File::Definitions.add_field 2, 5, 'time_zone_offset', :type => :sint8, :scale => 4, :unit => 'hr'
107
+
108
+ Fit::File::Definitions.add_name 3, 'user_profile'
109
+ Fit::File::Definitions.add_field 3, 254, 'message_index', :type => :message_index
110
+ Fit::File::Definitions.add_field 3, 0, 'friendly_name', :type => :string, :scale => 1
111
+ Fit::File::Definitions.add_field 3, 1, 'gender', :type => :gender, :scale => 1
112
+ Fit::File::Definitions.add_field 3, 2, 'age', :type => :uint8, :scale => 1, :unit => 'years'
113
+ Fit::File::Definitions.add_field 3, 3, 'height', :type => :uint8, :scale => 100, :unit => 'm'
114
+ Fit::File::Definitions.add_field 3, 4, 'weight', :type => :uint16, :scale => 10, :unit => 'kg'
115
+ Fit::File::Definitions.add_field 3, 5, 'language', :type => :language, :scale => 1
116
+ Fit::File::Definitions.add_field 3, 6, 'elev_setting', :type => :display_measure, :scale => 1
117
+ Fit::File::Definitions.add_field 3, 7, 'weight_setting', :type => :display_measure, :scale => 1
118
+ Fit::File::Definitions.add_field 3, 8, 'resting_heart_rate', :type => :uint8, :scale => 1, :unit => 'bpm'
119
+ Fit::File::Definitions.add_field 3, 9, 'default_max_running_heart_rate', :type => :uint8, :scale => 1, :unit => 'bpm'
120
+ Fit::File::Definitions.add_field 3, 10, 'default_max_biking_heart_rate', :type => :uint8, :scale => 1, :unit => 'bpm'
121
+ Fit::File::Definitions.add_field 3, 11, 'default_max_heart_rate', :type => :uint8, :scale => 1, :unit => 'bpm'
122
+ Fit::File::Definitions.add_field 3, 12, 'hr_setting', :type => :display_heart, :scale => 1
123
+ Fit::File::Definitions.add_field 3, 13, 'speed_setting', :type => :display_measure, :scale => 1
124
+ Fit::File::Definitions.add_field 3, 14, 'dist_setting', :type => :display_measure, :scale => 1
125
+ Fit::File::Definitions.add_field 3, 16, 'power_setting', :type => :display_power, :scale => 1
126
+ Fit::File::Definitions.add_field 3, 17, 'activity_class', :type => :activity_class, :scale => 1
127
+ Fit::File::Definitions.add_field 3, 18, 'position_setting', :type => :display_position, :scale => 1
128
+ Fit::File::Definitions.add_field 3, 21, 'temperature_setting', :type => :display_measure, :scale => 1
129
+ Fit::File::Definitions.add_field 3, 22, 'local_id', :type => :user_local_id
130
+ Fit::File::Definitions.add_field 3, 23, 'global_id', :type => :byte
131
+ Fit::File::Definitions.add_field 3, 30, 'height_setting', :type => :display_measure
132
+
133
+ Fit::File::Definitions.add_name 4, 'hrm_profile'
134
+ Fit::File::Definitions.add_field 4, 254, 'message_index', :type => :message_index, :scale => 1
135
+ Fit::File::Definitions.add_field 4, 0, 'enabled', :type => :bool
136
+ Fit::File::Definitions.add_field 4, 1, 'hrm_ant_id', :type => :uint16z, :scale => 1
137
+ Fit::File::Definitions.add_field 4, 2, 'log_hrv', :type => :bool
138
+ Fit::File::Definitions.add_field 4, 3, 'hrm_ant_id_trans_type', :type => :uint8z
139
+
140
+ Fit::File::Definitions.add_name 5, 'sdm_profile'
141
+ Fit::File::Definitions.add_field 5, 254, 'message_index', :type => :message_index, :scale => 1
142
+ Fit::File::Definitions.add_field 5, 0, 'enabled', :type => :bool
143
+ Fit::File::Definitions.add_field 5, 1, 'sdm_ant_id', :type => :uint16z, :scale => 1
144
+ Fit::File::Definitions.add_field 5, 2, 'sdm_cal_factor', :type => :uint16, :scale => 10, :unit => '%'
145
+ Fit::File::Definitions.add_field 5, 3, 'odometer', :type => :uint32, :scale => 100, :unit => 'm'
146
+ Fit::File::Definitions.add_field 5, 4, 'speed_source', :type => :bool
147
+ Fit::File::Definitions.add_field 5, 5, 'sdm_ant_id_trans_type', :type => :uint8z
148
+ Fit::File::Definitions.add_field 5, 7, 'odometer_rollover', :type => :uint8
149
+
150
+ Fit::File::Definitions.add_name 6, 'bike_profile'
151
+ Fit::File::Definitions.add_field 6, 254, 'message_index', :type => :message_index, :scale => 1
152
+ Fit::File::Definitions.add_field 6, 0, 'name', :type => :string, :scale => 1
153
+ Fit::File::Definitions.add_field 6, 1, 'sport', :type => :sport, :scale => 1
154
+ Fit::File::Definitions.add_field 6, 2, 'sub_sport', :type => :sub_sport, :scale => 1
155
+ Fit::File::Definitions.add_field 6, 3, 'odometer', :type => :uint32, :scale => 100, :unit => 'm'
156
+ Fit::File::Definitions.add_field 6, 4, 'bike_spd_ant_id', :type => :uint16z, :scale => 1
157
+ Fit::File::Definitions.add_field 6, 5, 'bike_cad_ant_id', :type => :uint16z, :scale => 1
158
+ Fit::File::Definitions.add_field 6, 6, 'bike_spdcad_ant_id', :type => :uint16z, :scale => 1
159
+ Fit::File::Definitions.add_field 6, 7, 'bike_power_ant_id', :type => :uint16z, :scale => 1
160
+ Fit::File::Definitions.add_field 6, 8, 'custom_wheelsize', :type => :uint16, :scale => 1000, :unit => 'm'
161
+ Fit::File::Definitions.add_field 6, 9, 'auto_wheelsize', :type => :uint16, :scale => 1000, :unit => 'm'
162
+ Fit::File::Definitions.add_field 6, 10, 'bike_weight', :type => :uint16, :scale => 10, :unit => 'kg'
163
+ Fit::File::Definitions.add_field 6, 11, 'power_cal_factor', :type => :uint16, :scale => 10, :unit => '%'
164
+ Fit::File::Definitions.add_field 6, 12, 'auto_wheel_cal', :type => :bool, :scale => 1
165
+ Fit::File::Definitions.add_field 6, 13, 'auto_power_zero', :type => :bool, :scale => 1
166
+ Fit::File::Definitions.add_field 6, 14, 'id', :type => :uint8
167
+ Fit::File::Definitions.add_field 6, 15, 'spd_enabled', :type => :bool
168
+ Fit::File::Definitions.add_field 6, 16, 'cad_enabled', :type => :bool
169
+ Fit::File::Definitions.add_field 6, 17, 'spdcad_enabled', :type => :bool
170
+ Fit::File::Definitions.add_field 6, 18, 'power_enabled', :type => :bool
171
+ Fit::File::Definitions.add_field 6, 19, 'crank_length', :type => :uint8, :scale => 2, :offset => -110, :unit => 'mm'
172
+ Fit::File::Definitions.add_field 6, 20, 'enabled', :type => :bool
173
+ Fit::File::Definitions.add_field 6, 21, 'bike_spd_ant_id_trans_type', :type => :uint8z
174
+ Fit::File::Definitions.add_field 6, 22, 'bike_cad_ant_id_trans_type', :type => :uint8z
175
+ Fit::File::Definitions.add_field 6, 23, 'bike_spdcad_ant_id_trans_type', :type => :uint8z
176
+ Fit::File::Definitions.add_field 6, 24, 'bike_power_ant_id_trans_type', :type => :uint8z
177
+ Fit::File::Definitions.add_field 6, 37, 'odometer_rollover', :type => :uint8
178
+ Fit::File::Definitions.add_field 6, 38, 'front_gear_num', :type => :uint8z
179
+ Fit::File::Definitions.add_field 6, 39, 'front_gear', :type => :uint8z
180
+ Fit::File::Definitions.add_field 6, 40, 'rear_gear_num', :type => :uint8z
181
+ Fit::File::Definitions.add_field 6, 41, 'rear_gear', :type => :uint8z
182
+
183
+ Fit::File::Definitions.add_name 7, 'zones_target'
184
+ Fit::File::Definitions.add_field 7, 1, 'max_heart_rate', :type => :uint8, :scale => 1
185
+ Fit::File::Definitions.add_field 7, 2, 'threshold_heart_rate', :type => :uint8, :scale => 1
186
+ Fit::File::Definitions.add_field 7, 3, 'functional_threshold_power', :type => :uint16, :scale => 1
187
+ Fit::File::Definitions.add_field 7, 5, 'hr_calc_type', :type => :hr_zone_calc, :scale => 1
188
+ Fit::File::Definitions.add_field 7, 7, 'pwr_calc_type', :type => :pwr_zone_calc, :scale => 1
189
+
190
+ Fit::File::Definitions.add_name 12, 'sport'
191
+ Fit::File::Definitions.add_field 12, 0, 'sport', :type => :sport, :scale => 1
192
+ Fit::File::Definitions.add_field 12, 1, 'sub_sport', :type => :sub_sport, :scale => 1
193
+ Fit::File::Definitions.add_field 12, 3, 'name', :type => :string
194
+
195
+ Fit::File::Definitions.add_name 8, 'hr_zone'
196
+ Fit::File::Definitions.add_field 8, 254, 'message_index', :type => :message_index, :scale => 1
197
+ Fit::File::Definitions.add_field 8, 1, 'high_bpm', :type => :uint8, :scale => 1, :unit => 'bpm'
198
+ Fit::File::Definitions.add_field 8, 2, 'name', :type => :string, :scale => 1
199
+
200
+ Fit::File::Definitions.add_name 53, 'speed_zone'
201
+ Fit::File::Definitions.add_field 53, 254, 'message_index', :type => :message_index, :scale => 1
202
+ Fit::File::Definitions.add_field 53, 0, 'high_value', :type => :uint16, :scale => 1000, :unit => 'm/s'
203
+ Fit::File::Definitions.add_field 53, 1, 'name', :type => :string, :scale => 1
204
+
205
+ Fit::File::Definitions.add_name 131, 'cadence_zone'
206
+ Fit::File::Definitions.add_field 131, 254, 'message_index', :type => :message_index, :scale => 1
207
+ Fit::File::Definitions.add_field 131, 0, 'high_value', :type => :uint8, :scale => 1, :unit => 'rpm'
208
+ Fit::File::Definitions.add_field 131, 1, 'name', :type => :string, :scale => 1
209
+
210
+ Fit::File::Definitions.add_name 9, 'power_zone'
211
+ Fit::File::Definitions.add_field 9, 254, 'message_index', :type => :message_index, :scale => 1
212
+ Fit::File::Definitions.add_field 9, 1, 'high_value', :type => :uint16, :scale => 1, :unit => 'watts'
213
+ Fit::File::Definitions.add_field 9, 2, 'name', :type => :string, :scale => 1
214
+
215
+ Fit::File::Definitions.add_name 10, 'met_zone'
216
+ Fit::File::Definitions.add_field 10, 254, 'message_index', :type => :message_index, :scale => 1
217
+ Fit::File::Definitions.add_field 10, 1, 'high_bpm', :type => :uint8, :scale => 1
218
+ Fit::File::Definitions.add_field 10, 2, 'calories', :type => :uint16, :scale => 10, :unit => 'kcal / min'
219
+ Fit::File::Definitions.add_field 10, 3, 'fat_calories', :type => :uint8, :scale => 10, :unit => 'kcal / min'
220
+
221
+ Fit::File::Definitions.add_name 15, 'goal'
222
+ Fit::File::Definitions.add_field 15, 254, 'message_index', :type => :message_index, :scale => 1
223
+ Fit::File::Definitions.add_field 15, 0, 'sport', :type => :sport, :scale => 1
224
+ Fit::File::Definitions.add_field 15, 1, 'sub_sport', :type => :sub_sport, :scale => 1
225
+ Fit::File::Definitions.add_field 15, 2, 'start_date', :type => :date_time
226
+ Fit::File::Definitions.add_field 15, 3, 'end_date', :type => :date_time
227
+ Fit::File::Definitions.add_field 15, 4, 'type', :type => :goal
228
+ Fit::File::Definitions.add_field 15, 5, 'value', :type => :uint32, :scale => 1
229
+ Fit::File::Definitions.add_field 15, 6, 'repeat', :type => :bool
230
+ Fit::File::Definitions.add_field 15, 7, 'target_value', :type => :uint32, :scale => 1
231
+ Fit::File::Definitions.add_field 15, 8, 'recurrence', :type => :goal_recurrence, :scale => 1
232
+ Fit::File::Definitions.add_field 15, 9, 'recurrence_value', :type => :uint16, :scale => 1
233
+ Fit::File::Definitions.add_field 15, 10, 'enabled', :type => :bool, :scale => 1
234
+
235
+ Fit::File::Definitions.add_name 34, 'activity'
236
+ Fit::File::Definitions.add_field 34, 253, 'timestamp', :type => :date_time
237
+ Fit::File::Definitions.add_field 34, 0, 'total_timer_time', :type => :uint32, :scale => 1000, :unit => 's'
238
+ Fit::File::Definitions.add_field 34, 1, 'num_sessions', :type => :uint16, :scale => 1
239
+ Fit::File::Definitions.add_field 34, 2, 'type', :type => :activity
240
+ Fit::File::Definitions.add_field 34, 3, 'event', :type => :event
241
+ Fit::File::Definitions.add_field 34, 4, 'event_type', :type => :event_type
242
+ Fit::File::Definitions.add_field 34, 5, 'local_timestamp', :type => :local_date_time
243
+ Fit::File::Definitions.add_field 34, 6, 'event_group', :type => :uint8
244
+
245
+ Fit::File::Definitions.add_name 18, 'session'
246
+ Fit::File::Definitions.add_field 18, 254, 'message_index', :type => :message_index, :scale => 1
247
+ Fit::File::Definitions.add_field 18, 253, 'timestamp', :type => :date_time, :unit => 's'
248
+ Fit::File::Definitions.add_field 18, 0, 'event', :type => :event
249
+ Fit::File::Definitions.add_field 18, 1, 'event_type', :type => :event_type
250
+ Fit::File::Definitions.add_field 18, 2, 'start_time', :type => :date_time, :scale => 1
251
+ Fit::File::Definitions.add_field 18, 3, 'start_position_lat', :type => :sint32, :scale => 1, :unit => 'semicircles'
252
+ Fit::File::Definitions.add_field 18, 4, 'start_position_long', :type => :sint32, :scale => 1, :unit => 'semicircles'
253
+ Fit::File::Definitions.add_field 18, 5, 'sport', :type => :sport, :scale => 1
254
+ Fit::File::Definitions.add_field 18, 6, 'sub_sport', :type => :sub_sport, :scale => 1
255
+ Fit::File::Definitions.add_field 18, 7, 'total_elapsed_time', :type => :uint32, :scale => 1000, :unit => 's'
256
+ Fit::File::Definitions.add_field 18, 8, 'total_timer_time', :type => :uint32, :scale => 1000, :unit => 's'
257
+ Fit::File::Definitions.add_field 18, 9, 'total_distance', :type => :uint32, :scale => 100, :unit => 'm'
258
+ Fit::File::Definitions.add_field 18, 10, 'total_cycles', :type => :uint32, :scale => 1, :unit => 'cycles'
259
+ Fit::File::Definitions.add_field 18, 10, 'total_strides', :type => :uint32, :scale => 1, :unit => 'strides', :ref_field_name => 'sport', :ref_field_values => [:running]
260
+ Fit::File::Definitions.add_field 18, 11, 'total_calories', :type => :uint16, :scale => 1, :unit => 'kcal'
261
+ Fit::File::Definitions.add_field 18, 13, 'total_fat_calories', :type => :uint16, :scale => 1, :unit => 'kcal'
262
+ Fit::File::Definitions.add_field 18, 14, 'avg_speed', :type => :uint16, :scale => 1000, :unit => 'm/s'
263
+ Fit::File::Definitions.add_field 18, 15, 'max_speed', :type => :uint16, :scale => 1000, :unit => 'm/s'
264
+ Fit::File::Definitions.add_field 18, 16, 'avg_heart_rate', :type => :uint8, :scale => 1, :unit => 'bpm'
265
+ Fit::File::Definitions.add_field 18, 17, 'max_heart_rate', :type => :uint8, :scale => 1, :unit => 'bpm'
266
+ Fit::File::Definitions.add_field 18, 18, 'avg_cadence', :type => :uint8, :scale => 1, :unit => 'rpm'
267
+ Fit::File::Definitions.add_field 18, 18, 'avg_running_cadence', :type => :uint8, :scale => 1, :unit => 'strides/min', :ref_field_name => 'sport', :ref_field_values => [:running]
268
+ Fit::File::Definitions.add_field 18, 19, 'max_cadence', :type => :uint8, :scale => 1, :unit => 'rpm'
269
+ Fit::File::Definitions.add_field 18, 18, 'max_running_cadence', :type => :uint8, :scale => 1, :unit => 'strides/min', :ref_field_name => 'sport', :ref_field_values => [:running]
270
+ Fit::File::Definitions.add_field 18, 20, 'avg_power', :type => :uint16, :scale => 1, :unit => 'watts'
271
+ Fit::File::Definitions.add_field 18, 21, 'max_power', :type => :uint16, :scale => 1, :unit => 'watts'
272
+ Fit::File::Definitions.add_field 18, 22, 'total_ascent', :type => :uint16, :scale => 1, :unit => 'm'
273
+ Fit::File::Definitions.add_field 18, 23, 'total_descent', :type => :uint16, :scale => 1, :unit => 'm'
274
+ Fit::File::Definitions.add_field 18, 24, 'total_training_effect', :type => :uint8, :scale => 10
275
+ Fit::File::Definitions.add_field 18, 25, 'first_lap_index', :type => :uint16, :scale => 1
276
+ Fit::File::Definitions.add_field 18, 26, 'num_laps', :type => :uint16, :scale => 1
277
+ Fit::File::Definitions.add_field 18, 27, 'event_group', :type => :uint8
278
+ Fit::File::Definitions.add_field 18, 28, 'trigger', :type => :session_trigger
279
+ Fit::File::Definitions.add_field 18, 29, 'nec_lat', :type => :sint32, :unit => 'semicircles'
280
+ Fit::File::Definitions.add_field 18, 30, 'nec_long', :type => :sint32, :unit => 'semicircles'
281
+ Fit::File::Definitions.add_field 18, 31, 'swc_lat', :type => :sint32, :unit => 'semicircles'
282
+ Fit::File::Definitions.add_field 18, 32, 'swc_long', :type => :sint32, :unit => 'semicircles'
283
+ Fit::File::Definitions.add_field 18, 34, 'normalized_power', :type => :uint16, :unit => 'watts'
284
+ Fit::File::Definitions.add_field 18, 35, 'training_stress_score', :type => :uint16, :scale => 10, :unit => 'tss'
285
+ Fit::File::Definitions.add_field 18, 36, 'intensity_factor', :type => :uint16, :scale => 1000, :unit => 'if'
286
+ Fit::File::Definitions.add_field 18, 37, 'left_right_balance', :type => :left_right_balance_100
287
+ Fit::File::Definitions.add_field 18, 41, 'avg_stroke_count', :type => :uint32, :scale => 10, :unit => 'strokes/lap'
288
+ Fit::File::Definitions.add_field 18, 42, 'avg_stroke_distance', :type => :uint16, :scale => 100, :unit => 'm'
289
+ Fit::File::Definitions.add_field 18, 43, 'swim_stroke', :type => :swim_stroke, :unit => 'swim_stroke', :ref_field_name => 'sport', :ref_field_values => [:swimming]
290
+ Fit::File::Definitions.add_field 18, 44, 'pool_length', :type => :uint16, :scale => 100, :unit => 'm'
291
+ Fit::File::Definitions.add_field 18, 46, 'pool_length_unit', :type => :display_measure, :scale => 1
292
+ Fit::File::Definitions.add_field 18, 47, 'num_active_lengths', :type => :uint16, :unit => 'lengths'
293
+ Fit::File::Definitions.add_field 18, 48, 'total_work', :type => :uint32, :unit => 'J'
294
+ Fit::File::Definitions.add_field 18, 49, 'avg_altitude', :type => :uint16, :scale => 5, :offset => 500, :unit => 'm'
295
+ Fit::File::Definitions.add_field 18, 50, 'max_altitude', :type => :uint16, :scale => 5, :offset => 500, :unit => 'm'
296
+ Fit::File::Definitions.add_field 18, 51, 'gps_accuracy', :type => :uint8, :unit => 'm'
297
+ Fit::File::Definitions.add_field 18, 52, 'avg_grade', :type => :sint16, :scale => 100, :unit => '%'
298
+ Fit::File::Definitions.add_field 18, 53, 'avg_pos_grade', :type => :sint16, :scale => 100, :unit => '%'
299
+ Fit::File::Definitions.add_field 18, 54, 'avg_neg_grade', :type => :sint16, :scale => 100, :unit => '%'
300
+ Fit::File::Definitions.add_field 18, 55, 'max_pos_grade', :type => :sint16, :scale => 100, :unit => '%'
301
+ Fit::File::Definitions.add_field 18, 56, 'max_neg_grade', :type => :sint16, :scale => 100, :unit => '%'
302
+ Fit::File::Definitions.add_field 18, 57, 'avg_temperature', :type => :sint8, :unit => 'C'
303
+ Fit::File::Definitions.add_field 18, 58, 'max_temperature', :type => :sint8, :unit => 'C'
304
+ Fit::File::Definitions.add_field 18, 59, 'total_moving_time', :type => :uint32, :scale => 1000, :unit => 's'
305
+ Fit::File::Definitions.add_field 18, 60, 'avg_pos_vertical_speed', :type => :sint16, :scale => 1000, :unit => 'm/s'
306
+ Fit::File::Definitions.add_field 18, 61, 'avg_neg_vertical_speed', :type => :sint16, :scale => 1000, :unit => 'm/s'
307
+ Fit::File::Definitions.add_field 18, 62, 'max_pos_vertical_speed', :type => :sint16, :scale => 1000, :unit => 'm/s'
308
+ Fit::File::Definitions.add_field 18, 63, 'max_neg_vertical_speed', :type => :sint16, :scale => 1000, :unit => 'm/s'
309
+ Fit::File::Definitions.add_field 18, 64, 'min_heart_rate', :type => :uint8, :scale => 1, :unit => 'bpm'
310
+ Fit::File::Definitions.add_field 18, 65, 'time_in_hr_zone', :type => :uint32, :scale => 1000, :unit => 's'
311
+ Fit::File::Definitions.add_field 18, 66, 'time_in_speed_zone', :type => :uint32, :scale => 1000, :unit => 's'
312
+ Fit::File::Definitions.add_field 18, 67, 'time_in_cadence_zone', :type => :uint32, :scale => 1000, :unit => 's'
313
+ Fit::File::Definitions.add_field 18, 68, 'time_in_power_zone', :type => :uint32, :scale => 1000, :unit => 's'
314
+ Fit::File::Definitions.add_field 18, 69, 'avg_lap_time', :type => :uint32, :scale => 1000, :unit => 's'
315
+ Fit::File::Definitions.add_field 18, 70, 'best_lap_index', :type => :uint16
316
+ Fit::File::Definitions.add_field 18, 71, 'min_altitude', :type => :uint16, :scale => 5, :offset => 500, :unit => 'm'
317
+ Fit::File::Definitions.add_field 18, 82, 'player_score', :type => :uint16
318
+ Fit::File::Definitions.add_field 18, 83, 'opponent_score', :type => :uint16
319
+ Fit::File::Definitions.add_field 18, 84, 'opponent_name', :type => :string
320
+ Fit::File::Definitions.add_field 18, 85, 'stroke_count', :type => :uint16, :unit => 'counts'
321
+ Fit::File::Definitions.add_field 18, 86, 'zone_count', :type => :uint16, :unit => 'counts'
322
+ Fit::File::Definitions.add_field 18, 87, 'max_ball_speed', :type => :uint16, :scale => 100, :unit => 'm/s'
323
+ Fit::File::Definitions.add_field 18, 88, 'avg_ball_speed', :type => :uint16, :scale => 100, :unit => 'm/s'
324
+ Fit::File::Definitions.add_field 18, 89, 'avg_vertical_oscillation', :type => :uint16, :scale => 10, :unit => 'mm'
325
+ Fit::File::Definitions.add_field 18, 90, 'avg_stance_time_percent', :type => :uint16, :scale => 100, :unit => 'percent'
326
+ Fit::File::Definitions.add_field 18, 91, 'avg_stance_time', :type => :uint16, :scale => 10, :unit => 'ms'
327
+ Fit::File::Definitions.add_field 18, 92, 'avg_fractional_cadence', :type => :uint8, :scale => 128, :unit => 'rpm'
328
+ Fit::File::Definitions.add_field 18, 93, 'max_fractional_cadence', :type => :uint8, :scale => 128, :unit => 'rpm'
329
+ Fit::File::Definitions.add_field 18, 94, 'total_fractional_cycles', :type => :uint8, :scale => 128, :unit => 'cycles'
330
+ Fit::File::Definitions.add_field 18, 95, 'avg_total_hemoglobin_conc', :type => :uint16, :scale => 100, :unit => 'g/dL'
331
+ Fit::File::Definitions.add_field 18, 96, 'min_total_hemoglobin_conc', :type => :uint16, :scale => 100, :unit => 'g/dL'
332
+ Fit::File::Definitions.add_field 18, 97, 'max_total_hemoglobin_conc', :type => :uint16, :scale => 100, :unit => 'g/dL'
333
+ Fit::File::Definitions.add_field 18, 98, 'avg_saturated_hemoglobin_percent', :type => :uint16, :scale => 10, :unit => '%'
334
+ Fit::File::Definitions.add_field 18, 99, 'min_saturated_hemoglobin_percent', :type => :uint16, :scale => 10, :unit => '%'
335
+ Fit::File::Definitions.add_field 18, 100, 'max_saturated_hemoglobin_percent', :type => :uint16, :scale => 10, :unit => '%'
336
+ Fit::File::Definitions.add_field 18, 101, 'avg_left_torque_effectiveness', :type => :uint8, :scale => 2, :unit => 'percent'
337
+ Fit::File::Definitions.add_field 18, 102, 'avg_right_torque_effectiveness', :type => :uint8, :scale => 2, :unit => 'percent'
338
+ Fit::File::Definitions.add_field 18, 103, 'avg_left_pedal_smoothness', :type => :uint8, :scale => 2, :unit => 'percent'
339
+ Fit::File::Definitions.add_field 18, 104, 'avg_right_pedal_smoothness', :type => :uint8, :scale => 2, :unit => 'percent'
340
+ Fit::File::Definitions.add_field 18, 105, 'avg_combined_pedal_smoothness', :type => :uint8, :scale => 2, :unit => 'percent'
341
+
342
+ Fit::File::Definitions.add_name 19, 'lap'
343
+ Fit::File::Definitions.add_field 19, 254, 'message_index', :type => :message_index, :scale => 1
344
+ Fit::File::Definitions.add_field 19, 253, 'timestamp', :type => :date_time, :unit => 's'
345
+ Fit::File::Definitions.add_field 19, 0, 'event', :type => :event
346
+ Fit::File::Definitions.add_field 19, 1, 'event_type', :type => :event_type
347
+ Fit::File::Definitions.add_field 19, 2, 'start_time', :type => :date_time, :scale => 1
348
+ Fit::File::Definitions.add_field 19, 3, 'start_position_lat', :type => :sint32, :scale => 1, :unit => 'semicircles'
349
+ Fit::File::Definitions.add_field 19, 4, 'start_position_long', :type => :sint32, :scale => 1, :unit => 'semicircles'
350
+ Fit::File::Definitions.add_field 19, 5, 'end_position_lat', :type => :sint32, :scale => 1, :unit => 'semicircles'
351
+ Fit::File::Definitions.add_field 19, 6, 'end_position_long', :type => :sint32, :scale => 1, :unit => 'semicircles'
352
+ Fit::File::Definitions.add_field 19, 7, 'total_elapsed_time', :type => :uint32, :scale => 1000, :unit => 's'
353
+ Fit::File::Definitions.add_field 19, 8, 'total_timer_time', :type => :uint32, :scale => 1000, :unit => 's'
354
+ Fit::File::Definitions.add_field 19, 9, 'total_distance', :type => :uint32, :scale => 100, :unit => 'm'
355
+ Fit::File::Definitions.add_field 19, 10, 'total_cycles', :type => :uint32, :unit => 'cycles'
356
+ Fit::File::Definitions.add_field 19, 10, 'total_strides', :type => :uint32, :unit => 'strides', :ref_field_name => 'sport', :ref_field_values => [:running]
357
+ Fit::File::Definitions.add_field 19, 11, 'total_calories', :type => :uint16, :unit => 'kcal'
358
+ Fit::File::Definitions.add_field 19, 12, 'total_fat_calories', :type => :uint16, :unit => 'kcal'
359
+ Fit::File::Definitions.add_field 19, 13, 'avg_speed', :type => :uint16, :scale => 1000, :unit => 'm/s'
360
+ Fit::File::Definitions.add_field 19, 14, 'max_speed', :type => :uint16, :scale => 1000, :unit => 'm/s'
361
+ Fit::File::Definitions.add_field 19, 15, 'avg_heart_rate', :type => :uint8, :unit => 'bpm'
362
+ Fit::File::Definitions.add_field 19, 16, 'max_heart_rate', :type => :uint8, :unit => 'bpm'
363
+ Fit::File::Definitions.add_field 19, 17, 'avg_cadence', :type => :uint8, :unit => 'rpm'
364
+ Fit::File::Definitions.add_field 19, 17, 'avg_running_cadence', :type => :uint8, :unit => 'strides/min', :ref_field_name => 'sport', :ref_field_values => [:running]
365
+ Fit::File::Definitions.add_field 19, 18, 'max_cadence', :type => :uint8, :unit => 'rpm'
366
+ Fit::File::Definitions.add_field 19, 18, 'max_running_cadence', :type => :uint8, :unit => 'strides/min', :ref_field_name => 'sport', :ref_field_values => [:running]
367
+ Fit::File::Definitions.add_field 19, 19, 'avg_power', :type => :uint16, :unit => 'watts'
368
+ Fit::File::Definitions.add_field 19, 20, 'max_power', :type => :uint16, :unit => 'watts'
369
+ Fit::File::Definitions.add_field 19, 21, 'total_ascent', :type => :uint16, :unit => 'm'
370
+ Fit::File::Definitions.add_field 19, 22, 'total_descent', :type => :uint16, :unit => 'm'
371
+ Fit::File::Definitions.add_field 19, 23, 'intensity', :type => :intensity
372
+ Fit::File::Definitions.add_field 19, 24, 'lap_trigger', :type => :lap_trigger
373
+ Fit::File::Definitions.add_field 19, 25, 'sport', :type => :sport
374
+ Fit::File::Definitions.add_field 19, 26, 'event_group', :type => :uint8
375
+ Fit::File::Definitions.add_field 19, 32, 'num_lengths', :type => :uint16, :unit => 'lengths'
376
+ Fit::File::Definitions.add_field 19, 33, 'normalized_power', :type => :uint16, :unit => 'watts'
377
+ Fit::File::Definitions.add_field 19, 34, 'left_right_balance', :type => :left_right_balance_100
378
+ Fit::File::Definitions.add_field 19, 35, 'first_length_index', :type => :uint16, :scale => 1
379
+ Fit::File::Definitions.add_field 19, 37, 'avg_stroke_distance', :type => :uint16, :scale => 100, :unit => 'm'
380
+ Fit::File::Definitions.add_field 19, 38, 'swim_stroke', :type => :swim_stroke
381
+ Fit::File::Definitions.add_field 19, 39, 'sub_sport', :type => :sub_sport, :scale => 1
382
+ Fit::File::Definitions.add_field 19, 40, 'num_active_lengths', :type => :uint16, :unit => 'lengths'
383
+ Fit::File::Definitions.add_field 19, 41, 'total_work', :type => :uint32, :unit => 'J'
384
+ Fit::File::Definitions.add_field 19, 42, 'avg_altitude', :type => :uint16, :scale => 5, :offset => 500, :unit => 'm'
385
+ Fit::File::Definitions.add_field 19, 43, 'max_altitude', :type => :uint16, :scale => 5, :offset => 500, :unit => 'm'
386
+ Fit::File::Definitions.add_field 19, 44, 'gps_accuracy', :type => :uint8, :unit => 'm'
387
+ Fit::File::Definitions.add_field 19, 45, 'avg_grade', :type => :sint16, :scale => 100, :unit => '%'
388
+ Fit::File::Definitions.add_field 19, 46, 'avg_pos_grade', :type => :sint16, :scale => 100, :unit => '%'
389
+ Fit::File::Definitions.add_field 19, 47, 'avg_neg_grade', :type => :sint16, :scale => 100, :unit => '%'
390
+ Fit::File::Definitions.add_field 19, 48, 'max_pos_grade', :type => :sint16, :scale => 100, :unit => '%'
391
+ Fit::File::Definitions.add_field 19, 49, 'max_neg_grade', :type => :sint16, :scale => 100, :unit => '%'
392
+ Fit::File::Definitions.add_field 19, 50, 'avg_temperature', :type => :sint8, :unit => 'C'
393
+ Fit::File::Definitions.add_field 19, 51, 'max_temperature', :type => :sint8, :unit => 'C'
394
+ Fit::File::Definitions.add_field 19, 52, 'total_moving_time', :type => :uint32, :scale => 1000, :unit => 's'
395
+ Fit::File::Definitions.add_field 19, 53, 'avg_pos_vertical_speed', :type => :sint16, :scale => 1000, :unit => 'm/s'
396
+ Fit::File::Definitions.add_field 19, 54, 'avg_neg_vertical_speed', :type => :sint16, :scale => 1000, :unit => 'm/s'
397
+ Fit::File::Definitions.add_field 19, 55, 'max_pos_vertical_speed', :type => :sint16, :scale => 1000, :unit => 'm/s'
398
+ Fit::File::Definitions.add_field 19, 56, 'max_neg_vertical_speed', :type => :sint16, :scale => 1000, :unit => 'm/s'
399
+ Fit::File::Definitions.add_field 19, 57, 'time_in_hr_zone', :type => :uint32, :scale => 1000, :unit => 's'
400
+ Fit::File::Definitions.add_field 19, 58, 'time_in_speed_zone', :type => :uint32, :scale => 1000, :unit => 's'
401
+ Fit::File::Definitions.add_field 19, 59, 'time_in_cadence_zone', :type => :uint32, :scale => 1000, :unit => 's'
402
+ Fit::File::Definitions.add_field 19, 60, 'time_in_power_zone', :type => :uint32, :scale => 1000, :unit => 's'
403
+ Fit::File::Definitions.add_field 19, 61, 'repetition_num', :type => :uint16
404
+ Fit::File::Definitions.add_field 19, 62, 'min_altitude', :type => :uint16, :scale => 5, :offset => 500, :unit => 'm'
405
+ Fit::File::Definitions.add_field 19, 63, 'min_heart_rate', :type => :uint8, :scale => 1, :unit => 'bpm'
406
+ Fit::File::Definitions.add_field 19, 71, 'wkt_step_index', :type => :message_index
407
+ Fit::File::Definitions.add_field 19, 74, 'opponent_score', :type => :uint16
408
+ Fit::File::Definitions.add_field 19, 75, 'stroke_count', :type => :uint16, :unit => 'counts'
409
+ Fit::File::Definitions.add_field 19, 76, 'zone_count', :type => :uint16, :unit => 'counts'
410
+ Fit::File::Definitions.add_field 19, 77, 'avg_vertical_oscillation', :type => :uint16, :scale => 10, :unit => 'mm'
411
+ Fit::File::Definitions.add_field 19, 78, 'avg_stance_time_percent', :type => :uint16, :scale => 100, :unit => 'percent'
412
+ Fit::File::Definitions.add_field 19, 79, 'avg_stance_time', :type => :uint16, :scale => 10, :unit => 'ms'
413
+ Fit::File::Definitions.add_field 19, 80, 'avg_fractional_cadence', :type => :uint8, :scale => 128, :unit => 'rpm'
414
+ Fit::File::Definitions.add_field 19, 81, 'max_fractional_cadence', :type => :uint8, :scale => 128, :unit => 'rpm'
415
+ Fit::File::Definitions.add_field 19, 82, 'total_fractional_cycles', :type => :uint8, :scale => 128, :unit => 'cycles'
416
+ Fit::File::Definitions.add_field 19, 83, 'player_score', :type => :uint16
417
+ Fit::File::Definitions.add_field 19, 84, 'avg_total_hemoglobin_conc', :type => :uint16, :scale => 100, :unit => 'g/dL'
418
+ Fit::File::Definitions.add_field 19, 85, 'min_total_hemoglobin_conc', :type => :uint16, :scale => 100, :unit => 'g/dL'
419
+ Fit::File::Definitions.add_field 19, 86, 'max_total_hemoglobin_conc', :type => :uint16, :scale => 100, :unit => 'g/dL'
420
+ Fit::File::Definitions.add_field 19, 87, 'avg_saturated_hemoglobin_percent', :type => :uint16, :scale => 10, :unit => '%'
421
+ Fit::File::Definitions.add_field 19, 88, 'min_saturated_hemoglobin_percent', :type => :uint16, :scale => 10, :unit => '%'
422
+ Fit::File::Definitions.add_field 19, 89, 'max_saturated_hemoglobin_percent', :type => :uint16, :scale => 10, :unit => '%'
423
+ Fit::File::Definitions.add_field 19, 91, 'avg_left_torque_effectiveness', :type => :uint8, :scale => 2, :unit => 'percent'
424
+ Fit::File::Definitions.add_field 19, 92, 'avg_right_torque_effectiveness', :type => :uint8, :scale => 2, :unit => 'percent'
425
+ Fit::File::Definitions.add_field 19, 93, 'avg_left_pedal_smoothness', :type => :uint8, :scale => 2, :unit => 'percent'
426
+ Fit::File::Definitions.add_field 19, 94, 'avg_right_pedal_smoothness', :type => :uint8, :scale => 2, :unit => 'percent'
427
+ Fit::File::Definitions.add_field 19, 95, 'avg_combined_pedal_smoothness', :type => :uint8, :scale => 2, :unit => 'percent'
428
+
429
+ Fit::File::Definitions.add_name 101, 'length'
430
+ Fit::File::Definitions.add_field 101, 254, 'message_index', :type => :message_index, :scale => 1
431
+ Fit::File::Definitions.add_field 101, 253, 'timestamp', :type => :date_time, :scale => 1
432
+ Fit::File::Definitions.add_field 101, 0, 'event', :type => :event
433
+ Fit::File::Definitions.add_field 101, 1, 'event_type', :type => :event_type
434
+ Fit::File::Definitions.add_field 101, 2, 'start_time', :type => :date_time, :scale => 1
435
+ Fit::File::Definitions.add_field 101, 3, 'total_elapsed_time', :type => :uint32, :scale => 1000, :unit => 's'
436
+ Fit::File::Definitions.add_field 101, 4, 'total_timer_time', :type => :uint32, :scale => 1000, :unit => 's'
437
+ Fit::File::Definitions.add_field 101, 5, 'total_strokes', :type => :uint16, :scale => 1, :unit => 'strokes'
438
+ Fit::File::Definitions.add_field 101, 6, 'avg_speed', :type => :uint16, :scale => 1000, :unit => 'm/s'
439
+ Fit::File::Definitions.add_field 101, 7, 'swim_stroke', :type => :swim_stroke, :unit => 'swim_stroke'
440
+ Fit::File::Definitions.add_field 101, 9, 'avg_swimming_cadence', :type => :uint8, :unit => 'strokes/min'
441
+ Fit::File::Definitions.add_field 101, 10, 'event_group', :type => :uint8
442
+ Fit::File::Definitions.add_field 101, 11, 'total_calories', :type => :uint16, :unit => 'kcal'
443
+ Fit::File::Definitions.add_field 101, 12, 'length_type', :type => :length_type
444
+ Fit::File::Definitions.add_field 101, 18, 'player_score', :type => :uint16
445
+ Fit::File::Definitions.add_field 101, 19, 'opponent_score', :type => :uint16
446
+ Fit::File::Definitions.add_field 101, 20, 'stroke_count', :type => :uint16, :unit => 'counts'
447
+ Fit::File::Definitions.add_field 101, 21, 'zone_count', :type => :uint16, :unit => 'counts'
448
+
449
+ Fit::File::Definitions.add_name 20, 'record'
450
+ Fit::File::Definitions.add_field 20, 253, 'timestamp', :type => :date_time, :scale => 1, :unit => 's'
451
+ Fit::File::Definitions.add_field 20, 0, 'position_lat', :type => :sint32, :scale => 1, :unit => 'semicircles'
452
+ Fit::File::Definitions.add_field 20, 1, 'position_long', :type => :sint32, :scale => 1, :unit => 'semicircles'
453
+ Fit::File::Definitions.add_field 20, 2, 'altitude', :type => :uint16, :scale => 5, :offset => 500, :unit => 'm'
454
+ Fit::File::Definitions.add_field 20, 3, 'heart_rate', :type => :uint8, :scale => 1, :unit => 'bpm'
455
+ Fit::File::Definitions.add_field 20, 4, 'cadence', :type => :uint8, :scale => 1, :unit => 'rpm'
456
+ Fit::File::Definitions.add_field 20, 5, 'distance', :type => :uint32, :scale => 100, :unit => 'm'
457
+ Fit::File::Definitions.add_field 20, 6, 'speed', :type => :uint16, :scale => 1000, :unit => 'm/s'
458
+ Fit::File::Definitions.add_field 20, 7, 'power', :type => :uint16, :unit => 'watts'
459
+ Fit::File::Definitions.add_field 20, 8, 'compressed_speed_distance', :type => :byte, :unit => 'm/s,m'
460
+ Fit::File::Definitions.add_field 20, 9, 'grade', :type => :sint16, :scale => 100, :unit => '%'
461
+ Fit::File::Definitions.add_field 20, 10, 'resistance', :type => :uint8, :scale => 1
462
+ Fit::File::Definitions.add_field 20, 11, 'time_from_course', :type => :sint32, :scale => 1000, :unit => 's'
463
+ Fit::File::Definitions.add_field 20, 12, 'cycle_length', :type => :uint8, :scale => 100, :unit => 'm'
464
+ Fit::File::Definitions.add_field 20, 13, 'temperature', :type => :sint8, :unit => 'C'
465
+ Fit::File::Definitions.add_field 20, 17, 'speed_1s', :type => :uint8, :scale => 16, :unit => 'm/s'
466
+ Fit::File::Definitions.add_field 20, 18, 'cycles', :type => :uint8, :unit => 'cycles'
467
+ Fit::File::Definitions.add_field 20, 19, 'total_cycles', :type => :uint32, :unit => 'cycles'
468
+ Fit::File::Definitions.add_field 20, 28, 'compressed_accumulated_power', :type => :uint16, :unit => 'watts'
469
+ Fit::File::Definitions.add_field 20, 29, 'accumulated_power', :type => :uint32, :unit => 'watts'
470
+ Fit::File::Definitions.add_field 20, 30, 'left_right_balance', :type => :left_right_balance
471
+ Fit::File::Definitions.add_field 20, 31, 'gps_accuracy', :type => :uint8, :unit => 'm'
472
+ Fit::File::Definitions.add_field 20, 32, 'vertical_speed', :type => :sint16, :scale => 1000, :unit => 'm/s'
473
+ Fit::File::Definitions.add_field 20, 33, 'calories', :type => :uint16, :scale => 1, :unit => 'kcal'
474
+ Fit::File::Definitions.add_field 20, 39, 'vertical_oscillation', :type => :uint16, :scale => 10, :unit => 'mm'
475
+ Fit::File::Definitions.add_field 20, 40, 'stance_time_percent', :type => :uint16, :scale => 100, :unit => 'percent'
476
+ Fit::File::Definitions.add_field 20, 41, 'stance_time', :type => :uint16, :scale => 10, :unit => 'ms'
477
+ Fit::File::Definitions.add_field 20, 42, 'activity_type', :type => :activity_type
478
+ Fit::File::Definitions.add_field 20, 43, 'left_torque_effectiveness', :type => :uint8, :scale => 2, :unit => 'percent'
479
+ Fit::File::Definitions.add_field 20, 44, 'right_torque_effectiveness', :type => :uint8, :scale => 2, :unit => 'percent'
480
+ Fit::File::Definitions.add_field 20, 45, 'left_pedal_smoothness', :type => :uint8, :scale => 2, :unit => 'percent'
481
+ Fit::File::Definitions.add_field 20, 46, 'right_pedal_smoothness', :type => :uint8, :scale => 2, :unit => 'percent'
482
+ Fit::File::Definitions.add_field 20, 47, 'combined_pedal_smoothness', :type => :uint8, :scale => 2, :unit => 'percent'
483
+ Fit::File::Definitions.add_field 20, 48, 'time128', :type => :uint8, :scale => 128, :unit => 's'
484
+ Fit::File::Definitions.add_field 20, 49, 'stroke_type', :type => :stroke_type
485
+ Fit::File::Definitions.add_field 20, 50, 'zone', :type => :uint8
486
+ Fit::File::Definitions.add_field 20, 51, 'ball_speed', :type => :uint16, :scale => 100, :unit => 'm/s'
487
+ Fit::File::Definitions.add_field 20, 52, 'cadence256', :type => :uint16, :scale => 256, :unit => 'rpm'
488
+ Fit::File::Definitions.add_field 20, 53, 'fractional_cadence', :type => :uint8, :scale => 128, :unit => 'rpm'
489
+ Fit::File::Definitions.add_field 20, 54, 'total_hemoglobin_conc', :type => :uint16, :scale => 100, :unit => 'g/dL'
490
+ Fit::File::Definitions.add_field 20, 55, 'total_hemoglobin_conc_min', :type => :uint16, :scale => 100, :unit => 'g/dL'
491
+ Fit::File::Definitions.add_field 20, 56, 'total_hemoglobin_conc_max', :type => :uint16, :scale => 100, :unit => 'g/dL'
492
+ Fit::File::Definitions.add_field 20, 57, 'saturated_hemoglobin_percent', :type => :uint16, :scale => 10, :unit => '%'
493
+ Fit::File::Definitions.add_field 20, 58, 'saturated_hemoglobin_percent_min', :type => :uint16, :scale => 10, :unit => '%'
494
+ Fit::File::Definitions.add_field 20, 59, 'saturated_hemoglobin_percent_max', :type => :uint16, :scale => 10, :unit => '%'
495
+ Fit::File::Definitions.add_field 20, 62, 'device_index', :type => :device_index
496
+
497
+ Fit::File::Definitions.add_name 21, 'event'
498
+ Fit::File::Definitions.add_field 21, 253, 'timestamp', :type => :date_time, :unit => 's'
499
+ Fit::File::Definitions.add_field 21, 0, 'event', :type => :event
500
+ Fit::File::Definitions.add_field 21, 1, 'event_type', :type => :event_type
501
+ Fit::File::Definitions.add_field 21, 2, 'data16', :type => :uint16, :scale => 1
502
+ Fit::File::Definitions.add_field 21, 3, 'data', :type => :uint32, :scale => 1
503
+ Fit::File::Definitions.add_field 21, 3, 'timer_trigger', :type => :timer_trigger, :scale => 1, :ref_field_name => 'event', :ref_field_values => [:timer]
504
+ Fit::File::Definitions.add_field 21, 3, 'course_point_index', :type => :message_index, :scale => 1, :ref_field_name => 'event', :ref_field_values => [:course_point]
505
+ Fit::File::Definitions.add_field 21, 3, 'battery_level', :type => :uint16, :scale => 1000, :unit => 'V', :ref_field_name => 'event', :ref_field_values => [:battery]
506
+ Fit::File::Definitions.add_field 21, 3, 'virtual_partner_speed', :type => :uint16, :scale => 1000, :unit => 'm/s', :ref_field_name => 'event', :ref_field_values => [:virtual_partner_pace]
507
+ Fit::File::Definitions.add_field 21, 3, 'hr_high_alert', :type => :uint8, :scale => 1, :unit => 'bpm', :ref_field_name => 'event', :ref_field_values => [:hr_high_alert]
508
+ Fit::File::Definitions.add_field 21, 3, 'hr_low_alert', :type => :uint8, :scale => 1, :unit => 'bpm', :ref_field_name => 'event', :ref_field_values => [:hr_low_alert]
509
+ Fit::File::Definitions.add_field 21, 3, 'speed_high_alert', :type => :uint16, :scale => 1000, :unit => 'm/s', :ref_field_name => 'event', :ref_field_values => [:speed_high_alert]
510
+ Fit::File::Definitions.add_field 21, 3, 'speed_low_alert', :type => :uint16, :scale => 1000, :unit => 'm/s', :ref_field_name => 'event', :ref_field_values => [:speed_low_alert]
511
+ Fit::File::Definitions.add_field 21, 3, 'cad_high_alert', :type => :uint16, :scale => 1, :unit => 'rpm', :ref_field_name => 'event', :ref_field_values => [:cad_high_alert]
512
+ Fit::File::Definitions.add_field 21, 3, 'cad_low_alert', :type => :uint16, :scale => 1, :unit => 'rpm', :ref_field_name => 'event', :ref_field_values => [:cad_low_alert]
513
+ Fit::File::Definitions.add_field 21, 3, 'power_high_alert', :type => :uint16, :scale => 1, :unit => 'watts', :ref_field_name => 'event', :ref_field_values => [:power_high_alert]
514
+ Fit::File::Definitions.add_field 21, 3, 'power_low_alert', :type => :uint16, :scale => 1, :unit => 'watts', :ref_field_name => 'event', :ref_field_values => [:power_low_alert]
515
+ Fit::File::Definitions.add_field 21, 3, 'time_duration_alert', :type => :uint32, :scale => 1000, :unit => 's', :ref_field_name => 'event', :ref_field_values => [:time_duration_alert]
516
+ Fit::File::Definitions.add_field 21, 3, 'distance_duration_alert', :type => :uint32, :scale => 100, :unit => 'm', :ref_field_name => 'event', :ref_field_values => [:distance_duration_alert]
517
+ Fit::File::Definitions.add_field 21, 3, 'calorie_duration_alert', :type => :uint32, :scale => 1, :unit => 'calories', :ref_field_name => 'event', :ref_field_values => [:calorie_duration_alert]
518
+ Fit::File::Definitions.add_field 21, 3, 'fitness_equipment_state', :type => :fitness_equipment_state, :scale => 1, :ref_field_name => 'event', :ref_field_values => [:fitness_equipment]
519
+ Fit::File::Definitions.add_field 21, 3, 'sport_point', :type => :uint32, :scale => 1, :ref_field_name => 'event', :ref_field_values => [:sport_point]
520
+ Fit::File::Definitions.add_field 21, 3, 'gear_change_data', :type => :uint32, :scale => 1, :ref_field_name => 'event', :ref_field_values => [:front_gear_change, :rear_gear_change]
521
+ Fit::File::Definitions.add_field 21, 4, 'event_group', :type => :uint8
522
+ Fit::File::Definitions.add_field 21, 7, 'score', :type => :uint16
523
+ Fit::File::Definitions.add_field 21, 8, 'opponent_score', :type => :uint16
524
+ Fit::File::Definitions.add_field 21, 9, 'front_gear_num', :type => :uint8z
525
+ Fit::File::Definitions.add_field 21, 10, 'front_gear', :type => :uint8z
526
+ Fit::File::Definitions.add_field 21, 11, 'rear_gear_num', :type => :uint8z
527
+ Fit::File::Definitions.add_field 21, 12, 'rear_gear', :type => :uint8z
528
+
529
+ Fit::File::Definitions.add_name 23, 'device_info'
530
+ Fit::File::Definitions.add_field 23, 253, 'timestamp', :type => :date_time, :scale => 1, :unit => 's'
531
+ Fit::File::Definitions.add_field 23, 0, 'device_index', :type => :device_index, :scale => 1
532
+ Fit::File::Definitions.add_field 23, 1, 'device_type', :type => :uint8, :scale => 1
533
+ Fit::File::Definitions.add_field 23, 1, 'antplus_device_type', :type => :antplus_device_type, :ref_field_name => 'source_type', :ref_field_values => [:antplus]
534
+ Fit::File::Definitions.add_field 23, 1, 'ant_device_type', :type => :uint8, :ref_field_name => 'source_type', :ref_field_values => [:ant]
535
+ Fit::File::Definitions.add_field 23, 2, 'manufacturer', :type => :manufacturer, :scale => 1
536
+ Fit::File::Definitions.add_field 23, 3, 'serial_number', :type => :uint32z, :scale => 1
537
+ Fit::File::Definitions.add_field 23, 4, 'product', :type => :uint16, :scale => 1
538
+ Fit::File::Definitions.add_field 23, 5, 'software_version', :type => :uint16, :scale => 100
539
+ Fit::File::Definitions.add_field 23, 6, 'hardware_version', :type => :uint8, :scale => 1
540
+ Fit::File::Definitions.add_field 23, 7, 'cum_operating_time', :type => :uint32, :scale => 1, :unit => 's'
541
+ Fit::File::Definitions.add_field 23, 10, 'battery_voltage', :type => :uint16, :scale => 256, :unit => 'V'
542
+ Fit::File::Definitions.add_field 23, 11, 'battery_status', :type => :battery_status
543
+ Fit::File::Definitions.add_field 23, 18, 'sensor_position', :type => :body_location
544
+ Fit::File::Definitions.add_field 23, 19, 'descriptor', :type => :string
545
+ Fit::File::Definitions.add_field 23, 20, 'ant_transmission_type', :type => :uint8z
546
+ Fit::File::Definitions.add_field 23, 21, 'ant_device_number', :type => :uint16z
547
+ Fit::File::Definitions.add_field 23, 22, 'ant_network', :type => :ant_network
548
+ Fit::File::Definitions.add_field 23, 25, 'source_type', :type => :source_type
549
+
550
+ Fit::File::Definitions.add_name 72, 'training_file'
551
+ Fit::File::Definitions.add_field 72, 253, 'timestamp', :type => :date_time
552
+ Fit::File::Definitions.add_field 72, 0, 'type', :type => :file
553
+ Fit::File::Definitions.add_field 72, 1, 'manufacturer', :type => :manufacturer
554
+ Fit::File::Definitions.add_field 72, 2, 'product', :type => :uint16
555
+ Fit::File::Definitions.add_field 72, 2, 'garmin_product', :type => :garmin_product, :ref_field_name => 'manufacturer', :ref_field_values => [:garmin, :dynastream, :dynastream_oem]
556
+ Fit::File::Definitions.add_field 72, 3, 'serial_number', :type => :uint32z
557
+ Fit::File::Definitions.add_field 72, 4, 'time_created', :type => :date_time
558
+
559
+ Fit::File::Definitions.add_name 78, 'hrv'
560
+ Fit::File::Definitions.add_field 78, 0, 'time', :type => :uint16, :scale => 1000, :unit => 's'
561
+
562
+ Fit::File::Definitions.add_name 31, 'course'
563
+ Fit::File::Definitions.add_field 31, 4, 'sport', :type => :sport
564
+ Fit::File::Definitions.add_field 31, 5, 'name', :type => :string
565
+ Fit::File::Definitions.add_field 31, 6, 'capabilities', :type => :course_capabilities
566
+
567
+ Fit::File::Definitions.add_name 32, 'course_point'
568
+ Fit::File::Definitions.add_field 32, 254, 'message_index', :type => :message_index
569
+ Fit::File::Definitions.add_field 32, 1, 'timestamp', :type => :date_time, :scale => 1
570
+ Fit::File::Definitions.add_field 32, 2, 'position_lat', :type => :sint32, :scale => 1, :unit => 'semicircles'
571
+ Fit::File::Definitions.add_field 32, 3, 'position_long', :type => :sint32, :scale => 1, :unit => 'semicircles'
572
+ Fit::File::Definitions.add_field 32, 4, 'distance', :type => :uint32, :scale => 100, :unit => 'm'
573
+ Fit::File::Definitions.add_field 32, 5, 'type', :type => :course_point, :scale => 1
574
+ Fit::File::Definitions.add_field 32, 6, 'name', :type => :string
575
+
576
+ Fit::File::Definitions.add_name 26, 'workout'
577
+ Fit::File::Definitions.add_field 26, 4, 'sport', :type => :sport, :scale => 1
578
+ Fit::File::Definitions.add_field 26, 5, 'capabilities', :type => :workout_capabilities
579
+ Fit::File::Definitions.add_field 26, 6, 'num_valid_steps', :type => :uint16, :scale => 1
580
+ Fit::File::Definitions.add_field 26, 8, 'wkt_name', :type => :string, :scale => 1
581
+
582
+ Fit::File::Definitions.add_name 27, 'workout_step'
583
+ Fit::File::Definitions.add_field 27, 254, 'message_index', :type => :message_index
584
+ Fit::File::Definitions.add_field 27, 0, 'wkt_step_name', :type => :string, :scale => 1
585
+ Fit::File::Definitions.add_field 27, 1, 'duration_type', :type => :wkt_step_duration, :scale => 1
586
+ Fit::File::Definitions.add_field 27, 2, 'duration_value', :type => :uint32, :scale => 1
587
+ Fit::File::Definitions.add_field 27, 2, 'duration_time', :type => :uint32, :scale => 1000, :unit => 's', :ref_field_name => 'duration_type', :ref_field_values => [:time, :repetition_time]
588
+ Fit::File::Definitions.add_field 27, 2, 'duration_distance', :type => :uint32, :scale => 100, :unit => 'm', :ref_field_name => 'duration_type', :ref_field_values => [:distance]
589
+ Fit::File::Definitions.add_field 27, 2, 'duration_hr', :type => :workout_hr, :scale => 1, :unit => '% or bpm', :ref_field_name => 'duration_type', :ref_field_values => [:hr_less_than, :hr_greater_than]
590
+ Fit::File::Definitions.add_field 27, 2, 'duration_calories', :type => :uint32, :scale => 1, :unit => 'calories', :ref_field_name => 'duration_type', :ref_field_values => [:calories]
591
+ Fit::File::Definitions.add_field 27, 2, 'duration_step', :type => :uint32, :ref_field_name => 'duration_type', :ref_field_values => [:repeat_until_steps_cmplt, :repeat_until_time, :repeat_until_distance, :repeat_until_calories, :repeat_until_hr_less_than, :repeat_until_hr_greater_than, :repeat_until_power_less_than,:repeat_until_power_greater_than]
592
+ Fit::File::Definitions.add_field 27, 2, 'duration_power', :type => :workout_power, :scale => 1, :unit => '% or watts', :ref_field_name => 'duration_type', :ref_field_values => [:power_less_than, :power_greater_than]
593
+ Fit::File::Definitions.add_field 27, 3, 'target_type', :type => :wkt_step_target, :scale => 1
594
+ Fit::File::Definitions.add_field 27, 4, 'target_value', :type => :uint32, :scale => 1
595
+ Fit::File::Definitions.add_field 27, 4, 'target_hr_zone', :type => :uint32, :ref_field_name => 'target_type', :ref_field_values => [:heart_rate]
596
+ Fit::File::Definitions.add_field 27, 4, 'target_power_zone', :type => :uint32, :ref_field_name => 'target_type', :ref_field_values => [:power]
597
+ Fit::File::Definitions.add_field 27, 4, 'repeat_steps', :type => :uint32, :ref_field_name => 'duration_type', :ref_field_values => [:repeat_until_steps_cmplt]
598
+ Fit::File::Definitions.add_field 27, 4, 'repeat_time', :type => :uint32, :scale => 1000, :unit => 's', :ref_field_name => 'duration_type', :ref_field_values => [:repeat_until_time]
599
+ Fit::File::Definitions.add_field 27, 4, 'repeat_distance', :type => :uint32, :scale => 100, :unit => 'm', :ref_field_name => 'duration_type', :ref_field_values => [:repeat_until_distance]
600
+ Fit::File::Definitions.add_field 27, 4, 'repeat_calories', :type => :uint32, :scale => 1, :unit => 'calories', :ref_field_name => 'duration_type', :ref_field_values => [:repeat_until_calories]
601
+ Fit::File::Definitions.add_field 27, 4, 'repeat_hr', :type => :workout_hr, :scale => 1, :unit => '% or bpm', :ref_field_name => 'duration_type', :ref_field_values => [:repeat_until_hr_less_than, :repeat_until_hr_greater_than]
602
+ Fit::File::Definitions.add_field 27, 4, 'repeat_power', :type => :workout_power, :scale => 1, :unit => '% or watts', :ref_field_name => 'duration_type', :ref_field_values => [:repeat_until_power_less_than, :repeat_until_power_greater_than]
603
+ Fit::File::Definitions.add_field 27, 5, 'custom_target_value_low', :type => :uint32, :scale => 1
604
+ Fit::File::Definitions.add_field 27, 5, 'custom_target_speed_low', :type => :uint32, :scale => 1000, :unit => 'm/s', :ref_field_name => 'target_type', :ref_field_values => [:speed]
605
+ Fit::File::Definitions.add_field 27, 5, 'custom_target_heart_rate_low', :type => :workout_hr, :scale => 1, :unit => '% or bpm', :ref_field_name => 'target_type', :ref_field_values => [:heart_rate]
606
+ Fit::File::Definitions.add_field 27, 5, 'custom_target_cadence_low', :type => :uint32, :scale => 1, :unit => 'rpm', :ref_field_name => 'target_type', :ref_field_values => [:cadence]
607
+ Fit::File::Definitions.add_field 27, 5, 'custom_target_power_low', :type => :workout_power, :scale => 1, :unit => '% or watts', :ref_field_name => 'target_type', :ref_field_values => [:power]
608
+ Fit::File::Definitions.add_field 27, 6, 'custom_target_value_high', :type => :uint32, :scale => 1
609
+ Fit::File::Definitions.add_field 27, 6, 'custom_target_speed_high', :type => :uint32, :scale => 1000, :unit => 'm/s', :ref_field_name => 'target_type', :ref_field_values => [:speed]
610
+ Fit::File::Definitions.add_field 27, 6, 'custom_target_heart_rate_high', :type => :workout_hr, :scale => 1, :unit => '% or bpm', :ref_field_name => 'target_type', :ref_field_values => [:heart_rate]
611
+ Fit::File::Definitions.add_field 27, 6, 'custom_target_cadence_high', :type => :uint32, :scale => 1, :unit => 'rpm', :ref_field_name => 'target_type', :ref_field_values => [:cadence]
612
+ Fit::File::Definitions.add_field 27, 6, 'custom_target_power_high', :type => :workout_power, :scale => 1, :unit => '% or watts', :ref_field_name => 'target_type', :ref_field_values => [:power]
613
+ Fit::File::Definitions.add_field 27, 7, 'intensity', :type => :intensity, :scale => 1
614
+
615
+ Fit::File::Definitions.add_name 28, 'schedule'
616
+ Fit::File::Definitions.add_field 28, 0, 'manufacturer', :type => :manufacturer
617
+ Fit::File::Definitions.add_field 28, 1, 'product', :type => :uint16
618
+ Fit::File::Definitions.add_field 28, 1, 'garmin_product', :type => :garmin_product, :ref_field_name => 'manufacturer', :ref_field_values => [:garmin, :dynastream, :dynastream_oem]
619
+ Fit::File::Definitions.add_field 28, 2, 'serial_number', :type => :uint32z
620
+ Fit::File::Definitions.add_field 28, 3, 'time_created', :type => :date_time
621
+ Fit::File::Definitions.add_field 28, 4, 'completed', :type => :bool, :scale => 1
622
+ Fit::File::Definitions.add_field 28, 5, 'type', :type => :schedule, :scale => 1
623
+ Fit::File::Definitions.add_field 28, 6, 'scheduled_time', :type => :local_date_time
624
+
625
+ Fit::File::Definitions.add_name 33, 'totals'
626
+ Fit::File::Definitions.add_field 33, 254, 'message_index', :type => :message_index
627
+ Fit::File::Definitions.add_field 33, 253, 'timestamp', :type => :date_time, :unit => 's'
628
+ Fit::File::Definitions.add_field 33, 0, 'timer_time', :type => :uint32, :unit => 's'
629
+ Fit::File::Definitions.add_field 33, 1, 'distance', :type => :uint32, :unit => 'm'
630
+ Fit::File::Definitions.add_field 33, 2, 'calories', :type => :uint32, :unit => 'kcal'
631
+ Fit::File::Definitions.add_field 33, 3, 'sport', :type => :sport
632
+ Fit::File::Definitions.add_field 33, 4, 'elapsed_time', :type => :uint32, :unit => 's'
633
+ Fit::File::Definitions.add_field 33, 5, 'sessions', :type => :uint16
634
+ Fit::File::Definitions.add_field 33, 6, 'active_time', :type => :uint32, :unit => 's'
635
+
636
+ Fit::File::Definitions.add_name 30, 'weight_scale'
637
+ Fit::File::Definitions.add_field 30, 253, 'timestamp', :type => :date_time, :scale => 1, :unit => 's'
638
+ Fit::File::Definitions.add_field 30, 0, 'weight', :type => :weight, :scale => 100, :unit => 'kg'
639
+ Fit::File::Definitions.add_field 30, 1, 'percent_fat', :type => :uint16, :scale => 100, :unit => '%'
640
+ Fit::File::Definitions.add_field 30, 2, 'percent_hydration', :type => :uint16, :scale => 100, :unit => '%'
641
+ Fit::File::Definitions.add_field 30, 3, 'visceral_fat_mass', :type => :uint16, :scale => 100, :unit => 'kg'
642
+ Fit::File::Definitions.add_field 30, 4, 'bone_mass', :type => :uint16, :scale => 100, :unit => 'kg'
643
+ Fit::File::Definitions.add_field 30, 5, 'muscle_mass', :type => :uint16, :scale => 100, :unit => 'kg'
644
+ Fit::File::Definitions.add_field 30, 7, 'basal_met', :type => :uint16, :scale => 4, :unit => 'kcal/day'
645
+ Fit::File::Definitions.add_field 30, 8, 'physique_rating', :type => :uint8, :scale => 1
646
+ Fit::File::Definitions.add_field 30, 9, 'active_met', :type => :uint16, :scale => 4, :unit => 'kcal/day'
647
+ Fit::File::Definitions.add_field 30, 10, 'metabolic_age', :type => :uint8, :scale => 1, :unit => 'years'
648
+ Fit::File::Definitions.add_field 30, 11, 'visceral_fat_rating', :type => :uint8, :scale => 1
649
+ Fit::File::Definitions.add_field 30, 12, 'user_profile_index', :type => :message_index
650
+
651
+ Fit::File::Definitions.add_name 51, 'blood_pressure'
652
+ Fit::File::Definitions.add_field 51, 253, 'timestamp', :type => :date_time, :scale => 1, :unit => 's'
653
+ Fit::File::Definitions.add_field 51, 0, 'systolic_pressure', :type => :uint16, :scale => 1, :unit => 'mmHg'
654
+ Fit::File::Definitions.add_field 51, 1, 'diastolic_pressure', :type => :uint16, :scale => 1, :unit => 'mmHg'
655
+ Fit::File::Definitions.add_field 51, 2, 'mean_arterial_pressure', :type => :uint16, :scale => 1, :unit => 'mmHg'
656
+ Fit::File::Definitions.add_field 51, 3, 'map_3_sample_mean', :type => :uint16, :scale => 1, :unit => 'mmHg'
657
+ Fit::File::Definitions.add_field 51, 4, 'map_morning_values', :type => :uint16, :scale => 1, :unit => 'mmHg'
658
+ Fit::File::Definitions.add_field 51, 5, 'map_evening_values', :type => :uint16, :scale => 1, :unit => 'mmHg'
659
+ Fit::File::Definitions.add_field 51, 6, 'heart_rate', :type => :uint8, :scale => 1, :unit => 'bpm'
660
+ Fit::File::Definitions.add_field 51, 7, 'heart_rate_type', :type => :hr_type
661
+ Fit::File::Definitions.add_field 51, 8, 'status', :type => :bp_status
662
+ Fit::File::Definitions.add_field 51, 9, 'user_profile_index', :type => :message_index
663
+
664
+ Fit::File::Definitions.add_name 103, 'monitoring_info'
665
+ Fit::File::Definitions.add_field 103, 253, 'timestamp', :type => :date_time
666
+ Fit::File::Definitions.add_field 103, 0, 'local_timestamp', :type => :local_date_time
667
+ Fit::File::Definitions.add_field 103, 1, 'activity_type', :type => :activity_type
668
+ Fit::File::Definitions.add_field 103, 3, 'cycles_to_distance', :type => :uint16, :scale => 5000, :unit => 'm/cycle'
669
+ Fit::File::Definitions.add_field 103, 4, 'cycles_to_calories', :type => :uint16, :scale => 5000, :unit => 'kcal/cycle'
670
+ Fit::File::Definitions.add_field 103, 5, 'resting_metabolic_rate', :type => :uint16, :unit => 'kcal / day'
671
+
672
+ Fit::File::Definitions.add_name 55, 'monitoring'
673
+ Fit::File::Definitions.add_field 55, 253, 'timestamp', :type => :date_time, :unit => 's'
674
+ Fit::File::Definitions.add_field 55, 0, 'device_index', :type => :device_index
675
+ Fit::File::Definitions.add_field 55, 1, 'calories', :type => :uint16, :unit => 'kcal'
676
+ Fit::File::Definitions.add_field 55, 2, 'distance', :type => :uint32, :scale => 100, :unit => 'm'
677
+ Fit::File::Definitions.add_field 55, 3, 'cycles', :type => :uint32, :scale => 2, :unit => 'cycles'
678
+ Fit::File::Definitions.add_field 55, 3, 'steps', :type => :uint32, :scale => 1, :unit => 'steps', :ref_field_name => 'activity_type', :ref_field_values => [:walking, :running]
679
+ Fit::File::Definitions.add_field 55, 3, 'strokes', :type => :uint32, :scale => 2, :unit => 'strokes', :ref_field_name => 'activity_type', :ref_field_values => [:cycling, :swimming]
680
+ Fit::File::Definitions.add_field 55, 4, 'active_time', :type => :uint32, :scale => 1000, :unit => 's'
681
+ Fit::File::Definitions.add_field 55, 5, 'activity_type', :type => :activity_type
682
+ Fit::File::Definitions.add_field 55, 6, 'activity_subtype', :type => :activity_subtype
683
+ Fit::File::Definitions.add_field 55, 7, 'activity_level', :type => :activity_level
684
+ Fit::File::Definitions.add_field 55, 8, 'distance_16', :type => :uint16, :unit => '100 * m'
685
+ Fit::File::Definitions.add_field 55, 9, 'cycles_16', :type => :uint16, :unit => '2 * cycles ', :unit => '(steps)'
686
+ Fit::File::Definitions.add_field 55, 10, 'active_time_16', :type => :uint16, :unit => 's'
687
+ Fit::File::Definitions.add_field 55, 11, 'local_timestamp', :type => :local_date_time
688
+ Fit::File::Definitions.add_field 55, 12, 'temperature', :type => :sint16, :scale => 100, :unit => 'C'
689
+ Fit::File::Definitions.add_field 55, 14, 'temperature_min', :type => :sint16, :scale => 100, :unit => 'C'
690
+ Fit::File::Definitions.add_field 55, 15, 'temperature_max', :type => :sint16, :scale => 100, :unit => 'C'
691
+ Fit::File::Definitions.add_field 55, 16, 'activity_time', :type => :uint16, :unit => 'minutes'
692
+ Fit::File::Definitions.add_field 55, 19, 'active_calories', :type => :uint16, :unit => 'kcal'
693
+ Fit::File::Definitions.add_field 55, 24, 'current_activity_type_intensity', :type => :byte
694
+ Fit::File::Definitions.add_field 55, 25, 'timestamp_min_8', :type => :uint8, :unit => 'min'
695
+ Fit::File::Definitions.add_field 55, 26, 'timestamp_16', :type => :uint16, :unit => 's'
696
+ Fit::File::Definitions.add_field 55, 27, 'heart_rate', :type => :uint8, :unit => 'bpm'
697
+ Fit::File::Definitions.add_field 55, 28, 'intensity', :type => :uint8, :scale => 10
698
+ Fit::File::Definitions.add_field 55, 29, 'duration_min', :type => :uint16, :unit => 'min'
699
+ Fit::File::Definitions.add_field 55, 30, 'duration', :type => :uint32, :unit => 's'
700
+
701
+ Fit::File::Definitions.add_name 145, 'memo_glob'
702
+ Fit::File::Definitions.add_field 145, 250, 'part_index', :type => :uint32
703
+ Fit::File::Definitions.add_field 145, 0, 'memo', :type => :byte
704
+ Fit::File::Definitions.add_field 145, 1, 'message_number', :type => :uint16
705
+ Fit::File::Definitions.add_field 145, 2, 'message_index', :type => :message_index