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
@@ -113,13 +113,13 @@ module Cosmos
113
113
  tf = Tempfile.new('unittest')
114
114
  tf.puts("REQUIRE")
115
115
  tf.close
116
- expect { Target.new("TGT").process_file(tf.path) }.to raise_error(ConfigParser::Error, /Not enough parameters for REQUIRE./)
116
+ expect { Target.new("INST").process_file(tf.path) }.to raise_error(ConfigParser::Error, /Not enough parameters for REQUIRE./)
117
117
  tf.unlink
118
118
 
119
119
  tf = Tempfile.new('unittest')
120
120
  tf.puts("REQUIRE my_file.rb TRUE")
121
121
  tf.close
122
- expect { Target.new("TGT").process_file(tf.path) }.to raise_error(ConfigParser::Error, /Too many parameters for REQUIRE./)
122
+ expect { Target.new("INST").process_file(tf.path) }.to raise_error(ConfigParser::Error, /Too many parameters for REQUIRE./)
123
123
  tf.unlink
124
124
  end
125
125
 
@@ -127,21 +127,44 @@ module Cosmos
127
127
  tf = Tempfile.new('unittest')
128
128
  tf.puts("REQUIRE my_file.rb")
129
129
  tf.close
130
- expect { Target.new("TGT").process_file(tf.path) }.to raise_error(ConfigParser::Error, /Unable to require my_file.rb/)
130
+ expect { Target.new("INST").process_file(tf.path) }.to raise_error(ConfigParser::Error, /Unable to require my_file.rb/)
131
131
  tf.unlink
132
132
  end
133
133
 
134
- it "requires the file" do
135
- filename = File.join(File.dirname(__FILE__),'..','..','lib','my_file.rb')
134
+ it "requires the file in the target lib directory over system lib" do
135
+ filename = File.join(Cosmos::USERPATH, 'config', 'targets', 'INST', 'lib', 'tgt_file.rb')
136
136
  File.open(filename, 'w') do |file|
137
- file.puts "class MyFile"
137
+ file.puts "class TgtLibFile"
138
138
  file.puts "end"
139
139
  end
140
+ filename = File.join(Cosmos::USERPATH, 'lib', 'tgt_file.rb')
141
+ File.open(filename, 'w') do |file|
142
+ file.puts "class SystemLibFile"
143
+ file.puts "end"
144
+ end
145
+
140
146
  tf = Tempfile.new('unittest')
141
- tf.puts("REQUIRE my_file.rb")
147
+ tf.puts("REQUIRE tgt_file.rb")
148
+ tf.close
149
+ Target.new("INST").process_file(tf.path)
150
+ expect { TgtLibFile.new }.to_not raise_error
151
+ expect(Object.const_defined?('TgtLibFile')).to be true
152
+ expect(Object.const_defined?('SystemLibFile')).to be false
153
+ File.delete filename
154
+ tf.unlink
155
+ end
156
+
157
+ it "requires the file in the system lib directory" do
158
+ filename = File.join(Cosmos::USERPATH, 'lib', 'system_file.rb')
159
+ File.open(filename, 'w') do |file|
160
+ file.puts "class SystemFile"
161
+ file.puts "end"
162
+ end
163
+ tf = Tempfile.new('unittest')
164
+ tf.puts("REQUIRE system_file.rb")
142
165
  tf.close
143
- Target.new("TGT").process_file(tf.path)
144
- expect { MyFile.new }.to_not raise_error
166
+ Target.new("INST").process_file(tf.path)
167
+ expect { SystemFile.new }.to_not raise_error
145
168
  File.delete filename
146
169
  tf.unlink
147
170
  end
@@ -271,11 +294,10 @@ module Cosmos
271
294
  expect(tgt.cmd_tlm_files.length).to eql 4
272
295
  expect(tgt.cmd_tlm_files).to eql [tgt_dir + '/cmd_tlm/tgt_cmds3.txt', tgt_dir + '/cmd_tlm/tgt_cmds2.txt', tgt_dir + '/cmd_tlm/tgt_tlm3.txt', tgt_dir + '/cmd_tlm/tgt_tlm.txt']
