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
@@ -60,6 +60,16 @@ module Cosmos
60
60
  # packet is not.
61
61
  attr_reader :latest_data
62
62
 
63
+ # @return [Hash<String>=>Hash<Array>=>Packet] Hash keyed by target name
64
+ # that returns a hash keyed by an array of id values. The id values resolve to the packet
65
+ # defined by that identification. Command version
66
+ attr_reader :cmd_id_value_hash
67
+
68
+ # @return [Hash<String>=>Hash<Array>=>Packet] Hash keyed by target name
69
+ # that returns a hash keyed by an array of id values. The id values resolve to the packet
70
+ # defined by that identification. Telemetry version
71
+ attr_reader :tlm_id_value_hash
72
+
63
73
  COMMAND = "Command"
64
74
  TELEMETRY = "Telemetry"
65
75
 
@@ -73,6 +83,8 @@ module Cosmos
73
83
  # Returns an array of packets with that target and item.
74
84
  @latest_data = {}
75
85
  @warnings = []
86
+ @cmd_id_value_hash = {}
87
+ @tlm_id_value_hash = {}
76
88
 
77
89
  # Create unknown packets
78
90
  @commands['UNKNOWN'] = {}
@@ -91,7 +103,8 @@ module Cosmos
91
103
  # knowledge of the commands, telemetry, and limits groups.
92
104
  #
93
105
  # @param filename [String] The name of the configuration file
94
- # @param process_target_name [String] The target name
106
+ # @param process_target_name [String] The target name. Pass nil when parsing
107
+ # an xtce file to automatically determine the target name.
95
108
  def process_file(filename, process_target_name)
96
109
  # Handle .xtce files
97
110
  if File.extname(filename).to_s.downcase == ".xtce"
@@ -185,14 +198,22 @@ module Cosmos
185
198
  #######################################################################
186
199
  # All the following keywords must have a current packet defined
187
200
  #######################################################################
188
- when 'SELECT_ITEM', 'SELECT_PARAMETER', 'ITEM', 'PARAMETER', 'ID_ITEM', 'ID_PARAMETER', 'ARRAY_ITEM', 'ARRAY_PARAMETER', 'APPEND_ITEM', 'APPEND_PARAMETER', 'APPEND_ID_ITEM', 'APPEND_ID_PARAMETER', 'APPEND_ARRAY_ITEM', 'APPEND_ARRAY_PARAMETER', 'MACRO_APPEND_START', 'MACRO_APPEND_END', 'ALLOW_SHORT', 'HAZARDOUS', 'PROCESSOR', 'META', 'DISABLE_MESSAGES', 'HIDDEN', 'DISABLED'
201
+ when 'SELECT_ITEM', 'SELECT_PARAMETER', 'DELETE_ITEM', 'DELETE_PARAMETER', 'ITEM',\
202
+ 'PARAMETER', 'ID_ITEM', 'ID_PARAMETER', 'ARRAY_ITEM', 'ARRAY_PARAMETER', 'APPEND_ITEM',\
203
+ 'APPEND_PARAMETER', 'APPEND_ID_ITEM', 'APPEND_ID_PARAMETER', 'APPEND_ARRAY_ITEM',\
204
+ 'APPEND_ARRAY_PARAMETER', 'MACRO_APPEND_START', 'MACRO_APPEND_END', 'ALLOW_SHORT',\
205
+ 'HAZARDOUS', 'PROCESSOR', 'META', 'DISABLE_MESSAGES', 'HIDDEN', 'DISABLED'
189
206
  raise parser.error("No current packet for #{keyword}") unless @current_packet
190
207
  process_current_packet(parser, keyword, params)
191
208
 
192
209
  #######################################################################
193
210
  # All the following keywords must have a current item defined
194
211
  #######################################################################
