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
|
@@ -717,7 +717,7 @@ module Cosmos
|
|
|
717
717
|
|
|
718
718
|
orig_font = nil
|
|
719
719
|
@@test_suites.each do |suite|
|
|
720
|
-
next if suite.name == "
|
|
720
|
+
next if suite.name == "CustomTestSuite"
|
|
721
721
|
doc = YARD::Registry.resolve(nil, suite.name)
|
|
722
722
|
suite_node = create_node(doc, suite.name, tree) do |node|
|
|
723
723
|
orig_font = node.font(0)
|
|
@@ -1047,10 +1047,10 @@ module Cosmos
|
|
|
1047
1047
|
end
|
|
1048
1048
|
|
|
1049
1049
|
# Build list of TestSuites and Tests
|
|
1050
|
-
@@test_suites = @@test_suites.select {|my_suite| my_suite.name == '
|
|
1050
|
+
@@test_suites = @@test_suites.select {|my_suite| my_suite.name == 'CustomTestSuite'}
|
|
1051
1051
|
tests = []
|
|
1052
1052
|
ObjectSpace.each_object(Class) do |object|
|
|
1053
|
-
next if object.name == '
|
|
1053
|
+
next if object.name == 'CustomTestSuite'
|
|
1054
1054
|
if (object.ancestors.include?(TestSuite) &&
|
|
1055
1055
|
object != TestSuite &&
|
|
1056
1056
|
!ignored_test_suite_classes.include?(object))
|
|
@@ -1140,7 +1140,7 @@ module Cosmos
|
|
|
1140
1140
|
end
|
|
1141
1141
|
end
|
|
1142
1142
|
end
|
|
1143
|
-
@@suites[suite.name.split('::')[-1]] = cur_suite unless suite.name == '
|
|
1143
|
+
@@suites[suite.name.split('::')[-1]] = cur_suite unless suite.name == 'CustomTestSuite'
|
|
1144
1144
|
end
|
|
1145
1145
|
Qt.execute_in_main_thread(true) { @test_runner_chooser.test_suites = @@suites }
|
|
1146
1146
|
end
|
|
@@ -939,6 +939,11 @@ module Cosmos
|
|
|
939
939
|
return false
|
|
940
940
|
end
|
|
941
941
|
|
|
942
|
+
# Validate configurations exist for input filenames
|
|
943
|
+
@input_filenames.each do |input_filename|
|
|
944
|
+
Cosmos.check_log_configuration(@tlm_extractor_processor.packet_log_reader, input_filename)
|
|
945
|
+
end
|
|
946
|
+
|
|
942
947
|
#Validate config information
|
|
943
948
|
@tlm_extractor_processor.packet_log_reader.open(@input_filenames[0])
|
|
944
949
|
@tlm_extractor_processor.packet_log_reader.close
|
|
@@ -48,6 +48,9 @@ module Cosmos
|
|
|
48
48
|
progress_dialog.set_step_progress(0) if progress_dialog
|
|
49
49
|
break if @cancel
|
|
50
50
|
packet_count = 0
|
|
51
|
+
if progress_dialog
|
|
52
|
+
Cosmos.check_log_configuration(@packet_log_reader, log_file)
|
|
53
|
+
end
|
|
51
54
|
@packet_log_reader.each(log_file, true, time_start, time_end) do |packet|
|
|
52
55
|
break if @cancel
|
|
53
56
|
if progress_dialog and packet_count % PROGRESS_UPDATE_PACKET_COUNT == 0
|
|
@@ -19,6 +19,7 @@ Cosmos.catch_fatal_exception do
|
|
|
19
19
|
require 'cosmos/gui/widgets/full_text_search_line_edit'
|
|
20
20
|
require 'cosmos/tools/tlm_viewer/tlm_viewer_config'
|
|
21
21
|
require 'find'
|
|
22
|
+
require 'fileutils'
|
|
22
23
|
end
|
|
23
24
|
|
|
24
25
|
module Cosmos
|
|
@@ -58,7 +59,7 @@ module Cosmos
|
|
|
58
59
|
additional_data = ''
|
|
59
60
|
System.targets.each do |target_name, target|
|
|
60
61
|
tlmviewer_files << target.filename if File.exist?(target.filename)
|
|
61
|
-
screen_dir = File.join(
|
|
62
|
+
screen_dir = File.join(target.dir, 'screens')
|
|
62
63
|
if File.exist?(screen_dir)
|
|
63
64
|
if target.substitute
|
|
64
65
|
additional_data << target.original_name
|
|
@@ -304,7 +305,7 @@ module Cosmos
|
|
|
304
305
|
|
|
305
306
|
results = ''
|
|
306
307
|
screen_dir = File.join(USERPATH, 'config', 'targets', target.original_name, 'screens')
|
|
307
|
-
|
|
308
|
+
FileUtils.mkdir_p(screen_dir, :mode => 0777) unless File.exist?(screen_dir)
|
|
308
309
|
|
|
309
310
|
System.telemetry.packets(target.name).each do |packet_name, packet|
|
|
310
311
|
filename = File.join(screen_dir, packet_name.downcase + '.txt')
|
|
@@ -126,7 +126,7 @@ module Cosmos
|
|
|
126
126
|
when 'AUTO_TARGETS'
|
|
127
127
|
parser.verify_num_parameters(0, 0, 'AUTO_TARGETS')
|
|
128
128
|
System.targets.each do |target_name, target|
|
|
129
|
-
screen_dir = File.join(
|
|
129
|
+
screen_dir = File.join(target.dir, 'screens')
|
|
130
130
|
if File.exist?(screen_dir) and num_screens(screen_dir) > 0
|
|
131
131
|
start_target(target.name, parser)
|
|
132
132
|
auto_screens()
|
|
@@ -138,7 +138,7 @@ module Cosmos
|
|
|
138
138
|
target_name = parameters[0].upcase
|
|
139
139
|
target = System.targets[target_name]
|
|
140
140
|
raise parser.error("Unknown target #{target_name}") unless target
|
|
141
|
-
screen_dir = File.join(
|
|
141
|
+
screen_dir = File.join(target.dir, 'screens')
|
|
142
142
|
if File.exist?(screen_dir) and num_screens(screen_dir) > 0
|
|
143
143
|
start_target(target.name, parser)
|
|
144
144
|
auto_screens()
|
|
@@ -152,7 +152,7 @@ module Cosmos
|
|
|
152
152
|
when 'SCREEN'
|
|
153
153
|
raise parser.error("No target defined. SCREEN must follow TARGET.") unless @current_target
|
|
154
154
|
parser.verify_num_parameters(1, 3, 'SCREEN <Filename> <X Position (optional)> <Y Position (optional)>')
|
|
155
|
-
screen_filename = File.join(
|
|
155
|
+
screen_filename = File.join(@current_target.dir, 'screens', parameters[0])
|
|
156
156
|
start_screen(screen_filename, parameters[1], parameters[2])
|
|
157
157
|
|
|
158
158
|
when 'SHOW_ON_STARTUP'
|
|
@@ -178,7 +178,7 @@ module Cosmos
|
|
|
178
178
|
raise parser.error("No group defined. GROUP_SCREEN must follow GROUP.") unless @current_group
|
|
179
179
|
parser.verify_num_parameters(2, 4, 'GROUP_SCREEN <Target Name> <Screen Filename> <X Position (optional)> <Y Position (Optional)>')
|
|
180
180
|
start_target(parameters[0].upcase, parser, @current_group)
|
|
181
|
-
screen_filename = File.join(
|
|
181
|
+
screen_filename = File.join(@current_target.dir, 'screens', parameters[1])
|
|
182
182
|
start_screen(screen_filename, parameters[2], parameters[3])
|
|
183
183
|
|
|
184
184
|
else
|
|
@@ -203,7 +203,10 @@ module Cosmos
|
|
|
203
203
|
target_screen_infos.each do |target_name, screen_infos|
|
|
204
204
|
file.puts "TARGET \"#{target_name}\""
|
|
205
205
|
screen_infos.each do |screen_name, screen_info|
|
|
206
|
-
|
|
206
|
+
# Grab the filename by indexing the full path for 'screens' and going past
|
|
207
|
+
# to capture the filename such as 'status.txt' below
|
|
208
|
+
# C:/COSMOS/config/targets/TGT/screens/status.txt
|
|
209
|
+
screen_filename = screen_info.filename[(screen_info.filename.index("screens").to_i + 8)..-1]
|
|
207
210
|
string = " SCREEN"
|
|
208
211
|
string << " \"#{screen_filename}\""
|
|
209
212
|
string << " #{screen_info.x_pos}" if screen_info.x_pos
|
|
@@ -246,7 +249,7 @@ module Cosmos
|
|
|
246
249
|
|
|
247
250
|
def auto_screens
|
|
248
251
|
@current_group = nil
|
|
249
|
-
screen_dir = File.join(
|
|
252
|
+
screen_dir = File.join(@current_target.dir, 'screens')
|
|
250
253
|
if File.exist?(screen_dir)
|
|
251
254
|
Dir.new(screen_dir).each do |filename|
|
|
252
255
|
if filename[0..0] != '.'
|
|
@@ -25,11 +25,7 @@ module Cosmos
|
|
|
25
25
|
@items_per_row = items_per_row.to_i
|
|
26
26
|
setFixedSize(width.to_i, height.to_i)
|
|
27
27
|
setReadOnly(true)
|
|
28
|
-
|
|
29
|
-
setFont(Cosmos.getFont("courier", 10))
|
|
30
|
-
else
|
|
31
|
-
setFont(Cosmos.getFont("courier", 14))
|
|
32
|
-
end
|
|
28
|
+
setFont(Cosmos.get_default_font)
|
|
33
29
|
parent_layout.addWidget(self) if parent_layout
|
|
34
30
|
end
|
|
35
31
|
|
|
@@ -26,11 +26,7 @@ module Cosmos
|
|
|
26
26
|
@bytes_per_row = @bytes_per_word * @words_per_row
|
|
27
27
|
@addr_format = ConfigParser.handle_nil(addr_format)
|
|
28
28
|
@addr_format << ' ' if @addr_format
|
|
29
|
-
|
|
30
|
-
setFont(Cosmos.getFont("courier", 10))
|
|
31
|
-
else
|
|
32
|
-
setFont(Cosmos.getFont("courier", 14))
|
|
33
|
-
end
|
|
29
|
+
setFont(Cosmos.get_default_font)
|
|
34
30
|
end
|
|
35
31
|
|
|
36
32
|
def format_value(data)
|
data/lib/cosmos/top_level.rb
CHANGED
|
@@ -17,6 +17,8 @@ require 'cosmos/core_ext'
|
|
|
17
17
|
require 'cosmos/version'
|
|
18
18
|
require 'cosmos/utilities/logger'
|
|
19
19
|
require 'socket'
|
|
20
|
+
require 'pathname'
|
|
21
|
+
require 'bundler'
|
|
20
22
|
|
|
21
23
|
# If a hazardous command is sent through the {Cosmos::Api} this error is raised.
|
|
22
24
|
# {Cosmos::Script} rescues the error and prompts the user to continue.
|
|
@@ -44,6 +46,8 @@ end
|
|
|
44
46
|
# new tool. Be sure to explore the various GUI classes
|
|
45
47
|
module Cosmos
|
|
46
48
|
|
|
49
|
+
BASE_PWD = Dir.pwd
|
|
50
|
+
|
|
47
51
|
# FatalErrors cause an exit but are not as dangerous as other errors.
|
|
48
52
|
# They are used for known issues and thus we don't need a full error report.
|
|
49
53
|
class FatalError < StandardError; end
|
|
@@ -136,6 +140,70 @@ module Cosmos
|
|
|
136
140
|
end
|
|
137
141
|
end
|
|
138
142
|
|
|
143
|
+
# Searches the COSMOS::USERPATH/config/data directory and then the core
|
|
144
|
+
# COSMOS/data directory for the given file name. Returns the absolute file
|
|
145
|
+
# path or nil if the file could not be found. This allows for user configuration
|
|
146
|
+
# files to override COSMOS data file defaults.
|
|
147
|
+
def self.data_path(name)
|
|
148
|
+
# Check USERPATH
|
|
149
|
+
filename = File.join(::Cosmos::USERPATH, 'config', 'data', name)
|
|
150
|
+
return filename if File.exist? filename
|
|
151
|
+
|
|
152
|
+
# Check extensions
|
|
153
|
+
begin
|
|
154
|
+
Bundler.load.specs.each do |spec|
|
|
155
|
+
spec_name_split = spec.name.split('-')
|
|
156
|
+
if spec_name_split.length > 1 and spec_name_split[0] == 'cosmos'
|
|
157
|
+
filename = File.join(spec.gem_dir, 'config', 'data', name)
|
|
158
|
+
return filename if File.exist? filename
|
|
159
|
+
end
|
|
160
|
+
end
|
|
161
|
+
rescue Bundler::GemfileNotFound
|
|
162
|
+
# No Gemfile - so no gem based extensions
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
filename = File.join(::Cosmos::PATH, 'data', name)
|
|
166
|
+
return filename if File.exist? filename
|
|
167
|
+
|
|
168
|
+
# Check CORE
|
|
169
|
+
filename = Cosmos.path('data', name)
|
|
170
|
+
return filename if File.exist? filename
|
|
171
|
+
|
|
172
|
+
nil
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
# Returns a path to a cosmos file. Prefers files in USERPATH but will look
|
|
176
|
+
# relative to calling_file if not present in USERPATH
|
|
177
|
+
# @param calling_file [String] Should be __FILE__ from the calling file
|
|
178
|
+
# @param paths [Array<String>] Partial paths like in File.join
|
|
179
|
+
def self.path(calling_file, *paths)
|
|
180
|
+
partial_path = File.join(*paths)
|
|
181
|
+
|
|
182
|
+
# First look in the Cosmos::USERPATH
|
|
183
|
+
user_path = File.join(Cosmos::USERPATH, partial_path)
|
|
184
|
+
return user_path if File.exist?(user_path)
|
|
185
|
+
|
|
186
|
+
# Then look relative to the calling file
|
|
187
|
+
if Pathname.new(calling_file).absolute?
|
|
188
|
+
current_dir = File.dirname(calling_file)
|
|
189
|
+
else
|
|
190
|
+
current_dir = File.join(BASE_PWD, calling_file)
|
|
191
|
+
end
|
|
192
|
+
while true
|
|
193
|
+
test_path = File.join(current_dir, partial_path)
|
|
194
|
+
if File.exist?(test_path)
|
|
195
|
+
return test_path
|
|
196
|
+
else
|
|
197
|
+
old_current_dir = current_dir
|
|
198
|
+
current_dir = File.expand_path(File.join(current_dir, '..'))
|
|
199
|
+
if old_current_dir == current_dir
|
|
200
|
+
# Hit the root dir - give up
|
|
201
|
+
raise "Could not find path to #{File.join(*paths)}"
|
|
202
|
+
end
|
|
203
|
+
end
|
|
204
|
+
end
|
|
205
|
+
end
|
|
206
|
+
|
|
139
207
|
# Creates a marshal file by serializing the given obj
|
|
140
208
|
#
|
|
141
209
|
# @param marshal_filename [String] Name of the marshal file to create
|
|
@@ -323,7 +391,7 @@ module Cosmos
|
|
|
323
391
|
# Make sure the log directory exists
|
|
324
392
|
raise unless File.exist?(log_dir)
|
|
325
393
|
log_file
|
|
326
|
-
rescue
|
|
394
|
+
rescue Exception
|
|
327
395
|
# If not then we just build a file locally
|
|
328
396
|
if File.exist?('./outputs/logs')
|
|
329
397
|
log_file = File.join('./outputs/logs', File.build_timestamped_filename([filename]))
|
|
@@ -455,12 +523,13 @@ module Cosmos
|
|
|
455
523
|
# @param error [Exception] The exception to handle
|
|
456
524
|
# @param try_gui [Boolean] Whether to try and create a GUI exception popup
|
|
457
525
|
def self.handle_fatal_exception(error, try_gui = true)
|
|
526
|
+
$cosmos_fatal_exception = error
|
|
458
527
|
log_file = self.write_exception_file(error)
|
|
459
528
|
Logger.level = Logger::FATAL unless try_gui
|
|
460
529
|
Logger.fatal "Fatal Exception! Exiting..."
|
|
461
530
|
Logger.fatal error.formatted
|
|
462
|
-
if defined? ExceptionDialog and try_gui
|
|
463
|
-
Qt.execute_in_main_thread(true) {||
|
|
531
|
+
if defined? ExceptionDialog and try_gui and Qt::Application.instance
|
|
532
|
+
Qt.execute_in_main_thread(true) {||ExceptionDialog.new(nil, error, '', true, false, log_file)}
|
|
464
533
|
else
|
|
465
534
|
if $stdout != STDOUT
|
|
466
535
|
$stdout = STDOUT
|
|
@@ -673,4 +742,18 @@ module Cosmos
|
|
|
673
742
|
end
|
|
674
743
|
end
|
|
675
744
|
|
|
745
|
+
# Play a wav file
|
|
746
|
+
# @param wav_filename filename of the wav file
|
|
747
|
+
def self.play_wav_file(wav_filename)
|
|
748
|
+
if defined? Qt and wav_filename
|
|
749
|
+
Qt.execute_in_main_thread(true) do
|
|
750
|
+
if Qt::CoreApplication.instance and Qt::Sound.isAvailable
|
|
751
|
+
Cosmos.set_working_dir do
|
|
752
|
+
Qt::Sound.play(wav_filename.to_s)
|
|
753
|
+
end
|
|
754
|
+
end
|
|
755
|
+
end
|
|
756
|
+
end
|
|
757
|
+
end
|
|
758
|
+
|
|
676
759
|
end
|
data/lib/cosmos/version.rb
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# encoding: ascii-8bit
|
|
2
2
|
|
|
3
|
-
COSMOS_VERSION = '3.
|
|
3
|
+
COSMOS_VERSION = '3.5.0'
|
|
4
4
|
module Cosmos
|
|
5
5
|
module Version
|
|
6
6
|
MAJOR = '3'
|
|
7
|
-
MINOR = '
|
|
8
|
-
PATCH = '
|
|
9
|
-
BUILD = '
|
|
7
|
+
MINOR = '5'
|
|
8
|
+
PATCH = '0'
|
|
9
|
+
BUILD = 'a1963b6efc3b22a28c3abb878079ebad4aa73067'
|
|
10
10
|
end
|
|
11
|
-
VERSION = '3.
|
|
11
|
+
VERSION = '3.5.0'
|
|
12
12
|
end
|
|
@@ -131,7 +131,13 @@ module Cosmos
|
|
|
131
131
|
CBR_115200 = 115200
|
|
132
132
|
CBR_128000 = 128000
|
|
133
133
|
CBR_256000 = 256000
|
|
134
|
-
|
|
134
|
+
|
|
135
|
+
BAUD_RATES = [
|
|
136
|
+
CBR_110, CBR_300, CBR_600, CBR_1200, CBR_2400, CBR_4800, CBR_9600,
|
|
137
|
+
CBR_14400, CBR_19200, CBR_38400, CBR_56000, CBR_57600, CBR_115200,
|
|
138
|
+
CBR_128000, CBR_256000, 230400, 460800, 500000, 576000, 921600,
|
|
139
|
+
1000000, 1152000, 1500000, 2000000, 3000000, 3500000, 4000000
|
|
140
|
+
]
|
|
135
141
|
|
|
136
142
|
# Parity
|
|
137
143
|
NOPARITY = 0
|
|
@@ -125,7 +125,7 @@ module Cosmos
|
|
|
125
125
|
file.write [pkt.buffer.length].pack('N')
|
|
126
126
|
file.write pkt.buffer
|
|
127
127
|
end
|
|
128
|
-
@plr.open(filename)
|
|
128
|
+
expect(@plr.open(filename)).to eql [false, nil]
|
|
129
129
|
pkt1 = @plr.read
|
|
130
130
|
expect(pkt1.target_name).to eql 'TGT1'
|
|
131
131
|
expect(pkt1.packet_name).to eql 'PKT1'
|
|
@@ -139,6 +139,66 @@ module Cosmos
|
|
|
139
139
|
end
|
|
140
140
|
end
|
|
141
141
|
|
|
142
|
+
it "handles saved configuration with errors" do
|
|
143
|
+
begin
|
|
144
|
+
System.class_eval('@@instance = nil')
|
|
145
|
+
|
|
146
|
+
# Save system.txt
|
|
147
|
+
@config_file = File.join(Cosmos::USERPATH,'config','system','system.txt')
|
|
148
|
+
FileUtils.mv @config_file, Cosmos::USERPATH
|
|
149
|
+
|
|
150
|
+
# Create a dummy system.txt
|
|
151
|
+
File.open(@config_file,'w') {|file| file.puts "# This is a comment" }
|
|
152
|
+
@config_targets = File.join(Cosmos::USERPATH,'config','targets')
|
|
153
|
+
|
|
154
|
+
File.open(@config_file,'w') do |file|
|
|
155
|
+
file.puts "DECLARE_TARGET COSMOS"
|
|
156
|
+
file.puts "DECLARE_TARGET COSMOS OVERRIDE"
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
# Load the original configuration
|
|
160
|
+
original_config_name, err = System.load_configuration
|
|
161
|
+
expect(err).to eql nil
|
|
162
|
+
expect(System.telemetry.target_names).to eql %w(COSMOS OVERRIDE)
|
|
163
|
+
original_pkts = System.telemetry.packets('COSMOS').keys
|
|
164
|
+
|
|
165
|
+
# Create a new configuration by writing another telemetry file
|
|
166
|
+
File.open(File.join(@config_targets,'COSMOS','cmd_tlm','test1_tlm.txt'),'w') do |file|
|
|
167
|
+
file.puts "TELEMETRY COSMOS TEST1 BIG_ENDIAN"
|
|
168
|
+
file.puts " APPEND_ITEM DATA 240 STRING"
|
|
169
|
+
end
|
|
170
|
+
System.instance.process_file(@config_file)
|
|
171
|
+
# Verify the new telemetry packet is there
|
|
172
|
+
expect(System.telemetry.packets('COSMOS').keys).to include "TEST1"
|
|
173
|
+
second_config_name = System.configuration_name
|
|
174
|
+
|
|
175
|
+
# Create a log file for the second config
|
|
176
|
+
filename = File.join(@log_path,'test.bin')
|
|
177
|
+
File.open(filename,'wb') do |file|
|
|
178
|
+
file.write "COSMOS2_TLM_#{second_config_name}_#{'A' * 83}"
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
# Corrupt the second config
|
|
182
|
+
second_config_path = System.instance.send(:find_configuration, second_config_name)
|
|
183
|
+
FileUtils.mv File.join(second_config_path, 'system.txt'), File.join(second_config_path, 'system2.txt')
|
|
184
|
+
|
|
185
|
+
# Return to original config
|
|
186
|
+
System.load_configuration
|
|
187
|
+
|
|
188
|
+
# Open the file from the second config and expect an error
|
|
189
|
+
success, error = @plr.open(filename)
|
|
190
|
+
expect(success).to eql false
|
|
191
|
+
expect(error).to_not be_nil
|
|
192
|
+
@plr.close
|
|
193
|
+
ensure
|
|
194
|
+
# Restore system.txt
|
|
195
|
+
FileUtils.mv File.join(Cosmos::USERPATH, 'system.txt'),
|
|
196
|
+
File.join(Cosmos::USERPATH,'config','system')
|
|
197
|
+
|
|
198
|
+
File.delete(File.join(@config_targets,'COSMOS','cmd_tlm','test1_tlm.txt'))
|
|
199
|
+
end
|
|
200
|
+
end
|
|
201
|
+
|
|
142
202
|
describe "packet_offsets and read_at_offset" do
|
|
143
203
|
it "returns packet offsets CTS-20, CTS-22" do
|
|
144
204
|
packet_offsets = @plr.packet_offsets(Dir[File.join(@log_path,"*cmd.bin")][0])
|
|
@@ -148,7 +208,7 @@ module Cosmos
|
|
|
148
208
|
header_length = 8 + 1 + 6 + 1 + 12 + 4
|
|
149
209
|
expect(packet_offsets).to eql [PacketLogReader::COSMOS2_HEADER_LENGTH, PacketLogReader::COSMOS2_HEADER_LENGTH + header_length + @cmd_packet_length, PacketLogReader::COSMOS2_HEADER_LENGTH + (header_length + @cmd_packet_length) * 2]
|
|
150
210
|
|
|
151
|
-
@plr.open(Dir[File.join(@log_path,"*cmd.bin")][0])
|
|
211
|
+
expect(@plr.open(Dir[File.join(@log_path,"*cmd.bin")][0])).to eql [true, nil]
|
|
152
212
|
pkt = @plr.read_at_offset(packet_offsets[1])
|
|
153
213
|
expect(pkt.target_name).to eql "COSMOS"
|
|
154
214
|
expect(pkt.packet_name).to eql "STARTLOGGING"
|
|
@@ -164,7 +224,7 @@ module Cosmos
|
|
|
164
224
|
header_length = 8 + 1 + 6 + 1 + 7 + 4
|
|
165
225
|
expect(packet_offsets).to eql [PacketLogReader::COSMOS2_HEADER_LENGTH, PacketLogReader::COSMOS2_HEADER_LENGTH + header_length + @tlm_packet_length, PacketLogReader::COSMOS2_HEADER_LENGTH + (header_length + @tlm_packet_length) * 2]
|
|
166
226
|
|
|
167
|
-
@plr.open(Dir[File.join(@log_path,"*tlm.bin")][0])
|
|
227
|
+
expect(@plr.open(Dir[File.join(@log_path,"*tlm.bin")][0])).to eql [true, nil]
|
|
168
228
|
pkt = @plr.read_at_offset(packet_offsets[1])
|
|
169
229
|
expect(pkt.target_name).to eql "COSMOS"
|
|
170
230
|
expect(pkt.packet_name).to eql "VERSION"
|
|
@@ -313,7 +373,7 @@ module Cosmos
|
|
|
313
373
|
|
|
314
374
|
describe "first" do
|
|
315
375
|
it "returns the first command packet and retain the file position" do
|
|
316
|
-
@plr.open(Dir[File.join(@log_path,"*cmd.bin")][0])
|
|
376
|
+
expect(@plr.open(Dir[File.join(@log_path,"*cmd.bin")][0])).to eql [true, nil]
|
|
317
377
|
pkt1 = @plr.read
|
|
318
378
|
expect(pkt1.target_name).to eql @cmd_packets[0].target_name
|
|
319
379
|
expect(pkt1.packet_name).to eql @cmd_packets[0].packet_name
|
|
@@ -335,7 +395,7 @@ module Cosmos
|
|
|
335
395
|
end
|
|
336
396
|
|
|
337
397
|
it "returns the first telemetry packet and retain the file position" do
|
|
338
|
-
@plr.open(Dir[File.join(@log_path,"*tlm.bin")][0])
|
|
398
|
+
expect(@plr.open(Dir[File.join(@log_path,"*tlm.bin")][0])).to eql [true, nil]
|
|
339
399
|
pkt1 = @plr.read
|
|
340
400
|
expect(pkt1.target_name).to eql @tlm_packets[0].target_name
|
|
341
401
|
expect(pkt1.packet_name).to eql @tlm_packets[0].packet_name
|
|
@@ -359,7 +419,7 @@ module Cosmos
|
|
|
359
419
|
|
|
360
420
|
describe "last" do
|
|
361
421
|
it "returns the last command packet and retain the file position" do
|
|
362
|
-
@plr.open(Dir[File.join(@log_path,"*cmd.bin")][0])
|
|
422
|
+
expect(@plr.open(Dir[File.join(@log_path,"*cmd.bin")][0])).to eql [true, nil]
|
|
363
423
|
pkt1 = @plr.read
|
|
364
424
|
expect(pkt1.target_name).to eql @cmd_packets[0].target_name
|
|
365
425
|
expect(pkt1.packet_name).to eql @cmd_packets[0].packet_name
|
|
@@ -381,7 +441,7 @@ module Cosmos
|
|
|
381
441
|
end
|
|
382
442
|
|
|
383
443
|
it "returns the last telemetry packet and retain the file position" do
|
|
384
|
-
@plr.open(Dir[File.join(@log_path,"*tlm.bin")][0])
|
|
444
|
+
expect(@plr.open(Dir[File.join(@log_path,"*tlm.bin")][0])).to eql [true, nil]
|
|
385
445
|
pkt1 = @plr.read
|
|
386
446
|
expect(pkt1.target_name).to eql @tlm_packets[0].target_name
|
|
387
447
|
expect(pkt1.packet_name).to eql @tlm_packets[0].packet_name
|