cosmos 4.1.1-java → 4.2.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 (336) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +0 -2
  3. data/.travis.yml +2 -0
  4. data/.yardopts +1 -0
  5. data/Gemfile +1 -0
  6. data/Manifest.txt +130 -0
  7. data/autohotkey/tools/ConfigEditorAHK +19 -0
  8. data/autohotkey/tools/cmd_extractor.ahk +4 -4
  9. data/autohotkey/tools/cmd_sequence.ahk +9 -5
  10. data/autohotkey/tools/config_editor.ahk +197 -0
  11. data/autohotkey/tools/packet_viewer.ahk +12 -6
  12. data/autohotkey/tools/replay.ahk +29 -29
  13. data/autohotkey/tools/script_runner.ahk +10 -2
  14. data/autohotkey/tools/tlm_extractor.ahk +7 -8
  15. data/autohotkey/tools/tlm_grapher.ahk +21 -9
  16. data/bin/dart_import +2 -0
  17. data/cosmos.gemspec +18 -16
  18. data/data/config/cmd_tlm_server.yaml +9 -0
  19. data/data/config/interface_modifiers.yaml +17 -0
  20. data/data/config/item_modifiers.yaml +3 -3
  21. data/data/crc.txt +184 -90
  22. data/data/dart.png +0 -0
  23. data/demo/Gemfile +1 -0
  24. data/demo/Rakefile +4 -0
  25. data/demo/config/dart/Gemfile +54 -0
  26. data/demo/config/data/crc.txt +28 -21
  27. data/demo/config/system/system.txt +3 -0
  28. data/demo/config/system/system2.txt +3 -0
  29. data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +3 -3
  30. data/demo/config/targets/INST/cmd_tlm/inst_tlm.txt +1 -1
  31. data/demo/config/targets/INST/lib/sim_inst.rb +1 -1
  32. data/demo/config/targets/INST/screens/adcs.txt +2 -1
  33. data/demo/config/targets/INST/screens/array.txt +1 -1
  34. data/demo/config/targets/INST/screens/block.txt +1 -1
  35. data/demo/config/targets/INST/screens/commanding.txt +7 -2
  36. data/demo/config/targets/INST/screens/graphs.txt +1 -1
  37. data/demo/config/targets/INST/screens/ground.txt +1 -1
  38. data/demo/config/targets/INST/screens/hs.txt +2 -1
  39. data/demo/config/targets/INST/screens/latest.txt +1 -1
  40. data/demo/config/targets/INST/screens/limits.txt +1 -1
  41. data/demo/config/targets/INST/screens/other.txt +1 -1
  42. data/demo/config/targets/INST/screens/tabs.txt +1 -1
  43. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server.txt +2 -2
  44. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server2.txt +3 -1
  45. data/demo/config/tools/launcher/launcher.txt +3 -2
  46. data/demo/tools/Dart +16 -0
  47. data/demo/tools/Dart.bat +9 -0
  48. data/demo/tools/mac/CmdSequence.app/Contents/MacOS/main.sh +0 -0
  49. data/demo/tools/mac/ConfigEditor.app/Contents/MacOS/main.sh +0 -0
  50. data/install/Gemfile +1 -0
  51. data/install/Rakefile +4 -0
  52. data/install/config/dart/Gemfile +54 -0
  53. data/install/config/data/crc.txt +6 -3
  54. data/install/config/system/system.txt +3 -0
  55. data/install/config/tools/launcher/launcher.txt +3 -2
  56. data/install/tools/Dart +16 -0
  57. data/install/tools/Dart.bat +9 -0
  58. data/install/tools/mac/CmdSequence.app/Contents/MacOS/main.sh +0 -0
  59. data/install/tools/mac/ConfigEditor.app/Contents/MacOS/main.sh +0 -0
  60. data/lib/cosmos/core_ext/time.rb +8 -8
  61. data/lib/cosmos/dart/.rspec +1 -0
  62. data/lib/cosmos/dart/Gemfile +69 -0
  63. data/lib/cosmos/dart/Rakefile +7 -0
  64. data/lib/cosmos/dart/app/assets/config/manifest.js +4 -0
  65. data/lib/cosmos/dart/app/assets/images/.keep +0 -0
  66. data/lib/cosmos/dart/app/assets/javascripts/application.js +13 -0
  67. data/lib/cosmos/dart/app/assets/javascripts/cable.js +13 -0
  68. data/lib/cosmos/dart/app/assets/stylesheets/application.css.scss +15 -0
  69. data/lib/cosmos/dart/app/channels/application_cable/channel.rb +4 -0
  70. data/lib/cosmos/dart/app/channels/application_cable/connection.rb +4 -0
  71. data/lib/cosmos/dart/app/controllers/application_controller.rb +3 -0
  72. data/lib/cosmos/dart/app/helpers/application_helper.rb +2 -0
  73. data/lib/cosmos/dart/app/jobs/application_job.rb +2 -0
  74. data/lib/cosmos/dart/app/mailers/application_mailer.rb +4 -0
  75. data/lib/cosmos/dart/app/models/application_record.rb +3 -0
  76. data/lib/cosmos/dart/app/models/item.rb +6 -0
  77. data/lib/cosmos/dart/app/models/item_to_decom_table_mapping.rb +9 -0
  78. data/lib/cosmos/dart/app/models/packet.rb +4 -0
  79. data/lib/cosmos/dart/app/models/packet_config.rb +7 -0
  80. data/lib/cosmos/dart/app/models/packet_log.rb +3 -0
  81. data/lib/cosmos/dart/app/models/packet_log_entry.rb +41 -0
  82. data/lib/cosmos/dart/app/models/system_config.rb +2 -0
  83. data/lib/cosmos/dart/app/models/target.rb +4 -0
  84. data/lib/cosmos/dart/app/views/layouts/application.html.erb +14 -0
  85. data/lib/cosmos/dart/app/views/layouts/mailer.html.erb +13 -0
  86. data/lib/cosmos/dart/app/views/layouts/mailer.text.erb +1 -0
  87. data/lib/cosmos/dart/bin/bundle +3 -0
  88. data/lib/cosmos/dart/bin/rails +4 -0
  89. data/lib/cosmos/dart/bin/rake +4 -0
  90. data/lib/cosmos/dart/bin/setup +34 -0
  91. data/lib/cosmos/dart/bin/update +29 -0
  92. data/lib/cosmos/dart/config.ru +5 -0
  93. data/lib/cosmos/dart/config/application.rb +29 -0
  94. data/lib/cosmos/dart/config/boot.rb +3 -0
  95. data/lib/cosmos/dart/config/cable.yml +9 -0
  96. data/lib/cosmos/dart/config/database.yml +23 -0
  97. data/lib/cosmos/dart/config/environment.rb +5 -0
  98. data/lib/cosmos/dart/config/environments/development.rb +62 -0
  99. data/lib/cosmos/dart/config/environments/production.rb +84 -0
  100. data/lib/cosmos/dart/config/environments/test.rb +42 -0
  101. data/lib/cosmos/dart/config/initializers/application_controller_renderer.rb +6 -0
  102. data/lib/cosmos/dart/config/initializers/assets.rb +12 -0
  103. data/lib/cosmos/dart/config/initializers/backtrace_silencers.rb +7 -0
  104. data/lib/cosmos/dart/config/initializers/cookies_serializer.rb +5 -0
  105. data/lib/cosmos/dart/config/initializers/filter_parameter_logging.rb +4 -0
  106. data/lib/cosmos/dart/config/initializers/inflections.rb +16 -0
  107. data/lib/cosmos/dart/config/initializers/mime_types.rb +4 -0
  108. data/lib/cosmos/dart/config/initializers/new_framework_defaults.rb +25 -0
  109. data/lib/cosmos/dart/config/initializers/session_store.rb +3 -0
  110. data/lib/cosmos/dart/config/initializers/wrap_parameters.rb +14 -0
  111. data/lib/cosmos/dart/config/locales/en.yml +23 -0
  112. data/lib/cosmos/dart/config/puma.rb +47 -0
  113. data/lib/cosmos/dart/config/routes.rb +3 -0
  114. data/lib/cosmos/dart/config/secrets.yml +22 -0
  115. data/lib/cosmos/dart/db/migrate/20170406172907_create_targets.rb +8 -0
  116. data/lib/cosmos/dart/db/migrate/20170406172927_create_packets.rb +10 -0
  117. data/lib/cosmos/dart/db/migrate/20170406172937_create_packet_logs.rb +9 -0
  118. data/lib/cosmos/dart/db/migrate/20170406172943_create_packet_log_entries.rb +16 -0
  119. data/lib/cosmos/dart/db/migrate/20170406183500_change_packet_log_entries_primary_key.rb +5 -0
  120. data/lib/cosmos/dart/db/migrate/20170407153618_add_unique_requirements.rb +7 -0
  121. data/lib/cosmos/dart/db/migrate/20170511155447_add_meta_id_to_packet_log_entries.rb +6 -0
  122. data/lib/cosmos/dart/db/migrate/20170523185056_rename_received_time_and_add_is_tlm_to_packet_log_entries.rb +7 -0
  123. data/lib/cosmos/dart/db/migrate/20170525201157_create_items.rb +10 -0
  124. data/lib/cosmos/dart/db/migrate/20170525201315_create_system_configs.rb +9 -0
  125. data/lib/cosmos/dart/db/migrate/20170525201624_create_packet_configs.rb +11 -0
  126. data/lib/cosmos/dart/db/migrate/20170525201745_create_item_to_decom_table_mappings.rb +12 -0
  127. data/lib/cosmos/dart/db/migrate/20170525201939_create_decom_tables.rb +12 -0
  128. data/lib/cosmos/dart/db/migrate/20170525202051_add_decom_state_to_packet_log_entry.rb +5 -0
  129. data/lib/cosmos/dart/db/migrate/20170913160409_update_items.rb +6 -0
  130. data/lib/cosmos/dart/db/migrate/20170913160558_update_item_to_decom_table_mapping.rb +11 -0
  131. data/lib/cosmos/dart/db/migrate/20170913160916_udpate_decom_table.rb +6 -0
  132. data/lib/cosmos/dart/db/migrate/20170913212026_add_ready_to_packet_configs.rb +5 -0
  133. data/lib/cosmos/dart/db/migrate/20170913223556_modify_tables.rb +9 -0
  134. data/lib/cosmos/dart/db/migrate/20170914215744_modify_mapping_table.rb +6 -0
  135. data/lib/cosmos/dart/db/migrate/20170919201433_add_system_config_id_to_packet_config.rb +11 -0
  136. data/lib/cosmos/dart/db/migrate/20170919210307_add_max_table_index_to_packet_configs.rb +5 -0
  137. data/lib/cosmos/dart/db/migrate/20171215225546_add_ready_to_packet_log_entries.rb +5 -0
  138. data/lib/cosmos/dart/db/migrate/20180116214338_add_index_for_ple_ready_to_packet_log_entries.rb +5 -0
  139. data/lib/cosmos/dart/db/schema.rb +103 -0
  140. data/lib/cosmos/dart/db/seeds.rb +7 -0
  141. data/lib/cosmos/dart/examples/dart_decom_client.rb +45 -0
  142. data/lib/cosmos/dart/examples/dart_stream_client.rb +93 -0
  143. data/lib/cosmos/dart/lib/dart_common.rb +749 -0
  144. data/lib/cosmos/dart/lib/dart_database_cleaner.rb +172 -0
  145. data/lib/cosmos/dart/lib/dart_decom_query.rb +184 -0
  146. data/lib/cosmos/dart/lib/dart_decommutator.rb +235 -0
  147. data/lib/cosmos/dart/lib/dart_importer.rb +154 -0
  148. data/lib/cosmos/dart/lib/dart_logging.rb +50 -0
  149. data/lib/cosmos/dart/lib/dart_packet_log_writer.rb +139 -0
  150. data/lib/cosmos/dart/lib/dart_reducer_manager.rb +85 -0
  151. data/lib/cosmos/dart/lib/dart_reducer_worker_thread.rb +263 -0
  152. data/lib/cosmos/dart/lib/dart_tcpip_server_interface.rb +142 -0
  153. data/lib/cosmos/dart/processes/dart.rb +145 -0
  154. data/lib/cosmos/dart/processes/dart_decom_server.rb +39 -0
  155. data/lib/cosmos/dart/processes/dart_import.rb +63 -0
  156. data/lib/cosmos/dart/processes/dart_ingester.rb +92 -0
  157. data/lib/cosmos/dart/processes/dart_reducer.rb +27 -0
  158. data/lib/cosmos/dart/processes/dart_stream_server.rb +31 -0
  159. data/lib/cosmos/dart/processes/dart_worker.rb +37 -0
  160. data/lib/cosmos/dart/spec/dart/dart_common_spec.rb +333 -0
  161. data/lib/cosmos/dart/spec/dart/dart_database_cleaner_spec.rb +455 -0
  162. data/lib/cosmos/dart/spec/dart/dart_decom_query_spec.rb +153 -0
  163. data/lib/cosmos/dart/spec/dart/dart_decommutator_spec.rb +336 -0
  164. data/lib/cosmos/dart/spec/dart/dart_importer_spec.rb +83 -0
  165. data/lib/cosmos/dart/spec/dart/dart_logging_spec.rb +30 -0
  166. data/lib/cosmos/dart/spec/dart/dart_packet_log_writer_spec.rb +149 -0
  167. data/lib/cosmos/dart/spec/dart/dart_reducer_manager_spec.rb +289 -0
  168. data/lib/cosmos/dart/spec/dart/dart_tcpip_server_interface_spec.rb +241 -0
  169. data/lib/cosmos/dart/spec/rails_helper.rb +60 -0
  170. data/lib/cosmos/dart/spec/spec_helper.rb +139 -0
  171. data/lib/cosmos/gui/dialogs/about_dialog.rb +1 -1
  172. data/lib/cosmos/gui/dialogs/dart_dialog.rb +60 -0
  173. data/lib/cosmos/gui/dialogs/legal_dialog.rb +1 -0
  174. data/lib/cosmos/gui/dialogs/scroll_text_dialog.rb +0 -3
  175. data/lib/cosmos/gui/qt.rb +10 -1
  176. data/lib/cosmos/gui/text/completion.rb +10 -9
  177. data/lib/cosmos/gui/text/completion_text_edit.rb +16 -14
  178. data/lib/cosmos/gui/text/ruby_editor.rb +2 -2
  179. data/lib/cosmos/gui/widgets/dart_frame.rb +142 -0
  180. data/lib/cosmos/gui/widgets/dart_meta_frame.rb +119 -0
  181. data/lib/cosmos/gui/widgets/packet_log_frame.rb +42 -12
  182. data/lib/cosmos/interfaces/interface.rb +1 -2
  183. data/lib/cosmos/interfaces/protocols/crc_protocol.rb +26 -8
  184. data/lib/cosmos/interfaces/protocols/fixed_protocol.rb +8 -2
  185. data/lib/cosmos/interfaces/protocols/protocol.rb +2 -1
  186. data/lib/cosmos/interfaces/protocols/template_protocol.rb +1 -1
  187. data/lib/cosmos/interfaces/stream_interface.rb +1 -0
  188. data/lib/cosmos/interfaces/tcpip_server_interface.rb +2 -3
  189. data/lib/cosmos/io/json_drb_object.rb +1 -1
  190. data/lib/cosmos/io/json_rpc.rb +2 -1
  191. data/lib/cosmos/io/win32_serial_driver.rb +2 -9
  192. data/lib/cosmos/packet_logs/packet_log_writer.rb +1 -1
  193. data/lib/cosmos/packets/packet.rb +22 -12
  194. data/lib/cosmos/packets/packet_config.rb +2 -1
  195. data/lib/cosmos/packets/packet_item.rb +26 -24
  196. data/lib/cosmos/packets/parsers/macro_parser.rb +5 -2
  197. data/lib/cosmos/packets/parsers/packet_item_parser.rb +35 -17
  198. data/lib/cosmos/packets/parsers/packet_parser.rb +3 -10
  199. data/lib/cosmos/packets/parsers/xtce_converter.rb +21 -35
  200. data/lib/cosmos/packets/parsers/xtce_parser.rb +54 -46
  201. data/lib/cosmos/packets/structure.rb +10 -2
  202. data/lib/cosmos/packets/structure_item.rb +22 -8
  203. data/lib/cosmos/processors/statistics_processor.rb +2 -0
  204. data/lib/cosmos/script/api_shared.rb +13 -12
  205. data/lib/cosmos/script/cmd_tlm_server.rb +4 -0
  206. data/lib/cosmos/script/commands.rb +3 -15
  207. data/lib/cosmos/script/script.rb +69 -23
  208. data/lib/cosmos/streams/tcpip_client_stream.rb +2 -2
  209. data/lib/cosmos/system/system.rb +42 -25
  210. data/lib/cosmos/system/target.rb +6 -2
  211. data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +177 -36
  212. data/lib/cosmos/tools/cmd_sender/cmd_param_table_item_delegate.rb +3 -2
  213. data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +34 -8
  214. data/lib/cosmos/tools/cmd_sequence/cmd_sequence.rb +80 -25
  215. data/lib/cosmos/tools/cmd_tlm_server/api.rb +19 -4
  216. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +15 -14
  217. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +15 -9
  218. data/lib/cosmos/tools/cmd_tlm_server/gui/interfaces_tab.rb +1 -9
  219. data/lib/cosmos/tools/cmd_tlm_server/gui/logging_tab.rb +1 -6
  220. data/lib/cosmos/tools/cmd_tlm_server/gui/packets_tab.rb +1 -3
  221. data/lib/cosmos/tools/cmd_tlm_server/gui/replay_tab.rb +84 -7
  222. data/lib/cosmos/tools/cmd_tlm_server/gui/status_tab.rb +0 -1
  223. data/lib/cosmos/tools/cmd_tlm_server/gui/targets_tab.rb +1 -5
  224. data/lib/cosmos/tools/cmd_tlm_server/limits_groups_background_task.rb +3 -2
  225. data/lib/cosmos/tools/cmd_tlm_server/replay_backend.rb +159 -27
  226. data/lib/cosmos/tools/cmd_tlm_server/routers.rb +1 -1
  227. data/lib/cosmos/tools/config_editor/config_editor.rb +17 -52
  228. data/lib/cosmos/tools/config_editor/config_editor_frame.rb +0 -5
  229. data/lib/cosmos/tools/data_viewer/data_viewer.rb +111 -0
  230. data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +31 -18
  231. data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +12 -3
  232. data/lib/cosmos/tools/script_runner/script_runner.rb +27 -14
  233. data/lib/cosmos/tools/script_runner/script_runner_frame.rb +104 -37
  234. data/lib/cosmos/tools/table_manager/table_config.rb +1 -1
  235. data/lib/cosmos/tools/table_manager/table_item_parser.rb +4 -2
  236. data/lib/cosmos/tools/table_manager/table_manager.rb +0 -5
  237. data/lib/cosmos/tools/table_manager/table_manager_core.rb +0 -1
  238. data/lib/cosmos/tools/test_runner/test.rb +1 -3
  239. data/lib/cosmos/tools/test_runner/test_runner.rb +26 -15
  240. data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +290 -137
  241. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_config.rb +122 -25
  242. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_processor.rb +67 -0
  243. data/lib/cosmos/tools/tlm_grapher/data_object_editors/housekeeping_data_object_editor.rb +28 -0
  244. data/lib/cosmos/tools/tlm_grapher/data_object_editors/xy_data_object_editor.rb +36 -0
  245. data/lib/cosmos/tools/tlm_grapher/data_objects/data_object.rb +42 -3
  246. data/lib/cosmos/tools/tlm_grapher/data_objects/housekeeping_data_object.rb +88 -14
  247. data/lib/cosmos/tools/tlm_grapher/data_objects/linegraph_data_object.rb +2 -5
  248. data/lib/cosmos/tools/tlm_grapher/data_objects/singlexy_data_object.rb +2 -6
  249. data/lib/cosmos/tools/tlm_grapher/data_objects/xy_data_object.rb +74 -18
  250. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_config.rb +3 -7
  251. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_dart_thread.rb +159 -0
  252. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tool.rb +49 -2
  253. data/lib/cosmos/tools/tlm_viewer/screen.rb +3 -0
  254. data/lib/cosmos/tools/tlm_viewer/tlm_viewer_config.rb +0 -2
  255. data/lib/cosmos/tools/tlm_viewer/widgets.rb +1 -0
  256. data/lib/cosmos/tools/tlm_viewer/widgets/backgroundbutton_widget.rb +54 -0
  257. data/lib/cosmos/tools/tlm_viewer/widgets/button_widget.rb +5 -5
  258. data/lib/cosmos/top_level.rb +1 -0
  259. data/lib/cosmos/utilities/crc.rb +3 -0
  260. data/lib/cosmos/utilities/csv.rb +1 -0
  261. data/lib/cosmos/utilities/message_log.rb +2 -1
  262. data/lib/cosmos/utilities/simulated_target.rb +8 -8
  263. data/lib/cosmos/version.rb +5 -5
  264. data/lib/cosmos/win32/win32.rb +4 -10
  265. data/run_gui_tests.bat +2 -1
  266. data/spec/config/config_parser_spec.rb +4 -4
  267. data/spec/core_ext/array_spec.rb +1 -1
  268. data/spec/core_ext/exception_spec.rb +12 -12
  269. data/spec/core_ext/file_spec.rb +6 -6
  270. data/spec/core_ext/hash_spec.rb +1 -1
  271. data/spec/core_ext/socket_spec.rb +2 -2
  272. data/spec/core_ext/string_spec.rb +13 -13
  273. data/spec/core_ext/time_spec.rb +0 -2
  274. data/spec/gui/utilities/script_module_gui_spec.rb +3 -3
  275. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm.txt +6 -6
  276. data/spec/install/config/tools/cmd_tlm_server/cmd_tlm_server.txt +4 -0
  277. data/spec/interfaces/cmd_tlm_server_interface_spec.rb +6 -2
  278. data/spec/interfaces/interface_spec.rb +0 -1
  279. data/spec/interfaces/linc_interface_spec.rb +0 -5
  280. data/spec/interfaces/protocols/crc_protocol_spec.rb +201 -85
  281. data/spec/interfaces/protocols/fixed_protocol_spec.rb +33 -9
  282. data/spec/interfaces/protocols/length_protocol_spec.rb +1 -1
  283. data/spec/interfaces/protocols/override_protocol_spec.rb +6 -2
  284. data/spec/interfaces/protocols/preidentified_protocol_spec.rb +1 -5
  285. data/spec/interfaces/protocols/template_protocol_spec.rb +0 -1
  286. data/spec/interfaces/simulated_target_interface_spec.rb +5 -5
  287. data/spec/interfaces/udp_interface_spec.rb +2 -4
  288. data/spec/io/buffered_file_spec.rb +8 -12
  289. data/spec/io/json_drb_spec.rb +9 -9
  290. data/spec/io/json_rpc_spec.rb +4 -4
  291. data/spec/io/raw_logger_spec.rb +4 -3
  292. data/spec/packet_logs/packet_log_reader_spec.rb +3 -6
  293. data/spec/packet_logs/packet_log_writer_spec.rb +4 -4
  294. data/spec/packets/binary_accessor_spec.rb +5 -8
  295. data/spec/packets/commands_spec.rb +2 -2
  296. data/spec/packets/limits_spec.rb +2 -2
  297. data/spec/packets/packet_config_spec.rb +12 -0
  298. data/spec/packets/packet_item_limits_spec.rb +1 -1
  299. data/spec/packets/packet_item_spec.rb +9 -9
  300. data/spec/packets/packet_spec.rb +15 -5
  301. data/spec/packets/parsers/packet_item_parser_spec.rb +27 -0
  302. data/spec/packets/parsers/xtce_parser_spec.rb +27 -30
  303. data/spec/packets/structure_spec.rb +2 -1
  304. data/spec/packets/telemetry_spec.rb +3 -5
  305. data/spec/processors/statistics_processor_spec.rb +35 -0
  306. data/spec/script/cmd_tlm_server_spec.rb +4 -21
  307. data/spec/script/commands_disconnect_spec.rb +46 -58
  308. data/spec/script/commands_spec.rb +40 -61
  309. data/spec/script/limits_spec.rb +1 -21
  310. data/spec/script/script_spec.rb +32 -41
  311. data/spec/script/scripting_spec.rb +166 -185
  312. data/spec/script/telemetry_spec.rb +10 -5
  313. data/spec/script/tools_spec.rb +2 -24
  314. data/spec/spec_helper.rb +11 -5
  315. data/spec/system/system_spec.rb +17 -12
  316. data/spec/tools/cmd_tlm_server/api_spec.rb +21 -10
  317. data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +15 -16
  318. data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +0 -1
  319. data/spec/tools/cmd_tlm_server/cmd_tlm_server_spec.rb +16 -27
  320. data/spec/tools/cmd_tlm_server/commanding_spec.rb +2 -6
  321. data/spec/tools/cmd_tlm_server/connections_spec.rb +0 -4
  322. data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +13 -13
  323. data/spec/tools/cmd_tlm_server/interfaces_spec.rb +5 -9
  324. data/spec/tools/cmd_tlm_server/limits_groups_background_task_spec.rb +11 -3
  325. data/spec/tools/cmd_tlm_server/packet_logging_spec.rb +0 -4
  326. data/spec/tools/cmd_tlm_server/router_thread_spec.rb +5 -5
  327. data/spec/tools/cmd_tlm_server/routers_spec.rb +5 -9
  328. data/spec/tools/table_manager/table_config_spec.rb +0 -1
  329. data/spec/tools/table_manager/tablemanager_core_spec.rb +23 -23
  330. data/spec/tools/tlm_viewer/tlm_viewer_config_spec.rb +6 -4
  331. data/spec/top_level/top_level_spec.rb +9 -9
  332. data/spec/utilities/csv_spec.rb +2 -12
  333. data/spec/utilities/logger_spec.rb +6 -6
  334. data/spec/utilities/message_log_spec.rb +3 -11
  335. data/tasks/gemfile_stats.rake +2 -2
  336. metadata +167 -60
