cosmos 3.4.2 → 3.5.0
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/Manifest.txt +69 -11
- data/autohotkey/config/targets/INST/cmd_tlm/inst_tlm.txt +23 -0
- data/autohotkey/tools/TestRunnerAHK5 +17 -0
- data/autohotkey/tools/TestRunnerAHK6 +17 -0
- data/autohotkey/tools/cmd_extractor.ahk +6 -0
- data/autohotkey/tools/data_viewer.ahk +6 -0
- data/autohotkey/tools/limits_monitor.ahk +67 -14
- data/autohotkey/tools/replay.ahk +6 -0
- data/autohotkey/tools/test_runner5.ahk +8 -0
- data/autohotkey/tools/test_runner6.ahk +5 -0
- data/autohotkey/tools/tlm_extractor.ahk +25 -1
- data/autohotkey/tools/tlm_grapher.ahk +6 -0
- data/cosmos.gemspec +19 -19
- data/data/crc.txt +46 -46
- data/data/critical.wav +0 -0
- data/data/information.wav +0 -0
- data/data/input.wav +0 -0
- data/data/message.wav +0 -0
- data/data/question.wav +0 -0
- data/data/warning.wav +0 -0
- data/demo/Gemfile +5 -1
- data/demo/Launcher +5 -4
- data/demo/Launcher.bat +6 -56
- data/demo/config/data/crc.txt +73 -55
- data/demo/config/system/system.txt +1 -0
- data/demo/config/targets/EXAMPLE/cmd_tlm/example_tlm.txt +2 -0
- data/demo/procedures/example_test.rb +17 -16
- data/demo/tools/CmdExtractor +6 -5
- data/demo/tools/CmdExtractor.bat +6 -56
- data/demo/tools/CmdSender +6 -5
- data/demo/tools/CmdSender.bat +6 -56
- data/demo/tools/CmdTlmServer +6 -5
- data/demo/tools/CmdTlmServer.bat +6 -56
- data/demo/tools/DataViewer +6 -5
- data/demo/tools/DataViewer.bat +6 -56
- data/demo/tools/ExampleTarget +6 -5
- data/demo/tools/ExampleTarget.bat +6 -56
- data/demo/tools/HandbookCreator +6 -5
- data/demo/tools/HandbookCreator.bat +6 -58
- data/demo/tools/Launcher +6 -5
- data/demo/tools/Launcher.bat +6 -56
- data/demo/tools/LimitsMonitor +6 -5
- data/demo/tools/LimitsMonitor.bat +6 -56
- data/demo/tools/OpenGLBuilder +6 -5
- data/demo/tools/OpenGLBuilder.bat +6 -56
- data/demo/tools/PacketViewer +6 -5
- data/demo/tools/PacketViewer.bat +6 -56
- data/demo/tools/Replay +6 -5
- data/demo/tools/Replay.bat +6 -56
- data/demo/tools/ScpiTarget +6 -5
- data/demo/tools/ScpiTarget.bat +6 -56
- data/demo/tools/ScriptRunner +6 -5
- data/demo/tools/ScriptRunner.bat +6 -56
- data/demo/tools/TableManager +6 -5
- data/demo/tools/TableManager.bat +6 -56
- data/demo/tools/TestRunner +6 -5
- data/demo/tools/TestRunner.bat +6 -56
- data/demo/tools/TlmExtractor +6 -5
- data/demo/tools/TlmExtractor.bat +6 -56
- data/demo/tools/TlmGrapher +6 -5
- data/demo/tools/TlmGrapher.bat +6 -56
- data/demo/tools/TlmViewer +6 -5
- data/demo/tools/TlmViewer.bat +6 -56
- data/demo/tools/ToolLaunch.bat +63 -0
- data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +6 -5
- data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/tool_launch.rb +38 -0
- data/demo/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +6 -5
- data/demo/tools/mac/CmdSender.app/Contents/MacOS/tool_launch.rb +38 -0
- data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +6 -5
- data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/tool_launch.rb +38 -0
- data/demo/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +6 -5
- data/demo/tools/mac/DataViewer.app/Contents/MacOS/tool_launch.rb +38 -0
- data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +6 -5
- data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/tool_launch.rb +38 -0
- data/demo/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +6 -5
- data/demo/tools/mac/Launcher.app/Contents/MacOS/tool_launch.rb +38 -0
- data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +6 -5
- data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/tool_launch.rb +38 -0
- data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +6 -5
- data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/tool_launch.rb +38 -0
- data/demo/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +6 -5
- data/demo/tools/mac/PacketViewer.app/Contents/MacOS/tool_launch.rb +38 -0
- data/demo/tools/mac/Replay.app/Contents/MacOS/Replay.rb +6 -5
- data/demo/tools/mac/Replay.app/Contents/MacOS/tool_launch.rb +38 -0
- data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +6 -5
- data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/tool_launch.rb +38 -0
- data/demo/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +6 -5
- data/demo/tools/mac/TableManager.app/Contents/MacOS/tool_launch.rb +38 -0
- data/demo/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +6 -5
- data/demo/tools/mac/TestRunner.app/Contents/MacOS/tool_launch.rb +38 -0
- data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +6 -5
- data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/tool_launch.rb +38 -0
- data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +6 -5
- data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/tool_launch.rb +38 -0
- data/demo/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +6 -5
- data/demo/tools/mac/TlmViewer.app/Contents/MacOS/tool_launch.rb +38 -0
- data/demo/tools/tool_launch.rb +38 -0
- data/install/Gemfile +5 -1
- data/install/Launcher +5 -3
- data/install/Launcher.bat +6 -56
- data/install/config/data/crc.txt +67 -49
- data/install/config/tools/launcher/launcher.txt +1 -0
- data/install/tools/CmdExtractor +6 -5
- data/install/tools/CmdExtractor.bat +6 -56
- data/install/tools/CmdSender +6 -5
- data/install/tools/CmdSender.bat +6 -56
- data/install/tools/CmdTlmServer +6 -5
- data/install/tools/CmdTlmServer.bat +6 -56
- data/install/tools/DataViewer +6 -5
- data/install/tools/DataViewer.bat +6 -56
- data/install/tools/HandbookCreator +6 -5
- data/install/tools/HandbookCreator.bat +6 -58
- data/install/tools/Launcher +6 -5
- data/install/tools/Launcher.bat +6 -56
- data/install/tools/LimitsMonitor +6 -5
- data/install/tools/LimitsMonitor.bat +6 -56
- data/install/tools/OpenGLBuilder +6 -5
- data/install/tools/OpenGLBuilder.bat +6 -56
- data/install/tools/PacketViewer +6 -5
- data/install/tools/PacketViewer.bat +6 -56
- data/install/tools/Replay +6 -5
- data/install/tools/Replay.bat +6 -56
- data/install/tools/ScriptRunner +6 -5
- data/install/tools/ScriptRunner.bat +6 -56
- data/install/tools/TableManager +6 -5
- data/install/tools/TableManager.bat +6 -56
- data/install/tools/TestRunner +6 -5
- data/install/tools/TestRunner.bat +6 -56
- data/install/tools/TlmExtractor +6 -5
- data/install/tools/TlmExtractor.bat +6 -56
- data/install/tools/TlmGrapher +6 -5
- data/install/tools/TlmGrapher.bat +6 -56
- data/install/tools/TlmViewer +6 -5
- data/install/tools/TlmViewer.bat +6 -56
- data/install/tools/ToolLaunch.bat +63 -0
- data/install/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +6 -5
- data/install/tools/mac/CmdExtractor.app/Contents/MacOS/tool_launch.rb +38 -0
- data/install/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +6 -5
- data/install/tools/mac/CmdSender.app/Contents/MacOS/tool_launch.rb +38 -0
- data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +6 -5
- data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/tool_launch.rb +38 -0
- data/install/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +6 -5
- data/install/tools/mac/DataViewer.app/Contents/MacOS/tool_launch.rb +38 -0
- data/install/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +6 -5
- data/install/tools/mac/HandbookCreator.app/Contents/MacOS/tool_launch.rb +38 -0
- data/install/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +6 -5
- data/install/tools/mac/Launcher.app/Contents/MacOS/tool_launch.rb +38 -0
- data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +6 -5
- data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/tool_launch.rb +38 -0
- data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +6 -5
- data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/tool_launch.rb +38 -0
- data/install/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +6 -5
- data/install/tools/mac/PacketViewer.app/Contents/MacOS/tool_launch.rb +38 -0
- data/install/tools/mac/Replay.app/Contents/MacOS/Replay.rb +6 -5
- data/install/tools/mac/Replay.app/Contents/MacOS/tool_launch.rb +38 -0
- data/install/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +6 -5
- data/install/tools/mac/ScriptRunner.app/Contents/MacOS/tool_launch.rb +38 -0
- data/install/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +6 -5
- data/install/tools/mac/TableManager.app/Contents/MacOS/tool_launch.rb +38 -0
- data/install/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +6 -5
- data/install/tools/mac/TestRunner.app/Contents/MacOS/tool_launch.rb +38 -0
- data/install/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +6 -5
- data/install/tools/mac/TlmExtractor.app/Contents/MacOS/tool_launch.rb +38 -0
- data/install/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +6 -5
- data/install/tools/mac/TlmGrapher.app/Contents/MacOS/tool_launch.rb +38 -0
- data/install/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +6 -5
- data/install/tools/mac/TlmViewer.app/Contents/MacOS/tool_launch.rb +38 -0
- data/install/tools/tool_launch.rb +38 -0
- data/lib/cosmos/core_ext/string.rb +3 -2
- data/lib/cosmos/gui/dialogs/about_dialog.rb +3 -7
- data/lib/cosmos/gui/dialogs/find_replace_dialog.rb +200 -136
- data/lib/cosmos/gui/opengl/gl_viewer.rb +8 -8
- data/lib/cosmos/gui/qt.rb +56 -27
- data/lib/cosmos/gui/qt_tool.rb +3 -1
- data/lib/cosmos/gui/text/ruby_editor.rb +130 -110
- data/lib/cosmos/gui/utilities/script_module_gui.rb +150 -4
- data/lib/cosmos/io/json_drb.rb +1 -1
- data/lib/cosmos/io/win32_serial_driver.rb +2 -4
- data/lib/cosmos/packet_logs/ccsds_log_reader.rb +1 -0
- data/lib/cosmos/packet_logs/packet_log_reader.rb +13 -4
- data/lib/cosmos/packets/limits.rb +6 -3
- data/lib/cosmos/packets/telemetry.rb +34 -3
- data/lib/cosmos/processors/new_packet_log_processor.rb +1 -1
- data/lib/cosmos/script/commands.rb +20 -2
- data/lib/cosmos/script/extract.rb +11 -3
- data/lib/cosmos/script/limits.rb +6 -0
- data/lib/cosmos/script/scripting.rb +17 -9
- data/lib/cosmos/system/system.rb +73 -17
- data/lib/cosmos/system/target.rb +10 -5
- data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +1 -0
- data/lib/cosmos/tools/cmd_tlm_server/api.rb +95 -0
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +8 -4
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +55 -0
- data/lib/cosmos/tools/data_viewer/data_viewer.rb +5 -12
- data/lib/cosmos/tools/data_viewer/data_viewer_component.rb +14 -48
- data/lib/cosmos/tools/handbook_creator/handbook_creator_config.rb +1 -5
- data/lib/cosmos/tools/launcher/launcher.rb +4 -0
- data/lib/cosmos/tools/launcher/launcher_config.rb +50 -0
- data/lib/cosmos/tools/launcher/launcher_tool.rb +21 -9
- data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +607 -566
- data/lib/cosmos/tools/replay/replay.rb +51 -45
- data/lib/cosmos/tools/script_runner/script_runner.rb +13 -5
- data/lib/cosmos/tools/script_runner/script_runner_frame.rb +8 -109
- data/lib/cosmos/tools/test_runner/test.rb +65 -6
- data/lib/cosmos/tools/test_runner/test_runner.rb +4 -4
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +5 -0
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_logfile_thread.rb +3 -0
- data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +3 -2
- data/lib/cosmos/tools/tlm_viewer/tlm_viewer_config.rb +9 -6
- data/lib/cosmos/tools/tlm_viewer/widgets/array_widget.rb +1 -5
- data/lib/cosmos/tools/tlm_viewer/widgets/block_widget.rb +1 -5
- data/lib/cosmos/top_level.rb +86 -3
- data/lib/cosmos/version.rb +5 -5
- data/lib/cosmos/win32/win32_main.rb +7 -1
- data/spec/packet_logs/packet_log_reader_spec.rb +67 -7
- data/spec/packets/limits_spec.rb +19 -1
- data/spec/packets/telemetry_spec.rb +44 -1
- data/spec/script/commands_spec.rb +14 -0
- data/spec/script/scripting_spec.rb +5 -1
- data/spec/script/telemetry_spec.rb +38 -3
- data/spec/system/system_spec.rb +24 -4
- data/spec/tools/cmd_tlm_server/api_spec.rb +30 -0
- data/test/benchmarks/gsub_benchmark.rb +42 -4
- data/test/benchmarks/is_a_benchmark.rb +34 -0
- data/test/performance/config/data/crc.txt +161 -171
- data/test/performance/config/system/system_packets.txt +10 -10
- data/test/performance/config/system/system_threads.txt +30 -30
- data/test/performance/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +7 -2
- data/test/performance/config/targets/PACKET/cmd_tlm/packet_cmds.txt +20 -0
- data/test/performance/config/targets/PACKET/cmd_tlm/packet_tlm.txt +98 -0
- data/test/performance/config/targets/{EXAMPLE → PACKET}/cmd_tlm_server.txt +2 -2
- data/test/performance/config/targets/PACKET/lib/packet_interface.rb +22 -0
- data/test/performance/config/targets/PACKET/lib/packet_limits_response.rb +24 -0
- data/test/performance/config/targets/PACKET/screens/status.txt +25 -0
- data/test/performance/config/targets/PACKET/target.txt +28 -0
- data/test/performance/config/targets/{EXAMPLE/cmd_tlm/example_cmds.txt → THREAD/cmd_tlm/thread_cmds.txt} +1 -1
- data/test/performance/config/targets/{EXAMPLE/cmd_tlm/example_tlm.txt → THREAD/cmd_tlm/thread_tlm.txt} +1 -1
- data/test/performance/config/targets/THREAD/cmd_tlm_server.txt +6 -0
- data/test/performance/config/targets/{EXAMPLE/lib/example_interface.rb → THREAD/lib/thread_interface.rb} +1 -1
- data/test/performance/config/targets/THREAD/screens/status.txt +25 -0
- data/test/performance/config/targets/{EXAMPLE → THREAD}/target.txt +0 -0
- data/test/performance/config/tools/cmd_tlm_server/cmd_tlm_server_packets.txt +24 -30
- data/test/performance/config/tools/cmd_tlm_server/cmd_tlm_server_threads.txt +31 -31
- data/test/performance/config/tools/launcher/launcher_packets.txt +16 -11
- data/test/performance/config/tools/launcher/launcher_threads.txt +41 -35
- data/test/performance/config/tools/tlm_grapher/tlm_grapher.txt +204 -0
- data/test/performance/config/tools/tlm_viewer/tlm_viewer.txt +10 -38
- data/test/performance/lib/packet_target.rb +126 -0
- data/test/performance/lib/{example_target.rb → thread_target.rb} +9 -9
- data/test/performance/tools/CmdTlmServerMemProf +1 -1
- data/test/performance/tools/{ExampleTarget → PacketTarget} +2 -2
- data/test/performance/tools/{ExampleTarget.bat → PacketTarget.bat} +0 -0
- data/test/performance/tools/ThreadTarget +14 -0
- data/test/performance/tools/ThreadTarget.bat +59 -0
- data/test/performance/tools/TlmGrapherMemProf +1 -1
- data/test/performance/tools/TlmViewerMemProf +19 -0
- data/{autohotkey/tools/Replay.bat → test/performance/tools/TlmViewerMemProf.bat} +1 -1
- metadata +107 -55
- data/test/performance/lib/example_background_task.rb +0 -57
- data/test/performance/lib/scpi_target.rb +0 -74
|
@@ -9,9 +9,59 @@
|
|
|
9
9
|
# attribution addendums as found in the LICENSE.txt
|
|
10
10
|
|
|
11
11
|
require 'cosmos/script/script'
|
|
12
|
+
require 'cosmos/gui/choosers/combobox_chooser'
|
|
12
13
|
|
|
13
14
|
$cmd_tlm_gui_window = nil
|
|
14
15
|
|
|
16
|
+
class Qt::Dialog
|
|
17
|
+
def exec(*args)
|
|
18
|
+
Cosmos.play_wav_file(Cosmos.data_path('message.wav')) if Cosmos::System.sound
|
|
19
|
+
method_missing(:exec, *args)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
class Qt::MessageBox
|
|
23
|
+
def exec(*args)
|
|
24
|
+
Cosmos.play_wav_file(Cosmos.data_path('message.wav')) if Cosmos::System.sound
|
|
25
|
+
method_missing(:exec, *args)
|
|
26
|
+
end
|
|
27
|
+
def self.critical(parent, title, text,
|
|
28
|
+
buttons = Qt::MessageBox::Ok,
|
|
29
|
+
defaultButton = Qt::MessageBox::NoButton)
|
|
30
|
+
# Windows overrides critical dialogs with its own alert sound
|
|
31
|
+
Cosmos.play_wav_file(Cosmos.data_path('critical.wav')) if Cosmos::System.sound
|
|
32
|
+
super(parent,title,text,buttons,defaultButton)
|
|
33
|
+
end
|
|
34
|
+
def self.information(parent, title, text,
|
|
35
|
+
buttons = Qt::MessageBox::Ok,
|
|
36
|
+
defaultButton = Qt::MessageBox::NoButton)
|
|
37
|
+
Cosmos.play_wav_file(Cosmos.data_path('information.wav')) if Cosmos::System.sound
|
|
38
|
+
super(parent,title,text,buttons,defaultButton)
|
|
39
|
+
end
|
|
40
|
+
def self.question(parent, title, text,
|
|
41
|
+
buttons = Qt::MessageBox::Ok,
|
|
42
|
+
defaultButton = Qt::MessageBox::NoButton)
|
|
43
|
+
Cosmos.play_wav_file(Cosmos.data_path('question.wav')) if Cosmos::System.sound
|
|
44
|
+
super(parent,title,text,buttons,defaultButton)
|
|
45
|
+
end
|
|
46
|
+
def self.warning(parent, title, text,
|
|
47
|
+
buttons = Qt::MessageBox::Ok,
|
|
48
|
+
defaultButton = Qt::MessageBox::NoButton)
|
|
49
|
+
# Windows overrides warning dialogs with its own alert sound
|
|
50
|
+
Cosmos.play_wav_file(Cosmos.data_path('warning.wav')) if Cosmos::System.sound
|
|
51
|
+
super(parent,title,text,buttons,defaultButton)
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
class Qt::InputDialog
|
|
56
|
+
def self.getText(parent, title, label,
|
|
57
|
+
mode = Qt::LineEdit::Normal,
|
|
58
|
+
text = '', ok = 0, flags = 0,
|
|
59
|
+
inputMethodHints = Qt::ImhNone)
|
|
60
|
+
Cosmos.play_wav_file(Cosmos.data_path('input.wav')) if Cosmos::System.sound
|
|
61
|
+
super(parent, title, label, mode, text, ok, flags, inputMethodHints)
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
15
65
|
module Cosmos
|
|
16
66
|
|
|
17
67
|
# Cosmos script changes to handle hazardous commands and prompts
|
|
@@ -124,7 +174,7 @@ module Cosmos
|
|
|
124
174
|
|
|
125
175
|
def prompt_message_box(string, buttons)
|
|
126
176
|
loop do
|
|
127
|
-
|
|
177
|
+
result = nil
|
|
128
178
|
Qt.execute_in_main_thread(true, 0.05) do
|
|
129
179
|
window = nil
|
|
130
180
|
window = get_cmd_tlm_gui_window() if get_cmd_tlm_gui_window()
|
|
@@ -140,17 +190,113 @@ module Cosmos
|
|
|
140
190
|
else
|
|
141
191
|
Logger.info "User pressed '#{msg.clickedButton.text}' for '#{string}'"
|
|
142
192
|
end
|
|
143
|
-
|
|
193
|
+
result = msg.clickedButton.text
|
|
144
194
|
msg.dispose
|
|
145
195
|
end
|
|
146
|
-
if
|
|
196
|
+
if result == "Cancel"
|
|
197
|
+
prompt_for_script_abort()
|
|
198
|
+
else
|
|
199
|
+
return result
|
|
200
|
+
end
|
|
201
|
+
end
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
def prompt_vertical_message_box(string, buttons)
|
|
205
|
+
loop do
|
|
206
|
+
result = nil
|
|
207
|
+
Qt.execute_in_main_thread(true, 0.05) do
|
|
208
|
+
dialog = _build_dialog(string)
|
|
209
|
+
|
|
210
|
+
button_layout = Qt::VBoxLayout.new
|
|
211
|
+
button_layout.setContentsMargins(11,11,11,11)
|
|
212
|
+
buttons.each do |button_text|
|
|
213
|
+
button = Qt::PushButton.new(button_text)
|
|
214
|
+
button.connect(SIGNAL('clicked()')) do
|
|
215
|
+
result = button_text
|
|
216
|
+
dialog.accept()
|
|
217
|
+
end
|
|
218
|
+
button_layout.addWidget(button)
|
|
219
|
+
end
|
|
220
|
+
dialog.layout.addLayout(button_layout)
|
|
221
|
+
dialog.layout.addWidget(_build_dialog_buttons(dialog, false))
|
|
222
|
+
result = "Cancel" unless _exec_dialog(dialog, string, result)
|
|
223
|
+
end
|
|
224
|
+
if result == "Cancel"
|
|
147
225
|
prompt_for_script_abort()
|
|
148
226
|
else
|
|
149
|
-
return
|
|
227
|
+
return result
|
|
150
228
|
end
|
|
151
229
|
end
|
|
152
230
|
end
|
|
153
231
|
|
|
232
|
+
def prompt_combo_box(string, options)
|
|
233
|
+
loop do
|
|
234
|
+
result = options[0]
|
|
235
|
+
Qt.execute_in_main_thread(true, 0.05) do
|
|
236
|
+
dialog = _build_dialog(string)
|
|
237
|
+
chooser = ComboboxChooser.new(dialog, "Select:", options)
|
|
238
|
+
chooser.setContentsMargins(11,11,11,11)
|
|
239
|
+
chooser.sel_command_callback = lambda { |value| result = value }
|
|
240
|
+
dialog.layout.addWidget(chooser)
|
|
241
|
+
dialog.layout.addWidget(_build_dialog_buttons(dialog))
|
|
242
|
+
result = "Cancel" unless _exec_dialog(dialog, string, result)
|
|
243
|
+
end
|
|
244
|
+
if result == "Cancel"
|
|
245
|
+
prompt_for_script_abort()
|
|
246
|
+
else
|
|
247
|
+
return result
|
|
248
|
+
end
|
|
249
|
+
end
|
|
250
|
+
end
|
|
251
|
+
|
|
252
|
+
def _build_dialog(message)
|
|
253
|
+
window = nil
|
|
254
|
+
window = get_cmd_tlm_gui_window() if get_cmd_tlm_gui_window()
|
|
255
|
+
dialog = Qt::Dialog.new(window)
|
|
256
|
+
dialog.setWindowTitle("Message Box")
|
|
257
|
+
layout = Qt::VBoxLayout.new
|
|
258
|
+
layout.setContentsMargins(0,0,0,0)
|
|
259
|
+
|
|
260
|
+
label = Qt::Label.new(message)
|
|
261
|
+
label.setStyleSheet("background-color: white;")
|
|
262
|
+
label.setMargin(11)
|
|
263
|
+
layout.addWidget(label)
|
|
264
|
+
dialog.setLayout(layout)
|
|
265
|
+
dialog
|
|
266
|
+
end
|
|
267
|
+
|
|
268
|
+
def _exec_dialog(dialog, message, selection)
|
|
269
|
+
result = true
|
|
270
|
+
if dialog.exec() == Qt::Dialog::Accepted
|
|
271
|
+
Logger.info "User selected '#{selection}' for '#{message}'"
|
|
272
|
+
else
|
|
273
|
+
Logger.warn "User pressed 'Cancel' for '#{message}'"
|
|
274
|
+
result = false
|
|
275
|
+
end
|
|
276
|
+
dialog.dispose
|
|
277
|
+
result
|
|
278
|
+
end
|
|
279
|
+
|
|
280
|
+
def _build_dialog_buttons(dialog, ok_button = true)
|
|
281
|
+
button_layout = Qt::HBoxLayout.new
|
|
282
|
+
if ok_button
|
|
283
|
+
ok = Qt::PushButton.new("Ok")
|
|
284
|
+
ok.connect(SIGNAL('clicked()')) do
|
|
285
|
+
dialog.accept()
|
|
286
|
+
end
|
|
287
|
+
button_layout.addWidget(ok)
|
|
288
|
+
end
|
|
289
|
+
cancel = Qt::PushButton.new("Cancel")
|
|
290
|
+
cancel.connect(SIGNAL('clicked()')) do
|
|
291
|
+
dialog.reject()
|
|
292
|
+
end
|
|
293
|
+
button_layout.addWidget(cancel)
|
|
294
|
+
|
|
295
|
+
widget = Qt::Widget.new
|
|
296
|
+
widget.setLayout(button_layout)
|
|
297
|
+
widget
|
|
298
|
+
end
|
|
299
|
+
|
|
154
300
|
def get_scriptrunner_log_message(title_text = "Script Message Log Text Entry", prompt_text = 'Enter text to log to the script message log')
|
|
155
301
|
answer = ""
|
|
156
302
|
canceled = false
|
data/lib/cosmos/io/json_drb.rb
CHANGED
|
@@ -290,7 +290,7 @@ module Cosmos
|
|
|
290
290
|
request_data = JsonDRb.receive_message(my_socket, data)
|
|
291
291
|
start_time = Time.now
|
|
292
292
|
@request_count += 1
|
|
293
|
-
rescue Errno::ECONNRESET, Errno::ECONNABORTED
|
|
293
|
+
rescue Errno::ECONNRESET, Errno::ECONNABORTED, Errno::ENOTSOCK
|
|
294
294
|
# Socket was closed
|
|
295
295
|
break
|
|
296
296
|
end
|
|
@@ -112,8 +112,7 @@ module Cosmos
|
|
|
112
112
|
|
|
113
113
|
loop do
|
|
114
114
|
loop do
|
|
115
|
-
|
|
116
|
-
buffer = Win32.read_file(@handle, 1)
|
|
115
|
+
buffer = Win32.read_file(@handle, @read_max_length - data.length)
|
|
117
116
|
data << buffer
|
|
118
117
|
break if buffer.length <= 0 or data.length >= @read_max_length
|
|
119
118
|
end
|
|
@@ -133,8 +132,7 @@ module Cosmos
|
|
|
133
132
|
data = ''
|
|
134
133
|
|
|
135
134
|
loop do
|
|
136
|
-
|
|
137
|
-
buffer = Win32.read_file(@handle, 1)
|
|
135
|
+
buffer = Win32.read_file(@handle, @read_max_length - data.length)
|
|
138
136
|
data << buffer
|
|
139
137
|
break if buffer.length <= 0 or data.length >= @read_max_length
|
|
140
138
|
end
|
|
@@ -89,6 +89,7 @@ module Cosmos
|
|
|
89
89
|
@file_header_length = 0
|
|
90
90
|
@file.seek(0, IO::SEEK_SET)
|
|
91
91
|
System.load_configuration(nil)
|
|
92
|
+
return true, nil # No configuration name supported so always return success
|
|
92
93
|
else
|
|
93
94
|
raise "Failed to read at least #{CCSDS_HEADER_LENGTH} bytes from packet log"
|
|
94
95
|
end
|
|
@@ -107,13 +107,16 @@ module Cosmos
|
|
|
107
107
|
end
|
|
108
108
|
|
|
109
109
|
# @param filename [String] The log filename to open
|
|
110
|
+
# @return [Boolean, Exception] Returns true if successfully changed to configuration specified in log,
|
|
111
|
+
# otherwise returns false and potentially an Exception class if an error occurred. If no error occurred
|
|
112
|
+
# false indicates that the requested configuration was simply not found
|
|
110
113
|
def open(filename)
|
|
111
114
|
close()
|
|
112
115
|
reset()
|
|
113
116
|
@filename = filename
|
|
114
117
|
@file = BufferedFile.open(@filename, 'rb')
|
|
115
118
|
@bytes_read = 0
|
|
116
|
-
read_file_header()
|
|
119
|
+
return read_file_header()
|
|
117
120
|
rescue => err
|
|
118
121
|
close()
|
|
119
122
|
raise err
|
|
@@ -253,29 +256,35 @@ module Cosmos
|
|
|
253
256
|
packet
|
|
254
257
|
end
|
|
255
258
|
|
|
259
|
+
# Should return if successfully switched to requested configuration
|
|
256
260
|
def read_file_header
|
|
257
261
|
header = @file.read(COSMOS2_HEADER_LENGTH)
|
|
258
262
|
if header and header.length == COSMOS2_HEADER_LENGTH
|
|
259
263
|
if header[COSMOS2_MARKER_RANGE] == COSMOS2_MARKER
|
|
260
264
|
# Found COSMOS 2 File Header
|
|
261
265
|
@log_type = header[COSMOS2_LOG_TYPE_RANGE].intern
|
|
266
|
+
raise "Unknown log type #{@log_type}" unless [:CMD, :TLM].include? @log_type
|
|
262
267
|
@configuration_name = header[COSMOS2_CONFIGURATION_NAME_RANGE]
|
|
263
268
|
@hostname = header[COSMOS2_HOSTNAME_RANGE].strip
|
|
264
269
|
@file_header_length = COSMOS2_HEADER_LENGTH
|
|
265
|
-
System.load_configuration(@configuration_name)
|
|
270
|
+
new_config_name, error = System.load_configuration(@configuration_name)
|
|
271
|
+
return true, error if new_config_name == @configuration_name
|
|
272
|
+
return false, error # Did not successfully change to requested configuration name
|
|
266
273
|
elsif header[COSMOS1_MARKER_RANGE] == COSMOS1_MARKER
|
|
267
274
|
# Found COSMOS 1 File Header
|
|
268
275
|
@log_type = header[COSMOS1_LOG_TYPE_RANGE].upcase.intern
|
|
276
|
+
raise "Unknown log type #{@log_type}" unless [:CMD, :TLM].include? @log_type
|
|
269
277
|
@configuration_name = header[COSMOS1_CONFIGURATION_NAME_RANGE]
|
|
270
278
|
@hostname = nil
|
|
271
279
|
@file_header_length = COSMOS1_HEADER_LENGTH
|
|
272
280
|
# Move back to beginning of first packet
|
|
273
281
|
@file.seek(COSMOS1_HEADER_LENGTH, IO::SEEK_SET)
|
|
274
|
-
System.load_configuration(@configuration_name)
|
|
282
|
+
new_config_name, error = System.load_configuration(@configuration_name)
|
|
283
|
+
return true, error if new_config_name == @configuration_name
|
|
284
|
+
return false, error # Did not successfully change to requested configuration name
|
|
275
285
|
else
|
|
276
286
|
raise "COSMOS file header not found on packet log"
|
|
277
287
|
end
|
|
278
|
-
raise "Unknown log type #{@log_type}" unless [:CMD, :TLM].include? @log_type
|
|
279
288
|
else
|
|
280
289
|
raise "Failed to read at least #{COSMOS2_HEADER_LENGTH} bytes from packet log"
|
|
281
290
|
end
|
|
@@ -249,9 +249,12 @@ module Cosmos
|
|
|
249
249
|
return packet
|
|
250
250
|
end
|
|
251
251
|
|
|
252
|
-
def includes_item?(
|
|
253
|
-
|
|
254
|
-
if ((array_target_name == target_name) &&
|
|
252
|
+
def includes_item?(ignored_items, target_name, packet_name, item_name)
|
|
253
|
+
ignored_items.each do |array_target_name, array_packet_name, array_item_name|
|
|
254
|
+
if ((array_target_name == target_name) &&
|
|
255
|
+
(array_packet_name == packet_name) &&
|
|
256
|
+
# If the item name is nil we're ignoring an entire packet
|
|
257
|
+
(array_item_name == item_name || array_item_name.nil?))
|
|
255
258
|
return true
|
|
256
259
|
end
|
|
257
260
|
end
|
|
@@ -244,13 +244,43 @@ module Cosmos
|
|
|
244
244
|
|
|
245
245
|
# Iterates through all the telemetry packets and marks them stale if they
|
|
246
246
|
# haven't been received for over the System.staleness_seconds value.
|
|
247
|
+
#
|
|
248
|
+
# @return [Array(Packet)] Array of the stale packets
|
|
247
249
|
def check_stale
|
|
250
|
+
stale = []
|
|
248
251
|
time = Time.now
|
|
249
252
|
@config.telemetry.each do |target_name, target_packets|
|
|
250
253
|
target_packets.each do |packet_name, packet|
|
|
251
|
-
|
|
254
|
+
if packet.received_time and (!packet.stale) and (time - packet.received_time > System.staleness_seconds)
|
|
255
|
+
packet.set_stale
|
|
256
|
+
stale << packet
|
|
257
|
+
end
|
|
258
|
+
end
|
|
259
|
+
end
|
|
260
|
+
stale
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
# @param with_limits_only [Boolean] Return only the stale packets
|
|
264
|
+
# that have limits items and thus affect the overall limits
|
|
265
|
+
# state of the system
|
|
266
|
+
# @param target [String] Target name or nil for all targets
|
|
267
|
+
# @return [Array(Packet)] Array of the stale packets
|
|
268
|
+
def stale(with_limits_only = false, target = nil)
|
|
269
|
+
if target && !target_names.include?(target)
|
|
270
|
+
raise "Telemetry target '#{target.upcase}' does not exist"
|
|
271
|
+
end
|
|
272
|
+
stale = []
|
|
273
|
+
@config.telemetry.each do |target_name, target_packets|
|
|
274
|
+
next if (target && target != target_name)
|
|
275
|
+
next if target_name == 'UNKNOWN'
|
|
276
|
+
target_packets.each do |packet_name, packet|
|
|
277
|
+
if packet.stale
|
|
278
|
+
next if (with_limits_only && packet.limits_items.empty?)
|
|
279
|
+
stale << packet
|
|
280
|
+
end
|
|
252
281
|
end
|
|
253
282
|
end
|
|
283
|
+
stale
|
|
254
284
|
end
|
|
255
285
|
|
|
256
286
|
# Clears the received_count value on every packet in every target
|
|
@@ -308,8 +338,9 @@ module Cosmos
|
|
|
308
338
|
strings
|
|
309
339
|
end
|
|
310
340
|
|
|
311
|
-
# @return [Hash
|
|
312
|
-
# keyed by the
|
|
341
|
+
# @return [Hash{String=>Hash{String=>Packet}}] Hash of all the telemetry
|
|
342
|
+
# packets keyed by the target name. The value is another hash keyed by the
|
|
343
|
+
# packet name returning the packet.
|
|
313
344
|
def all
|
|
314
345
|
@config.telemetry
|
|
315
346
|
end
|
|
@@ -161,6 +161,24 @@ module Cosmos
|
|
|
161
161
|
return $cmd_tlm_server.get_cmd_hazardous(target_name, cmd_name, cmd_params)
|
|
162
162
|
end
|
|
163
163
|
|
|
164
|
-
|
|
165
|
-
|
|
164
|
+
# Returns a value from the specified command
|
|
165
|
+
def get_cmd_value(target_name, command_name, parameter_name, value_type = :CONVERTED)
|
|
166
|
+
return $cmd_tlm_server.get_cmd_value(target_name, command_name, parameter_name, value_type)
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
# Returns the time the most recent command was sent
|
|
170
|
+
def get_cmd_time(target_name = nil, command_name = nil)
|
|
171
|
+
results = $cmd_tlm_server.get_cmd_time(target_name, command_name)
|
|
172
|
+
if Array === results
|
|
173
|
+
if results[2] and results[3]
|
|
174
|
+
results[2] = Time.at(results[2], results[3])
|
|
175
|
+
end
|
|
176
|
+
results.delete_at(3)
|
|
177
|
+
end
|
|
178
|
+
results
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
end # module Script
|
|
182
|
+
|
|
183
|
+
end # module Cosmos
|
|
166
184
|
|
|
@@ -86,12 +86,20 @@ module Cosmos
|
|
|
86
86
|
end
|
|
87
87
|
|
|
88
88
|
def extract_fields_from_set_tlm_text(text)
|
|
89
|
-
|
|
90
|
-
|
|
89
|
+
error_msg = "ERROR: Set Telemetry Item must be specified as 'TargetName PacketName ItemName = Value' : #{text}"
|
|
90
|
+
# We have to handle these cases:
|
|
91
|
+
# set_tlm("TGT PKT ITEM='new item'")
|
|
92
|
+
# set_tlm("TGT PKT ITEM = 'new item'")
|
|
93
|
+
# set_tlm("TGT PKT ITEM= 'new item'")
|
|
94
|
+
# set_tlm("TGT PKT ITEM ='new item'")
|
|
95
|
+
split_string = text.split('=')
|
|
96
|
+
raise error_msg if split_string.length < 2 || split_string[1].strip.empty?
|
|
97
|
+
split_string = split_string[0].strip.split << split_string[1..-1].join('=').strip
|
|
98
|
+
raise error_msg if split_string.length != 4 # Ensure tgt,pkt,item,value
|
|
91
99
|
target_name = split_string[0]
|
|
92
100
|
packet_name = split_string[1]
|
|
93
101
|
item_name = split_string[2]
|
|
94
|
-
value = split_string[
|
|
102
|
+
value = split_string[3].strip.convert_to_value
|
|
95
103
|
value = value.remove_quotes if String === value
|
|
96
104
|
return [target_name, packet_name, item_name, value]
|
|
97
105
|
end
|
data/lib/cosmos/script/limits.rb
CHANGED
|
@@ -37,6 +37,10 @@ module Cosmos
|
|
|
37
37
|
return $cmd_tlm_server.disable_limits(*args)
|
|
38
38
|
end
|
|
39
39
|
|
|
40
|
+
def get_stale(with_limits_only = false, target_name = nil)
|
|
41
|
+
return $cmd_tlm_server.get_stale(with_limits_only, target_name)
|
|
42
|
+
end
|
|
43
|
+
|
|
40
44
|
def get_limits(target_name, packet_name, item_name, limits_set = nil)
|
|
41
45
|
results = $cmd_tlm_server.get_limits(target_name, packet_name, item_name, limits_set)
|
|
42
46
|
results[0] = results[0].to_s.intern if results[0]
|
|
@@ -96,6 +100,8 @@ module Cosmos
|
|
|
96
100
|
result[1][4] = result[1][4].to_s.intern if result[1][4]
|
|
97
101
|
elsif result[0] == :LIMITS_SETTINGS
|
|
98
102
|
result[1][3] = result[1][3].to_s.intern if result[1][3]
|
|
103
|
+
elsif result[0] == :STALE_PACKET
|
|
104
|
+
# Nothing extra to do
|
|
99
105
|
else
|
|
100
106
|
result[1] = result[1].to_s.intern
|
|
101
107
|
end
|
|
@@ -19,15 +19,7 @@ module Cosmos
|
|
|
19
19
|
include Extract
|
|
20
20
|
|
|
21
21
|
def play_wav_file(wav_filename)
|
|
22
|
-
|
|
23
|
-
Qt.execute_in_main_thread(true) do
|
|
24
|
-
if Qt::CoreApplication.instance and Qt::Sound.isAvailable
|
|
25
|
-
Cosmos.set_working_dir do
|
|
26
|
-
Qt::Sound.play(wav_filename.to_s)
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
end
|
|
22
|
+
Cosmos.play_wav_file(wav_filename)
|
|
31
23
|
end
|
|
32
24
|
|
|
33
25
|
def status_bar(message)
|
|
@@ -69,6 +61,14 @@ module Cosmos
|
|
|
69
61
|
prompt_message_box(string, buttons)
|
|
70
62
|
end
|
|
71
63
|
|
|
64
|
+
def vertical_message_box(string, *buttons)
|
|
65
|
+
prompt_vertical_message_box(string, buttons)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def combo_box(string, *options)
|
|
69
|
+
prompt_combo_box(string, options)
|
|
70
|
+
end
|
|
71
|
+
|
|
72
72
|
# Creates a string with the parameters upcased
|
|
73
73
|
def _upcase(target_name, packet_name, item_name)
|
|
74
74
|
"#{target_name.upcase} #{packet_name.upcase} #{item_name.upcase}"
|
|
@@ -884,6 +884,14 @@ module Cosmos
|
|
|
884
884
|
gets.chomp
|
|
885
885
|
end
|
|
886
886
|
|
|
887
|
+
def prompt_vertical_message_box(string, options)
|
|
888
|
+
prompt_message_box(string, options)
|
|
889
|
+
end
|
|
890
|
+
|
|
891
|
+
def prompt_combo_box(string, options)
|
|
892
|
+
prompt_message_box(string, options)
|
|
893
|
+
end
|
|
894
|
+
|
|
887
895
|
end # module Script
|
|
888
896
|
|
|
889
897
|
end # module Cosmos
|