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
@@ -19,7 +19,8 @@ module Cosmos
19
19
  cts = File.join(Cosmos::USERPATH,'config','tools','cmd_tlm_server','cmd_tlm_server.txt')
20
20
  FileUtils.mkdir_p(File.dirname(cts))
21
21
  File.open(cts,'w') do |file|
22
- file.puts 'INTERFACE INT interface.rb'
22
+ file.puts 'INTERFACE SYSTEM_INT cmd_tlm_server_interface.rb'
23
+ file.puts ' TARGET SYSTEM'
23
24
  end
24
25
  end
25
26
 
@@ -45,24 +46,31 @@ module Cosmos
45
46
  expect(CmdTlmServer.routers).to be_a Routers
46
47
  expect(CmdTlmServer.message_log).to be_a MessageLog
47
48
  expect(CmdTlmServer.json_drb).to be_a JsonDRb
49
+ sleep 0.1
48
50
 
49
- # Verify we can't start another CTS
50
- expect { CmdTlmServer.new }.to raise_error(FatalError, /Error starting JsonDRb on port 7777/)
51
- cts.stop
52
- sleep 0.2
51
+ begin
52
+ # Verify we can't start another CTS
53
+ expect { CmdTlmServer.new }.to raise_error(FatalError, /Error starting JsonDRb on port 7777/)
54
+ ensure
55
+ cts.stop
56
+ sleep 0.2
57
+ end
53
58
  end
54
59
 
55
60
  it "creates the CTS in production mode" do
56
61
  # Production mode means we start logging
57
62
  expect_any_instance_of(PacketLogging).to receive(:start)
58
63
  cts = CmdTlmServer.new(CmdTlmServer::DEFAULT_CONFIG_FILE, true)
59
- # Verify we disabled the ability to stop logging
60
- expect(CmdTlmServer.json_drb.method_whitelist).to include('start_logging')
61
- expect(CmdTlmServer.json_drb.method_whitelist).not_to include('stop_logging')
62
- expect(CmdTlmServer.json_drb.method_whitelist).not_to include('stop_cmd_log')
63
- expect(CmdTlmServer.json_drb.method_whitelist).not_to include('stop_tlm_log')
64
- cts.stop
65
- sleep 0.2
64
+ begin
65
+ # Verify we disabled the ability to stop logging
66
+ expect(CmdTlmServer.json_drb.method_whitelist).to include('start_logging')
67
+ expect(CmdTlmServer.json_drb.method_whitelist).not_to include('stop_logging')
68
+ expect(CmdTlmServer.json_drb.method_whitelist).not_to include('stop_cmd_log')
69
+ expect(CmdTlmServer.json_drb.method_whitelist).not_to include('stop_tlm_log')
70
+ ensure
71
+ cts.stop
72
+ sleep 0.2
73
+ end
66
74
  end
67
75
  end
68
76
 
@@ -70,26 +78,35 @@ module Cosmos
70
78
  it "creates the CTS in production mode" do
71
79
  # Production mode means we start logging
72
80
  cts = CmdTlmServer.new
73
- expect(CmdTlmServer.json_drb.method_whitelist).to include('start_logging')
74
- expect(CmdTlmServer.json_drb.method_whitelist).to include('stop_logging')
75
- expect(CmdTlmServer.json_drb.method_whitelist).to include('stop_cmd_log')
76
- expect(CmdTlmServer.json_drb.method_whitelist).to include('stop_tlm_log')
77
- threads = Thread.list.length
78
- cts.start # Call start again ... it should do nothing
79
- expect(Thread.list.length).to eql threads
80
- cts.stop
81
- sleep 0.2
81
+ begin
82
+ expect(CmdTlmServer.json_drb.method_whitelist).to include('start_logging')
83
+ expect(CmdTlmServer.json_drb.method_whitelist).to include('stop_logging')
84
+ expect(CmdTlmServer.json_drb.method_whitelist).to include('stop_cmd_log')
85
+ expect(CmdTlmServer.json_drb.method_whitelist).to include('stop_tlm_log')
86
+ threads = Thread.list.length
87
+ cts.start # Call start again ... it should do nothing
88
+ expect(CmdTlmServer.json_drb.method_whitelist).to include('start_logging')
89
+ expect(CmdTlmServer.json_drb.method_whitelist).to include('stop_logging')
90
+ expect(CmdTlmServer.json_drb.method_whitelist).to include('stop_cmd_log')
91
+ expect(CmdTlmServer.json_drb.method_whitelist).to include('stop_tlm_log')
92
+ ensure
93
+ cts.stop
94
+ sleep 0.2
95
+ end
82
96
 