195
- when 'STATE', 'READ_CONVERSION', 'WRITE_CONVERSION', 'POLY_READ_CONVERSION', 'POLY_WRITE_CONVERSION', 'SEG_POLY_READ_CONVERSION', 'SEG_POLY_WRITE_CONVERSION', 'GENERIC_READ_CONVERSION_START', 'GENERIC_WRITE_CONVERSION_START', 'REQUIRED', 'LIMITS', 'LIMITS_RESPONSE', 'UNITS', 'FORMAT_STRING', 'DESCRIPTION', 'MINIMUM_VALUE', 'MAXIMUM_VALUE', 'DEFAULT_VALUE', 'OVERFLOW'
212
+ when 'STATE', 'READ_CONVERSION', 'WRITE_CONVERSION', 'POLY_READ_CONVERSION',\
213
+ 'POLY_WRITE_CONVERSION', 'SEG_POLY_READ_CONVERSION', 'SEG_POLY_WRITE_CONVERSION',\
214
+ 'GENERIC_READ_CONVERSION_START', 'GENERIC_WRITE_CONVERSION_START', 'REQUIRED',\
215
+ 'LIMITS', 'LIMITS_RESPONSE', 'UNITS', 'FORMAT_STRING', 'DESCRIPTION',\
216
+ 'MINIMUM_VALUE', 'MAXIMUM_VALUE', 'DEFAULT_VALUE', 'OVERFLOW', 'OVERLAP'
196
217
  raise parser.error("No current item for #{keyword}") unless @current_item
197
218
  process_current_item(parser, keyword, params)
198
219
 
@@ -274,8 +295,16 @@ module Cosmos
274
295
  if @current_cmd_or_tlm == COMMAND
275
296
  PacketParser.check_item_data_types(@current_packet)
276
297
  @commands[@current_packet.target_name][@current_packet.packet_name] = @current_packet
298
+ hash = @cmd_id_value_hash[@current_packet.target_name]
299
+ hash = {} unless hash
300
+ @cmd_id_value_hash[@current_packet.target_name] = hash
301
+ update_id_value_hash(hash)
277
302
  else
278
303
  @telemetry[@current_packet.target_name][@current_packet.packet_name] = @current_packet
304
+ hash = @tlm_id_value_hash[@current_packet.target_name]
305
+ hash = {} unless hash
306
+ @tlm_id_value_hash[@current_packet.target_name] = hash
307
+ update_id_value_hash(hash)
279
308
  end
280
309
  @current_packet = nil
281
310
  @current_item = nil
@@ -284,6 +313,18 @@ module Cosmos
284
313
 
285
314
  protected
286
315
 
316
+ def update_id_value_hash(hash)
317
+ if @current_packet.id_items.length > 0
318
+ key = []
319
+ @current_packet.id_items.each do |item|
320
+ key << item.id_value
321
+ end
322
+ hash[key] = @current_packet
323
+ else
324
+ hash['CATCHALL'.freeze] = @current_packet
325
+ end
326
+ end
327
+
287
328
  def reset_processing_variables
288
329
  @current_cmd_or_tlm = nil
289
330
  @current_packet = nil
@@ -294,25 +335,31 @@ module Cosmos
294
335
  def process_current_packet(parser, keyword, params)
295
336
  case keyword
296
337
 
297
- # Select an item in the current telemetry packet for editing
298
- when 'SELECT_PARAMETER', 'SELECT_ITEM'
338
+ # Select or delete an item in the current packet
339
+ when 'SELECT_PARAMETER', 'SELECT_ITEM', 'DELETE_PARAMETER', 'DELETE_ITEM'
299
340
  if (@current_cmd_or_tlm == COMMAND) && (keyword.split('_')[1] == 'ITEM')
300
- raise parser.error("SELECT_ITEM only applies to telemetry packets")
341
+ raise parser.error("#{keyword} only applies to telemetry packets")
301
342
  end
302
343
  if (@current_cmd_or_tlm == TELEMETRY) && (keyword.split('_')[1] == 'PARAMETER')
303
- raise parser.error("SELECT_PARAMETER only applies to command packets")
344
+ raise parser.error("#{keyword} only applies to command packets")
304
345
  end
305
346
  usage = "#{keyword} <#{keyword.split('_')[1]} NAME>"
306
347
  finish_item()
307
348
  parser.verify_num_parameters(1, 1, usage)
308
349
  begin
309
- @current_item = @current_packet.get_item(params[0])
350
+ if keyword.include?("SELECT")
351
+ @current_item = @current_packet.get_item(params[0])
352
+ else # DELETE
353
+ @current_packet.delete_item(params[0])
354
+ end
310
355
  rescue # Rescue the default execption to provide a nicer error message
311
356
  raise parser.error("#{params[0]} not found in #{@current_cmd_or_tlm.downcase} packet #{@current_packet.target_name} #{@current_packet.packet_name}", usage)
312
357
  end
313
358
 
314
359
  # Start a new telemetry item in the current packet
