cosmos 3.9.2 → 4.0.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.
Files changed (438) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +23 -0
  3. data/.travis.yml +1 -0
  4. data/.yardopts +3 -0
  5. data/Gemfile +1 -1
  6. data/Manifest.txt +137 -52
  7. data/Rakefile +50 -44
  8. data/autohotkey/config/system/system.txt +0 -5
  9. data/autohotkey/config/targets/INST/cmd_tlm/inst_cmds.txt +6 -1
  10. data/autohotkey/config/targets/INST/screens/extra.txt +19 -0
  11. data/autohotkey/config/targets/INST/sequences/run_sequence.txt +1 -0
  12. data/autohotkey/config/targets/META/screens/data.txt +12 -0
  13. data/autohotkey/config/targets/SYSTEM/cmd_tlm/meta_cmd_tlm.txt +16 -0
  14. data/autohotkey/config/targets/{COSMOS/cmd_tlm/cosmos_server_cmds.txt → SYSTEM/cmd_tlm/system_cmds.txt} +8 -8
  15. data/autohotkey/config/targets/SYSTEM/cmd_tlm/system_tlm.txt +7 -0
  16. data/autohotkey/config/targets/SYSTEM/screens/limits_change.txt +14 -0
  17. data/autohotkey/config/targets/SYSTEM/screens/meta.txt +14 -0
  18. data/autohotkey/config/targets/SYSTEM/target.txt +12 -0
  19. data/autohotkey/config/tools/cmd_tlm_server/cmd_tlm_server.txt +2 -2
  20. data/autohotkey/config/tools/test_runner/test_runner2.txt +1 -1
  21. data/autohotkey/tools/CmdSequence +14 -0
  22. data/autohotkey/tools/CmdSequenceAHK +23 -0
  23. data/autohotkey/tools/CmdSequenceAHK2 +16 -0
  24. data/autohotkey/tools/cmd_extractor.ahk +2 -2
  25. data/autohotkey/tools/cmd_sender.ahk +4 -6
  26. data/autohotkey/tools/cmd_sequence.ahk +215 -0
  27. data/autohotkey/tools/cmd_sequence2.ahk +23 -0
  28. data/autohotkey/tools/data_viewer.ahk +2 -3
  29. data/autohotkey/tools/limits_monitor.ahk +9 -11
  30. data/autohotkey/tools/open_gl_builder.ahk +1 -2
  31. data/autohotkey/tools/packet_viewer.ahk +51 -35
  32. data/autohotkey/tools/replay.ahk +1 -2
  33. data/autohotkey/tools/script_runner.ahk +1 -2
  34. data/autohotkey/tools/script_runner2.ahk +1 -2
  35. data/autohotkey/tools/test_runner2.ahk +1 -5
  36. data/autohotkey/tools/test_runner3.ahk +1 -3
  37. data/autohotkey/tools/tlm_grapher.ahk +1 -3
  38. data/autohotkey/tools/tlm_grapher3.ahk +1 -2
  39. data/autohotkey/tools/tlm_viewer.ahk +8 -3
  40. data/autohotkey/tools/tlm_viewer2.ahk +2 -3
  41. data/autohotkey/tools/tlm_viewer5.ahk +1 -2
  42. data/cosmos.gemspec +26 -20
  43. data/data/cmd_sequence.png +0 -0
  44. data/data/config/_array_params.yaml +23 -0
  45. data/data/config/_id_items.yaml +24 -0
  46. data/data/config/_id_params.yaml +58 -0
  47. data/data/config/_interfaces.yaml +206 -0
  48. data/data/config/_items.yaml +20 -0
  49. data/data/config/_params.yaml +58 -0
  50. data/data/config/cmd_tlm_server.yaml +110 -0
  51. data/data/config/command.yaml +38 -0
  52. data/data/config/command_modifiers.yaml +127 -0
  53. data/data/config/command_telemetry.yaml +3 -0
  54. data/data/config/data_viewer.yaml +43 -0
  55. data/data/config/handbook_creator.yaml +23 -0
  56. data/data/config/housekeeping_params.yaml +71 -0
  57. data/data/config/interface_modifiers.yaml +44 -0
  58. data/data/config/item_modifiers.yaml +172 -0
  59. data/data/config/launcher.yaml +117 -0
  60. data/data/config/limits_monitor.yaml +53 -0
  61. data/data/config/linegraph_params.yaml +30 -0
  62. data/data/config/linegraph_plot.yaml +106 -0
  63. data/data/config/page_modifiers.yaml +128 -0
  64. data/data/config/param_item_modifiers.yaml +41 -0
  65. data/data/config/parameter_modifiers.yaml +144 -0
  66. data/data/config/protocols.yaml +257 -0
  67. data/data/config/screen.yaml +151 -0
  68. data/data/config/script_runner.yaml +15 -0
  69. data/data/config/system.yaml +153 -0
  70. data/data/config/table_manager.yaml +76 -0
  71. data/data/config/table_parameter_modifiers.yaml +9 -0
  72. data/data/config/target.yaml +71 -0
  73. data/data/config/telemetry.yaml +73 -0
  74. data/data/config/telemetry_modifiers.yaml +129 -0
  75. data/data/config/test_runner.yaml +118 -0
  76. data/data/config/tlm_extractor.yaml +109 -0
  77. data/data/config/tlm_grapher.yaml +78 -0
  78. data/data/config/tlm_viewer.yaml +107 -0
  79. data/data/config/unknown.yaml +3 -0
  80. data/data/config/widgets.yaml +1339 -0
  81. data/data/config/xy_params.yaml +50 -0
  82. data/data/config/xy_plot.yaml +12 -0
  83. data/data/config_editor.png +0 -0
  84. data/data/crc.txt +172 -161
  85. data/data/delete.png +0 -0
  86. data/demo/config/data/crc.txt +56 -36
  87. data/demo/config/data/meta_init.txt +1 -4
  88. data/demo/config/system/system.txt +15 -3
  89. data/demo/config/system/system2.txt +13 -3
  90. data/demo/config/targets/EXAMPLE/lib/example_interface.rb +2 -6
  91. data/demo/config/targets/EXAMPLE/target.txt +3 -1
  92. data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +1 -0
  93. data/demo/config/targets/INST/lib/inst_dump_component.rb +34 -0
  94. data/demo/config/targets/INST/screens/adcs.txt +39 -15
  95. data/demo/config/targets/INST/screens/commanding.txt +26 -19
  96. data/demo/config/targets/INST/screens/spacing_box.txt +44 -0
  97. data/demo/config/targets/INST/screens/spacing_grid.txt +78 -0
  98. data/demo/config/targets/INST/screens/tabs.txt +0 -2
  99. data/demo/config/targets/INST/sequences/sequence.tsv +3 -0
  100. data/demo/config/targets/INST/tables/EventAction.csv +9 -0
  101. data/demo/config/targets/INST/tables/EventAction.dat +0 -0
  102. data/demo/config/targets/INST/tables/McConfigTable.csv +20 -0
  103. data/demo/config/targets/INST/tables/McConfigTable.dat +0 -0
  104. data/demo/config/targets/INST/target.txt +4 -0
  105. data/demo/config/targets/INST/tools/data_viewer/data_viewer.txt +2 -0
  106. data/demo/config/targets/INST/tools/data_viewer/data_viewer2.txt +2 -0
  107. data/demo/config/targets/INST/tools/table_manager/EventAction_def.txt +6 -0
  108. data/demo/config/targets/INST/tools/table_manager/McConfigTable_def.txt +38 -0
  109. data/demo/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -3
  110. data/demo/config/targets/SYSTEM/cmd_tlm/meta_cmd_tlm.txt +16 -0
  111. data/demo/config/targets/{COSMOS/cmd_tlm/cosmos_server_cmds.txt → SYSTEM/cmd_tlm/system_cmds.txt} +8 -8
  112. data/demo/config/targets/SYSTEM/cmd_tlm/system_tlm.txt +7 -0
  113. data/demo/config/targets/{COSMOS → SYSTEM}/cmd_tlm_server.txt +2 -2
  114. data/demo/config/targets/SYSTEM/lib/limits_groups.rb +39 -0
  115. data/demo/config/targets/SYSTEM/screens/status.txt +1 -1
  116. data/demo/config/targets/SYSTEM/target.txt +12 -0
  117. data/demo/config/targets/TEMPLATED/cmd_tlm_server.txt +1 -1
  118. data/demo/config/targets/TEMPLATED/lib/templated_interface.rb +8 -5
  119. data/demo/config/targets/TEMPLATED/target.txt +2 -0
  120. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server.txt +15 -6
  121. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server2.txt +13 -5
  122. data/demo/config/tools/data_viewer/data_viewer.txt +9 -0
  123. data/demo/config/tools/launcher/launcher.txt +9 -6
  124. data/demo/config/tools/launcher/launcher2.txt +16 -13
  125. data/demo/config/tools/launcher/launcher_mini.txt +45 -0
  126. data/demo/config/tools/table_manager/MCConfigurationTable_fsw1_def.txt +12 -11
  127. data/demo/config/tools/table_manager/MCConfigurationTable_fsw2_def.txt +12 -11
  128. data/demo/config/tools/test_runner/test_runner.txt +1 -1
  129. data/demo/config/tools/tlm_viewer/tlm_viewer.txt +5 -5
  130. data/demo/lib/example_background_task.rb +9 -5
  131. data/demo/lib/example_target.rb +5 -15
  132. data/demo/lib/scpi_target.rb +4 -10
  133. data/demo/procedures/cosmos_api_test.rb +17 -0
  134. data/demo/tools/CmdSequence +16 -0
  135. data/demo/tools/CmdSequence.bat +9 -0
  136. data/demo/tools/ConfigEditor +16 -0
  137. data/demo/tools/ConfigEditor.bat +9 -0
  138. data/demo/tools/mac/CmdSequence.app/Contents/Info.plist +38 -0
  139. data/demo/tools/mac/CmdSequence.app/Contents/MacOS/CmdSequence.rb +16 -0
  140. data/demo/tools/mac/CmdSequence.app/Contents/MacOS/main.sh +10 -0
  141. data/demo/tools/mac/CmdSequence.app/Contents/MacOS/tool_launch.rb +38 -0
  142. data/demo/tools/mac/CmdSequence.app/Contents/Resources/appIcon.icns +0 -0
  143. data/ext/cosmos/ext/packet/packet.c +5 -5
  144. data/install/config/data/crc.txt +12 -8
  145. data/install/config/system/system.txt +13 -3
  146. data/install/config/targets/SYSTEM/cmd_tlm/meta_cmd_tlm.txt +14 -0
  147. data/install/config/targets/SYSTEM/target.txt +12 -0
  148. data/install/tools/CmdSequence +16 -0
  149. data/install/tools/CmdSequence.bat +9 -0
  150. data/install/tools/ConfigEditor +16 -0
  151. data/install/tools/ConfigEditor.bat +9 -0
  152. data/install/tools/mac/CmdSequence.app/Contents/Info.plist +38 -0
  153. data/install/tools/mac/CmdSequence.app/Contents/MacOS/CmdSequence.rb +16 -0
  154. data/install/tools/mac/CmdSequence.app/Contents/MacOS/main.sh +10 -0
  155. data/install/tools/mac/CmdSequence.app/Contents/MacOS/tool_launch.rb +38 -0
  156. data/install/tools/mac/CmdSequence.app/Contents/Resources/appIcon.icns +0 -0
  157. data/lib/cosmos.rb +1 -1
  158. data/lib/cosmos/config/config_parser.rb +147 -59
  159. data/lib/cosmos/config/meta_config_parser.rb +57 -0
  160. data/lib/cosmos/conversions/polynomial_conversion.rb +20 -4
  161. data/lib/cosmos/conversions/unix_time_conversion.rb +4 -4
  162. data/lib/cosmos/core_ext/array.rb +45 -5
  163. data/lib/cosmos/core_ext/cosmos_io.rb +31 -15
  164. data/lib/cosmos/core_ext/file.rb +2 -2
  165. data/lib/cosmos/core_ext/kernel.rb +1 -6
  166. data/lib/cosmos/core_ext/objectspace.rb +0 -2
  167. data/lib/cosmos/core_ext/string.rb +27 -4
  168. data/lib/cosmos/core_ext/time.rb +39 -10
  169. data/lib/cosmos/gui/choosers/combobox_chooser.rb +37 -26
  170. data/lib/cosmos/gui/choosers/file_chooser.rb +23 -6
  171. data/lib/cosmos/gui/choosers/float_chooser.rb +13 -11
  172. data/lib/cosmos/gui/choosers/integer_chooser.rb +13 -11
  173. data/lib/cosmos/gui/choosers/string_chooser.rb +18 -36
  174. data/lib/cosmos/gui/choosers/telemetry_chooser.rb +64 -64
  175. data/lib/cosmos/gui/choosers/value_chooser.rb +15 -15
  176. data/lib/cosmos/gui/dialogs/about_dialog.rb +18 -13
  177. data/lib/cosmos/gui/dialogs/calendar_dialog.rb +11 -3
  178. data/lib/cosmos/gui/dialogs/cmd_tlm_raw_dialog.rb +1 -1
  179. data/lib/cosmos/gui/dialogs/details_dialog.rb +1 -1
  180. data/lib/cosmos/gui/dialogs/exception_dialog.rb +7 -7
  181. data/lib/cosmos/gui/dialogs/find_replace_dialog.rb +20 -15
  182. data/lib/cosmos/gui/dialogs/interface_raw_dialog.rb +143 -0
  183. data/lib/cosmos/gui/dialogs/legal_dialog.rb +6 -5
  184. data/lib/cosmos/gui/dialogs/packet_log_dialog.rb +5 -2
  185. data/lib/cosmos/gui/dialogs/progress_dialog.rb +1 -1
  186. data/lib/cosmos/gui/dialogs/pry_dialog.rb +4 -4
  187. data/lib/cosmos/gui/dialogs/scroll_text_dialog.rb +3 -0
  188. data/lib/cosmos/gui/dialogs/set_tlm_dialog.rb +7 -6
  189. data/lib/cosmos/gui/dialogs/splash.rb +1 -1
  190. data/lib/cosmos/gui/dialogs/tlm_details_dialog.rb +1 -1
  191. data/lib/cosmos/gui/dialogs/tlm_graph_dialog.rb +114 -0
  192. data/lib/cosmos/gui/line_graph/line_graph.rb +9 -10
  193. data/lib/cosmos/gui/line_graph/line_graph_dialog.rb +7 -5
  194. data/lib/cosmos/gui/line_graph/line_graph_drawing.rb +3 -7
  195. data/lib/cosmos/gui/line_graph/line_graph_popups.rb +3 -8
  196. data/lib/cosmos/gui/line_graph/line_graph_scaling.rb +2 -7
  197. data/lib/cosmos/gui/line_graph/overview_graph.rb +6 -1
  198. data/lib/cosmos/gui/opengl/earth_model.rb +6 -3
  199. data/lib/cosmos/gui/opengl/gl_bounds.rb +11 -23
  200. data/lib/cosmos/gui/opengl/gl_light.rb +3 -4
  201. data/lib/cosmos/gui/opengl/gl_material.rb +3 -4
  202. data/lib/cosmos/gui/opengl/gl_scene.rb +10 -4
  203. data/lib/cosmos/gui/opengl/gl_shape.rb +6 -2
  204. data/lib/cosmos/gui/opengl/gl_viewer.rb +5 -5
  205. data/lib/cosmos/gui/opengl/gl_viewport.rb +11 -12
  206. data/lib/cosmos/gui/opengl/moon_model.rb +6 -3
  207. data/lib/cosmos/gui/opengl/stl_reader.rb +8 -9
  208. data/lib/cosmos/gui/opengl/stl_shape.rb +4 -5
  209. data/lib/cosmos/gui/opengl/texture_mapped_sphere.rb +7 -7
  210. data/lib/cosmos/gui/qt.rb +1 -1
  211. data/lib/cosmos/gui/qt_tool.rb +21 -10
  212. data/lib/cosmos/gui/text/completion.rb +23 -2
  213. data/lib/cosmos/gui/text/completion_text_edit.rb +38 -23
  214. data/lib/cosmos/gui/utilities/analyze_log.rb +1 -1
  215. data/lib/cosmos/gui/utilities/screenshot.rb +2 -2
  216. data/lib/cosmos/gui/widgets/full_text_search_line_edit.rb +11 -1
  217. data/lib/cosmos/gui/widgets/packet_log_frame.rb +19 -6
  218. data/lib/cosmos/interfaces.rb +10 -0
  219. data/lib/cosmos/interfaces/cmd_tlm_server_interface.rb +28 -47
  220. data/lib/cosmos/interfaces/interface.rb +240 -22
  221. data/lib/cosmos/interfaces/linc_interface.rb +3 -5
  222. data/lib/cosmos/interfaces/protocols/burst_protocol.rb +173 -0
  223. data/lib/cosmos/interfaces/protocols/crc_protocol.rb +141 -0
  224. data/lib/cosmos/{streams/fixed_stream_protocol.rb → interfaces/protocols/fixed_protocol.rb} +40 -37
  225. data/lib/cosmos/{streams/length_stream_protocol.rb → interfaces/protocols/length_protocol.rb} +55 -48
  226. data/lib/cosmos/interfaces/protocols/override_protocol.rb +52 -0
  227. data/lib/cosmos/interfaces/protocols/preidentified_protocol.rb +141 -0
  228. data/lib/cosmos/interfaces/protocols/protocol.rb +60 -0
  229. data/lib/cosmos/interfaces/protocols/template_protocol.rb +209 -0
  230. data/lib/cosmos/interfaces/protocols/terminated_protocol.rb +81 -0
  231. data/lib/cosmos/interfaces/serial_interface.rb +28 -23
  232. data/lib/cosmos/interfaces/simulated_target_interface.rb +27 -16
  233. data/lib/cosmos/interfaces/stream_interface.rb +36 -108
  234. data/lib/cosmos/interfaces/tcpip_client_interface.rb +21 -21
  235. data/lib/cosmos/interfaces/tcpip_server_interface.rb +555 -94
  236. data/lib/cosmos/interfaces/udp_interface.rb +51 -83
  237. data/lib/cosmos/io/buffered_file.rb +92 -2
  238. data/lib/cosmos/io/json_drb.rb +2 -2
  239. data/lib/cosmos/io/posix_serial_driver.rb +3 -1
  240. data/lib/cosmos/io/raw_logger.rb +3 -3
  241. data/lib/cosmos/io/serial_driver.rb +14 -5
  242. data/lib/cosmos/io/win32_serial_driver.rb +16 -4
  243. data/lib/cosmos/packet_logs.rb +0 -1
  244. data/lib/cosmos/packet_logs/packet_log_reader.rb +11 -1
  245. data/lib/cosmos/packet_logs/packet_log_writer.rb +31 -13
  246. data/lib/cosmos/packets/binary_accessor.rb +599 -32
  247. data/lib/cosmos/packets/commands.rb +48 -24
  248. data/lib/cosmos/packets/packet.rb +140 -54
  249. data/lib/cosmos/packets/packet_config.rb +0 -2
  250. data/lib/cosmos/packets/parsers/packet_item_parser.rb +10 -2
  251. data/lib/cosmos/packets/structure.rb +81 -33
  252. data/lib/cosmos/packets/structure_item.rb +45 -5
  253. data/lib/cosmos/packets/telemetry.rb +149 -55
  254. data/lib/cosmos/script/api_shared.rb +1000 -0
  255. data/lib/cosmos/script/commands.rb +2 -2
  256. data/lib/cosmos/script/extract.rb +19 -4
  257. data/lib/cosmos/script/limits.rb +2 -0
  258. data/lib/cosmos/script/script.rb +1 -1
  259. data/lib/cosmos/script/scripting.rb +4 -784
  260. data/lib/cosmos/script/telemetry.rb +44 -23
  261. data/lib/cosmos/script/tools.rb +15 -69
  262. data/lib/cosmos/streams/serial_stream.rb +12 -19
  263. data/lib/cosmos/streams/stream.rb +2 -11
  264. data/lib/cosmos/streams/tcpip_socket_stream.rb +3 -13
  265. data/lib/cosmos/system/system.rb +187 -31
  266. data/lib/cosmos/system/target.rb +11 -2
  267. data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +12 -11
  268. data/lib/cosmos/tools/cmd_sender/{cmd_sender_item_delegate.rb → cmd_param_table_item_delegate.rb} +11 -10
  269. data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +209 -164
  270. data/lib/cosmos/tools/cmd_sequence/cmd_sequence.rb +652 -0
  271. data/lib/cosmos/tools/cmd_sequence/sequence_item.rb +510 -0
  272. data/lib/cosmos/tools/cmd_sequence/sequence_list.rb +194 -0
  273. data/lib/cosmos/tools/cmd_tlm_server/api.rb +179 -5
  274. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +31 -14
  275. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +23 -16
  276. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +92 -20
  277. data/lib/cosmos/tools/cmd_tlm_server/commanding.rb +1 -1
  278. data/lib/cosmos/tools/cmd_tlm_server/gui/interfaces_tab.rb +17 -4
  279. data/lib/cosmos/tools/cmd_tlm_server/gui/targets_tab.rb +0 -5
  280. data/lib/cosmos/tools/cmd_tlm_server/interface_thread.rb +1 -2
  281. data/lib/cosmos/tools/cmd_tlm_server/interfaces.rb +4 -4
  282. data/lib/cosmos/tools/cmd_tlm_server/limits_groups_background_task.rb +121 -0
  283. data/lib/cosmos/tools/cmd_tlm_server/routers.rb +8 -4
  284. data/lib/cosmos/tools/config_editor/config_editor.rb +720 -0
  285. data/lib/cosmos/tools/config_editor/config_editor_frame.rb +675 -0
  286. data/lib/cosmos/tools/data_viewer/data_viewer.rb +44 -27
  287. data/lib/cosmos/tools/data_viewer/data_viewer_component.rb +8 -22
  288. data/lib/cosmos/tools/launcher/launcher.rb +29 -12
  289. data/lib/cosmos/tools/launcher/launcher_config.rb +1 -1
  290. data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +153 -42
  291. data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +44 -6
  292. data/lib/cosmos/tools/replay/replay.rb +36 -20
  293. data/lib/cosmos/tools/replay/replay_server.rb +1 -1
  294. data/lib/cosmos/tools/script_runner/script_runner_config.rb +1 -1
  295. data/lib/cosmos/tools/script_runner/script_runner_frame.rb +31 -21
  296. data/lib/cosmos/tools/table_manager/table_config.rb +9 -3
  297. data/lib/cosmos/tools/table_manager/table_manager.rb +27 -7
  298. data/lib/cosmos/tools/test_runner/results_writer.rb +6 -6
  299. data/lib/cosmos/tools/test_runner/test_runner.rb +4 -6
  300. data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +4 -5
  301. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_config.rb +1 -1
  302. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_processor.rb +1 -1
  303. data/lib/cosmos/tools/tlm_grapher/data_object_adders/housekeeping_data_object_adder.rb +23 -6
  304. data/lib/cosmos/tools/tlm_grapher/data_object_editors/housekeeping_data_object_editor.rb +44 -3
  305. data/lib/cosmos/tools/tlm_grapher/data_objects/housekeeping_data_object.rb +20 -7
  306. data/lib/cosmos/tools/tlm_grapher/tabbed_plots/overview_tabbed_plots.rb +1 -1
  307. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_config.rb +11 -4
  308. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_plot_editor.rb +2 -2
  309. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_realtime_thread.rb +1 -1
  310. data/lib/cosmos/tools/tlm_grapher/tlm_grapher.rb +16 -0
  311. data/lib/cosmos/tools/tlm_viewer/screen.rb +36 -32
  312. data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +59 -50
  313. data/lib/cosmos/tools/tlm_viewer/tlm_viewer_config.rb +2 -2
  314. data/lib/cosmos/tools/tlm_viewer/widgets.rb +1 -0
  315. data/lib/cosmos/tools/tlm_viewer/widgets/canvasvalue_widget.rb +1 -0
  316. data/lib/cosmos/tools/tlm_viewer/widgets/labelvalue_widget.rb +22 -4
  317. data/lib/cosmos/tools/tlm_viewer/widgets/matrixbycolumns_widget.rb +9 -0
  318. data/lib/cosmos/tools/tlm_viewer/widgets/spacer_widget.rb +55 -0
  319. data/lib/cosmos/tools/tlm_viewer/widgets/vertical_widget.rb +3 -2
  320. data/lib/cosmos/tools/tlm_viewer/widgets/verticalbox_widget.rb +3 -2
  321. data/lib/cosmos/tools/tlm_viewer/widgets/widget.rb +12 -12
  322. data/lib/cosmos/top_level.rb +34 -24
  323. data/lib/cosmos/utilities/crc.rb +108 -6
  324. data/lib/cosmos/utilities/csv.rb +68 -14
  325. data/lib/cosmos/utilities/logger.rb +2 -2
  326. data/lib/cosmos/utilities/low_fragmentation_array.rb +9 -1
  327. data/lib/cosmos/version.rb +6 -6
  328. data/lib/cosmos/win32/win32_main.rb +50 -46
  329. data/run_gui_tests.bat +3 -1
  330. data/spec/conversions/unix_time_formatted_conversion_spec.rb +2 -2
  331. data/spec/conversions/unix_time_seconds_conversion_spec.rb +2 -2
  332. data/spec/core_ext/file_spec.rb +1 -1
  333. data/spec/core_ext/objectspace_spec.rb +12 -9
  334. data/spec/core_ext/string_spec.rb +6 -0
  335. data/spec/core_ext/time_spec.rb +10 -0
  336. data/spec/gui/line_graph/line_clip_spec.rb +226 -224
  337. data/spec/gui/qt_spec.rb +81 -79
  338. data/spec/install/config/system/system.txt +0 -6
  339. data/spec/install/config/targets/INST/cmd_tlm/inst_cmd_linc.txt +5 -5
  340. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm_linc.txt +8 -8
  341. data/spec/install/config/targets/SYSTEM/cmd_tlm/meta_cmd_tlm.txt +16 -0
  342. data/{install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt → spec/install/config/targets/SYSTEM/cmd_tlm/system_cmds.txt} +8 -8
  343. data/spec/install/config/targets/SYSTEM/cmd_tlm/system_tlm.txt +7 -0
  344. data/spec/install/config/targets/{COSMOS → SYSTEM}/cmd_tlm_server.txt +2 -2
  345. data/spec/install/config/targets/SYSTEM/screens/status.txt +12 -0
  346. data/spec/install/config/targets/SYSTEM/target.txt +12 -0
  347. data/spec/interfaces/cmd_tlm_server_interface_spec.rb +9 -13
  348. data/spec/interfaces/interface_spec.rb +402 -18
  349. data/spec/interfaces/linc_interface_spec.rb +37 -39
  350. data/spec/interfaces/protocols/burst_protocol_spec.rb +300 -0
  351. data/spec/interfaces/protocols/crc_protocol_spec.rb +709 -0
  352. data/spec/interfaces/protocols/fixed_protocol_spec.rb +119 -0
  353. data/spec/interfaces/protocols/length_protocol_spec.rb +499 -0
  354. data/spec/interfaces/protocols/override_protocol_spec.rb +158 -0
  355. data/spec/interfaces/protocols/preidentified_protocol_spec.rb +149 -0
  356. data/spec/interfaces/protocols/template_protocol_spec.rb +218 -0
  357. data/spec/interfaces/protocols/terminated_protocol_spec.rb +174 -0
  358. data/spec/interfaces/serial_interface_spec.rb +35 -34
  359. data/spec/interfaces/simulated_target_interface_spec.rb +13 -13
  360. data/spec/interfaces/tcpip_client_interface_spec.rb +21 -16
  361. data/spec/interfaces/tcpip_server_interface_spec.rb +66 -69
  362. data/spec/interfaces/udp_interface_spec.rb +120 -55
  363. data/spec/io/serial_driver_spec.rb +41 -39
  364. data/spec/io/udp_sockets_spec.rb +13 -8
  365. data/spec/io/win32_serial_driver_spec.rb +62 -59
  366. data/spec/packet_logs/packet_log_reader_spec.rb +68 -47
  367. data/spec/packet_logs/packet_log_writer_spec.rb +7 -5
  368. data/spec/packets/commands_spec.rb +5 -5
  369. data/spec/packets/packet_spec.rb +2 -14
  370. data/spec/script/extract_spec.rb +21 -7
  371. data/spec/script/scripting_spec.rb +261 -6
  372. data/spec/script/telemetry_spec.rb +17 -9
  373. data/spec/spec_helper.rb +26 -10
  374. data/spec/streams/serial_stream_spec.rb +87 -82
  375. data/spec/streams/tcpip_client_stream_spec.rb +12 -4
  376. data/spec/streams/tcpip_socket_stream_spec.rb +5 -0
  377. data/spec/system/system_spec.rb +66 -50
  378. data/spec/system/target_spec.rb +33 -11
  379. data/spec/tools/cmd_tlm_server/api_spec.rb +5 -5
  380. data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +75 -15
  381. data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +125 -5
  382. data/spec/tools/cmd_tlm_server/cmd_tlm_server_spec.rb +244 -232
  383. data/spec/tools/cmd_tlm_server/commanding_spec.rb +18 -18
  384. data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +124 -29
  385. data/spec/tools/cmd_tlm_server/interfaces_spec.rb +2 -2
  386. data/spec/tools/cmd_tlm_server/limits_groups_background_task_spec.rb +145 -0
  387. data/spec/tools/cmd_tlm_server/router_thread_spec.rb +50 -10
  388. data/spec/tools/table_manager/tablemanager_core_spec.rb +0 -1
  389. data/spec/top_level/top_level_spec.rb +39 -11
  390. data/spec/utilities/csv_spec.rb +62 -20
  391. data/tasks/gemfile_stats.rake +6 -3
  392. data/test/performance/config/system/system_packets.txt +0 -1
  393. data/test/performance/config/system/system_threads.txt +0 -1
  394. metadata +177 -92
  395. data/autohotkey/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +0 -15
  396. data/autohotkey/config/targets/COSMOS/cmd_tlm_server.txt +0 -6
  397. data/autohotkey/config/targets/COSMOS/target.txt +0 -5
  398. data/autohotkey/userpath.txt +0 -1
  399. data/demo/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +0 -15
  400. data/demo/config/targets/COSMOS/screens/limits_change.txt +0 -20
  401. data/demo/config/targets/COSMOS/screens/version.txt +0 -19
  402. data/demo/config/targets/COSMOS/target.txt +0 -11
  403. data/demo/config/targets/META/cmd_tlm/meta_cmd.txt +0 -10
  404. data/demo/config/targets/META/cmd_tlm/meta_tlm.txt +0 -13
  405. data/demo/userpath.txt +0 -1
  406. data/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +0 -15
  407. data/install/config/targets/COSMOS/cmd_tlm_server.txt +0 -6
  408. data/install/config/targets/COSMOS/screens/limits_change.txt +0 -20
  409. data/install/config/targets/COSMOS/screens/version.txt +0 -19
  410. data/install/config/targets/COSMOS/target.txt +0 -9
  411. data/install/config/targets/SYSTEM/README.txt +0 -1
  412. data/install/userpath.txt +0 -1
  413. data/lib/cosmos/io/tcpip_server.rb +0 -571
  414. data/lib/cosmos/packet_logs/meta_packet_log_writer.rb +0 -107
  415. data/lib/cosmos/streams/burst_stream_protocol.rb +0 -25
  416. data/lib/cosmos/streams/preidentified_stream_protocol.rb +0 -118
  417. data/lib/cosmos/streams/stream_protocol.rb +0 -373
  418. data/lib/cosmos/streams/template_stream_protocol.rb +0 -140
  419. data/lib/cosmos/streams/terminated_stream_protocol.rb +0 -85
  420. data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +0 -41
  421. data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +0 -15
  422. data/spec/install/config/targets/COSMOS/screens/limits_change.txt +0 -20
  423. data/spec/install/config/targets/COSMOS/screens/version.txt +0 -19
  424. data/spec/install/config/targets/COSMOS/target.txt +0 -5
  425. data/spec/install/config/targets/META/cmd_tlm/meta_cmd.txt +0 -4
  426. data/spec/install/config/targets/META/cmd_tlm/meta_tlm.txt +0 -4
  427. data/spec/install/userpath.txt +0 -1
  428. data/spec/interfaces/stream_interface_spec.rb +0 -157
  429. data/spec/io/tcpip_server_spec.rb +0 -338
  430. data/spec/packet_logs/meta_packet_log_writer_spec.rb +0 -170
  431. data/spec/streams/burst_stream_protocol_spec.rb +0 -32
  432. data/spec/streams/fixed_stream_protocol_spec.rb +0 -113
  433. data/spec/streams/length_stream_protocol_spec.rb +0 -300
  434. data/spec/streams/preidentified_stream_protocol_spec.rb +0 -121
  435. data/spec/streams/stream_protocol_spec.rb +0 -346
  436. data/spec/streams/template_stream_protocol_spec.rb +0 -156
  437. data/spec/streams/terminated_stream_protocol_spec.rb +0 -127
  438. data/test/performance/userpath.txt +0 -1
