Class: Cosmos::PacketParser
- Defined in:
- lib/cosmos/packets/parsers/packet_parser.rb
Direct Known Subclasses
Class Method Summary collapse
- .check_for_duplicate(type, list, packet) ⇒ Object
- .check_item_data_types(packet) ⇒ Object
- .finish_create_command(packet, commands, warnings) ⇒ Object
- .finish_create_telemetry(packet, telemetry, latest_data, warnings) ⇒ Object
- .parse_command(parser, target_name, commands, warnings) ⇒ Object
- .parse_telemetry(parser, target_name, telemetry, latest_data, warnings) ⇒ Object
Instance Method Summary collapse
- #create_command(target_name, commands, warnings) ⇒ Object
-
#create_packet(target_name) ⇒ Object
private.
- #create_telemetry(target_name, telemetry, latest_data, warnings) ⇒ Object
-
#initialize(parser) ⇒ PacketParser
constructor
A new instance of PacketParser.
- #verify_parameters ⇒ Object
Constructor Details
#initialize(parser) ⇒ PacketParser
Returns a new instance of PacketParser.
68 69 70 |
# File 'lib/cosmos/packets/parsers/packet_parser.rb', line 68 def initialize(parser) @parser = parser end |
Class Method Details
.check_for_duplicate(type, list, packet) ⇒ Object
103 104 105 106 107 108 109 110 111 112 |
# File 'lib/cosmos/packets/parsers/packet_parser.rb', line 103 def self.check_for_duplicate(type, list, packet) msg = nil if list[packet.target_name] if list[packet.target_name][packet.packet_name] msg = "#{type} Packet #{packet.target_name} #{packet.packet_name} redefined." Logger.instance.warn msg end end msg end |
.check_item_data_types(packet) ⇒ Object
57 58 59 60 61 62 63 64 65 |
# File 'lib/cosmos/packets/parsers/packet_parser.rb', line 57 def self.check_item_data_types(packet) packet.sorted_items.each do |item| item.check_default_and_range_data_types() end rescue # Add the target name and packet name to the error message so the user # can debug where the error occurred raise $!, "#{packet.target_name} #{packet.packet_name} #{$!}", $!.backtrace end |
.finish_create_command(packet, commands, warnings) ⇒ Object
114 115 116 117 118 119 120 |
# File 'lib/cosmos/packets/parsers/packet_parser.rb', line 114 def self.finish_create_command(packet, commands, warnings) warning = PacketParser.check_for_duplicate('Command', commands, packet) warnings << warning if warning packet.define_reserved_items() commands[packet.target_name] ||= {} packet end |
.finish_create_telemetry(packet, telemetry, latest_data, warnings) ⇒ Object
122 123 124 125 126 127 128 129 130 131 132 |
# File 'lib/cosmos/packets/parsers/packet_parser.rb', line 122 def self.finish_create_telemetry(packet, telemetry, latest_data, warnings) warning = PacketParser.check_for_duplicate('Telemetry', telemetry, packet) warnings << warning if warning packet.define_reserved_items() unless telemetry[packet.target_name] telemetry[packet.target_name] = {} latest_data[packet.target_name] = {} end packet end |
.parse_command(parser, target_name, commands, warnings) ⇒ Object
31 32 33 34 35 |
# File 'lib/cosmos/packets/parsers/packet_parser.rb', line 31 def self.parse_command(parser, target_name, commands, warnings) parser = PacketParser.new(parser) parser.verify_parameters() parser.create_command(target_name, commands, warnings) end |
.parse_telemetry(parser, target_name, telemetry, latest_data, warnings) ⇒ Object
49 50 51 52 53 |
# File 'lib/cosmos/packets/parsers/packet_parser.rb', line 49 def self.parse_telemetry(parser, target_name, telemetry, latest_data, warnings) parser = PacketParser.new(parser) parser.verify_parameters() parser.create_telemetry(target_name, telemetry, latest_data, warnings) end |
Instance Method Details
#create_command(target_name, commands, warnings) ⇒ Object
78 79 80 81 |
# File 'lib/cosmos/packets/parsers/packet_parser.rb', line 78 def create_command(target_name, commands, warnings) packet = create_packet(target_name) PacketParser.finish_create_command(packet, commands, warnings) end |
#create_packet(target_name) ⇒ Object
private
90 91 92 93 94 95 96 97 98 99 100 101 |
# File 'lib/cosmos/packets/parsers/packet_parser.rb', line 90 def create_packet(target_name) params = @parser.parameters target_name = params[0].to_s.upcase if target_name == 'SYSTEM' packet_name = params[1].to_s.upcase endianness = params[2].to_s.upcase.to_sym description = params[3].to_s if endianness != :BIG_ENDIAN and endianness != :LITTLE_ENDIAN raise @parser.error("Invalid endianness #{params[2]}. Must be BIG_ENDIAN or LITTLE_ENDIAN.", @usage) end Packet.new(target_name, packet_name, endianness, description) end |
#create_telemetry(target_name, telemetry, latest_data, warnings) ⇒ Object
83 84 85 86 |
# File 'lib/cosmos/packets/parsers/packet_parser.rb', line 83 def create_telemetry(target_name, telemetry, latest_data, warnings) packet = create_packet(target_name) PacketParser.finish_create_telemetry(packet, telemetry, latest_data, warnings) end |
#verify_parameters ⇒ Object
72 73 74 75 76 |
# File 'lib/cosmos/packets/parsers/packet_parser.rb', line 72 def verify_parameters @usage = "#{@parser.keyword} <TARGET NAME> <PACKET NAME> <ENDIANNESS: BIG_ENDIAN/LITTLE_ENDIAN> <DESCRIPTION (Optional)>" @parser.verify_num_parameters(3, 4, @usage) @parser.verify_parameter_naming(2) # Packet name is the 2nd parameter end |