Class: OpenC3::PacketParser
- Defined in:
- lib/openc3/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.
71 72 73 |
# File 'lib/openc3/packets/parsers/packet_parser.rb', line 71 def initialize(parser) @parser = parser end |
Class Method Details
.check_for_duplicate(type, list, packet) ⇒ Object
106 107 108 109 110 111 112 113 114 115 |
# File 'lib/openc3/packets/parsers/packet_parser.rb', line 106 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
60 61 62 63 64 65 66 67 68 |
# File 'lib/openc3/packets/parsers/packet_parser.rb', line 60 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
117 118 119 120 121 122 123 |
# File 'lib/openc3/packets/parsers/packet_parser.rb', line 117 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
125 126 127 128 129 130 131 132 133 134 135 |
# File 'lib/openc3/packets/parsers/packet_parser.rb', line 125 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
34 35 36 37 38 |
# File 'lib/openc3/packets/parsers/packet_parser.rb', line 34 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
52 53 54 55 56 |
# File 'lib/openc3/packets/parsers/packet_parser.rb', line 52 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
81 82 83 84 |
# File 'lib/openc3/packets/parsers/packet_parser.rb', line 81 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
93 94 95 96 97 98 99 100 101 102 103 104 |
# File 'lib/openc3/packets/parsers/packet_parser.rb', line 93 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
86 87 88 89 |
# File 'lib/openc3/packets/parsers/packet_parser.rb', line 86 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
75 76 77 78 79 |
# File 'lib/openc3/packets/parsers/packet_parser.rb', line 75 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 |