@@ -13,105 +13,110 @@ require 'cosmos/streams/serial_stream'
13
13
 
14
14
  module Cosmos
15
15
 
16
- describe SerialStream do
17
- describe "initialize" do
18
- it "complains if neither a read or write port given" do
19
- expect { SerialStream.new(nil,nil,9600,:EVEN,1,nil,nil) }.to raise_error("Either a write port or read port must be given")
20
- end
21
- end
16
+ if RUBY_ENGINE == 'ruby' or Gem.win_platform?
22
17
 
23
- describe "connected?" do
24
- it "is connected when initialized" do
25
- driver = double("driver")
26
- expect(SerialDriver).to receive(:new).and_return(driver)
27
- ss = SerialStream.new('COM1',nil,9600,:EVEN,1,nil,nil)
28
- expect(ss.connected?).to be true
18
+ describe SerialStream do
19
+ describe "initialize" do
20
+ it "complains if neither a read or write port given" do
21
+ expect { SerialStream.new(nil,nil,9600,:EVEN,1,nil,nil) }.to raise_error("Either a write port or read port must be given")
22
+ end
29
23
  end
30
- end
31
24
 
32
- describe "read" do
33
- it "raises an error if no read port given" do
34
- driver = double("driver")
35
- expect(SerialDriver).to receive(:new).and_return(driver)
36
- ss = SerialStream.new('COM1',nil,9600,:EVEN,1,nil,nil)
37
- expect { ss.read }.to raise_error("Attempt to read from write only stream")
25
+ describe "connected?" do
26
+ it "is connected when initialized" do
27
+ driver = double("driver")
28
+ expect(SerialDriver).to receive(:new).and_return(driver)
29
+ ss = SerialStream.new('COM1',nil,9600,:EVEN,1,nil,nil)
30
+ expect(ss.connected?).to be true
31
+ end
38
32
  end