315
- when 'ITEM', 'PARAMETER', 'ID_ITEM', 'ID_PARAMETER', 'ARRAY_ITEM', 'ARRAY_PARAMETER', 'APPEND_ITEM', 'APPEND_PARAMETER', 'APPEND_ID_ITEM', 'APPEND_ID_PARAMETER', 'APPEND_ARRAY_ITEM', 'APPEND_ARRAY_PARAMETER'
360
+ when 'ITEM', 'PARAMETER', 'ID_ITEM', 'ID_PARAMETER', 'ARRAY_ITEM', 'ARRAY_PARAMETER',\
361
+ 'APPEND_ITEM', 'APPEND_PARAMETER', 'APPEND_ID_ITEM', 'APPEND_ID_PARAMETER',\
362
+ 'APPEND_ARRAY_ITEM', 'APPEND_ARRAY_PARAMETER'
316
363
  start_item(parser)
317
364
 
318
365
  # Start the creation of a macro-expanded list of items
@@ -472,7 +519,6 @@ module Cosmos
472
519
 
473
520
  # Define the units of the current telemetry item
474
521
  when 'UNITS'
475
- raise parser.error("Items with STATE can't define UNITS") if @current_item.states
476
522
  usage = "UNITS <FULL UNITS NAME> <ABBREVIATED UNITS NAME>"
477
523
  parser.verify_num_parameters(2, 2, usage)
478
524
  @current_item.units_full = params[0]
@@ -538,6 +584,10 @@ module Cosmos
538
584
  parser.verify_num_parameters(1, 1, usage)
539
585
  @current_item.overflow = params[0].to_s.upcase.intern
540
586
 
587
+ when 'OVERLAP'
588
+ parser.verify_num_parameters(0, 0, 'OVERLAP')
589
+ @current_item.overlap = true
590
+
541
591
  end
542
592
  end
543
593
 
@@ -14,7 +14,6 @@ module Cosmos
14
14
  # @param parser [ConfigParser] Configuration parser
15
15
  # @param item [Packet] The current item
16
16
  def self.parse(parser, item)
17
- raise parser.error("Items with STATE can't define FORMAT_STRING") if item.states
18
17
  @parser = FormatStringParser.new(parser)
19
18
  @parser.verify_parameters()
20
19
  @parser.create_format_string(item)
@@ -21,7 +21,6 @@ module Cosmos
21
21
  # appended with any warnings found when parsing the limits
22
22
  def self.parse(parser, packet, cmd_or_tlm, item, warnings)
23
23
  raise parser.error("Items with LIMITS can't define STATE") if item.limits.values
24
- raise parser.error("Items with FORMAT_STRING can't define STATE") if item.format_string
25
24
  raise parser.error("Items with UNITS can't define STATE") if item.units
26
25
  @parser = StateParser.new(parser)
27
26
  @parser.verify_parameters(cmd_or_tlm)
@@ -295,6 +295,8 @@ module Cosmos
295
295
  xml['xtce'].IntegerDataEncoding(:sizeInBits => item.bit_size, :encoding => encoding)
296
296
  xml['xtce'].EnumerationList do
297
297
  item.states.each do |state_name, state_value|
298
+ # Skip the special COSMOS 'ANY' enumerated state
299
+ next if state_value == 'ANY'
298
300
  xml['xtce'].Enumeration(:value => state_value, :label => state_name)
299
301
  end
300
302
  end
@@ -25,8 +25,8 @@ module Cosmos
25
25
  # @param warnings [Array<String>] Array of strings listing all the warnings
26
26
  # that were created while parsing the configuration
27
27
  # @param filename [String] The name of the configuration file
28
- # @param target_name [String] The target name
29
- def self.process(commands, telemetry, warnings, filename, target_name)
28
+ # @param target_name [String] Override the target name found in the XTCE file
29
+ def self.process(commands, telemetry, warnings, filename, target_name = nil)
30
30
  XtceParser.new(commands, telemetry, warnings, filename, target_name)
31
31
  end
32
32
 
@@ -49,7 +49,7 @@ module Cosmos
49
49
 
50
50
  private
51
51
 
52
- def initialize(commands, telemetry, warnings, filename, target_name)
52
+ def initialize(commands, telemetry, warnings, filename, target_name = nil)
53
53
  reset_processing_variables()
54
54
  @commands = commands
55
55
  @telemetry = telemetry
@@ -60,6 +60,7 @@ module Cosmos
60
60
 
61
61
  def parse(filename, target_name)
62
62
  doc = File.open(filename) { |f| Nokogiri::XML(f, nil, nil, Nokogiri::XML::ParseOptions::STRICT | Nokogiri::XML::ParseOptions::NOBLANKS) }