@@ -263,7 +263,11 @@ module Cosmos
263
263
  # @return (see #define_item)
264
264
  def append_item(name, bit_size, data_type, array_size = nil, endianness = @default_endianness, overflow = :ERROR)
265
265
  raise ArgumentError, "Can't append an item after a variably sized item" if !@fixed_size
266
- return define_item(name, @defined_length_bits, bit_size, data_type, array_size, endianness, overflow)
266
+ if data_type == :DERIVED
267
+ return define_item(name, 0, bit_size, data_type, array_size, endianness, overflow)
268
+ else
269
+ return define_item(name, @defined_length_bits, bit_size, data_type, array_size, endianness, overflow)
270
+ end
267
271
  end
268
272
 
269
273
  # Adds an item at the end of the structure. It adds the item to the items
@@ -273,7 +277,11 @@ module Cosmos
273
277
  # @return (see #define)
274
278
  def append(item)
275
279
  raise ArgumentError, "Can't append an item after a variably sized item" if !@fixed_size
276
- item.bit_offset = @defined_length_bits
280
+ if item.data_type == :DERIVED
281
+ item.bit_offset = 0
282
+ else
283
+ item.bit_offset = @defined_length_bits
284
+ end
277
285
  return define(item)
278
286
  end
279
287
 
@@ -287,6 +287,16 @@ module Cosmos
287
287
  hash