39
33
 
40
- it "calls read from the driver" do
41
- driver = double("driver")
42
- expect(driver).to receive(:read).and_return 'test'
43
- expect(SerialDriver).to receive(:new).and_return(driver)
44
- ss = SerialStream.new('COM1','COM1',9600,:EVEN,1,nil,nil)
45
- expect(ss.read).to eql 'test'
46
- end
47
- end
34
+ describe "read" do
35
+ it "raises an error if no read port given" do
36
+ driver = double("driver")
37
+ expect(SerialDriver).to receive(:new).and_return(driver)
38
+ ss = SerialStream.new('COM1',nil,9600,:EVEN,1,nil,nil)
39
+ expect { ss.read }.to raise_error("Attempt to read from write only stream")
40
+ end
48
41
 
49
- describe "write" do
50
- it "raises an error if no write port given" do
51
- driver = double("driver")
52
- expect(SerialDriver).to receive(:new).and_return(driver)
53
- ss = SerialStream.new(nil,'COM1',9600,:EVEN,1,nil,nil)
54
- expect { ss.write('') }.to raise_error("Attempt to write to read only stream")
42
+ it "calls read from the driver" do
43
+ driver = double("driver")
44
+ expect(driver).to receive(:read).and_return 'test'
45
+ expect(SerialDriver).to receive(:new).and_return(driver)
46
+ ss = SerialStream.new('COM1','COM1',9600,:EVEN,1,nil,nil)
47
+ expect(ss.read).to eql 'test'
48
+ end
55
49
  end