63
+ # Determine the @current_target_name
63
64
  xtce_process_element(doc.root)
64
65
  @current_target_name = target_name if target_name
65
66
  doc.root.children.each do |child|
@@ -650,7 +651,7 @@ module Cosmos
650
651
  if base_packet
651
652
  count = 0
652
653
  base_packet.sorted_items.each do |item|
653
- unless ['RECEIVED_TIMESECONDS', 'RECEIVED_TIMEFORMATTED', 'RECEIVED_COUNT'].include?(item.name)
654
+ unless ['PACKET_TIMESECONDS', 'PACKET_TIMEFORMATTED', 'RECEIVED_TIMESECONDS', 'RECEIVED_TIMEFORMATTED', 'RECEIVED_COUNT'].include?(item.name)
654
655
  begin
655
656
  @current_packet.get_item(item.name)
656
657
  rescue
@@ -195,7 +195,7 @@ module Cosmos
195
195
  last_item = @sorted_items[-1]
196
196
  @sorted_items << item
197
197
  # If the current item or last item have a negative offset then we have
198
- # to re-sort. We also re-sort if the current item is less than the less
198
+ # to re-sort. We also re-sort if the current item is less than the last
199
199
  # item because we are inserting.
200
200
  if last_item.bit_offset <= 0 or item.bit_offset <= 0 or item.bit_offset < last_item.bit_offset
201
201
  @sorted_items = @sorted_items.sort
@@ -303,6 +303,23 @@ module Cosmos
303
303
  end
304
304
  end
305
305
 
306
+ # @param name [String] Name of the item to delete in the items Hash
307
+ def delete_item(name)
308
+ item = @items[name.upcase]
309
+ raise ArgumentError, "Unknown item: #{name}" unless item
310
+
311
+ # Find the item to delete in the sorted_items array
312
+ item_index = nil
313
+ @sorted_items.each_with_index do |sorted_item, index|
314
+ if sorted_item.name == item.name
315
+ item_index = index
316
+ break
317
+ end
318
+ end
319
+ @sorted_items.delete_at(item_index)
320
+ @items.delete(name.upcase)
321
+ end
322
+
306
323
  # Write a value to the buffer based on the item definition
307
324
  #
308
325
  # @param item [StructureItem] Instance of StructureItem or one of its subclasses
@@ -370,12 +387,14 @@ module Cosmos
370
387
  # parameter to check whether to perform conversions on the item.
371
388
  # @param indent [Integer] Amount to indent before printing the item name
372
389
  # @param buffer [String] The binary buffer to write the value to
390
+ # @param ignored [Array<String>] List of items to ignore when building the string
373
391
  # @return [String] String formatted with all the item names and values
374
- def formatted(value_type = :RAW, indent = 0, buffer = @buffer)
392
+ def formatted(value_type = :RAW, indent = 0, buffer = @buffer, ignored = nil)
375
393
  indent_string = ' ' * indent
376
394
  string = ''
377
395
  synchronize_allow_reads(true) do
378
396
  @sorted_items.each do |item|
397
+ next if ignored && ignored.include?(item.name)
379
398
  if (item.data_type != :BLOCK) ||
380
399
  (item.data_type == :BLOCK and value_type != :RAW and
381
400
  item.respond_to? :read_conversion and item.read_conversion)
@@ -445,9 +464,18 @@ module Cosmos
445
464
 
446
465
  protected
447
466
 
467
+ MUTEX = Mutex.new
468
+
469
+ def setup_mutex
470
+ return if @mutex
471
+ MUTEX.synchronize do
472
+ @mutex ||= Mutex.new
473
+ end
474
+ end
475
+
448
476
  # Take the structure mutex to ensure the buffer does not change while you perform activities
449
477
  def synchronize
450
- @mutex ||= Mutex.new
478
+ setup_mutex()
451
479
  @mutex.synchronize {|| yield}
452
480
  end
453
481
 
@@ -457,7 +485,7 @@ module Cosmos
457
485
  # lower level calls to go forward without getting the mutex
458
486
  def synchronize_allow_reads(top = false)
459
487
  @mutex_allow_reads ||= false
460
- @mutex ||= Mutex.new
488
+ setup_mutex()
461
489
  if top
462
490
  @mutex.synchronize do
463
491
  @mutex_allow_reads = Thread.current
@@ -11,7 +11,6 @@
11
11
  require 'cosmos/ext/packet' if RUBY_ENGINE == 'ruby' and !ENV['COSMOS_NO_EXT']
