cosmos 3.4.2 → 3.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (261) hide show
  1. checksums.yaml +4 -4
  2. data/Manifest.txt +69 -11
  3. data/autohotkey/config/targets/INST/cmd_tlm/inst_tlm.txt +23 -0
  4. data/autohotkey/tools/TestRunnerAHK5 +17 -0
  5. data/autohotkey/tools/TestRunnerAHK6 +17 -0
  6. data/autohotkey/tools/cmd_extractor.ahk +6 -0
  7. data/autohotkey/tools/data_viewer.ahk +6 -0
  8. data/autohotkey/tools/limits_monitor.ahk +67 -14
  9. data/autohotkey/tools/replay.ahk +6 -0
  10. data/autohotkey/tools/test_runner5.ahk +8 -0
  11. data/autohotkey/tools/test_runner6.ahk +5 -0
  12. data/autohotkey/tools/tlm_extractor.ahk +25 -1
  13. data/autohotkey/tools/tlm_grapher.ahk +6 -0
  14. data/cosmos.gemspec +19 -19
  15. data/data/crc.txt +46 -46
  16. data/data/critical.wav +0 -0
  17. data/data/information.wav +0 -0
  18. data/data/input.wav +0 -0
  19. data/data/message.wav +0 -0
  20. data/data/question.wav +0 -0
  21. data/data/warning.wav +0 -0
  22. data/demo/Gemfile +5 -1
  23. data/demo/Launcher +5 -4
  24. data/demo/Launcher.bat +6 -56
  25. data/demo/config/data/crc.txt +73 -55
  26. data/demo/config/system/system.txt +1 -0
  27. data/demo/config/targets/EXAMPLE/cmd_tlm/example_tlm.txt +2 -0
  28. data/demo/procedures/example_test.rb +17 -16
  29. data/demo/tools/CmdExtractor +6 -5
  30. data/demo/tools/CmdExtractor.bat +6 -56
  31. data/demo/tools/CmdSender +6 -5
  32. data/demo/tools/CmdSender.bat +6 -56
  33. data/demo/tools/CmdTlmServer +6 -5
  34. data/demo/tools/CmdTlmServer.bat +6 -56
  35. data/demo/tools/DataViewer +6 -5
  36. data/demo/tools/DataViewer.bat +6 -56
  37. data/demo/tools/ExampleTarget +6 -5
  38. data/demo/tools/ExampleTarget.bat +6 -56
  39. data/demo/tools/HandbookCreator +6 -5
  40. data/demo/tools/HandbookCreator.bat +6 -58
  41. data/demo/tools/Launcher +6 -5
  42. data/demo/tools/Launcher.bat +6 -56
  43. data/demo/tools/LimitsMonitor +6 -5
  44. data/demo/tools/LimitsMonitor.bat +6 -56
  45. data/demo/tools/OpenGLBuilder +6 -5
  46. data/demo/tools/OpenGLBuilder.bat +6 -56
  47. data/demo/tools/PacketViewer +6 -5
  48. data/demo/tools/PacketViewer.bat +6 -56
  49. data/demo/tools/Replay +6 -5
  50. data/demo/tools/Replay.bat +6 -56
  51. data/demo/tools/ScpiTarget +6 -5
  52. data/demo/tools/ScpiTarget.bat +6 -56
  53. data/demo/tools/ScriptRunner +6 -5
  54. data/demo/tools/ScriptRunner.bat +6 -56
  55. data/demo/tools/TableManager +6 -5
  56. data/demo/tools/TableManager.bat +6 -56
  57. data/demo/tools/TestRunner +6 -5
  58. data/demo/tools/TestRunner.bat +6 -56
  59. data/demo/tools/TlmExtractor +6 -5
  60. data/demo/tools/TlmExtractor.bat +6 -56
  61. data/demo/tools/TlmGrapher +6 -5
  62. data/demo/tools/TlmGrapher.bat +6 -56
  63. data/demo/tools/TlmViewer +6 -5
  64. data/demo/tools/TlmViewer.bat +6 -56
  65. data/demo/tools/ToolLaunch.bat +63 -0
  66. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +6 -5
  67. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/tool_launch.rb +38 -0
  68. data/demo/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +6 -5
  69. data/demo/tools/mac/CmdSender.app/Contents/MacOS/tool_launch.rb +38 -0
  70. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +6 -5
  71. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/tool_launch.rb +38 -0
  72. data/demo/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +6 -5
  73. data/demo/tools/mac/DataViewer.app/Contents/MacOS/tool_launch.rb +38 -0
  74. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +6 -5
  75. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/tool_launch.rb +38 -0
  76. data/demo/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +6 -5
  77. data/demo/tools/mac/Launcher.app/Contents/MacOS/tool_launch.rb +38 -0
  78. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +6 -5
  79. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/tool_launch.rb +38 -0
  80. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +6 -5
  81. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/tool_launch.rb +38 -0
  82. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +6 -5
  83. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/tool_launch.rb +38 -0
  84. data/demo/tools/mac/Replay.app/Contents/MacOS/Replay.rb +6 -5
  85. data/demo/tools/mac/Replay.app/Contents/MacOS/tool_launch.rb +38 -0
  86. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +6 -5
  87. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/tool_launch.rb +38 -0
  88. data/demo/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +6 -5
  89. data/demo/tools/mac/TableManager.app/Contents/MacOS/tool_launch.rb +38 -0
  90. data/demo/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +6 -5
  91. data/demo/tools/mac/TestRunner.app/Contents/MacOS/tool_launch.rb +38 -0
  92. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +6 -5
  93. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/tool_launch.rb +38 -0
  94. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +6 -5
  95. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/tool_launch.rb +38 -0
  96. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +6 -5
  97. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/tool_launch.rb +38 -0
  98. data/demo/tools/tool_launch.rb +38 -0
  99. data/install/Gemfile +5 -1
  100. data/install/Launcher +5 -3
  101. data/install/Launcher.bat +6 -56
  102. data/install/config/data/crc.txt +67 -49
  103. data/install/config/tools/launcher/launcher.txt +1 -0
  104. data/install/tools/CmdExtractor +6 -5
  105. data/install/tools/CmdExtractor.bat +6 -56
  106. data/install/tools/CmdSender +6 -5
  107. data/install/tools/CmdSender.bat +6 -56
  108. data/install/tools/CmdTlmServer +6 -5
  109. data/install/tools/CmdTlmServer.bat +6 -56
  110. data/install/tools/DataViewer +6 -5
  111. data/install/tools/DataViewer.bat +6 -56
  112. data/install/tools/HandbookCreator +6 -5
  113. data/install/tools/HandbookCreator.bat +6 -58
  114. data/install/tools/Launcher +6 -5
  115. data/install/tools/Launcher.bat +6 -56
  116. data/install/tools/LimitsMonitor +6 -5
  117. data/install/tools/LimitsMonitor.bat +6 -56
  118. data/install/tools/OpenGLBuilder +6 -5
  119. data/install/tools/OpenGLBuilder.bat +6 -56
  120. data/install/tools/PacketViewer +6 -5
  121. data/install/tools/PacketViewer.bat +6 -56
  122. data/install/tools/Replay +6 -5
  123. data/install/tools/Replay.bat +6 -56
  124. data/install/tools/ScriptRunner +6 -5
  125. data/install/tools/ScriptRunner.bat +6 -56
  126. data/install/tools/TableManager +6 -5
  127. data/install/tools/TableManager.bat +6 -56
  128. data/install/tools/TestRunner +6 -5
  129. data/install/tools/TestRunner.bat +6 -56
  130. data/install/tools/TlmExtractor +6 -5
  131. data/install/tools/TlmExtractor.bat +6 -56
  132. data/install/tools/TlmGrapher +6 -5
  133. data/install/tools/TlmGrapher.bat +6 -56
  134. data/install/tools/TlmViewer +6 -5
  135. data/install/tools/TlmViewer.bat +6 -56
  136. data/install/tools/ToolLaunch.bat +63 -0
  137. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +6 -5
  138. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/tool_launch.rb +38 -0
  139. data/install/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +6 -5
  140. data/install/tools/mac/CmdSender.app/Contents/MacOS/tool_launch.rb +38 -0
  141. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +6 -5
  142. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/tool_launch.rb +38 -0
  143. data/install/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +6 -5
  144. data/install/tools/mac/DataViewer.app/Contents/MacOS/tool_launch.rb +38 -0
  145. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +6 -5
  146. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/tool_launch.rb +38 -0
  147. data/install/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +6 -5
  148. data/install/tools/mac/Launcher.app/Contents/MacOS/tool_launch.rb +38 -0
  149. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +6 -5
  150. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/tool_launch.rb +38 -0
  151. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +6 -5
  152. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/tool_launch.rb +38 -0
  153. data/install/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +6 -5
  154. data/install/tools/mac/PacketViewer.app/Contents/MacOS/tool_launch.rb +38 -0
  155. data/install/tools/mac/Replay.app/Contents/MacOS/Replay.rb +6 -5
  156. data/install/tools/mac/Replay.app/Contents/MacOS/tool_launch.rb +38 -0
  157. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +6 -5
  158. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/tool_launch.rb +38 -0
  159. data/install/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +6 -5
  160. data/install/tools/mac/TableManager.app/Contents/MacOS/tool_launch.rb +38 -0
  161. data/install/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +6 -5
  162. data/install/tools/mac/TestRunner.app/Contents/MacOS/tool_launch.rb +38 -0
  163. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +6 -5
  164. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/tool_launch.rb +38 -0
  165. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +6 -5
  166. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/tool_launch.rb +38 -0
  167. data/install/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +6 -5
  168. data/install/tools/mac/TlmViewer.app/Contents/MacOS/tool_launch.rb +38 -0
  169. data/install/tools/tool_launch.rb +38 -0
  170. data/lib/cosmos/core_ext/string.rb +3 -2
  171. data/lib/cosmos/gui/dialogs/about_dialog.rb +3 -7
  172. data/lib/cosmos/gui/dialogs/find_replace_dialog.rb +200 -136
  173. data/lib/cosmos/gui/opengl/gl_viewer.rb +8 -8
  174. data/lib/cosmos/gui/qt.rb +56 -27
  175. data/lib/cosmos/gui/qt_tool.rb +3 -1
  176. data/lib/cosmos/gui/text/ruby_editor.rb +130 -110
  177. data/lib/cosmos/gui/utilities/script_module_gui.rb +150 -4
  178. data/lib/cosmos/io/json_drb.rb +1 -1
  179. data/lib/cosmos/io/win32_serial_driver.rb +2 -4
  180. data/lib/cosmos/packet_logs/ccsds_log_reader.rb +1 -0
  181. data/lib/cosmos/packet_logs/packet_log_reader.rb +13 -4
  182. data/lib/cosmos/packets/limits.rb +6 -3
  183. data/lib/cosmos/packets/telemetry.rb +34 -3
  184. data/lib/cosmos/processors/new_packet_log_processor.rb +1 -1
  185. data/lib/cosmos/script/commands.rb +20 -2
  186. data/lib/cosmos/script/extract.rb +11 -3
  187. data/lib/cosmos/script/limits.rb +6 -0
  188. data/lib/cosmos/script/scripting.rb +17 -9
  189. data/lib/cosmos/system/system.rb +73 -17
  190. data/lib/cosmos/system/target.rb +10 -5
  191. data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +1 -0
  192. data/lib/cosmos/tools/cmd_tlm_server/api.rb +95 -0
  193. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +8 -4
  194. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +55 -0
  195. data/lib/cosmos/tools/data_viewer/data_viewer.rb +5 -12
  196. data/lib/cosmos/tools/data_viewer/data_viewer_component.rb +14 -48
  197. data/lib/cosmos/tools/handbook_creator/handbook_creator_config.rb +1 -5
  198. data/lib/cosmos/tools/launcher/launcher.rb +4 -0
  199. data/lib/cosmos/tools/launcher/launcher_config.rb +50 -0
  200. data/lib/cosmos/tools/launcher/launcher_tool.rb +21 -9
  201. data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +607 -566
  202. data/lib/cosmos/tools/replay/replay.rb +51 -45
  203. data/lib/cosmos/tools/script_runner/script_runner.rb +13 -5
  204. data/lib/cosmos/tools/script_runner/script_runner_frame.rb +8 -109
  205. data/lib/cosmos/tools/test_runner/test.rb +65 -6
  206. data/lib/cosmos/tools/test_runner/test_runner.rb +4 -4
  207. data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +5 -0
  208. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_logfile_thread.rb +3 -0
  209. data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +3 -2
  210. data/lib/cosmos/tools/tlm_viewer/tlm_viewer_config.rb +9 -6
  211. data/lib/cosmos/tools/tlm_viewer/widgets/array_widget.rb +1 -5
  212. data/lib/cosmos/tools/tlm_viewer/widgets/block_widget.rb +1 -5
  213. data/lib/cosmos/top_level.rb +86 -3
  214. data/lib/cosmos/version.rb +5 -5
  215. data/lib/cosmos/win32/win32_main.rb +7 -1
  216. data/spec/packet_logs/packet_log_reader_spec.rb +67 -7
  217. data/spec/packets/limits_spec.rb +19 -1
  218. data/spec/packets/telemetry_spec.rb +44 -1
  219. data/spec/script/commands_spec.rb +14 -0
  220. data/spec/script/scripting_spec.rb +5 -1
  221. data/spec/script/telemetry_spec.rb +38 -3
  222. data/spec/system/system_spec.rb +24 -4
  223. data/spec/tools/cmd_tlm_server/api_spec.rb +30 -0
  224. data/test/benchmarks/gsub_benchmark.rb +42 -4
  225. data/test/benchmarks/is_a_benchmark.rb +34 -0
  226. data/test/performance/config/data/crc.txt +161 -171
  227. data/test/performance/config/system/system_packets.txt +10 -10
  228. data/test/performance/config/system/system_threads.txt +30 -30
  229. data/test/performance/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +7 -2
  230. data/test/performance/config/targets/PACKET/cmd_tlm/packet_cmds.txt +20 -0
  231. data/test/performance/config/targets/PACKET/cmd_tlm/packet_tlm.txt +98 -0
  232. data/test/performance/config/targets/{EXAMPLE → PACKET}/cmd_tlm_server.txt +2 -2
  233. data/test/performance/config/targets/PACKET/lib/packet_interface.rb +22 -0
  234. data/test/performance/config/targets/PACKET/lib/packet_limits_response.rb +24 -0
  235. data/test/performance/config/targets/PACKET/screens/status.txt +25 -0
  236. data/test/performance/config/targets/PACKET/target.txt +28 -0
  237. data/test/performance/config/targets/{EXAMPLE/cmd_tlm/example_cmds.txt → THREAD/cmd_tlm/thread_cmds.txt} +1 -1
  238. data/test/performance/config/targets/{EXAMPLE/cmd_tlm/example_tlm.txt → THREAD/cmd_tlm/thread_tlm.txt} +1 -1
  239. data/test/performance/config/targets/THREAD/cmd_tlm_server.txt +6 -0
  240. data/test/performance/config/targets/{EXAMPLE/lib/example_interface.rb → THREAD/lib/thread_interface.rb} +1 -1
  241. data/test/performance/config/targets/THREAD/screens/status.txt +25 -0
  242. data/test/performance/config/targets/{EXAMPLE → THREAD}/target.txt +0 -0
  243. data/test/performance/config/tools/cmd_tlm_server/cmd_tlm_server_packets.txt +24 -30
  244. data/test/performance/config/tools/cmd_tlm_server/cmd_tlm_server_threads.txt +31 -31
  245. data/test/performance/config/tools/launcher/launcher_packets.txt +16 -11
  246. data/test/performance/config/tools/launcher/launcher_threads.txt +41 -35
  247. data/test/performance/config/tools/tlm_grapher/tlm_grapher.txt +204 -0
  248. data/test/performance/config/tools/tlm_viewer/tlm_viewer.txt +10 -38
  249. data/test/performance/lib/packet_target.rb +126 -0
  250. data/test/performance/lib/{example_target.rb → thread_target.rb} +9 -9
  251. data/test/performance/tools/CmdTlmServerMemProf +1 -1
  252. data/test/performance/tools/{ExampleTarget → PacketTarget} +2 -2
  253. data/test/performance/tools/{ExampleTarget.bat → PacketTarget.bat} +0 -0
  254. data/test/performance/tools/ThreadTarget +14 -0
  255. data/test/performance/tools/ThreadTarget.bat +59 -0
  256. data/test/performance/tools/TlmGrapherMemProf +1 -1
  257. data/test/performance/tools/TlmViewerMemProf +19 -0
  258. data/{autohotkey/tools/Replay.bat → test/performance/tools/TlmViewerMemProf.bat} +1 -1
  259. metadata +107 -55
  260. data/test/performance/lib/example_background_task.rb +0 -57
  261. 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 == "Cosmos::CustomTestSuite"
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 == 'Cosmos::CustomTestSuite'}
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 == 'Cosmos::CustomTestSuite'
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 == 'Cosmos::CustomTestSuite'
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(Cosmos::USERPATH, 'config', 'targets', target.original_name, 'screens')
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
- Dir.mkdir(screen_dir, 0777) unless File.exist?(screen_dir)
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(Cosmos::USERPATH, 'config', 'targets', target.original_name, 'screens')
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(Cosmos::USERPATH, 'config', 'targets', target.original_name, 'screens')
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(Cosmos::USERPATH, 'config', 'targets', @current_target.original_name, 'screens', parameters[0])
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(Cosmos::USERPATH, 'config', 'targets', @current_target.original_name, 'screens', parameters[1])
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
- screen_filename = screen_info.filename.gsub(File.join(Cosmos::USERPATH, 'config', 'targets', screen_info.original_target_name, 'screens', ''), '')
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(Cosmos::USERPATH, 'config', 'targets', @current_target.original_name, 'screens')
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
- if Kernel.is_windows?
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
- if Kernel.is_windows?
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)
@@ -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) {|| ExceptionDialog.new(nil, error, '', true, false, log_file)}
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
@@ -1,12 +1,12 @@
1
1
  # encoding: ascii-8bit
2
2
 
3
- COSMOS_VERSION = '3.4.2'
3
+ COSMOS_VERSION = '3.5.0'
4
4
  module Cosmos
5
5
  module Version
6
6
  MAJOR = '3'
7
- MINOR = '4'
8
- PATCH = '2'
9
- BUILD = 'd7b8067e652f11393629c9e8e1708cb846c5d233'
7
+ MINOR = '5'
8
+ PATCH = '0'
9
+ BUILD = 'a1963b6efc3b22a28c3abb878079ebad4aa73067'
10
10
  end
11
- VERSION = '3.4.2'
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
- BAUD_RATES = [CBR_110, CBR_300, CBR_600, CBR_1200, CBR_2400, CBR_4800, CBR_9600, CBR_14400, CBR_19200, CBR_38400, CBR_56000, CBR_57600, CBR_115200, CBR_128000, CBR_256000]
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