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
@@ -30,7 +30,8 @@ class Dart
30
30
  # streamed from the packet log binary file
31
31
  # 4. Decom Server - JSON DRB server which handles requests for decommutated
32
32
  # or reduced data from the database
33
- # 5..n Worker - Decommutates data from the packet log binary file into the DB
33
+ # 5. Master - Hands out packets to be decommutated by workers
34
+ # 6..n Worker - Decommutates data from the packet log binary file into the DB
34
35
  def run
35
36
  Cosmos::Logger.level = Cosmos::Logger::INFO
36
37
  dart_logging = DartLogging.new('dart')
@@ -53,7 +54,8 @@ class Dart
53
54
  [ruby_process_name, File.join(__dir__, 'dart_ingester.rb')],
54
55
  [ruby_process_name, File.join(__dir__, 'dart_reducer.rb')],
55
56
  [ruby_process_name, File.join(__dir__, 'dart_stream_server.rb')],
56
- [ruby_process_name, File.join(__dir__, 'dart_decom_server.rb')]
57
+ [ruby_process_name, File.join(__dir__, 'dart_decom_server.rb')],
58
+ [ruby_process_name, File.join(__dir__, 'dart_master.rb')]
57
59
  ]
58
60
 
59
61
  num_workers.times do |index|
@@ -25,9 +25,9 @@ Cosmos.catch_fatal_exception do
25
25
  json_drb.method_whitelist = ['query', 'item_names', 'dart_status', 'clear_errors']
26
26
  begin
27
27
  json_drb.start_service(Cosmos::System.listen_hosts['DART_DECOM'],
28
- Cosmos::System.ports['DART_DECOM'], DartDecomQuery.new)
29
- rescue Exception
30
- raise Cosmos::FatalError.new("Error starting JsonDRb on port #{Cosmos::System.ports['DART_DECOM']}.\nPerhaps another DART Decom Server is already running?")
28
+ Cosmos::System.ports['DART_DECOM'], DartDecomQuery.new, 1000, Cosmos::System)
29
+ rescue Exception => error
30
+ raise Cosmos::FatalError.new("Error starting JsonDRb on port #{Cosmos::System.ports['DART_DECOM']}.\nPerhaps another DART Decom Server is already running?\n#{error.formatted}")
31
31
  end
32
32
  ["TERM", "INT"].each {|sig| Signal.trap(sig) {exit}}
33
33
  Cosmos::Logger.info("Dart Decom Server Started...")
@@ -16,18 +16,57 @@ require 'dart_logging'
16
16
  # Handles packets by writing them to the dart log file. New SYSTEM META packets
17
17
  # cause a new log file to be started.
18
18
  class DartInterfaceThread < Cosmos::InterfaceThread
19
+ include DartCommon
20
+
19
21
  attr_writer :packet_log_writer
20
22
  attr_writer :log_type
21
-
23
+
22
24
  def handle_packet(packet)
23
25
  if packet.target_name == 'SYSTEM'.freeze and packet.packet_name == 'META'.freeze
24
26
  Cosmos::Logger.info("#{@log_type}: #{packet.target_name} #{packet.packet_name}")
27
+
28
+ # Manually read the configuration from the buffer because the packet might not be identified if
29
+ # identify_and_define is false
30
+ buffer = packet.buffer(false)
31
+ if buffer.length >= 33
32
+ system_config_name = Cosmos::BinaryAccessor.read(8, 256, :STRING, buffer, :BIG_ENDIAN)
33
+ # Switch to this system_config
34
+ begin
35
+ switch_and_get_system_config(system_config_name)
36
+ rescue Exception => e
37
+ Cosmos::Logger.error(e.formatted)
38
+ Cosmos::Logger.error("Could not load system_config: #{system_config_name}")
39
+ end
40
+ end
41
+
25
42
  # Update Current Value Table Used By Packet Log Writer
26
43
  cvt_packet = Cosmos::System.telemetry.update!(packet.target_name, packet.packet_name, packet.buffer)
27
44
  cvt_packet.received_time = packet.received_time
45
+ cvt_packet.stored = packet.stored
46
+ cvt_packet.extra = packet.extra
47
+
28
48
  @packet_log_writer.start