56
50
 
57
- it "calls write from the driver" do
58
- driver = double("driver")
59
- expect(driver).to receive(:write).with('test')
60
- expect(SerialDriver).to receive(:new).and_return(driver)
61
- ss = SerialStream.new('COM1','COM1',9600,:EVEN,1,nil,nil)
62
- ss.write('test')
63
- end
64
- end
51
+ describe "write" do
52
+ it "raises an error if no write port given" do
53
+ driver = double("driver")
54
+ expect(SerialDriver).to receive(:new).and_return(driver)
55
+ ss = SerialStream.new(nil,'COM1',9600,:EVEN,1,nil,nil)
56
+ expect { ss.write('') }.to raise_error("Attempt to write to read only stream")
57
+ end
65
58
 
66
- describe "disconnect" do
67
- it "closes the write driver" do
68
- driver = double("driver")
69
- expect(driver).to receive(:closed?).and_return(false)
70
- expect(driver).to receive(:close)
71
- expect(SerialDriver).to receive(:new).and_return(driver)
72
- ss = SerialStream.new('COM1',nil,9600,:EVEN,1,nil,nil)
73
- expect(ss.connected?).to be true
74
- ss.disconnect
75
- expect(ss.connected?).to be false
59
+ it "calls write from the driver" do
60
+ driver = double("driver")
61
+ expect(driver).to receive(:write).with('test')
62
+ expect(SerialDriver).to receive(:new).and_return(driver)
63
+ ss = SerialStream.new('COM1','COM1',9600,:EVEN,1,nil,nil)
64
+ ss.write('test')
65
+ end
76
66
  end