83
97
  expect_any_instance_of(PacketLogging).to receive(:start)
84
98
  # Now start the server in production mode
85
99
  cts.start(true)
86
- # Verify we disabled the ability to stop logging
87
- expect(CmdTlmServer.json_drb.method_whitelist).to include('start_logging')
88
- expect(CmdTlmServer.json_drb.method_whitelist).not_to include('stop_logging')
89
- expect(CmdTlmServer.json_drb.method_whitelist).not_to include('stop_cmd_log')
90
- expect(CmdTlmServer.json_drb.method_whitelist).not_to include('stop_tlm_log')
91
- cts.stop
92
- sleep 0.2
100
+ begin
101
+ # Verify we disabled the ability to stop logging
102
+ expect(CmdTlmServer.json_drb.method_whitelist).to include('start_logging')
103
+ expect(CmdTlmServer.json_drb.method_whitelist).not_to include('stop_logging')
104
+ expect(CmdTlmServer.json_drb.method_whitelist).not_to include('stop_cmd_log')
105
+ expect(CmdTlmServer.json_drb.method_whitelist).not_to include('stop_tlm_log')
106
+ ensure
107
+ cts.stop
108
+ sleep 0.2
109
+ end
93
110
  end
94
111
 
95
112
  it "monitors the staleness thread" do
@@ -112,238 +129,240 @@ module Cosmos
112
129
  it "logs the change according to the state" do
113
130
  capture_io do |stdout|
114
131
  cts = CmdTlmServer.new
115
- pkt = Packet.new("TGT","PKT")
116
- pi = PacketItem.new("TEST", 0, 32, :UINT, :BIG_ENDIAN, nil)
117
- cts.limits_change_callback(pkt, pi, :STALE, 100, true)
118
- expect(stdout.string).to match "TGT PKT TEST = 100 is UNKNOWN"
119
-
120
- pi.limits.state = :BLUE
121
- cts.limits_change_callback(pkt, pi, :STALE, 100, true)
122
- expect(stdout.string).to match "<B>TGT PKT TEST = 100 is BLUE"
123
-
124
- pi.limits.state = :GREEN
125
- cts.limits_change_callback(pkt, pi, :STALE, 100, true)
126
- expect(stdout.string).to match "<G>TGT PKT TEST = 100 is GREEN"
127
-
128
- pi.limits.state = :YELLOW
129
- cts.limits_change_callback(pkt, pi, :STALE, 100, true)
130
- expect(stdout.string).to match "<Y>TGT PKT TEST = 100 is YELLOW"
131
-
132
- pi.limits.state = :RED
133
- cts.limits_change_callback(pkt, pi, :STALE, 100, true)
134
- expect(stdout.string).to match "<R>TGT PKT TEST = 100 is RED"
135
-
136
- cts.stop
137
- sleep 0.2
132
+ begin
133
+ pkt = Packet.new("TGT","PKT")
134
+ pi = PacketItem.new("TEST", 0, 32, :UINT, :BIG_ENDIAN, nil)
135
+ cts.limits_change_callback(pkt, pi, :STALE, 100, true)
136
+ expect(stdout.string).to match "TGT PKT TEST = 100 is UNKNOWN"
137
+
138
+ pi.limits.state = :BLUE
139
+ cts.limits_change_callback(pkt, pi, :STALE, 100, true)
140
+ expect(stdout.string).to match "<B>TGT PKT TEST = 100 is BLUE"
141
+
142
+ pi.limits.state = :GREEN
143
+ cts.limits_change_callback(pkt, pi, :STALE, 100, true)
144
+ expect(stdout.string).to match "<G>TGT PKT TEST = 100 is GREEN"
145
+
146
+ pi.limits.state = :YELLOW
147
+ cts.limits_change_callback(pkt, pi, :STALE, 100, true)
148
+ expect(stdout.string).to match "<Y>TGT PKT TEST = 100 is YELLOW"
149
+
150
+ pi.limits.state = :RED
151
+ cts.limits_change_callback(pkt, pi, :STALE, 100, true)
152
+ expect(stdout.string).to match "<R>TGT PKT TEST = 100 is RED"
153
+ ensure
154
+ cts.stop
155
+ sleep 0.2
156
+ end
138
157
  end
