Class: Fit4Ruby::FieldDescription

Inherits:
FitDataRecord show all
Defined in:
lib/fit4ruby/FieldDescription.rb

Overview

This class corresponds to the FieldDescription FIT message.

Constant Summary

Constants inherited from FitDataRecord

Fit4Ruby::FitDataRecord::RecordOrder

Instance Attribute Summary

Attributes inherited from FitDataRecord

#message

Instance Method Summary collapse

Methods inherited from FitDataRecord

#<=>, #==, #get, #get_as, #inspect, #set, #set_field_values, #write

Methods included from Converters

#conversion_factor, #fit_time_to_time, #secsToDHMS, #secsToHM, #secsToHMS, #speedToPace, #time_to_fit_time

Constructor Details

#initialize(field_values = {}) ⇒ FieldDescription

Create a new FieldDescription object.

Parameters:

  • field_values (Hash) (defaults to: {})

    Hash that provides initial values for certain fields.



25
26
27
28
# File 'lib/fit4ruby/FieldDescription.rb', line 25

def initialize(field_values = {})
  super('field_description')
  set_field_values(field_values)
end

Instance Method Details

#create_global_definition(fit_entity) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/fit4ruby/FieldDescription.rb', line 30

def create_global_definition(fit_entity)
  messages = fit_entity.developer_fit_messages
  unless (gfm = GlobalFitMessages[@native_mesg_num])
    Log.error "Developer field description references unknown global " +
      "message number #{@native_mesg_num}"
    return
  end

  if @developer_data_index >=
       fit_entity.top_level_record.developer_data_ids.size
     Log.error "Developer data index #{@developer_data_index} is too large"
     return
  end

  msg = messages[@native_mesg_num] ||
    messages.message(@native_mesg_num, gfm.name)
  unless (@fit_base_type_id & 0x7F) < FIT_TYPE_DEFS.size
    Log.error "fit_base_type_id #{@fit_base_type_id} is too large"
    return
  end

  name = "_#{@developer_data_index}_#{@field_name}"
  # A fit file may include multiple definitions of the same field. We
  # ignore all subsequent definitions.
  return if msg.has_field?(name)

  options = {}
  options[:scale] = @scale if @scale
  options[:offset] = @offset if @offset
  options[:array] = @array if @array
  options[:unit] = @units
  msg.field(@field_definition_number,
            FIT_TYPE_DEFS[@fit_base_type_id & 0x7F][1],
            name, options)
end