cosmos 4.2.4-java → 4.5.0-java

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 (458) hide show
  1. checksums.yaml +4 -4
  2. data/.dockerignore +2 -0
  3. data/.github/ISSUE_TEMPLATE/bug_report.md +30 -0
  4. data/.github/ISSUE_TEMPLATE/feature_request.md +19 -0
  5. data/.github/ISSUE_TEMPLATE/help---usage---general-question.md +12 -0
  6. data/.gitignore +2 -0
  7. data/.travis.yml +6 -6
  8. data/Dockerfile +69 -0
  9. data/Gemfile +1 -1
  10. data/Manifest.txt +130 -46
  11. data/README.md +9 -0
  12. data/Rakefile +57 -0
  13. data/appveyor.yml +18 -7
  14. data/autohotkey/config/targets/INST/cmd_tlm/inst_cmds.txt +1 -1
  15. data/autohotkey/config/targets/INST/cmd_tlm/inst_tlm.txt +5 -5
  16. data/autohotkey/config/targets/INST/lib/sim_inst.rb +3 -1
  17. data/autohotkey/config/tools/cmd_sequence/cmd_sequence.txt +2 -0
  18. data/autohotkey/config/tools/handbook_creator/assets/css/bootstrap-theme.css +397 -0
  19. data/autohotkey/config/tools/handbook_creator/assets/css/bootstrap-theme.min.css +7 -0
  20. data/autohotkey/config/tools/handbook_creator/assets/css/bootstrap.css +7118 -0
  21. data/autohotkey/config/tools/handbook_creator/assets/css/bootstrap.min.css +7 -0
  22. data/autohotkey/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.eot +0 -0
  23. data/autohotkey/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.svg +229 -0
  24. data/autohotkey/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
  25. data/autohotkey/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.woff +0 -0
  26. data/autohotkey/config/tools/handbook_creator/assets/js/bootstrap.js +2006 -0
  27. data/autohotkey/config/tools/handbook_creator/assets/js/bootstrap.min.js +7 -0
  28. data/autohotkey/config/tools/table_manager/ConfigTables_def.txt +2 -4
  29. data/autohotkey/config/tools/table_manager/SubTables/OneDimensionalSubTable_def.txt +31 -0
  30. data/autohotkey/config/tools/table_manager/SubTables/TwoDimensionalSubTable_def.txt +28 -0
  31. data/autohotkey/config/tools/test_runner/test_runner.txt +1 -1
  32. data/autohotkey/config/tools/test_runner/test_runner2.txt +1 -1
  33. data/autohotkey/config/tools/test_runner/test_runner3.txt +1 -1
  34. data/autohotkey/config/tools/test_runner/test_runner4.txt +1 -1
  35. data/autohotkey/lib/cmd_sequence_exporter.rb +52 -0
  36. data/autohotkey/procedures/collect.rb +2 -2
  37. data/autohotkey/procedures/collect_util.rb +1 -1
  38. data/autohotkey/procedures/script_test.rb +1 -1
  39. data/autohotkey/tools/CmdSenderAHK2 +18 -0
  40. data/autohotkey/tools/cmd_sender.ahk +34 -6
  41. data/autohotkey/tools/cmd_sender2.ahk +4 -0
  42. data/autohotkey/tools/cmd_sequence.ahk +36 -22
  43. data/autohotkey/tools/cmd_sequence2.ahk +1 -1
  44. data/autohotkey/tools/config_editor.ahk +5 -5
  45. data/autohotkey/tools/launcher.ahk +1 -0
  46. data/autohotkey/tools/limits_monitor.ahk +1 -1
  47. data/autohotkey/tools/packet_viewer.ahk +7 -6
  48. data/autohotkey/tools/script_runner.ahk +16 -4
  49. data/autohotkey/tools/test_runner.ahk +8 -8
  50. data/bin/cosmos +38 -1
  51. data/bin/cstol_converter +1 -1
  52. data/bin/dart_util +0 -0
  53. data/bin/rubysloc +73 -28
  54. data/bin/xtce_converter +1 -1
  55. data/cosmos.gemspec +7 -9
  56. data/data/config/_interfaces.yaml +4 -0
  57. data/data/config/cmd_sequence.yaml +14 -0
  58. data/data/config/command_modifiers.yaml +16 -1
  59. data/data/config/housekeeping_params.yaml +14 -0
  60. data/data/config/interface_modifiers.yaml +14 -2
  61. data/data/config/item_modifiers.yaml +11 -1
  62. data/data/config/launcher.yaml +12 -2
  63. data/data/config/param_item_modifiers.yaml +7 -2
  64. data/data/config/parameter_modifiers.yaml +20 -0
  65. data/data/config/screen.yaml +2 -0
  66. data/data/config/script_runner.yaml +9 -0
  67. data/data/config/system.yaml +152 -28
  68. data/data/config/table_manager.yaml +7 -0
  69. data/data/config/target.yaml +12 -0
  70. data/data/config/telemetry_modifiers.yaml +19 -2
  71. data/data/config/test_runner.yaml +10 -9
  72. data/data/config/widgets.yaml +174 -11
  73. data/data/crc.txt +428 -415
  74. data/demo/Gemfile +1 -1
  75. data/demo/Launcher.bat +1 -9
  76. data/demo/Launcher2.bat +1 -0
  77. data/demo/LauncherMini.bat +1 -0
  78. data/demo/Rakefile +2 -0
  79. data/demo/config/dart/Gemfile +2 -7
  80. data/demo/config/data/crc.txt +243 -219
  81. data/demo/config/system/system.txt +42 -3
  82. data/demo/config/system/system2.txt +34 -5
  83. data/demo/config/system/system_alt_ports.txt +80 -0
  84. data/demo/config/targets/EXAMPLE/cmd_tlm_server.txt +1 -0
  85. data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +5 -4
  86. data/demo/config/targets/INST/cmd_tlm/inst_tlm.txt +12 -7
  87. data/demo/config/targets/INST/cmd_tlm/inst_tlm_override.txt +12 -0
  88. data/demo/config/targets/INST/cmd_tlm_server.txt +2 -0
  89. data/demo/config/targets/INST/lib/sim_inst.rb +15 -3
  90. data/demo/config/targets/INST/screens/adcs.txt +2 -2
  91. data/demo/config/targets/INST/screens/block.txt +1 -1
  92. data/demo/config/targets/INST/screens/commanding.txt +1 -1
  93. data/demo/config/targets/INST/screens/ground.txt +27 -5
  94. data/demo/config/targets/INST/screens/ground_error.gif +0 -0
  95. data/demo/config/{data/groundoff.gif → targets/INST/screens/ground_off.gif} +0 -0
  96. data/demo/config/{data/groundon.gif → targets/INST/screens/ground_on.gif} +0 -0
  97. data/demo/config/targets/INST/screens/limits.txt +69 -31
  98. data/demo/config/targets/INST/screens/other.txt +13 -3
  99. data/demo/config/targets/INST/screens/params.txt +54 -0
  100. data/demo/config/targets/INST/screens/satellite.gif +0 -0
  101. data/demo/config/targets/INST/target.txt +1 -0
  102. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server_chain.txt +18 -0
  103. data/demo/config/tools/data_viewer/data_viewer.txt +3 -0
  104. data/demo/config/tools/handbook_creator/assets/css/bootstrap-theme.css +397 -0
  105. data/demo/config/tools/handbook_creator/assets/css/bootstrap-theme.min.css +7 -0
  106. data/demo/config/tools/handbook_creator/assets/css/bootstrap.css +7118 -0
  107. data/demo/config/tools/handbook_creator/assets/css/bootstrap.min.css +7 -0
  108. data/demo/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.eot +0 -0
  109. data/demo/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.svg +229 -0
  110. data/demo/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
  111. data/demo/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.woff +0 -0
  112. data/demo/config/tools/handbook_creator/assets/img/ball_logo.bmp +0 -0
  113. data/demo/config/tools/handbook_creator/assets/img/ball_logo.gif +0 -0
  114. data/demo/config/tools/handbook_creator/assets/img/ball_logo.jpg +0 -0
  115. data/demo/config/tools/handbook_creator/assets/js/bootstrap.js +2006 -0
  116. data/demo/config/tools/handbook_creator/assets/js/bootstrap.min.js +7 -0
  117. data/demo/config/tools/handbook_creator/assets/js/html5shiv.js +8 -0
  118. data/demo/config/tools/handbook_creator/assets/js/jquery-1.10.2.min.js +6 -0
  119. data/demo/config/tools/handbook_creator/assets/js/respond.min.js +6 -0
  120. data/demo/config/tools/handbook_creator/default_toc.xsl +59 -59
  121. data/demo/config/tools/script_runner/script_runner.txt +1 -2
  122. data/demo/config/tools/test_runner/test_runner.txt +3 -1
  123. data/demo/lib/example_background_task.rb +1 -0
  124. data/demo/procedures/cosmos_api_test.rb +26 -22
  125. data/demo/procedures/interactive.rb +22 -0
  126. data/demo/procedures/local_screen_example.rb +51 -0
  127. data/ext/cosmos/ext/cosmos_io/cosmos_io.c +32 -4
  128. data/ext/cosmos/ext/packet/packet.c +6 -77
  129. data/ext/mkrf_conf.rb +2 -2
  130. data/extensions/vscode/.gitignore +4 -0
  131. data/extensions/vscode/.vscode/launch.json +32 -0
  132. data/extensions/vscode/.vscode/settings.json +13 -0
  133. data/extensions/vscode/.vscode/tasks.json +79 -0
  134. data/extensions/vscode/License.txt +879 -0
  135. data/extensions/vscode/README.md +9 -0
  136. data/extensions/vscode/client/License.txt +879 -0
  137. data/extensions/vscode/client/README.md +39 -0
  138. data/extensions/vscode/client/cosmos.configuration.json +23 -0
  139. data/extensions/vscode/client/images/icon.png +0 -0
  140. data/extensions/vscode/client/package-lock.json +414 -0
  141. data/extensions/vscode/client/package.json +105 -0
  142. data/extensions/vscode/client/src/extension.ts +132 -0
  143. data/extensions/vscode/client/src/screen_preview.rb +25 -0
  144. data/extensions/vscode/client/syntaxes/cosmos.tmLanguage.json +219 -0
  145. data/extensions/vscode/client/tsconfig.json +17 -0
  146. data/extensions/vscode/package-lock.json +26 -0
  147. data/extensions/vscode/package.json +35 -0
  148. data/extensions/vscode/server/License.txt +879 -0
  149. data/extensions/vscode/server/package-lock.json +236 -0
  150. data/extensions/vscode/server/package.json +29 -0
  151. data/extensions/vscode/server/src/server.ts +59 -0
  152. data/extensions/vscode/server/tsconfig.json +16 -0
  153. data/install/Gemfile +1 -1
  154. data/install/Launcher.bat +1 -9
  155. data/install/config/dart/Gemfile +3 -8
  156. data/install/config/data/crc.txt +148 -132
  157. data/install/config/system/system.txt +36 -3
  158. data/install/config/tools/handbook_creator/assets/css/bootstrap-theme.css +397 -0
  159. data/install/config/tools/handbook_creator/assets/css/bootstrap-theme.min.css +7 -0
  160. data/install/config/tools/handbook_creator/assets/css/bootstrap.css +7118 -0
  161. data/install/config/tools/handbook_creator/assets/css/bootstrap.min.css +7 -0
  162. data/install/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.eot +0 -0
  163. data/install/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.svg +229 -0
  164. data/install/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
  165. data/install/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.woff +0 -0
  166. data/install/config/tools/handbook_creator/assets/img/ball_logo.bmp +0 -0
  167. data/install/config/tools/handbook_creator/assets/img/ball_logo.gif +0 -0
  168. data/install/config/tools/handbook_creator/assets/img/ball_logo.jpg +0 -0
  169. data/install/config/tools/handbook_creator/assets/js/bootstrap.js +2006 -0
  170. data/install/config/tools/handbook_creator/assets/js/bootstrap.min.js +7 -0
  171. data/install/config/tools/handbook_creator/assets/js/html5shiv.js +8 -0
  172. data/install/config/tools/handbook_creator/assets/js/jquery-1.10.2.min.js +6 -0
  173. data/install/config/tools/handbook_creator/assets/js/respond.min.js +6 -0
  174. data/install/config/tools/handbook_creator/default_toc.xsl +59 -59
  175. data/lib/cosmos/config/config_parser.rb +4 -5
  176. data/lib/cosmos/conversions.rb +2 -0
  177. data/lib/cosmos/conversions/packet_time_formatted_conversion.rb +38 -0
  178. data/lib/cosmos/conversions/packet_time_seconds_conversion.rb +38 -0
  179. data/lib/cosmos/core_ext/cosmos_io.rb +2 -1
  180. data/lib/cosmos/core_ext/time.rb +3 -1
  181. data/lib/cosmos/dart/config/boot.rb +1 -1
  182. data/lib/cosmos/dart/config/database.yml +2 -0
  183. data/lib/cosmos/dart/examples/dart_decom_client.rb +1 -1
  184. data/lib/cosmos/dart/examples/dart_stream_client.rb +6 -2
  185. data/lib/cosmos/dart/lib/dart_common.rb +13 -6
  186. data/lib/cosmos/dart/lib/dart_constants.rb +15 -0
  187. data/lib/cosmos/dart/lib/dart_database_cleaner.rb +2 -2
  188. data/lib/cosmos/dart/lib/dart_decom_query.rb +5 -6
  189. data/lib/cosmos/dart/lib/dart_decommutator.rb +64 -54
  190. data/lib/cosmos/dart/lib/dart_importer.rb +3 -3
  191. data/lib/cosmos/dart/lib/dart_master_query.rb +71 -0
  192. data/lib/cosmos/dart/lib/dart_packet_log_writer.rb +2 -2
  193. data/lib/cosmos/dart/lib/dart_reducer_worker_thread.rb +165 -134
  194. data/lib/cosmos/dart/processes/dart.rb +4 -2
  195. data/lib/cosmos/dart/processes/dart_decom_server.rb +3 -3
  196. data/lib/cosmos/dart/processes/dart_ingester.rb +40 -1
  197. data/lib/cosmos/dart/processes/dart_master.rb +44 -0
  198. data/lib/cosmos/dart/processes/dart_util.rb +119 -4
  199. data/lib/cosmos/dart/spec/dart/dart_reducer_manager_spec.rb +3 -3
  200. data/lib/cosmos/gui/dialogs/cmd_tlm_raw_dialog.rb +9 -5
  201. data/lib/cosmos/gui/dialogs/details_dialog.rb +44 -29
  202. data/lib/cosmos/gui/dialogs/exception_list_dialog.rb +1 -1
  203. data/lib/cosmos/gui/dialogs/find_replace_dialog.rb +3 -3
  204. data/lib/cosmos/gui/dialogs/interface_raw_dialog.rb +2 -2
  205. data/lib/cosmos/gui/dialogs/set_tlm_dialog.rb +1 -1
  206. data/lib/cosmos/gui/dialogs/tlm_details_dialog.rb +11 -10
  207. data/lib/cosmos/gui/dialogs/tlm_graph_dialog.rb +4 -2
  208. data/lib/cosmos/gui/opengl/earth_model.rb +1 -1
  209. data/lib/cosmos/gui/qt.rb +13 -2
  210. data/lib/cosmos/gui/qt_tool.rb +71 -43
  211. data/lib/cosmos/gui/text/ruby_editor.rb +91 -49
  212. data/lib/cosmos/gui/utilities/classification_banner.rb +60 -0
  213. data/lib/cosmos/gui/utilities/screenshot.rb +1 -1
  214. data/lib/cosmos/gui/utilities/script_module_gui.rb +117 -91
  215. data/lib/cosmos/gui/widgets/dart_meta_frame.rb +22 -3
  216. data/lib/cosmos/interfaces.rb +2 -0
  217. data/lib/cosmos/interfaces/dart_status_interface.rb +1 -1
  218. data/lib/cosmos/interfaces/interface.rb +9 -1
  219. data/lib/cosmos/interfaces/linc_interface.rb +3 -3
  220. data/lib/cosmos/interfaces/protocols/burst_protocol.rb +1 -1
  221. data/lib/cosmos/interfaces/protocols/crc_protocol.rb +1 -1
  222. data/lib/cosmos/interfaces/protocols/fixed_protocol.rb +40 -18
  223. data/lib/cosmos/interfaces/protocols/ignore_packet_protocol.rb +46 -0
  224. data/lib/cosmos/interfaces/protocols/length_protocol.rb +5 -0
  225. data/lib/cosmos/interfaces/protocols/preidentified_protocol.rb +68 -23
  226. data/lib/cosmos/interfaces/protocols/template_protocol.rb +9 -4
  227. data/lib/cosmos/interfaces/serial_interface.rb +7 -1
  228. data/lib/cosmos/interfaces/simulated_target_interface.rb +14 -5
  229. data/lib/cosmos/interfaces/stream_interface.rb +1 -1
  230. data/lib/cosmos/interfaces/tcpip_server_interface.rb +13 -13
  231. data/lib/cosmos/io/json_drb.rb +16 -12
  232. data/lib/cosmos/io/json_drb_object.rb +7 -2
  233. data/lib/cosmos/io/json_drb_rack.rb +25 -5
  234. data/lib/cosmos/io/json_rpc.rb +1 -1
  235. data/lib/cosmos/io/posix_serial_driver.rb +60 -22
  236. data/lib/cosmos/io/serial_driver.rb +11 -8
  237. data/lib/cosmos/io/win32_serial_driver.rb +31 -3
  238. data/lib/cosmos/packet_logs/packet_log_reader.rb +71 -28
  239. data/lib/cosmos/packet_logs/packet_log_writer.rb +13 -1
  240. data/lib/cosmos/packets/commands.rb +30 -9
  241. data/lib/cosmos/packets/packet.rb +105 -34
  242. data/lib/cosmos/packets/packet_config.rb +60 -10
  243. data/lib/cosmos/packets/parsers/format_string_parser.rb +0 -1
  244. data/lib/cosmos/packets/parsers/state_parser.rb +0 -1
  245. data/lib/cosmos/packets/parsers/xtce_converter.rb +2 -0
  246. data/lib/cosmos/packets/parsers/xtce_parser.rb +5 -4
  247. data/lib/cosmos/packets/structure.rb +32 -4
  248. data/lib/cosmos/packets/structure_item.rb +5 -1
  249. data/lib/cosmos/packets/telemetry.rb +30 -4
  250. data/lib/cosmos/script/api_shared.rb +22 -10
  251. data/lib/cosmos/script/extract.rb +1 -1
  252. data/lib/cosmos/script/limits.rb +4 -0
  253. data/lib/cosmos/script/script.rb +29 -20
  254. data/lib/cosmos/script/scripting.rb +16 -14
  255. data/lib/cosmos/script/telemetry.rb +3 -1
  256. data/lib/cosmos/script/tools.rb +18 -8
  257. data/lib/cosmos/streams/serial_stream.rb +11 -6
  258. data/lib/cosmos/system/system.rb +214 -76
  259. data/lib/cosmos/system/target.rb +39 -9
  260. data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +116 -55
  261. data/lib/cosmos/tools/cmd_sender/cmd_param_table_item_delegate.rb +15 -0
  262. data/lib/cosmos/tools/cmd_sender/cmd_params.rb +382 -0
  263. data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +54 -340
  264. data/lib/cosmos/tools/cmd_sequence/cmd_sequence.rb +74 -52
  265. data/lib/cosmos/tools/cmd_sequence/sequence_item.rb +40 -333
  266. data/lib/cosmos/tools/cmd_sequence/sequence_list.rb +16 -11
  267. data/lib/cosmos/tools/cmd_tlm_server/api.rb +13 -0
  268. data/lib/cosmos/tools/cmd_tlm_server/background_tasks.rb +2 -0
  269. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +44 -15
  270. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +8 -1
  271. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +18 -20
  272. data/lib/cosmos/tools/cmd_tlm_server/commanding.rb +13 -2
  273. data/lib/cosmos/tools/cmd_tlm_server/gui/interfaces_tab.rb +2 -2
  274. data/lib/cosmos/tools/cmd_tlm_server/gui/logging_tab.rb +13 -13
  275. data/lib/cosmos/tools/cmd_tlm_server/gui/packets_tab.rb +9 -6
  276. data/lib/cosmos/tools/cmd_tlm_server/gui/status_tab.rb +8 -8
  277. data/lib/cosmos/tools/cmd_tlm_server/gui/targets_tab.rb +5 -5
  278. data/lib/cosmos/tools/cmd_tlm_server/interface_thread.rb +35 -20
  279. data/lib/cosmos/tools/cmd_tlm_server/replay_backend.rb +15 -11
  280. data/lib/cosmos/tools/cmd_tlm_server/router_thread.rb +5 -0
  281. data/lib/cosmos/tools/cmd_tlm_server/routers.rb +2 -0
  282. data/lib/cosmos/tools/config_editor/config_editor.rb +181 -94
  283. data/lib/cosmos/tools/config_editor/config_editor_frame.rb +10 -9
  284. data/lib/cosmos/tools/config_editor/system_config_dialog.rb +158 -0
  285. data/lib/cosmos/tools/data_viewer/data_viewer.rb +57 -47
  286. data/lib/cosmos/tools/data_viewer/data_viewer_component.rb +1 -0
  287. data/lib/cosmos/tools/data_viewer/dump_component.rb +3 -9
  288. data/lib/cosmos/tools/data_viewer/text_component.rb +77 -0
  289. data/lib/cosmos/tools/handbook_creator/handbook_creator.rb +68 -42
  290. data/lib/cosmos/tools/handbook_creator/handbook_creator_config.rb +1 -1
  291. data/lib/cosmos/tools/launcher/launcher.rb +2 -1
  292. data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +59 -41
  293. data/lib/cosmos/tools/opengl_builder/opengl_builder.rb +42 -42
  294. data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +64 -59
  295. data/lib/cosmos/tools/script_runner/script_runner.rb +198 -123
  296. data/lib/cosmos/tools/script_runner/script_runner_config.rb +14 -0
  297. data/lib/cosmos/tools/script_runner/script_runner_frame.rb +87 -35
  298. data/lib/cosmos/tools/table_manager/table_config.rb +5 -3
  299. data/lib/cosmos/tools/table_manager/table_manager.rb +48 -45
  300. data/lib/cosmos/tools/test_runner/test.rb +5 -2
  301. data/lib/cosmos/tools/test_runner/test_runner.rb +61 -38
  302. data/lib/cosmos/tools/test_runner/test_runner_chooser.rb +24 -12
  303. data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +48 -48
  304. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_config.rb +5 -8
  305. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_processor.rb +20 -16
  306. data/lib/cosmos/tools/tlm_grapher/data_object_adders/xy_data_object_adder.rb +3 -3
  307. data/lib/cosmos/tools/tlm_grapher/data_object_editors/housekeeping_data_object_editor.rb +7 -7
  308. data/lib/cosmos/tools/tlm_grapher/data_object_editors/xy_data_object_editor.rb +10 -10
  309. data/lib/cosmos/tools/tlm_grapher/data_objects/housekeeping_data_object.rb +10 -3
  310. data/lib/cosmos/tools/tlm_grapher/data_objects/xy_data_object.rb +6 -6
  311. data/lib/cosmos/tools/tlm_grapher/tabbed_plots/overview_tabbed_plots.rb +14 -14
  312. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_dart_thread.rb +21 -17
  313. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_realtime_thread.rb +5 -8
  314. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tool.rb +94 -91
  315. data/lib/cosmos/tools/tlm_grapher/tlm_grapher.rb +27 -26
  316. data/lib/cosmos/tools/tlm_viewer/screen.rb +76 -14
  317. data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +51 -34
  318. data/lib/cosmos/tools/tlm_viewer/widgets.rb +3 -0
  319. data/lib/cosmos/tools/tlm_viewer/widgets/aging_widget.rb +4 -5
  320. data/lib/cosmos/tools/tlm_viewer/widgets/array_widget.rb +3 -4
  321. data/lib/cosmos/tools/tlm_viewer/widgets/block_widget.rb +4 -5
  322. data/lib/cosmos/tools/tlm_viewer/widgets/canvas_clickable.rb +16 -2
  323. data/lib/cosmos/tools/tlm_viewer/widgets/canvas_widget.rb +17 -3
  324. data/lib/cosmos/tools/tlm_viewer/widgets/canvasdot_widget.rb +1 -2
  325. data/lib/cosmos/tools/tlm_viewer/widgets/canvasellipse_widget.rb +40 -0
  326. data/lib/cosmos/tools/tlm_viewer/widgets/canvasimage_widget.rb +12 -7
  327. data/lib/cosmos/tools/tlm_viewer/widgets/canvasimagevalue_widget.rb +79 -29
  328. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabel_widget.rb +1 -0
  329. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabelvalue_widget.rb +2 -1
  330. data/lib/cosmos/tools/tlm_viewer/widgets/canvasline_widget.rb +2 -0
  331. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslinevalue_widget.rb +4 -0
  332. data/lib/cosmos/tools/tlm_viewer/widgets/canvasvalue_widget.rb +33 -25
  333. data/lib/cosmos/tools/tlm_viewer/widgets/checkbutton_widget.rb +5 -3
  334. data/lib/cosmos/tools/tlm_viewer/widgets/combobox_widget.rb +5 -3
  335. data/lib/cosmos/tools/tlm_viewer/widgets/formatfontvalue_widget.rb +1 -1
  336. data/lib/cosmos/tools/tlm_viewer/widgets/formatvalue_widget.rb +4 -7
  337. data/lib/cosmos/tools/tlm_viewer/widgets/horizontal_widget.rb +5 -5
  338. data/lib/cosmos/tools/tlm_viewer/widgets/horizontalbox_widget.rb +6 -7
  339. data/lib/cosmos/tools/tlm_viewer/widgets/horizontalline_widget.rb +2 -4
  340. data/lib/cosmos/tools/tlm_viewer/widgets/label_widget.rb +10 -8
  341. data/lib/cosmos/tools/tlm_viewer/widgets/labelformatvalue_widget.rb +2 -3
  342. data/lib/cosmos/tools/tlm_viewer/widgets/labelled_widget.rb +58 -0
  343. data/lib/cosmos/tools/tlm_viewer/widgets/labelprogressbar_widget.rb +3 -4
  344. data/lib/cosmos/tools/tlm_viewer/widgets/labeltrendlimitsbar_widget.rb +2 -4
  345. data/lib/cosmos/tools/tlm_viewer/widgets/labelvalue_widget.rb +2 -1
  346. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluedesc_widget.rb +3 -5
  347. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluelimitsbar_widget.rb +2 -3
  348. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluelimitscolumn_widget.rb +2 -3
  349. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluerangebar_widget.rb +2 -3
  350. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluerangecolumn_widget.rb +2 -3
  351. data/lib/cosmos/tools/tlm_viewer/widgets/layout_widget.rb +3 -5
  352. data/lib/cosmos/tools/tlm_viewer/widgets/led_widget.rb +108 -0
  353. data/lib/cosmos/tools/tlm_viewer/widgets/limits_widget.rb +60 -10
  354. data/lib/cosmos/tools/tlm_viewer/widgets/limitsbar_widget.rb +22 -8
  355. data/lib/cosmos/tools/tlm_viewer/widgets/limitscolor_widget.rb +19 -13
  356. data/lib/cosmos/tools/tlm_viewer/widgets/limitscolumn_widget.rb +22 -8
  357. data/lib/cosmos/tools/tlm_viewer/widgets/linegraph_widget.rb +2 -3
  358. data/lib/cosmos/tools/tlm_viewer/widgets/matrixbycolumns_widget.rb +4 -3
  359. data/lib/cosmos/tools/tlm_viewer/widgets/multi_widget.rb +1 -3
  360. data/lib/cosmos/tools/tlm_viewer/widgets/progressbar_widget.rb +10 -5
  361. data/lib/cosmos/tools/tlm_viewer/widgets/radiobutton_widget.rb +7 -4
  362. data/lib/cosmos/tools/tlm_viewer/widgets/rangebar_widget.rb +4 -6
  363. data/lib/cosmos/tools/tlm_viewer/widgets/rangecolumn_widget.rb +3 -5
  364. data/lib/cosmos/tools/tlm_viewer/widgets/screenshotbutton_widget.rb +4 -3
  365. data/lib/cosmos/tools/tlm_viewer/widgets/scrollwindow_widget.rb +2 -3
  366. data/lib/cosmos/tools/tlm_viewer/widgets/sectionheader_widget.rb +2 -3
  367. data/lib/cosmos/tools/tlm_viewer/widgets/spacer_widget.rb +4 -6
  368. data/lib/cosmos/tools/tlm_viewer/widgets/tabbook_widget.rb +2 -3
  369. data/lib/cosmos/tools/tlm_viewer/widgets/tabitem_widget.rb +2 -3
  370. data/lib/cosmos/tools/tlm_viewer/widgets/textbox_widget.rb +13 -4
  371. data/lib/cosmos/tools/tlm_viewer/widgets/textfield_widget.rb +3 -4
  372. data/lib/cosmos/tools/tlm_viewer/widgets/timegraph_widget.rb +3 -8
  373. data/lib/cosmos/tools/tlm_viewer/widgets/title_widget.rb +6 -12
  374. data/lib/cosmos/tools/tlm_viewer/widgets/trendbar_widget.rb +5 -10
  375. data/lib/cosmos/tools/tlm_viewer/widgets/trendlimitsbar_widget.rb +5 -3
  376. data/lib/cosmos/tools/tlm_viewer/widgets/value_widget.rb +4 -4
  377. data/lib/cosmos/tools/tlm_viewer/widgets/valuelimitsbar_widget.rb +2 -3
  378. data/lib/cosmos/tools/tlm_viewer/widgets/valuelimitscolumn_widget.rb +2 -3
  379. data/lib/cosmos/tools/tlm_viewer/widgets/valuerangebar_widget.rb +3 -4
  380. data/lib/cosmos/tools/tlm_viewer/widgets/valuerangecolumn_widget.rb +2 -3
  381. data/lib/cosmos/tools/tlm_viewer/widgets/vertical_widget.rb +8 -7
  382. data/lib/cosmos/tools/tlm_viewer/widgets/verticalbox_widget.rb +9 -7
  383. data/lib/cosmos/tools/tlm_viewer/widgets/widget.rb +60 -47
  384. data/lib/cosmos/top_level.rb +37 -13
  385. data/lib/cosmos/utilities/ruby_lex_utils.rb +34 -30
  386. data/lib/cosmos/version.rb +5 -5
  387. data/lib/cosmos/win32/excel.rb +81 -24
  388. data/make_gems.sh +10 -0
  389. data/run_gui_tests.bat +1 -0
  390. data/spec/conversions/packet_time_formatted_conversion_spec.rb +58 -0
  391. data/spec/conversions/packet_time_seconds_conversion_spec.rb +60 -0
  392. data/spec/core_ext/socket_spec.rb +1 -1
  393. data/spec/core_ext/time_spec.rb +4 -0
  394. data/spec/gui/utilities/script_module_gui_spec.rb +44 -63
  395. data/spec/install/config/targets/INST/cmd_tlm/inst_cmds.txt +1 -1
  396. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm.txt +5 -5
  397. data/spec/install/yaml_docs_spec.rb +132 -0
  398. data/spec/interfaces/linc_interface_spec.rb +1 -1
  399. data/spec/interfaces/protocols/fixed_protocol_spec.rb +20 -9
  400. data/spec/interfaces/protocols/ignore_packet_protocol_spec.rb +243 -0
  401. data/spec/interfaces/protocols/length_protocol_spec.rb +39 -0
  402. data/spec/interfaces/protocols/preidentified_protocol_spec.rb +227 -4
  403. data/spec/interfaces/protocols/template_protocol_spec.rb +78 -25
  404. data/spec/io/json_drb_rack_spec.rb +166 -0
  405. data/spec/io/json_drb_spec.rb +14 -0
  406. data/spec/io/json_rpc_spec.rb +4 -5
  407. data/spec/io/posix_serial_driver_spec.rb +81 -0
  408. data/spec/io/serial_driver_spec.rb +15 -13
  409. data/spec/io/win32_serial_driver_spec.rb +33 -3
  410. data/spec/packet_logs/packet_log_reader_spec.rb +106 -52
  411. data/spec/packets/commands_spec.rb +22 -0
  412. data/spec/packets/packet_config_spec.rb +29 -16
  413. data/spec/packets/packet_item_spec.rb +2 -2
  414. data/spec/packets/packet_spec.rb +39 -6
  415. data/spec/packets/parsers/format_string_parser_spec.rb +0 -11
  416. data/spec/packets/parsers/macro_parser_spec.rb +36 -36
  417. data/spec/packets/parsers/state_parser_spec.rb +69 -11
  418. data/spec/packets/structure_spec.rb +93 -2
  419. data/spec/packets/telemetry_spec.rb +63 -10
  420. data/spec/script/extract_spec.rb +4 -1
  421. data/spec/script/script_spec.rb +2 -3
  422. data/spec/script/scripting_spec.rb +2 -1
  423. data/spec/script/tools_spec.rb +0 -1
  424. data/spec/streams/tcpip_socket_stream_spec.rb +32 -27
  425. data/spec/system/system_spec.rb +187 -4
  426. data/spec/system/target_spec.rb +62 -1
  427. data/spec/tools/cmd_tlm_server/api_spec.rb +29 -21
  428. data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +15 -7
  429. data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +33 -0
  430. data/spec/tools/cmd_tlm_server/commanding_spec.rb +25 -1
  431. data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +15 -0
  432. data/spec/tools/cmd_tlm_server/router_thread_spec.rb +2 -3
  433. data/spec/top_level/top_level_spec.rb +29 -5
  434. data/spec/utilities/message_log_spec.rb +6 -3
  435. data/tasks/gemfile_stats.rake +38 -14
  436. data/test/performance/config/system/system.txt +0 -0
  437. data/test/performance/config/targets/PACKET/cmd_tlm/packet_tlm.txt +5 -5
  438. data/test/performance/config/tools/handbook_creator/assets/css/bootstrap-theme.css +397 -0
  439. data/test/performance/config/tools/handbook_creator/assets/css/bootstrap-theme.min.css +7 -0
  440. data/test/performance/config/tools/handbook_creator/assets/css/bootstrap.css +7118 -0
  441. data/test/performance/config/tools/handbook_creator/assets/css/bootstrap.min.css +7 -0
  442. data/test/performance/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.eot +0 -0
  443. data/test/performance/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.svg +229 -0
  444. data/test/performance/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
  445. data/test/performance/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.woff +0 -0
  446. data/test/performance/config/tools/handbook_creator/assets/img/ball_logo.bmp +0 -0
  447. data/test/performance/config/tools/handbook_creator/assets/img/ball_logo.gif +0 -0
  448. data/test/performance/config/tools/handbook_creator/assets/img/ball_logo.jpg +0 -0
  449. data/test/performance/config/tools/handbook_creator/assets/js/bootstrap.js +2006 -0
  450. data/test/performance/config/tools/handbook_creator/assets/js/bootstrap.min.js +7 -0
  451. data/test/performance/config/tools/handbook_creator/assets/js/html5shiv.js +8 -0
  452. data/test/performance/config/tools/handbook_creator/assets/js/jquery-1.10.2.min.js +6 -0
  453. data/test/performance/config/tools/handbook_creator/assets/js/respond.min.js +6 -0
  454. data/test/performance/config/tools/test_runner/test_runner.txt +1 -1
  455. data/test/performance/procedures/cosmos_api_test.rb +1 -1
  456. data/test/performance/tools/identify_performance.rb +82 -0
  457. metadata +146 -62
  458. data/lib/cosmos/dart/Gemfile +0 -69
