cosmos 4.2.4-java → 4.3.0-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +1 -1
- data/Gemfile +1 -1
- data/Manifest.txt +12 -0
- data/autohotkey/tools/cmd_sequence.ahk +21 -20
- data/autohotkey/tools/cmd_sequence2.ahk +1 -1
- data/autohotkey/tools/config_editor.ahk +1 -1
- data/autohotkey/tools/launcher.ahk +1 -0
- data/autohotkey/tools/packet_viewer.ahk +6 -5
- data/autohotkey/tools/test_runner.ahk +8 -8
- data/bin/cosmos +37 -0
- data/bin/dart_util +0 -0
- data/data/config/item_modifiers.yaml +9 -0
- data/data/crc.txt +91 -86
- data/demo/Rakefile +2 -0
- data/demo/config/dart/Gemfile +1 -1
- data/demo/config/data/crc.txt +8 -5
- data/demo/config/system/system.txt +28 -0
- data/demo/config/system/system2.txt +21 -3
- data/demo/config/system/system_alt_ports.txt +69 -0
- data/demo/config/targets/INST/cmd_tlm/inst_tlm.txt +1 -0
- data/demo/config/tools/cmd_tlm_server/cmd_tlm_server_chain.txt +18 -0
- data/demo/procedures/cosmos_api_test.rb +18 -14
- data/demo/procedures/local_screen_example.rb +51 -0
- data/ext/cosmos/ext/cosmos_io/cosmos_io.c +32 -4
- data/ext/cosmos/ext/packet/packet.c +6 -0
- data/ext/mkrf_conf.rb +2 -2
- data/install/config/dart/Gemfile +1 -1
- data/install/config/data/crc.txt +2 -2
- data/install/config/system/system.txt +23 -1
- data/lib/cosmos/conversions.rb +2 -0
- data/lib/cosmos/conversions/packet_time_formatted_conversion.rb +38 -0
- data/lib/cosmos/conversions/packet_time_seconds_conversion.rb +38 -0
- data/lib/cosmos/core_ext/cosmos_io.rb +2 -1
- data/lib/cosmos/dart/Gemfile +1 -1
- data/lib/cosmos/dart/examples/dart_stream_client.rb +6 -2
- data/lib/cosmos/dart/lib/dart_common.rb +1 -1
- data/lib/cosmos/dart/lib/dart_database_cleaner.rb +2 -2
- data/lib/cosmos/dart/lib/dart_decommutator.rb +4 -4
- data/lib/cosmos/dart/lib/dart_importer.rb +3 -3
- data/lib/cosmos/dart/lib/dart_packet_log_writer.rb +2 -2
- data/lib/cosmos/dart/processes/dart_ingester.rb +2 -0
- data/lib/cosmos/dart/processes/dart_util.rb +4 -4
- data/lib/cosmos/dart/spec/dart/dart_reducer_manager_spec.rb +3 -3
- data/lib/cosmos/gui/dialogs/cmd_tlm_raw_dialog.rb +9 -5
- data/lib/cosmos/gui/dialogs/details_dialog.rb +29 -29
- data/lib/cosmos/gui/dialogs/exception_list_dialog.rb +1 -1
- data/lib/cosmos/gui/dialogs/find_replace_dialog.rb +3 -3
- data/lib/cosmos/gui/dialogs/interface_raw_dialog.rb +2 -2
- data/lib/cosmos/gui/dialogs/set_tlm_dialog.rb +1 -1
- data/lib/cosmos/gui/dialogs/tlm_details_dialog.rb +10 -10
- data/lib/cosmos/gui/qt.rb +10 -1
- data/lib/cosmos/gui/qt_tool.rb +17 -10
- data/lib/cosmos/gui/text/ruby_editor.rb +47 -8
- data/lib/cosmos/gui/utilities/classification_banner.rb +60 -0
- data/lib/cosmos/gui/utilities/script_module_gui.rb +26 -0
- data/lib/cosmos/interfaces.rb +1 -0
- data/lib/cosmos/interfaces/interface.rb +4 -0
- data/lib/cosmos/interfaces/protocols/ignore_packet_protocol.rb +46 -0
- data/lib/cosmos/interfaces/protocols/preidentified_protocol.rb +68 -23
- data/lib/cosmos/packet_logs/packet_log_reader.rb +69 -26
- data/lib/cosmos/packet_logs/packet_log_writer.rb +13 -1
- data/lib/cosmos/packets/commands.rb +5 -1
- data/lib/cosmos/packets/packet.rb +36 -2
- data/lib/cosmos/packets/packet_config.rb +0 -1
- data/lib/cosmos/packets/parsers/format_string_parser.rb +0 -1
- data/lib/cosmos/packets/parsers/xtce_parser.rb +1 -1
- data/lib/cosmos/packets/telemetry.rb +4 -0
- data/lib/cosmos/script/api_shared.rb +2 -0
- data/lib/cosmos/script/limits.rb +4 -0
- data/lib/cosmos/script/script.rb +27 -11
- data/lib/cosmos/script/telemetry.rb +3 -1
- data/lib/cosmos/script/tools.rb +18 -8
- data/lib/cosmos/system/system.rb +21 -0
- data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +26 -24
- data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +29 -29
- data/lib/cosmos/tools/cmd_sequence/cmd_sequence.rb +65 -40
- data/lib/cosmos/tools/cmd_sequence/sequence_item.rb +6 -6
- data/lib/cosmos/tools/cmd_tlm_server/api.rb +13 -0
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +12 -9
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +7 -1
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +8 -8
- data/lib/cosmos/tools/cmd_tlm_server/commanding.rb +13 -2
- data/lib/cosmos/tools/cmd_tlm_server/gui/interfaces_tab.rb +2 -2
- data/lib/cosmos/tools/cmd_tlm_server/gui/logging_tab.rb +13 -13
- data/lib/cosmos/tools/cmd_tlm_server/gui/packets_tab.rb +4 -4
- data/lib/cosmos/tools/cmd_tlm_server/gui/status_tab.rb +8 -8
- data/lib/cosmos/tools/cmd_tlm_server/gui/targets_tab.rb +5 -5
- data/lib/cosmos/tools/cmd_tlm_server/interface_thread.rb +35 -20
- data/lib/cosmos/tools/cmd_tlm_server/replay_backend.rb +15 -11
- data/lib/cosmos/tools/config_editor/config_editor.rb +69 -69
- data/lib/cosmos/tools/data_viewer/data_viewer.rb +42 -38
- data/lib/cosmos/tools/data_viewer/data_viewer_component.rb +1 -0
- data/lib/cosmos/tools/data_viewer/dump_component.rb +1 -0
- data/lib/cosmos/tools/handbook_creator/handbook_creator.rb +4 -4
- data/lib/cosmos/tools/launcher/launcher.rb +1 -1
- data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +28 -24
- data/lib/cosmos/tools/opengl_builder/opengl_builder.rb +42 -42
- data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +56 -53
- data/lib/cosmos/tools/script_runner/script_runner.rb +112 -95
- data/lib/cosmos/tools/script_runner/script_runner_frame.rb +48 -30
- data/lib/cosmos/tools/table_manager/table_manager.rb +42 -42
- data/lib/cosmos/tools/test_runner/test_runner.rb +45 -27
- data/lib/cosmos/tools/test_runner/test_runner_chooser.rb +3 -3
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +45 -45
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor_config.rb +4 -4
- data/lib/cosmos/tools/tlm_grapher/data_object_adders/xy_data_object_adder.rb +3 -3
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/housekeeping_data_object_editor.rb +7 -7
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/xy_data_object_editor.rb +10 -10
- data/lib/cosmos/tools/tlm_grapher/data_objects/housekeeping_data_object.rb +10 -3
- data/lib/cosmos/tools/tlm_grapher/data_objects/xy_data_object.rb +6 -6
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots/overview_tabbed_plots.rb +14 -14
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tool.rb +83 -83
- data/lib/cosmos/tools/tlm_viewer/screen.rb +73 -13
- data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +15 -15
- data/lib/cosmos/tools/tlm_viewer/widgets.rb +1 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasellipse_widget.rb +40 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/timegraph_widget.rb +1 -1
- data/lib/cosmos/tools/tlm_viewer/widgets/widget.rb +6 -1
- data/lib/cosmos/top_level.rb +14 -1
- data/lib/cosmos/version.rb +5 -5
- data/lib/cosmos/win32/excel.rb +63 -12
- data/make_gems.sh +10 -0
- data/spec/conversions/packet_time_formatted_conversion_spec.rb +58 -0
- data/spec/conversions/packet_time_seconds_conversion_spec.rb +60 -0
- data/spec/interfaces/protocols/ignore_packet_protocol_spec.rb +243 -0
- data/spec/interfaces/protocols/preidentified_protocol_spec.rb +227 -4
- data/spec/io/serial_driver_spec.rb +15 -13
- data/spec/packet_logs/packet_log_reader_spec.rb +72 -17
- data/spec/packets/packet_config_spec.rb +5 -16
- data/spec/packets/parsers/format_string_parser_spec.rb +0 -11
- data/spec/packets/parsers/macro_parser_spec.rb +36 -36
- data/spec/packets/parsers/state_parser_spec.rb +36 -0
- data/spec/packets/telemetry_spec.rb +11 -9
- data/spec/script/script_spec.rb +2 -3
- data/spec/script/scripting_spec.rb +2 -1
- data/spec/script/tools_spec.rb +0 -1
- data/spec/tools/cmd_tlm_server/api_spec.rb +28 -20
- data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +33 -0
- data/spec/tools/cmd_tlm_server/commanding_spec.rb +25 -1
- data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +15 -0
- data/tasks/gemfile_stats.rake +3 -2
- metadata +14 -2
@@ -305,21 +305,24 @@ module Cosmos
|
|
305
305
|
if log_change
|
306
306
|
# Write to Server Messages that limits state has changed
|
307
307
|
tgt_pkt_item_str = "#{packet.target_name} #{packet.packet_name} #{item.name} = #{value} is"
|
308
|
+
packet_time = packet.packet_time
|
309
|
+
pkt_time_str = ""
|
310
|
+
pkt_time_str << " (#{packet.packet_time.sys.formatted})" if packet_time
|
308
311
|
case item.limits.state
|
309
312
|
when :BLUE
|
310
|
-
Logger.info "<B>#{tgt_pkt_item_str} #{item.limits.state}"
|
313
|
+
Logger.info "<B>#{tgt_pkt_item_str} #{item.limits.state}#{pkt_time_str}"
|
311
314
|
when :GREEN, :GREEN_LOW, :GREEN_HIGH
|
312
|
-
Logger.info "<G>#{tgt_pkt_item_str} #{item.limits.state}"
|
315
|
+
Logger.info "<G>#{tgt_pkt_item_str} #{item.limits.state}#{pkt_time_str}"
|
313
316
|
when :YELLOW, :YELLOW_LOW, :YELLOW_HIGH
|
314
|
-
Logger.warn "<Y>#{tgt_pkt_item_str} #{item.limits.state}"
|
317
|
+
Logger.warn "<Y>#{tgt_pkt_item_str} #{item.limits.state}#{pkt_time_str}"
|
315
318
|
when :RED, :RED_LOW, :RED_HIGH
|
316
|
-
Logger.error "<R>#{tgt_pkt_item_str} #{item.limits.state}"
|
319
|
+
Logger.error "<R>#{tgt_pkt_item_str} #{item.limits.state}#{pkt_time_str}"
|
317
320
|
else
|
318
|
-
Logger.error "#{tgt_pkt_item_str} UNKNOWN"
|
321
|
+
Logger.error "#{tgt_pkt_item_str} UNKNOWN#{pkt_time_str}"
|
319
322
|
end
|
320
323
|
end
|
321
324
|
|
322
|
-
post_limits_event(:LIMITS_CHANGE, [packet.target_name, packet.packet_name, item.name, old_limits_state, item.limits.state])
|
325
|
+
post_limits_event(:LIMITS_CHANGE, [packet.target_name, packet.packet_name, item.name, old_limits_state, item.limits.state, packet_time ? packet_time.tv_sec : nil, packet_time ? packet_time.tv_usec : nil])
|
323
326
|
|
324
327
|
if @mode == :CMD_TLM_SERVER
|
325
328
|
if item.limits.response
|
@@ -457,7 +460,7 @@ module Cosmos
|
|
457
460
|
received_time = packet.received_time
|
458
461
|
received_time ||= Time.now.sys
|
459
462
|
queue << [packet.buffer, target_name, packet_name,
|
460
|
-
received_time.tv_sec, received_time.tv_usec, packet.received_count]
|
463
|
+
received_time.tv_sec, received_time.tv_usec, packet.received_count, packet.stored, packet.extra]
|
461
464
|
if queue.length > queue_size
|
462
465
|
# Drop queue
|
463
466
|
queues_to_drop << id
|
@@ -529,7 +532,7 @@ module Cosmos
|
|
529
532
|
received_time = packet.received_time
|
530
533
|
received_time ||= Time.now.sys
|
531
534
|
@@instance.packet_data_queues[id][0] << [packet.buffer, 'SYSTEM', 'META',
|
532
|
-
received_time.tv_sec, received_time.tv_usec, packet.received_count]
|
535
|
+
received_time.tv_sec, received_time.tv_usec, packet.received_count, packet.stored, packet.extra]
|
533
536
|
end
|
534
537
|
end
|
535
538
|
return id
|
@@ -572,7 +575,7 @@ module Cosmos
|
|
572
575
|
rescue ThreadError
|
573
576
|
received_time ||= Time.now.sys
|
574
577
|
return [@last_subscribed_packet.buffer, @last_subscribed_packet.target_name,
|
575
|
-
@last_subscribed_packet.packet_name, received_time.tv_sec, received_time.tv_usec, @last_subscribed_packet.received_count]
|
578
|
+
@last_subscribed_packet.packet_name, received_time.tv_sec, received_time.tv_usec, @last_subscribed_packet.received_count, @last_subscribed_packet.stored, @last_subscribed_packet.extra]
|
576
579
|
end
|
577
580
|
else
|
578
581
|
return queue.pop(non_block)
|
@@ -153,7 +153,7 @@ module Cosmos
|
|
153
153
|
current_interface_or_router.name = interface_name
|
154
154
|
@interfaces[interface_name] = current_interface_or_router
|
155
155
|
|
156
|
-
when 'LOG', 'DONT_LOG', 'TARGET'
|
156
|
+
when 'LOG', 'LOG_STORED', 'DONT_LOG', 'TARGET'
|
157
157
|
raise parser.error("No current interface for #{keyword}") unless current_interface_or_router and current_type == :INTERFACE
|
158
158
|
|
159
159
|
case keyword
|
@@ -166,6 +166,12 @@ module Cosmos
|
|
166
166
|
current_interface_log_added = true
|
167
167
|
current_interface_or_router.packet_log_writer_pairs << packet_log_writer_pair unless current_interface_or_router.packet_log_writer_pairs.include?(packet_log_writer_pair)
|
168
168
|
|
169
|
+
when 'LOG_STORED'
|
170
|
+
parser.verify_num_parameters(1, 1, "#{keyword} <Packet Log Writer Name>")
|
171
|
+
packet_log_writer_pair = @packet_log_writer_pairs[params[0].upcase]
|
172
|
+
raise parser.error("Unknown packet log writer: #{params[0].upcase}") unless packet_log_writer_pair
|
173
|
+
current_interface_or_router.stored_packet_log_writer_pairs << packet_log_writer_pair unless current_interface_or_router.stored_packet_log_writer_pairs.include?(packet_log_writer_pair)
|
174
|
+
|
169
175
|
when 'DONT_LOG'
|
170
176
|
parser.verify_num_parameters(0, 0, "#{keyword}")
|
171
177
|
current_interface_or_router.packet_log_writer_pairs = []
|
@@ -129,7 +129,7 @@ module Cosmos
|
|
129
129
|
@first_output = 0
|
130
130
|
@options = options
|
131
131
|
|
132
|
-
statusBar.showMessage(
|
132
|
+
statusBar.showMessage("") # Show blank message to initialize status bar
|
133
133
|
|
134
134
|
initialize_actions()
|
135
135
|
initialize_menus()
|
@@ -194,26 +194,26 @@ module Cosmos
|
|
194
194
|
super()
|
195
195
|
|
196
196
|
# File actions
|
197
|
-
@file_reload = Qt::Action.new(
|
198
|
-
@file_reload.statusTip =
|
197
|
+
@file_reload = Qt::Action.new('&Reload Configuration', self)
|
198
|
+
@file_reload.statusTip = 'Reload configuraton and reset'
|
199
199
|
@file_reload.connect(SIGNAL('triggered()')) do
|
200
200
|
CmdTlmServer.instance.reload()
|
201
201
|
end
|
202
202
|
|
203
203
|
# Edit actions
|
204
|
-
@edit_clear_counters = Qt::Action.new(
|
205
|
-
@edit_clear_counters.statusTip =
|
204
|
+
@edit_clear_counters = Qt::Action.new('&Clear Counters', self)
|
205
|
+
@edit_clear_counters.statusTip = 'Clear counters for all interfaces and targets'
|
206
206
|
@edit_clear_counters.connect(SIGNAL('triggered()')) { CmdTlmServer.clear_counters }
|
207
207
|
end
|
208
208
|
|
209
209
|
def initialize_menus
|
210
|
-
@file_menu = menuBar.addMenu(
|
210
|
+
@file_menu = menuBar.addMenu('&File')
|
211
211
|
@file_menu.addAction(@file_reload)
|
212
212
|
@file_menu.addAction(@exit_action)
|
213
213
|
|
214
214
|
# Do not allow clear counters in production mode
|
215
215
|
unless @production
|
216
|
-
@edit_menu = menuBar.addMenu(
|
216
|
+
@edit_menu = menuBar.addMenu('&Edit')
|
217
217
|
@edit_menu.addAction(@edit_clear_counters)
|
218
218
|
end
|
219
219
|
|
@@ -641,7 +641,7 @@ module Cosmos
|
|
641
641
|
end
|
642
642
|
else
|
643
643
|
options.replay = false
|
644
|
-
end
|
644
|
+
end
|
645
645
|
end
|
646
646
|
|
647
647
|
super(option_parser, options)
|
@@ -52,6 +52,8 @@ module Cosmos
|
|
52
52
|
if identified_command
|
53
53
|
identified_command.received_time = packet.received_time
|
54
54
|
identified_command.raw = packet.raw
|
55
|
+
identified_command.stored = packet.stored
|
56
|
+
identified_command.extra = packet.extra
|
55
57
|
packet = identified_command
|
56
58
|
end
|
57
59
|
end
|
@@ -69,6 +71,8 @@ module Cosmos
|
|
69
71
|
end
|
70
72
|
command.received_time = packet.received_time
|
71
73
|
command.raw = packet.raw
|
74
|
+
command.stored = packet.stored
|
75
|
+
command.extra = packet.extra
|
72
76
|
command.buffer = packet.buffer
|
73
77
|
command.received_count += 1
|
74
78
|
Logger.info System.commands.format(command, target.ignored_parameters) if !command.messages_disabled and command.target_name != 'UNKNOWN'
|
@@ -99,8 +103,15 @@ module Cosmos
|
|
99
103
|
end
|
100
104
|
|
101
105
|
# Write to command packet logs
|
102
|
-
interface.
|
103
|
-
|
106
|
+
if command.stored and !interface.stored_packet_log_writer_pairs.empty?
|
107
|
+
interface.stored_packet_log_writer_pairs.each do |packet_log_writer_pair|
|
108
|
+
packet_log_writer_pair.cmd_log_writer.write(command)
|
109
|
+
end
|
110
|
+
else
|
111
|
+
interface.packet_log_writer_pairs.each do |packet_log_writer_pair|
|
112
|
+
# Write errors are handled by the log writer
|
113
|
+
packet_log_writer_pair.cmd_log_writer.write(command)
|
114
|
+
end
|
104
115
|
end
|
105
116
|
end
|
106
117
|
|
@@ -127,7 +127,7 @@ module Cosmos
|
|
127
127
|
def populate_interface_table(interfaces, interfaces_table)
|
128
128
|
row = 0
|
129
129
|
interfaces.all.each do |interface_name, interface|
|
130
|
-
item = Qt::TableWidgetItem.new(
|
130
|
+
item = Qt::TableWidgetItem.new(interface_name)
|
131
131
|
item.setTextAlignment(ALIGN_CENTER)
|
132
132
|
interfaces_table.setItem(row, 0, item)
|
133
133
|
interfaces_table.setCellWidget(row, 1, create_button(interface, interface_name))
|
@@ -138,7 +138,7 @@ module Cosmos
|
|
138
138
|
interface.bytes_written, interface.bytes_read,
|
139
139
|
interface.write_count, interface.read_count].each do |val|
|
140
140
|
|
141
|
-
item = Qt::TableWidgetItem.new(val.to_s)
|
141
|
+
item = Qt::TableWidgetItem.new(val.to_s)
|
142
142
|
item.setTextAlignment(ALIGN_CENTER)
|
143
143
|
interfaces_table.setItem(row, index, item)
|
144
144
|
index += 1
|
@@ -77,7 +77,7 @@ module Cosmos
|
|
77
77
|
|
78
78
|
def populate_logging_actions(layout)
|
79
79
|
# Add all the action buttons
|
80
|
-
actions = Qt::GroupBox.new(
|
80
|
+
actions = Qt::GroupBox.new("Actions")
|
81
81
|
actions_layout = Qt::VBoxLayout.new(actions)
|
82
82
|
button_layout = Qt::GridLayout.new
|
83
83
|
|
@@ -92,13 +92,13 @@ module Cosmos
|
|
92
92
|
|
93
93
|
log_buttons.each do |text, location, method|
|
94
94
|
next if text =~ /Stop/ and @production
|
95
|
-
button = Qt::PushButton.new(
|
95
|
+
button = Qt::PushButton.new(text)
|
96
96
|
button_layout.addWidget(button, location[0], location[1])
|
97
97
|
button.connect(SIGNAL('clicked()')) do
|
98
98
|
begin
|
99
99
|
CmdTlmServer.instance.send(method, 'ALL')
|
100
100
|
rescue Exception => error
|
101
|
-
statusBar.showMessage(
|
101
|
+
statusBar.showMessage(error.message)
|
102
102
|
end
|
103
103
|
end
|
104
104
|
end
|
@@ -109,13 +109,13 @@ module Cosmos
|
|
109
109
|
end
|
110
110
|
|
111
111
|
def create_log_layout(form_layout, log_writer, label_prefix)
|
112
|
-
label = Qt::Label.new(
|
112
|
+
label = Qt::Label.new(log_writer.logging_enabled.to_s)
|
113
113
|
label.setTextInteractionFlags(Qt::TextSelectableByMouse)
|
114
114
|
form_layout.addRow("#{label_prefix} Logging:", label)
|
115
|
-
label = Qt::Label.new(
|
115
|
+
label = Qt::Label.new(log_writer.queue.size.to_s)
|
116
116
|
label.setTextInteractionFlags(Qt::TextSelectableByMouse)
|
117
117
|
form_layout.addRow("#{label_prefix} Queue Size:", label)
|
118
|
-
label = Qt::Label.new(
|
118
|
+
label = Qt::Label.new(log_writer.filename)
|
119
119
|
label.setTextInteractionFlags(Qt::TextSelectableByMouse)
|
120
120
|
form_layout.addRow("#{label_prefix} Filename:", label)
|
121
121
|
file_size = 0
|
@@ -124,7 +124,7 @@ module Cosmos
|
|
124
124
|
rescue Exception
|
125
125
|
# Do nothing on error
|
126
126
|
end
|
127
|
-
label = Qt::Label.new(
|
127
|
+
label = Qt::Label.new(file_size.to_s)
|
128
128
|
label.setTextInteractionFlags(Qt::TextSelectableByMouse)
|
129
129
|
form_layout.addRow("#{label_prefix} File Size:", label)
|
130
130
|
end
|
@@ -142,30 +142,30 @@ module Cosmos
|
|
142
142
|
|
143
143
|
form_layout = Qt::FormLayout.new
|
144
144
|
@logging_layouts[packet_log_writer_pair_name] = form_layout
|
145
|
-
label = Qt::Label.new(
|
145
|
+
label = Qt::Label.new(interfaces.join(", "))
|
146
146
|
label.setTextInteractionFlags(Qt::TextSelectableByMouse)
|
147
147
|
form_layout.addRow("Interfaces:", label)
|
148
148
|
create_log_layout(form_layout, packet_log_writer_pair.cmd_log_writer, 'Cmd')
|
149
149
|
create_log_layout(form_layout, packet_log_writer_pair.tlm_log_writer, 'Tlm')
|
150
150
|
|
151
151
|
button_layout = Qt::HBoxLayout.new
|
152
|
-
start_button = Qt::PushButton.new(
|
152
|
+
start_button = Qt::PushButton.new('Start Cmd Logging')
|
153
153
|
button_layout.addWidget(start_button)
|
154
154
|
start_button.connect(SIGNAL('clicked()')) do
|
155
155
|
CmdTlmServer.instance.start_cmd_log(packet_log_writer_pair_name)
|
156
156
|
end
|
157
|
-
start_button = Qt::PushButton.new(
|
157
|
+
start_button = Qt::PushButton.new('Start Tlm Logging')
|
158
158
|
button_layout.addWidget(start_button)
|
159
159
|
start_button.connect(SIGNAL('clicked()')) do
|
160
160
|
CmdTlmServer.instance.start_tlm_log(packet_log_writer_pair_name)
|
161
161
|
end
|
162
162
|
if @production == false
|
163
|
-
stop_button = Qt::PushButton.new(
|
163
|
+
stop_button = Qt::PushButton.new('Stop Cmd Logging')
|
164
164
|
button_layout.addWidget(stop_button)
|
165
165
|
stop_button.connect(SIGNAL('clicked()')) do
|
166
166
|
CmdTlmServer.instance.stop_cmd_log(packet_log_writer_pair_name)
|
167
167
|
end
|
168
|
-
stop_button = Qt::PushButton.new(
|
168
|
+
stop_button = Qt::PushButton.new('Stop Tlm Logging')
|
169
169
|
button_layout.addWidget(stop_button)
|
170
170
|
stop_button.connect(SIGNAL('clicked()')) do
|
171
171
|
CmdTlmServer.instance.stop_tlm_log(packet_log_writer_pair_name)
|
@@ -175,7 +175,7 @@ module Cosmos
|
|
175
175
|
log_layout.addLayout(form_layout)
|
176
176
|
layout.addWidget(log)
|
177
177
|
end
|
178
|
-
layout.addWidget(Qt::Label.new(
|
178
|
+
layout.addWidget(Qt::Label.new("Note: Buffered IO operations cause file size to not reflect total logged data size until the log file is closed."))
|
179
179
|
end
|
180
180
|
end
|
181
181
|
end
|
@@ -116,11 +116,11 @@ module Cosmos
|
|
116
116
|
packets.sort.each do |packet_name, packet|
|
117
117
|
packet.received_count ||= 0
|
118
118
|
next if packet.hidden
|
119
|
-
target_name_widget = Qt::TableWidgetItem.new(
|
119
|
+
target_name_widget = Qt::TableWidgetItem.new(target_name)
|
120
120
|
target_name_widget.setTextAlignment(Qt::AlignRight | Qt::AlignVCenter)
|
121
121
|
table.setItem(row, 0, target_name_widget)
|
122
|
-
table.setItem(row, 1, Qt::TableWidgetItem.new(
|
123
|
-
packet_count = Qt::TableWidgetItem.new(
|
122
|
+
table.setItem(row, 1, Qt::TableWidgetItem.new(packet_name))
|
123
|
+
packet_count = Qt::TableWidgetItem.new(packet.received_count.to_s)
|
124
124
|
packet_count.setTextAlignment(Qt::AlignCenter)
|
125
125
|
table.setItem(row, 2, packet_count)
|
126
126
|
view_raw = Qt::PushButton.new("View Raw")
|
@@ -151,7 +151,7 @@ module Cosmos
|
|
151
151
|
end
|
152
152
|
table.setCellWidget(row, 4, view_pv)
|
153
153
|
else
|
154
|
-
table_widget = Qt::TableWidgetItem.new(
|
154
|
+
table_widget = Qt::TableWidgetItem.new('N/A')
|
155
155
|
table_widget.setTextAlignment(Qt::AlignCenter)
|
156
156
|
table.setItem(row, 4, table_widget)
|
157
157
|
end
|
@@ -53,7 +53,7 @@ module Cosmos
|
|
53
53
|
private
|
54
54
|
|
55
55
|
def populate_limits_status(layout)
|
56
|
-
limits = Qt::GroupBox.new(
|
56
|
+
limits = Qt::GroupBox.new("Limits Status")
|
57
57
|
limits_layout = Qt::FormLayout.new(limits)
|
58
58
|
current_limits_set = System.limits_set.to_s
|
59
59
|
|
@@ -88,7 +88,7 @@ module Cosmos
|
|
88
88
|
@previous_request_count = 0
|
89
89
|
end
|
90
90
|
|
91
|
-
api = Qt::GroupBox.new(
|
91
|
+
api = Qt::GroupBox.new("API Status")
|
92
92
|
api_layout = Qt::VBoxLayout.new(api)
|
93
93
|
@api_table = Qt::TableWidget.new()
|
94
94
|
@api_table.verticalHeader.hide()
|
@@ -97,14 +97,14 @@ module Cosmos
|
|
97
97
|
@api_table.setHorizontalHeaderLabels(["Port", "Num Clients", "Requests", "Requests/Sec", "Avg Request Time", "Estimated Utilization"])
|
98
98
|
|
99
99
|
if CmdTlmServer.mode == :CMD_TLM_SERVER
|
100
|
-
@api_table.setItem(0, 0, Qt::TableWidgetItem.new(
|
100
|
+
@api_table.setItem(0, 0, Qt::TableWidgetItem.new(System.ports['CTS_API'].to_s))
|
101
101
|
else
|
102
|
-
@api_table.setItem(0, 0, Qt::TableWidgetItem.new(
|
102
|
+
@api_table.setItem(0, 0, Qt::TableWidgetItem.new(System.ports['REPLAY_API'].to_s))
|
103
103
|
end
|
104
|
-
item0 = Qt::TableWidgetItem.new(
|
104
|
+
item0 = Qt::TableWidgetItem.new(CmdTlmServer.json_drb.num_clients.to_s)
|
105
105
|
item0.setTextAlignment(Qt::AlignCenter)
|
106
106
|
@api_table.setItem(0, 1, item0)
|
107
|
-
item = Qt::TableWidgetItem.new(
|
107
|
+
item = Qt::TableWidgetItem.new(@previous_request_count.to_s)
|
108
108
|
item.setTextAlignment(Qt::AlignCenter)
|
109
109
|
@api_table.setItem(0, 2, item)
|
110
110
|
item2 = Qt::TableWidgetItem.new("0.0")
|
@@ -122,7 +122,7 @@ module Cosmos
|
|
122
122
|
end
|
123
123
|
|
124
124
|
def populate_system_status(layout)
|
125
|
-
system = Qt::GroupBox.new(
|
125
|
+
system = Qt::GroupBox.new("System Status")
|
126
126
|
system_layout = Qt::VBoxLayout.new(system)
|
127
127
|
@system_table = Qt::TableWidget.new()
|
128
128
|
@system_table.verticalHeader.hide()
|
@@ -148,7 +148,7 @@ module Cosmos
|
|
148
148
|
end
|
149
149
|
|
150
150
|
def populate_background_status(layout)
|
151
|
-
background_tasks_groupbox = Qt::GroupBox.new(
|
151
|
+
background_tasks_groupbox = Qt::GroupBox.new("Background Tasks")
|
152
152
|
background_tasks_layout = Qt::VBoxLayout.new(background_tasks_groupbox)
|
153
153
|
@background_tasks_table = Qt::TableWidget.new()
|
154
154
|
@background_tasks_table.verticalHeader.hide()
|
@@ -68,21 +68,21 @@ module Cosmos
|
|
68
68
|
def populate_targets_table
|
69
69
|
row = 0
|
70
70
|
System.targets.sort.each do |target_name, target|
|
71
|
-
target_name_widget = Qt::TableWidgetItem.new(
|
71
|
+
target_name_widget = Qt::TableWidgetItem.new(target_name)
|
72
72
|
target_name_widget.setTextAlignment(Qt::AlignCenter)
|
73
73
|
@targets_table.setItem(row, 0, target_name_widget)
|
74
74
|
if target.interface
|
75
|
-
interface_name_widget = Qt::TableWidgetItem.new(
|
75
|
+
interface_name_widget = Qt::TableWidgetItem.new(target.interface.name.to_s)
|
76
76
|
else
|
77
|
-
interface_name_widget = Qt::TableWidgetItem.new(
|
77
|
+
interface_name_widget = Qt::TableWidgetItem.new('')
|
78
78
|
end
|
79
79
|
interface_name_widget.setTextAlignment(Qt::AlignCenter)
|
80
80
|
@targets_table.setItem(row, 1, interface_name_widget)
|
81
|
-
cmd_cnt = Qt::TableWidgetItem.new(
|
81
|
+
cmd_cnt = Qt::TableWidgetItem.new(target.cmd_cnt.to_s)
|
82
82
|
cmd_cnt.setTextAlignment(Qt::AlignCenter)
|
83
83
|
@targets_table.setItem(row, 2, cmd_cnt)
|
84
84
|
|
85
|
-
tlm_cnt = Qt::TableWidgetItem.new(
|
85
|
+
tlm_cnt = Qt::TableWidgetItem.new(target.tlm_cnt.to_s)
|
86
86
|
tlm_cnt.setTextAlignment(Qt::AlignCenter)
|
87
87
|
@targets_table.setItem(row, 3, tlm_cnt)
|
88
88
|
|
@@ -140,34 +140,43 @@ module Cosmos
|
|
140
140
|
protected
|
141
141
|
|
142
142
|
def handle_packet(packet)
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
143
|
+
if packet.stored
|
144
|
+
# Stored telemetry does not update the current value table
|
145
|
+
identified_packet = System.telemetry.identify_and_define_packet(packet, @interface.target_names)
|
146
|
+
else
|
147
|
+
# Identify and update packet
|
148
|
+
if packet.identified?
|
149
|
+
begin
|
150
|
+
# Preidentifed packet - place it into the current value table
|
151
|
+
identified_packet = System.telemetry.update!(packet.target_name,
|
152
|
+
packet.packet_name,
|
153
|
+
packet.buffer)
|
154
|
+
rescue RuntimeError
|
155
|
+
# Packet identified but we don't know about it
|
156
|
+
# Clear packet_name and target_name and try to identify
|
157
|
+
Logger.warn "Received unknown identified telemetry: #{packet.target_name} #{packet.packet_name}"
|
158
|
+
packet.target_name = nil
|
159
|
+
packet.packet_name = nil
|
160
|
+
identified_packet = System.telemetry.identify!(packet.buffer,
|
161
|
+
@interface.target_names)
|
162
|
+
end
|
163
|
+
else
|
164
|
+
# Packet needs to be identified
|
156
165
|
identified_packet = System.telemetry.identify!(packet.buffer,
|
157
166
|
@interface.target_names)
|
158
167
|
end
|
159
|
-
else
|
160
|
-
# Packet needs to be identified
|
161
|
-
identified_packet = System.telemetry.identify!(packet.buffer,
|
162
|
-
@interface.target_names)
|
163
168
|
end
|
164
169
|
|
165
170
|
if identified_packet
|
166
171
|
identified_packet.received_time = packet.received_time
|
172
|
+
identified_packet.stored = packet.stored
|
173
|
+
identified_packet.extra = packet.extra
|
167
174
|
packet = identified_packet
|
168
175
|
else
|
169
176
|
unknown_packet = System.telemetry.update!('UNKNOWN', 'UNKNOWN', packet.buffer)
|
170
177
|
unknown_packet.received_time = packet.received_time
|
178
|
+
unknown_packet.stored = packet.stored
|
179
|
+
unknown_packet.extra = packet.extra
|
171
180
|
packet = unknown_packet
|
172
181
|
data_length = packet.length
|
173
182
|
string = "#{@interface.name} - Unknown #{data_length} byte packet starting: "
|
@@ -194,9 +203,15 @@ module Cosmos
|
|
194
203
|
end
|
195
204
|
|
196
205
|
# Write to packet log writers
|
197
|
-
|
198
|
-
|
199
|
-
|
206
|
+
if packet.stored and !@interface.stored_packet_log_writer_pairs.empty?
|
207
|
+
@interface.stored_packet_log_writer_pairs.each do |packet_log_writer_pair|
|
208
|
+
packet_log_writer_pair.tlm_log_writer.write(packet)
|
209
|
+
end
|
210
|
+
else
|
211
|
+
@interface.packet_log_writer_pairs.each do |packet_log_writer_pair|
|
212
|
+
# Write errors are handled by the log writer
|
213
|
+
packet_log_writer_pair.tlm_log_writer.write(packet)
|
214
|
+
end
|
200
215
|
end
|
201
216
|
end
|
202
217
|
|