29
49
  @packet_log_writer.write(cvt_packet)
30
50
  else
51
+ # Define the packet so that packet_time will work correctly
52
+ begin
53
+ packet_data = packet.buffer(false)
54
+ received_time = packet.received_time
55
+ stored = packet.stored
56
+ extra = packet.extra
57
+ if @log_type == :TLM
58
+ packet = Cosmos::System.telemetry.packet(packet.target_name, packet.packet_name)
59
+ else
60
+ packet = Cosmos::System.commands.packet(packet.target_name, packet.packet_name)
61
+ end
62
+ packet.buffer = packet_data
63
+ packet.received_time = received_time
64
+ packet.stored = stored
65
+ packet.extra = extra
66
+ rescue Exception => error
67
+ # Could not find a definition for this packet
68
+ Cosmos::Logger.error "Unknown packet #{target_name} #{packet_name}"
69
+ end
31
70
  @packet_log_writer.write(packet)
32
71
  end
33
72
  end
@@ -0,0 +1,44 @@
1
+ # encoding: ascii-8bit
2
+
3
+ # Copyright 2018 Ball Aerospace & Technologies Corp.
4
+ # All Rights Reserved.
5
+ #
6
+ # This program is free software; you can modify and/or redistribute it
7
+ # under the terms of the GNU General Public License
8
+ # as published by the Free Software Foundation; version 3 with
9
+ # attribution addendums as found in the LICENSE.txt
10
+
11
+ ENV['RAILS_ENV'] = 'production'
12
+ require File.expand_path('../../config/environment', __FILE__)
13
+ require 'dart_common'
14
+ require 'dart_master_query'
15
+
16
+ ples_per_request = ENV['DART_PLE_REQ_SIZE']
17
+ ples_per_request ||= 5
18
+ ples_per_request = ples_per_request.to_i
19
+
20
+ Cosmos.catch_fatal_exception do
21
+ DartCommon.handle_argv
22
+
23
+ Cosmos::Logger.level = Cosmos::Logger::INFO
24
+ dart_logging = DartLogging.new('dart_master')
25
+
26
+ json_drb = Cosmos::JsonDRb.new
27
+ json_drb.acl = Cosmos::System.acl if Cosmos::System.acl
28
+ begin
29
+ json_drb.method_whitelist = ['get_decom_ple_ids']
30
+ begin
31
+ json_drb.start_service(Cosmos::System.listen_hosts['DART_MASTER'],
32
+ Cosmos::System.ports['DART_MASTER'], DartMasterQuery.new(ples_per_request), 1000, Cosmos::System)
33
+ rescue Exception => error
34
+ raise Cosmos::FatalError.new("Error starting JsonDRb on port #{Cosmos::System.ports['DART_MASTER']}.\nPerhaps another DART Master is already running?\n#{error.formatted}")
35
+ end
36
+ ["TERM", "INT"].each {|sig| Signal.trap(sig) {exit}}
37
+ Cosmos::Logger.info("Dart Master Started...")
38
+ sleep(1) while true
39
+ rescue Interrupt
40
+ Cosmos::Logger.info("Dart Master Closing...")
41
+ json_drb.stop_service
42
+ dart_logging.stop
43
+ end
44
+ end
@@ -56,6 +56,8 @@ ENV['RAILS_ENV'] = 'production'
56
56
  require File.expand_path('../../config/environment', __FILE__)
57
57
  require 'dart_database_cleaner'
58
58
 
59
+ include DartCommon
60
+
59
61
  Cosmos.catch_fatal_exception do
60
62
  case action.downcase
61
63
  when 'showpleerrors'
@@ -77,6 +79,119 @@ Cosmos.catch_fatal_exception do
77
79
  Cosmos::Logger.level = Cosmos::Logger::INFO
78
80
  DartDatabaseCleaner.new.remove_packet_log(ARGV[1])
79
81
 