139
158
  end
140
159
 
141
160
  it "calls the limits response" do
142
161
  cts = CmdTlmServer.new
143
- pkt = Packet.new("TGT","PKT")
144
- pi = PacketItem.new("TEST", 0, 32, :UINT, :BIG_ENDIAN, nil)
145
- lr = LimitsResponse.new
146
- pi.limits.response = lr
147
- expect(pi.limits.response).to receive(:call) do |tgt, pkt, item, old_state, state|
148
- expect(tgt).to eql "TGT"
149
- expect(pkt).to eql "PKT"
150
- expect(item.name).to eql "TEST"
151
- expect(old_state).to eql :YELLOW
152
- expect(state).to eql :GREEN
153
- end
154
- pi.limits.state = :GREEN
155
-
156
- cts.limits_change_callback(pkt, pi, :YELLOW, 100, true)
157
- sleep 0.1
158
- cts.stop
159
- sleep 0.2
160
- end
161
-
162
- it "logs limits response errors" do
163
- capture_io do |stdout|
164
- cts = CmdTlmServer.new
162
+ begin
165
163
  pkt = Packet.new("TGT","PKT")
166
164
  pi = PacketItem.new("TEST", 0, 32, :UINT, :BIG_ENDIAN, nil)
167
165
  lr = LimitsResponse.new
168
166
  pi.limits.response = lr
169
- expect(pi.limits.response).to receive(:call) { raise "ResponseError" }
167
+ expect(pi.limits.response).to receive(:call) do |tgt, pkt, item, old_state, state|
168
+ expect(tgt).to eql "TGT"
169
+ expect(pkt).to eql "PKT"
170
+ expect(item.name).to eql "TEST"
171
+ expect(old_state).to eql :YELLOW
172
+ expect(state).to eql :GREEN
173
+ end
170
174
  pi.limits.state = :GREEN
171
-
172
175
  cts.limits_change_callback(pkt, pi, :YELLOW, 100, true)
173
- sleep 0.1
174
-
175
- expect(stdout.string).to match "TGT PKT TEST Limits Response Exception!"
176
+ ensure
176
177
  cts.stop
177
178
  sleep 0.2
178
179
  end
179
180
  end
181
+
182
+ it "logs limits response errors" do
183
+ capture_io do |stdout|
184
+ cts = CmdTlmServer.new
185
+ begin
186
+ pkt = Packet.new("TGT","PKT")
187
+ pi = PacketItem.new("TEST", 0, 32, :UINT, :BIG_ENDIAN, nil)
188
+ lr = LimitsResponse.new
189
+ pi.limits.response = lr
190
+ expect(pi.limits.response).to receive(:call) { raise "ResponseError" }
191
+ pi.limits.state = :GREEN
192
+ cts.limits_change_callback(pkt, pi, :YELLOW, 100, true)
193
+ sleep 0.1
194
+ expect(stdout.string).to match "TGT PKT TEST Limits Response Exception!"
195
+ ensure
196
+ cts.stop
197
+ sleep 0.2
198
+ end
199
+ end
200
+ end
180
201
  end
181
202
 
182
203
  describe "self.subscribe_limits_events" do
183
204
  it "subscribes to limits events" do
205
+ allow(System).to receive_message_chain(:telemetry,:stale).and_return([])
206
+ allow(System).to receive_message_chain(:telemetry,:limits_change_callback=)
207
+ allow(System).to receive_message_chain(:telemetry,:check_stale)
184
208
  cts = CmdTlmServer.new
185
- pkt = Packet.new("TGT","PKT")
186
- pi = PacketItem.new("TEST", 0, 32, :UINT, :BIG_ENDIAN, nil)
187
- id = CmdTlmServer.subscribe_limits_events()
188
-
189
- # Create two limits change events
190
- pi.limits.state = :GREEN
191
- cts.limits_change_callback(pkt, pi, :STALE, 100, true)
192
- pi.limits.state = :YELLOW
193
- cts.limits_change_callback(pkt, pi, :GREEN, 100, true)
194
-
195
- # Get and check the first one
196
- type,data = CmdTlmServer.get_limits_event(id)
197
- tgt,pkt,item,old_state,state = data # split the data array
198
- expect(type).to eql :LIMITS_CHANGE
199
- expect(tgt).to eql "TGT"
200
- expect(pkt).to eql "PKT"
201
- expect(item).to eql "TEST"
202
- expect(old_state).to eql :STALE
203
- expect(state).to eql :GREEN
209
+ begin
210
+ pkt = Packet.new("TGT","PKT")
211
+ pi = PacketItem.new("TEST", 0, 32, :UINT, :BIG_ENDIAN, nil)
212
+ id = CmdTlmServer.subscribe_limits_events()
204
213
 
