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
@@ -1,32 +0,0 @@
1
- # encoding: ascii-8bit
2
-
3
- # Copyright 2014 Ball Aerospace & Technologies Corp.
4
- # All Rights Reserved.
5
- #
6
- # This program is free software; you can modify and/or redistribute it
7
- # under the terms of the GNU General Public License
8
- # as published by the Free Software Foundation; version 3 with
9
- # attribution addendums as found in the LICENSE.txt
10
-
11
- require 'spec_helper'
12
- require 'cosmos/streams/burst_stream_protocol'
13
-
14
- module Cosmos
15
-
16
- describe BurstStreamProtocol do
17
-
18
- describe "initialize" do
19
- it "initializes attributes" do
20
- bsp = BurstStreamProtocol.new
21
- expect(bsp.bytes_read).to eql 0
22
- expect(bsp.bytes_written).to eql 0
23
- expect(bsp.interface).to be_nil
24
- expect(bsp.stream).to be_nil
25
- expect(bsp.post_read_data_callback).to be_nil
26
- expect(bsp.post_read_packet_callback).to be_nil
27
- expect(bsp.pre_write_packet_callback).to be_nil
28
- end
29
- end
30
- end
31
- end
32
-
@@ -1,113 +0,0 @@
1
- # encoding: ascii-8bit
2
-
3
- # Copyright 2014 Ball Aerospace & Technologies Corp.
4
- # All Rights Reserved.
5
- #
6
- # This program is free software; you can modify and/or redistribute it
7
- # under the terms of the GNU General Public License
8
- # as published by the Free Software Foundation; version 3 with
9
- # attribution addendums as found in the LICENSE.txt
10
-
11
- require 'spec_helper'
12
- require 'cosmos/streams/fixed_stream_protocol'
13
- require 'cosmos/interfaces/interface'
14
- require 'cosmos/streams/stream'
15
-
16
- module Cosmos
17
-
18
- class MyInterface < Interface; end
19
-
20
- describe FixedStreamProtocol do
21
- before(:each) do
22
- @fsp = FixedStreamProtocol.new(1)
23
- end
24
-
25
- after(:each) do
26
- clean_config()
27
- end
28
-
29
- describe "initialize" do
30
- it "initializes attributes" do
31
- expect(@fsp.bytes_read).to eql 0
32
- expect(@fsp.bytes_written).to eql 0
33
- expect(@fsp.interface).to be_nil
34
- expect(@fsp.stream).to be_nil
35
- expect(@fsp.post_read_data_callback).to be_nil
36
- expect(@fsp.post_read_packet_callback).to be_nil
37
- expect(@fsp.pre_write_packet_callback).to be_nil
38
- end
39
- end
40
-
41
- describe "read" do
42
- it "complains if no interface set" do
43
- class MyStream < Stream
44
- def connect; end
45
- def connected?; true; end
46
- def read; "\x01\x02\x03\x04"; end
47
- end
48
- stream = MyStream.new
49
- @fsp.connect(stream)
50
- expect { @fsp.read }.to raise_error(/Interface required/)
51
- end
52
-
53
- it "reads telemetry data from the stream" do
54
- class MyStream < Stream
55
- def connect; end
56
- def connected?; true; end
57
- def read; "\x01\x02"; end
58
- end
59
- stream = MyStream.new
60
- @fsp.connect(stream)
61
- interface = MyInterface.new
62
- interface.target_names = %w(TEST COSMOS)
63
- @fsp.interface = interface
64
- packet = @fsp.read
65
- expect(packet.received_time.to_f).to be_within(0.1).of(Time.now.to_f)
66
- expect(packet.target_name).to eql 'COSMOS'
67
- expect(packet.packet_name).to eql 'VERSION'
68
- packet = @fsp.read
69
- expect(packet.received_time.to_f).to be_within(0.1).of(Time.now.to_f)
70
- expect(packet.target_name).to eql 'COSMOS'
71
- expect(packet.packet_name).to eql 'LIMITS_CHANGE'
72
- packet = @fsp.read
73
- expect(packet.received_time.to_f).to be_within(0.1).of(Time.now.to_f)
74
- expect(packet.target_name).to eql 'COSMOS'
75
- expect(packet.packet_name).to eql 'VERSION'
76
- packet = @fsp.read
77
- expect(packet.received_time.to_f).to be_within(0.1).of(Time.now.to_f)
78
- expect(packet.target_name).to eql 'COSMOS'
79
- expect(packet.packet_name).to eql 'LIMITS_CHANGE'
80
- end
81
-
82
- it "reads command data from the stream" do
83
- @fsp = FixedStreamProtocol.new(8, 0, '0x1ACFFC1D', false)
84
-
85
- $index = 0
86
- class MyStream < Stream
87
- def connect; end
88
- def connected?; true; end
89
- def read
90
- case $index
91
- when 0
92
- $index += 1
93
- "\x1A\xCF\xFC\x1D\x00\x00\x00\x02"
94
- else
95
- "\x00\x00\x00\x00\x00\x00\x00\x00"
96
- end
97
- end
98
- end
99
- stream = MyStream.new
100
- @fsp.connect(stream)
101
- interface = MyInterface.new
102
- interface.target_names = %w(TEST COSMOS)
103
- @fsp.interface = interface
104
- packet = @fsp.read
105
- expect(packet.received_time.to_f).to be_within(0.01).of(Time.now.to_f)
106
- expect(packet.target_name).to eql 'COSMOS'
107
- expect(packet.packet_name).to eql 'STARTLOGGING'
108
- end
109
- end
110
-
111
- end
112
- end
113
-
@@ -1,300 +0,0 @@
1
- # encoding: ascii-8bit
2
-
3
- # Copyright 2014 Ball Aerospace & Technologies Corp.
4
- # All Rights Reserved.
5
- #
6
- # This program is free software; you can modify and/or redistribute it
7
- # under the terms of the GNU General Public License
8
- # as published by the Free Software Foundation; version 3 with
9
- # attribution addendums as found in the LICENSE.txt
10
-
11
- require 'spec_helper'
12
- require 'cosmos/streams/length_stream_protocol'
13
- require 'cosmos/interfaces/interface'
14
- require 'cosmos/streams/stream'
15
-
16
- module Cosmos
17
-
18
- describe LengthStreamProtocol do
19
- describe "initialize" do
20
- it "initializes attributes" do
21
- lsp = LengthStreamProtocol.new(1)
22
- expect(lsp.bytes_read).to eql 0
23
- expect(lsp.bytes_written).to eql 0
24
- expect(lsp.interface).to be_nil
25
- expect(lsp.stream).to be_nil
26
- expect(lsp.post_read_data_callback).to be_nil
27
- expect(lsp.post_read_packet_callback).to be_nil
28
- expect(lsp.pre_write_packet_callback).to be_nil
29
- end
30
- end
31
-
32
- describe "read" do
33
- it "reads BIG_ENDIAN length fields from the stream" do
34
- class MyStream < Stream
35
- def connect; end
36
- def connected?; true; end
37
- def read
38
- case $index
39
- when 0
40
- $index += 1
41
- $buffer1
42
- when 1
43
- $buffer2
44
- end
45
- end
46
- end
47
- stream = MyStream.new
48
-
49
- lsp = LengthStreamProtocol.new(16, # bit offset
50
- 16, # bit size
51
- 1, # length offset
52
- 1, # bytes per count
53
- 'BIG_ENDIAN')
54
- lsp.connect(stream)
55
- $index = 0
56
- $buffer1 = "\x00\x01\x00\x05"
57
- $buffer2 = "\x03\x04"
58
- packet = lsp.read
59
- expect(packet.buffer.length).to eql 6
60
-
61
- lsp = LengthStreamProtocol.new(16, # bit offset
62
- 16, # bit size
63
- 1, # length offset
64
- 2, # bytes per count
65
- 'BIG_ENDIAN')
66
- lsp.connect(stream)
67
- $index = 0
68
- $buffer1 = "\x00\x01\x00\x05"
69
- $buffer2 = "\x03\x04\x05\x06\x07\x08\x09"
70
- packet = lsp.read
71
- expect(packet.buffer.length).to eql 11
72
-
73
- lsp = LengthStreamProtocol.new(19, # bit offset
74
- 5, # bit size
75
- 0, # length offset
76
- 1, # bytes per count
77
- 'BIG_ENDIAN')
78
- lsp.connect(stream)
79
- $index = 0
80
- $buffer1 = "\x00\x01\x05"
81
- $buffer2 = "\x03\x04"
82
- packet = lsp.read
83
- expect(packet.buffer.length).to eql 5
84
-
85
- lsp = LengthStreamProtocol.new(16, # bit offset
86
- 16, # bit size
87
- 1, # length offset
88
- 1, # bytes per count
89
- 'BIG_ENDIAN',
90
- 0,
91
- nil,
92
- 50)
93
- lsp.connect(stream)
94
- $index = 0
95
- $buffer1 = "\x00\x01\xFF\xFF"
96
- $buffer2 = "\x03\x04"
97
- expect { packet = lsp.read }.to raise_error(RuntimeError, "Length value received larger than max_length: 65535 > 50")
98
- end
99
-
100
- it "reads LITTLE_ENDIAN length fields from the stream" do
101
- class MyStream < Stream
102
- def connect; end
103
- def connected?; true; end
104
- def read
105
- case $index
106
- when 0
107
- $index += 1
108
- $buffer1
109
- when 1
110
- $buffer2
111
- end
112
- end
113
- end
114
- stream = MyStream.new
115
-
116
- lsp = LengthStreamProtocol.new(16, # bit offset
117
- 16, # bit size
118
- 1, # length offset
119
- 1, # bytes per count
120
- 'LITTLE_ENDIAN')
121
- lsp.connect(stream)
122
- $index = 0
123
- $buffer1 = "\x00\x01\x05\x00"
124
- $buffer2 = "\x03\x04"
125
- packet = lsp.read
126
- expect(packet.buffer.length).to eql 6
127
-
128
- lsp = LengthStreamProtocol.new(16, # bit offset
129
- 16, # bit size
130
- 1, # length offset
131
- 2, # bytes per count
132
- 'LITTLE_ENDIAN')
133
- lsp.connect(stream)
134
- $index = 0
135
- $buffer1 = "\x00\x01\x05\x00"
136
- $buffer2 = "\x03\x04\x05\x06\x07\x08\x09"
137
- packet = lsp.read
138
- expect(packet.buffer.length).to eql 11
139
-
140
- lsp = LengthStreamProtocol.new(19, # bit offset
141
- 5, # bit size
142
- 0, # length offset
143
- 1, # bytes per count
144
- 'LITTLE_ENDIAN')
145
- lsp.connect(stream)
146
- $index = 0
147
- $buffer1 = "\x00\x01\x05"
148
- $buffer2 = "\x03\x04"
149
- packet = lsp.read
150
- expect(packet.buffer.length).to eql 5
151
-
152
- lsp = LengthStreamProtocol.new(16, # bit offset
153
- 16, # bit size
154
- 1, # length offset
155
- 1, # bytes per count
156
- 'LITTLE_ENDIAN',
157
- 0,
158
- nil,
159
- 239)
160
- lsp.connect(stream)
161
- $index = 0
162
- $buffer1 = "\x00\x01\xF0\x00"
163
- $buffer2 = "\x03\x04"
164
- expect { packet = lsp.read }.to raise_error(RuntimeError, "Length value received larger than max_length: 240 > 239")
165
- end
166
- end
167
-
168
- describe "write" do
169
- it "fills the length field and sync pattern if told to" do
170
- class MyStream < Stream
171
- def connect; end
172
- @@written_data = nil
173
- def self.written_data
174
- @@written_data
175
- end
176
- def connected?; true; end
177
- def write(data)
178
- @@written_data = data
179
- end
180
- end
181
- stream = MyStream.new
182
-
183
- lsp = LengthStreamProtocol.new(32, # bit offset
184
- 16, # bit size
185
- 6, # length offset
186
- 2, # bytes per count
187
- 'BIG_ENDIAN',
188
- 0, # discard no leading bytes
189
- "BA5EBA11",
190
- nil,
191
- true)
192
-
193
- lsp.connect(stream)
194
- packet = Packet.new(nil, nil)
195
- packet.buffer = "\x01\x02\x03\x04"
196
- # 4 bytes are not enough since we expect the length field at offset 32
197
- expect { lsp.write(packet) }.to raise_error(ArgumentError, /buffer insufficient/)
198
-
199
- lsp = LengthStreamProtocol.new(32, # bit offset
200
- 16, # bit size
201
- 6, # length offset
202
- 2, # bytes per count
203
- 'BIG_ENDIAN',
204
- 2, # discard 2 leading bytes
205
- "BA5EBA11",
206
- nil,
207
- true)
208
-
209
- lsp.connect(stream)
210
- packet = Packet.new(nil, nil)
211
- # The packet buffer contains data
212
- packet.buffer = "\x01\x02\x03\x04"
213
- lsp.write(packet)
214
- # Since we discarded 2 leading bytes, they are put back in the final stream data
215
- # with the sync word and then then length is set to 0
216
- expect(MyStream.written_data).to eql("\xBA\x5E\xBA\x11\x00\x00")
217
- expect(packet.buffer).to eql("\x01\x02\x00\x00")
218
-
219
- lsp = LengthStreamProtocol.new(32, # bit offset
220
- 16, # bit size
221
- 6, # length offset
222
- 2, # bytes per count
223
- 'BIG_ENDIAN',
224
- 4, # discard 4 leading bytes
225
- "BA5EBA11",
226
- nil,
227
- true)
228
-
229
- lsp.connect(stream)
230
- packet = Packet.new(nil, nil)
231
- # The packet buffer contains data
232
- packet.buffer = "\x01\x02\x03\x04"
233
- lsp.write(packet)
234
- # Since we discarded 4 leading bytes, they are put back in the final stream data
235
- # with the sync word and then then length is set to 1 followed by the
236
- # last two bytes in the buffer. The \x01\x02 get written over by the length.
237
- expect(MyStream.written_data).to eql("\xBA\x5E\xBA\x11\x00\x01\x03\x04")
238
- expect(packet.buffer).to eql("\x00\x01\x03\x04")
239
-
240
- lsp = LengthStreamProtocol.new(32, # bit offset
241
- 16, # bit size
242
- 6, # length offset
243
- 2, # bytes per count
244
- 'BIG_ENDIAN',
245
- 6, # discard 6 leading bytes (sync and length)
246
- "BA5EBA11",
247
- nil,
248
- true)
249
-
250
- lsp.connect(stream)
251
- packet = Packet.new(nil, nil)
252
- # The packet buffer contains only the data
253
- packet.buffer = "\x01\x02\x03\x04"
254
- lsp.write(packet)
255
- # Since we discarded 6 leading bytes, they are put back in the final stream data
256
- # with the sync word and then then length is set to 2 followed by the buffer data.
257
- expect(MyStream.written_data).to eql("\xBA\x5E\xBA\x11\x00\x02\x01\x02\x03\x04")
258
- expect(packet.buffer).to eql("\x01\x02\x03\x04")
259
-
260
- lsp = LengthStreamProtocol.new(64, # bit offset
261
- 32, # bit size
262
- 12, # length offset
263
- 1, # bytes per count
264
- 'BIG_ENDIAN',
265
- 8, # discard 8 leading bytes (sync)
266
- "BA5EBA11CAFEBABE",
267
- nil,
268
- true)
269
- lsp.connect(stream)
270
- packet = Packet.new(nil, nil)
271
- # The packet buffer contains the length field which is overwritten by the write call
272
- packet.buffer = "\x00\x00\x00\x00\x01\x02\x03\x04"
273
- lsp.write(packet)
274
- # Since we discarded 8 leading bytes, they are put back in the final stream data
275
- expect(MyStream.written_data).to eql("\xBA\x5E\xBA\x11\xCA\xFE\xBA\xBE\x00\x00\x00\x04\x01\x02\x03\x04")
276
- expect(packet.buffer).to eql("\x00\x00\x00\x04\x01\x02\x03\x04")
277
-
278
- lsp = LengthStreamProtocol.new(64, # bit offset
279
- 32, # bit size
280
- 12, # length offset
281
- 1, # bytes per count
282
- 'BIG_ENDIAN',
283
- 0, # discard no leading bytes
284
- "BA5EBA11CAFEBABE",
285
- nil,
286
- true)
287
- lsp.connect(stream)
288
- packet = Packet.new(nil, nil)
289
- # The packet buffer contains the sync and length fields which are overwritten by the write call
290
- packet.buffer = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x02\x03\x04"
291
- lsp.write(packet)
292
- # Since we discarded 0 leading bytes, they are simply written over by the write call
293
- expect(MyStream.written_data).to eql("\xBA\x5E\xBA\x11\xCA\xFE\xBA\xBE\x00\x00\x00\x04\x01\x02\x03\x04")
294
- expect(packet.buffer).to eql("\xBA\x5E\xBA\x11\xCA\xFE\xBA\xBE\x00\x00\x00\x04\x01\x02\x03\x04")
295
- end
296
- end
297
-
298
- end
299
- end
300
-
@@ -1,121 +0,0 @@
1
- # encoding: ascii-8bit
2
-
3
- # Copyright 2014 Ball Aerospace & Technologies Corp.
4
- # All Rights Reserved.
5
- #
6
- # This program is free software; you can modify and/or redistribute it
7
- # under the terms of the GNU General Public License
8
- # as published by the Free Software Foundation; version 3 with
9
- # attribution addendums as found in the LICENSE.txt
10
-
11
- require 'spec_helper'
12
- require 'cosmos/streams/preidentified_stream_protocol'
13
- require 'cosmos/interfaces/interface'
14
- require 'cosmos/streams/stream'
15
-
16
- module Cosmos
17
-
18
- class MyInterface < Interface; end
19
-
20
- describe PreidentifiedStreamProtocol do
21
- before(:each) do
22
- @psp = PreidentifiedStreamProtocol.new
23
- end
24
-
25
- after(:all) do
26
- clean_config()
27
- end
28
-
29
- it "handles receiving a bad packet length" do
30
- @psp = PreidentifiedStreamProtocol.new(nil, 5)
31
- pkt = System.telemetry.packet("COSMOS","VERSION")
32
- class MyStream < Stream
33
- def connect; end
34
- def connected?; true; end
35
- def read; $buffer; end
36
- def write(data); $buffer = data; end
37
- end
38
- stream = MyStream.new
39
- @psp.connect(stream)
40
- time = Time.new(2020,1,31,12,15,30.5)
41
- pkt.received_time = time
42
- @psp.write(pkt)
43
- expect { packet = @psp.read }.to raise_error(RuntimeError)
44
- end
45
-
46
- describe "initialize" do
47
- it "initializes attributes" do
48
- expect(@psp.bytes_read).to eql 0
49
- expect(@psp.bytes_written).to eql 0
50
- expect(@psp.interface).to be_nil
51
- expect(@psp.stream).to be_nil
52
- expect(@psp.post_read_data_callback).to be_nil
53
- expect(@psp.post_read_packet_callback).to be_nil
54
- expect(@psp.pre_write_packet_callback).to be_nil
55
- end
56
- end
57
-
58
- describe "write" do
59
- it "creates a packet header" do
60
- pkt = System.telemetry.packet("COSMOS","VERSION")
61
- class MyStream < Stream
62
- def connect; end
63
- def connected?; true; end
64
- def read; $buffer; end
65
- def write(data); $buffer = data; end
66
- end
67
- stream = MyStream.new
68
- @psp.connect(stream)
69
- time = Time.new(2020,1,31,12,15,30.5)
70
- pkt.received_time = time
71
- @psp.write(pkt)
72
- expect($buffer[0..3].unpack('N')[0]).to eql time.to_f.to_i
73
- expect($buffer[4..7].unpack('N')[0]).to eql 500000
74
- offset = 8
75
- tgt_name_length = $buffer[offset].unpack('C')[0]
76
- offset += 1 # for the length field
77
- expect($buffer[offset...(offset+tgt_name_length)]).to eql 'COSMOS'
78
- offset += tgt_name_length
79
- pkt_name_length = $buffer[offset].unpack('C')[0]
80
- offset += 1 # for the length field
81
- expect($buffer[offset...(offset+pkt_name_length)]).to eql 'VERSION'
82
- offset += pkt_name_length
83
- expect($buffer[offset..(offset+3)].unpack('N')[0]).to eql pkt.buffer.length
84
- offset += 4
85
- expect($buffer[offset..-1]).to eql pkt.buffer
86
- end
87
- end
88
-
89
- describe "read" do
90
- it "returns a packet" do
91
- pkt = System.telemetry.packet("COSMOS","VERSION")
92
- pkt.write("PKT_ID", 1)
93
- pkt.write("COSMOS", "TEST")
94
- class MyStream < Stream
95
- def connect; end
96
- def connected?; true; end
97
- def read; $buffer; end
98
- def write(data); $buffer = data; end
99
- end
100
- stream = MyStream.new
101
- @psp.connect(stream)
102
- time = Time.new(2020,1,31,12,15,30.5)
103
- pkt.received_time = time
104
- @psp.write(pkt)
105
- packet = @psp.read
106
- expect(packet.target_name).to eql 'COSMOS'
107
- expect(packet.packet_name).to eql 'VERSION'
108
- expect(packet.identified?).to be true
109
- expect(packet.defined?).to be false
110
-
111
- pkt2 = System.telemetry.update!("COSMOS","VERSION",packet.buffer)
112
- expect(pkt2.read('PKT_ID')).to eql 1
113
- expect(pkt2.read('COSMOS')).to eql 'TEST'
114
- expect(pkt2.identified?).to be true
115
- expect(pkt2.defined?).to be true
116
- end
117
- end
118
-
119
- end
120
- end
121
-