Class: Cosmos::PacketItemParser
- Defined in:
- lib/cosmos/packets/parsers/packet_item_parser.rb
Class Method Summary collapse
Instance Method Summary collapse
- #create_packet_item(packet, cmd_or_tlm) ⇒ Object
-
#initialize(parser) ⇒ PacketItemParser
constructor
A new instance of PacketItemParser.
- #verify_parameters(cmd_or_tlm) ⇒ Object
Constructor Details
#initialize(parser) ⇒ PacketItemParser
Returns a new instance of PacketItemParser.
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
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 = @usage.count("<") # The last two options (description and endianness) are optional @parser.verify_num_parameters(-2, , @usage) end |