Class: OpenC3::TelemetryDecomTopic

Inherits:
Topic show all
Defined in:
lib/openc3/topics/telemetry_decom_topic.rb

Class Method Summary collapse

Methods inherited from Topic

clear_topics, get_cnt, method_missing

Class Method Details

.write_packet(packet, id: nil, scope:) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/openc3/topics/telemetry_decom_topic.rb', line 23

def self.write_packet(packet, id: nil, scope:)
  OpenC3.in_span("write_packet") do
    # Need to build a JSON hash of the decommutated data
    # Support "downward typing"
    # everything base name is RAW (including DERIVED)
    # Request for FORMATTED, etc will look down until it finds something
    # If nothing - item does not exist - nil
    # __ as separators ITEM1, ITEM1__C, ITEM1__F

    json_hash = CvtModel.build_json_from_packet(packet)
    # Convert to JSON-safe types once and reuse for both topic write and CVT set
    json_safe_hash = json_hash.as_json
    json_data = JSON.generate(json_safe_hash, allow_nan: true)
    # Write to stream
    msg_hash = {
      :time => packet.packet_time.to_nsec_from_epoch,
      :received_time => packet.received_time.to_nsec_from_epoch,
      :stored => packet.stored.to_s,
      :target_name => packet.target_name,
      :packet_name => packet.packet_name,
      :received_count => packet.received_count,
      :json_data => json_data,
    }
    Topic.write_topic("#{scope}__DECOM__{#{packet.target_name}}__#{packet.packet_name}", msg_hash, id)

    unless packet.stored
      # Also update the current value table with the latest decommutated data
      # Pass pre-serialized JSON to avoid calling as_json twice
      CvtModel.set_json(json_data, json_safe_hash, target_name: packet.target_name, packet_name: packet.packet_name, scope: scope)
    end
  end
end