@@ -160,6 +160,45 @@ module Cosmos
160
160
  expect(packet.buffer.length).to eql 5
161
161
  end
162
162
 
163
+ it "raises an error with a packet length of 0" do
164
+ @interface.instance_variable_set(:@stream, LengthStream.new)
165
+ @interface.add_protocol(LengthProtocol, [
166
+ 16, # bit offset
167
+ 16, # bit size
168
+ 0, # length offset
169
+ 1, # bytes per count
170
+ 'BIG_ENDIAN'], :READ_WRITE)
171
+ $buffer = "\x00\x01\x00\x00\x03\x04\x05\x06\x07\x08\x09"
172
+ expect { @interface.read }.to raise_error(RuntimeError, /Calculated packet length of 0 bits/)
173
+ end
174
+
175
+ it "raises an error if packet length not enough to support offset and size" do
176
+ @interface.instance_variable_set(:@stream, LengthStream.new)
177
+ @interface.add_protocol(LengthProtocol, [
178
+ 16, # bit offset
179
+ 16, # bit size
180
+ 3, # length offset of 3 not enough to support 2 byte length field at offset 2 bytes
181
+ 1, # bytes per count
182
+ 'BIG_ENDIAN'], :READ_WRITE)
183
+ $buffer = "\x00\x01\x00\x00\x03\x04\x05\x06\x07\x08\x09"
184
+ expect { @interface.read }.to raise_error(RuntimeError, /Calculated packet length of 24 bits/)
185
+ end
186
+
187
+ it "processes a 0 length with a non-zero length offset" do
188
+ @interface.instance_variable_set(:@stream, LengthStream.new)
189
+ @interface.add_protocol(LengthProtocol, [
190
+ 0, # bit offset
191
+ 16, # bit size
192
+ 4, # length offset
193
+ 1, # bytes per count
194
+ 'BIG_ENDIAN'], :READ_WRITE)
195
+ $buffer = "\x00\x00\x01\x02\x00\x00\x03\x04"
196
+ packet = @interface.read
197
+ expect(packet.buffer).to eql "\x00\x00\x01\x02"
198
+ packet = @interface.read
199
+ expect(packet.buffer).to eql "\x00\x00\x03\x04"
200
+ end
201
+
163
202
  it "validates length against the maximum length" do