205
- # Get and check the second one
206
- type,data = CmdTlmServer.get_limits_event(id)
207
- tgt,pkt,item,old_state,state = data # split the data array
208
- expect(type).to eql :LIMITS_CHANGE
209
- expect(tgt).to eql "TGT"
210
- expect(pkt).to eql "PKT"
211
- expect(item).to eql "TEST"
212
- expect(old_state).to eql :GREEN
213
- expect(state).to eql :YELLOW
214
+ # Create two limits change events
215
+ pi.limits.state = :GREEN
216
+ cts.limits_change_callback(pkt, pi, :STALE, 100, true)
217
+ pi.limits.state = :YELLOW
218
+ cts.limits_change_callback(pkt, pi, :GREEN, 100, true)
214
219
 
215
- cts.stop
216
- sleep 0.2
220
+ # Get and check the first one
221
+ type,data = CmdTlmServer.get_limits_event(id)
222
+ tgt,pkt,item,old_state,state = data # split the data array
223
+ expect(type).to eql :LIMITS_CHANGE
224
+ expect(tgt).to eql "TGT"
225
+ expect(pkt).to eql "PKT"
226
+ expect(item).to eql "TEST"
227
+ expect(old_state).to eql :STALE
228
+ expect(state).to eql :GREEN
229
+
230
+ # Get and check the second one
231
+ type,data = CmdTlmServer.get_limits_event(id)
232
+ tgt,pkt,item,old_state,state = data # split the data array
233
+ expect(type).to eql :LIMITS_CHANGE
234
+ expect(tgt).to eql "TGT"
235
+ expect(pkt).to eql "PKT"
236
+ expect(item).to eql "TEST"
237
+ expect(old_state).to eql :GREEN
238
+ expect(state).to eql :YELLOW
239
+ ensure
240
+ cts.stop
241
+ sleep 0.2
242
+ end
217
243
  end
218
244
 
219
245
  it "deletes queues after the max events is reached" do
246
+ allow(System).to receive_message_chain(:telemetry,:stale).and_return([])
247
+ allow(System).to receive_message_chain(:telemetry,:limits_change_callback=)
248
+ allow(System).to receive_message_chain(:telemetry,:check_stale)
220
249
  cts = CmdTlmServer.new
221
- pkt = Packet.new("TGT","PKT")
222
- pi = PacketItem.new("TEST", 0, 32, :UINT, :BIG_ENDIAN, nil)
223
- id = CmdTlmServer.subscribe_limits_events(2) # Max of 2 events
224
-
225
- # Create two limits change events
226
- pi.limits.state = :GREEN
227
- cts.limits_change_callback(pkt, pi, :STALE, 100, true)
228
- pi.limits.state = :YELLOW
229
- cts.limits_change_callback(pkt, pi, :GREEN, 100, true)
250
+ begin
251
+ pkt = Packet.new("TGT","PKT")
252
+ pi = PacketItem.new("TEST", 0, 32, :UINT, :BIG_ENDIAN, nil)
253
+ id = CmdTlmServer.subscribe_limits_events(2) # Max of 2 events
230
254
 
231
- # Pull off one
232
- type,data = CmdTlmServer.get_limits_event(id)
255
+ # Create two limits change events
256
+ pi.limits.state = :GREEN
257
+ cts.limits_change_callback(pkt, pi, :STALE, 100, true)
258
+ pi.limits.state = :YELLOW
259
+ cts.limits_change_callback(pkt, pi, :GREEN, 100, true)
233
260
 
234
- # Add two more to put us over the limit
235
- cts.limits_change_callback(pkt, pi, :GREEN, 100, true)
236
- cts.limits_change_callback(pkt, pi, :GREEN, 100, true)
261
+ # Pull off one
262
+ type,data = CmdTlmServer.get_limits_event(id)
237
263
 