273
296
 
274
- FileUtils.rm_r(tgt_dir)
297
+ FileUtils.rm_rf(tgt_dir)
275
298
  end
276
299
  end
277
300
  end
278
301
 
279
302
  end
280
303
  end
281
-
@@ -474,13 +474,13 @@ module Cosmos
474
474
  time2 = Time.now + 2
475
475
  packet = System.commands.packet("INST", "COLLECT")
476
476
  packet.received_time = time
477
- packet2 = System.commands.packet("COSMOS", "STARTLOGGING")
477
+ packet2 = System.commands.packet("SYSTEM", "STARTLOGGING")
478
478
  packet2.received_time = time2
479
- expect(@api.get_cmd_time()).to eql ['COSMOS', 'STARTLOGGING', time2.tv_sec, time2.tv_usec]
479
+ expect(@api.get_cmd_time()).to eql ['SYSTEM', 'STARTLOGGING', time2.tv_sec, time2.tv_usec]
480
480
  expect(@api.get_cmd_time('INST')).to eql ['INST', 'COLLECT', time.tv_sec, time.tv_usec]
481
- expect(@api.get_cmd_time('COSMOS')).to eql ['COSMOS', 'STARTLOGGING', time2.tv_sec, time2.tv_usec]
481
+ expect(@api.get_cmd_time('SYSTEM')).to eql ['SYSTEM', 'STARTLOGGING', time2.tv_sec, time2.tv_usec]
482
482
  expect(@api.get_cmd_time('INST', 'COLLECT')).to eql ['INST', 'COLLECT', time.tv_sec, time.tv_usec]
483
- expect(@api.get_cmd_time('COSMOS', 'STARTLOGGING')).to eql ['COSMOS', 'STARTLOGGING', time2.tv_sec, time2.tv_usec]
483
+ expect(@api.get_cmd_time('SYSTEM', 'STARTLOGGING')).to eql ['SYSTEM', 'STARTLOGGING', time2.tv_sec, time2.tv_usec]
484
484
  end
485
485
  end
486
486
 
@@ -1036,7 +1036,7 @@ module Cosmos
1036
1036
 
1037
1037
  describe "get_target_list" do
1038
1038
  it "returns all target names" do
1039
- expect(@api.get_target_list).to eql %w(COSMOS INST META SYSTEM)
1039
+ expect(@api.get_target_list).to eql %w(INST SYSTEM)
1040
1040
  end
1041
1041
  end
1042
1042
 
@@ -48,26 +48,42 @@ module Cosmos
48
48
  tf.close
49
49
  config = CmdTlmServerConfig.new(tf.path)
50
50
  bt = BackgroundTasks.new(config)
51
- expect(Thread.list.length).to eql(1) # RSpec main thread
51
+ if RUBY_ENGINE == 'ruby'
52
+ expect(Thread.list.length).to eql(1) # RSpec main thread
53
+ else
54
+ expect(Thread.list.length).to eql(2) # RSpec main thread
55
+ end
52
56
  expect(bt.instance_variable_get("@threads").length).to eq 0
53
57
 
54
58
  capture_io do |stdout|
55
59
  bt.start_all
56
60
  sleep 0.2
57
- expect(Thread.list.length).to eql(3)
61
+ if RUBY_ENGINE == 'ruby'
62
+ expect(Thread.list.length).to eql(3)
63
+ else
64
+ expect(Thread.list.length).to eql(4)
65
+ end
58
66
  expect(bt.instance_variable_get("@threads").compact.length).to eq 2
59
67
  expect(stdout.string).to match "BG0 START"
60
68
  expect(stdout.string).to match "BG2 START"
61
69
 
62
70
  bt.start(1)
63
71
  sleep 0.1
64
- expect(Thread.list.length).to eql(4)
72
+ if RUBY_ENGINE == 'ruby'
73
+ expect(Thread.list.length).to eql(4)
74
+ else
75
+ expect(Thread.list.length).to eql(5)
76
+ end
65
77
  expect(bt.instance_variable_get("@threads").compact.length).to eq 3
66
78
  expect(stdout.string).to match "BG1 START"