288
288
  end
289
289
 
290
+ def little_endian_bit_field?
291
+ return false unless @endianness == :LITTLE_ENDIAN
292
+ return false unless (@data_type == :INT || @data_type == :UINT)
293
+ # If we're not byte aligned we're a bit field
294
+ return true unless (@bit_offset % 8) == 0
295
+ # If we don't have an even number of bytes we're a bit field
296
+ return true unless even_byte_multiple()
297
+ false
298
+ end
299
+
290
300
  protected
291
301
 
292
302
  # Verifies overall integrity of the StructureItem by checking for correct
@@ -302,11 +312,8 @@ module Cosmos
302
312
  raise ArgumentError, "#{@name}: Can't define an item with bit_size #{@bit_size} greater than negative bit_offset #{@bit_offset}"
303
313
  end
304
314
  else
305
- # Check for byte alignment and byte multiple
306
- byte_aligned = ((@bit_offset % 8) == 0)
307
-
308
- # Verify little-endian bit fields
309
- if @endianness == :LITTLE_ENDIAN and (@data_type == :INT or @data_type == :UINT) and !(byte_aligned and (@bit_size == 8 or @bit_size == 16 or @bit_size == 32 or @bit_size == 64))
315
+ # Verify bounds on little-endian bit fields
316
+ if little_endian_bit_field?()
310
317
  # Bitoffset always refers to the most significant bit of a bitfield