77
67
 
78
- it "closes the read driver" do
79
- driver = double("driver")
80
- expect(driver).to receive(:closed?).and_return(false)
81
- expect(driver).to receive(:close)
82
- expect(SerialDriver).to receive(:new).and_return(driver)
83
- ss = SerialStream.new(nil,'COM1',9600,:EVEN,1,nil,nil)
84
- expect(ss.connected?).to be true
85
- ss.disconnect
86
- expect(ss.connected?).to be false
87
- end
68
+ describe "disconnect" do
69
+ it "closes the write driver" do
70
+ driver = double("driver")
71
+ expect(driver).to receive(:closed?).and_return(false)
72
+ expect(driver).to receive(:close)
73
+ expect(SerialDriver).to receive(:new).and_return(driver)
74
+ ss = SerialStream.new('COM1',nil,9600,:EVEN,1,nil,nil)
75
+ expect(ss.connected?).to be true
76
+ ss.disconnect
77
+ expect(ss.connected?).to be false
78
+ end
79
+
80
+ it "closes the read driver" do
81
+ driver = double("driver")
82
+ expect(driver).to receive(:closed?).and_return(false)
83
+ expect(driver).to receive(:close)
84
+ expect(SerialDriver).to receive(:new).and_return(driver)
85
+ ss = SerialStream.new(nil,'COM1',9600,:EVEN,1,nil,nil)
86
+ expect(ss.connected?).to be true
87
+ ss.disconnect
88
+ expect(ss.connected?).to be false
89
+ end
88
90
 