67
79
 
68
80
  bt.stop_all
69
81
  sleep 0.2
70
- expect(Thread.list.length).to eql(1)
82
+ if RUBY_ENGINE == 'ruby'
83
+ expect(Thread.list.length).to eql(1)
84
+ else
85
+ expect(Thread.list.length).to eql(2)
86
+ end
71
87
  expect(bt.instance_variable_get("@threads").compact.length).to eq 0
72
88
  expect(stdout.string).to match "BG0 STOP"
73
89
  expect(stdout.string).to match "BG1 STOP"
@@ -86,48 +102,76 @@ module Cosmos
86
102
  tf.close
87
103
  config = CmdTlmServerConfig.new(tf.path)
88
104
  bt = BackgroundTasks.new(config)
89
- expect(Thread.list.length).to eql(1) # RSpec main thread
105
+ if RUBY_ENGINE == 'ruby'
106
+ expect(Thread.list.length).to eql(1) # RSpec main thread
107
+ else
108
+ expect(Thread.list.length).to eql(2) # RSpec main thread
109
+ end
90
110
  expect(bt.instance_variable_get("@threads").length).to eq 0
91
111
 
92
112
  capture_io do |stdout|
93
113
  bt.start(2)
94
114
  sleep 0.1
95
- expect(Thread.list.length).to eql(2)
115
+ if RUBY_ENGINE == 'ruby'
116
+ expect(Thread.list.length).to eql(2)
117
+ else
118
+ expect(Thread.list.length).to eql(3)
119
+ end
96
120
  expect(bt.instance_variable_get("@threads")[2].alive?).to eq true
97
121
  expect(bt.instance_variable_get("@threads").compact.length).to eq 1
98
122
  expect(stdout.string).to match "BG2 START"
99
123
 
100
124
  bt.start(1)
101
125
  sleep 0.1
102
- expect(Thread.list.length).to eql(3)
126
+ if RUBY_ENGINE == 'ruby'
127
+ expect(Thread.list.length).to eql(3)
128
+ else
129
+ expect(Thread.list.length).to eql(4)
130
+ end
103
131
  expect(bt.instance_variable_get("@threads")[1].alive?).to eq true
104
132
  expect(bt.instance_variable_get("@threads").compact.length).to eq 2
105
133
  expect(stdout.string).to match "BG1 START"
106
134
 
107
135
  bt.start(0)
108
136
  sleep 0.1
109
- expect(Thread.list.length).to eql(4)
137
+ if RUBY_ENGINE == 'ruby'
138
+ expect(Thread.list.length).to eql(4)
139
+ else
140
+ expect(Thread.list.length).to eql(5)
141
+ end
110
142
  expect(bt.instance_variable_get("@threads")[0].alive?).to eq true
111
143
  expect(bt.instance_variable_get("@threads").compact.length).to eq 3
112
144
  expect(stdout.string).to match "BG0 START"
113
145
 
114
146
  bt.stop(1)
115
147
  sleep 0.2
116
- expect(Thread.list.length).to eql(3)
148
+ if RUBY_ENGINE == 'ruby'
149
+ expect(Thread.list.length).to eql(3)
150
+ else
151
+ expect(Thread.list.length).to eql(4)
152
+ end
117
153
  expect(bt.instance_variable_get("@threads")[1]).to be_nil
118
154
  expect(bt.instance_variable_get("@threads").compact.length).to eq 2
119
155
  expect(stdout.string).to match "BG1 STOP"
120
156
 
121
157
  bt.stop(0)
122
158
  sleep 0.2
123
- expect(Thread.list.length).to eql(2)
159
+ if RUBY_ENGINE == 'ruby'
160
+ expect(Thread.list.length).to eql(2)
161
+ else
162
+ expect(Thread.list.length).to eql(3)
163
+ end
124
164
  expect(bt.instance_variable_get("@threads")[0]).to be_nil
125
165
  expect(bt.instance_variable_get("@threads").compact.length).to eq 1
126
166
  expect(stdout.string).to match "BG0 STOP"
127
167
 
128
168
  bt.stop(2)
129
169
  sleep 0.2
