cosmos 3.4.2 → 3.5.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|