89
- it "does not close the driver twice" do
90
- driver = double("driver")
91
- expect(driver).to receive(:closed?).and_return(false, true)
92
- expect(driver).to receive(:close).once
93
- expect(SerialDriver).to receive(:new).and_return(driver)
94
- ss = SerialStream.new('COM1','COM1',9600,:EVEN,1,nil,nil)
95
- expect(ss.connected?).to be true
96
- ss.disconnect
97
- expect(ss.connected?).to be false
98
- ss.disconnect
99
- expect(ss.connected?).to be false
91
+ it "does not close the driver twice" do
92
+ driver = double("driver")
93
+ expect(driver).to receive(:closed?).and_return(false, true)
94
+ expect(driver).to receive(:close).once
95
+ expect(SerialDriver).to receive(:new).and_return(driver)
96
+ ss = SerialStream.new('COM1','COM1',9600,:EVEN,1,nil,nil)
97
+ expect(ss.connected?).to be true
98
+ ss.disconnect
99
+ expect(ss.connected?).to be false
100
+ ss.disconnect
101
+ expect(ss.connected?).to be false
102
+ end
100
103
  end
101
- end
102
104
 
103
- describe "connect" do
104
- it "supports a connect method that does nothing" do
105
- driver = double("driver")
106
- expect(driver).to receive(:closed?).and_return(false)
107
- expect(driver).to receive(:close).once
108
- expect(SerialDriver).to receive(:new).and_return(driver)
109
- ss = SerialStream.new(nil,'COM1',9600,:EVEN,1,nil,nil)
110
- expect{ss.connect}.to_not raise_error
111
- ss.disconnect
105
+ describe "connect" do
106
+ it "supports a connect method that does nothing" do
107
+ driver = double("driver")
108
+ expect(driver).to receive(:closed?).and_return(false)
109
+ expect(driver).to receive(:close).once
110
+ expect(SerialDriver).to receive(:new).and_return(driver)
111
+ ss = SerialStream.new(nil,'COM1',9600,:EVEN,1,nil,nil)
112
+ expect{ss.connect}.to_not raise_error
113
+ ss.disconnect
114
+ end
112
115
  end
116
+
113
117
  end
114
118
 
115
119
  end
120
+
116
121
  end
117
122
 
@@ -15,11 +15,19 @@ module Cosmos
15
15
 
16
16
  describe TcpipClientStream do
17
17
  before(:all) do
18
- addr = Socket.pack_sockaddr_in(8888, Socket::INADDR_ANY)
19
- @listen_socket = Socket.new(Socket::AF_INET, Socket::SOCK_STREAM, 0)
18
+ addr = Socket.pack_sockaddr_in(8888, "0.0.0.0")
19
+ if RUBY_ENGINE == 'ruby'
20
+ @listen_socket = Socket.new(Socket::AF_INET, Socket::SOCK_STREAM, 0)
21
+ else
22
+ @listen_socket = ServerSocket.new(Socket::AF_INET, Socket::SOCK_STREAM, 0)
23
+ end
20
24
  @listen_socket.setsockopt(Socket::SOL_SOCKET, Socket::SO_REUSEADDR, 1) unless Kernel.is_windows?