238
- # Try to pull off one
239
- expect { CmdTlmServer.get_limits_event(id) }.to raise_error("Limits event queue with id #{id} not found")
264
+ # Add two more to put us over the limit
265
+ cts.limits_change_callback(pkt, pi, :GREEN, 100, true)
266
+ cts.limits_change_callback(pkt, pi, :GREEN, 100, true)
240
267
 
241
- cts.stop
242
- sleep 0.2
268
+ # Try to pull off one
269
+ expect { CmdTlmServer.get_limits_event(id) }.to raise_error("Limits event queue with id #{id} not found")
270
+ ensure
271
+ cts.stop
272
+ sleep 0.2
273
+ end
243
274
  end
244
275
  end
245
276
 
246
277
  describe "self.unsubscribe_limits_events" do
247
278
  it "unsubscribes to limits events" do
279
+ allow(System).to receive_message_chain(:telemetry,:stale).and_return([])
280
+ allow(System).to receive_message_chain(:telemetry,:limits_change_callback=)
281
+ allow(System).to receive_message_chain(:telemetry,:check_stale)
248
282
  cts = CmdTlmServer.new
249
- pkt = Packet.new("TGT","PKT")
250
- pi = PacketItem.new("TEST", 0, 32, :UINT, :BIG_ENDIAN, nil)
251
- id = CmdTlmServer.subscribe_limits_events()
252
-
253
- # Create two limits change events
254
- pi.limits.state = :GREEN
255
- cts.limits_change_callback(pkt, pi, :STALE, 100, true)
256
- pi.limits.state = :YELLOW
257
- cts.limits_change_callback(pkt, pi, :GREEN, 100, true)
283
+ begin
284
+ pkt = Packet.new("TGT","PKT")
285
+ pi = PacketItem.new("TEST", 0, 32, :UINT, :BIG_ENDIAN, nil)
286
+ id = CmdTlmServer.subscribe_limits_events()
258
287
 
259
- # Get one
260
- type,data = CmdTlmServer.get_limits_event(id)
288
+ # Create two limits change events
289
+ pi.limits.state = :GREEN
290
+ cts.limits_change_callback(pkt, pi, :STALE, 100, true)
291
+ pi.limits.state = :YELLOW
292
+ cts.limits_change_callback(pkt, pi, :GREEN, 100, true)
261
293
 
262
- # Unsubscribe and try to get the other one
263
- CmdTlmServer.unsubscribe_limits_events(id)
264
- expect { CmdTlmServer.get_limits_event(id) }.to raise_error("Limits event queue with id #{id} not found")
294
+ # Get one
295
+ type,data = CmdTlmServer.get_limits_event(id)
265
296
 
266
- cts.stop
267
- sleep 0.2
297
+ # Unsubscribe and try to get the other one
298
+ CmdTlmServer.unsubscribe_limits_events(id)
299
+ expect { CmdTlmServer.get_limits_event(id) }.to raise_error("Limits event queue with id #{id} not found")
300
+ ensure
301
+ cts.stop
302
+ sleep 0.2
303
+ end
268
304
  end
269
305
  end
270
306
 
271
307
  describe "self.subscribe_packet_data" do
272
308
  it "rejects bad queue sizes" do
273
- expect{ CmdTlmServer.subscribe_packet_data([["COSMOS","VERSION"]], true) }.to raise_error(ArgumentError)
309
+ expect{ CmdTlmServer.subscribe_packet_data([["SYSTEM","LIMITS_CHANGE"]], true) }.to raise_error(ArgumentError)
274
310
  end
275
311
 
276
312
  it "subscribes to packets" do
277
- version = System.telemetry.packet("COSMOS","VERSION")
278
- allow_any_instance_of(Interface).to receive(:read) do
279
- sleep 0.05
280
- version
281
- end
282
-
283
313
  cts = CmdTlmServer.new
284
- id = CmdTlmServer.subscribe_packet_data([["COSMOS","VERSION"]])
314
+ id = CmdTlmServer.subscribe_packet_data([["SYSTEM","LIMITS_CHANGE"]])
285
315
 