130
- expect(Thread.list.length).to eql(1)
170
+ if RUBY_ENGINE == 'ruby'
171
+ expect(Thread.list.length).to eql(1)
172
+ else
173
+ expect(Thread.list.length).to eql(2)
174
+ end
131
175
  expect(bt.instance_variable_get("@threads")[2]).to be_nil
132
176
  expect(bt.instance_variable_get("@threads").compact.length).to eq 0
133
177
  expect(stdout.string).to match "BG2 STOP"
@@ -141,21 +185,37 @@ module Cosmos
141
185
  tf.close
142
186
  config = CmdTlmServerConfig.new(tf.path)
143
187
  bt = BackgroundTasks.new(config)
144
- expect(Thread.list.length).to eql(1) # RSpec main thread
188
+ if RUBY_ENGINE == 'ruby'
189
+ expect(Thread.list.length).to eql(1) # RSpec main thread
190
+ else
191
+ expect(Thread.list.length).to eql(2) # RSpec main thread
192
+ end
145
193
  expect(bt.instance_variable_get("@threads").length).to eq 0
146
194
 
147
195
  capture_io do |stdout|
148
196
  bt.start_all
149
197
  # 2 because the RSpec main thread plus the background task
150
- expect(Thread.list.length).to eql(2)
198
+ if RUBY_ENGINE == 'ruby'
199
+ expect(Thread.list.length).to eql(2)
200
+ else
201
+ expect(Thread.list.length).to eql(3)
202
+ end
151
203
  sleep 1.1 # Allow the thread to crash
152
- expect(Thread.list.length).to eql(1)
204
+ if RUBY_ENGINE == 'ruby'
205
+ expect(Thread.list.length).to eql(1)
206
+ else
207
+ expect(Thread.list.length).to eql(2)
208
+ end
153
209
  expect(bt.instance_variable_get("@threads").length).to eq 1
154
210
  expect(bt.instance_variable_get("@threads")[0].alive?).to eq false
155
211
 
156
212
  bt.stop_all
157
213
  sleep 0.2
158
- expect(Thread.list.length).to eql(1)
214
+ if RUBY_ENGINE == 'ruby'
215
+ expect(Thread.list.length).to eql(1)
216
+ else
217
+ expect(Thread.list.length).to eql(2)
218
+ end
159
219
  expect(bt.instance_variable_get("@threads").length).to eq 0
160
220
 
161
221
  expect(stdout.string).to match "unexpectedly died"
@@ -32,13 +32,27 @@ module Cosmos
32
32
  file.puts "end"
33
33
  end
34
34
 
35
+ @protocol_filename = File.join(Cosmos::USERPATH,'lib','cts_config_test_protocol.rb')
36
+ File.open(@protocol_filename,'w') do |file|
37
+ file.puts "require 'cosmos'"
38
+ file.puts "require 'cosmos/interfaces/protocols/protocol'"
39
+ file.puts "module Cosmos"
40
+ file.puts " class CtsConfigTestProtocol < Protocol"
41
+ file.puts " def initialize(*args)" # Allow any args
42
+ file.puts " super()"
43
+ file.puts " end"
44
+ file.puts " end"
45
+ file.puts "end"
46
+ end
47
+
35
48
  @keywords = %w(TITLE PACKET_LOG_WRITER AUTO_INTERFACE_TARGETS INTERFACE_TARGET INTERFACE ROUTER)
36
- @interface_keywords = %w(DONT_CONNECT DONT_RECONNECT RECONNECT_DELAY DISABLE_DISCONNECT LOG DONT_LOG TARGET)
49
+ @interface_keywords = %w(DONT_CONNECT DONT_RECONNECT RECONNECT_DELAY DISABLE_DISCONNECT LOG DONT_LOG TARGET PROTOCOL)
37
50
  end
38
51
 
39
52
  after(:all) do
40
53
  clean_config()
41
54
  File.delete @interface_filename
55
+ File.delete @protocol_filename
42
56
  end
43
57
 
44
58
  describe "process_file" do
@@ -142,7 +156,7 @@ module Cosmos
142
156
  tf.puts 'AUTO_INTERFACE_TARGETS'
