Class: Cosmos::PacketItemParser

Inherits:
Object
  • Object
show all
Defined in:
lib/cosmos/packets/parsers/packet_item_parser.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(parser) ⇒ PacketItemParser

Returns a new instance of PacketItemParser.

Parameters:



27
28
29
30
# File 'lib/cosmos/packets/parsers/packet_item_parser.rb', line 27

def initialize(parser)
  @parser = parser
  @usage = get_usage()
end

Class Method Details

.parse(parser, packet, cmd_or_tlm) ⇒ Object

Parameters:

  • parser (ConfigParser)

    Configuration parser

  • packet (Packet)

    The packet the item should be added to

  • cmd_or_tlm (String)

    Whether this is :bn



20
21
22
23
24
# File 'lib/cosmos/packets/parsers/packet_item_parser.rb', line 20

def self.parse(parser, packet, cmd_or_tlm)
  parser = PacketItemParser.new(parser)
  parser.verify_parameters(cmd_or_tlm)
  parser.create_packet_item(packet, cmd_or_tlm)
end

Instance Method Details

#create_packet_item(packet, cmd_or_tlm) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/cosmos/packets/parsers/packet_item_parser.rb', line 45

def create_packet_item(packet, cmd_or_tlm)
  item = PacketItem.new(@parser.parameters[0],
                        get_bit_offset(),
                        get_bit_size(),
                        get_data_type(),
                        get_endianness(packet),
                        get_array_size(),
                        :ERROR) # overflow
  if cmd_or_tlm == PacketConfig::COMMAND
    item.range = get_range()
    item.default = get_default()
  end
  item.id_value = get_id_value()
  item.description = get_description()
  if append?
    item = packet.append(item)
  else
    item = packet.define(item)
  end
  item
rescue => err
  raise @parser.error(err, @usage)
end

#verify_parameters(cmd_or_tlm) ⇒ Object



32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/cosmos/packets/parsers/packet_item_parser.rb', line 32

def verify_parameters(cmd_or_tlm)
  if @parser.keyword.include?('ITEM') && cmd_or_tlm == PacketConfig::COMMAND
    raise @parser.error("ITEM types are only valid with TELEMETRY", @usage)
  elsif @parser.keyword.include?('PARAMETER') && cmd_or_tlm == PacketConfig::TELEMETRY
    raise @parser.error("PARAMETER types are only valid with COMMAND", @usage)
  end
  # The usage is formatted with brackets <XXX> around each option so
  # count the number of open brackets to determine the number of options
  max_options = @usage.count("<")
  # The last two options (description and endianness) are optional
  @parser.verify_num_parameters(max_options-2, max_options, @usage)
end