21
- @listen_socket.bind(addr)
22
- @listen_socket.listen(5)
25
+ if RUBY_ENGINE == 'ruby'
26
+ @listen_socket.bind(addr)
27
+ @listen_socket.listen(5)
28
+ else
29
+ @listen_socket.bind(addr, 5)
30
+ end
23
31
  end
24
32
 
25
33
  after(:all) do
@@ -14,6 +14,8 @@ require 'socket'
14
14
 
15
15
  module Cosmos
16
16
 
17
+ if RUBY_ENGINE == 'ruby' # For some reason this test causes uncatchable exceptions in Jruby when run with other tests - Skip for now
18
+
17
19
  describe TcpipSocketStream do
18
20
  describe "initialize, connected?" do
19
21
  it "is not be connected when initialized" do
@@ -217,5 +219,8 @@ module Cosmos
217
219
  end
218
220
 
219
221
  end
222
+
223
+ end # TEMP for Jruby
224
+
220
225
  end
221
226
 
@@ -48,30 +48,32 @@ module Cosmos
48
48
 
49
49
  it "creates default paths" do
50
50
  # Don't check the actual paths but just that they exist
51
- expect(System.paths.keys).to eql %w(LOGS TMP SAVED_CONFIG TABLES HANDBOOKS PROCEDURES)
51
+ expect(System.paths.keys).to eql %w(LOGS TMP SAVED_CONFIG TABLES HANDBOOKS PROCEDURES SEQUENCES)
52
52
  end
53
53
  end
54
54
 
55
55
  describe "System.commands" do
56
- it "is empty" do
57
- expect(System.commands.target_names).to eql []
56
+ it "is just SYSTEM" do
57
+ expect(System.commands.target_names).to eql ['SYSTEM']
58
58
  end
59
59
 
60
60
  it "logs errors saving the configuration" do
61
- # Force a reload of the configuration
62
- System.class_eval('@@instance = nil')
63
-
64
- capture_io do |stdout|
65
- allow(FileUtils).to receive(:mkdir_p) { raise "Error" }
66
- expect(System.commands.target_names).to eql []
67
- expect(stdout.string).to match "Problem saving configuration"
68
- end
61
+ # Write the system.txt file to auto declare targets
62
+ File.open(@config_file, 'w') { |file| file.puts "AUTO_DECLARE_TARGETS" }
63
+ # Force a reload of the configuration
64
+ System.class_eval('@@instance = nil')
65
+ capture_io do |stdout|
66
+ allow(FileUtils).to receive(:cp_r) { raise "Error" }
67
+ System.commands
68
+ expect(stdout.string).to match "Problem saving configuration"
69
+ end
70
+ File.open(@config_file, 'w') { |file| file.puts "# Comment" }
69
71
  end
70
72
  end
71
73
 
72
74
  describe "System.telemetry" do
73
- it "is empty" do
74
- expect(System.telemetry.target_names).to eql []
75
+ it "is just SYSTEM" do
76
+ expect(System.telemetry.target_names).to eql ['SYSTEM']
75
77
  end
76
78
  end
77
79
 
@@ -89,6 +91,7 @@ module Cosmos
89
91
 
90
92
  describe "System.clear_counters" do
91
93
  it "clears the target, command and telemetry counters" do
94
+ expect(System.targets.length).to be > 0
92
95
  System.targets.each do |name, tgt|
93
96
  tgt.cmd_cnt = 100
94
97
  tgt.tlm_cnt = 100
@@ -119,8 +122,8 @@ module Cosmos
119
122
  it "calculates MD5s across all the target files" do
120
123
  capture_io do |stdout|
121
124
  # This line actually does the work of reading the configuration
122
- expect(System.telemetry.target_names).to eql ['COSMOS','INST','META']
123
- expect(System.commands.target_names).to eql ['COSMOS','INST','META']
125
+ expect(System.telemetry.target_names).to eql ['INST', 'SYSTEM']
126
+ expect(System.commands.target_names).to eql ['INST', 'SYSTEM']
124
127
 
125
128
  expect(stdout.string).to match "Marshal file does not exist"
126
129
 
@@ -129,8 +132,8 @@ module Cosmos
129
132
  # Reset the instance variable so it will read the new configuration
130
133
  System.class_eval('@@instance = nil')
131
134
  # This line actually does the work of reading the configuration
132
- expect(System.telemetry.target_names).to eql ['COSMOS','INST','META']
133
- expect(System.commands.target_names).to eql ['COSMOS','INST','META']
135
+ expect(System.telemetry.target_names).to eql ['INST', 'SYSTEM']
136
+ expect(System.commands.target_names).to eql ['INST', 'SYSTEM']
134
137
 
135
138
  expect(stdout.string).to match "Marshal load success"
136
139
  end
@@ -149,53 +152,53 @@ module Cosmos
149
152
 
150
153
  describe "load_configuration" do
151
154
  after(:all) do
152
- File.delete(File.join(@config_targets,'COSMOS','cmd_tlm','test1_tlm.txt'))
153
- File.delete(File.join(@config_targets,'COSMOS','cmd_tlm','test2_tlm.txt'))
155
+ File.delete(File.join(@config_targets,'SYSTEM','cmd_tlm','test1_tlm.txt'))
156
+ File.delete(File.join(@config_targets,'SYSTEM','cmd_tlm','test2_tlm.txt'))
154
157
  end
155
158
 
156
159
  it "loads the initial configuration" do
157
160
  System.load_configuration
158
- expect(System.commands.target_names).to eql ['COSMOS','INST','META']
159
- expect(System.telemetry.target_names).to eql ['COSMOS','INST','META']
161
+ expect(System.commands.target_names).to eql ['INST', 'SYSTEM']
162
+ expect(System.telemetry.target_names).to eql ['INST', 'SYSTEM']
160
163
  end
161
164
 
162
165
  it "loads a named configuration" do
163
166
  File.open(@config_file,'w') do |file|
164
- file.puts "DECLARE_TARGET COSMOS"
165
- file.puts "DECLARE_TARGET COSMOS OVERRIDE"
167
+ file.puts "DECLARE_TARGET INST OVERRIDE"
168
+ file.puts "DECLARE_TARGET SYSTEM"
166
169
  end
167
170
 
168
171
  # Load the original configuration
169
172
  original_config_name, err = System.load_configuration
170
173
  expect(err).to eql nil
171
- expect(System.telemetry.target_names).to eql %w(COSMOS OVERRIDE)
172
- original_pkts = System.telemetry.packets('COSMOS').keys
174
+ expect(System.telemetry.target_names).to eql %w(OVERRIDE SYSTEM)
175
+ original_pkts = System.telemetry.packets('SYSTEM').keys
173
176
 
174
177
  # Create a new configuration by writing another telemetry file
175
- File.open(File.join(@config_targets,'COSMOS','cmd_tlm','test1_tlm.txt'),'w') do |file|
176
- file.puts "TELEMETRY COSMOS TEST1 BIG_ENDIAN"
178
+ File.open(File.join(@config_targets,'SYSTEM','cmd_tlm','test1_tlm.txt'),'w') do |file|
179
+ file.puts "TELEMETRY SYSTEM TEST1 BIG_ENDIAN"
177
180
  file.puts " APPEND_ITEM DATA 240 STRING"
