fit4ruby 3.2.0 → 3.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/Gemfile.lock +30 -6
- data/fit4ruby.gemspec +4 -2
- data/lib/fit4ruby/Activity.rb +57 -9
- data/lib/fit4ruby/DeviceInfo.rb +37 -0
- data/lib/fit4ruby/FieldDescription.rb +7 -1
- data/lib/fit4ruby/FitDataRecord.rb +3 -3
- data/lib/fit4ruby/FitDefinitionField.rb +2 -2
- data/lib/fit4ruby/FitMessageRecord.rb +3 -3
- data/lib/fit4ruby/GlobalFitDictionaries.rb +278 -22
- data/lib/fit4ruby/GlobalFitMessage.rb +6 -1
- data/lib/fit4ruby/GlobalFitMessages.rb +213 -9
- data/lib/fit4ruby/Lap.rb +29 -3
- data/lib/fit4ruby/Length.rb +53 -0
- data/lib/fit4ruby/Record.rb +4 -4
- data/lib/fit4ruby/version.rb +1 -1
- data/spec/FitFile_spec.rb +59 -11
- metadata +36 -7
@@ -126,7 +126,7 @@ module Fit4Ruby
|
|
126
126
|
when 'date_time'
|
127
127
|
value = time_to_fit_time(value)
|
128
128
|
end
|
129
|
-
if value.is_a?(Float) && @opts[:scale].nil?
|
129
|
+
if @type != 'float32' && value.is_a?(Float) && @opts[:scale].nil?
|
130
130
|
Log.error "Field #{@name} must not be a Float value"
|
131
131
|
end
|
132
132
|
|
@@ -223,6 +223,11 @@ module Fit4Ruby
|
|
223
223
|
register_field_by_number(field, number)
|
224
224
|
end
|
225
225
|
|
226
|
+
# Check if a field with the given name already exists?
|
227
|
+
def has_field?(name)
|
228
|
+
return @fields_by_name.include?(name)
|
229
|
+
end
|
230
|
+
|
226
231
|
# Define a new set of Field alternatives for this message definition.
|
227
232
|
def alt_field(number, ref_field, &block)
|
228
233
|
unless @fields_by_name.include?(ref_field)
|
@@ -43,13 +43,18 @@ module Fit4Ruby
|
|
43
43
|
field 13, 'uint8', 'undocumented_field_13'
|
44
44
|
field 14, 'uint8', 'undocumented_field_14'
|
45
45
|
field 15, 'uint8', 'undocumented_field_15'
|
46
|
+
field 16, 'enum', 'undocumented_field_16'
|
47
|
+
field 17, 'enum', 'undocumented_field_17'
|
48
|
+
field 18, 'enum', 'undocumented_field_18'
|
46
49
|
field 22, 'enum', 'undocumented_field_22'
|
47
50
|
field 23, 'enum', 'undocumented_field_23'
|
48
51
|
field 25, 'enum', 'undocumented_field_25'
|
49
52
|
field 26, 'enum', 'undocumented_field_26'
|
50
53
|
field 28, 'enum', 'undocumented_field_28'
|
54
|
+
field 29, 'enum', 'undocumented_field_29'
|
51
55
|
field 30, 'enum', 'undocumented_field_30'
|
52
56
|
field 31, 'enum', 'undocumented_field_31'
|
57
|
+
field 33, 'uint8', 'undocumented_field_33'
|
53
58
|
field 34, 'enum', 'undocumented_field_34'
|
54
59
|
field 35, 'enum', 'undocumented_field_35'
|
55
60
|
field 36, 'enum', 'activity_tracker_enabled'
|
@@ -90,11 +95,14 @@ module Fit4Ruby
|
|
90
95
|
field 85, 'enum', 'undocumented_field_85'
|
91
96
|
field 87, 'enum', 'undocumented_field_87'
|
92
97
|
field 90, 'uint32', 'auto_activity_detect'
|
98
|
+
field 91, 'uint8z', 'undocumented_field_91'
|
93
99
|
field 94, 'uint8', 'number_of_screens'
|
94
100
|
field 96, 'enum', 'undocumented_field_96'
|
95
101
|
field 97, 'uint8z', 'undocumented_field_97'
|
102
|
+
field 98, 'enum', 'undocumented_field_98'
|
96
103
|
field 101, 'enum', 'undocumented_field_101'
|
97
104
|
field 104, 'enum', 'undocumented_field_104'
|
105
|
+
field 106, 'enum', 'undocumented_field_106'
|
98
106
|
field 107, 'enum', 'undocumented_field_107'
|
99
107
|
field 108, 'enum', 'undocumented_field_108'
|
100
108
|
field 109, 'enum', 'undocumented_field_109'
|
@@ -103,6 +111,7 @@ module Fit4Ruby
|
|
103
111
|
field 112, 'enum', 'undocumented_field_112'
|
104
112
|
field 116, 'enum', 'undocumented_field_116'
|
105
113
|
field 117, 'enum', 'undocumented_field_117'
|
114
|
+
field 121, 'enum', 'undocumented_field_121'
|
106
115
|
field 124, 'uint8', 'undocumented_field_124'
|
107
116
|
field 125, 'uint8', 'undocumented_field_125'
|
108
117
|
field 126, 'enum', 'undocumented_field_126'
|
@@ -120,8 +129,16 @@ module Fit4Ruby
|
|
120
129
|
field 142, 'uint8', 'undocumented_field_142'
|
121
130
|
field 143, 'uint8', 'undocumented_field_143'
|
122
131
|
field 144, 'enum', 'true_up_enabled'
|
132
|
+
field 145, 'enum', 'undocumented_field_145'
|
123
133
|
field 148, 'enum', 'undocumented_field_148'
|
124
134
|
field 149, 'enum', 'undocumented_field_149'
|
135
|
+
field 151, 'enum', 'undocumented_field_151'
|
136
|
+
field 160, 'enum', 'undocumented_field_160'
|
137
|
+
field 163, 'enum', 'undocumented_field_163'
|
138
|
+
field 164, 'uint8', 'undocumented_field_164'
|
139
|
+
field 167, 'string', 'undocumented_field_167'
|
140
|
+
field 168, 'enum', 'undocumented_field_168'
|
141
|
+
field 170, 'uint8', 'undocumented_field_170'
|
125
142
|
|
126
143
|
message 3, 'user_profile'
|
127
144
|
field 0, 'string', 'friendly_name'
|
@@ -133,9 +150,12 @@ module Fit4Ruby
|
|
133
150
|
field 6, 'enum', 'elev_setting'
|
134
151
|
field 7, 'enum', 'weight_setting'
|
135
152
|
field 8, 'uint8', 'resting_heart_rate', :unit => 'bpm'
|
153
|
+
field 10, 'uint8', 'default_max_biking_heart_rate', :dict => 'display_heart'
|
154
|
+
field 11, 'uint8', 'default_max_heart_rate', :dict => 'display_heart'
|
136
155
|
field 12, 'enum', 'hr_setting', :dict => 'display_heart'
|
137
156
|
field 13, 'enum', 'speed_setting', :dict => 'display_measure'
|
138
157
|
field 14, 'enum', 'dist_setting', :dict => 'display_measure'
|
158
|
+
field 16, 'enum', 'power_setting'
|
139
159
|
field 17, 'enum', 'activity_class', :scale => 10
|
140
160
|
field 18, 'enum', 'position_setting', :dict => 'display_position'
|
141
161
|
field 21, 'enum', 'temperature_setting', :dict => 'display_measure'
|
@@ -149,14 +169,20 @@ module Fit4Ruby
|
|
149
169
|
field 34, 'uint16', 'undocumented_field_34'
|
150
170
|
field 35, 'uint32', 'undocumented_field_35'
|
151
171
|
field 36, 'uint8', 'undocumented_field_36'
|
152
|
-
field 37, 'uint16', '
|
172
|
+
field 37, 'uint16', 'functional_threshold_speed', :scale => 36, :unit => 'm/s'
|
153
173
|
field 38, 'uint16', 'undocumented_field_38'
|
154
174
|
field 39, 'float32', 'undocumented_field_39'
|
155
175
|
field 40, 'float32', 'undocumented_field_40'
|
156
176
|
field 41, 'uint32', 'time_last_lthr_update', :type => 'date_time'
|
157
177
|
field 42, 'uint32', 'undocumented_field_42'
|
158
178
|
field 43, 'enum', 'undocumented_field_43'
|
179
|
+
field 44, 'uint8', 'undocumented_field_44'
|
180
|
+
field 45, 'uint8z', 'undocumented_field_45'
|
159
181
|
field 47, 'enum', 'undocumented_field_47'
|
182
|
+
field 52, 'enum', 'undocumented_field_52'
|
183
|
+
field 53, 'uint8', 'undocumented_field_53'
|
184
|
+
field 54, 'uint8', 'undocumented_field_54'
|
185
|
+
field 57, 'enum', 'undocumented_field_57'
|
160
186
|
field 253, 'uint32', 'timestamp', :type => 'date_time'
|
161
187
|
|
162
188
|
message 5, 'sdm_profile'
|
@@ -212,6 +238,9 @@ module Fit4Ruby
|
|
212
238
|
field 10, 'enum', 'undocumented_field_10'
|
213
239
|
field 11, 'enum', 'undocumented_field_11'
|
214
240
|
field 12, 'enum', 'undocumented_field_12'
|
241
|
+
field 13, 'enum', 'undocumented_field_13'
|
242
|
+
field 15, 'uint16', 'undocumented_field_15'
|
243
|
+
field 16, 'uint32', 'undocumented_field_16'
|
215
244
|
field 254, 'uint16', 'message_index'
|
216
245
|
|
217
246
|
message 12, 'sport'
|
@@ -221,13 +250,18 @@ module Fit4Ruby
|
|
221
250
|
field 4, 'uint16', 'undocumented_field_4'
|
222
251
|
field 5, 'enum', 'undocumented_field_5'
|
223
252
|
field 6, 'enum', 'undocumented_field_6'
|
253
|
+
field 7, 'uint8', 'undocumented_field_7'
|
254
|
+
field 8, 'uint8', 'undocumented_field_8'
|
224
255
|
field 9, 'uint8', 'undocumented_field_9'
|
225
256
|
field 10, 'uint8', 'undocumented_field_10', :array => true
|
226
257
|
field 11, 'enum', 'undocumented_field_11'
|
227
258
|
field 12, 'uint8', 'undocumented_field_12', :array => true
|
228
259
|
field 13, 'enum', 'undocumented_field_13'
|
229
260
|
field 15, 'enum', 'undocumented_field_15'
|
261
|
+
field 17, 'enum', 'undocumented_field_17'
|
262
|
+
field 18, 'enum', 'undocumented_field_18'
|
230
263
|
field 19, 'enum', 'undocumented_field_19', :array => true
|
264
|
+
field 21, 'enum', 'undocumented_field_21'
|
231
265
|
|
232
266
|
# Not part of the official ANT SDK doc.
|
233
267
|
message 13, 'undocumented_13'
|
@@ -239,16 +273,21 @@ module Fit4Ruby
|
|
239
273
|
field 6, 'sint32', 'undocumented_field_6'
|
240
274
|
field 7, 'enum', 'undocumented_field_7'
|
241
275
|
field 8, 'uint16', 'undocumented_field_8'
|
276
|
+
field 9, 'enum', 'undocumented_field_9'
|
277
|
+
field 10, 'uint16', 'undocumented_field_10'
|
242
278
|
field 11, 'uint8', 'undocumented_field_11'
|
243
279
|
field 12, 'enum', 'undocumented_field_12'
|
244
280
|
field 13, 'enum', 'undocumented_field_13'
|
245
281
|
field 14, 'enum', 'undocumented_field_14'
|
246
282
|
field 15, 'enum', 'undocumented_field_15'
|
247
283
|
field 16, 'enum', 'undocumented_field_16'
|
284
|
+
field 18, 'enum', 'undocumented_field_18'
|
285
|
+
field 19, 'uint16', 'undocumented_field_19'
|
248
286
|
field 21, 'enum', 'undocumented_field_21'
|
249
287
|
field 22, 'uint16', 'undocumented_field_22'
|
250
288
|
field 23, 'enum', 'undocumented_field_23'
|
251
289
|
field 24, 'enum', 'undocumented_field_24'
|
290
|
+
field 25, 'enum', 'undocumented_field_25'
|
252
291
|
field 27, 'enum', 'undocumented_field_27'
|
253
292
|
field 28, 'enum', 'undocumented_field_28'
|
254
293
|
field 29, 'enum', 'undocumented_field_29'
|
@@ -271,17 +310,36 @@ module Fit4Ruby
|
|
271
310
|
field 46, 'enum', 'undocumented_field_46'
|
272
311
|
field 47, 'enum', 'undocumented_field_47'
|
273
312
|
field 48, 'enum', 'undocumented_field_48'
|
313
|
+
field 50, 'enum', 'undocumented_field_50'
|
314
|
+
field 51, 'enum', 'undocumented_field_51'
|
315
|
+
field 52, 'uint16', 'undocumented_field_52'
|
274
316
|
field 53, 'enum', 'undocumented_field_53'
|
275
317
|
field 54, 'uint32', 'undocumented_field_54'
|
276
318
|
field 55, 'enum', 'undocumented_field_55'
|
277
319
|
field 57, 'enum', 'undocumented_field_57'
|
320
|
+
field 58, 'enum', 'undocumented_field_58'
|
278
321
|
field 60, 'enum', 'undocumented_field_60'
|
322
|
+
field 61, 'enum', 'undocumented_field_61'
|
279
323
|
field 62, 'enum', 'undocumented_field_62'
|
280
324
|
field 63, 'enum', 'undocumented_field_63'
|
281
325
|
field 64, 'uint16', 'undocumented_field_64'
|
282
326
|
field 65, 'enum', 'undocumented_field_65'
|
283
327
|
field 66, 'enum', 'undocumented_field_66'
|
328
|
+
field 67, 'enum', 'undocumented_field_67'
|
329
|
+
field 68, 'sint32','undocumented_field_68'
|
330
|
+
field 69, 'uint16', 'undocumented_field_69'
|
331
|
+
field 70, 'enum', 'undocumented_field_70'
|
332
|
+
field 71, 'enum', 'undocumented_field_71'
|
333
|
+
field 72, 'enum', 'undocumented_field_72'
|
334
|
+
field 73, 'sint32', 'undocumented_field_73'
|
335
|
+
field 74, 'sint32', 'undocumented_field_74'
|
336
|
+
field 75, 'enum', 'undocumented_field_75'
|
284
337
|
field 76, 'enum', 'undocumented_field_76'
|
338
|
+
field 78, 'enum', 'undocumented_field_78'
|
339
|
+
field 79, 'enum', 'undocumented_field_79'
|
340
|
+
field 81, 'enum', 'undocumented_field_81'
|
341
|
+
field 82, 'enum', 'undocumented_field_82'
|
342
|
+
field 83, 'enum', 'undocumented_field_83'
|
285
343
|
field 254, 'uint16', 'message_index'
|
286
344
|
|
287
345
|
message 18, 'session'
|
@@ -339,7 +397,7 @@ module Fit4Ruby
|
|
339
397
|
field 44, 'uint16', 'pool_length', :scale => 100, :unit => 'm'
|
340
398
|
field 45, 'uint16', 'undefined_value_45'
|
341
399
|
field 46, 'enum', 'pool_length_unit', :dict => 'display_measure'
|
342
|
-
field 47, 'uint16', '
|
400
|
+
field 47, 'uint16', 'num_active_lengths', :unit => 'lengths'
|
343
401
|
field 48, 'uint32', 'total_work', :unit => 'J'
|
344
402
|
field 57, 'sint8', 'avg_temperature', :unit => 'C'
|
345
403
|
field 58, 'sint8', 'max_temperature', :unit => 'C'
|
@@ -368,6 +426,7 @@ module Fit4Ruby
|
|
368
426
|
field 108, 'uint16', 'undefined_value_108'
|
369
427
|
field 109, 'uint8', 'undefined_value_109'
|
370
428
|
field 110, 'string', 'undefined_value_110'
|
429
|
+
field 111, 'uint8', 'undefined_value_111'
|
371
430
|
field 112, 'uint32', 'time_standing', :scale => 1000, :unit => 's'
|
372
431
|
field 113, 'uint16', 'stand_count'
|
373
432
|
field 114, 'sint8', 'avg_left_pco', :unit => 'mm'
|
@@ -390,6 +449,7 @@ module Fit4Ruby
|
|
390
449
|
field 134, 'uint16', 'avg_step_length', :scale => 10, :unit => 'mm'
|
391
450
|
field 137, 'uint8', 'total_anaerobic_training_effect', :scale => 10
|
392
451
|
field 138, 'uint8', 'undocumented_field_138'
|
452
|
+
field 139, 'uint16', 'avg_vam', :scale => 1000, :unit => 'm/s'
|
393
453
|
field 150, 'sint8', 'min_temperature', :unit => 'C' # guessed
|
394
454
|
field 151, 'uint16', 'undocumented_field_151'
|
395
455
|
field 152, 'uint32', 'undocumented_field_152'
|
@@ -397,7 +457,23 @@ module Fit4Ruby
|
|
397
457
|
field 158, 'uint16', 'undocumented_field_158'
|
398
458
|
field 153, 'enum', 'undocumented_field_153'
|
399
459
|
field 154, 'enum', 'undocumented_field_154'
|
460
|
+
field 168, 'sint32', 'undocumented_field_168'
|
461
|
+
field 169, 'uint16', 'undocumented_field_169'
|
462
|
+
field 170, 'uint16', 'undocumented_field_170'
|
463
|
+
field 177, 'uint16', 'undocumented_field_177'
|
464
|
+
field 178, 'uint16', 'undocumented_field_178'
|
465
|
+
field 179, 'uint16', 'undocumented_field_179'
|
466
|
+
field 180, 'uint16', 'undocumented_field_180'
|
467
|
+
field 181, 'float32', 'undocumented_field_181'
|
468
|
+
field 183, 'uint16', 'undocumented_field_183'
|
400
469
|
field 184, 'enum', 'undocumented_field_184'
|
470
|
+
field 185, 'uint8', 'undocumented_field_185'
|
471
|
+
field 187, 'float32', 'undocumented_field_187'
|
472
|
+
field 188, 'enum', 'undocumented_field_188'
|
473
|
+
field 189, 'uint16', 'undocumented_field_189'
|
474
|
+
field 190, 'uint16', 'undocumented_field_190'
|
475
|
+
field 194, 'uint8', 'undocumented_field_194'
|
476
|
+
field 195, 'uint8', 'undocumented_field_195'
|
401
477
|
field 253, 'uint32', 'timestamp', :type => 'date_time'
|
402
478
|
field 254, 'uint16', 'message_index'
|
403
479
|
|
@@ -449,7 +525,7 @@ module Fit4Ruby
|
|
449
525
|
field 37, 'uint16', 'avg_stroke_distance', :scale => 100, :unit => 'm'
|
450
526
|
field 38, 'enum', 'swim_stroke', :dict => 'swim_stroke'
|
451
527
|
field 39, 'enum', 'sub_sport', :dict => 'sub_sport'
|
452
|
-
field 40, 'uint16', '
|
528
|
+
field 40, 'uint16', 'num_active_lengths', :unit => 'lengths'
|
453
529
|
field 41, 'uint32', 'total_work', :unit => 'J'
|
454
530
|
field 50, 'sint8', 'avg_temperature', :unit => 'C'
|
455
531
|
field 51, 'sint8', 'max_temperature', :unit => 'C'
|
@@ -493,9 +569,18 @@ module Fit4Ruby
|
|
493
569
|
field 118, 'uint16', 'avg_vertical_ratio', :scale => 100, :unit => '%'
|
494
570
|
field 119, 'uint16', 'avg_stance_time_balance', :scale => 100, :unit => '%'
|
495
571
|
field 120, 'uint16', 'avg_step_length', :scale => 10000, :unit => 'm'
|
572
|
+
field 121, 'uint16', 'avg_vam', :scale => 1000, :unit => 'm/s'
|
496
573
|
field 124, 'sint8', 'min_temperature', :unit => 'C' # guessed
|
497
574
|
field 125, 'uint16', 'undocumented_field_125'
|
498
575
|
field 126, 'uint16', 'undocumented_field_126'
|
576
|
+
field 136, 'uint16', 'undocumented_field_136'
|
577
|
+
field 137, 'uint16', 'undocumented_field_137'
|
578
|
+
field 143, 'uint16', 'undocumented_field_143'
|
579
|
+
field 145, 'uint16', 'undocumented_field_145'
|
580
|
+
field 149, 'float32', 'undocumented_field_149'
|
581
|
+
field 151, 'uint16', 'undocumented_field_151'
|
582
|
+
field 152, 'uint8', 'undocumented_field_152'
|
583
|
+
field 154, 'float32', 'undocumented_field_154'
|
499
584
|
field 253, 'uint32', 'timestamp', :type => 'date_time'
|
500
585
|
field 254, 'uint16', 'message_index'
|
501
586
|
|
@@ -516,6 +601,7 @@ module Fit4Ruby
|
|
516
601
|
field 13, 'sint8', 'temperature', :unit => 'C'
|
517
602
|
field 14, 'uint32', 'undefined_field_14'
|
518
603
|
field 15, 'uint32', 'undefined_field_15'
|
604
|
+
field 18, 'uint8', 'undefined_field_18'
|
519
605
|
field 29, 'uint32', 'accumulated_power', :unit => 'watts'
|
520
606
|
field 30, 'uint8', 'left_right_balance', :dict => 'left_right_balance'
|
521
607
|
field 39, 'uint16', 'vertical_oscillation', :scale => 10, :unit => 'mm'
|
@@ -541,12 +627,27 @@ module Fit4Ruby
|
|
541
627
|
field 70, 'uint8', 'left_power_phase_peak', :scale => 0.7111111, :unit => 'degrees', :array => true
|
542
628
|
field 71, 'uint8', 'right_power_phase', :scale => 0.7111111, :unit => 'degrees', :array => true
|
543
629
|
field 72, 'uint8', 'right_power_phase_peak', :scale => 0.7111111, :unit => 'degrees', :array => true
|
630
|
+
field 73, 'uint32', 'enhanced_speed', :scale => 1000, :unit => 'm/s'
|
631
|
+
field 74, 'uint32', 'undefined_value_74'
|
632
|
+
field 75, 'uint32', 'undefined_value_75'
|
633
|
+
field 76, 'uint32', 'undefined_value_76'
|
634
|
+
field 77, 'uint32', 'undefined_value_77'
|
635
|
+
field 79, 'uint32', 'undefined_value_79'
|
636
|
+
field 80, 'uint32', 'undefined_value_80'
|
637
|
+
field 78, 'uint32', 'enhanced_elevation', :scale => 5, :offset => 500, :unit => 'm'
|
544
638
|
field 83, 'uint16', 'vertical_ratio', :scale => 100, :unit => '%' # guessed
|
545
639
|
field 84, 'uint16', 'gct_balance', :scale => 100, :unit => '%' # guessed
|
546
640
|
field 85, 'uint16', 'stride_length', :scale => 10000, :unit => 'm' # guessed
|
547
641
|
field 87, 'uint16', 'undefined_value_87' # first seen on F3 FW6.80
|
548
642
|
field 88, 'uint16', 'undefined_value_88' # first seen on F3HR FW3.60
|
549
643
|
field 90, 'sint8', 'performance_condition' # guessed
|
644
|
+
field 100, 'sint32', 'undocumented_field_100'
|
645
|
+
field 101, 'sint32', 'undocumented_field_101'
|
646
|
+
field 107, 'enum', 'undocumented_field_107'
|
647
|
+
field 116, 'uint16', 'undocumented_field_116'
|
648
|
+
field 108, 'uint16', 'respiration_rate', :scale => 100, :unit => 'brpm' # guessed
|
649
|
+
field 135, 'uint8', 'undocumented_field_135'
|
650
|
+
field 136, 'uint8', 'undocumented_field_136'
|
550
651
|
field 253, 'uint32', 'timestamp', :type => 'date_time'
|
551
652
|
|
552
653
|
message 21, 'event'
|
@@ -583,6 +684,8 @@ module Fit4Ruby
|
|
583
684
|
field 14, 'enum', 'undocumented_field_14'
|
584
685
|
field 15, 'uint32', 'undocumented_field_15'
|
585
686
|
field 16, 'enum', 'undocumented_field_16'
|
687
|
+
field 17, 'uint16', 'undocumented_field_17'
|
688
|
+
field 18, 'uint16', 'undocumented_field_18'
|
586
689
|
field 19, 'uint8', 'undocumented_field_19'
|
587
690
|
field 20, 'uint8', 'undocumented_field_20'
|
588
691
|
field 253, 'uint32', 'timestamp', :type => 'date_time'
|
@@ -597,6 +700,9 @@ module Fit4Ruby
|
|
597
700
|
field 4, 'uint8', 'heart_rate'
|
598
701
|
field 5, 'enum', 'mode' # 0 or 3 seen, unknown meaning
|
599
702
|
field 6, 'uint8', 'power' # First found in FR920XT
|
703
|
+
field 7, 'uint8', 'undocumented_field_7'
|
704
|
+
field 8, 'uint8', 'undocumented_field_8'
|
705
|
+
field 9, 'uint8', 'undocumented_field_9'
|
600
706
|
field 14, 'uint8', 'calories' # First found in FR920XT
|
601
707
|
field 15, 'uint8', 'undocumented_field_15'
|
602
708
|
field 253, 'uint32', 'timestamp', :type => 'date_time'
|
@@ -745,15 +851,22 @@ module Fit4Ruby
|
|
745
851
|
field 10, 'uint8', 'avg_resting_heart_rate', :unit => 'bpm'
|
746
852
|
field 11, 'uint16', 'running_lactate_threshold_heart_rate', :unit => 'bpm'
|
747
853
|
field 12, 'uint16', 'functional_threshold_power', :unit => 'W'
|
748
|
-
field 13, 'uint16', '
|
854
|
+
field 13, 'uint16', 'functional_threshold_speed', :scale => 36, :unit => 'm/s'
|
749
855
|
field 14, 'uint8', 'undocumented_field_14'
|
750
856
|
field 15, 'uint8', 'undocumented_field_15'
|
857
|
+
field 16, 'uint32', 'undocumented_field_16'
|
858
|
+
field 17, 'sint32', 'undocumented_field_17'
|
859
|
+
field 18, 'sint32', 'undocumented_field_18'
|
860
|
+
field 19, 'sint32', 'undocumented_field_19'
|
861
|
+
field 20, 'uint16', 'undocumented_field_20'
|
862
|
+
field 21, 'sint32', 'undocumented_field_21'
|
863
|
+
field 22, 'sint32', 'undocumented_field_22'
|
751
864
|
field 253, 'uint32', 'timestamp', :type => 'date_time'
|
752
865
|
|
753
866
|
message 101, 'length'
|
754
867
|
field 0, 'enum', 'event', :dict => 'event'
|
755
868
|
field 1, 'enum', 'event_type', :dict => 'event_type'
|
756
|
-
field 2, 'uint32', '
|
869
|
+
field 2, 'uint32', 'start_time', :type => 'date_time'
|
757
870
|
field 3, 'uint32', 'total_elapsed_time', :scale => 1000, :unit => 's'
|
758
871
|
field 4, 'uint32', 'total_timer_time', :scale => 1000, :unit => 's'
|
759
872
|
field 5, 'uint16', 'total_strokes', :unit => 'strokes'
|
@@ -765,6 +878,8 @@ module Fit4Ruby
|
|
765
878
|
field 12, 'enum', 'length_type', :dict => 'length_type'
|
766
879
|
field 18, 'uint16', 'player_score'
|
767
880
|
field 19, 'uint16', 'opponent_score'
|
881
|
+
field 20, 'uint16', 'stroke_count', :unit => 'counts'
|
882
|
+
field 21, 'uint16', 'zone_count', :unit => 'counts'
|
768
883
|
field 253, 'uint32', 'timestamp', :type => 'date_time'
|
769
884
|
field 254, 'uint16', 'message_index'
|
770
885
|
|
@@ -833,8 +948,8 @@ module Fit4Ruby
|
|
833
948
|
field 12, 'enum', 'undocumented_field_12'
|
834
949
|
field 13, 'uint8', 'undocumented_field_13'
|
835
950
|
field 14, 'uint16', 'running_lactate_threshold_heart_rate', :unit => 'bpm'
|
836
|
-
field 15, 'uint16', '
|
837
|
-
field 16, 'uint16', '
|
951
|
+
field 15, 'uint16', 'undocumented_field_15'
|
952
|
+
field 16, 'uint16', 'running_lactate_threshold_speed', :scale => 36, :unit => 'm/s'
|
838
953
|
field 17, 'sint8', 'performance_condition'
|
839
954
|
field 18, 'uint8', 'undocumented_field_18'
|
840
955
|
field 19, 'uint8', 'undocumented_field_19'
|
@@ -845,10 +960,27 @@ module Fit4Ruby
|
|
845
960
|
field 24, 'sint32', 'undocumented_field_24'
|
846
961
|
field 25, 'uint8', 'undocumented_field_25'
|
847
962
|
field 26, 'sint32', 'undocumented_field_26'
|
963
|
+
field 27, 'sint32', 'undocumented_field_27'
|
964
|
+
field 28, 'sint32', 'undocumented_field_28'
|
848
965
|
field 29, 'sint32', 'metmax_running', :scale => 65536, :unit => 'MET'
|
966
|
+
field 30, 'sint8', 'undocumented_field_30'
|
967
|
+
field 31, 'sint8', 'undocumented_field_31'
|
968
|
+
field 32, 'sint32', 'undocumented_field_32'
|
969
|
+
field 33, 'uint8', 'undocumented_field_33'
|
849
970
|
field 34, 'enum', 'undocumented_field_34'
|
850
971
|
field 35, 'uint32', 'undocumented_field_35'
|
851
972
|
field 36, 'uint32', 'undocumented_field_36'
|
973
|
+
field 37, 'sint32', 'undocumented_field_37'
|
974
|
+
field 38, 'sint32', 'undocumented_field_38'
|
975
|
+
field 39, 'sint32', 'undocumented_field_39'
|
976
|
+
field 40, 'sint32', 'undocumented_field_40'
|
977
|
+
field 41, 'enum', 'undocumented_field_41'
|
978
|
+
field 42, 'uint8', 'undocumented_field_42'
|
979
|
+
field 43, 'sint16', 'undocumented_field_43'
|
980
|
+
field 44, 'sint16', 'undocumented_field_44'
|
981
|
+
field 45, 'sint16', 'undocumented_field_45'
|
982
|
+
field 46, 'uint8', 'undocumented_field_46'
|
983
|
+
field 48, 'uint32', 'undocumented_field_48'
|
852
984
|
field 253, 'uint32', 'timestamp', :type => 'date_time'
|
853
985
|
|
854
986
|
# Not part of the official ANT SDK doc. The message name is guessed and
|
@@ -872,7 +1004,7 @@ module Fit4Ruby
|
|
872
1004
|
field 5, 'enum', 'undocumented_field_5'
|
873
1005
|
field 6, 'enum', 'undocumented_field_6'
|
874
1006
|
field 7, 'enum', 'undocumented_field_7'
|
875
|
-
field 8, '
|
1007
|
+
field 8, 'enum', 'undocumented_field_8'
|
876
1008
|
field 9, 'uint8', 'undocumented_field_9'
|
877
1009
|
field 10, 'uint16', 'undocumented_field_10'
|
878
1010
|
field 11, 'uint16', 'calibration_factor', :scale => 10
|
@@ -886,6 +1018,12 @@ module Fit4Ruby
|
|
886
1018
|
field 19, 'uint8z', 'undocumented_field_19'
|
887
1019
|
field 20, 'uint8z', 'undocumented_field_20'
|
888
1020
|
field 21, 'uint16', 'undocumented_field_21'
|
1021
|
+
field 25, 'uint16', 'undocumented_field_25'
|
1022
|
+
field 26, 'uint16', 'undocumented_field_26'
|
1023
|
+
field 27, 'uint8', 'undocumented_field_27'
|
1024
|
+
field 28, 'uint8', 'undocumented_field_28'
|
1025
|
+
field 29, 'uint8', 'undocumented_field_29'
|
1026
|
+
field 30, 'uint8', 'undocumented_field_30'
|
889
1027
|
field 24, 'enum', 'undocumented_field_24'
|
890
1028
|
field 31, 'uint8', 'undocumented_field_31'
|
891
1029
|
field 32, 'uint16', 'undocumented_field_32'
|
@@ -907,19 +1045,35 @@ module Fit4Ruby
|
|
907
1045
|
field 48, 'enum', 'undocumented_field_48'
|
908
1046
|
field 50, 'uint8', 'undocumented_field_50'
|
909
1047
|
field 51, 'enum', 'undocumented_field_51'
|
910
|
-
field
|
1048
|
+
# The type of this field changed from 'uint8' to 'enum' in more recent
|
1049
|
+
# devices. No idea why and what the proper selection field should be.
|
1050
|
+
alt_field 52, 'undocumented_field_51' do
|
1051
|
+
field :default, 'uint8', 'undocumented_field_52_0'
|
1052
|
+
field 0, 'enum', 'undocumented_field_52_1'
|
1053
|
+
end
|
911
1054
|
field 53, 'uint8', 'undocumented_field_53'
|
1055
|
+
field 54, 'enum', 'undocumented_field_54'
|
912
1056
|
field 55, 'uint16', 'undocumented_field_55'
|
913
1057
|
field 56, 'uint16', 'undocumented_field_56'
|
914
1058
|
field 57, 'uint16', 'undocumented_field_57'
|
915
1059
|
field 58, 'enum', 'undocumented_field_58'
|
916
1060
|
field 59, 'uint8', 'undocumented_field_59'
|
1061
|
+
field 60, 'enum', 'undocumented_field_60'
|
1062
|
+
field 61, 'enum', 'undocumented_field_61'
|
917
1063
|
field 62, 'uint8', 'undocumented_field_62'
|
918
1064
|
field 63, 'enum', 'undocumented_field_63'
|
919
1065
|
field 64, 'uint32', 'undocumented_field_64'
|
920
1066
|
field 65, 'uint32', 'undocumented_field_65'
|
1067
|
+
field 70, 'uint32', 'undocumented_field_70'
|
1068
|
+
field 71, 'enum', 'undocumented_field_71'
|
1069
|
+
field 73, 'uint16z', 'undocumented_field_73'
|
921
1070
|
field 254, 'uint16', 'message_index'
|
922
1071
|
|
1072
|
+
# Not part of the official ANT SDK doc.
|
1073
|
+
message 160, 'undocumented_160'
|
1074
|
+
field 3, 'uint32', 'undocumented_field_3'
|
1075
|
+
field 4, 'uint32', 'undocumented_field_4'
|
1076
|
+
|
923
1077
|
# Not part of the official ANT SDK doc.
|
924
1078
|
message 188, 'undocumented_188'
|
925
1079
|
field 0, 'enum', 'undocumented_field_0'
|
@@ -1030,6 +1184,18 @@ module Fit4Ruby
|
|
1030
1184
|
message 269, 'undocumented_269'
|
1031
1185
|
field 0, 'uint8', 'undocumented_field_0'
|
1032
1186
|
field 1, 'uint8', 'undocumented_field_1'
|
1187
|
+
field 2, 'uint8', 'undocumented_field_2'
|
1188
|
+
field 253, 'uint32', 'timestamp', :type => 'date_time'
|
1189
|
+
|
1190
|
+
# Not part of the official ANT SDK doc.
|
1191
|
+
message 261, 'undocumented_261'
|
1192
|
+
field 0, 'enum', 'undocumented_field_0'
|
1193
|
+
field 1, 'sint32', 'undocumented_field_1'
|
1194
|
+
field 2, 'sint32', 'undocumented_field_2'
|
1195
|
+
field 3, 'uint32', 'undocumented_field_3'
|
1196
|
+
field 7, 'uint8', 'undocumented_field_7'
|
1197
|
+
field 8, 'uint8', 'undocumented_field_8'
|
1198
|
+
field 9, 'uint8', 'undocumented_field_9'
|
1033
1199
|
field 253, 'uint32', 'timestamp', :type => 'date_time'
|
1034
1200
|
|
1035
1201
|
# Not part of the official ANT SDK doc.
|
@@ -1042,6 +1208,44 @@ module Fit4Ruby
|
|
1042
1208
|
field 0, 'uint16', 'load'
|
1043
1209
|
field 1, 'uint32', 'timestamp', :type => 'date_time'
|
1044
1210
|
|
1211
|
+
# Not part of the official ANT SDK doc.
|
1212
|
+
message 288, 'undocumented_288'
|
1213
|
+
field 0, 'sint8', 'undocumented_field_0'
|
1214
|
+
field 1, 'sint8', 'undocumented_field_1'
|
1215
|
+
field 2, 'uint16', 'undocumented_field_2'
|
1216
|
+
field 251, 'byte', 'undocumented_field_251'
|
1217
|
+
field 252, 'uint8', 'undocumented_field_252'
|
1218
|
+
field 253, 'uint32', 'timestamp', :type => 'date_time'
|
1219
|
+
|
1220
|
+
# Not part of the official ANT SDK doc.
|
1221
|
+
message 325, 'undocumented_325'
|
1222
|
+
field 0, 'uint8', 'undocumented_field_0'
|
1223
|
+
field 1, 'uint8', 'undocumented_field_1'
|
1224
|
+
field 2, 'uint8', 'undocumented_field_2'
|
1225
|
+
field 3, 'uint8', 'undocumented_field_3'
|
1226
|
+
field 4, 'uint8', 'undocumented_field_4'
|
1227
|
+
field 5, 'uint8', 'undocumented_field_5'
|
1228
|
+
field 253, 'uint32', 'timestamp', :type => 'date_time'
|
1229
|
+
|
1230
|
+
# Not part of the official ANT SDK doc.
|
1231
|
+
message 326, 'undocumented_326'
|
1232
|
+
field 0, 'uint32', 'undocumented_field_0'
|
1233
|
+
field 1, 'uint32', 'undocumented_field_1'
|
1234
|
+
field 253, 'uint32', 'timestamp', :type => 'date_time'
|
1235
|
+
|
1236
|
+
# Not part of the official ANT SDK doc.
|
1237
|
+
message 327, 'undocumented_327'
|
1238
|
+
field 0, 'uint8', 'undocumented_field_0'
|
1239
|
+
field 1, 'uint8', 'undocumented_field_1'
|
1240
|
+
field 2, 'uint8', 'undocumented_field_2'
|
1241
|
+
field 3, 'uint32', 'undocumented_field_3'
|
1242
|
+
field 4, 'uint32', 'undocumented_field_4'
|
1243
|
+
field 5, 'uint32', 'undocumented_field_5'
|
1244
|
+
field 6, 'enum', 'undocumented_field_6'
|
1245
|
+
field 251, 'byte', 'undocumented_field_251'
|
1246
|
+
field 252, 'uint8', 'undocumented_field_252'
|
1247
|
+
field 253, 'uint32', 'timestamp', :type => 'date_time'
|
1248
|
+
|
1045
1249
|
# Not part of the official ANT SDK doc.
|
1046
1250
|
message 1024, 'undocumented_1024'
|
1047
1251
|
field 0, 'enum', 'undocumented_field_0'
|