class F4R::GlobalFit::Helper
Helper
class to get all types and messages in a usable format for F4R
.
Public Instance Methods
get_base_types()
click to toggle source
Provides base types to {GlobalFit.base_types}.
@return [Hash]
# File lib/f4r.rb, line 519 def get_base_types csv = CSV.read(Config.directory + '/base_types.csv', converters: %i[numeric]) csv[1..-1].inject([]) do |r, row| r << { number: row[0], fit: row[1].to_sym, bindata: row[2].to_sym, bindata_en: row[3].to_sym, endian: row[4], bytes: row[5], undef: row[6], };r end end
get_messages()
click to toggle source
Provides messages to {GlobalFit.messages}.
@return [Array<Hash>]
# File lib/f4r.rb, line 457 def get_messages messages = {} profile_messages.keys.each do |name| messages[name] = [] if undocumented_messages[name] messages[name] = profile_messages[name] | undocumented_messages[name] else messages[name] = profile_messages[name] end end (undocumented_messages.keys - messages.keys).each do |name| messages[name] = undocumented_messages[name] end messages.keys.inject([]) do |r, name| type = GlobalFit.types[:mesg_num][:values].find { |v| v[:value_name] == name } source = undocumented_types[:mesg_num][:values]. find { |t| t[:value_name] == name } unless type Log.error <<~ERROR Message "#{name}" not found in FIT profile or undocumented messages types. ERROR end r << { name: name, number: type[:value].to_i, source: source ? "F4R #{VERSION}" : "FIT SDK #{FIT_PROFILE_REV}", fields: messages[name.to_sym].select { |f| f[:field_def] } };r end end
get_types()
click to toggle source
Provides types to {GlobalFit.types}.
@return [Hash]
# File lib/f4r.rb, line 498 def get_types types = {} profile_types.keys.each do |name| types[name] = {} if undocumented_types[name] values = profile_types[name][:values] | undocumented_types[name][:values] types[name][:values] = values else types[name] = profile_types[name] end end types end
Private Instance Methods
messages_csv_to_hash(csv, source)
click to toggle source
Converts CSV messages into a Hash.
@return [Hash]
# File lib/f4r.rb, line 593 def messages_csv_to_hash(csv, source) current_message = '' csv[2..-1].inject({}) do |r, row| if row[0].is_a? String current_message = row[0].to_sym r[current_message] = [] else if row[1] && row[2] r[current_message] << { source: source, field_def: row[1], field_name: row[2].to_sym, field_type: row[3].to_sym, array: row[4], components: row[5], scale: row[6], offset: row[7], units: row[8], bits: row[9], accumulate: row[10], ref_field_name: row[11], ref_field_value: row[12], comment: row[13], products: row[14], example: row[15] } end end r end end
profile_messages()
click to toggle source
Provides FIT SDK messages to {GlobalFit.messages}.
@return [Hash]
# File lib/f4r.rb, line 541 def profile_messages @profile_messages ||= messages_csv_to_hash( CSV.read( Config.directory + '/profile_messages.csv', converters: %i[numeric]), "FIT SDK #{FIT_PROFILE_REV}") end
profile_types()
click to toggle source
Provides FIT SDK types to {GlobalFit.types}.
@return [Hash]
# File lib/f4r.rb, line 567 def profile_types @profile_types ||= types_csv_to_hash( CSV.read( Config.directory + '/profile_types.csv', converters: %i[numeric]), "FIT SDK #{FIT_PROFILE_REV}") end
types_csv_to_hash(csv, source)
click to toggle source
Converts CSV types into a Hash.
@return [Hash]
# File lib/f4r.rb, line 630 def types_csv_to_hash(csv, source) current_type = '' csv[1..-1].inject({}) do |r, row| if row[0].is_a? String current_type = row[0].to_sym r[current_type] = { base_type: row[1].to_sym, values: [] } else unless row.compact.size.zero? r[current_type][:values] << { source: source, value_name: row[2].to_sym, value: row[3], comment: row[4] } end end r end end
undocumented_messages()
click to toggle source
Provides undocumented messages to {GlobalFit.messages}.
@return [Hash]
# File lib/f4r.rb, line 554 def undocumented_messages @undocumented_messages ||= messages_csv_to_hash( CSV.read( Config.directory + '/undocumented_messages.csv', converters: %i[numeric]), "F4R #{VERSION}") end
undocumented_types()
click to toggle source
Provides undocumented types to {GlobalFit.types}.
@return [Hash]
# File lib/f4r.rb, line 580 def undocumented_types @undocumented_types ||= types_csv_to_hash( CSV.read( Config.directory + '/undocumented_types.csv', converters: %i[numeric]), "F4R #{VERSION}") end