311
318
  num_bytes = (((@bit_offset % 8) + @bit_size - 1) / 8) + 1
312
319
  upper_bound = @bit_offset / 8
@@ -319,6 +326,13 @@ module Cosmos
319
326
  end
320
327
  end
321
328
 
322
- end # class StructureItem
323
-
324
- end # module Cosmos
329
+ def even_byte_multiple
330
+ case @bit_size
331
+ when 8, 16, 32, 64
332
+ true
333
+ else
334
+ false
335
+ end
336
+ end
337
+ end
338
+ end
@@ -32,6 +32,8 @@ module Cosmos
32
32
  # See Processor#call
33
33
  def call(packet, buffer)
34
34
  value = packet.read(@item_name, @value_type, buffer)
35
+ # Don't process NaN or Infinite values
36
+ return if value.to_f.nan? || value.to_f.infinite?
35
37
  @samples << value
36
38
  @samples = @samples[-@samples_to_average..-1] if @samples.length > @samples_to_average
37
39
  mean, stddev = Math.stddev_sample(@samples)
@@ -114,7 +114,7 @@ module Cosmos
114
114
  if all_checks_ok
115
115
  Logger.info message
116
116
  else
117
- if $cmd_tlm_disconnect
117
+ if $disconnected_targets && $disconnected_targets.include?(target_name)
118
118
  Logger.error message