143
157
  tf.close
144
158
  config = CmdTlmServerConfig.new(tf.path)
145
- expect(config.interfaces.keys).to eql %w(INST_INT COSMOSINT)
159
+ expect(config.interfaces.keys).to eql %w(INST_INT SYSTEM_INT)
146
160
  tf.unlink
147
161
  end
148
162
  end
@@ -369,6 +383,112 @@ module Cosmos
369
383
  end
370
384
  end
371
385
 
386
+ context "with PROTOCOL" do
387
+ it "requires two parameters" do
388
+ tf = Tempfile.new('unittest')
389
+ tf.puts "INTERFACE CtsConfigTestInterface cts_config_test_interface.rb"
390
+ tf.puts 'PROTOCOL'
391
+ tf.close
392
+ expect { CmdTlmServerConfig.new(tf.path) }.to raise_error(ConfigParser::Error, /Not enough parameters for PROTOCOL/)
393
+ tf.unlink
394
+ end
395
+
396
+ it "requires a READ, WRITE, or READ_WRITE descriptor" do
397
+ tf = Tempfile.new('unittest')
398
+ tf.puts "INTERFACE CtsConfigTestInterface cts_config_test_interface.rb"
399
+ tf.puts 'PROTOCOL BLAH cts_config_test_protocol.rb'
400
+ tf.close
401
+ expect { CmdTlmServerConfig.new(tf.path) }.to raise_error(ConfigParser::Error, /Invalid protocol type: BLAH/)
402
+ tf.unlink
403
+ end
404
+
405
+ it "requires a protocol filename or class" do
406
+ tf = Tempfile.new('unittest')
407
+ tf.puts "INTERFACE CtsConfigTestInterface cts_config_test_interface.rb"
408
+ tf.puts 'PROTOCOL READ'
409
+ tf.close
410
+ expect { CmdTlmServerConfig.new(tf.path) }.to raise_error(ConfigParser::Error, /Not enough parameters for PROTOCOL/)
411
+ tf.unlink
412
+ end
413
+
414
+ it "instantiates via the file name" do
415
+ tf = Tempfile.new('unittest')
416
+ tf.puts "INTERFACE CtsConfigTestInterface cts_config_test_interface.rb"
417
+ tf.puts 'PROTOCOL READ cts_config_test_protocol.rb'
418
+ tf.close
419
+ config = CmdTlmServerConfig.new(tf.path)
420
+ expect(config.interfaces['CTSCONFIGTESTINTERFACE'].read_protocols[0].class).to be CtsConfigTestProtocol
421
+ tf.unlink
422
+ end
423
+
424
+ it "instantiates via the class name" do
425
+ tf = Tempfile.new('unittest')
426
+ tf.puts "INTERFACE CtsConfigTestInterface cts_config_test_interface.rb"
427
+ tf.puts 'PROTOCOL READ CtsConfigTestProtocol'
428
+ tf.close
429
+ config = CmdTlmServerConfig.new(tf.path)
430
+ expect(config.interfaces['CTSCONFIGTESTINTERFACE'].read_protocols[0].class).to be CtsConfigTestProtocol
431
+ tf.unlink
432
+ end
433
+
434
+ it "appends to the list of READ protocols" do
435
+ tf = Tempfile.new('unittest')
436
+ tf.puts "INTERFACE CtsConfigTestInterface cts_config_test_interface.rb"
437
+ tf.puts 'PROTOCOL READ OverrideProtocol'
438
+ tf.puts 'PROTOCOL READ CtsConfigTestProtocol'
439
+ tf.close
440
+ config = CmdTlmServerConfig.new(tf.path)
441
+ read_protocols = config.interfaces['CTSCONFIGTESTINTERFACE'].read_protocols
442
+ expect(read_protocols[0].class).to be OverrideProtocol
443
+ expect(read_protocols[1].class).to be CtsConfigTestProtocol
444
+ expect(config.interfaces['CTSCONFIGTESTINTERFACE'].write_protocols).to be_empty
445
+ tf.unlink
446
+ end
447
+
448
+ it "prepends to the list of WRITE protocols" do
449
+ tf = Tempfile.new('unittest')
450
+ tf.puts "INTERFACE CtsConfigTestInterface cts_config_test_interface.rb"
451
+ tf.puts 'PROTOCOL WRITE OverrideProtocol'
452
+ tf.puts 'PROTOCOL WRITE CtsConfigTestProtocol'
453
+ tf.close
454
+ config = CmdTlmServerConfig.new(tf.path)
455
+ write_protocols = config.interfaces['CTSCONFIGTESTINTERFACE'].write_protocols
456
+ expect(write_protocols[0].class).to be CtsConfigTestProtocol
457
+ expect(write_protocols[1].class).to be OverrideProtocol
458
+ expect(config.interfaces['CTSCONFIGTESTINTERFACE'].read_protocols).to be_empty
459
+ tf.unlink
460
+ end
461
+
462
+ it "adds to both with READ_WRITE" do
463
+ tf = Tempfile.new('unittest')
464
+ tf.puts "INTERFACE CtsConfigTestInterface cts_config_test_interface.rb"
465
+ tf.puts 'PROTOCOL READ_WRITE OverrideProtocol'
466
+ tf.puts 'PROTOCOL READ_WRITE CtsConfigTestProtocol'
467
+ tf.close
468
+ config = CmdTlmServerConfig.new(tf.path)
469
+ read_protocols = config.interfaces['CTSCONFIGTESTINTERFACE'].read_protocols
470
+ write_protocols = config.interfaces['CTSCONFIGTESTINTERFACE'].write_protocols
471
+ expect(read_protocols[0].class).to be OverrideProtocol
472
+ expect(read_protocols[1].class).to be CtsConfigTestProtocol
473
+ expect(write_protocols[0].class).to be CtsConfigTestProtocol
474
+ expect(write_protocols[1].class).to be OverrideProtocol
475
+ tf.unlink
476
+ end
477
+
478
+ it "stores initialization parameters" do
479
+ tf = Tempfile.new('unittest')
480
+ tf.puts "INTERFACE CtsConfigTestInterface cts_config_test_interface.rb"
481
+ tf.puts 'PROTOCOL READ cts_config_test_protocol.rb PARAM1 20'
482
+ tf.close
483
+ config = CmdTlmServerConfig.new(tf.path)
484
+ pinfo = config.interfaces['CTSCONFIGTESTINTERFACE'].protocol_info[0]
485
+ expect(pinfo[0]).to be CtsConfigTestProtocol
486
+ expect(pinfo[1]).to eq ['PARAM1', '20']
487
+ expect(pinfo[2]).to eq :READ
488
+ tf.unlink
489
+ end
490
+ end
491
+
372
492
  context "with two interfaces with the same name" do