164
203
  @interface.instance_variable_set(:@stream, LengthStream.new)
165
204
  @interface.add_protocol(LengthProtocol, [
@@ -56,6 +56,229 @@ module Cosmos
56
56
  time = Time.new(2020,1,31,12,15,30.5)
57
57
  pkt.received_time = time
58
58
  @interface.write(pkt)
59
+ expect($buffer[0..0].unpack('C')[0]).to eql 0
60
+ expect($buffer[1..4].unpack('N')[0]).to eql time.to_f.to_i
61
+ expect($buffer[5..8].unpack('N')[0]).to eql 500000
62
+ offset = 9
63
+ tgt_name_length = $buffer[offset].unpack('C')[0]
64
+ offset += 1 # for the length field
65
+ expect($buffer[offset...(offset+tgt_name_length)]).to eql 'SYSTEM'
66
+ offset += tgt_name_length
67
+ pkt_name_length = $buffer[offset].unpack('C')[0]
68
+ offset += 1 # for the length field
69
+ expect($buffer[offset...(offset+pkt_name_length)]).to eql 'META'
70
+ offset += pkt_name_length
71
+ expect($buffer[offset..(offset+3)].unpack('N')[0]).to eql pkt.buffer.length
72
+ offset += 4
73
+ expect($buffer[offset..-1]).to eql pkt.buffer
74
+ end
75
+
76
+ it "creates a packet header with stored" do
77
+ @interface.instance_variable_set(:@stream, PreStream.new)
78
+ @interface.add_protocol(PreidentifiedProtocol, [nil, 5], :READ_WRITE)
79
+ pkt = System.telemetry.packet("SYSTEM","META").clone
80
+ time = Time.new(2020,1,31,12,15,30.5)
81
+ pkt.received_time = time
82
+ pkt.stored = true
83
+ @interface.write(pkt)
84
+ expect($buffer[0..0].unpack('C')[0]).to eql 0x80
85
+ expect($buffer[1..4].unpack('N')[0]).to eql time.to_f.to_i
86
+ expect($buffer[5..8].unpack('N')[0]).to eql 500000
87
+ offset = 9
88
+ tgt_name_length = $buffer[offset].unpack('C')[0]
89
+ offset += 1 # for the length field
90
+ expect($buffer[offset...(offset+tgt_name_length)]).to eql 'SYSTEM'
91
+ offset += tgt_name_length
92
+ pkt_name_length = $buffer[offset].unpack('C')[0]
93
+ offset += 1 # for the length field
94
+ expect($buffer[offset...(offset+pkt_name_length)]).to eql 'META'
95
+ offset += pkt_name_length
96
+ expect($buffer[offset..(offset+3)].unpack('N')[0]).to eql pkt.buffer.length
97
+ offset += 4
98
+ expect($buffer[offset..-1]).to eql pkt.buffer
99
+ end
100
+
101
+ it "creates a packet header with extra" do
102
+ @interface.instance_variable_set(:@stream, PreStream.new)
103
+ @interface.add_protocol(PreidentifiedProtocol, [nil, 5], :READ_WRITE)
104
+ pkt = System.telemetry.packet("SYSTEM","META").clone
105
+ time = Time.new(2020,1,31,12,15,30.5)
106
+ pkt.received_time = time
107
+ pkt.stored = false
108
+ extra_data = {"vcid" => 2}
109
+ pkt.extra = extra_data
110
+ @interface.write(pkt)
111
+ offset = 0
112
+ expect($buffer[0..0].unpack('C')[0]).to eql 0x40
113
+ json_extra = extra_data.to_json
114
+ offset += 1
115
+ expect($buffer[offset..(offset+3)].unpack('N')[0]).to eql json_extra.length
116
+ offset += 4
117
+ expect($buffer[offset..(offset + json_extra.length - 1)]).to eql json_extra
118
+ offset += json_extra.length
119
+ expect($buffer[offset..(offset + 3)].unpack('N')[0]).to eql time.to_f.to_i
120
+ expect($buffer[(offset + 4)..(offset + 7)].unpack('N')[0]).to eql 500000
121
+ offset = offset += 8 # time fields
122
+ tgt_name_length = $buffer[offset].unpack('C')[0]
123
+ offset += 1 # for the length field
124
+ expect($buffer[offset...(offset+tgt_name_length)]).to eql 'SYSTEM'
125
+ offset += tgt_name_length
126
+ pkt_name_length = $buffer[offset].unpack('C')[0]
127
+ offset += 1 # for the length field
128
+ expect($buffer[offset...(offset+pkt_name_length)]).to eql 'META'
129
+ offset += pkt_name_length
130
+ expect($buffer[offset..(offset+3)].unpack('N')[0]).to eql pkt.buffer.length
131
+ offset += 4
132
+ expect($buffer[offset..-1]).to eql pkt.buffer
133
+ end
134
+
135
+ it "creates a packet header with stored and extra" do
136
+ @interface.instance_variable_set(:@stream, PreStream.new)
137
+ @interface.add_protocol(PreidentifiedProtocol, [nil, 5], :READ_WRITE)
138
+ pkt = System.telemetry.packet("SYSTEM","META").clone
139
+ time = Time.new(2020,1,31,12,15,30.5)
140
+ pkt.received_time = time
141
+ pkt.stored = true
142
+ extra_data = {"vcid" => 2}
143
+ pkt.extra = extra_data
144
+ @interface.write(pkt)
145
+ offset = 0
146
+ expect($buffer[0..0].unpack('C')[0]).to eql 0xC0
147
+ json_extra = extra_data.to_json
148
+ offset += 1
149
+ expect($buffer[offset..(offset+3)].unpack('N')[0]).to eql json_extra.length
150
+ offset += 4
151
+ expect($buffer[offset..(offset + json_extra.length - 1)]).to eql json_extra
152
+ offset += json_extra.length
153
+ expect($buffer[offset..(offset + 3)].unpack('N')[0]).to eql time.to_f.to_i
154
+ expect($buffer[(offset + 4)..(offset + 7)].unpack('N')[0]).to eql 500000
155
+ offset = offset += 8 # time fields
156
+ tgt_name_length = $buffer[offset].unpack('C')[0]
157
+ offset += 1 # for the length field
158
+ expect($buffer[offset...(offset+tgt_name_length)]).to eql 'SYSTEM'
159
+ offset += tgt_name_length
160
+ pkt_name_length = $buffer[offset].unpack('C')[0]
161
+ offset += 1 # for the length field
162
+ expect($buffer[offset...(offset+pkt_name_length)]).to eql 'META'
163
+ offset += pkt_name_length
164
+ expect($buffer[offset..(offset+3)].unpack('N')[0]).to eql pkt.buffer.length
165
+ offset += 4
166
+ expect($buffer[offset..-1]).to eql pkt.buffer
167
+ end
168
+
169
+ it "handles a sync pattern" do
170
+ @interface.instance_variable_set(:@stream, PreStream.new)
171
+ @interface.add_protocol(PreidentifiedProtocol, ["DEAD"], :READ_WRITE)
172
+ pkt = System.telemetry.packet("SYSTEM","META")
173
+ time = Time.new(2020,1,31,12,15,30.5)
174
+ pkt.received_time = time
175
+ @interface.write(pkt)
176
+ expect($buffer[0..1]).to eql("\xDE\xAD")
177
+ expect($buffer[2..2].unpack('C')[0]).to eql 0
178
+ expect($buffer[3..6].unpack('N')[0]).to eql time.to_f.to_i
179
+ expect($buffer[7..10].unpack('N')[0]).to eql 500000
180
+ offset = 11
181
+ tgt_name_length = $buffer[offset].unpack('C')[0]
182
+ offset += 1 # for the length field
183
+ expect($buffer[offset...(offset+tgt_name_length)]).to eql 'SYSTEM'
184
+ offset += tgt_name_length
185
+ pkt_name_length = $buffer[offset].unpack('C')[0]
186
+ offset += 1 # for the length field
187
+ expect($buffer[offset...(offset+pkt_name_length)]).to eql 'META'
188
+ offset += pkt_name_length
189
+ expect($buffer[offset..(offset+3)].unpack('N')[0]).to eql pkt.buffer.length
190
+ offset += 4
191
+ expect($buffer[offset..-1]).to eql pkt.buffer
192
+ end
193
+
194
+ it "handles a sync pattern with stored and extra" do
195
+ @interface.instance_variable_set(:@stream, PreStream.new)
196
+ @interface.add_protocol(PreidentifiedProtocol, ["DEAD", 5], :READ_WRITE)
197
+ pkt = System.telemetry.packet("SYSTEM","META").clone
198
+ time = Time.new(2020,1,31,12,15,30.5)
199
+ pkt.received_time = time
200
+ pkt.stored = true
201
+ extra_data = {"vcid" => 2}
202
+ pkt.extra = extra_data
203
+ @interface.write(pkt)
204
+ expect($buffer[0..1]).to eql("\xDE\xAD")
205
+ offset = 2
206
+ expect($buffer[2..2].unpack('C')[0]).to eql 0xC0
207
+ json_extra = extra_data.to_json
208
+ offset += 1
209
+ expect($buffer[offset..(offset+3)].unpack('N')[0]).to eql json_extra.length
210
+ offset += 4
211
+ expect($buffer[offset..(offset + json_extra.length - 1)]).to eql json_extra
212
+ offset += json_extra.length
213
+ expect($buffer[offset..(offset + 3)].unpack('N')[0]).to eql time.to_f.to_i
214
+ expect($buffer[(offset + 4)..(offset + 7)].unpack('N')[0]).to eql 500000
215
+ offset = offset += 8 # time fields
216
+ tgt_name_length = $buffer[offset].unpack('C')[0]
217
+ offset += 1 # for the length field
218
+ expect($buffer[offset...(offset+tgt_name_length)]).to eql 'SYSTEM'
219
+ offset += tgt_name_length
220
+ pkt_name_length = $buffer[offset].unpack('C')[0]
221
+ offset += 1 # for the length field
222
+ expect($buffer[offset...(offset+pkt_name_length)]).to eql 'META'
223
+ offset += pkt_name_length
224
+ expect($buffer[offset..(offset+3)].unpack('N')[0]).to eql pkt.buffer.length
225
+ offset += 4
226
+ expect($buffer[offset..-1]).to eql pkt.buffer
227
+ end
228
+ end
229
+
230
+ describe "read" do
231
+ it "handles a sync pattern" do
232
+ @interface.instance_variable_set(:@stream, PreStream.new)
233
+ @interface.add_protocol(PreidentifiedProtocol, ["0x1234"], :READ_WRITE)
234
+ pkt = System.telemetry.packet("SYSTEM","META")
235
+ pkt.write("COSMOS_VERSION", "TEST")
236
+ time = Time.new(2020,1,31,12,15,30.5)
237
+ pkt.received_time = time
238
+ @interface.write(pkt)
239
+ expect($buffer[0]).to eql "\x12"
240
+ expect($buffer[1]).to eql "\x34"
241
+ packet = @interface.read
242
+ expect(packet.target_name).to eql 'SYSTEM'
243
+ expect(packet.packet_name).to eql 'META'
244
+ expect(packet.identified?).to be true
245
+ expect(packet.defined?).to be false
246
+
247
+ pkt2 = System.telemetry.update!("SYSTEM","META",packet.buffer)
248
+ expect(pkt2.read('COSMOS_VERSION')).to eql 'TEST'
249
+ expect(pkt2.identified?).to be true
250
+ expect(pkt2.defined?).to be true
251
+ end
252
+
253
+ it "returns a packet" do
254
+ @interface.instance_variable_set(:@stream, PreStream.new)
255
+ @interface.add_protocol(PreidentifiedProtocol, [], :READ_WRITE)
256
+ pkt = System.telemetry.packet("SYSTEM","META")
257
+ pkt.write("COSMOS_VERSION", "TEST")
258
+ time = Time.new(2020,1,31,12,15,30.5)
259
+ pkt.received_time = time
260
+ @interface.write(pkt)
261
+ packet = @interface.read
262
+ expect(packet.target_name).to eql 'SYSTEM'
263
+ expect(packet.packet_name).to eql 'META'
264
+ expect(packet.identified?).to be true
265
+ expect(packet.defined?).to be false
266
+
267
+ pkt2 = System.telemetry.update!("SYSTEM","META",packet.buffer)
268
+ expect(pkt2.read('COSMOS_VERSION')).to eql 'TEST'
269
+ expect(pkt2.identified?).to be true
270
+ expect(pkt2.defined?).to be true
271
+ end
272
+ end
273
+
274
+ describe "write in mode 2" do
275
+ it "creates a packet header" do
276
+ @interface.instance_variable_set(:@stream, PreStream.new)
277
+ @interface.add_protocol(PreidentifiedProtocol, [nil, 5, 2], :READ_WRITE)
278
+ pkt = System.telemetry.packet("SYSTEM","META")
279
+ time = Time.new(2020,1,31,12,15,30.5)
280
+ pkt.received_time = time
281
+ @interface.write(pkt)
59
282
  expect($buffer[0..3].unpack('N')[0]).to eql time.to_f.to_i
60
283
  expect($buffer[4..7].unpack('N')[0]).to eql 500000
61
284
  offset = 8
@@ -74,7 +297,7 @@ module Cosmos
74
297
 
75
298
  it "handles a sync pattern" do
76
299
  @interface.instance_variable_set(:@stream, PreStream.new)
77
- @interface.add_protocol(PreidentifiedProtocol, ["DEAD"], :READ_WRITE)
300
+ @interface.add_protocol(PreidentifiedProtocol, ["DEAD", nil, 2], :READ_WRITE)
78
301
  pkt = System.telemetry.packet("SYSTEM","META")
79
302
  time = Time.new(2020,1,31,12,15,30.5)
80
303
  pkt.received_time = time
@@ -97,10 +320,10 @@ module Cosmos
97
320
  end
98
321
  end
99
322
 
100
- describe "read" do
323
+ describe "read in mode 2" do
101
324
  it "handles a sync pattern" do
102
325
  @interface.instance_variable_set(:@stream, PreStream.new)
103
- @interface.add_protocol(PreidentifiedProtocol, ["0x1234"], :READ_WRITE)
326
+ @interface.add_protocol(PreidentifiedProtocol, ["0x1234", nil, 2], :READ_WRITE)
104
327
  pkt = System.telemetry.packet("SYSTEM","META")
105
328
  pkt.write("COSMOS_VERSION", "TEST")
106
329
  time = Time.new(2020,1,31,12,15,30.5)
@@ -122,7 +345,7 @@ module Cosmos
122
345
 
123
346
  it "returns a packet" do
124
347
  @interface.instance_variable_set(:@stream, PreStream.new)
125
- @interface.add_protocol(PreidentifiedProtocol, [], :READ_WRITE)
348
+ @interface.add_protocol(PreidentifiedProtocol, [nil, nil, 2], :READ_WRITE)
126
349
  pkt = System.telemetry.packet("SYSTEM","META")
127
350
  pkt.write("COSMOS_VERSION", "TEST")
128
351
  time = Time.new(2020,1,31,12,15,30.5)
@@ -28,6 +28,7 @@ module Cosmos
28
28
  before(:each) do
29
29
  @interface = StreamInterface.new
30
30
  allow(@interface).to receive(:connected?) { true }
31
+ $write_buffer = ''
31
32
  $read_buffer = ''
32
33
  $read_cnt = 0
33
34
  end
@@ -173,12 +174,20 @@ module Cosmos
173
174
  end
174
175
 
175
176
  it "processes responses with no ID fields" do
176
- rsp_pkt = Packet.new('TGT', 'READ_VOLTAGE')
177
- rsp_pkt.append_item("VOLTAGE", 16, :UINT)
178
- allow(System).to receive_message_chain(:telemetry, :packet).and_return(rsp_pkt)
177
+ tf = Tempfile.new('unittest')
178
+ tf.puts 'TELEMETRY TGT READ_VOLTAGE BIG_ENDIAN'
179
+ tf.puts ' APPEND_ITEM VOLTAGE 16 UINT'
180
+ tf.close
181
+ pc = PacketConfig.new
182
+ pc.process_file(tf.path, "SYSTEM")
183
+ telemetry = Telemetry.new(pc)
184
+ tf.unlink
185
+
186
+ allow(System).to receive_message_chain(:telemetry).and_return(telemetry)
179
187
  @interface.instance_variable_set(:@stream, TemplateStream.new)
180
188
  @interface.add_protocol(TemplateProtocol, %w(0xABCD 0xABCD 0 nil 1 true 0 nil false nil nil), :READ_WRITE)
181
- @interface.target_names = ['TGT']
189
+ # Add extra target names to the interface to ensure we grab the correct one
190
+ @interface.target_names = ['BLAH','TGT','OTHER']
182
191
  packet = Packet.new('TGT', 'CMD')
183
192
  packet.append_item("VOLTAGE", 16, :UINT)
184
193
  packet.get_item("VOLTAGE").default = 11
@@ -198,13 +207,21 @@ module Cosmos
198
207
  @interface.write(packet)
199
208
  sleep 0.55
200
209
  expect($write_buffer).to eql("SOUR:VOLT 11, (@1)\xAB\xCD")
210
+ expect(read_result.read("VOLTAGE")).to eql(10)
201
211
  end
202
212
 
203
213
  it "sets the response ID to the defined ID value" do
204
- rsp_pkt = Packet.new('TGT', 'READ_VOLTAGE')
205
- rsp_pkt.append_item("PKT_ID", 16, :UINT, nil, :BIG_ENDIAN, :ERROR, nil, nil, nil, 1) # ID == 1
206
- rsp_pkt.append_item("VOLTAGE", 16, :UINT)
207
- allow(System).to receive_message_chain(:telemetry, :packet).and_return(rsp_pkt)
214
+ tf = Tempfile.new('unittest')
215
+ tf.puts 'TELEMETRY TGT READ_VOLTAGE BIG_ENDIAN'
216
+ tf.puts ' APPEND_ID_ITEM PKT_ID 16 UINT 1'
217
+ tf.puts ' APPEND_ITEM VOLTAGE 16 UINT'
218
+ tf.close
219
+ pc = PacketConfig.new
220
+ pc.process_file(tf.path, "SYSTEM")
221
+ telemetry = Telemetry.new(pc)
222
+ tf.unlink
223
+
224
+ allow(System).to receive_message_chain(:telemetry).and_return(telemetry)
208
225
  @interface.instance_variable_set(:@stream, TemplateStream.new)
209
226
  @interface.add_protocol(TemplateProtocol, %w(0xABCD 0xABCD 0 nil 1 true 0 nil false nil nil), :READ_WRITE)
210
227
  @interface.target_names = ['TGT']
@@ -230,14 +247,22 @@ module Cosmos
230
247
  sleep 0.55
231
248
  expect($write_buffer).to eql("SOUR:VOLT 11, (@1)\xAB\xCD")
232
249
  expect(read_result.read("PKT_ID")).to eql(1) # Result ID set to the defined value
250
+ expect(read_result.read("VOLTAGE")).to eql(10)
233
251
  end
234
252
 
235
253
  it "handles multiple response IDs" do
236
- rsp_pkt = Packet.new('TGT', 'READ_VOLTAGE')
237
- rsp_pkt.append_item("APID", 16, :UINT, nil, :BIG_ENDIAN, :ERROR, nil, nil, nil, 10) # ID == 10
238
- rsp_pkt.append_item("PKTID", 16, :UINT, nil, :BIG_ENDIAN, :ERROR, nil, nil, nil, 20) # ID == 20
239
- rsp_pkt.append_item("VOLTAGE", 16, :UINT)
240
- allow(System).to receive_message_chain(:telemetry, :packet).and_return(rsp_pkt)
254
+ tf = Tempfile.new('unittest')
255
+ tf.puts 'TELEMETRY TGT READ_VOLTAGE BIG_ENDIAN'
256
+ tf.puts ' APPEND_ID_ITEM APID 16 UINT 10'
257
+ tf.puts ' APPEND_ID_ITEM PKTID 16 UINT 20'
258
+ tf.puts ' APPEND_ITEM VOLTAGE 16 UINT'
259
+ tf.close
260
+ pc = PacketConfig.new
261
+ pc.process_file(tf.path, "SYSTEM")
262
+ telemetry = Telemetry.new(pc)
263
+ tf.unlink
264
+
265
+ allow(System).to receive_message_chain(:telemetry).and_return(telemetry)
241
266
  @interface.instance_variable_set(:@stream, TemplateStream.new)
242
267
  @interface.add_protocol(TemplateProtocol, %w(0xABCD 0xABCD 0 nil 1 true 0 nil false nil nil), :READ_WRITE)
243
268
  @interface.target_names = ['TGT']
@@ -272,9 +297,16 @@ module Cosmos
272
297
  end
273
298
 
274
299
  it "handles templates with more values than the response" do
275
- rsp_pkt = Packet.new('TGT', 'READ_VOLTAGE')
276
- rsp_pkt.append_item("VOLTAGE", 16, :UINT)
277
- allow(System).to receive_message_chain(:telemetry, :packet).and_return(rsp_pkt)
300
+ tf = Tempfile.new('unittest')
301
+ tf.puts 'TELEMETRY TGT READ_VOLTAGE BIG_ENDIAN'
302
+ tf.puts ' APPEND_ITEM VOLTAGE 16 UINT'
303
+ tf.close
304
+ pc = PacketConfig.new
305
+ pc.process_file(tf.path, "SYSTEM")
306
+ telemetry = Telemetry.new(pc)
307
+ tf.unlink
308
+
309
+ allow(System).to receive_message_chain(:telemetry).and_return(telemetry)
278
310
  @interface.instance_variable_set(:@stream, TemplateStream.new)
279
311
  @interface.add_protocol(TemplateProtocol, %w(0xABCD 0xABCD 0 nil 1 true 0 nil false nil), :READ_WRITE)
280
312
  @interface.target_names = ['TGT']
@@ -304,9 +336,16 @@ module Cosmos
304
336
  end
305
337
 
306
338
  it "handles responses with more values than the template" do
307
- rsp_pkt = Packet.new('TGT', 'READ_VOLTAGE')
308
- rsp_pkt.append_item("VOLTAGE", 16, :UINT)
309
- allow(System).to receive_message_chain(:telemetry, :packet).and_return(rsp_pkt)
339
+ tf = Tempfile.new('unittest')
340
+ tf.puts 'TELEMETRY TGT READ_VOLTAGE BIG_ENDIAN'
341
+ tf.puts ' APPEND_ITEM VOLTAGE 16 UINT'
342
+ tf.close
343
+ pc = PacketConfig.new
344
+ pc.process_file(tf.path, "SYSTEM")
345
+ telemetry = Telemetry.new(pc)
346
+ tf.unlink
347
+
348
+ allow(System).to receive_message_chain(:telemetry).and_return(telemetry)
310
349
  @interface.instance_variable_set(:@stream, TemplateStream.new)
311
350
  @interface.add_protocol(TemplateProtocol, %w(0xABCD 0xABCD 0 nil 1 true 0 nil false nil), :READ_WRITE)
312
351
  @interface.target_names = ['TGT']
@@ -336,9 +375,16 @@ module Cosmos
336
375
  end
337
376
 
338
377
  it "ignores response lines" do
339
- rsp_pkt = Packet.new('TGT', 'READ_VOLTAGE')
340
- rsp_pkt.append_item("VOLTAGE", 16, :UINT)
341
- allow(System).to receive_message_chain(:telemetry, :packet).and_return(rsp_pkt)
378
+ tf = Tempfile.new('unittest')
379
+ tf.puts 'TELEMETRY TGT READ_VOLTAGE BIG_ENDIAN'
380
+ tf.puts ' APPEND_ITEM VOLTAGE 16 UINT'
381
+ tf.close
382
+ pc = PacketConfig.new
383
+ pc.process_file(tf.path, "SYSTEM")
384
+ telemetry = Telemetry.new(pc)
385
+ tf.unlink
386
+
387
+ allow(System).to receive_message_chain(:telemetry).and_return(telemetry)
342
388
  @interface.instance_variable_set(:@stream, TemplateStream.new)
343
389
  @interface.add_protocol(TemplateProtocol, %w(0xAD 0xA 1), :READ_WRITE)
344
390
  @interface.target_names = ['TGT']
@@ -365,9 +411,16 @@ module Cosmos
365
411
  end
366
412
 
367
413
  it "allows multiple response lines" do
368
- rsp_pkt = Packet.new('TGT', 'DATA')
369
- rsp_pkt.append_item("STRING", 512, :STRING)
370
- allow(System).to receive_message_chain(:telemetry, :packet).and_return(rsp_pkt)
414
+ tf = Tempfile.new('unittest')
415
+ tf.puts 'TELEMETRY TGT DATA BIG_ENDIAN'
416
+ tf.puts ' APPEND_ITEM STRING 512 STRINg'
417
+ tf.close
418
+ pc = PacketConfig.new
419
+ pc.process_file(tf.path, "SYSTEM")
420
+ telemetry = Telemetry.new(pc)
421
+ tf.unlink
422
+
423
+ allow(System).to receive_message_chain(:telemetry).and_return(telemetry)
371
424
  @interface.instance_variable_set(:@stream, TemplateStream.new)
372
425
  @interface.add_protocol(TemplateProtocol, %w(0xAD 0xA 0 nil 2), :READ_WRITE)
373
426
  @interface.target_names = ['TGT']