82
+ when 'showdatabase'
83
+ puts "Status:"
84
+ status = Status.last
85
+ puts " Updated At: #{status.updated_at.formatted}"
86
+ puts " Decom Count: #{status.decom_count}"
87
+ puts " Decom Error Count: #{status.decom_error_count}"
88
+ puts " Decom Message: #{status.decom_message}"
89
+ puts " Decom Message Time: #{status.decom_message_time.formatted}"
90
+ puts " Reduction Count: #{status.reduction_count}"
91
+ puts " Reduction Error Count: #{status.reduction_error_count}"
92
+ puts " Reduction Message: #{status.reduction_message}"
93
+ puts " Reduction Message Time: #{status.reduction_message_time}"
94
+ puts ""
95
+
96
+ puts "System Configs:"
97
+ SystemConfig.all.each do |system_config|
98
+ puts " #{sprintf("%6d", system_config.id)} #{system_config.name}"
99
+ end
100
+ puts ""
101
+
102
+ puts "Targets:"
103
+ Target.all.each do |target|
104
+ puts " #{sprintf("%6d", target.id)} #{target.name}"
105
+ end
106
+ puts ""
107
+
108
+ puts "Packets:"
109
+ Packet.all.each do |packet|
110
+ target = Target.find(packet.target_id)
111
+ puts " #{sprintf("%6d", packet.id)} #{target.name} #{packet.name} (#{packet.is_tlm ? "TLM" : "CMD"})"
112
+ end
113
+ puts ""
114
+
115
+ puts "Items:"
116
+ Item.find_each do |item|
117
+ packet = Packet.find(item.packet_id)
118
+ target = Target.find(packet.target_id)
119
+ puts " #{sprintf("%6d", item.id)} #{target.name} #{packet.name} #{item.name}"
120
+ end
121
+ puts ""
122
+
123
+ puts "Packet Logs:"
124
+ PacketLog.all.each do |packet_log|
125
+ puts " #{sprintf("%6d", packet_log.id)} #{packet_log.filename} (#{packet_log.is_tlm ? "TLM" : "CMD"}) #{packet_log.created_at.formatted}"
126
+ end
127
+ puts ""
128
+
129
+ puts "Packet Log Entry Count: #{PacketLogEntry.count}"
130
+ puts ""
131
+
132
+ puts "Packet Configs:"
133
+ PacketConfig.all.each do |packet_config|
134
+ packet = Packet.find(packet_config.packet_id)
135
+ target = Target.find(packet.target_id)
136
+ puts " #{sprintf("%6d", packet_config.id)} #{target.name} #{packet.name} (#{packet_config.name}) sysconfig:#{packet_config.first_system_config_id} maxindex:#{packet_config.max_table_index} ready:#{packet_config.ready} start:#{packet_config.start_time.formatted} end:#{packet_config.end_time.formatted}"
137
+ end
138
+ puts ""
139
+
140
+ value_type_lookup = {0 => "RAW", 1 => "CONVERTED", 2 => "RAW_CON"}
141
+ puts "Item to Decom Table Mappings:"
142
+ ItemToDecomTableMapping.find_each do |itdtm|
143
+ item = Item.find(itdtm.item_id)
144
+ packet = Packet.find(item.packet_id)
145
+ target = Target.find(packet.target_id)
146
+ puts " #{sprintf("%6d", itdtm.id)} #{target.name} #{packet.name} #{item.name} #{value_type_lookup[itdtm.value_type]} packet_config:#{itdtm.packet_config_id} item_index:#{itdtm.item_index} table_index:#{itdtm.table_index} reduced:#{itdtm.reduced}"
147
+ end
148
+ puts ""
149
+
150
+ puts "Decom and Reduced Tables:"
151
+ each_decom_and_reduced_table do |packet_config_id, table_index, decom_model, minute_model, hour_model, day_model|
152
+ puts " t#{decom_model.name.split("::")[1][1..-1]}: (#{decom_model.count} entries)"
153
+ ItemToDecomTableMapping.where("packet_config_id = ? and table_index = ?", packet_config_id, table_index).order("item_index ASC").each do |itdtm|
154
+ item = Item.find(itdtm.item_id)
155
+ packet = Packet.find(item.packet_id)
156
+ target = Target.find(packet.target_id)
157
+ puts " i#{itdtm.item_index} #{target.name} #{packet.name} #{item.name} #{value_type_lookup[itdtm.value_type]}"
158
+ end
159
+ puts ""
160
+ puts " t#{minute_model.name.split("::")[1][1..-1]}: (#{minute_model.count} entries)"
161
+ ItemToDecomTableMapping.where("packet_config_id = ? and table_index = ? and reduced = true", packet_config_id, table_index).order("item_index ASC").each do |itdtm|
162
+ item = Item.find(itdtm.item_id)
163
+ packet = Packet.find(item.packet_id)
164
+ target = Target.find(packet.target_id)
165
+ puts " i#{itdtm.item_index}max #{target.name} #{packet.name} #{item.name} #{value_type_lookup[itdtm.value_type]}"
166
+ puts " i#{itdtm.item_index}min #{target.name} #{packet.name} #{item.name} #{value_type_lookup[itdtm.value_type]}"
167
+ puts " i#{itdtm.item_index}avg #{target.name} #{packet.name} #{item.name} #{value_type_lookup[itdtm.value_type]}"
168
+ puts " i#{itdtm.item_index}stddev #{target.name} #{packet.name} #{item.name} #{value_type_lookup[itdtm.value_type]}"
169
+ end
170
+ puts ""
171
+ puts " t#{hour_model.name.split("::")[1][1..-1]}: (#{hour_model.count} entries)"
172
+ ItemToDecomTableMapping.where("packet_config_id = ? and table_index = ? and reduced = true", packet_config_id, table_index).order("item_index ASC").each do |itdtm|
173
+ item = Item.find(itdtm.item_id)
174
+ packet = Packet.find(item.packet_id)
175
+ target = Target.find(packet.target_id)
176
+ puts " i#{itdtm.item_index}max #{target.name} #{packet.name} #{item.name} #{value_type_lookup[itdtm.value_type]}"
177
+ puts " i#{itdtm.item_index}min #{target.name} #{packet.name} #{item.name} #{value_type_lookup[itdtm.value_type]}"
178
+ puts " i#{itdtm.item_index}avg #{target.name} #{packet.name} #{item.name} #{value_type_lookup[itdtm.value_type]}"
179
+ puts " i#{itdtm.item_index}stddev #{target.name} #{packet.name} #{item.name} #{value_type_lookup[itdtm.value_type]}"
180
+ end
181
+ puts ""
182
+ puts " t#{day_model.name.split("::")[1][1..-1]}: (#{day_model.count} entries)"
183
+ ItemToDecomTableMapping.where("packet_config_id = ? and table_index = ? and reduced = true", packet_config_id, table_index).order("item_index ASC").each do |itdtm|
184
+ item = Item.find(itdtm.item_id)
185
+ packet = Packet.find(item.packet_id)
186
+ target = Target.find(packet.target_id)
187
+ puts " i#{itdtm.item_index}max #{target.name} #{packet.name} #{item.name} #{value_type_lookup[itdtm.value_type]}"
188
+ puts " i#{itdtm.item_index}min #{target.name} #{packet.name} #{item.name} #{value_type_lookup[itdtm.value_type]}"
189
+ puts " i#{itdtm.item_index}avg #{target.name} #{packet.name} #{item.name} #{value_type_lookup[itdtm.value_type]}"
190
+ puts " i#{itdtm.item_index}stddev #{target.name} #{packet.name} #{item.name} #{value_type_lookup[itdtm.value_type]}"
191
+ end
192
+ puts ""
193
+ end
194
+
80
195
  when 'showpacketlogs'