12
12
 
13
13
  module Cosmos
14
-
15
14
  # Maintains knowledge of an item in a Structure. Multiple StructureItems
16
15
  # compose a Structure.
17
16
  class StructureItem
@@ -59,6 +58,9 @@ module Cosmos
59
58
  # @return [Symbol] {BinaryAccessor::OVERFLOW_TYPES}
60
59
  attr_reader :overflow
61
60
 
61
+ # @return [Boolean] Whether this structure item can overlap another item in the same packet
62
+ attr_accessor :overlap
63
+
62
64
  # A large buffer size in bits (1 Megabyte)
63
65
  LARGE_BUFFER_SIZE_BITS = 1024 * 1024 * 8
64
66
 
@@ -73,6 +75,7 @@ module Cosmos
73
75
  # @param endianness [Symbol] {BinaryAccessor::ENDIANNESS}
74
76
  # @param array_size [Integer, nil] Size of the array item in bits. For
75
77
  # example, if the bit_size is 8, an array_size of 16 holds two values.
78
+ # @param overflow [Symbol] {BinaryAccessor::OVERFLOW_TYPES}
76
79
  def initialize(name, bit_offset, bit_size, data_type, endianness, array_size = nil, overflow = :ERROR)
77
80
  @structure_item_constructed = false
78
81
  # Assignment order matters due to verifications!
@@ -83,6 +86,7 @@ module Cosmos
83
86
  self.bit_size = bit_size
84
87
  self.array_size = array_size
85
88
  self.overflow = overflow
89
+ self.overlap = false
86
90
  @create_index = @@create_index
87
91
  @@create_index += 1
88
92
  @structure_item_constructed = true
@@ -266,17 +266,33 @@ module Cosmos
266
266
  target_names = target_names() unless target_names
267
267
 
268
268
  target_names.each do |target_name|
269
+ target_name = target_name.to_s.upcase
270
+
269
271
  target_packets = nil
270
272
  begin
271
273
  target_packets = packets(target_name)
274
+ #puts target_packets.length
272
275
  rescue RuntimeError
273
276
  # No telemetry for this target
274
277
  next
275
278
  end
276
279
 
277
- # Iterate through the packets and see if any represent the buffer
278
- target_packets.each do |packet_name, packet|
279
- return packet if packet.identify?(packet_data)
280
+ target = System.targets[target_name]
281
+ if target and target.tlm_unique_id_mode
282
+ # Iterate through the packets and see if any represent the buffer
283
+ target_packets.each do |packet_name, packet|
284
+ return packet if packet.identify?(packet_data)
285
+ end
286
+ else
287
+ # Do a hash lookup to quickly identify the packet
288
+ if target_packets.length > 0
289
+ packet = target_packets.first[1]
290
+ key = packet.read_id_values(packet_data)
291
+ hash = @config.tlm_id_value_hash[target_name]
292
+ identified_packet = hash[key]
293
+ identified_packet = hash['CATCHALL'.freeze] unless identified_packet
294
+ return identified_packet if identified_packet
295
+ end
280
296
  end
281
297
  end
282
298
 
@@ -290,6 +306,8 @@ module Cosmos
290
306
  identified_packet = identified_packet.clone
291
307
  identified_packet.buffer = packet.buffer
292
308
  identified_packet.received_time = packet.received_time
309
+ identified_packet.stored = packet.stored
310
+ identified_packet.extra = packet.extra
293
311
  return identified_packet
294
312
  end
295
313
 
@@ -302,6 +320,8 @@ module Cosmos
302
320
  identified_packet = identified_packet.clone
303
321
  identified_packet.buffer = packet.buffer
304
322
  identified_packet.received_time = packet.received_time
323
+ identified_packet.stored = packet.stored
324
+ identified_packet.extra = packet.extra
305
325
  return identified_packet
306
326
  end
307
327
 
@@ -417,7 +437,13 @@ module Cosmos
417
437
  splash.progress = index / total
418
438
  end
419
439
 
420
- ignored_items = System.targets[target_name].ignored_items
440
+ # Note: System only has declared target structures but telemetry may have more
441
+ system_target = System.targets[target_name]
442
+ if system_target
443
+ ignored_items = system_target.ignored_items
444
+ else
445
+ ignored_items = []
446
+ end
421
447
 
422
448
  packets(target_name).each do |packet_name, packet|
423
449
  # We don't audit against hidden or disabled packets
@@ -9,6 +9,13 @@
9
9
  # attribution addendums as found in the LICENSE.txt