119
119
  else
120
120
  raise CheckError, message
@@ -128,7 +128,7 @@ module Cosmos
128
128
  Logger.info "#{check_str} was within #{range_str}"
129
129
  else
130
130
  message = "#{check_str} failed to be within #{range_str}"
131
- if $cmd_tlm_disconnect
131
+ if $disconnected_targets && $disconnected_targets.include?(target_name)
132
132
  Logger.error message
133
133
  else
134
134
  raise CheckError, message
@@ -167,7 +167,7 @@ module Cosmos
167
167
  Logger.info "CHECK: #{exp_to_eval} is TRUE"
168
168
  else
169
169
  message = "CHECK: #{exp_to_eval} is FALSE"
170
- if $cmd_tlm_disconnect
170
+ if $disconnected_targets
171
171
  Logger.error message
172
172
  else
173
173
  raise CheckError, message
@@ -279,7 +279,7 @@ module Cosmos
279
279
  Logger.info "#{check_str} success #{with_value_str}"
280
280
  else
281
281
  message = "#{check_str} failed #{with_value_str}"
282
- if $cmd_tlm_disconnect
282
+ if $disconnected_targets && $disconnected_targets.include?(target_name)
283
283
  Logger.error message
284
284
  else
285
285
  raise CheckError, message
@@ -336,7 +336,7 @@ module Cosmos
336
336
  if success
337
337
  Logger.info message
338
338
  else
339
- if $cmd_tlm_disconnect
339
+ if $disconnected_targets && $disconnected_targets.include?(target_name)
340
340
  Logger.error message
341
341
  else
342
342
  raise CheckError, message
@@ -352,7 +352,7 @@ module Cosmos
352
352
  Logger.info "#{check_str} was within #{range_str}"
353
353
  else
354
354
  message = "#{check_str} failed to be within #{range_str}"
355
- if $cmd_tlm_disconnect
355
+ if $disconnected_targets && $disconnected_targets.include?(target_name)
356
356
  Logger.error message
357
357
  else
358
358
  raise CheckError, message
@@ -386,7 +386,7 @@ module Cosmos
386
386
  Logger.info "CHECK: #{exp_to_eval} is TRUE after waiting #{time} seconds"
387
387
  else
388
388
  message = "CHECK: #{exp_to_eval} is FALSE after waiting #{time} seconds"
389
- if $cmd_tlm_disconnect
389
+ if $disconnected_targets
390
390
  Logger.error message
391
391
  else
392
392
  raise CheckError, message
@@ -419,7 +419,7 @@ module Cosmos
419
419
  else
420
420
  message = "#{type}: #{target_name.upcase} #{packet_name.upcase} expected to be received #{num_packets} times but only received #{value - initial_count} times after waiting #{time} seconds"
421
421
  if check
422
- if $cmd_tlm_disconnect
422
+ if $disconnected_targets && $disconnected_targets.include?(target_name)
423
423
  Logger.error message
424
424
  else
425
425
  raise CheckError, message
@@ -505,7 +505,8 @@ module Cosmos
505
505
  begin
506
506
  file_text = File.read(path)
507
507
  rescue Exception => error
508
- raise "Error reading procedure file : #{path}"
508
+ msg = "Error reading procedure file '#{path}' due to #{error.message}."
509
+ raise $!, msg, $!.backtrace
509
510
  end
510
511
 
511
512
  if use_file_cache and File.exist?(cache_filename)
@@ -786,7 +787,7 @@ module Cosmos
786
787
 
787
788
  # sleep in a script - returns true if canceled mid sleep
788
789
  def cosmos_script_sleep(sleep_time = nil)
789
- return false if $cmd_tlm_disconnect
790
+ return false if $disconnected_targets
790
791
  if defined? ScriptRunnerFrame and ScriptRunnerFrame.instance
791
792
  sleep_time = 30000000 unless sleep_time # Handle infinite wait
792
793
  if sleep_time > 0.0
@@ -822,7 +823,7 @@ module Cosmos
822
823
  if eval(exp_to_eval)
823
824
  return true, value