81
196
  total_size = 0
82
197
  packet_logs = PacketLog.all
@@ -91,8 +206,8 @@ Cosmos.catch_fatal_exception do
91
206
  begin
92
207
  first_packet = reader.first
93
208
  last_packet = reader.last
94
- start_time = first_packet.received_time.formatted
95
- end_time = last_packet.received_time.formatted
209
+ start_time = first_packet.packet_time.formatted
210
+ end_time = last_packet.packet_time.formatted
96
211
  rescue
97
212
  if size == 128 or size == 0
98
213
  start_time = "EMPTY "
@@ -124,8 +239,8 @@ Cosmos.catch_fatal_exception do
124
239
  begin
125
240
  first_packet = reader.first
126
241
  last_packet = reader.last
127
- start_time = first_packet.received_time.formatted
128
- end_time = last_packet.received_time.formatted
242
+ start_time = first_packet.packet_time.formatted
243
+ end_time = last_packet.packet_time.formatted
129
244
  rescue
130
245
  if size == 128 or size == 0
131
246
  start_time = "EMPTY "
@@ -29,9 +29,9 @@ describe DartReducerManager do
29
29
  meta = Cosmos::System.telemetry.packet("SYSTEM", "META")
30
30
  meta.received_time = time
31
31
  hs_packet = Cosmos::System.telemetry.packet("INST", "HEALTH_STATUS")
