fit4ruby 1.2.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6e4beacf9c830030659639298786cee59c0ebfee
4
- data.tar.gz: 3ea6167aa94d87c9d1d0437ab0ae584babc1b586
3
+ metadata.gz: d7421c4ad0cf94e98f1ee6eece22948d8fc2f6b4
4
+ data.tar.gz: 394e28074fea568b49142c6e5548226046241a82
5
5
  SHA512:
6
- metadata.gz: d496ad8d7e68b229b95e6f51e7f1f9f9d1ae06861824858c6d093a185030782773215dea93160b7a692557b2386fc5b51f4c958e08440a7ca5938791204771e8
7
- data.tar.gz: 65dcb11f85cfcccb61a64f3da8144d2f557f06e18a3f11f8df4eac6607aab9e32346b4170b6379ddbb95276a7610f41802d8e459c4a8f720195fc007ee381ad4
6
+ metadata.gz: d8e86bad757aec6cc33c0030d6fc17cdad765ba661c9e48ae09d643bb4497c902e79207fbc2a57549da136d5f7a5d7c616532d8f564c4e8bbdf9fb343b9117bb
7
+ data.tar.gz: 8b262ae977668501bb9cedb8982e17065f5ba997da36bb8e790c0b8faa98a724a8ae74d70e7cef24ff48c9eef4efc8a5f734fe00d0549a64c79fb20826b3a087
data/fit4ruby.gemspec CHANGED
@@ -10,8 +10,9 @@ GEM_SPEC = Gem::Specification.new do |spec|
10
10
  spec.summary = 'Library to read GARMIN FIT files.'
11
11
  spec.description = <<EOT
12
12
  This library can read and write FIT files and convert them into a Ruby data
13
- structure for easy processing. This library was written for the Garmin FR620.
14
- Fit files from other devices may or may not work.
13
+ structure for easy processing. This library was written for Garmin devices
14
+ like the FR620, Fenix 3 and Fenix 3 HR. Fit files from other devices may work
15
+ as well but have not been tested.
15
16
  EOT
16
17
  spec.authors = [ 'Chris Schlaeger' ]
17
18
  spec.email = 'chris@linux.com'
@@ -0,0 +1,50 @@
1
+ #!/usr/bin/env ruby -w
2
+ # encoding: UTF-8
3
+ #
4
+ # = DumpedField.rb -- Fit4Ruby - FIT file processing library for Ruby
5
+ #
6
+ # Copyright (c) 2016 by Chris Schlaeger <cs@taskjuggler.org>
7
+ #
8
+ # This program is free software; you can redistribute it and/or modify
9
+ # it under the terms of version 2 of the GNU General Public License as
10
+ # published by the Free Software Foundation.
11
+ #
12
+
13
+ module Fit4Ruby
14
+
15
+ # If the user has requested a dump of the records, this class is used to
16
+ # capture a subset of the field related information for the later textual
17
+ # dump.
18
+ class DumpedField
19
+
20
+ attr_reader :message_number, :field_number
21
+
22
+ # Create a new field dump record.
23
+ # @param message_number [Fixnum] The global message number of the message
24
+ # this field belongs to.
25
+ # @param field_number [Fixnum] The number of the FIT message field
26
+ # @param name [String] The name of the field
27
+ # @param type [Symbol] The type of the field
28
+ # @param value [String] A human readable dump of the field value
29
+ def initialize(message_number, field_number, name, type, value)
30
+ @message_number = message_number
31
+ @field_number = field_number
32
+ @name = name
33
+ @type = type
34
+ @value = value
35
+ end
36
+
37
+ def <=>(f)
38
+ @field_number <=> f.field_number
39
+ end
40
+
41
+ def to_s(index)
42
+ "[#{'%03d' % @message_number}:#{'%03d' % index}:" +
43
+ "#{'%03d' % @field_number}:" +
44
+ "#{"%-7s" % @type}] #{@name}: " + "#{@value}"
45
+ end
46
+
47
+ end
48
+
49
+ end
50
+
@@ -144,8 +144,14 @@ module Fit4Ruby
144
144
  end
145
145
 
146
146
  def dump_records(records)
147
+ # For each message number we keep a count for how often we already had
148
+ # this kind of message.
149
+ message_counters = Hash.new(0)
150
+
147
151
  records.each do |record|
148
- record.dump
152
+ record.dump(message_counters[record.number])
153
+ # Increase the counter for this message number.
154
+ message_counters[record.number] += 1
149
155
  end
150
156
  end
151
157
 
@@ -14,6 +14,7 @@ require 'bindata'
14
14
  require 'fit4ruby/Log'
15
15
  require 'fit4ruby/GlobalFitMessage'
16
16
  require 'fit4ruby/FitFileEntity'
17
+ require 'fit4ruby/DumpedField'
17
18
 
18
19
  module Fit4Ruby
19
20
 
@@ -78,8 +79,12 @@ module Fit4Ruby
78
79
  (filter.field_names.nil? ||
79
80
  filter.field_names.include?(field_name)) &&
