fit4ruby 3.0.0 → 3.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/fit4ruby/Activity.rb +3 -3
- data/lib/fit4ruby/CRC16.rb +58 -0
- data/lib/fit4ruby/FitFile.rb +15 -39
- data/lib/fit4ruby/FitHeader.rb +33 -13
- data/lib/fit4ruby/GlobalFitDictionaries.rb +89 -0
- data/lib/fit4ruby/GlobalFitMessages.rb +23 -5
- data/lib/fit4ruby/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d789b2e373decc4dfff48739b65a320c66da88fd
|
4
|
+
data.tar.gz: 1a40f4aac55b45f66cb082b6ffef4ca6e3c3ed9e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2ec0e96be6dd2d0cf44b03a5ac41197a693d4a4b8861063a55f7d37e98252656f380d8cb57bb4d77476d7f805fdab1668c598f5ec81208e7225102e151b12e8a
|
7
|
+
data.tar.gz: d92c14c4af7c98c043d3a675bb8eefa741fe30b18a05d4606358cd69a49c05b4564355b1c213dac9c9196d1b1c2f0bf5122bca7808652db310fccf1c59fe92f1
|
data/lib/fit4ruby/Activity.rb
CHANGED
@@ -261,10 +261,10 @@ module Fit4Ruby
|
|
261
261
|
@events.each do |e|
|
262
262
|
return e.vo2max if e.event == 'vo2max'
|
263
263
|
end
|
264
|
-
# Then check the
|
264
|
+
# Then check the user_data entries for a metmax entry. METmax * 3.5
|
265
265
|
# is same value as VO2max.
|
266
|
-
@
|
267
|
-
return u.metmax * 3.5 if u.metmax
|
266
|
+
@user_data.each do |u|
|
267
|
+
return ((u.metmax * 1000.0) * 3.5) / 1024.0 if u.metmax
|
268
268
|
end
|
269
269
|
|
270
270
|
nil
|
@@ -0,0 +1,58 @@
|
|
1
|
+
#!/usr/bin/env ruby -w
|
2
|
+
# encoding: UTF-8
|
3
|
+
#
|
4
|
+
# = CRC16.rb -- Fit4Ruby - FIT file processing library for Ruby
|
5
|
+
#
|
6
|
+
# Copyright (c) 2014, 2015, 2016, 2017, 2018
|
7
|
+
# by Chris Schlaeger <cs@taskjuggler.org>
|
8
|
+
#
|
9
|
+
# This program is free software; you can redistribute it and/or modify
|
10
|
+
# it under the terms of version 2 of the GNU General Public License as
|
11
|
+
# published by the Free Software Foundation.
|
12
|
+
#
|
13
|
+
|
14
|
+
module Fit4Ruby
|
15
|
+
|
16
|
+
module CRC16
|
17
|
+
|
18
|
+
def write_crc(io, start_pos, end_pos)
|
19
|
+
# Compute the checksum over the data section of the file and append it
|
20
|
+
# to the file. Ideally, we should compute the CRC from data in memory
|
21
|
+
# instead of the file data.
|
22
|
+
crc = compute_crc(io, start_pos, end_pos)
|
23
|
+
io.seek(end_pos)
|
24
|
+
BinData::Uint16le.new(crc).write(io)
|
25
|
+
|
26
|
+
crc
|
27
|
+
end
|
28
|
+
|
29
|
+
def compute_crc(io, start_pos, end_pos)
|
30
|
+
crc_table = [
|
31
|
+
0x0000, 0xCC01, 0xD801, 0x1400, 0xF001, 0x3C00, 0x2800, 0xE401,
|
32
|
+
0xA001, 0x6C00, 0x7800, 0xB401, 0x5000, 0x9C01, 0x8801, 0x4400
|
33
|
+
]
|
34
|
+
|
35
|
+
io.seek(start_pos)
|
36
|
+
|
37
|
+
crc = 0
|
38
|
+
while io.pos < end_pos
|
39
|
+
if io.eof?
|
40
|
+
raise IOError, "Premature end of file"
|
41
|
+
end
|
42
|
+
|
43
|
+
byte = io.readbyte
|
44
|
+
|
45
|
+
0.upto(1) do |i|
|
46
|
+
tmp = crc_table[crc & 0xF]
|
47
|
+
crc = (crc >> 4) & 0x0FFF
|
48
|
+
crc = crc ^ tmp ^ crc_table[(byte >> (4 * i)) & 0xF]
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
crc
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
|
data/lib/fit4ruby/FitFile.rb
CHANGED
@@ -3,7 +3,8 @@
|
|
3
3
|
#
|
4
4
|
# = FitFile.rb -- Fit4Ruby - FIT file processing library for Ruby
|
5
5
|
#
|
6
|
-
# Copyright (c) 2014, 2015
|
6
|
+
# Copyright (c) 2014, 2015, 2016, 2017, 2018
|
7
|
+
# by Chris Schlaeger <cs@taskjuggler.org>
|
7
8
|
#
|
8
9
|
# This program is free software; you can redistribute it and/or modify
|
9
10
|
# it under the terms of version 2 of the GNU General Public License as
|
@@ -11,6 +12,7 @@
|
|
11
12
|
#
|
12
13
|
|
13
14
|
require 'fit4ruby/Log'
|
15
|
+
require 'fit4ruby/CRC16'
|
14
16
|
require 'fit4ruby/FileNameCoder'
|
15
17
|
require 'fit4ruby/FitHeader'
|
16
18
|
require 'fit4ruby/FitFileEntity'
|
@@ -24,6 +26,8 @@ module Fit4Ruby
|
|
24
26
|
|
25
27
|
class FitFile
|
26
28
|
|
29
|
+
include CRC16
|
30
|
+
|
27
31
|
def initialize()
|
28
32
|
@header = nil
|
29
33
|
end
|
@@ -43,9 +47,14 @@ module Fit4Ruby
|
|
43
47
|
offset = io.pos
|
44
48
|
|
45
49
|
header = FitHeader.read(io)
|
46
|
-
header.check
|
47
50
|
|
48
|
-
|
51
|
+
# If the header has a CRC the header is not included in the
|
52
|
+
# checksumed bytes. Otherwise it is included.
|
53
|
+
check_crc(io, header.has_crc? ? header.header_size : 0,
|
54
|
+
offset + header.end_pos)
|
55
|
+
|
56
|
+
# Rewind back to the beginning of the data right after the header.
|
57
|
+
io.seek(header.header_size)
|
49
58
|
|
50
59
|
entity = FitFileEntity.new
|
51
60
|
# This Array holds the raw data of the records that may be needed to
|
@@ -86,6 +95,7 @@ module Fit4Ruby
|
|
86
95
|
# Create a header object, but don't yet write it into the file.
|
87
96
|
header = FitHeader.new
|
88
97
|
start_pos = header.header_size
|
98
|
+
|
89
99
|
# Move the pointer behind the header section.
|
90
100
|
io.seek(start_pos)
|
91
101
|
id_mapper = FitMessageIdMapper.new
|
@@ -97,7 +107,6 @@ module Fit4Ruby
|
|
97
107
|
# Complete the data of the header section and write it at the start of
|
98
108
|
# the file.
|
99
109
|
header.data_size = end_pos - start_pos
|
100
|
-
header.crc = crc
|
101
110
|
io.seek(0)
|
102
111
|
header.write(io)
|
103
112
|
ensure
|
@@ -113,47 +122,14 @@ module Fit4Ruby
|
|
113
122
|
# Read the 2 CRC bytes from the end of the file
|
114
123
|
io.seek(end_pos)
|
115
124
|
crc_ref = io.readbyte.to_i | (io.readbyte.to_i << 8)
|
116
|
-
io.seek(start_pos)
|
117
125
|
|
118
126
|
unless crc == crc_ref
|
119
|
-
Log.
|
127
|
+
Log.error "Checksum error of segment #{start_pos} to #{end_pos} " +
|
128
|
+
"in file '#{@file_name}'. " +
|
120
129
|
"Computed 0x#{"%04X" % crc} instead of 0x#{"%04X" % crc_ref}."
|
121
130
|
end
|
122
131
|
end
|
123
132
|
|
124
|
-
def write_crc(io, start_pos, end_pos)
|
125
|
-
# Compute the checksum over the data section of the file and append it
|
126
|
-
# to the file. Ideally, we should compute the CRC from data in memory
|
127
|
-
# instead of the file data.
|
128
|
-
crc = compute_crc(io, start_pos, end_pos)
|
129
|
-
io.seek(end_pos)
|
130
|
-
BinData::Uint16le.new(crc).write(io)
|
131
|
-
|
132
|
-
crc
|
133
|
-
end
|
134
|
-
|
135
|
-
def compute_crc(io, start_pos, end_pos)
|
136
|
-
crc_table = [
|
137
|
-
0x0000, 0xCC01, 0xD801, 0x1400, 0xF001, 0x3C00, 0x2800, 0xE401,
|
138
|
-
0xA001, 0x6C00, 0x7800, 0xB401, 0x5000, 0x9C01, 0x8801, 0x4400
|
139
|
-
]
|
140
|
-
|
141
|
-
io.seek(start_pos)
|
142
|
-
|
143
|
-
crc = 0
|
144
|
-
while io.pos < end_pos
|
145
|
-
byte = io.readbyte
|
146
|
-
|
147
|
-
0.upto(1) do |i|
|
148
|
-
tmp = crc_table[crc & 0xF]
|
149
|
-
crc = (crc >> 4) & 0x0FFF
|
150
|
-
crc = crc ^ tmp ^ crc_table[(byte >> (4 * i)) & 0xF]
|
151
|
-
end
|
152
|
-
end
|
153
|
-
|
154
|
-
crc
|
155
|
-
end
|
156
|
-
|
157
133
|
def dump_records(records)
|
158
134
|
# For each message number we keep a count for how often we already had
|
159
135
|
# this kind of message.
|
data/lib/fit4ruby/FitHeader.rb
CHANGED
@@ -3,7 +3,8 @@
|
|
3
3
|
#
|
4
4
|
# = FitHeader.rb -- Fit4Ruby - FIT file processing library for Ruby
|
5
5
|
#
|
6
|
-
# Copyright (c) 2014
|
6
|
+
# Copyright (c) 2014, 2015, 2016, 2017, 2018
|
7
|
+
# by Chris Schlaeger <cs@taskjuggler.org>
|
7
8
|
#
|
8
9
|
# This program is free software; you can redistribute it and/or modify
|
9
10
|
# it under the terms of version 2 of the GNU General Public License as
|
@@ -12,41 +13,60 @@
|
|
12
13
|
|
13
14
|
require 'bindata'
|
14
15
|
require 'fit4ruby/Log'
|
16
|
+
require 'fit4ruby/CRC16'
|
15
17
|
|
16
18
|
module Fit4Ruby
|
17
19
|
|
18
20
|
class FitHeader < BinData::Record
|
19
21
|
|
22
|
+
include CRC16
|
23
|
+
|
20
24
|
endian :little
|
21
25
|
|
22
26
|
uint8 :header_size, :initial_value => 14
|
23
|
-
uint8 :protocol_version, :initial_value =>
|
27
|
+
uint8 :protocol_version, :initial_value => 32
|
24
28
|
uint16 :profile_version, :initial_value => 1012
|
25
29
|
uint32 :data_size, :initial_value => 0
|
26
30
|
string :data_type, :read_length => 4, :initial_value => '.FIT'
|
27
|
-
uint16 :crc, :initial_value => 0
|
31
|
+
uint16 :crc, :initial_value => 0, :onlyif => :has_crc?
|
32
|
+
|
33
|
+
def read(io)
|
34
|
+
super
|
28
35
|
|
29
|
-
|
30
|
-
|
31
|
-
Log.fatal "Unsupported header size #{header_size}"
|
36
|
+
unless header_size.snapshot == 12 || header_size.snapshot == 14
|
37
|
+
Log.fatal "Unsupported header size #{header_size.snapshot}"
|
32
38
|
end
|
33
|
-
unless data_type == '.FIT'
|
34
|
-
Log.fatal "Unknown file type #{data_type}"
|
39
|
+
unless data_type.snapshot == '.FIT'
|
40
|
+
Log.fatal "Unknown file type #{data_type.snapshot}"
|
35
41
|
end
|
42
|
+
if crc.snapshot != 0 &&
|
43
|
+
compute_crc(io, 0, header_size.snapshot - 2) != crc.snapshot
|
44
|
+
Log.fatal "CRC mismatch in header."
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def write(io)
|
49
|
+
super
|
50
|
+
|
51
|
+
write_crc(io, 0, header_size.snapshot - 2)
|
36
52
|
end
|
37
53
|
|
38
54
|
def dump
|
39
55
|
puts <<"EOT"
|
40
56
|
Fit File Header
|
41
|
-
Header Size: #{header_size}
|
42
|
-
Protocol Version: #{protocol_version}
|
43
|
-
Profile Version: #{profile_version}
|
44
|
-
Data Size: #{data_size}
|
57
|
+
Header Size: #{header_size.snapshot}
|
58
|
+
Protocol Version: #{protocol_version.snapshot}
|
59
|
+
Profile Version: #{profile_version.snapshot}
|
60
|
+
Data Size: #{data_size.snapshot}
|
45
61
|
EOT
|
46
62
|
end
|
47
63
|
|
64
|
+
def has_crc?
|
65
|
+
header_size.snapshot == 14
|
66
|
+
end
|
67
|
+
|
48
68
|
def end_pos
|
49
|
-
header_size
|
69
|
+
header_size.snapshot + data_size.snapshot
|
50
70
|
end
|
51
71
|
|
52
72
|
end
|
@@ -304,6 +304,8 @@ module Fit4Ruby
|
|
304
304
|
|
305
305
|
dict 'garmin_product'
|
306
306
|
entry 8, 'hrm_run_single_byte_product_id'
|
307
|
+
entry 9, 'bsm'
|
308
|
+
entry 10, 'bcm'
|
307
309
|
entry 1551, 'fenix'
|
308
310
|
# The Fenix3 is rumored to have a Mediatek MT3333 GPS chipset. Not sure if
|
309
311
|
# that would be a beter name.
|
@@ -470,7 +472,61 @@ module Fit4Ruby
|
|
470
472
|
entry 85, 'woodway'
|
471
473
|
entry 86, 'elite'
|
472
474
|
entry 95, 'stryd'
|
475
|
+
entry 96, 'icg'
|
476
|
+
entry 97, 'MiPulse'
|
477
|
+
entry 98, 'bsx_athletics'
|
478
|
+
entry 99, 'look'
|
479
|
+
entry 100, 'campagnolo_srl'
|
480
|
+
entry 101, 'body_bike_smart'
|
481
|
+
entry 102, 'praxisworks'
|
482
|
+
entry 103, 'limits_technology'
|
483
|
+
entry 104, 'topaction_technology'
|
484
|
+
entry 105, 'cosinuss'
|
485
|
+
entry 106, 'fitcare'
|
486
|
+
entry 107, 'magene'
|
487
|
+
entry 108, 'giant_manufacturing_co'
|
488
|
+
entry 109, 'tigrasport'
|
489
|
+
entry 110, 'salutron'
|
490
|
+
entry 111, 'technogym'
|
491
|
+
entry 112, 'bryton_sensors'
|
492
|
+
entry 113, 'latitude_limited'
|
493
|
+
entry 114, 'soaring_technology'
|
494
|
+
entry 115, 'igpsport'
|
495
|
+
entry 116, 'thinkrider'
|
496
|
+
entry 117, 'gopher_sport'
|
497
|
+
entry 118, 'waterrower'
|
473
498
|
entry 255, 'development'
|
499
|
+
entry 257, 'healthandlife'
|
500
|
+
entry 258, 'lezyne'
|
501
|
+
entry 259, 'scribe_labs'
|
502
|
+
entry 260, 'zwift'
|
503
|
+
entry 261, 'watteam'
|
504
|
+
entry 262, 'recon'
|
505
|
+
entry 263, 'favero_electronics'
|
506
|
+
entry 264, 'dynovelo'
|
507
|
+
entry 265, 'strava'
|
508
|
+
entry 266, 'precor'
|
509
|
+
entry 267, 'bryton'
|
510
|
+
entry 268, 'sram'
|
511
|
+
entry 269, 'navman'
|
512
|
+
entry 270, 'cobi'
|
513
|
+
entry 271, 'spivi'
|
514
|
+
entry 272, 'mio_magellan'
|
515
|
+
entry 273, 'evesports'
|
516
|
+
entry 274, 'sensitivus_gauge'
|
517
|
+
entry 275, 'podoon'
|
518
|
+
entry 276, 'life_time_fitness'
|
519
|
+
entry 277, 'falco_e_motors'
|
520
|
+
entry 278, 'minoura'
|
521
|
+
entry 279, 'cycliq'
|
522
|
+
entry 280, 'luxottica'
|
523
|
+
entry 281, 'trainer_road'
|
524
|
+
entry 282, 'the_sufferfest'
|
525
|
+
entry 283, 'fullspeedahead'
|
526
|
+
entry 284, 'virtualtraining'
|
527
|
+
entry 285, 'feedbacksports'
|
528
|
+
entry 286, 'omata'
|
529
|
+
entry 287, 'vdo'
|
474
530
|
entry 5759, 'actigraphcorp'
|
475
531
|
|
476
532
|
dict 'message_index'
|
@@ -560,6 +616,39 @@ module Fit4Ruby
|
|
560
616
|
entry 24, 'challenge'
|
561
617
|
entry 25, 'indoor_skiing'
|
562
618
|
entry 26, 'cardio_training'
|
619
|
+
entry 27, 'indoor_walking '
|
620
|
+
entry 28, 'e_bike_fitness '
|
621
|
+
entry 29, 'bmx'
|
622
|
+
entry 30, 'casual_walking '
|
623
|
+
entry 31, 'speed_walking'
|
624
|
+
entry 32, 'bike_to_run_transition '
|
625
|
+
entry 33, 'run_to_bike_transition '
|
626
|
+
entry 34, 'swim_to_bike_transition'
|
627
|
+
entry 35, 'atv'
|
628
|
+
entry 36, 'motocross'
|
629
|
+
entry 37, 'backcountry'
|
630
|
+
entry 38, 'resort '
|
631
|
+
entry 39, 'rc_drone '
|
632
|
+
entry 40, 'wingsuit '
|
633
|
+
entry 41, 'whitewater '
|
634
|
+
entry 42, 'skate_skiing '
|
635
|
+
entry 43, 'yoga '
|
636
|
+
entry 44, 'pilates'
|
637
|
+
entry 45, 'indoor_running '
|
638
|
+
entry 46, 'gravel_cycling '
|
639
|
+
entry 47, 'e_bike_mountain'
|
640
|
+
entry 48, 'commuting'
|
641
|
+
entry 49, 'mixed_surface'
|
642
|
+
entry 50, 'navigate '
|
643
|
+
entry 51, 'track_me '
|
644
|
+
entry 52, 'map'
|
645
|
+
entry 53, 'single_gas_diving'
|
646
|
+
entry 54, 'multi_gas_diving '
|
647
|
+
entry 55, 'gauge_diving '
|
648
|
+
entry 56, 'apnea_diving '
|
649
|
+
entry 57, 'apnea_hunting'
|
650
|
+
entry 58, 'virtual_activity '
|
651
|
+
entry 59, 'obstacle '
|
563
652
|
entry 254, 'all'
|
564
653
|
|
565
654
|
end
|
@@ -100,6 +100,7 @@ module Fit4Ruby
|
|
100
100
|
field 128, 'enum', 'undocumented_field_128'
|
101
101
|
field 133, 'enum', 'undocumented_field_133'
|
102
102
|
field 138, 'enum', 'undocumented_field_138'
|
103
|
+
field 144, 'enum', 'true_up_enabled'
|
103
104
|
|
104
105
|
message 3, 'user_profile'
|
105
106
|
field 0, 'string', 'friendly_name'
|
@@ -134,6 +135,7 @@ module Fit4Ruby
|
|
134
135
|
field 41, 'uint32', 'undocumented_field_41'
|
135
136
|
field 42, 'uint32', 'undocumented_field_42'
|
136
137
|
field 43, 'enum', 'undocumented_field_43'
|
138
|
+
field 253, 'uint32', 'timestamp', :type => 'date_time'
|
137
139
|
|
138
140
|
message 7, 'zones_target'
|
139
141
|
field 1, 'uint8', 'max_heart_rate'
|
@@ -202,6 +204,8 @@ module Fit4Ruby
|
|
202
204
|
field 55, 'enum', 'undocumented_field_55'
|
203
205
|
field 57, 'enum', 'undocumented_field_57'
|
204
206
|
field 60, 'enum', 'undocumented_field_60'
|
207
|
+
field 65, 'enum', 'undocumented_field_65'
|
208
|
+
field 66, 'enum', 'undocumented_field_66'
|
205
209
|
field 254, 'uint16', 'message_index'
|
206
210
|
|
207
211
|
message 18, 'session'
|
@@ -417,7 +421,11 @@ module Fit4Ruby
|
|
417
421
|
field 5, 'uint32', 'distance', :scale => 100, :unit => 'm'
|
418
422
|
field 6, 'uint16', 'speed', :scale => 1000, :unit => 'm/s'
|
419
423
|
field 7, 'uint16', 'power', :unit => 'watts'
|
424
|
+
field 8, 'byte', 'compressed_speed_distance', :array => true
|
425
|
+
field 9, 'sint16', 'grade', :scale => 100, :unit => '%'
|
426
|
+
field 10, 'uint8', 'resistence'
|
420
427
|
field 11, 'sint32', 'time_from_course', :scale => 1000, :unit => 's'
|
428
|
+
field 12, 'uint8', 'cycle_length', :scale => 100, :unit => 'm'
|
421
429
|
field 13, 'sint8', 'temperature', :unit => 'C'
|
422
430
|
field 14, 'uint32', 'undefined_field_14'
|
423
431
|
field 15, 'uint32', 'undefined_field_15'
|
@@ -572,6 +580,7 @@ module Fit4Ruby
|
|
572
580
|
field 4, 'enum', 'event_type', :dict => 'event_type'
|
573
581
|
field 5, 'uint32', 'local_timestamp', :type => 'date_time'
|
574
582
|
field 6, 'uint8', 'event_group'
|
583
|
+
field 7, 'uint8', 'undocumented_field_7'
|
575
584
|
field 253, 'uint32', 'timestamp', :type => 'date_time'
|
576
585
|
|
577
586
|
message 35, 'software'
|
@@ -581,6 +590,7 @@ module Fit4Ruby
|
|
581
590
|
message 49, 'file_creator'
|
582
591
|
field 0, 'uint16', 'software_version'
|
583
592
|
field 1, 'uint8', 'hardware_version'
|
593
|
+
field 2, 'string', 'undocumented_field_2'
|
584
594
|
field 254, 'uint16', 'message_index', :dict => 'message_index'
|
585
595
|
|
586
596
|
message 55, 'monitoring'
|
@@ -744,6 +754,10 @@ module Fit4Ruby
|
|
744
754
|
field 23, 'uint8', 'undocumented_field_23'
|
745
755
|
field 24, 'sint32', 'undocumented_field_24'
|
746
756
|
field 25, 'uint8', 'undocumented_field_25'
|
757
|
+
field 26, 'sint32', 'undocumented_field_26'
|
758
|
+
field 29, 'sint32', 'undocumented_field_29'
|
759
|
+
field 34, 'enum', 'undocumented_field_34'
|
760
|
+
field 35, 'uint32', 'undocumented_field_35'
|
747
761
|
field 253, 'uint32', 'timestamp', :type => 'date_time'
|
748
762
|
|
749
763
|
# Not part of the official ANT SDK doc. The message name is guessed and
|
@@ -812,6 +826,11 @@ module Fit4Ruby
|
|
812
826
|
field 62, 'uint8', 'undocumented_field_62'
|
813
827
|
field 254, 'uint16', 'message_index'
|
814
828
|
|
829
|
+
# Not part of the official ANT SDK doc.
|
830
|
+
message 188, 'undocumented_188'
|
831
|
+
field 0, 'enum', 'undocumented_field_0'
|
832
|
+
field 253, 'uint32', 'timestamp', :type => 'date_time'
|
833
|
+
|
815
834
|
message 206, 'field_description'
|
816
835
|
field 0, 'uint8', 'developer_data_index'
|
817
836
|
field 1, 'uint8', 'field_definition_number'
|
@@ -857,11 +876,10 @@ module Fit4Ruby
|
|
857
876
|
field 15, 'uint16', 'undocumented_field_15'
|
858
877
|
field 253, 'uint32', 'timestamp', :type => 'date_time'
|
859
878
|
|
860
|
-
|
861
|
-
|
862
|
-
field
|
863
|
-
field
|
864
|
-
field 2, 'sint8', 'level'
|
879
|
+
message 227, 'stress_level'
|
880
|
+
field 0, 'sint16', 'stress_level_value'
|
881
|
+
field 1, 'uint32', 'stress_level_time', :type => 'date_time'
|
882
|
+
field 2, 'sint8', 'undocumented_field_2'
|
865
883
|
|
866
884
|
message 1024, 'undocumented_1024'
|
867
885
|
field 0, 'enum', 'undocumented_field_0'
|
data/lib/fit4ruby/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fit4ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Schlaeger
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-06-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bindata
|
@@ -84,6 +84,7 @@ files:
|
|
84
84
|
- fit4ruby.gemspec
|
85
85
|
- lib/fit4ruby.rb
|
86
86
|
- lib/fit4ruby/Activity.rb
|
87
|
+
- lib/fit4ruby/CRC16.rb
|
87
88
|
- lib/fit4ruby/Converters.rb
|
88
89
|
- lib/fit4ruby/DataSources.rb
|
89
90
|
- lib/fit4ruby/DeveloperDataId.rb
|