286
- # Get and check the packet
287
- begin
288
- buffer,tgt,pkt,tv_sec,tv_usec,cnt = CmdTlmServer.get_packet_data(id, true)
289
- expect(buffer).not_to be_nil
290
- expect(tgt).to eql "COSMOS"
291
- expect(pkt).to eql "VERSION"
292
- expect(tv_sec).to be > 0
293
- expect(tv_usec).to be > 0
294
- expect(cnt).to eql 1
295
- rescue => err
296
- sleep 0.1
297
- retry
298
- end
316
+ limits_change = System.telemetry.packet("SYSTEM","LIMITS_CHANGE")
317
+ # Manually set the received_count since we're going to directly call
318
+ # post_packet without going through the normal processing chain
319
+ limits_change.received_count = 1
320
+ cts.post_packet(limits_change)
321
+ limits_change.received_count = 2
322
+ cts.post_packet(limits_change)
299
323
 
300
- sleep 0.1
324
+ # Get and check the packet
325
+ buffer,tgt,pkt,tv_sec,tv_usec,cnt = CmdTlmServer.get_packet_data(id, true)
326
+ expect(buffer).not_to be_nil
327
+ expect(tgt).to eql "SYSTEM"
328
+ expect(pkt).to eql "LIMITS_CHANGE"
329
+ expect(tv_sec).to be > 0
330
+ expect(tv_usec).to be > 0
331
+ expect(cnt).to eql 1
301
332
 
302
333
  # Get and check the second one
303
- begin
304
- buffer,tgt,pkt,tv_sec,tv_usec,cnt = CmdTlmServer.get_packet_data(id, true)
305
- expect(buffer).not_to be_nil
306
- expect(tgt).to eql "COSMOS"
307
- expect(pkt).to eql "VERSION"
308
- expect(tv_sec).to be > 0
309
- expect(tv_usec).to be > 0
310
- expect(cnt).to eql 2
311
- rescue
312
- sleep 0.1
313
- retry
314
- end
334
+ buffer,tgt,pkt,tv_sec,tv_usec,cnt = CmdTlmServer.get_packet_data(id, true)
335
+ expect(buffer).not_to be_nil
336
+ expect(tgt).to eql "SYSTEM"
337
+ expect(pkt).to eql "LIMITS_CHANGE"
338
+ expect(tv_sec).to be > 0
339
+ expect(tv_usec).to be > 0
340
+ expect(cnt).to eql 2
315
341
 
316
342
  cts.stop
317
343
  sleep 0.2
318
344
  end
319
345
 
320
346
  it "deletes queues after the max packets is reached" do
321
- version = System.telemetry.packet("COSMOS","VERSION")
322
- allow_any_instance_of(Interface).to receive(:read) do
323
- sleep 0.1
324
- version
325
- end
326
-
327
347
  cts = CmdTlmServer.new
328
- id = CmdTlmServer.subscribe_packet_data([["COSMOS","VERSION"]], 2)
348
+ id = CmdTlmServer.subscribe_packet_data([["SYSTEM","LIMITS_CHANGE"]], 2)
349
+ limits_change = System.telemetry.packet("SYSTEM","LIMITS_CHANGE")
350
+ # Manually set the received_count since we're going to directly call
351
+ # post_packet without going through the normal processing chain
352
+ limits_change.received_count = 1
353
+ cts.post_packet(limits_change)
329
354
 
330
355
  # Get and check the packet
331
- begin
332
- buffer,tgt,pkt,tv_sec,tv_usec,cnt = CmdTlmServer.get_packet_data(id, true)
333
- expect(buffer).not_to be_nil
334
- expect(tgt).to eql "COSMOS"
335
- expect(pkt).to eql "VERSION"
336
- expect(tv_sec).to be > 0
337
-
338
- expect(tv_usec).to be > 0
339
- expect(cnt).to be > 0
340
- rescue
341
- sleep 0.1
342
- retry
343
- end
356
+ buffer,tgt,pkt,tv_sec,tv_usec,cnt = CmdTlmServer.get_packet_data(id, true)
357
+ expect(buffer).not_to be_nil
358
+ expect(tgt).to eql "SYSTEM"
359
+ expect(pkt).to eql "LIMITS_CHANGE"
360
+ expect(tv_sec).to be > 0
361
+ expect(tv_usec).to be > 0
362
+ expect(cnt).to eql 1
344
363
 
345
- # Allow the interface read to fill the queue
346
- sleep 0.4
364
+ # Fill the queue
365
+ 1001.times { cts.post_packet(limits_change) }
347
366
 