80
81
  (value != field.undefined_value || !filter.ignore_undef)
81
- fields_dump << [ field.type(true), field_name,
82
- (field_def ? field_def : field).to_s(value) ]
82
+ fields_dump << DumpedField.new(
83
+ @global_message_number,
84
+ field.field_definition_number.snapshot,
85
+ field_name,
86
+ field.type(true),
87
+ (field_def ? field_def : field).to_s(value))
83
88
  end
84
89
  end
85
90
  end
@@ -16,6 +16,7 @@ require 'fit4ruby/FitDefinition'
16
16
  require 'fit4ruby/FitMessageRecord'
17
17
  require 'fit4ruby/FitFilter'
18
18
  require 'fit4ruby/FitFileEntity'
19
+ require 'fit4ruby/DumpedField'
19
20
 
20
21
  module Fit4Ruby
21
22
 
@@ -25,6 +26,8 @@ module Fit4Ruby
25
26
  # kind of record this is.
26
27
  class FitRecord
27
28
 
29
+ attr_reader :number
30
+
28
31
  def initialize(definitions)
29
32
  @definitions = definitions
30
33
  @name = @number = @fields = nil
@@ -72,13 +75,13 @@ module Fit4Ruby
72
75
  self
73
76
  end
74
77
 
75
- def dump
78
+ def dump(index)
76
79
  return unless @fields
77
80
 
78
81
  begin
79
82
  puts "Message #{@number}: #{@name}" unless @fields.empty?
80
- @fields.each do |type, name, value|
81
- puts " [#{"%-7s" % type}] #{name}: " + "#{value}"
83
+ @fields.sort.each do |field|
84
+ puts field.to_s(index)
82
85
  end
83
86
  rescue Errno::EPIPE
84
87
  # Avoid ugly error message when aborting a less/more pipe.
@@ -444,7 +444,7 @@ module Fit4Ruby
444
444
  field 8, 'uint16', 'recovery_time', :scale => 60, :unit => 'hours'
445
445
  field 9, 'uint16', 'undocumented_field_9' # maybe activity measurement
446
446
  field 10, 'uint8', 'undocumented_field_10'
447
- field 11, 'uint16', 'undocumented_field_11'
447
+ field 11, 'uint16', 'running_lactate_threshold_heart_rate', :unit => 'bpm'
448
448
  field 12, 'uint16', 'undocumented_field_12'
449
449
  field 13, 'uint16', 'undocumented_field_13'
450
450
  field 14, 'uint8', 'undocumented_field_14'
@@ -517,9 +517,9 @@ module Fit4Ruby
517
517
  field 11, 'enum', 'undocumented_field_11'
518
518
  field 12, 'enum', 'undocumented_field_12'
519
519
  field 13, 'uint8', 'undocumented_field_13'
520
- field 14, 'uint16', 'undocumented_field_14'
521
- field 15, 'uint16', 'undocumented_field_15'
522
- field 16, 'uint16', 'undocumented_field_16'
520
+ field 14, 'uint16', 'running_lactate_threshold_heart_rate', :unit => 'bpm'
521
+ field 15, 'uint16', 'running_lactate_threshold_speed', :scale => 100, :unit => 'm/s'
522
+ field 16, 'uint16', 'undocumented_field_16' # very correlated to 14 and 15
523
523
  field 17, 'sint8', 'undocumented_field_17'
524
524
  field 18, 'uint8', 'undocumented_field_18'
525
525
  field 19, 'uint8', 'undocumented_field_19'
@@ -1,4 +1,4 @@
1
1
  module Fit4Ruby
2
2
  # The version number of the library.
3
- VERSION = '1.2.0'
3
+ VERSION = '1.3.0'
4
4
  end
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: 1.2.0
4
+ version: 1.3.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: 2016-06-19 00:00:00.000000000 Z
11
+ date: 2016-07-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bindata
@@ -68,8 +68,9 @@ dependencies:
68
68
  version: 1.6.4
69
69
  description: |
70
70
  This library can read and write FIT files and convert them into a Ruby data
71
- structure for easy processing. This library was written for the Garmin FR620.
72
- Fit files from other devices may or may not work.
71
+ structure for easy processing. This library was written for Garmin devices
72
+ like the FR620, Fenix 3 and Fenix 3 HR. Fit files from other devices may work
73
+ as well but have not been tested.
73
74
  email: chris@linux.com
74
75
  executables: []
75
76
  extensions: []
@@ -86,6 +87,7 @@ files:
86
87
  - lib/fit4ruby/Converters.rb
87
88
  - lib/fit4ruby/DataSources.rb
88
89
  - lib/fit4ruby/DeviceInfo.rb
90
+ - lib/fit4ruby/DumpedField.rb
89
91
  - lib/fit4ruby/EPO_Data.rb
90
92
  - lib/fit4ruby/Event.rb
91
93
  - lib/fit4ruby/FileCreator.rb