cosmos 4.2.4-java → 4.3.0-java
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
|