824
825
  end
825
- break if Time.now.sys >= end_time || $cmd_tlm_disconnect
826
+ break if Time.now.sys >= end_time || ($disconnected_targets && $disconnected_targets.include?(target_name))
826
827
 
827
828
  delta = Time.now.sys - work_start
828
829
  sleep_time = polling_rate - delta
@@ -905,7 +906,7 @@ module Cosmos
905
906
  Logger.info "#{check_str} success #{value_str}"
906
907
  else
907
908
  message = "#{check_str} failed #{value_str}"
908
- if $cmd_tlm_disconnect
909
+ if $disconnected_targets && $disconnected_targets.include?(target_name)
909
910
  Logger.error message
910
911
  else
911
912
  raise CheckError, message
@@ -208,5 +208,9 @@ module Cosmos
208
208
  def get_output_logs_filenames(filter = '*tlm.bin')
209
209
  return $cmd_tlm_server.get_output_logs_filenames(filter)
210
210
  end
211
+
212
+ def get_saved_config(configuration_name = nil)
213
+ return $cmd_tlm_server.get_saved_config(configuration_name)
214
+ end
211
215
  end
212
216
  end
@@ -9,7 +9,6 @@
9
9
  # attribution addendums as found in the LICENSE.txt
10
10
 
11
11
  module Cosmos
12
-
13
12
  module Script
14
13
  private
15
14
 
@@ -33,25 +32,14 @@ module Cosmos
33
32
  no_hazardous = cmd.include?('no_hazardous') || cmd.include?('no_checks')
34
33
 
35
34
  begin
36
- if $cmd_tlm_disconnect
37
- # In disconnect mode we call API methods directly on the server
38
- target_name, cmd_name, cmd_params = $cmd_tlm_server.send(cmd, *args)
39
- else
40
- # In connected mode we forward method calls through the JsonDrb object
41
- # so we must call method_missing
42
- target_name, cmd_name, cmd_params = $cmd_tlm_server.method_missing(cmd, *args)
43
- end
35
+ target_name, cmd_name, cmd_params = $cmd_tlm_server.method_missing(cmd, *args)
44
36
  _log_cmd(target_name, cmd_name, cmd_params, raw, no_range, no_hazardous)
45
37
  rescue HazardousError => e
46
38
  ok_to_proceed = prompt_for_hazardous(e.target_name,
47
39
  e.cmd_name,
48
40
  e.hazardous_description)
49
41
  if ok_to_proceed
50
- if $cmd_tlm_disconnect
51
- target_name, cmd_name, cmd_params = $cmd_tlm_server.send(cmd_no_hazardous, *args)
52
- else
53
- target_name, cmd_name, cmd_params = $cmd_tlm_server.method_missing(cmd_no_hazardous, *args)
54
- end
42
+ target_name, cmd_name, cmd_params = $cmd_tlm_server.method_missing(cmd_no_hazardous, *args)
55
43
  _log_cmd(target_name, cmd_name, cmd_params, raw, no_range, no_hazardous)
56
44
  else
57
45
  retry unless prompt_for_script_abort()
@@ -181,7 +169,7 @@ module Cosmos
181
169
  # Returns the buffer from the most recent specified command
182
170
  def get_cmd_buffer(target_name, command_name)
183
171
  return $cmd_tlm_server.get_cmd_buffer(target_name, command_name)
184
- end
172
+ end
185
173
 
186
174
  end # module Script
187
175
 
@@ -20,14 +20,68 @@ require 'cosmos/script/scripting'
20
20
  require 'cosmos/script/tools'
21
21
 
22
22
  $cmd_tlm_server = nil
23
- $cmd_tlm_disconnect = false
23
+ $disconnected_targets = nil
24
24
  $cmd_tlm_replay_mode = false
25
25
 
26
26
  module Cosmos
27
+ # Error raised by the API when a check fails
27
28
  class CheckError < RuntimeError; end
29
+ # Error raised when a Script should be stopped
28
30
  class StopScript < StandardError; end
31
+ # Error raised when a TestCase should be skipped by TestRunner
29
32
  class SkipTestCase < StandardError; end
30
33
 
34
+ # Provides a proxy to both a disconnected CmdTlmServer instance and the real
35
+ # JsonDRbObject which communicates with the real CmdTlmServer. If targets
36
+ # are disconnected their method calls are forwarded to the disconnected
37
+ # CmdTlmServer while all other calls are forwarded through to the real
38
+ # server by the JsonDRbObject.
39
+ class ServerProxy
40
+ # Creates a disconnected CmdTlmServer object if there are any
41
+ # $disconnected_targets defined. Also creates a JsonDRbObject
42
+ # connected to Replay (if $cmd_tlm_replay_mode) or to the
43
+ # Command and Telemetry Server.
44
+ def initialize(config_file)
45
+ if $disconnected_targets
46
+ # Start up a standalone CTS in disconnected mode
47
+ @disconnected = CmdTlmServer.new(config_file, false, true)
48
+ end
49
+ # Start a Json connect to the real server
50
+ if $cmd_tlm_replay_mode
51
+ @cmd_tlm_server = JsonDRbObject.new(System.connect_hosts['REPLAY_API'], System.ports['REPLAY_API'])
52
+ else
53
+ @cmd_tlm_server = JsonDRbObject.new(System.connect_hosts['CTS_API'], System.ports['CTS_API'])
54
+ end
55
+ end
56
+
57
+ # Ruby method which captures any method calls on this object. This allows
58
+ # us to proxy the methods to either the disconnected CmdTlmServer object
59
+ # or to the real server through the JsonDRbObject.
60
+ def method_missing(method_name, *method_params)
61
+ if $disconnected_targets && method_params[0].is_a?(String)
62
+ if method_params.length == 1
63
+ target = method_params[0].split(" ")[0]
64
+ else
65
+ target = method_params[0]
66
+ end
67
+ if $disconnected_targets.include?(target)
68
+ return @disconnected.send(method_name, *method_params)
69
+ end
70
+ end
71
+ # Must call shutdown and disconnect on the JsonDrbObject itself
72
+ # to avoid it being sent to the CmdTlmServer
73
+ case method_name
74
+ when :shutdown
75
+ @cmd_tlm_server.shutdown
76
+ @disconnected.stop if @disconnected
77
+ when :disconnect
78
+ @cmd_tlm_server.disconnect
79
+ else
80
+ @cmd_tlm_server.method_missing(method_name, *method_params)
81
+ end
82
+ end
83
+ end
84
+
31
85
  module Script
32
86
  # All methods are private so they can only be called by themselves and not
33
87
  # on another object. This is important for the JsonDrbObject class which we
@@ -40,43 +94,36 @@ module Cosmos
40
94
 
41
95
  # Called when this module is mixed in using "include Cosmos::Script"
42
96
  def self.included(base)
43
- $cmd_tlm_disconnect = false
97
+ $disconnected_targets = nil
44
98
  $cmd_tlm_replay_mode = false