348
367
  # Try to get another packet
349
368
  expect { CmdTlmServer.get_packet_data(id) }.to raise_error("Packet data queue with id #{id} not found")
@@ -355,33 +374,27 @@ module Cosmos
355
374
 
356
375
  describe "self.unsubscribe_packet_data" do
357
376
  it "unsubscribes to packets" do
358
- version = System.telemetry.packet("COSMOS","VERSION")
359
- allow_any_instance_of(Interface).to receive(:read) do
360
- sleep 0.05
361
- version
362
- end
363
-
364
377
  cts = CmdTlmServer.new
365
- id = CmdTlmServer.subscribe_packet_data([["COSMOS","VERSION"]], 2)
378
+ id = CmdTlmServer.subscribe_packet_data([["SYSTEM","LIMITS_CHANGE"]], 2)
379
+
380
+ limits_change = System.telemetry.packet("SYSTEM","LIMITS_CHANGE")
381
+ # Manually set the received_count since we're going to directly call
382
+ # post_packet without going through the normal processing chain
383
+ limits_change.received_count = 1
384
+ cts.post_packet(limits_change)
366
385
 
367
386
  # Get and check the packet
368
- begin
369
- buffer,tgt,pkt,tv_sec,tv_usec,cnt = CmdTlmServer.get_packet_data(id, true)
370
- expect(buffer).not_to be_nil
371
- expect(tgt).to eql "COSMOS"
372
- expect(pkt).to eql "VERSION"
373
- expect(tv_sec).to be > 0
374
- expect(tv_usec).to be > 0
375
- expect(cnt).to be > 0
376
- rescue => err
377
- sleep 0.1
378
- retry
379
- end
387
+ buffer,tgt,pkt,tv_sec,tv_usec,cnt = CmdTlmServer.get_packet_data(id, true)
388
+ expect(buffer).not_to be_nil
389
+ expect(tgt).to eql "SYSTEM"
390
+ expect(pkt).to eql "LIMITS_CHANGE"
391
+ expect(tv_sec).to be > 0
392
+ expect(tv_usec).to be > 0
393
+ expect(cnt).to eql 1
380
394
 
381
- # Unsubscribe and try to get another packet
382
395
  CmdTlmServer.unsubscribe_packet_data(id)
396
+ cts.post_packet(limits_change)
383
397
  expect { CmdTlmServer.get_packet_data(id) }.to raise_error("Packet data queue with id #{id} not found")
384
-
385
398
  cts.stop
386
399
  sleep 0.2
387
400
  end
@@ -390,7 +403,7 @@ module Cosmos
390
403
  describe "self.get_packet_data" do
391
404
  it "raises an error if the queue is empty and non_block" do
392
405
  cts = CmdTlmServer.new
393
- id = CmdTlmServer.subscribe_packet_data([["COSMOS","VERSION"]])
406
+ id = CmdTlmServer.subscribe_packet_data([["SYSTEM","LIMITS_CHANGE"]])
394
407
 
395
408
  expect { CmdTlmServer.get_packet_data(id, true) }.to raise_error(ThreadError)
396
409
  cts.stop
@@ -401,19 +414,18 @@ module Cosmos
401
414
  describe "self.clear_counters" do
402
415
  it "clears all counters" do
403
416
  cts = CmdTlmServer.new
404
- expect(System).to receive(:clear_counters)
405
- expect(CmdTlmServer.interfaces).to receive(:clear_counters)
406
- expect(CmdTlmServer.routers).to receive(:clear_counters)
407
- CmdTlmServer.json_drb.request_count = 100
408
-
409
- CmdTlmServer.clear_counters
410
-
411
- expect(CmdTlmServer.json_drb.request_count).to eql 0
412
- cts.stop
413
- sleep 0.2
417
+ begin
418
+ expect(System).to receive(:clear_counters)
419
+ expect(CmdTlmServer.interfaces).to receive(:clear_counters)
420
+ expect(CmdTlmServer.routers).to receive(:clear_counters)
421
+ CmdTlmServer.json_drb.request_count = 100
422
+ CmdTlmServer.clear_counters
423
+ expect(CmdTlmServer.json_drb.request_count).to eql 0
424
+ ensure
425
+ cts.stop
426
+ sleep 0.2
427
+ end
414
428
  end
415
429
  end
416
-
417
430
  end
418
431
  end
419
-