373
493
  it "complains about duplicate interface names" do
374
494
  tf = Tempfile.new('unittest')
@@ -456,7 +576,7 @@ module Cosmos
456
576
  file.puts " end"
457
577
  file.puts "end"
458
578
  end
459
-
579
+
460
580
  background_task_args_file = File.join(Cosmos::USERPATH,'lib','cts_config_test_background_task_args.rb')
461
581
  File.open(background_task_args_file,'w') do |file|
462
582
  file.puts "require 'cosmos'"
@@ -469,7 +589,7 @@ module Cosmos
469
589
  file.puts " end"
470
590
  file.puts "end"
471
591
  end
472
-
592
+
473
593
  tf = Tempfile.new('unittest')
474
594
  tf.puts 'BACKGROUND_TASK cts_config_test_background_task_no_args.rb'
475
595
  tf.puts 'BACKGROUND_TASK cts_config_test_background_task_args.rb 1 2 3'
@@ -479,7 +599,7 @@ module Cosmos
479
599
  expect(config.background_tasks[0]).to be_a CtsConfigTestBackgroundTaskNoArgs
480
600
  expect(config.background_tasks[1]).to be_a CtsConfigTestBackgroundTaskArgs
481
601
  tf.unlink
482
-
602
+
483
603
  File.delete background_task_no_args_file
484
604
  File.delete background_task_args_file
485
605
  end