45
99
  $cmd_tlm_server = nil
46
100
  initialize_script_module()
47
101
  end
48
102
 
49
103
  def initialize_script_module(config_file = CmdTlmServer::DEFAULT_CONFIG_FILE)
50
- if $cmd_tlm_disconnect
51
- # Start up a standalone CTS in disconnected mode
52
- $cmd_tlm_server = CmdTlmServer.new(config_file, false, true)
53
- else
54
- # Start a Json connect to the real server
55
- if $cmd_tlm_replay_mode
56
- $cmd_tlm_server = JsonDRbObject.new(System.connect_hosts['REPLAY_API'], System.ports['REPLAY_API'])
57
- else
58
- $cmd_tlm_server = JsonDRbObject.new(System.connect_hosts['CTS_API'], System.ports['CTS_API'])
59
- end
60
- end
104
+ shutdown_cmd_tlm()
105
+ $cmd_tlm_server = ServerProxy.new(config_file)
61
106
  end
62
107
 
63
108
  def shutdown_cmd_tlm
64
- $cmd_tlm_server.shutdown if $cmd_tlm_server && !$cmd_tlm_disconnect
109
+ $cmd_tlm_server.shutdown if $cmd_tlm_server
65
110
  end
66
111
 
67
- def set_cmd_tlm_disconnect(disconnect = false, config_file = CmdTlmServer::DEFAULT_CONFIG_FILE)
68
- if disconnect != $cmd_tlm_disconnect
69
- $cmd_tlm_disconnect = disconnect
70
- initialize_script_module(config_file)
71
- end
112
+ def set_disconnected_targets(targets, config_file = CmdTlmServer::DEFAULT_CONFIG_FILE)
113
+ $disconnected_targets = targets
114
+ initialize_script_module(config_file)
72
115
  end
73
116
 
74
- def get_cmd_tlm_disconnect
75
- return $cmd_tlm_disconnect
117
+ def get_disconnected_targets
118
+ return $disconnected_targets
119
+ end
120
+
121
+ def clear_disconnected_targets
122
+ $disconnected_targets = nil
76
123
  end
77
124
 
78
125
  def script_disconnect
79
- $cmd_tlm_server.disconnect if $cmd_tlm_server && !$cmd_tlm_disconnect
126
+ $cmd_tlm_server.disconnect if $cmd_tlm_server
80
127
  end
81
128
 
82
129
  def set_replay_mode(replay_mode)
@@ -89,6 +136,5 @@ module Cosmos
89
136
  def get_replay_mode
90
137
  $cmd_tlm_replay_mode
91
138
  end
92
-
93
139
  end
94
140
  end
@@ -38,8 +38,8 @@ module Cosmos
38
38
  @read_port = ConfigParser.handle_nil(read_port)
39
39
  @read_port = Integer(read_port) if @read_port
40
40
 
41
- write_addr = nil
42
- read_addr = nil
41
+ @write_addr = nil
42
+ @read_addr = nil
43
43
  begin
44
44
  @write_addr = Socket.pack_sockaddr_in(@write_port, @hostname) if @write_port
45
45
  @read_addr = Socket.pack_sockaddr_in(@read_port, @hostname) if @read_port
@@ -73,11 +73,11 @@ module Cosmos
73
73
  instance_attr_reader :additional_md5_files
74
74
 
75
75
  # Known COSMOS ports
76
- KNOWN_PORTS = ['CTS_API', 'TLMVIEWER_API', 'CTS_PREIDENTIFIED', 'CTS_CMD_ROUTER', 'REPLAY_API', 'REPLAY_PREIDENTIFIED', 'REPLAY_CMD_ROUTER']
76
+ KNOWN_PORTS = ['CTS_API', 'TLMVIEWER_API', 'CTS_PREIDENTIFIED', 'CTS_CMD_ROUTER', 'REPLAY_API', 'REPLAY_PREIDENTIFIED', 'REPLAY_CMD_ROUTER', 'DART_STREAM', 'DART_DECOM']
77
77
  # Known COSMOS hosts
78
- KNOWN_HOSTS = ['CTS_API', 'TLMVIEWER_API', 'CTS_PREIDENTIFIED', 'CTS_CMD_ROUTER', 'REPLAY_API', 'REPLAY_PREIDENTIFIED', 'REPLAY_CMD_ROUTER']
78
+ KNOWN_HOSTS = ['CTS_API', 'TLMVIEWER_API', 'CTS_PREIDENTIFIED', 'CTS_CMD_ROUTER', 'REPLAY_API', 'REPLAY_PREIDENTIFIED', 'REPLAY_CMD_ROUTER', 'DART_STREAM', 'DART_DECOM']
79
79
  # Known COSMOS paths
80
- KNOWN_PATHS = ['LOGS', 'TMP', 'SAVED_CONFIG', 'TABLES', 'HANDBOOKS', 'PROCEDURES', 'SEQUENCES']
80
+ KNOWN_PATHS = ['LOGS', 'TMP', 'SAVED_CONFIG', 'TABLES', 'HANDBOOKS', 'PROCEDURES', 'SEQUENCES', 'DART_DATA', 'DART_LOGS']
81
81
 
82
82
  @@instance = nil
83
83
  @@instance_mutex = Mutex.new
@@ -252,13 +252,17 @@ module Cosmos
252
252
  when 'DEFAULT_PACKET_LOG_WRITER'
253
253
  usage = "#{keyword} <FILENAME> <Specific Parameters>"
254
254
  parser.verify_num_parameters(1, nil, usage)
255
- @default_packet_log_writer = Cosmos.require_class(parameters[0])
255
+ Cosmos.disable_warnings do
256
+ @default_packet_log_writer = Cosmos.require_class(parameters[0])
257
+ end
256
258
  @default_packet_log_writer_params = parameters[1..-1] if parameters.size > 1
257
259
 
258
260
  when 'DEFAULT_PACKET_LOG_READER'
259
261
  usage = "#{keyword} <FILENAME> <Specific Parameters>"
260
262
  parser.verify_num_parameters(1, nil, usage)
261
- @default_packet_log_reader = Cosmos.require_class(parameters[0])
263
+ Cosmos.disable_warnings do
264
+ @default_packet_log_reader = Cosmos.require_class(parameters[0])
265
+ end
262
266
  @default_packet_log_reader_params = parameters[1..-1] if parameters.size > 1
263
267
 
264
268
  when 'ENABLE_SOUND'
@@ -429,8 +433,6 @@ module Cosmos
429
433
  end # parser.parse_file
430
434
  end
431
435
 
432
-
433
-
434
436
  # Load the specified configuration by iterating through the SAVED_CONFIG
435
437
  # directory looking for a matching MD5 sum. Updates the internal state so
436
438
  # subsequent commands and telemetry methods return the new configuration.
@@ -439,6 +441,11 @@ module Cosmos
439
441
  # configuration. Pass nil to load the default configuration.
440
442
  # @return [String, Exception/nil] The actual configuration loaded
