Class: OpenC3::TerminatedProtocol
- Inherits:
-
BurstProtocol
- Object
- Protocol
- BurstProtocol
- OpenC3::TerminatedProtocol
- Defined in:
- lib/openc3/interfaces/protocols/terminated_protocol.rb
Overview
Protocol which delineates packets using termination characters at the end of the data.
Direct Known Subclasses
Instance Attribute Summary
Attributes inherited from Protocol
#allow_empty_data, #extra, #interface
Instance Method Summary collapse
-
#initialize(write_termination_characters, read_termination_characters, strip_read_termination = true, discard_leading_bytes = 0, sync_pattern = nil, fill_fields = false, allow_empty_data = nil) ⇒ TerminatedProtocol
constructor
A new instance of TerminatedProtocol.
- #read_details ⇒ Object
-
#reduce_to_single_packet ⇒ Object
protected.
- #write_data(data, extra = nil) ⇒ Object
- #write_details ⇒ Object
Methods inherited from BurstProtocol
#handle_sync_pattern, #log_discard, #read_data, #reset, #write_packet
Methods inherited from Protocol
#connect_reset, #disconnect_reset, #post_write_interface, #protocol_cmd, #read_data, #read_packet, #read_protocol_input_base, #read_protocol_output_base, #reset, #write_packet, #write_protocol_input_base, #write_protocol_output_base
Constructor Details
#initialize(write_termination_characters, read_termination_characters, strip_read_termination = true, discard_leading_bytes = 0, sync_pattern = nil, fill_fields = false, allow_empty_data = nil) ⇒ TerminatedProtocol
Returns a new instance of TerminatedProtocol.
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/openc3/interfaces/protocols/terminated_protocol.rb', line 43 def initialize( write_termination_characters, read_termination_characters, strip_read_termination = true, discard_leading_bytes = 0, sync_pattern = nil, fill_fields = false, allow_empty_data = nil ) @write_termination_characters = write_termination_characters.hex_to_byte_string @read_termination_characters = read_termination_characters.hex_to_byte_string @strip_read_termination = ConfigParser.handle_true_false(strip_read_termination) raise "strip_read_termination must be true or false" if @strip_read_termination != true and @strip_read_termination != false super(discard_leading_bytes, sync_pattern, fill_fields, allow_empty_data) end |
Instance Method Details
#read_details ⇒ Object
76 77 78 79 80 81 |
# File 'lib/openc3/interfaces/protocols/terminated_protocol.rb', line 76 def read_details result = super() result['read_termination_characters'] = @read_termination_characters.inspect result['strip_read_termination'] = @strip_read_termination return result end |
#reduce_to_single_packet ⇒ Object
protected
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/openc3/interfaces/protocols/terminated_protocol.rb', line 85 def reduce_to_single_packet index = @data.index(@read_termination_characters) # Reduce to packet data and setup current_data for next packet if index if index > 0 if @strip_read_termination packet_data = @data[0..(index - 1)] else packet_data = @data[0..(index + @read_termination_characters.length - 1)] end else # @data begins with the termination characters if @strip_read_termination packet_data = '' else # Keep everything packet_data = @data[0..(@read_termination_characters.length - 1)] end end @data.replace(@data[(index + @read_termination_characters.length)..-1]) return packet_data, @extra else return :STOP end end |
#write_data(data, extra = nil) ⇒ Object
60 61 62 63 64 65 66 67 68 |
# File 'lib/openc3/interfaces/protocols/terminated_protocol.rb', line 60 def write_data(data, extra = nil) raise "Packet contains termination characters!" if data.index(@write_termination_characters) data, extra = super(data, extra) @write_termination_characters.each_byte do |byte| data << byte end return data, extra end |
#write_details ⇒ Object
70 71 72 73 74 |
# File 'lib/openc3/interfaces/protocols/terminated_protocol.rb', line 70 def write_details result = super() result['write_termination_characters'] = @write_termination_characters.inspect return result end |