10
10
 
11
11
  module Cosmos
12
+ # Error raised by the API when a check fails
13
+ class CheckError < RuntimeError; end
14
+ # Error raised when a Script should be stopped
15
+ class StopScript < StandardError; end
16
+ # Error raised when a TestCase should be skipped by TestRunner
17
+ class SkipTestCase < StandardError; end
18
+
12
19
  module ApiShared
13
20
  DEFAULT_TLM_POLLING_RATE = 0.25
14
21
 
@@ -477,7 +484,7 @@ module Cosmos
477
484
  path
478
485
  end
479
486
 
480
- def check_file_cache_for_instrumented_script(path, md5)
487
+ def check_file_cache_for_instrumented_script(path, hash_string)
481
488
  file_text = nil
482
489
  instrumented_script = nil
483
490
  cached = true
@@ -498,8 +505,8 @@ module Cosmos
498
505
  if use_file_cache
499
506
  # Check file based instrumented cache
500
507
  flat_path = path.tr("/", "_").gsub("\\", "_").tr(":", "_").tr(" ", "_")
501
- flat_path_with_md5 = flat_path + '_' + md5
502
- cache_filename = File.join(cache_path, flat_path_with_md5)
508
+ flat_path_with_hash_string = flat_path + '_' + hash_string
509
+ cache_filename = File.join(cache_path, flat_path_with_hash_string)
503
510
  end
504
511
 
505
512
  begin
@@ -536,24 +543,27 @@ module Cosmos
536
543
  path = _get_procedure_path(procedure_name)
537
544
 
538
545
  if defined? ScriptRunnerFrame and ScriptRunnerFrame.instance
539
- md5 = nil
546
+ hashing_sum = nil
540
547
  begin
541
- md5 = Cosmos.md5_files([path]).hexdigest
548
+ hashing_result = Cosmos.hash_files([path], nil, System.hashing_algorithm)
549
+ hash_string = hashing_result.hexdigest
550
+ # Only use at most, 32 characters of the hex
551
+ hash_string = hash_string[-32..-1] if hash_string.length >= 32
542
552
  rescue Exception => error
543
- raise "Error calculating md5 on procedure file : #{path}"
553
+ raise "Error calculating hash string on procedure file : #{path}"
544
554
  end
545
555
 
546
556
  # Check RAM based instrumented cache
547
557
  instrumented_cache = ScriptRunnerFrame.instrumented_cache[path]
548
558
  instrumented_script = nil
549
- if instrumented_cache and md5 == instrumented_cache[1]
559
+ if instrumented_cache and hash_string == instrumented_cache[1]
550
560
  # Use cached instrumentation
551
561
  instrumented_script = instrumented_cache[0]
552
562
  else
553
- file_text, instrumented_script, cached = check_file_cache_for_instrumented_script(path, md5)
563
+ file_text, instrumented_script, cached = check_file_cache_for_instrumented_script(path, hash_string)
554
564
  # Cache instrumentation into RAM
555
565
  ScriptRunnerFrame.file_cache[path] = file_text
556
- ScriptRunnerFrame.instrumented_cache[path] = [instrumented_script, md5]
566
+ ScriptRunnerFrame.instrumented_cache[path] = [instrumented_script, hash_string]
557
567
  end
558
568
 
559
569
  Object.class_eval(instrumented_script, path, 1)
@@ -789,6 +799,8 @@ module Cosmos
789
799
  def cosmos_script_sleep(sleep_time = nil)
790
800
  return false if $disconnected_targets
791
801
  if defined? ScriptRunnerFrame and ScriptRunnerFrame.instance
802
+ ScriptRunnerFrame.instance.active_script_highlight('green')
803
+
792
804
  sleep_time = 30000000 unless sleep_time # Handle infinite wait
793
805
  if sleep_time > 0.0
794
806
  end_time = Time.now.sys + sleep_time
@@ -937,7 +949,7 @@ module Cosmos
937
949
  end
938
950
 
939
951
  def run_tlm_viewer(action, display_name = '')
940
- tlm_viewer = JsonDRbObject.new System.connect_hosts['TLMVIEWER_API'], System.ports['TLMVIEWER_API']
952
+ tlm_viewer = JsonDRbObject.new System.connect_hosts['TLMVIEWER_API'], System.ports['TLMVIEWER_API'], 1.0, Cosmos::System.x_csrf_token
941
953
  begin
942
954
  yield tlm_viewer
943
955
  tlm_viewer.disconnect