441
443
  def load_configuration(name = nil)
444
+ unless @config
445
+ # Ensure packets have been lazy loaded
446
+ System.commands
447
+ end
448
+
442
449
  if name && @config
443
450
  # Make sure they're requesting something other than the current
444
451
  # configuration.
@@ -473,8 +480,6 @@ module Cosmos
473
480
  end
474
481
  end
475
482
  else
476
- # Ensure packets have been lazy loaded
477
- System.commands
478
483
  update_config(@initial_config)
479
484
  end
480
485
  return @config.name, nil
@@ -487,7 +492,7 @@ module Cosmos
487
492
 
488
493
  # Resets the System's internal state to defaults.
489
494
  #
490
- # @params [String] Path to system.txt config file to process. Defaults to config/system/system.txt
495
+ # @param filename [String] Path to system.txt config file to process. Defaults to config/system/system.txt
491
496
  def reset_variables(filename = nil)
492
497
  @targets = {}
493
498
  @targets['UNKNOWN'] = Target.new('UNKNOWN')
@@ -516,6 +521,8 @@ module Cosmos
516
521
  @ports['REPLAY_API'] = 7877
517
522
  @ports['REPLAY_PREIDENTIFIED'] = 7879
518
523
  @ports['REPLAY_CMD_ROUTER'] = 7880
524
+ @ports['DART_DECOM'] = 8777
525
+ @ports['DART_STREAM'] = 8779
519
526
 
520
527
  @listen_hosts = {}
521
528
  @listen_hosts['CTS_API'] = '127.0.0.1'
@@ -527,6 +534,8 @@ module Cosmos
527
534
  # Localhost would be more secure but historically these are open to allow for chaining servers by default
528
535
  @listen_hosts['REPLAY_PREIDENTIFIED'] = '0.0.0.0'
529
536
  @listen_hosts['REPLAY_CMD_ROUTER'] = '0.0.0.0'
537
+ @listen_hosts['DART_STREAM'] = '0.0.0.0'
538
+ @listen_hosts['DART_DECOM'] = '0.0.0.0'
530
539
 
531
540
  @connect_hosts = {}
532
541
  @connect_hosts['CTS_API'] = '127.0.0.1'
@@ -536,6 +545,8 @@ module Cosmos
536
545
  @connect_hosts['REPLAY_API'] = '127.0.0.1'
537
546
  @connect_hosts['REPLAY_PREIDENTIFIED'] = '127.0.0.1'
538
547
  @connect_hosts['REPLAY_CMD_ROUTER'] = '127.0.0.1'
548
+ @connect_hosts['DART_STREAM'] = '127.0.0.1'
549
+ @connect_hosts['DART_DECOM'] = '127.0.0.1'
539
550
 
540
551
  @paths = {}
541
552
  @paths['LOGS'] = File.join(USERPATH, 'outputs', 'logs')
@@ -545,6 +556,8 @@ module Cosmos
545
556
  @paths['HANDBOOKS'] = File.join(USERPATH, 'outputs', 'handbooks')
546
557
  @paths['PROCEDURES'] = [File.join(USERPATH, 'procedures')]
547
558
  @paths['SEQUENCES'] = File.join(USERPATH, 'outputs', 'sequences')
559
+ @paths['DART_DATA'] = File.join(USERPATH, 'outputs', 'dart', 'data')
560
+ @paths['DART_LOGS'] = File.join(USERPATH, 'outputs', 'dart', 'logs')
548
561
 
549
562
  unless filename
550
563
  system_arg = false
@@ -575,15 +588,27 @@ module Cosmos
575
588
  self.instance.reset
576
589
  end
577
590
 
591
+ def find_configuration(name)
592
+ Cosmos.set_working_dir do
593
+ Dir.foreach(@paths['SAVED_CONFIG']) do |filename|
594
+ full_path = File.join(@paths['SAVED_CONFIG'], filename)
595
+ if File.exist?(full_path) && File.basename(filename, ".*")[-32..-1] == name
596
+ return full_path
597
+ end
598
+ end
599
+ end
600
+ nil
601
+ end
602
+
578
603
  protected
579
604
 
580
- def unzip(zip_file)
581
- zip_dir = File.join(@paths['TMP'], File.basename(zip_file, ".*"))
605
+ def unzip(zip_file_name)
606
+ zip_dir = File.join(@paths['TMP'], File.basename(zip_file_name, ".*"))
582
607
  # Only unzip if we have to. We assume the unzipped directory structure is
583
608
  # intact. If not they'll get a popop with the errors encountered when
584
609
  # loading the configuration.
585
610
  unless File.exist? zip_dir
586
- Zip::File.open(zip_file) do |zip_file|
611
+ Zip::File.open(zip_file_name) do |zip_file|
587
612
  zip_file.each do |entry|
588
613
  path = File.join(@paths['TMP'], entry.name)
589
614
  FileUtils.mkdir_p(File.dirname(path))
@@ -656,18 +681,6 @@ module Cosmos
656
681
  @telemetry.reset if current_config != config
657
682
  end
658
683
 
659
- def find_configuration(name)
660
- Cosmos.set_working_dir do
661
- Dir.foreach(@paths['SAVED_CONFIG']) do |filename|
662
- full_path = File.join(@paths['SAVED_CONFIG'], filename)
663
- if File.exist?(full_path) && File.basename(filename, ".*")[-32..-1] == name
664
- return full_path
665
- end
666
- end
667
- end
668
- nil
669
- end
670
-
671
684
  def save_configuration
672
685
  Cosmos.set_working_dir do
673
686
  configuration = find_configuration(@config.name)
@@ -707,6 +720,7 @@ module Cosmos
707
720
  end
708
721
  end
709
722
  end
723
+ File.chmod(0444, configuration) # Mark readonly
710
724
  rescue Exception => error
711
725
  Logger.error "Problem saving configuration to #{configuration}: #{error.class}:#{error.message}\n#{error.backtrace.join("\n")}\n"
712
726
  end
@@ -831,6 +845,8 @@ module Cosmos
831
845
  tlm_meta.write('RUBY_VERSION', "#{RUBY_VERSION}p#{RUBY_PATCHLEVEL}")
832
846
 
833
847
  cmd_meta.buffer = tlm_meta.buffer
848
+ cmd_meta.received_time = Time.now.sys
849
+ tlm_meta.received_time = Time.now.sys
834
850
  end
835
851
 
836
852
  def build_cmd_system_meta
@@ -848,6 +864,7 @@ module Cosmos
848
864
 
849
865
  def build_tlm_system_meta
850
866
  tlm_meta = Packet.new('SYSTEM', 'META', :BIG_ENDIAN)
867
+ tlm_meta.define_reserved_items()
851
868
  item = tlm_meta.append_item('PKTID', 8, :UINT, nil, :BIG_ENDIAN, :ERROR, nil, nil, nil, 1)
852
869
  item.description = 'Packet Id'
853
870
  item.meta["READ_ONLY"] = []