Class: Cosmos::CcsdsLogReader

Inherits:
PacketLogReader show all
Defined in:
lib/cosmos/packet_logs/ccsds_log_reader.rb

Overview

Reads a CCSDS packet log of either commands or telemetry.

Constant Summary collapse

CCSDS_HEADER_LENGTH =

Length of the header on a CCSDS source packet

6

Constants inherited from PacketLogReader

PacketLogReader::COSMOS1_CONFIGURATION_NAME_RANGE, PacketLogReader::COSMOS1_HEADER_LENGTH, PacketLogReader::COSMOS1_LOG_TYPE_RANGE, PacketLogReader::COSMOS1_MARKER, PacketLogReader::COSMOS1_MARKER_RANGE, PacketLogReader::COSMOS2_CONFIGURATION_NAME_RANGE, PacketLogReader::COSMOS2_HEADER_LENGTH, PacketLogReader::COSMOS2_HOSTNAME_RANGE, PacketLogReader::COSMOS2_LOG_TYPE_RANGE, PacketLogReader::COSMOS2_MARKER, PacketLogReader::COSMOS2_MARKER_RANGE

Instance Attribute Summary

Attributes inherited from PacketLogReader

#configuration_name, #hostname, #log_type

Instance Method Summary collapse

Methods inherited from PacketLogReader

#bytes_read, #close, #each, #first, #last, #open, #packet_offsets, #read_at_offset, #size

Constructor Details

#initializeCcsdsLogReader

Create a new log file reader



23
24
25
26
# File 'lib/cosmos/packet_logs/ccsds_log_reader.rb', line 23

def initialize
  super()
  @ccsds_header = CcsdsPacket.new(nil, nil, false)
end

Instance Method Details

#read(identify_and_define = true) ⇒ Packet

Read a packet from the log file

Returns:



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/cosmos/packet_logs/ccsds_log_reader.rb', line 32

def read(identify_and_define = true)
  # Read the CCSDS packet header
  header = @file.read(CCSDS_HEADER_LENGTH)
  return nil unless header and header.length == CCSDS_HEADER_LENGTH
  @ccsds_header.buffer = header

  # Extract the length field
  length = @ccsds_header.read('CcsdsLength') + 1

  # Read the remainder of the packet data
  data = @file.read(length)
  return nil unless data and data.length == length

  # Combine into the full packet data
  packet_data = header << data

  # Determine packet time and set it as received time
  received_time = determine_received_time(packet_data)

  # Build the actual Packet object
  if identify_and_define
    packet = identify_and_define_packet_data(nil, nil, received_time, packet_data)
  else
    # Build Packet
    packet = Packet.new(nil, nil, :BIG_ENDIAN, nil, packet_data)
    packet.set_received_time_fast(received_time)
  end

  # Return the packet
  packet
rescue => err
  close()
  raise err
end