178
181
  end
179
182
  System.instance.process_file(@config_file)
180
183
  # Verify the new telemetry packet is there
181
- expect(System.telemetry.packets('COSMOS').keys).to include "TEST1"
184
+ expect(System.telemetry.packets('SYSTEM').keys).to include "TEST1"
182
185
  second_config_name = System.configuration_name
183
186
 
184
187
  # Now load the original configuration
185
188
  name, err = System.load_configuration(original_config_name)
186
189
  expect(err).to eql nil
187
190
  expect(original_config_name).to eql name
188
- expect(System.telemetry.packets('COSMOS').keys).not_to include "TEST1"
191
+ expect(System.telemetry.packets('SYSTEM').keys).not_to include "TEST1"
189
192
 
190
193
  # Create yet another configuration by writing another telemetry file
191
- File.open(File.join(@config_targets,'COSMOS','cmd_tlm','test2_tlm.txt'),'w') do |file|
192
- file.puts "TELEMETRY COSMOS TEST2 BIG_ENDIAN"
194
+ File.open(File.join(@config_targets,'SYSTEM','cmd_tlm','test2_tlm.txt'),'w') do |file|
195
+ file.puts "TELEMETRY SYSTEM TEST2 BIG_ENDIAN"
193
196
  file.puts " APPEND_ITEM DATA 240 STRING"
194
197
  end
195
198
  System.instance.process_file(@config_file)
196
199
  names = []
197
200
  # Verify the new telemetry packet is there as well as the second one
198
- expect(System.telemetry.packets('COSMOS').keys).to include("TEST1", "TEST2")
201
+ expect(System.telemetry.packets('SYSTEM').keys).to include("TEST1", "TEST2")
199
202
  third_config_name = System.configuration_name
200
203
 
201
204
  # Try loading something that doesn't exist
@@ -207,8 +210,8 @@ module Cosmos
207
210
  # Now load the second configuration. It shouldn't have the most
208
211
  # recently defined telemetry packet.
209
212
  System.load_configuration(second_config_name)
210
- expect(System.telemetry.packets('COSMOS').keys).to include "TEST1"
211
- expect(System.telemetry.packets('COSMOS').keys).not_to include "TEST2"
213
+ expect(System.telemetry.packets('SYSTEM').keys).to include "TEST1"
214
+ expect(System.telemetry.packets('SYSTEM').keys).not_to include "TEST2"
212
215
 
213
216
  # Now remove system.txt from the third configuration and try to load it again to cause an error
214
217
  third_config_path = System.instance.send(:find_configuration, third_config_name)
@@ -442,7 +445,7 @@ module Cosmos
442
445
  end
443
446
 
444
447
  context "with DEFAULT_PACKET_LOG_WRITER" do
445
- it "takes 1 parameters" do
448
+ it "takes 1 or more parameters" do
446
449
  tf = Tempfile.new('unittest')
447
450
  tf.puts("DEFAULT_PACKET_LOG_WRITER")
448
451
  tf.close
@@ -450,9 +453,11 @@ module Cosmos
450
453
  tf.unlink
451
454
 
452
455
  tf = Tempfile.new('unittest')
453
- tf.puts("DEFAULT_PACKET_LOG_WRITER my_nonexistent_class TRUE")
456
+ tf.puts("DEFAULT_PACKET_LOG_WRITER packet_log_writer.rb nil false")
454
457
  tf.close
455
- expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, /Too many parameters for DEFAULT_PACKET_LOG_WRITER./)
458
+ System.instance.process_file(tf.path)
459
+ expect(System.default_packet_log_writer).to eql PacketLogWriter
460
+ expect(System.default_packet_log_writer_params).to eql ["nil", "false"]
456
461
  tf.unlink
457
462
  end
458
463
 
@@ -481,7 +486,7 @@ module Cosmos
481
486
  end
482
487
 
483
488
  context "with DEFAULT_PACKET_LOG_READER" do
484
- it "takes 1 parameters" do
489
+ it "takes 1 or more parameters" do
485
490
  tf = Tempfile.new('unittest')
486
491
  tf.puts("DEFAULT_PACKET_LOG_READER")
487
492
  tf.close
@@ -489,9 +494,11 @@ module Cosmos
489
494
  tf.unlink
490
495
 
491
496
  tf = Tempfile.new('unittest')
492
- tf.puts("DEFAULT_PACKET_LOG_READER my_nonexistent_class TRUE")
497
+ tf.puts("DEFAULT_PACKET_LOG_READER packet_log_reader.rb nil false")
493
498
  tf.close
494
- expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, /Too many parameters for DEFAULT_PACKET_LOG_READER./)
499
+ System.instance.process_file(tf.path)
500
+ expect(System.default_packet_log_reader).to eql PacketLogReader
501
+ expect(System.default_packet_log_reader_params).to eql ["nil", "false"]
495
502
  tf.unlink
496
503
  end
497
504
 
@@ -635,28 +642,38 @@ module Cosmos
635
642
  end
636
643
  end
637
644
 
638
- context "with CMD_TLM_VERSION" do
645
+ context "with ADD_MD5_FILE" do
639
646
  it "takes 1 parameters" do
640
647
  tf = Tempfile.new('unittest')
641
- tf.puts("CMD_TLM_VERSION")
648
+ tf.puts("ADD_MD5_FILE")
642
649
  tf.close
643
- expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, /Not enough parameters for CMD_TLM_VERSION./)
650
+ expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, /Not enough parameters for ADD_MD5_FILE./)
644
651
  tf.unlink
645
652
 
646
653
  tf = Tempfile.new('unittest')
647
- tf.puts("CMD_TLM_VERSION 1 2")
654
+ tf.puts("ADD_MD5_FILE 1 2")
648
655
  tf.close
649
- expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, /Too many parameters for CMD_TLM_VERSION./)
656
+ expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, /Too many parameters for ADD_MD5_FILE./)
650
657
  tf.unlink
651
658
  end
652
659
 
653
- it "sets the command and telemetry version" do
660
+ it "complains about missing files" do
654
661
  tf = Tempfile.new('unittest')
655
- tf.puts("CMD_TLM_VERSION 2.1")
662
+ tf.puts("ADD_MD5_FILE missing_file")
663
+ tf.close
664
+ expect { System.instance.process_file(tf.path) }.to raise_error(/Missing expected file: missing_file/)
665
+ tf.unlink
666
+ end
667
+
668
+ it "adds a file to the MD5 calculation" do
669
+ md5f = Tempfile.new('md5_file')
670
+ tf = Tempfile.new('unittest')
671
+ tf.puts("ADD_MD5_FILE #{File.expand_path(md5f.path)}")
656
672
  tf.close
657
- expect(System.cmd_tlm_version).to be_nil
658
673
  System.instance.process_file(tf.path)
659
- expect(System.cmd_tlm_version).to eql "2.1"
674
+ expect(System.additional_md5_files.include?(File.expand_path(md5f.path))).to be true
675
+ md5f.close
676
+ md5f.unlink
660
677
  tf.unlink
661
678
  end
662
679
  end
@@ -680,4 +697,3 @@ module Cosmos
680
697
  end
681
698
  end
682
699
  end
683
-