32
- # 128 byte file header, SYSTEM META has 14 byte header + length of SYSTEM & META
33
- # INST HEALTH_STATUS has 14 byte header + length of INST & HEALTH_STATUS
34
- length = 128 + 24 + meta.length + entries * (31 + hs_packet.length)
32
+ # 128 byte file header, SYSTEM META has 15 byte header + length of SYSTEM & META
33
+ # INST HEALTH_STATUS has 15 byte header + length of INST & HEALTH_STATUS
34
+ length = 128 + 25 + meta.length + entries * (32 + hs_packet.length)
35
35
 
36
36
  writer = DartPacketLogWriter.new(
37
37
  :TLM, # Log telemetry
@@ -59,14 +59,16 @@ module Cosmos
59
59
  top_layout = Qt::HBoxLayout.new
60
60
  text_layout = Qt::VBoxLayout.new
61
61
 
62
- title_label = Qt::Label.new(tr(title))
62
+ title_label = Qt::Label.new(title)
63
63
  text_layout.addWidget(title_label)
64
- @packet_time = Qt::Label.new("Packet Received Time: ")
64
+ @packet_time = Qt::Label.new("Packet Time: ")
65
65
  text_layout.addWidget(@packet_time)
66
+ @received_time = Qt::Label.new("Received Time: ")
67
+ text_layout.addWidget(@received_time)
66
68
  top_layout.addLayout(text_layout)
67
69
  top_layout.addStretch(1)
68
70
 
69
- button = Qt::PushButton.new(tr("Pause"))
71
+ button = Qt::PushButton.new("Pause")
70
72
  top_layout.addWidget(button)
71
73
  button.connect(SIGNAL('clicked()')) do
72
74
  if button.text == "Pause"
@@ -113,8 +115,10 @@ module Cosmos
113
115
  packet = System.telemetry.packet(@target_name, @packet_name)
114
116
  end
115
117
  packet_data = packet.buffer
116
- packet_time = packet.received_time
117
- @packet_time.setText("Received Time: #{packet_time.formatted}") if packet_time
118
+ packet_time = packet.packet_time
119
+ @packet_time.setText("Packet Time: #{packet_time.formatted}") if packet_time
120
+ received_time = packet.received_time
121
+ @received_time.setText("Received Time: #{received_time.formatted}") if received_time
118
122
  position_x = @packet_data.horizontalScrollBar.value
119
123
  position_y = @packet_data.verticalScrollBar.value
120
124
  @packet_data.setPlainText(HEADER + packet_data.formatted)
@@ -36,56 +36,71 @@ module Cosmos
36
36
  @@instances << self
37
37
  end
38
38
 
39
+ def update_limits_checking
40
+ return unless @limits_checking_enabled_label
41
+ begin
42
+ limits_enabled = limits_enabled?(@target_name, @packet_name, @item_name)
43
+ rescue RuntimeError
44
+ # Error most likely due to LATEST packet - Ignore
45
+ limits_enabled = nil
46
+ end
47
+ # Check for nil because true and false are both valid values
48
+ unless limits_enabled.nil?
49
+ @limits_checking_enabled_label.setText("#{show_nil(limits_enabled)}")
50
+ end
51
+ end
52
+
39
53
  protected
40
54
 
41
55
  # Creates and populates the layout for the dialog
42
56
  def build_details_layout(item, cmd_tlm)
43
57
  details_layout = Qt::FormLayout.new
44
- details_layout.addRow("Bit Offset:", Qt::Label.new(tr("#{show_nil(item.bit_offset)}")))
45
- details_layout.addRow("Bit Size:", Qt::Label.new(tr("#{show_nil(item.bit_size)}")))
46
- details_layout.addRow("Data Type:", Qt::Label.new(tr("#{show_data_type(item.data_type)}")))
47
- details_layout.addRow("Array Size:", Qt::Label.new(tr("#{show_nil(item.array_size)}")))
58
+ details_layout.addRow("Bit Offset:", Qt::Label.new("#{show_nil(item.bit_offset)}"))
59
+ details_layout.addRow("Bit Size:", Qt::Label.new("#{show_nil(item.bit_size)}"))
60
+ details_layout.addRow("Data Type:", Qt::Label.new("#{show_data_type(item.data_type)}"))
61
+ details_layout.addRow("Array Size:", Qt::Label.new("#{show_nil(item.array_size)}"))
48
62
  if cmd_tlm == :CMD
49
63
  if item.range
50
- details_layout.addRow("Minimum:", Qt::Label.new(tr(item.range.first.to_s)))
51
- details_layout.addRow("Maximum:", Qt::Label.new(tr(item.range.last.to_s)))
64
+ details_layout.addRow("Minimum:", Qt::Label.new(item.range.first.to_s))
65
+ details_layout.addRow("Maximum:", Qt::Label.new(item.range.last.to_s))
52
66
  end
53
- details_layout.addRow("Default:", Qt::Label.new(tr("#{show_nil(item.default)}"))) if item.default
67
+ details_layout.addRow("Default:", Qt::Label.new("#{show_nil(item.default)}")) if item.default
54
68
  end
55
- details_layout.addRow("Format String:", Qt::Label.new(tr("#{show_nil(item.format_string)}")))
56
- details_layout.addRow("Read_Conversion:", Qt::Label.new(tr("#{show_conversion(item.read_conversion)}")))
57
- details_layout.addRow("Write_Conversion:", Qt::Label.new(tr("#{show_conversion(item.write_conversion)}")))
58
- details_layout.addRow("Id Value:", Qt::Label.new(tr("#{show_nil(item.id_value)}")))
59
- details_layout.addRow("Description:", Qt::Label.new(tr("#{show_nil(item.description)}")))
60
- details_layout.addRow("Units Full:", Qt::Label.new(tr("#{show_nil(item.units_full)}")))
61
- details_layout.addRow("Units Abbreviation:", Qt::Label.new(tr("#{show_nil(item.units)}")))
62
- details_layout.addRow("Endianness:", Qt::Label.new(tr("#{show_endianness(item.endianness)}")))
69
+ details_layout.addRow("Format String:", Qt::Label.new("#{show_nil(item.format_string)}"))
70
+ details_layout.addRow("Read_Conversion:", Qt::Label.new("#{show_conversion(item.read_conversion)}"))
71
+ details_layout.addRow("Write_Conversion:", Qt::Label.new("#{show_conversion(item.write_conversion)}"))
72
+ details_layout.addRow("Id Value:", Qt::Label.new("#{show_nil(item.id_value)}"))
73
+ details_layout.addRow("Description:", Qt::Label.new("#{show_nil(item.description)}"))
74
+ details_layout.addRow("Units Full:", Qt::Label.new("#{show_nil(item.units_full)}"))
75
+ details_layout.addRow("Units Abbreviation:", Qt::Label.new("#{show_nil(item.units)}"))
76
+ details_layout.addRow("Endianness:", Qt::Label.new("#{show_endianness(item.endianness)}"))
63
77
  if item.states
64
78
  details_layout.addRow(build_states_details(item))
65
79
  else
66
- details_layout.addRow("States:", Qt::Label.new(tr("None")))
80
+ details_layout.addRow("States:", Qt::Label.new("None"))
67
81
  end
68
82
  if cmd_tlm == :CMD
69
- details_layout.addRow("Required:", Qt::Label.new(tr(item.required.to_s)))
83
+ details_layout.addRow("Required:", Qt::Label.new(item.required.to_s))
70
84
  else
71
85
  limits = item.limits.values
72
86
  if limits
73
87
  details_layout.addRow(build_limits_details(limits))
74
88
  else
75
- details_layout.addRow(tr("Limits:"), Qt::Label.new("None"))
89
+ details_layout.addRow("Limits:", Qt::Label.new("None"))
76
90
  end
77
91
  if limits || item.state_colors
78
- details_layout.addRow(tr("Limits Checking Enabled:"), Qt::Label.new(tr("#{show_nil(item.limits.enabled)}")))
92
+ @limits_checking_enabled_label = Qt::Label.new("#{show_nil(item.limits.enabled)}")
93
+ details_layout.addRow("Limits Checking Enabled:", @limits_checking_enabled_label)
79
94
  end
80
95
  if limits
81
- details_layout.addRow(tr("Limits Persistence Setting:"), Qt::Label.new(tr("#{show_nil(item.limits.persistence_setting)}")))
82
- details_layout.addRow(tr("Limits Persistence Count:"), Qt::Label.new(tr("#{show_nil(item.limits.persistence_count)}")))
96
+ details_layout.addRow("Limits Persistence Setting:", Qt::Label.new("#{show_nil(item.limits.persistence_setting)}"))
97
+ details_layout.addRow("Limits Persistence Count:", Qt::Label.new("#{show_nil(item.limits.persistence_count)}"))
83
98
  end
84
99
  if item.meta.empty?
85
- details_layout.addRow(tr("Meta:"), Qt::Label.new("None"))
100
+ details_layout.addRow("Meta:", Qt::Label.new("None"))
86
101
  else
87
102
  item.meta.each do |key, value|
88
- details_layout.addRow(tr("Meta[#{key}]:"), Qt::Label.new(value.to_s))
103
+ details_layout.addRow("Meta[#{key}]:", Qt::Label.new(value.to_s))
89
104
  end
90
105
  end
91
106
  end
@@ -94,7 +109,7 @@ module Cosmos
94
109
 
95
110
  # Create the states details layout
96
111
  def build_states_details(item)
97
- states_details = Qt::GroupBox.new(tr("States"))
112
+ states_details = Qt::GroupBox.new("States")
98
113
  scroll_layout = Qt::VBoxLayout.new
99
114
  states_details.setLayout(scroll_layout)
100
115
  scroll_area = Qt::ScrollArea.new
@@ -104,11 +119,11 @@ module Cosmos
104
119
  scroll_area.setWidget(scroll_widget)
105
120
  states_layout = Qt::FormLayout.new
106
121
  scroll_widget.setLayout(states_layout)
107
- item.states.sort {|a, b| a[1] <=> b[1]}.each do |state_name, state_value|
122
+ item.states.sort {|a, b| a[1].to_i <=> b[1].to_i }.each do |state_name, state_value|
108
123
  if item.state_colors
109
- states_layout.addRow(tr("#{state_name}:"), Qt::Label.new(tr("#{state_value} #{item.state_colors[state_name]}")))
124
+ states_layout.addRow("#{state_name}:", Qt::Label.new("#{state_value} #{item.state_colors[state_name]}"))
110
125
  else
111
- states_layout.addRow(tr("#{state_name}:"), Qt::Label.new(tr("#{state_value}")))
126
+ states_layout.addRow("#{state_name}:", Qt::Label.new("#{state_value}"))
112
127
  end
113
128
  end
114
129
  # Figure out the how big the states layout wants to be and set the
@@ -124,7 +139,7 @@ module Cosmos
124
139
 
125
140
  # Create the limits details layout
126
141
  def build_limits_details(limits)
127
- limits_details = Qt::GroupBox.new(tr("Limits"))
142
+ limits_details = Qt::GroupBox.new("Limits")
128
143
  @limits_layout = Qt::FormLayout.new
129
144
  limits.each do |limits_set_name, limits_settings|
130
145
  if limits_settings[4] && limits_settings[5]
@@ -133,7 +148,7 @@ module Cosmos
133
148
  label = Qt::Label.new("RL/#{limits_settings[0]} YL/#{limits_settings[1]} YH/#{limits_settings[2]} RH/#{limits_settings[3]}")
134
149
  end
135
150
  @limits_labels[limits_set_name] = label
136
- @limits_layout.addRow(tr("#{limits_set_name}:"), label)
151
+ @limits_layout.addRow("#{limits_set_name}:", label)
137
152
  end
138
153
  limits_details.setLayout(@limits_layout)
139
154
  limits_details