cosmos 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +48 -0
- data/.travis.yml +5 -0
- data/Gemfile +5 -0
- data/Guardfile +27 -0
- data/LICENSE.txt +879 -0
- data/Manifest.txt +1112 -0
- data/README.md +42 -0
- data/Rakefile +214 -0
- data/autohotkey/config/data/attitude.bin +0 -0
- data/autohotkey/config/data/diamond.STL +58 -0
- data/autohotkey/config/data/groundoff.gif +0 -0
- data/autohotkey/config/data/groundon.gif +0 -0
- data/autohotkey/config/data/position.bin +0 -0
- data/autohotkey/config/data/satellite.gif +0 -0
- data/autohotkey/config/data/tada.wav +0 -0
- data/autohotkey/config/system/system.txt +34 -0
- data/autohotkey/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -0
- data/autohotkey/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -0
- data/autohotkey/config/targets/COSMOS/cmd_tlm_server.txt +6 -0
- data/autohotkey/config/targets/COSMOS/target.txt +5 -0
- data/autohotkey/config/targets/INST/cmd_tlm/inst_cmds.txt +121 -0
- data/autohotkey/config/targets/INST/cmd_tlm/inst_tlm.txt +247 -0
- data/autohotkey/config/targets/INST/cmd_tlm_server.txt +5 -0
- data/autohotkey/config/targets/INST/doc/README.txt +1 -0
- data/autohotkey/config/targets/INST/lib/example_limits_response.rb +30 -0
- data/autohotkey/config/targets/INST/lib/sim_inst.rb +294 -0
- data/autohotkey/config/targets/INST/screens/adcs.txt +46 -0
- data/autohotkey/config/targets/INST/screens/array.txt +7 -0
- data/autohotkey/config/targets/INST/screens/block.txt +8 -0
- data/autohotkey/config/targets/INST/screens/commanding.txt +30 -0
- data/autohotkey/config/targets/INST/screens/graphs.txt +14 -0
- data/autohotkey/config/targets/INST/screens/ground.txt +25 -0
- data/autohotkey/config/targets/INST/screens/health_status.txt +33 -0
- data/autohotkey/config/targets/INST/screens/hs.txt +49 -0
- data/autohotkey/config/targets/INST/screens/image.txt +21 -0
- data/autohotkey/config/targets/INST/screens/latest.txt +23 -0
- data/autohotkey/config/targets/INST/screens/mech.txt +25 -0
- data/autohotkey/config/targets/INST/screens/other.txt +25 -0
- data/autohotkey/config/targets/INST/screens/params.txt +25 -0
- data/autohotkey/config/targets/INST/screens/tabs.txt +68 -0
- data/autohotkey/config/targets/INST/target.txt +27 -0
- data/autohotkey/config/targets/META/cmd_tlm/meta_cmd.txt +10 -0
- data/autohotkey/config/targets/META/cmd_tlm/meta_tlm.txt +9 -0
- data/autohotkey/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -0
- data/autohotkey/config/targets/SYSTEM/screens/error.txt +11 -0
- data/autohotkey/config/tools/cmd_sender/cmd_sender.txt +1 -0
- data/autohotkey/config/tools/cmd_tlm_server/cmd_tlm_server.txt +22 -0
- data/autohotkey/config/tools/data_viewer/data_viewer.txt +11 -0
- data/autohotkey/config/tools/handbook_creator/default_toc.xsl +59 -0
- data/autohotkey/config/tools/handbook_creator/handbook_creator.txt +49 -0
- data/autohotkey/config/tools/handbook_creator/templates/command_packets.html.erb +86 -0
- data/autohotkey/config/tools/handbook_creator/templates/command_toc.html.erb +38 -0
- data/autohotkey/config/tools/handbook_creator/templates/footer.html.erb +9 -0
- data/autohotkey/config/tools/handbook_creator/templates/header.html.erb +25 -0
- data/autohotkey/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -0
- data/autohotkey/config/tools/handbook_creator/templates/nav.html.erb +27 -0
- data/autohotkey/config/tools/handbook_creator/templates/overview.html.erb +1 -0
- data/autohotkey/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -0
- data/autohotkey/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -0
- data/autohotkey/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -0
- data/autohotkey/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -0
- data/autohotkey/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -0
- data/autohotkey/config/tools/handbook_creator/templates/title.html.erb +1 -0
- data/autohotkey/config/tools/launcher/launcher.txt +38 -0
- data/autohotkey/config/tools/limits_monitor/README.txt +1 -0
- data/autohotkey/config/tools/opengl_builder/error.txt +1 -0
- data/autohotkey/config/tools/script_runner/script_runner.txt +3 -0
- data/autohotkey/config/tools/table_manager/ConfigTables_def.txt +8 -0
- data/autohotkey/config/tools/table_manager/OneDimensionalTable_def.txt +19 -0
- data/autohotkey/config/tools/table_manager/TwoDimensionalTable_def.txt +248 -0
- data/autohotkey/config/tools/test_runner/test_runner.txt +8 -0
- data/autohotkey/config/tools/test_runner/test_runner2.txt +11 -0
- data/autohotkey/config/tools/test_runner/test_runner3.txt +7 -0
- data/autohotkey/config/tools/test_runner/test_runner4.txt +1 -0
- data/autohotkey/config/tools/tlm_extractor/tlm_extractor.txt +14 -0
- data/autohotkey/config/tools/tlm_extractor/tlm_extractor2.txt +9 -0
- data/autohotkey/config/tools/tlm_grapher/README.txt +1 -0
- data/autohotkey/config/tools/tlm_grapher/bad.txt +50 -0
- data/autohotkey/config/tools/tlm_grapher/temp1-4.txt +51 -0
- data/autohotkey/config/tools/tlm_grapher/test2.txt +111 -0
- data/autohotkey/config/tools/tlm_viewer/tlm_viewer.txt +24 -0
- data/autohotkey/config/tools/tlm_viewer/tlm_viewer2.txt +4 -0
- data/autohotkey/config/tools/tlm_viewer/tlm_viewer3.txt +3 -0
- data/autohotkey/lib/example_background_task.rb +42 -0
- data/autohotkey/lib/user_version.rb +3 -0
- data/autohotkey/outputs/handbooks/assets/css/bootstrap-theme.css +397 -0
- data/autohotkey/outputs/handbooks/assets/css/bootstrap-theme.min.css +7 -0
- data/autohotkey/outputs/handbooks/assets/css/bootstrap.css +7118 -0
- data/autohotkey/outputs/handbooks/assets/css/bootstrap.min.css +7 -0
- data/autohotkey/outputs/handbooks/assets/fonts/glyphicons-halflings-regular.eot +0 -0
- data/autohotkey/outputs/handbooks/assets/fonts/glyphicons-halflings-regular.svg +229 -0
- data/autohotkey/outputs/handbooks/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/autohotkey/outputs/handbooks/assets/fonts/glyphicons-halflings-regular.woff +0 -0
- data/autohotkey/outputs/handbooks/assets/js/bootstrap.js +2006 -0
- data/autohotkey/outputs/handbooks/assets/js/bootstrap.min.js +7 -0
- data/autohotkey/outputs/logs/bigtlm.bin +0 -0
- data/autohotkey/outputs/logs/cmd.bin +0 -0
- data/autohotkey/outputs/logs/tlm.bin +0 -0
- data/autohotkey/outputs/saved_config/README.txt +1 -0
- data/autohotkey/outputs/tables/README.txt +1 -0
- data/autohotkey/outputs/tmp/README.txt +1 -0
- data/autohotkey/procedures/clear_util.rb +7 -0
- data/autohotkey/procedures/collect.rb +18 -0
- data/autohotkey/procedures/collect_util.rb +14 -0
- data/autohotkey/procedures/example_test.rb +67 -0
- data/autohotkey/procedures/example_test2.rb +74 -0
- data/autohotkey/procedures/script_test.rb +17 -0
- data/autohotkey/procedures/syntax_error.rb +18 -0
- data/autohotkey/tools/CmdExtractorAHK +16 -0
- data/autohotkey/tools/CmdSender +14 -0
- data/autohotkey/tools/CmdSenderAHK +18 -0
- data/autohotkey/tools/CmdTlmServer +14 -0
- data/autohotkey/tools/CmdTlmServerAHK +28 -0
- data/autohotkey/tools/CmdTlmServerAHK2 +17 -0
- data/autohotkey/tools/DataViewer +14 -0
- data/autohotkey/tools/DataViewerAHK +17 -0
- data/autohotkey/tools/HandbookCreatorAHK +20 -0
- data/autohotkey/tools/LauncherAHK +17 -0
- data/autohotkey/tools/LimitsMonitorAHK +20 -0
- data/autohotkey/tools/OpenGLBuilderAHK +20 -0
- data/autohotkey/tools/PacketViewer +14 -0
- data/autohotkey/tools/PacketViewerAHK +18 -0
- data/autohotkey/tools/PacketViewerAHK2 +17 -0
- data/autohotkey/tools/Replay +14 -0
- data/autohotkey/tools/Replay.bat +59 -0
- data/autohotkey/tools/ReplayAHK +17 -0
- data/autohotkey/tools/ScriptRunner +14 -0
- data/autohotkey/tools/ScriptRunnerAHK +20 -0
- data/autohotkey/tools/ScriptRunnerAHK2 +17 -0
- data/autohotkey/tools/TableManager +14 -0
- data/autohotkey/tools/TableManagerAHK +30 -0
- data/autohotkey/tools/TestRunner +15 -0
- data/autohotkey/tools/TestRunnerAHK +17 -0
- data/autohotkey/tools/TestRunnerAHK2 +17 -0
- data/autohotkey/tools/TestRunnerAHK3 +17 -0
- data/autohotkey/tools/TestRunnerAHK4 +17 -0
- data/autohotkey/tools/TlmExtractor +15 -0
- data/autohotkey/tools/TlmExtractorAHK +19 -0
- data/autohotkey/tools/TlmExtractorAHK2 +16 -0
- data/autohotkey/tools/TlmExtractorAHK3 +16 -0
- data/autohotkey/tools/TlmGrapher +14 -0
- data/autohotkey/tools/TlmGrapherAHK +19 -0
- data/autohotkey/tools/TlmGrapherAHK2 +23 -0
- data/autohotkey/tools/TlmGrapherAHK3 +17 -0
- data/autohotkey/tools/TlmGrapherAHK4 +17 -0
- data/autohotkey/tools/TlmViewer +14 -0
- data/autohotkey/tools/TlmViewerAHK +28 -0
- data/autohotkey/tools/TlmViewerAHK2 +18 -0
- data/autohotkey/tools/TlmViewerAHK3 +18 -0
- data/autohotkey/tools/TlmViewerAHK4 +18 -0
- data/autohotkey/tools/TlmViewerAHK5 +18 -0
- data/autohotkey/tools/autohotkey.rb +37 -0
- data/autohotkey/tools/cmd_extractor.ahk +27 -0
- data/autohotkey/tools/cmd_sender.ahk +162 -0
- data/autohotkey/tools/cmd_tlm_server.ahk +89 -0
- data/autohotkey/tools/cmd_tlm_server2.ahk +45 -0
- data/autohotkey/tools/data_viewer.ahk +135 -0
- data/autohotkey/tools/handbook_creator.ahk +23 -0
- data/autohotkey/tools/launcher.ahk +41 -0
- data/autohotkey/tools/limits_monitor.ahk +70 -0
- data/autohotkey/tools/open_gl_builder.ahk +134 -0
- data/autohotkey/tools/packet_viewer.ahk +143 -0
- data/autohotkey/tools/packet_viewer2.ahk +9 -0
- data/autohotkey/tools/replay.ahk +98 -0
- data/autohotkey/tools/script_runner.ahk +589 -0
- data/autohotkey/tools/script_runner2.ahk +31 -0
- data/autohotkey/tools/table_manager.ahk +220 -0
- data/autohotkey/tools/test_runner.ahk +259 -0
- data/autohotkey/tools/test_runner2.ahk +52 -0
- data/autohotkey/tools/test_runner3.ahk +13 -0
- data/autohotkey/tools/tlm_extractor.ahk +272 -0
- data/autohotkey/tools/tlm_grapher.ahk +642 -0
- data/autohotkey/tools/tlm_grapher2.ahk +115 -0
- data/autohotkey/tools/tlm_grapher3.ahk +24 -0
- data/autohotkey/tools/tlm_viewer.ahk +133 -0
- data/autohotkey/tools/tlm_viewer2.ahk +49 -0
- data/autohotkey/tools/tlm_viewer4.ahk +4 -0
- data/autohotkey/tools/tlm_viewer5.ahk +20 -0
- data/autohotkey/userpath.txt +1 -0
- data/bin/cosmos +96 -0
- data/bin/cstol_converter +1166 -0
- data/bin/exchndl20.dll +0 -0
- data/bin/exchndl21.dll +0 -0
- data/bin/mgwhelp.dll +0 -0
- data/bin/rubysloc +85 -0
- data/cosmos.gemspec +98 -0
- data/data/COSMOS_64x64.bmp +0 -0
- data/data/COSMOS_64x64.ico +0 -0
- data/data/COSMOS_64x64.png +0 -0
- data/data/CheckBoxCheck.gif +0 -0
- data/data/CheckBoxEmpty.gif +0 -0
- data/data/Earthmap1024x512.gif +0 -0
- data/data/about.txt +4 -0
- data/data/add_database.png +0 -0
- data/data/add_plot.png +0 -0
- data/data/add_tab.png +0 -0
- data/data/blank.png +0 -0
- data/data/bug.png +0 -0
- data/data/checkmark.png +0 -0
- data/data/close.png +0 -0
- data/data/cmd_extractor.png +0 -0
- data/data/cmd_sender.png +0 -0
- data/data/copy.png +0 -0
- data/data/cosmos.xcf +0 -0
- data/data/cosmos_word.gif +0 -0
- data/data/crc.txt +305 -0
- data/data/cts.png +0 -0
- data/data/cut.png +0 -0
- data/data/data_viewer.png +0 -0
- data/data/delete_database.png +0 -0
- data/data/delete_plot.png +0 -0
- data/data/delete_tab.png +0 -0
- data/data/diamond.STL +58 -0
- data/data/disconnected.png +0 -0
- data/data/edit.png +0 -0
- data/data/edit_database.png +0 -0
- data/data/edit_plot.png +0 -0
- data/data/edit_tab.png +0 -0
- data/data/end-26.png +0 -0
- data/data/fast_forward-26.png +0 -0
- data/data/file.png +0 -0
- data/data/handbook_creator.png +0 -0
- data/data/help.png +0 -0
- data/data/html-32.png +0 -0
- data/data/launcher.png +0 -0
- data/data/legal.gif +0 -0
- data/data/legal.txt +9 -0
- data/data/limits_monitor.png +0 -0
- data/data/moonmap1k.gif +0 -0
- data/data/multi.png +0 -0
- data/data/open.png +0 -0
- data/data/open_in_browser-32.png +0 -0
- data/data/opengl_builder.png +0 -0
- data/data/packet_viewer.png +0 -0
- data/data/pdf-32.png +0 -0
- data/data/play-26.png +0 -0
- data/data/redo.png +0 -0
- data/data/replay.png +0 -0
- data/data/reverse-play-26.png +0 -0
- data/data/rewind-26.png +0 -0
- data/data/running.png +0 -0
- data/data/save.png +0 -0
- data/data/save_as.png +0 -0
- data/data/screenshot.png +0 -0
- data/data/script_runner.png +0 -0
- data/data/search-14.png +0 -0
- data/data/search.png +0 -0
- data/data/send_file.png +0 -0
- data/data/skip_to_start-26.png +0 -0
- data/data/spinner.gif +0 -0
- data/data/splash.gif +0 -0
- data/data/stop-26.png +0 -0
- data/data/table_manager.png +0 -0
- data/data/test_runner.png +0 -0
- data/data/tlm_extractor.png +0 -0
- data/data/tlm_grapher.png +0 -0
- data/data/tlm_viewer.png +0 -0
- data/data/undo.png +0 -0
- data/demo/Gemfile +5 -0
- data/demo/Launcher +15 -0
- data/demo/Launcher.bat +59 -0
- data/demo/Rakefile +61 -0
- data/demo/config/data/attitude.bin +0 -0
- data/demo/config/data/crc.txt +206 -0
- data/demo/config/data/diamond.STL +58 -0
- data/demo/config/data/groundoff.gif +0 -0
- data/demo/config/data/groundon.gif +0 -0
- data/demo/config/data/hselectoff.gif +0 -0
- data/demo/config/data/hselecton.gif +0 -0
- data/demo/config/data/hswitchoff.gif +0 -0
- data/demo/config/data/hswitchon.gif +0 -0
- data/demo/config/data/meta_init.txt +4 -0
- data/demo/config/data/position.bin +0 -0
- data/demo/config/data/poweroff.gif +0 -0
- data/demo/config/data/poweron.gif +0 -0
- data/demo/config/data/satellite.gif +0 -0
- data/demo/config/data/tada.wav +0 -0
- data/demo/config/data/vswitchoff.gif +0 -0
- data/demo/config/data/vswitchon.gif +0 -0
- data/demo/config/system/system.txt +34 -0
- data/demo/config/system/system2.txt +33 -0
- data/demo/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -0
- data/demo/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -0
- data/demo/config/targets/COSMOS/cmd_tlm_server.txt +6 -0
- data/demo/config/targets/COSMOS/screens/limits_change.txt +20 -0
- data/demo/config/targets/COSMOS/screens/version.txt +19 -0
- data/demo/config/targets/COSMOS/target.txt +11 -0
- data/demo/config/targets/EXAMPLE/cmd_tlm/example_cmds.txt +2 -0
- data/demo/config/targets/EXAMPLE/cmd_tlm/example_tlm.txt +3 -0
- data/demo/config/targets/EXAMPLE/cmd_tlm_server.txt +6 -0
- data/demo/config/targets/EXAMPLE/lib/example_interface.rb +22 -0
- data/demo/config/targets/EXAMPLE/target.txt +7 -0
- data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +121 -0
- data/demo/config/targets/INST/cmd_tlm/inst_tlm.txt +247 -0
- data/demo/config/targets/INST/cmd_tlm_server.txt +5 -0
- data/demo/config/targets/INST/doc/README.txt +1 -0
- data/demo/config/targets/INST/lib/example_limits_response.rb +30 -0
- data/demo/config/targets/INST/lib/sim_inst.rb +294 -0
- data/demo/config/targets/INST/screens/adcs.txt +46 -0
- data/demo/config/targets/INST/screens/array.txt +15 -0
- data/demo/config/targets/INST/screens/block.txt +8 -0
- data/demo/config/targets/INST/screens/commanding.txt +30 -0
- data/demo/config/targets/INST/screens/graphs.txt +14 -0
- data/demo/config/targets/INST/screens/ground.txt +25 -0
- data/demo/config/targets/INST/screens/hs.txt +44 -0
- data/demo/config/targets/INST/screens/latest.txt +23 -0
- data/demo/config/targets/INST/screens/other.txt +29 -0
- data/demo/config/targets/INST/screens/tabs.txt +70 -0
- data/demo/config/targets/INST/target.txt +33 -0
- data/demo/config/targets/META/cmd_tlm/meta_cmd.txt +10 -0
- data/demo/config/targets/META/cmd_tlm/meta_tlm.txt +13 -0
- data/demo/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -0
- data/demo/config/targets/SYSTEM/cmd_tlm/override.txt +29 -0
- data/demo/config/targets/SYSTEM/screens/status.txt +12 -0
- data/demo/config/targets/TEMPLATED/cmd_tlm/templated_cmds.txt +12 -0
- data/demo/config/targets/TEMPLATED/cmd_tlm/templated_tlm.txt +3 -0
- data/demo/config/targets/TEMPLATED/cmd_tlm_server.txt +6 -0
- data/demo/config/targets/TEMPLATED/lib/templated_interface.rb +48 -0
- data/demo/config/targets/TEMPLATED/target.txt +6 -0
- data/demo/config/tools/cmd_tlm_server/cmd_tlm_server.txt +33 -0
- data/demo/config/tools/cmd_tlm_server/cmd_tlm_server2.txt +29 -0
- data/demo/config/tools/data_viewer/data_viewer.txt +11 -0
- data/demo/config/tools/handbook_creator/default_toc.xsl +59 -0
- data/demo/config/tools/handbook_creator/handbook_creator.txt +66 -0
- data/demo/config/tools/handbook_creator/templates/command_packets.html.erb +86 -0
- data/demo/config/tools/handbook_creator/templates/command_toc.html.erb +38 -0
- data/demo/config/tools/handbook_creator/templates/footer.html.erb +9 -0
- data/demo/config/tools/handbook_creator/templates/header.html.erb +25 -0
- data/demo/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -0
- data/demo/config/tools/handbook_creator/templates/nav.html.erb +27 -0
- data/demo/config/tools/handbook_creator/templates/overview.html.erb +1 -0
- data/demo/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -0
- data/demo/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -0
- data/demo/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -0
- data/demo/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -0
- data/demo/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -0
- data/demo/config/tools/handbook_creator/templates/title.html.erb +1 -0
- data/demo/config/tools/launcher/launcher.txt +45 -0
- data/demo/config/tools/launcher/launcher2.txt +45 -0
- data/demo/config/tools/limits_monitor/README.txt +1 -0
- data/demo/config/tools/opengl_builder/README.txt +1 -0
- data/demo/config/tools/script_runner/script_runner.txt +3 -0
- data/demo/config/tools/table_manager/ConfigTables_def.txt +8 -0
- data/demo/config/tools/table_manager/ExampleTableDefinition.txt +24 -0
- data/demo/config/tools/table_manager/MCConfigurationTable_fsw1_def.txt +25 -0
- data/demo/config/tools/table_manager/MCConfigurationTable_fsw2_def.txt +25 -0
- data/demo/config/tools/table_manager/PPSSelectionTable_def.txt +8 -0
- data/demo/config/tools/table_manager/TLMMonitoringTable_def.txt +248 -0
- data/demo/config/tools/test_runner/test_runner.txt +17 -0
- data/demo/config/tools/tlm_extractor/tlm_extractor.txt +13 -0
- data/demo/config/tools/tlm_extractor/tlm_extractor2.txt +2 -0
- data/demo/config/tools/tlm_extractor/tlm_extractor3.txt +2 -0
- data/demo/config/tools/tlm_extractor/tlm_extractor4.txt +2 -0
- data/demo/config/tools/tlm_grapher/README.txt +1 -0
- data/demo/config/tools/tlm_viewer/tlm_viewer.txt +41 -0
- data/demo/lib/example_background_task.rb +52 -0
- data/demo/lib/example_target.rb +108 -0
- data/demo/lib/scpi_target.rb +74 -0
- data/demo/lib/user_version.rb +3 -0
- data/demo/outputs/handbooks/assets/css/bootstrap-theme.css +397 -0
- data/demo/outputs/handbooks/assets/css/bootstrap-theme.min.css +7 -0
- data/demo/outputs/handbooks/assets/css/bootstrap.css +7118 -0
- data/demo/outputs/handbooks/assets/css/bootstrap.min.css +7 -0
- data/demo/outputs/handbooks/assets/fonts/glyphicons-halflings-regular.eot +0 -0
- data/demo/outputs/handbooks/assets/fonts/glyphicons-halflings-regular.svg +229 -0
- data/demo/outputs/handbooks/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/demo/outputs/handbooks/assets/fonts/glyphicons-halflings-regular.woff +0 -0
- data/demo/outputs/handbooks/assets/img/ball_logo.bmp +0 -0
- data/demo/outputs/handbooks/assets/img/ball_logo.gif +0 -0
- data/demo/outputs/handbooks/assets/img/ball_logo.jpg +0 -0
- data/demo/outputs/handbooks/assets/js/bootstrap.js +2006 -0
- data/demo/outputs/handbooks/assets/js/bootstrap.min.js +7 -0
- data/demo/outputs/handbooks/assets/js/html5shiv.js +8 -0
- data/demo/outputs/handbooks/assets/js/jquery-1.10.2.min.js +6 -0
- data/demo/outputs/handbooks/assets/js/respond.min.js +6 -0
- data/demo/outputs/logs/README.txt +1 -0
- data/demo/outputs/saved_config/README.txt +1 -0
- data/demo/outputs/tables/README.txt +1 -0
- data/demo/outputs/tmp/README.txt +1 -0
- data/demo/procedures/checks.rb +11 -0
- data/demo/procedures/clear_util.rb +7 -0
- data/demo/procedures/collect.rb +18 -0
- data/demo/procedures/collect_util.rb +14 -0
- data/demo/procedures/cosmos_api_test.rb +293 -0
- data/demo/procedures/disconnect.rb +29 -0
- data/demo/procedures/example_test.rb +182 -0
- data/demo/procedures/plot_test.rb +8 -0
- data/demo/procedures/run_example_test.rb +3 -0
- data/demo/procedures/test.rb +51 -0
- data/demo/tools/CmdExtractor +15 -0
- data/demo/tools/CmdExtractor.bat +59 -0
- data/demo/tools/CmdSender +15 -0
- data/demo/tools/CmdSender.bat +59 -0
- data/demo/tools/CmdTlmServer +15 -0
- data/demo/tools/CmdTlmServer.bat +59 -0
- data/demo/tools/DataViewer +15 -0
- data/demo/tools/DataViewer.bat +59 -0
- data/demo/tools/ExampleTarget +15 -0
- data/demo/tools/ExampleTarget.bat +59 -0
- data/demo/tools/HandbookCreator +15 -0
- data/demo/tools/HandbookCreator.bat +61 -0
- data/demo/tools/Launcher +15 -0
- data/demo/tools/Launcher.bat +59 -0
- data/demo/tools/LimitsMonitor +15 -0
- data/demo/tools/LimitsMonitor.bat +59 -0
- data/demo/tools/OpenGLBuilder +15 -0
- data/demo/tools/OpenGLBuilder.bat +59 -0
- data/demo/tools/PacketViewer +15 -0
- data/demo/tools/PacketViewer.bat +59 -0
- data/demo/tools/Replay +15 -0
- data/demo/tools/Replay.bat +59 -0
- data/demo/tools/ScpiTarget +15 -0
- data/demo/tools/ScpiTarget.bat +59 -0
- data/demo/tools/ScriptRunner +15 -0
- data/demo/tools/ScriptRunner.bat +59 -0
- data/demo/tools/TableManager +15 -0
- data/demo/tools/TableManager.bat +59 -0
- data/demo/tools/TestRunner +15 -0
- data/demo/tools/TestRunner.bat +59 -0
- data/demo/tools/TlmExtractor +15 -0
- data/demo/tools/TlmExtractor.bat +59 -0
- data/demo/tools/TlmGrapher +15 -0
- data/demo/tools/TlmGrapher.bat +59 -0
- data/demo/tools/TlmViewer +15 -0
- data/demo/tools/TlmViewer.bat +59 -0
- data/demo/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -0
- data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +15 -0
- data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +6 -0
- data/demo/tools/mac/CmdExtractor.app/Contents/Resources/appIcon.icns +0 -0
- data/demo/tools/mac/CmdSender.app/Contents/Info.plist +38 -0
- data/demo/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +15 -0
- data/demo/tools/mac/CmdSender.app/Contents/MacOS/main.sh +6 -0
- data/demo/tools/mac/CmdSender.app/Contents/Resources/appIcon.icns +0 -0
- data/demo/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -0
- data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +15 -0
- data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +6 -0
- data/demo/tools/mac/CmdTlmServer.app/Contents/Resources/appIcon.icns +0 -0
- data/demo/tools/mac/DataViewer.app/Contents/Info.plist +38 -0
- data/demo/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +15 -0
- data/demo/tools/mac/DataViewer.app/Contents/MacOS/main.sh +6 -0
- data/demo/tools/mac/DataViewer.app/Contents/Resources/appIcon.icns +0 -0
- data/demo/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -0
- data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +15 -0
- data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +6 -0
- data/demo/tools/mac/HandbookCreator.app/Contents/Resources/appIcon.icns +0 -0
- data/demo/tools/mac/Launcher.app/Contents/Info.plist +38 -0
- data/demo/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +15 -0
- data/demo/tools/mac/Launcher.app/Contents/MacOS/main.sh +6 -0
- data/demo/tools/mac/Launcher.app/Contents/Resources/appIcon.icns +0 -0
- data/demo/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -0
- data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +15 -0
- data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +6 -0
- data/demo/tools/mac/LimitsMonitor.app/Contents/Resources/appIcon.icns +0 -0
- data/demo/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -0
- data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +15 -0
- data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +6 -0
- data/demo/tools/mac/OpenGLBuilder.app/Contents/Resources/appIcon.icns +0 -0
- data/demo/tools/mac/PacketViewer.app/Contents/Info.plist +38 -0
- data/demo/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +15 -0
- data/demo/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +6 -0
- data/demo/tools/mac/PacketViewer.app/Contents/Resources/appIcon.icns +0 -0
- data/demo/tools/mac/Replay.app/Contents/Info.plist +38 -0
- data/demo/tools/mac/Replay.app/Contents/MacOS/Replay.rb +15 -0
- data/demo/tools/mac/Replay.app/Contents/MacOS/main.sh +6 -0
- data/demo/tools/mac/Replay.app/Contents/Resources/appIcon.icns +0 -0
- data/demo/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -0
- data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +15 -0
- data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +6 -0
- data/demo/tools/mac/ScriptRunner.app/Contents/Resources/appIcon.icns +0 -0
- data/demo/tools/mac/TableManager.app/Contents/Info.plist +38 -0
- data/demo/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +15 -0
- data/demo/tools/mac/TableManager.app/Contents/MacOS/main.sh +6 -0
- data/demo/tools/mac/TableManager.app/Contents/Resources/appIcon.icns +0 -0
- data/demo/tools/mac/TestRunner.app/Contents/Info.plist +38 -0
- data/demo/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +15 -0
- data/demo/tools/mac/TestRunner.app/Contents/MacOS/main.sh +6 -0
- data/demo/tools/mac/TestRunner.app/Contents/Resources/appIcon.icns +0 -0
- data/demo/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -0
- data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +15 -0
- data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +6 -0
- data/demo/tools/mac/TlmExtractor.app/Contents/Resources/appIcon.icns +0 -0
- data/demo/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -0
- data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +15 -0
- data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +6 -0
- data/demo/tools/mac/TlmGrapher.app/Contents/Resources/appIcon.icns +0 -0
- data/demo/tools/mac/TlmViewer.app/Contents/Info.plist +38 -0
- data/demo/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +15 -0
- data/demo/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +6 -0
- data/demo/tools/mac/TlmViewer.app/Contents/Resources/appIcon.icns +0 -0
- data/demo/userpath.txt +1 -0
- data/ext/cosmos/ext/array/array.c +111 -0
- data/ext/cosmos/ext/array/extconf.rb +13 -0
- data/ext/cosmos/ext/buffered_file/buffered_file.c +167 -0
- data/ext/cosmos/ext/buffered_file/extconf.rb +13 -0
- data/ext/cosmos/ext/config_parser/config_parser.c +237 -0
- data/ext/cosmos/ext/config_parser/extconf.rb +13 -0
- data/ext/cosmos/ext/cosmos_io/cosmos_io.c +117 -0
- data/ext/cosmos/ext/cosmos_io/extconf.rb +13 -0
- data/ext/cosmos/ext/crc/crc.c +341 -0
- data/ext/cosmos/ext/crc/extconf.rb +13 -0
- data/ext/cosmos/ext/line_graph/extconf.rb +13 -0
- data/ext/cosmos/ext/line_graph/line_graph.c +501 -0
- data/ext/cosmos/ext/low_fragmentation_array/extconf.rb +13 -0
- data/ext/cosmos/ext/low_fragmentation_array/low_fragmentation_array.c +261 -0
- data/ext/cosmos/ext/packet/extconf.rb +13 -0
- data/ext/cosmos/ext/packet/packet.c +339 -0
- data/ext/cosmos/ext/platform/extconf.rb +13 -0
- data/ext/cosmos/ext/platform/platform.c +82 -0
- data/ext/cosmos/ext/polynomial_conversion/extconf.rb +13 -0
- data/ext/cosmos/ext/polynomial_conversion/polynomial_conversion.c +73 -0
- data/ext/cosmos/ext/string/extconf.rb +13 -0
- data/ext/cosmos/ext/string/string.c +49 -0
- data/ext/cosmos/ext/structure/structure.c +894 -0
- data/ext/cosmos/ext/tabbed_plots_config/extconf.rb +13 -0
- data/ext/cosmos/ext/tabbed_plots_config/tabbed_plots_config.c +51 -0
- data/ext/cosmos/ext/telemetry/extconf.rb +13 -0
- data/ext/cosmos/ext/telemetry/telemetry.c +306 -0
- data/install/Gemfile +5 -0
- data/install/Launcher +14 -0
- data/install/Launcher.bat +59 -0
- data/install/Rakefile +61 -0
- data/install/config/data/README.txt +1 -0
- data/install/config/data/crc.txt +133 -0
- data/install/config/system/system.txt +29 -0
- data/install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -0
- data/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -0
- data/install/config/targets/COSMOS/cmd_tlm_server.txt +6 -0
- data/install/config/targets/COSMOS/screens/limits_change.txt +20 -0
- data/install/config/targets/COSMOS/screens/version.txt +19 -0
- data/install/config/targets/COSMOS/target.txt +9 -0
- data/install/config/targets/SYSTEM/README.txt +1 -0
- data/install/config/tools/cmd_tlm_server/cmd_tlm_server.txt +2 -0
- data/install/config/tools/data_viewer/data_viewer.txt +4 -0
- data/install/config/tools/handbook_creator/default_toc.xsl +59 -0
- data/install/config/tools/handbook_creator/handbook_creator.txt +49 -0
- data/install/config/tools/handbook_creator/templates/command_packets.html.erb +86 -0
- data/install/config/tools/handbook_creator/templates/command_toc.html.erb +38 -0
- data/install/config/tools/handbook_creator/templates/footer.html.erb +9 -0
- data/install/config/tools/handbook_creator/templates/header.html.erb +25 -0
- data/install/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -0
- data/install/config/tools/handbook_creator/templates/nav.html.erb +27 -0
- data/install/config/tools/handbook_creator/templates/overview.html.erb +1 -0
- data/install/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -0
- data/install/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -0
- data/install/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -0
- data/install/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -0
- data/install/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -0
- data/install/config/tools/handbook_creator/templates/title.html.erb +1 -0
- data/install/config/tools/launcher/launcher.txt +39 -0
- data/install/config/tools/limits_monitor/README.txt +1 -0
- data/install/config/tools/opengl_builder/README.txt +1 -0
- data/install/config/tools/script_runner/script_runner.txt +3 -0
- data/install/config/tools/table_manager/README.txt +1 -0
- data/install/config/tools/test_runner/test_runner.txt +8 -0
- data/install/config/tools/tlm_extractor/README.txt +1 -0
- data/install/config/tools/tlm_grapher/README.txt +1 -0
- data/install/config/tools/tlm_viewer/tlm_viewer.txt +5 -0
- data/install/lib/user_version.rb +3 -0
- data/install/outputs/handbooks/assets/css/bootstrap-theme.css +397 -0
- data/install/outputs/handbooks/assets/css/bootstrap-theme.min.css +7 -0
- data/install/outputs/handbooks/assets/css/bootstrap.css +7118 -0
- data/install/outputs/handbooks/assets/css/bootstrap.min.css +7 -0
- data/install/outputs/handbooks/assets/fonts/glyphicons-halflings-regular.eot +0 -0
- data/install/outputs/handbooks/assets/fonts/glyphicons-halflings-regular.svg +229 -0
- data/install/outputs/handbooks/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/install/outputs/handbooks/assets/fonts/glyphicons-halflings-regular.woff +0 -0
- data/install/outputs/handbooks/assets/img/ball_logo.bmp +0 -0
- data/install/outputs/handbooks/assets/img/ball_logo.gif +0 -0
- data/install/outputs/handbooks/assets/img/ball_logo.jpg +0 -0
- data/install/outputs/handbooks/assets/js/bootstrap.js +2006 -0
- data/install/outputs/handbooks/assets/js/bootstrap.min.js +7 -0
- data/install/outputs/handbooks/assets/js/html5shiv.js +8 -0
- data/install/outputs/handbooks/assets/js/jquery-1.10.2.min.js +6 -0
- data/install/outputs/handbooks/assets/js/respond.min.js +6 -0
- data/install/outputs/logs/README.txt +1 -0
- data/install/outputs/saved_config/README.txt +1 -0
- data/install/outputs/tables/README.txt +1 -0
- data/install/outputs/tmp/README.txt +1 -0
- data/install/procedures/README.txt +1 -0
- data/install/tools/CmdExtractor +15 -0
- data/install/tools/CmdExtractor.bat +59 -0
- data/install/tools/CmdSender +15 -0
- data/install/tools/CmdSender.bat +59 -0
- data/install/tools/CmdTlmServer +15 -0
- data/install/tools/CmdTlmServer.bat +59 -0
- data/install/tools/DataViewer +15 -0
- data/install/tools/DataViewer.bat +59 -0
- data/install/tools/HandbookCreator +15 -0
- data/install/tools/HandbookCreator.bat +61 -0
- data/install/tools/Launcher +15 -0
- data/install/tools/Launcher.bat +59 -0
- data/install/tools/LimitsMonitor +15 -0
- data/install/tools/LimitsMonitor.bat +59 -0
- data/install/tools/OpenGLBuilder +15 -0
- data/install/tools/OpenGLBuilder.bat +59 -0
- data/install/tools/PacketViewer +15 -0
- data/install/tools/PacketViewer.bat +59 -0
- data/install/tools/Replay +15 -0
- data/install/tools/Replay.bat +59 -0
- data/install/tools/ScriptRunner +15 -0
- data/install/tools/ScriptRunner.bat +59 -0
- data/install/tools/TableManager +15 -0
- data/install/tools/TableManager.bat +59 -0
- data/install/tools/TestRunner +15 -0
- data/install/tools/TestRunner.bat +59 -0
- data/install/tools/TlmExtractor +15 -0
- data/install/tools/TlmExtractor.bat +59 -0
- data/install/tools/TlmGrapher +15 -0
- data/install/tools/TlmGrapher.bat +59 -0
- data/install/tools/TlmViewer +15 -0
- data/install/tools/TlmViewer.bat +59 -0
- data/install/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -0
- data/install/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +15 -0
- data/install/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +6 -0
- data/install/tools/mac/CmdExtractor.app/Contents/Resources/appIcon.icns +0 -0
- data/install/tools/mac/CmdSender.app/Contents/Info.plist +38 -0
- data/install/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +15 -0
- data/install/tools/mac/CmdSender.app/Contents/MacOS/main.sh +6 -0
- data/install/tools/mac/CmdSender.app/Contents/Resources/appIcon.icns +0 -0
- data/install/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -0
- data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +15 -0
- data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +6 -0
- data/install/tools/mac/CmdTlmServer.app/Contents/Resources/appIcon.icns +0 -0
- data/install/tools/mac/DataViewer.app/Contents/Info.plist +38 -0
- data/install/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +15 -0
- data/install/tools/mac/DataViewer.app/Contents/MacOS/main.sh +6 -0
- data/install/tools/mac/DataViewer.app/Contents/Resources/appIcon.icns +0 -0
- data/install/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -0
- data/install/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +15 -0
- data/install/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +6 -0
- data/install/tools/mac/HandbookCreator.app/Contents/Resources/appIcon.icns +0 -0
- data/install/tools/mac/Launcher.app/Contents/Info.plist +38 -0
- data/install/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +15 -0
- data/install/tools/mac/Launcher.app/Contents/MacOS/main.sh +6 -0
- data/install/tools/mac/Launcher.app/Contents/Resources/appIcon.icns +0 -0
- data/install/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -0
- data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +15 -0
- data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +6 -0
- data/install/tools/mac/LimitsMonitor.app/Contents/Resources/appIcon.icns +0 -0
- data/install/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -0
- data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +15 -0
- data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +6 -0
- data/install/tools/mac/OpenGLBuilder.app/Contents/Resources/appIcon.icns +0 -0
- data/install/tools/mac/PacketViewer.app/Contents/Info.plist +38 -0
- data/install/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +15 -0
- data/install/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +6 -0
- data/install/tools/mac/PacketViewer.app/Contents/Resources/appIcon.icns +0 -0
- data/install/tools/mac/Replay.app/Contents/Info.plist +38 -0
- data/install/tools/mac/Replay.app/Contents/MacOS/Replay.rb +15 -0
- data/install/tools/mac/Replay.app/Contents/MacOS/main.sh +6 -0
- data/install/tools/mac/Replay.app/Contents/Resources/appIcon.icns +0 -0
- data/install/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -0
- data/install/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +15 -0
- data/install/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +6 -0
- data/install/tools/mac/ScriptRunner.app/Contents/Resources/appIcon.icns +0 -0
- data/install/tools/mac/TableManager.app/Contents/Info.plist +38 -0
- data/install/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +15 -0
- data/install/tools/mac/TableManager.app/Contents/MacOS/main.sh +6 -0
- data/install/tools/mac/TableManager.app/Contents/Resources/appIcon.icns +0 -0
- data/install/tools/mac/TestRunner.app/Contents/Info.plist +38 -0
- data/install/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +15 -0
- data/install/tools/mac/TestRunner.app/Contents/MacOS/main.sh +6 -0
- data/install/tools/mac/TestRunner.app/Contents/Resources/appIcon.icns +0 -0
- data/install/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -0
- data/install/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +15 -0
- data/install/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +6 -0
- data/install/tools/mac/TlmExtractor.app/Contents/Resources/appIcon.icns +0 -0
- data/install/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -0
- data/install/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +15 -0
- data/install/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +6 -0
- data/install/tools/mac/TlmGrapher.app/Contents/Resources/appIcon.icns +0 -0
- data/install/tools/mac/TlmViewer.app/Contents/Info.plist +38 -0
- data/install/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +15 -0
- data/install/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +6 -0
- data/install/tools/mac/TlmViewer.app/Contents/Resources/appIcon.icns +0 -0
- data/install/userpath.txt +1 -0
- data/lib/cosmos/ccsds/ccsds_packet.rb +63 -0
- data/lib/cosmos/ccsds/ccsds_parser.rb +143 -0
- data/lib/cosmos/config/config_parser.rb +324 -0
- data/lib/cosmos/conversions/conversion.rb +47 -0
- data/lib/cosmos/conversions/generic_conversion.rb +55 -0
- data/lib/cosmos/conversions/new_packet_log_conversion.rb +45 -0
- data/lib/cosmos/conversions/polynomial_conversion.rb +57 -0
- data/lib/cosmos/conversions/processor_conversion.rb +46 -0
- data/lib/cosmos/conversions/received_count_conversion.rb +33 -0
- data/lib/cosmos/conversions/received_time_formatted_conversion.rb +37 -0
- data/lib/cosmos/conversions/received_time_seconds_conversion.rb +37 -0
- data/lib/cosmos/conversions/segmented_polynomial_conversion.rb +128 -0
- data/lib/cosmos/conversions/unix_time_conversion.rb +50 -0
- data/lib/cosmos/conversions/unix_time_formatted_conversion.rb +44 -0
- data/lib/cosmos/conversions/unix_time_seconds_conversion.rb +44 -0
- data/lib/cosmos/conversions.rb +13 -0
- data/lib/cosmos/core_ext/array.rb +354 -0
- data/lib/cosmos/core_ext/class.rb +51 -0
- data/lib/cosmos/core_ext/cosmos_io.rb +29 -0
- data/lib/cosmos/core_ext/exception.rb +52 -0
- data/lib/cosmos/core_ext/file.rb +75 -0
- data/lib/cosmos/core_ext/hash.rb +28 -0
- data/lib/cosmos/core_ext/io.rb +75 -0
- data/lib/cosmos/core_ext/kernel.rb +38 -0
- data/lib/cosmos/core_ext/math.rb +119 -0
- data/lib/cosmos/core_ext/matrix.rb +146 -0
- data/lib/cosmos/core_ext/objectspace.rb +29 -0
- data/lib/cosmos/core_ext/range.rb +22 -0
- data/lib/cosmos/core_ext/socket.rb +32 -0
- data/lib/cosmos/core_ext/string.rb +310 -0
- data/lib/cosmos/core_ext/stringio.rb +24 -0
- data/lib/cosmos/core_ext/time.rb +446 -0
- data/lib/cosmos/core_ext.rb +18 -0
- data/lib/cosmos/ext/.keep +0 -0
- data/lib/cosmos/gui/choosers/combobox_chooser.rb +130 -0
- data/lib/cosmos/gui/choosers/file_chooser.rb +68 -0
- data/lib/cosmos/gui/choosers/float_chooser.rb +82 -0
- data/lib/cosmos/gui/choosers/integer_chooser.rb +80 -0
- data/lib/cosmos/gui/choosers/string_chooser.rb +53 -0
- data/lib/cosmos/gui/choosers/telemetry_chooser.rb +317 -0
- data/lib/cosmos/gui/dialogs/about_dialog.rb +128 -0
- data/lib/cosmos/gui/dialogs/calendar_dialog.rb +136 -0
- data/lib/cosmos/gui/dialogs/cmd_details_dialog.rb +52 -0
- data/lib/cosmos/gui/dialogs/cmd_tlm_raw_dialog.rb +149 -0
- data/lib/cosmos/gui/dialogs/details_dialog.rb +174 -0
- data/lib/cosmos/gui/dialogs/exception_dialog.rb +97 -0
- data/lib/cosmos/gui/dialogs/exception_list_dialog.rb +59 -0
- data/lib/cosmos/gui/dialogs/find_replace_dialog.rb +196 -0
- data/lib/cosmos/gui/dialogs/legal_dialog.rb +168 -0
- data/lib/cosmos/gui/dialogs/packet_log_dialog.rb +118 -0
- data/lib/cosmos/gui/dialogs/progress_dialog.rb +262 -0
- data/lib/cosmos/gui/dialogs/pry_dialog.rb +161 -0
- data/lib/cosmos/gui/dialogs/scroll_text_dialog.rb +37 -0
- data/lib/cosmos/gui/dialogs/select_dialog.rb +54 -0
- data/lib/cosmos/gui/dialogs/set_tlm_dialog.rb +131 -0
- data/lib/cosmos/gui/dialogs/splash.rb +113 -0
- data/lib/cosmos/gui/dialogs/tlm_details_dialog.rb +206 -0
- data/lib/cosmos/gui/dialogs/tlm_edit_dialog.rb +81 -0
- data/lib/cosmos/gui/line_graph/line_graph.rb +456 -0
- data/lib/cosmos/gui/line_graph/line_graph_dialog.rb +34 -0
- data/lib/cosmos/gui/line_graph/line_graph_drawing.rb +494 -0
- data/lib/cosmos/gui/line_graph/line_graph_popups.rb +116 -0
- data/lib/cosmos/gui/line_graph/line_graph_scaling.rb +460 -0
- data/lib/cosmos/gui/line_graph/line_graph_script.rb +26 -0
- data/lib/cosmos/gui/line_graph/lines.rb +290 -0
- data/lib/cosmos/gui/line_graph/overview_graph.rb +459 -0
- data/lib/cosmos/gui/opengl/earth_model.rb +22 -0
- data/lib/cosmos/gui/opengl/gl_bounds.rb +67 -0
- data/lib/cosmos/gui/opengl/gl_light.rb +39 -0
- data/lib/cosmos/gui/opengl/gl_material.rb +29 -0
- data/lib/cosmos/gui/opengl/gl_scene.rb +72 -0
- data/lib/cosmos/gui/opengl/gl_shape.rb +146 -0
- data/lib/cosmos/gui/opengl/gl_viewer.rb +712 -0
- data/lib/cosmos/gui/opengl/gl_viewport.rb +35 -0
- data/lib/cosmos/gui/opengl/moon_model.rb +22 -0
- data/lib/cosmos/gui/opengl/opengl.rb +8 -0
- data/lib/cosmos/gui/opengl/stl_reader.rb +211 -0
- data/lib/cosmos/gui/opengl/stl_shape.rb +124 -0
- data/lib/cosmos/gui/opengl/texture_mapped_sphere.rb +202 -0
- data/lib/cosmos/gui/qt.rb +786 -0
- data/lib/cosmos/gui/qt_tool.rb +373 -0
- data/lib/cosmos/gui/text/completion.rb +381 -0
- data/lib/cosmos/gui/text/completion_line_edit.rb +30 -0
- data/lib/cosmos/gui/text/completion_text_edit.rb +179 -0
- data/lib/cosmos/gui/text/ruby_editor.rb +395 -0
- data/lib/cosmos/gui/utilities/screenshot.rb +25 -0
- data/lib/cosmos/gui/utilities/script_module_gui.rb +203 -0
- data/lib/cosmos/gui/widgets/full_text_search_line_edit.rb +161 -0
- data/lib/cosmos/gui/widgets/packet_log_frame.rb +305 -0
- data/lib/cosmos/gui/widgets/realtime_button_bar.rb +98 -0
- data/lib/cosmos/interfaces/cmd_tlm_server_interface.rb +149 -0
- data/lib/cosmos/interfaces/interface.rb +213 -0
- data/lib/cosmos/interfaces/linc_interface.rb +360 -0
- data/lib/cosmos/interfaces/serial_interface.rb +76 -0
- data/lib/cosmos/interfaces/simulated_target_interface.rb +128 -0
- data/lib/cosmos/interfaces/stream_interface.rb +156 -0
- data/lib/cosmos/interfaces/tcpip_client_interface.rb +60 -0
- data/lib/cosmos/interfaces/tcpip_server_interface.rb +154 -0
- data/lib/cosmos/interfaces/udp_interface.rb +173 -0
- data/lib/cosmos/interfaces.rb +11 -0
- data/lib/cosmos/io/buffered_file.rb +11 -0
- data/lib/cosmos/io/cosmos_snmp.rb +50 -0
- data/lib/cosmos/io/io_multiplexer.rb +89 -0
- data/lib/cosmos/io/json_drb.rb +320 -0
- data/lib/cosmos/io/json_drb_object.rb +137 -0
- data/lib/cosmos/io/json_rpc.rb +365 -0
- data/lib/cosmos/io/posix_serial_driver.rb +145 -0
- data/lib/cosmos/io/raw_logger.rb +174 -0
- data/lib/cosmos/io/raw_logger_pair.rb +71 -0
- data/lib/cosmos/io/serial_driver.rb +85 -0
- data/lib/cosmos/io/stderr.rb +36 -0
- data/lib/cosmos/io/stdout.rb +36 -0
- data/lib/cosmos/io/tcpip_server.rb +532 -0
- data/lib/cosmos/io/udp_sockets.rb +152 -0
- data/lib/cosmos/io/win32_serial_driver.rb +147 -0
- data/lib/cosmos/packet_logs/meta_packet_log_writer.rb +107 -0
- data/lib/cosmos/packet_logs/packet_log_reader.rb +439 -0
- data/lib/cosmos/packet_logs/packet_log_writer.rb +309 -0
- data/lib/cosmos/packet_logs/packet_log_writer_pair.rb +30 -0
- data/lib/cosmos/packet_logs.rb +6 -0
- data/lib/cosmos/packets/binary_accessor.rb +921 -0
- data/lib/cosmos/packets/commands.rb +291 -0
- data/lib/cosmos/packets/limits.rb +263 -0
- data/lib/cosmos/packets/limits_response.rb +38 -0
- data/lib/cosmos/packets/packet.rb +699 -0
- data/lib/cosmos/packets/packet_config.rb +1034 -0
- data/lib/cosmos/packets/packet_item.rb +317 -0
- data/lib/cosmos/packets/packet_item_limits.rb +128 -0
- data/lib/cosmos/packets/structure.rb +386 -0
- data/lib/cosmos/packets/structure_item.rb +233 -0
- data/lib/cosmos/packets/telemetry.rb +317 -0
- data/lib/cosmos/processors/new_packet_log_processor.rb +34 -0
- data/lib/cosmos/processors/processor.rb +71 -0
- data/lib/cosmos/processors/statistics_processor.rb +65 -0
- data/lib/cosmos/processors/watermark_processor.rb +44 -0
- data/lib/cosmos/processors.rb +6 -0
- data/lib/cosmos/script/extract.rb +115 -0
- data/lib/cosmos/script/script.rb +1493 -0
- data/lib/cosmos/script.rb +9 -0
- data/lib/cosmos/streams/burst_stream_protocol.rb +25 -0
- data/lib/cosmos/streams/fixed_stream_protocol.rb +111 -0
- data/lib/cosmos/streams/length_stream_protocol.rb +140 -0
- data/lib/cosmos/streams/preidentified_stream_protocol.rb +118 -0
- data/lib/cosmos/streams/serial_stream.rb +143 -0
- data/lib/cosmos/streams/stream.rb +57 -0
- data/lib/cosmos/streams/stream_protocol.rb +369 -0
- data/lib/cosmos/streams/tcpip_client_stream.rb +77 -0
- data/lib/cosmos/streams/tcpip_socket_stream.rb +139 -0
- data/lib/cosmos/streams/template_stream_protocol.rb +140 -0
- data/lib/cosmos/streams/terminated_stream_protocol.rb +81 -0
- data/lib/cosmos/system/system.rb +558 -0
- data/lib/cosmos/system/target.rb +178 -0
- data/lib/cosmos/system.rb +4 -0
- data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +253 -0
- data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +716 -0
- data/lib/cosmos/tools/cmd_sender/cmd_sender_item_delegate.rb +77 -0
- data/lib/cosmos/tools/cmd_sender/cmd_sender_text_edit.rb +70 -0
- data/lib/cosmos/tools/cmd_tlm_server/api.rb +940 -0
- data/lib/cosmos/tools/cmd_tlm_server/background_task.rb +46 -0
- data/lib/cosmos/tools/cmd_tlm_server/background_tasks.rb +63 -0
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +496 -0
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +241 -0
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +1008 -0
- data/lib/cosmos/tools/cmd_tlm_server/commanding.rb +112 -0
- data/lib/cosmos/tools/cmd_tlm_server/connections.rb +176 -0
- data/lib/cosmos/tools/cmd_tlm_server/interface_thread.rb +221 -0
- data/lib/cosmos/tools/cmd_tlm_server/interfaces.rb +127 -0
- data/lib/cosmos/tools/cmd_tlm_server/packet_logging.rb +132 -0
- data/lib/cosmos/tools/cmd_tlm_server/router_thread.rb +66 -0
- data/lib/cosmos/tools/cmd_tlm_server/routers.rb +97 -0
- data/lib/cosmos/tools/data_viewer/data_viewer.rb +600 -0
- data/lib/cosmos/tools/data_viewer/data_viewer_component.rb +167 -0
- data/lib/cosmos/tools/data_viewer/dump_component.rb +40 -0
- data/lib/cosmos/tools/handbook_creator/handbook_creator.rb +149 -0
- data/lib/cosmos/tools/handbook_creator/handbook_creator_config.rb +360 -0
- data/lib/cosmos/tools/launcher/launcher.rb +184 -0
- data/lib/cosmos/tools/launcher/launcher_config.rb +167 -0
- data/lib/cosmos/tools/launcher/launcher_multitool.rb +41 -0
- data/lib/cosmos/tools/launcher/launcher_tool.rb +104 -0
- data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +768 -0
- data/lib/cosmos/tools/opengl_builder/opengl_builder.rb +416 -0
- data/lib/cosmos/tools/opengl_builder/scene_config.rb +118 -0
- data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +525 -0
- data/lib/cosmos/tools/replay/replay.rb +488 -0
- data/lib/cosmos/tools/replay/replay_server.rb +91 -0
- data/lib/cosmos/tools/script_runner/script_audit.rb +139 -0
- data/lib/cosmos/tools/script_runner/script_runner.rb +914 -0
- data/lib/cosmos/tools/script_runner/script_runner_config.rb +40 -0
- data/lib/cosmos/tools/script_runner/script_runner_frame.rb +1859 -0
- data/lib/cosmos/tools/table_manager/table.rb +70 -0
- data/lib/cosmos/tools/table_manager/table_config.rb +764 -0
- data/lib/cosmos/tools/table_manager/table_item.rb +74 -0
- data/lib/cosmos/tools/table_manager/table_manager.rb +1065 -0
- data/lib/cosmos/tools/table_manager/table_manager_core.rb +539 -0
- data/lib/cosmos/tools/test_runner/results_writer.rb +283 -0
- data/lib/cosmos/tools/test_runner/test.rb +480 -0
- data/lib/cosmos/tools/test_runner/test_runner.rb +1157 -0
- data/lib/cosmos/tools/test_runner/test_runner_chooser.rb +338 -0
- data/lib/cosmos/tools/tlm_extractor/text_item_chooser.rb +60 -0
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +1008 -0
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor_config.rb +371 -0
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor_processor.rb +60 -0
- data/lib/cosmos/tools/tlm_grapher/data_object_adders/housekeeping_data_object_adder.rb +75 -0
- data/lib/cosmos/tools/tlm_grapher/data_object_adders/singlexy_data_object_adder.rb +44 -0
- data/lib/cosmos/tools/tlm_grapher/data_object_adders/xy_data_object_adder.rb +94 -0
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/data_object_editor.rb +61 -0
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/housekeeping_data_object_editor.rb +180 -0
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/linegraph_data_object_editor.rb +141 -0
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/singlexy_data_object_editor.rb +30 -0
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/xy_data_object_editor.rb +173 -0
- data/lib/cosmos/tools/tlm_grapher/data_objects/data_object.rb +177 -0
- data/lib/cosmos/tools/tlm_grapher/data_objects/housekeeping_data_object.rb +409 -0
- data/lib/cosmos/tools/tlm_grapher/data_objects/linegraph_data_object.rb +176 -0
- data/lib/cosmos/tools/tlm_grapher/data_objects/singlexy_data_object.rb +25 -0
- data/lib/cosmos/tools/tlm_grapher/data_objects/xy_data_object.rb +320 -0
- data/lib/cosmos/tools/tlm_grapher/plot_editors/linegraph_plot_editor.rb +181 -0
- data/lib/cosmos/tools/tlm_grapher/plot_editors/plot_editor.rb +28 -0
- data/lib/cosmos/tools/tlm_grapher/plot_editors/singlexy_plot_editor.rb +30 -0
- data/lib/cosmos/tools/tlm_grapher/plot_editors/xy_plot_editor.rb +59 -0
- data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/linegraph_plot_gui_object.rb +172 -0
- data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/singlexy_plot_gui_object.rb +27 -0
- data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/xy_plot_gui_object.rb +74 -0
- data/lib/cosmos/tools/tlm_grapher/plots/linegraph_plot.rb +201 -0
- data/lib/cosmos/tools/tlm_grapher/plots/plot.rb +69 -0
- data/lib/cosmos/tools/tlm_grapher/plots/singlexy_plot.rb +20 -0
- data/lib/cosmos/tools/tlm_grapher/plots/xy_plot.rb +61 -0
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots/overview_tabbed_plots.rb +1278 -0
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_config.rb +430 -0
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_data_object_editor.rb +107 -0
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_logfile_thread.rb +95 -0
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_plot_editor.rb +101 -0
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_realtime_thread.rb +66 -0
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tab.rb +57 -0
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tool.rb +1004 -0
- data/lib/cosmos/tools/tlm_grapher/tlm_grapher.rb +87 -0
- data/lib/cosmos/tools/tlm_viewer/screen.rb +458 -0
- data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +544 -0
- data/lib/cosmos/tools/tlm_viewer/tlm_viewer_config.rb +287 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/aging_widget.rb +110 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/array_widget.rb +70 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/block_widget.rb +61 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/button_widget.rb +39 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/canvas_widget.rb +62 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasimage_widget.rb +41 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasimagevalue_widget.rb +57 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabel_widget.rb +37 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabelvalue_widget.rb +56 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasline_widget.rb +55 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/canvaslinevalue_widget.rb +66 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasvalue_widget.rb +124 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/checkbutton_widget.rb +31 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/combobox_widget.rb +30 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/formatfontvalue_widget.rb +36 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/formatvalue_widget.rb +35 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/horizontal_widget.rb +27 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/horizontalbox_widget.rb +31 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/horizontalline_widget.rb +26 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/label_widget.rb +29 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/labelformatvalue_widget.rb +39 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/labelprogressbar_widget.rb +38 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/labeltrendlimitsbar_widget.rb +38 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvalue_widget.rb +39 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluedesc_widget.rb +42 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluelimitsbar_widget.rb +37 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluerangebar_widget.rb +37 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/layout_widget.rb +34 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/limitsbar_widget.rb +178 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/linegraph_widget.rb +54 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/matrixbycolumns_widget.rb +47 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/multi_widget.rb +116 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/progressbar_widget.rb +34 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/radiobutton_widget.rb +30 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/rangebar_widget.rb +57 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/screenshotbutton_widget.rb +34 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/scrollwindow_widget.rb +35 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/sectionheader_widget.rb +33 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/tabbook_widget.rb +26 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/tabitem_widget.rb +28 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/textbox_widget.rb +47 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/textfield_widget.rb +26 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/timegraph_widget.rb +88 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/title_widget.rb +27 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/trendbar_widget.rb +130 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/trendlimitsbar_widget.rb +46 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/value_widget.rb +43 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/valuelimitsbar_widget.rb +37 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/valuerangebar_widget.rb +37 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/vertical_widget.rb +35 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/verticalbox_widget.rb +37 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/widget.rb +257 -0
- data/lib/cosmos/tools/tlm_viewer/widgets.rb +53 -0
- data/lib/cosmos/top_level.rb +596 -0
- data/lib/cosmos/utilities/crc.rb +166 -0
- data/lib/cosmos/utilities/csv.rb +83 -0
- data/lib/cosmos/utilities/logger.rb +137 -0
- data/lib/cosmos/utilities/low_fragmentation_array.rb +11 -0
- data/lib/cosmos/utilities/message_log.rb +74 -0
- data/lib/cosmos/utilities/quaternion.rb +258 -0
- data/lib/cosmos/utilities/ruby_lex_utils.rb +313 -0
- data/lib/cosmos/utilities/simulated_target.rb +99 -0
- data/lib/cosmos/utilities.rb +10 -0
- data/lib/cosmos/version.rb +12 -0
- data/lib/cosmos/win32/excel.rb +66 -0
- data/lib/cosmos/win32/win32.rb +387 -0
- data/lib/cosmos/win32/win32_main.rb +311 -0
- data/lib/cosmos.rb +63 -0
- data/roodi.yml +24 -0
- data/run_gui_tests.bat +32 -0
- data/spec/ccsds/ccsds_packet_spec.rb +67 -0
- data/spec/ccsds/ccsds_parser_spec.rb +148 -0
- data/spec/config/config_parser_spec.rb +322 -0
- data/spec/conversions/conversion_spec.rb +31 -0
- data/spec/conversions/generic_conversion_spec.rb +45 -0
- data/spec/conversions/new_packet_log_conversion_spec.rb +39 -0
- data/spec/conversions/polynomial_conversion_spec.rb +40 -0
- data/spec/conversions/processor_conversion_spec.rb +45 -0
- data/spec/conversions/received_count_conversion_spec.rb +43 -0
- data/spec/conversions/received_time_formatted_conversion_spec.rb +49 -0
- data/spec/conversions/received_time_seconds_conversion_spec.rb +50 -0
- data/spec/conversions/segmented_polynomial_conversion_spec.rb +51 -0
- data/spec/conversions/unix_time_formatted_conversion_spec.rb +74 -0
- data/spec/conversions/unix_time_seconds_conversion_spec.rb +76 -0
- data/spec/core_ext/array_spec.rb +186 -0
- data/spec/core_ext/class_spec.rb +36 -0
- data/spec/core_ext/cosmos_io_spec.rb +77 -0
- data/spec/core_ext/exception_spec.rb +91 -0
- data/spec/core_ext/file_spec.rb +72 -0
- data/spec/core_ext/hash_spec.rb +24 -0
- data/spec/core_ext/io_spec.rb +46 -0
- data/spec/core_ext/kernel_spec.rb +54 -0
- data/spec/core_ext/math_spec.rb +116 -0
- data/spec/core_ext/matrix_spec.rb +66 -0
- data/spec/core_ext/objectspace_spec.rb +29 -0
- data/spec/core_ext/range_spec.rb +21 -0
- data/spec/core_ext/socket_spec.rb +32 -0
- data/spec/core_ext/string_spec.rb +223 -0
- data/spec/core_ext/stringio_spec.rb +21 -0
- data/spec/core_ext/time_spec.rb +151 -0
- data/spec/gui/line_graph/line_clip_spec.rb +322 -0
- data/spec/install/config/system/system.txt +33 -0
- data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -0
- data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -0
- data/spec/install/config/targets/COSMOS/cmd_tlm_server.txt +6 -0
- data/spec/install/config/targets/COSMOS/screens/limits_change.txt +20 -0
- data/spec/install/config/targets/COSMOS/screens/version.txt +19 -0
- data/spec/install/config/targets/COSMOS/target.txt +5 -0
- data/spec/install/config/targets/INST/cmd_tlm/inst_cmd_linc.txt +30 -0
- data/spec/install/config/targets/INST/cmd_tlm/inst_cmds.txt +111 -0
- data/spec/install/config/targets/INST/cmd_tlm/inst_tlm.txt +236 -0
- data/spec/install/config/targets/INST/cmd_tlm/inst_tlm_linc.txt +25 -0
- data/spec/install/config/targets/INST/cmd_tlm_server.txt +5 -0
- data/spec/install/config/targets/INST/lib/sim_inst.rb +294 -0
- data/spec/install/config/targets/INST/target.txt +10 -0
- data/spec/install/config/targets/META/cmd_tlm/meta_cmd.txt +4 -0
- data/spec/install/config/targets/META/cmd_tlm/meta_tlm.txt +4 -0
- data/spec/install/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -0
- data/spec/install/config/tools/cmd_tlm_server/cmd_tlm_server.txt +1 -0
- data/spec/install/lib/README.txt +1 -0
- data/spec/install/userpath.txt +1 -0
- data/spec/interfaces/cmd_tlm_server_interface_spec.rb +150 -0
- data/spec/interfaces/interface_spec.rb +128 -0
- data/spec/interfaces/linc_interface_spec.rb +199 -0
- data/spec/interfaces/serial_interface_spec.rb +56 -0
- data/spec/interfaces/simulated_target_interface_spec.rb +128 -0
- data/spec/interfaces/stream_interface_spec.rb +157 -0
- data/spec/interfaces/tcpip_client_interface_spec.rb +54 -0
- data/spec/interfaces/tcpip_server_interface_spec.rb +151 -0
- data/spec/interfaces/udp_interface_spec.rb +175 -0
- data/spec/io/buffered_file_spec.rb +113 -0
- data/spec/io/io_multiplexer_spec.rb +94 -0
- data/spec/io/json_drb_object_spec.rb +93 -0
- data/spec/io/json_drb_spec.rb +293 -0
- data/spec/io/json_rpc_spec.rb +264 -0
- data/spec/io/raw_logger_pair_spec.rb +76 -0
- data/spec/io/raw_logger_spec.rb +133 -0
- data/spec/io/serial_driver_spec.rb +61 -0
- data/spec/io/stderr_spec.rb +32 -0
- data/spec/io/stdout_spec.rb +32 -0
- data/spec/io/tcpip_server_spec.rb +322 -0
- data/spec/io/udp_sockets_spec.rb +94 -0
- data/spec/io/win32_serial_driver_spec.rb +88 -0
- data/spec/packet_logs/meta_packet_log_writer_spec.rb +170 -0
- data/spec/packet_logs/packet_log_reader_spec.rb +408 -0
- data/spec/packet_logs/packet_log_writer_pair_spec.rb +30 -0
- data/spec/packet_logs/packet_log_writer_spec.rb +209 -0
- data/spec/packets/binary_accessor_spec.rb +2073 -0
- data/spec/packets/commands_spec.rb +369 -0
- data/spec/packets/limits_response_spec.rb +25 -0
- data/spec/packets/limits_spec.rb +326 -0
- data/spec/packets/packet_config_spec.rb +1620 -0
- data/spec/packets/packet_item_limits_spec.rb +161 -0
- data/spec/packets/packet_item_spec.rb +386 -0
- data/spec/packets/packet_spec.rb +949 -0
- data/spec/packets/structure_item_spec.rb +195 -0
- data/spec/packets/structure_spec.rb +419 -0
- data/spec/packets/telemetry_spec.rb +535 -0
- data/spec/processors/new_packet_log_processor_spec.rb +39 -0
- data/spec/processors/processor_spec.rb +55 -0
- data/spec/processors/statistics_processor_spec.rb +60 -0
- data/spec/processors/watermark_processor_spec.rb +51 -0
- data/spec/script/script_spec.rb +650 -0
- data/spec/spec_helper.rb +138 -0
- data/spec/streams/burst_stream_protocol_spec.rb +32 -0
- data/spec/streams/fixed_stream_protocol_spec.rb +110 -0
- data/spec/streams/length_stream_protocol_spec.rb +297 -0
- data/spec/streams/preidentified_stream_protocol_spec.rb +118 -0
- data/spec/streams/serial_stream_spec.rb +105 -0
- data/spec/streams/stream_protocol_spec.rb +332 -0
- data/spec/streams/stream_spec.rb +29 -0
- data/spec/streams/tcpip_client_stream_spec.rb +54 -0
- data/spec/streams/tcpip_socket_stream_spec.rb +146 -0
- data/spec/streams/template_stream_protocol_spec.rb +151 -0
- data/spec/streams/terminated_stream_protocol_spec.rb +123 -0
- data/spec/system/system_spec.rb +645 -0
- data/spec/system/target_spec.rb +248 -0
- data/spec/tools/cmd_tlm_server/api_spec.rb +1090 -0
- data/spec/tools/cmd_tlm_server/background_task_spec.rb +32 -0
- data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +82 -0
- data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +406 -0
- data/spec/tools/cmd_tlm_server/cmd_tlm_server_spec.rb +418 -0
- data/spec/tools/cmd_tlm_server/commanding_spec.rb +123 -0
- data/spec/tools/cmd_tlm_server/connections_spec.rb +147 -0
- data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +317 -0
- data/spec/tools/cmd_tlm_server/interfaces_spec.rb +228 -0
- data/spec/tools/cmd_tlm_server/packet_logging_spec.rb +143 -0
- data/spec/tools/cmd_tlm_server/router_thread_spec.rb +104 -0
- data/spec/tools/cmd_tlm_server/routers_spec.rb +196 -0
- data/spec/top_level/top_level_spec.rb +320 -0
- data/spec/utilities/crc_spec.rb +45 -0
- data/spec/utilities/csv_spec.rb +97 -0
- data/spec/utilities/logger_spec.rb +102 -0
- data/spec/utilities/message_log_spec.rb +89 -0
- data/spec/utilities/quaternion_spec.rb +107 -0
- data/spec/utilities/ruby_lex_utils_spec.rb +86 -0
- data/tasks/manifest.rake +22 -0
- data/tasks/spec.rake +23 -0
- metadata +1566 -0
|
@@ -0,0 +1,1065 @@
|
|
|
1
|
+
# encoding: ascii-8bit
|
|
2
|
+
|
|
3
|
+
# Copyright 2014 Ball Aerospace & Technologies Corp.
|
|
4
|
+
# All Rights Reserved.
|
|
5
|
+
#
|
|
6
|
+
# This program is free software; you can modify and/or redistribute it
|
|
7
|
+
# under the terms of the GNU General Public License
|
|
8
|
+
# as published by the Free Software Foundation; version 3 with
|
|
9
|
+
# attribution addendums as found in the LICENSE.txt
|
|
10
|
+
|
|
11
|
+
require 'cosmos'
|
|
12
|
+
Cosmos.catch_fatal_exception do
|
|
13
|
+
require 'cosmos/gui/qt_tool'
|
|
14
|
+
require 'cosmos/gui/dialogs/progress_dialog'
|
|
15
|
+
require 'cosmos/tools/table_manager/table_config'
|
|
16
|
+
require 'cosmos/tools/table_manager/table_manager_core'
|
|
17
|
+
require 'cosmos/gui/dialogs/tlm_details_dialog'
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
class Qt::ComboBox
|
|
21
|
+
def wheelEvent(param)
|
|
22
|
+
self.nativeParentWidget.wheelEvent(param)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Override the default COSMOS setting which makes table cells read only
|
|
27
|
+
Cosmos.disable_warnings do
|
|
28
|
+
class Qt::TableWidgetItem
|
|
29
|
+
def initialize(string = "")
|
|
30
|
+
super(string)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
module Cosmos
|
|
36
|
+
|
|
37
|
+
class ComboBoxItemDelegate < Qt::StyledItemDelegate
|
|
38
|
+
def initialize(parent)
|
|
39
|
+
@table = parent
|
|
40
|
+
super(parent)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def createEditor(parent, option, index)
|
|
44
|
+
table = TableManager.instance.core.table_def.get_table(TableManager.instance.currently_displayed_table_name)
|
|
45
|
+
gui_table = TableManager.instance.gui_tables[TableManager.instance.currently_displayed_table_name]
|
|
46
|
+
if table.type == :TWO_DIMENSIONAL
|
|
47
|
+
item_name = gui_table.horizontalHeaderItem(index.column).text + index.row.to_s
|
|
48
|
+
item = table.get_item(item_name)
|
|
49
|
+
else
|
|
50
|
+
item_name = gui_table.verticalHeaderItem(index.row).text
|
|
51
|
+
item = table.get_item(item_name)
|
|
52
|
+
end
|
|
53
|
+
if item.display_type == :STATE and item.editable
|
|
54
|
+
combo = Qt::ComboBox.new(parent)
|
|
55
|
+
combo.addItems(item.states.keys.sort)
|
|
56
|
+
combo.setCurrentText(table.read(item.name).to_s)
|
|
57
|
+
connect(combo, SIGNAL('activated(int)')) do
|
|
58
|
+
emit commitData(combo)
|
|
59
|
+
gui_table.closeEditor(combo, 0)
|
|
60
|
+
end
|
|
61
|
+
return combo
|
|
62
|
+
else
|
|
63
|
+
return super(parent, option, index)
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def setModelData(editor, model, index)
|
|
68
|
+
if Qt::ComboBox === editor
|
|
69
|
+
model.setData(index, Qt::Variant.new(editor.currentText), Qt::EditRole)
|
|
70
|
+
else
|
|
71
|
+
super(editor, model, index)
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def setEditorData(editor, index)
|
|
76
|
+
if Qt::ComboBox === editor
|
|
77
|
+
v = index.data(Qt::EditRole)
|
|
78
|
+
combo_index = editor.findText(v.toString)
|
|
79
|
+
if combo_index >= 0
|
|
80
|
+
editor.setCurrentIndex(combo_index)
|
|
81
|
+
else
|
|
82
|
+
editor.setCurrentIndex(0)
|
|
83
|
+
end
|
|
84
|
+
else
|
|
85
|
+
super(editor, index)
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
# A dialog box containing a text field and ok button
|
|
91
|
+
class TextDialog < Qt::Dialog
|
|
92
|
+
def initialize(parent)
|
|
93
|
+
super(parent)
|
|
94
|
+
|
|
95
|
+
layout = Qt::VBoxLayout.new
|
|
96
|
+
|
|
97
|
+
@text = Qt::PlainTextEdit.new
|
|
98
|
+
if Kernel.is_windows?
|
|
99
|
+
@text.setFont(Cosmos.getFont('courier', 10))
|
|
100
|
+
else
|
|
101
|
+
@text.setFont(Cosmos.getFont('courier', 14))
|
|
102
|
+
end
|
|
103
|
+
@text.setReadOnly(true)
|
|
104
|
+
|
|
105
|
+
layout.addWidget(@text)
|
|
106
|
+
|
|
107
|
+
button_layout = Qt::HBoxLayout.new
|
|
108
|
+
ok_button = Qt::PushButton.new('OK')
|
|
109
|
+
ok_button.connect(SIGNAL('clicked()')) { self.accept }
|
|
110
|
+
button_layout.addStretch
|
|
111
|
+
button_layout.addWidget(ok_button)
|
|
112
|
+
button_layout.addStretch
|
|
113
|
+
|
|
114
|
+
layout.addLayout(button_layout)
|
|
115
|
+
setLayout(layout)
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
# Set the title of the dialog box and the text contents
|
|
119
|
+
def set_title_and_text(title, text)
|
|
120
|
+
self.setWindowTitle(title)
|
|
121
|
+
@text.setPlainText(text)
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
# Set the size of the dialog box
|
|
125
|
+
def set_size(width, height)
|
|
126
|
+
resize(width, height)
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
class ProgressDialog
|
|
131
|
+
def progress=(increment)
|
|
132
|
+
set_overall_progress(increment / 100.0)
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
# TableManager uses text based configuration files (see TableConfig) to define both
|
|
137
|
+
# the structure of the binary file and how it should be displayed. It takes this configuration
|
|
138
|
+
# information to dynamically build a tabbed GUI containing the visual representation of the binary data.
|
|
139
|
+
# In addition to displaying binary data it can also create the binary representation given
|
|
140
|
+
# the text configuration file. It can display the binary data as a hex dump and creates
|
|
141
|
+
# human readable reports of the given data.
|
|
142
|
+
class TableManager < QtTool
|
|
143
|
+
slots 'handle_tab_change(int)'
|
|
144
|
+
slots 'mouse_over(int, int)'
|
|
145
|
+
slots 'click_callback(QTableWidgetItem*)'
|
|
146
|
+
slots 'context_menu(const QPoint&)'
|
|
147
|
+
|
|
148
|
+
attr_reader :core
|
|
149
|
+
|
|
150
|
+
# Hash of all the created tables with the table name as the key value
|
|
151
|
+
attr_reader :gui_tables
|
|
152
|
+
|
|
153
|
+
# Array of all the created tables ordered by the way they were created.
|
|
154
|
+
# Thus they are ordered the same as the text configuration file.
|
|
155
|
+
attr_reader :ordered_gui_table_names
|
|
156
|
+
|
|
157
|
+
# Place holder for the current table
|
|
158
|
+
attr_reader :table
|
|
159
|
+
|
|
160
|
+
# The currently displayed table name
|
|
161
|
+
attr_reader :currently_displayed_table_name
|
|
162
|
+
|
|
163
|
+
# Label containing the full path name of the table definition file
|
|
164
|
+
attr_reader :table_def_label
|
|
165
|
+
|
|
166
|
+
# Label containing the full path name of the table binary file
|
|
167
|
+
attr_reader :table_bin_label
|
|
168
|
+
|
|
169
|
+
# Top vertical layout where subclasses can put their own widgets
|
|
170
|
+
attr_accessor :top_layout
|
|
171
|
+
|
|
172
|
+
# File name of the png icon to use for the application.
|
|
173
|
+
# The application looks in the COSMOS PATH and USERPATH directories for the icon.
|
|
174
|
+
# This must be overloaded before calling super() in the intialize
|
|
175
|
+
# function to allow Table Manager to use the new file name.
|
|
176
|
+
attr_accessor :app_icon_filename
|
|
177
|
+
|
|
178
|
+
# Create a TableManager instance by initializing the globals,
|
|
179
|
+
# setting the program icon, creating the menu, and laying out the GUI elements.
|
|
180
|
+
def initialize(options)
|
|
181
|
+
super(options) # MUST BE FIRST - All code before super is executed twice in RubyQt Based classes
|
|
182
|
+
@app_icon_filename = 'table_manager.png'
|
|
183
|
+
Cosmos.load_cosmos_icon(@app_icon_filename)
|
|
184
|
+
|
|
185
|
+
initialize_actions(options.no_tables)
|
|
186
|
+
initialize_menus(options.no_tables)
|
|
187
|
+
initialize_central_widget()
|
|
188
|
+
complete_initialize()
|
|
189
|
+
setMinimumSize(500, 300)
|
|
190
|
+
|
|
191
|
+
statusBar.showMessage(tr("Ready")) # Show message to initialize status bar
|
|
192
|
+
|
|
193
|
+
@def_path = File.join(::Cosmos::USERPATH, %w(config tools table_manager))
|
|
194
|
+
@bin_path = System.paths['TABLES']
|
|
195
|
+
@gui_tables = Hash.new
|
|
196
|
+
@ordered_gui_table_names = Array.new
|
|
197
|
+
@currently_displayed_table_name = ""
|
|
198
|
+
@core = TableManagerCore.new
|
|
199
|
+
@@instance = self
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
def self.instance
|
|
203
|
+
@@instance
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
def initialize_actions(no_tables = false)
|
|
207
|
+
super()
|
|
208
|
+
|
|
209
|
+
# File Menu Actions
|
|
210
|
+
@file_new = Qt::Action.new(Cosmos.get_icon('file.png'), tr('&New File'), self)
|
|
211
|
+
@file_new_keyseq = Qt::KeySequence.new(Qt::KeySequence::New)
|
|
212
|
+
@file_new.shortcut = @file_new_keyseq
|
|
213
|
+
@file_new.statusTip = tr('Create new binary file based on definition')
|
|
214
|
+
@file_new.connect(SIGNAL('triggered()')) { file_new() }
|
|
215
|
+
|
|
216
|
+
@file_open = Qt::Action.new(Cosmos.get_icon('open.png'), tr('&Open File'), self)
|
|
217
|
+
@file_open_keyseq = Qt::KeySequence.new(Qt::KeySequence::Open)
|
|
218
|
+
@file_open.shortcut = @file_open_keyseq
|
|
219
|
+
@file_open.statusTip = tr('Open binary file for display and editing')
|
|
220
|
+
@file_open.connect(SIGNAL('triggered()')) { file_open() }
|
|
221
|
+
|
|
222
|
+
@file_save = Qt::Action.new(Cosmos.get_icon('save.png'), tr('&Save File'), self)
|
|
223
|
+
@file_save_keyseq = Qt::KeySequence.new(Qt::KeySequence::Save)
|
|
224
|
+
@file_save.shortcut = @file_save_keyseq
|
|
225
|
+
@file_save.statusTip = tr('Save the displayed data back to the binary file')
|
|
226
|
+
@file_save.connect(SIGNAL('triggered()')) { file_save(false) }
|
|
227
|
+
|
|
228
|
+
@file_save_as = Qt::Action.new(Cosmos.get_icon('save_as.png'), tr('Save File &As'), self)
|
|
229
|
+
@file_save_as_keyseq = Qt::KeySequence.new(Qt::KeySequence::SaveAs)
|
|
230
|
+
@file_save_as.shortcut = @file_save_as_keyseq
|
|
231
|
+
@file_save_as.statusTip = tr('Save the displayed data to a new binary file')
|
|
232
|
+
@file_save_as.connect(SIGNAL('triggered()')) { file_save(true) }
|
|
233
|
+
|
|
234
|
+
@file_check = Qt::Action.new(Cosmos.get_icon('checkmark.png'), tr('&Check All'), self)
|
|
235
|
+
@file_check_keyseq = Qt::KeySequence.new(tr('Ctrl+K'))
|
|
236
|
+
@file_check.shortcut = @file_check_keyseq
|
|
237
|
+
@file_check.statusTip = tr('Check each data value against verification criteria')
|
|
238
|
+
@file_check.connect(SIGNAL('triggered()')) { file_check() }
|
|
239
|
+
|
|
240
|
+
@file_hex = Qt::Action.new(tr('&Hex Dump'), self)
|
|
241
|
+
@file_hex_keyseq = Qt::KeySequence.new(tr('Ctrl+H'))
|
|
242
|
+
@file_hex.shortcut = @file_hex_keyseq
|
|
243
|
+
@file_hex.statusTip = tr('Display a hex representation of the binary file')
|
|
244
|
+
@file_hex.connect(SIGNAL('triggered()')) { display_hex(:file) }
|
|
245
|
+
|
|
246
|
+
@file_report = Qt::Action.new(tr('Create &Report'), self)
|
|
247
|
+
@file_report_keyseq = Qt::KeySequence.new(tr('Ctrl+R'))
|
|
248
|
+
@file_report.shortcut = @file_report_keyseq
|
|
249
|
+
@file_report.statusTip = tr('Create a text file report describing the binary data')
|
|
250
|
+
@file_report.connect(SIGNAL('triggered()')) { file_report() }
|
|
251
|
+
|
|
252
|
+
unless no_tables
|
|
253
|
+
# Table Menu Actions
|
|
254
|
+
@table_check = Qt::Action.new(Cosmos.get_icon('checkmark.png'), tr('&Check'), self)
|
|
255
|
+
@table_check.statusTip = tr('Check each data value against verification criteria')
|
|
256
|
+
@table_check.connect(SIGNAL('triggered()')) { table_check() }
|
|
257
|
+
|
|
258
|
+
@table_default = Qt::Action.new(tr('&Default'), self)
|
|
259
|
+
@table_default_keyseq = Qt::KeySequence.new(tr('Ctrl+D'))
|
|
260
|
+
@table_default.shortcut = @table_default_keyseq
|
|
261
|
+
@table_default.statusTip = tr('Revert all data values to their defaults')
|
|
262
|
+
@table_default.connect(SIGNAL('triggered()')) { table_default() }
|
|
263
|
+
|
|
264
|
+
@table_hex = Qt::Action.new(tr('&Hex Dump'), self)
|
|
265
|
+
@table_hex.statusTip = tr('Display a hex representation of the table')
|
|
266
|
+
@table_hex.connect(SIGNAL('triggered()')) { display_hex(:table) }
|
|
267
|
+
|
|
268
|
+
@table_save = Qt::Action.new(tr('&Save Table Binary'), self)
|
|
269
|
+
@table_save.statusTip = tr('Save the current table to a stand alone binary file')
|
|
270
|
+
@table_save.connect(SIGNAL('triggered()')) { table_save() }
|
|
271
|
+
|
|
272
|
+
@table_commit = Qt::Action.new(tr('Commit to Existing &File'), self)
|
|
273
|
+
@table_commit.statusTip = tr('Incorporate the current table data into a binary file which already contains the table')
|
|
274
|
+
@table_commit.connect(SIGNAL('triggered()')) { table_commit() }
|
|
275
|
+
|
|
276
|
+
@table_update = Qt::Action.new(tr('&Update Definition'), self)
|
|
277
|
+
@table_update.statusTip = tr('Change the defaults in the definition file to the displayed table data')
|
|
278
|
+
@table_update.connect(SIGNAL('triggered()')) { table_update() }
|
|
279
|
+
end
|
|
280
|
+
end
|
|
281
|
+
|
|
282
|
+
def initialize_menus(no_tables = false)
|
|
283
|
+
# File Menu
|
|
284
|
+
file_menu = menuBar.addMenu(tr('&File'))
|
|
285
|
+
file_menu.addAction(@file_new)
|
|
286
|
+
file_menu.addAction(@file_open)
|
|
287
|
+
file_menu.addAction(@file_save)
|
|
288
|
+
file_menu.addAction(@file_save_as)
|
|
289
|
+
file_menu.addSeparator()
|
|
290
|
+
file_menu.addAction(@file_check)
|
|
291
|
+
file_menu.addAction(@file_hex)
|
|
292
|
+
file_menu.addAction(@file_report)
|
|
293
|
+
file_menu.addSeparator()
|
|
294
|
+
file_menu.addAction(@exit_action)
|
|
295
|
+
|
|
296
|
+
unless no_tables
|
|
297
|
+
# Table Menu
|
|
298
|
+
table_menu = menuBar.addMenu(tr('&Table'))
|
|
299
|
+
table_menu.addAction(@table_check)
|
|
300
|
+
table_menu.addAction(@table_default)
|
|
301
|
+
table_menu.addAction(@table_hex)
|
|
302
|
+
table_menu.addSeparator()
|
|
303
|
+
table_menu.addAction(@table_save)
|
|
304
|
+
table_menu.addAction(@table_commit)
|
|
305
|
+
table_menu.addAction(@table_update)
|
|
306
|
+
end
|
|
307
|
+
|
|
308
|
+
# Help Menu
|
|
309
|
+
@about_string = "TableManager is a generic binary file editor. "
|
|
310
|
+
@about_string << "It features a text file driven interface to define binary files and their preferred display type. "
|
|
311
|
+
@about_string << "This text file is then used to dynamically construct a spreadsheet type interface to "
|
|
312
|
+
@about_string << "allow easy editing of the underlying binary structure."
|
|
313
|
+
|
|
314
|
+
initialize_help_menu()
|
|
315
|
+
end
|
|
316
|
+
|
|
317
|
+
def initialize_central_widget
|
|
318
|
+
# Create the central widget
|
|
319
|
+
@central_widget = Qt::Widget.new
|
|
320
|
+
setCentralWidget(@central_widget)
|
|
321
|
+
|
|
322
|
+
# Create the top level vertical layout
|
|
323
|
+
@top_layout = Qt::VBoxLayout.new(@central_widget)
|
|
324
|
+
|
|
325
|
+
# Create the information pane with the filenames
|
|
326
|
+
@filename_layout = Qt::FormLayout.new
|
|
327
|
+
@table_def_label = Qt::Label.new("")
|
|
328
|
+
@filename_layout.addRow(tr("Definition File:"), @table_def_label)
|
|
329
|
+
@table_bin_label = Qt::Label.new("")
|
|
330
|
+
@filename_layout.addRow(tr("Binary File:"), @table_bin_label)
|
|
331
|
+
@top_layout.addLayout(@filename_layout)
|
|
332
|
+
|
|
333
|
+
# Separator before editor
|
|
334
|
+
@sep1 = Qt::Frame.new(@central_widget)
|
|
335
|
+
@sep1.setFrameStyle(Qt::Frame::HLine | Qt::Frame::Sunken)
|
|
336
|
+
@top_layout.addWidget(@sep1)
|
|
337
|
+
|
|
338
|
+
@tabbook = Qt::TabWidget.new
|
|
339
|
+
connect(@tabbook, SIGNAL('currentChanged(int)'), self, SLOT('handle_tab_change(int)'))
|
|
340
|
+
@top_layout.addWidget(@tabbook)
|
|
341
|
+
|
|
342
|
+
@check_icons = []
|
|
343
|
+
@check_icons << Cosmos.get_icon("CheckBoxEmpty.gif")
|
|
344
|
+
@check_icons << Cosmos.get_icon("CheckBoxCheck.gif")
|
|
345
|
+
end
|
|
346
|
+
|
|
347
|
+
# Menu option to check every table tab's values against their allowable ranges
|
|
348
|
+
def file_check
|
|
349
|
+
begin
|
|
350
|
+
result = ""
|
|
351
|
+
@ordered_gui_table_names.each do |name|
|
|
352
|
+
save_result = save_gui_data(name)
|
|
353
|
+
check_result = @core.table_check(name)
|
|
354
|
+
if not save_result.nil? or not check_result.empty?
|
|
355
|
+
result << "Error(s) in #{name}:\n" << save_result.to_s << check_result.to_s
|
|
356
|
+
end
|
|
357
|
+
end
|
|
358
|
+
if result.empty?
|
|
359
|
+
result = "All parameters are within their constraints."
|
|
360
|
+
end
|
|
361
|
+
Qt::MessageBox.information(self, "File Check", result)
|
|
362
|
+
rescue => err
|
|
363
|
+
ExceptionDialog.new(self, err, "File Check Errors", false)
|
|
364
|
+
end
|
|
365
|
+
end
|
|
366
|
+
|
|
367
|
+
# Menu option to check the table values against their allowable ranges
|
|
368
|
+
def table_check
|
|
369
|
+
begin
|
|
370
|
+
save_result = save_gui_data(@currently_displayed_table_name)
|
|
371
|
+
check_result = @core.table_check(@currently_displayed_table_name)
|
|
372
|
+
if save_result.nil? and check_result.empty?
|
|
373
|
+
result = "All parameters are within their constraints."
|
|
374
|
+
elsif save_result.nil?
|
|
375
|
+
result = check_result
|
|
376
|
+
elsif check_result.nil?
|
|
377
|
+
result = save_result
|
|
378
|
+
else
|
|
379
|
+
result = save_result << check_result
|
|
380
|
+
end
|
|
381
|
+
|
|
382
|
+
Qt::MessageBox.information(self, "Table Check", result)
|
|
383
|
+
rescue => err
|
|
384
|
+
ExceptionDialog.new(self, err, "Table Check Errors", false)
|
|
385
|
+
end
|
|
386
|
+
end
|
|
387
|
+
|
|
388
|
+
# Menu option to set all the table items to their default values
|
|
389
|
+
def table_default
|
|
390
|
+
begin
|
|
391
|
+
@core.table_default(@currently_displayed_table_name)
|
|
392
|
+
rescue => err
|
|
393
|
+
ExceptionDialog.new(self, err, "Table Default Errors", false)
|
|
394
|
+
end
|
|
395
|
+
begin
|
|
396
|
+
display_gui_data(@currently_displayed_table_name)
|
|
397
|
+
rescue => err
|
|
398
|
+
ExceptionDialog.new(self, err, "Table Default Errors", false)
|
|
399
|
+
end
|
|
400
|
+
end
|
|
401
|
+
|
|
402
|
+
# Menu option to create a text file report of all the table data
|
|
403
|
+
def file_report
|
|
404
|
+
begin
|
|
405
|
+
@ordered_gui_table_names.each do |name|
|
|
406
|
+
save_gui_data(name)
|
|
407
|
+
end
|
|
408
|
+
|
|
409
|
+
@core.file_report
|
|
410
|
+
statusBar.showMessage(tr("File Report Created Successfully"))
|
|
411
|
+
rescue => err
|
|
412
|
+
ExceptionDialog.new(self, err, "File Report Errors", false)
|
|
413
|
+
end
|
|
414
|
+
end
|
|
415
|
+
|
|
416
|
+
# Saves the binary data to a file.
|
|
417
|
+
# It first commits the GUI data to the internal data structures and checks
|
|
418
|
+
# for errors. If none are found, it saves the data to the table binary file.
|
|
419
|
+
def file_save(save_as = false)
|
|
420
|
+
begin
|
|
421
|
+
@ordered_gui_table_names.each do |name|
|
|
422
|
+
save_gui_data(name)
|
|
423
|
+
end
|
|
424
|
+
|
|
425
|
+
filename = @table_bin_label.text
|
|
426
|
+
if save_as
|
|
427
|
+
filename = Qt::FileDialog.getSaveFileName(self,
|
|
428
|
+
"File Save",
|
|
429
|
+
@table_bin_label.text,
|
|
430
|
+
"Binary File (*.bin *.dat);;All Files (*)")
|
|
431
|
+
|
|
432
|
+
# Check for an empty string which indicates the user clicked "Cancel" on the dialog
|
|
433
|
+
return if filename.to_s.empty?
|
|
434
|
+
@table_bin_label.text = filename
|
|
435
|
+
end
|
|
436
|
+
|
|
437
|
+
begin
|
|
438
|
+
@core.file_save(filename)
|
|
439
|
+
rescue => error
|
|
440
|
+
Qt::MessageBox.information(self, "File Save Errors", error.message)
|
|
441
|
+
return
|
|
442
|
+
end
|
|
443
|
+
|
|
444
|
+
@ordered_gui_table_names.each do |name|
|
|
445
|
+
display_gui_data(name)
|
|
446
|
+
end
|
|
447
|
+
|
|
448
|
+
statusBar.showMessage(tr("File Saved Successfully"))
|
|
449
|
+
rescue => err
|
|
450
|
+
ExceptionDialog.new(self, err, "File Save Errors", false)
|
|
451
|
+
end
|
|
452
|
+
end
|
|
453
|
+
|
|
454
|
+
# Menu option to display a dialog containing a hex dump of all table values
|
|
455
|
+
def display_hex(type)
|
|
456
|
+
begin
|
|
457
|
+
dialog = TextDialog.new(self)
|
|
458
|
+
if type == :file
|
|
459
|
+
str = @core.file_hex()
|
|
460
|
+
title = File.basename(@table_bin_label.text)
|
|
461
|
+
else
|
|
462
|
+
str = @core.table_hex(@currently_displayed_table_name)
|
|
463
|
+
title = @currently_displayed_table_name
|
|
464
|
+
end
|
|
465
|
+
dialog.set_title_and_text("#{title} Hex Dump", str)
|
|
466
|
+
dialog.set_size(550, 400)
|
|
467
|
+
dialog.exec
|
|
468
|
+
dialog.dispose
|
|
469
|
+
rescue => err
|
|
470
|
+
ExceptionDialog.new(self, err, "Display Hex Errors", false)
|
|
471
|
+
end
|
|
472
|
+
end
|
|
473
|
+
|
|
474
|
+
# Menu option to save the currently displayed table to an existing table binary file
|
|
475
|
+
# containing that table.
|
|
476
|
+
def table_commit
|
|
477
|
+
begin
|
|
478
|
+
save_gui_data(@currently_displayed_table_name)
|
|
479
|
+
|
|
480
|
+
# Ask for the file to save the current table to
|
|
481
|
+
bin_file, def_file = get_binary_and_definition_file_paths()
|
|
482
|
+
if bin_file.nil? or def_file.nil? then return 1 end
|
|
483
|
+
|
|
484
|
+
@core.table_commit(@currently_displayed_table_name, bin_file, def_file)
|
|
485
|
+
|
|
486
|
+
# Update the labels
|
|
487
|
+
@table_bin_label.text = bin_file
|
|
488
|
+
@table_def_label.text = def_file
|
|
489
|
+
|
|
490
|
+
# Display the new table
|
|
491
|
+
delete_tabs()
|
|
492
|
+
@core.table_def.get_all_tables.each do |table|
|
|
493
|
+
create_table_tab(table)
|
|
494
|
+
display_gui_data(table.name)
|
|
495
|
+
end
|
|
496
|
+
@currently_displayed_table_name = @ordered_gui_table_names[0]
|
|
497
|
+
@currently_displayed_table_name ||= '' # ensure it's not nil
|
|
498
|
+
rescue => err
|
|
499
|
+
ExceptionDialog.new(self, err, "Table Commit Errors", false)
|
|
500
|
+
end
|
|
501
|
+
end
|
|
502
|
+
|
|
503
|
+
# Menu option to save the currently displayed table as a stand alone binary file
|
|
504
|
+
def table_save
|
|
505
|
+
begin
|
|
506
|
+
save_gui_data(@currently_displayed_table_name)
|
|
507
|
+
|
|
508
|
+
filename = Qt::FileDialog.getSaveFileName(self,
|
|
509
|
+
"File Save",
|
|
510
|
+
File.join(@bin_path, "#{@currently_displayed_table_name.gsub(/\s/,'')}.dat"),
|
|
511
|
+
"Binary File (*.bin *.dat);;All Files (*)")
|
|
512
|
+
# Check for a 0 length string which indicates the user clicked "Cancel" on the dialog
|
|
513
|
+
if filename.to_s.strip.length != 0
|
|
514
|
+
@bin_path = File.dirname(filename)
|
|
515
|
+
@core.table_save(@currently_displayed_table_name, filename)
|
|
516
|
+
end
|
|
517
|
+
rescue => err
|
|
518
|
+
ExceptionDialog.new(self, err, "Table Save Errors", false)
|
|
519
|
+
end
|
|
520
|
+
end
|
|
521
|
+
|
|
522
|
+
# Menu option to update the definition file defaults with the currently
|
|
523
|
+
# displayed table values
|
|
524
|
+
def table_update
|
|
525
|
+
begin
|
|
526
|
+
save_gui_data(@currently_displayed_table_name)
|
|
527
|
+
|
|
528
|
+
result = Qt::MessageBox.question(self, "Update Table Definition File",
|
|
529
|
+
"Are you sure you want to update the table definition file. This action is irreversable!",
|
|
530
|
+
Qt::MessageBox::Yes | Qt::MessageBox::No, Qt::MessageBox::Yes)
|
|
531
|
+
if result == Qt::MessageBox::Yes
|
|
532
|
+
@core.table_update_def(@currently_displayed_table_name)
|
|
533
|
+
end # end if result == MBOX_CLICKED_YES
|
|
534
|
+
rescue => err
|
|
535
|
+
ExceptionDialog.new(self, err, "Table Update Errors", false)
|
|
536
|
+
end
|
|
537
|
+
end
|
|
538
|
+
|
|
539
|
+
# Menu option that opens a dialog to allows the user to select a table binary
|
|
540
|
+
# file named XXX.dat. The associated table definition file (XXX_def.txt)
|
|
541
|
+
# is then opened and parsed to determine how to display the binary file in the gui.
|
|
542
|
+
def file_open(bin_file = nil, def_file = nil)
|
|
543
|
+
begin
|
|
544
|
+
unless bin_file and def_file
|
|
545
|
+
bin_file, def_file = get_binary_and_definition_file_paths()
|
|
546
|
+
end
|
|
547
|
+
|
|
548
|
+
# Do nothing if the binary or definition files are not found
|
|
549
|
+
if bin_file.nil? or def_file.nil? then return end
|
|
550
|
+
|
|
551
|
+
# Update the labels
|
|
552
|
+
@table_bin_label.text = bin_file
|
|
553
|
+
@table_def_label.text = def_file
|
|
554
|
+
|
|
555
|
+
# open the file
|
|
556
|
+
begin
|
|
557
|
+
@core.file_open(def_file, bin_file)
|
|
558
|
+
rescue => err
|
|
559
|
+
if err.message.include?("Binary")
|
|
560
|
+
Qt::MessageBox.information(self, "Table Open Error", err.message)
|
|
561
|
+
else
|
|
562
|
+
ExceptionDialog.new(self, err, "Table Open Errors", false)
|
|
563
|
+
end
|
|
564
|
+
end
|
|
565
|
+
|
|
566
|
+
Qt::Application.setOverrideCursor(Qt::Cursor.new(Qt::WaitCursor))
|
|
567
|
+
|
|
568
|
+
# display the file
|
|
569
|
+
delete_tabs()
|
|
570
|
+
@core.table_def.get_all_tables.each do |table|
|
|
571
|
+
create_table_tab(table)
|
|
572
|
+
display_gui_data(table.name)
|
|
573
|
+
end
|
|
574
|
+
@currently_displayed_table_name = @ordered_gui_table_names[0]
|
|
575
|
+
@currently_displayed_table_name ||= '' # ensure it's not nil
|
|
576
|
+
|
|
577
|
+
Qt::Application.restoreOverrideCursor()
|
|
578
|
+
rescue => err
|
|
579
|
+
ExceptionDialog.new(self, err, "File Open Errors", false)
|
|
580
|
+
end
|
|
581
|
+
end
|
|
582
|
+
|
|
583
|
+
# Menu option to close the open table
|
|
584
|
+
def file_close
|
|
585
|
+
begin
|
|
586
|
+
@core.reset
|
|
587
|
+
@table_bin_label.text = ''
|
|
588
|
+
@table_def_label.text = ''
|
|
589
|
+
delete_tabs()
|
|
590
|
+
rescue => err
|
|
591
|
+
ExceptionDialog.new(self, err, "File New Errors", false)
|
|
592
|
+
end
|
|
593
|
+
end
|
|
594
|
+
|
|
595
|
+
# Menu option to create a new table binary file based on a table definition file.
|
|
596
|
+
def file_new
|
|
597
|
+
if !@currently_displayed_table_name.empty?
|
|
598
|
+
result = Qt::MessageBox.question(self, "File New",
|
|
599
|
+
"Creating new files will close the currently open file. Are you sure?",
|
|
600
|
+
Qt::MessageBox::Yes | Qt::MessageBox::No, Qt::MessageBox::Yes)
|
|
601
|
+
if result != Qt::MessageBox::Yes
|
|
602
|
+
return
|
|
603
|
+
end
|
|
604
|
+
end
|
|
605
|
+
|
|
606
|
+
begin
|
|
607
|
+
success = nil
|
|
608
|
+
bin_files = []
|
|
609
|
+
filenames = Qt::FileDialog.getOpenFileNames(self,
|
|
610
|
+
"Open Binary Definition Text File(s)",
|
|
611
|
+
@def_path,
|
|
612
|
+
"Config File (*.txt)\nAll Files (*)")
|
|
613
|
+
|
|
614
|
+
# Check for a 0 length string which indicates the user clicked "Cancel" on the dialog
|
|
615
|
+
if filenames and filenames.length != 0
|
|
616
|
+
@def_path = File.dirname(filenames[0])
|
|
617
|
+
file_close()
|
|
618
|
+
output_dir = Qt::FileDialog.getExistingDirectory(self, "Select Output Directory", @bin_path)
|
|
619
|
+
if output_dir
|
|
620
|
+
@bin_path = output_dir
|
|
621
|
+
filenames.each do |def_file|
|
|
622
|
+
if File.basename(def_file) =~ /_def\.txt/
|
|
623
|
+
basename = File.basename(def_file)[0...-8] # Get the basename without the _def.txt
|
|
624
|
+
else
|
|
625
|
+
basename = File.basename(def_file).split('.')[0...-1].join('.') # Get the basename without the extension
|
|
626
|
+
end
|
|
627
|
+
|
|
628
|
+
# Set the current_bin so the file_report function works correctly
|
|
629
|
+
output_filename = File.join(output_dir, "#{basename}.dat")
|
|
630
|
+
if File.exist?(output_filename)
|
|
631
|
+
result = Qt::MessageBox.question(self, "File New",
|
|
632
|
+
"File: #{output_filename} already exists. Overwrite?",
|
|
633
|
+
Qt::MessageBox::Yes | Qt::MessageBox::No, Qt::MessageBox::Yes)
|
|
634
|
+
if result != Qt::MessageBox::Yes
|
|
635
|
+
return
|
|
636
|
+
end
|
|
637
|
+
end
|
|
638
|
+
end
|
|
639
|
+
|
|
640
|
+
ProgressDialog.execute(self, 'Create New Files', 500, 50, true, false, false, false, false) do |dialog|
|
|
641
|
+
# create the file
|
|
642
|
+
begin
|
|
643
|
+
bin_files = @core.file_new(filenames, output_dir, dialog)
|
|
644
|
+
success = true
|
|
645
|
+
dialog.close_done
|
|
646
|
+
rescue => err
|
|
647
|
+
Qt.execute_in_main_thread(true) {|| ExceptionDialog.new(self, err, "File New Errors", false)}
|
|
648
|
+
dialog.close_done
|
|
649
|
+
end
|
|
650
|
+
end
|
|
651
|
+
end # end output_dir.nil? (user did NOT click cancel on dialog)
|
|
652
|
+
file_open(bin_files[0] ,filenames[0]) if success
|
|
653
|
+
end # end filename != 0 (user did NOT click cancel on dialog)
|
|
654
|
+
rescue => err
|
|
655
|
+
ExceptionDialog.new(self, err, "File New Errors", false)
|
|
656
|
+
end
|
|
657
|
+
end
|
|
658
|
+
|
|
659
|
+
# Called when the user selects another tab in the gui
|
|
660
|
+
def handle_tab_change(index)
|
|
661
|
+
@currently_displayed_table_name = @ordered_gui_table_names[index]
|
|
662
|
+
@currently_displayed_table_name ||= '' # ensure it's not nil
|
|
663
|
+
end
|
|
664
|
+
|
|
665
|
+
def mouse_over(row, col)
|
|
666
|
+
return if @currently_displayed_table_name.empty?
|
|
667
|
+
table = @core.table_def.get_table(@currently_displayed_table_name)
|
|
668
|
+
gui_table = @gui_tables[@currently_displayed_table_name]
|
|
669
|
+
if table and gui_table
|
|
670
|
+
if table.type == :TWO_DIMENSIONAL
|
|
671
|
+
item_name = gui_table.horizontalHeaderItem(col).text + row.to_s
|
|
672
|
+
item = table.get_item(item_name)
|
|
673
|
+
statusBar.showMessage(item.description)
|
|
674
|
+
else
|
|
675
|
+
item_name = gui_table.verticalHeaderItem(row).text
|
|
676
|
+
item = table.get_item(item_name)
|
|
677
|
+
statusBar.showMessage(item.description)
|
|
678
|
+
end
|
|
679
|
+
end
|
|
680
|
+
end
|
|
681
|
+
|
|
682
|
+
def click_callback(item)
|
|
683
|
+
table = @core.table_def.get_table(@currently_displayed_table_name)
|
|
684
|
+
gui_table = @gui_tables[@currently_displayed_table_name]
|
|
685
|
+
gui_table.editItem(item) if (item.flags & Qt::ItemIsEditable) != 0
|
|
686
|
+
end
|
|
687
|
+
|
|
688
|
+
def context_menu(point)
|
|
689
|
+
begin
|
|
690
|
+
table = @core.table_def.get_table(@currently_displayed_table_name)
|
|
691
|
+
gui_table = @gui_tables[@currently_displayed_table_name]
|
|
692
|
+
if table and gui_table
|
|
693
|
+
table_item = gui_table.itemAt(point)
|
|
694
|
+
if table_item
|
|
695
|
+
menu = Qt::Menu.new()
|
|
696
|
+
|
|
697
|
+
if table.type == :TWO_DIMENSIONAL
|
|
698
|
+
item_name = gui_table.horizontalHeaderItem(table_item.column).text + table_item.row.to_s
|
|
699
|
+
else
|
|
700
|
+
item_name = gui_table.verticalHeaderItem(table_item.row).text
|
|
701
|
+
end
|
|
702
|
+
details_action = Qt::Action.new(tr("Details"), self)
|
|
703
|
+
details_action.statusTip = tr("Popup details about #{@currently_displayed_table_name} #{item_name}")
|
|
704
|
+
details_action.connect(SIGNAL('triggered()')) do
|
|
705
|
+
TlmDetailsDialog.new(nil,
|
|
706
|
+
'TABLE',
|
|
707
|
+
@currently_displayed_table_name.upcase,
|
|
708
|
+
item_name,
|
|
709
|
+
table)
|
|
710
|
+
end
|
|
711
|
+
menu.addAction(details_action)
|
|
712
|
+
|
|
713
|
+
default_action = Qt::Action.new(tr("Default"), self)
|
|
714
|
+
default_action.statusTip = tr("Set item to default value")
|
|
715
|
+
default_action.connect(SIGNAL('triggered()')) do
|
|
716
|
+
item = table.get_item(item_name)
|
|
717
|
+
table.write(item.name, item.default)
|
|
718
|
+
update_gui_item(@currently_displayed_table_name, table, item, table_item.row, table_item.column)
|
|
719
|
+
end
|
|
720
|
+
menu.addAction(default_action)
|
|
721
|
+
|
|
722
|
+
global_point = gui_table.mapToGlobal(point)
|
|
723
|
+
global_point.x += gui_table.verticalHeader.width
|
|
724
|
+
menu.exec(global_point)
|
|
725
|
+
menu.dispose
|
|
726
|
+
end
|
|
727
|
+
end
|
|
728
|
+
rescue => err
|
|
729
|
+
ExceptionDialog.new(self, err, "context_menu Errors", false)
|
|
730
|
+
end
|
|
731
|
+
end
|
|
732
|
+
|
|
733
|
+
# Creates a tab in the table manager gui
|
|
734
|
+
def create_table_tab(table_definition)
|
|
735
|
+
begin
|
|
736
|
+
# Table
|
|
737
|
+
@table = Qt::TableWidget.new(self)
|
|
738
|
+
delegate = ComboBoxItemDelegate.new(@table)
|
|
739
|
+
@table.setItemDelegate(delegate)
|
|
740
|
+
@table.setEditTriggers(Qt::AbstractItemView::AllEditTriggers)
|
|
741
|
+
@table.setSelectionMode(Qt::AbstractItemView::NoSelection)
|
|
742
|
+
#@table.setAlternatingRowColors(true)
|
|
743
|
+
@gui_tables[table_definition.name] = @table
|
|
744
|
+
@ordered_gui_table_names << table_definition.name
|
|
745
|
+
@tabbook.addTab(@table, table_definition.name)
|
|
746
|
+
|
|
747
|
+
@table.setRowCount(table_definition.num_rows)
|
|
748
|
+
@table.setColumnCount(table_definition.num_columns)
|
|
749
|
+
@table.setMouseTracking(true)
|
|
750
|
+
connect(@table, SIGNAL('cellEntered(int, int)'), self, SLOT('mouse_over(int, int)'))
|
|
751
|
+
connect(@table, SIGNAL('itemClicked(QTableWidgetItem*)'), self, SLOT('click_callback(QTableWidgetItem*)'))
|
|
752
|
+
@table.setContextMenuPolicy(Qt::CustomContextMenu)
|
|
753
|
+
connect(@table, SIGNAL('customContextMenuRequested(const QPoint&)'), self, SLOT('context_menu(const QPoint&)'))
|
|
754
|
+
rescue => err
|
|
755
|
+
ExceptionDialog.new(self, err, "create_table_tab Errors", false)
|
|
756
|
+
end
|
|
757
|
+
end
|
|
758
|
+
|
|
759
|
+
# Saves all the information in the given gui table name to the underlying
|
|
760
|
+
# binary structure (although it does not commit it to disk).
|
|
761
|
+
def save_gui_data(name)
|
|
762
|
+
gui_table = @gui_tables[name]
|
|
763
|
+
table = @core.table_def.get_table(name)
|
|
764
|
+
result = ""
|
|
765
|
+
|
|
766
|
+
# Cancel any table selections so the text will be visible when it is refreshed
|
|
767
|
+
gui_table.clearSelection
|
|
768
|
+
|
|
769
|
+
# don't do anything if we can't find the table
|
|
770
|
+
if gui_table.nil? or table.nil? then return end
|
|
771
|
+
|
|
772
|
+
# First go through the gui and set the underlying data to what is displayed
|
|
773
|
+
(0...table.num_rows).each do |r|
|
|
774
|
+
(0...table.num_columns).each do |c|
|
|
775
|
+
if table.type == :TWO_DIMENSIONAL
|
|
776
|
+
# get the table item definition so we know how to save it
|
|
777
|
+
item_def = table.get_item("#{gui_table.horizontalHeaderItem(c).text}#{r}")
|
|
778
|
+
else # table is ONE_DIMENSIONAL
|
|
779
|
+
# get the table item definition so we know how to save it
|
|
780
|
+
item_def = table.get_item(gui_table.verticalHeaderItem(r).text)
|
|
781
|
+
end
|
|
782
|
+
|
|
783
|
+
# determine how to convert the display value to the actual value
|
|
784
|
+
begin
|
|
785
|
+
case item_def.display_type
|
|
786
|
+
when :DEC
|
|
787
|
+
if item_def.data_type == :FLOAT
|
|
788
|
+
x = Float(gui_table.item(r,c).text)
|
|
789
|
+
else
|
|
790
|
+
x = Integer(gui_table.item(r,c).text)
|
|
791
|
+
end
|
|
792
|
+
|
|
793
|
+
when :HEX
|
|
794
|
+
x = Integer(gui_table.item(r,c).text)
|
|
795
|
+
|
|
796
|
+
when :CHECK
|
|
797
|
+
# the ItemData will be 0 for unchecked (corresponds with min value),
|
|
798
|
+
# and 1 for checked (corresponds with max value)
|
|
799
|
+
if gui_table.item(r,c).checkState == Qt::Checked
|
|
800
|
+
x = item_def.range.end.to_i
|
|
801
|
+
else
|
|
802
|
+
x = item_def.range.begin.to_i
|
|
803
|
+
end
|
|
804
|
+
|
|
805
|
+
when :STATE
|
|
806
|
+
x = item_def.states[gui_table.item(r,c).text]
|
|
807
|
+
end
|
|
808
|
+
|
|
809
|
+
# If there is a read conversion we first read the converted value before writing.
|
|
810
|
+
# This is to prevent writing the displayed value (which has the conversion applied)
|
|
811
|
+
# back to the binary data if they are already equal.
|
|
812
|
+
if item_def.read_conversion
|
|
813
|
+
converted = table.read(item_def.name, :CONVERTED)
|
|
814
|
+
table.write(item_def.name, x) if converted != x
|
|
815
|
+
else
|
|
816
|
+
table.write(item_def.name, x)
|
|
817
|
+
end
|
|
818
|
+
|
|
819
|
+
# if we have a problem casting the value it probably means the user put in garbage
|
|
820
|
+
# in this case force the range check to fail
|
|
821
|
+
rescue => error
|
|
822
|
+
text = gui_table.item(r,c).text
|
|
823
|
+
result << "Error saving #{item_def.name} value of #{text} due to #{error.message}.\nReverting to default of #{item_def.default}\n"
|
|
824
|
+
table.write(item_def.name, item_def.default)
|
|
825
|
+
update_gui_item(name, table, item_def, r, c)
|
|
826
|
+
end
|
|
827
|
+
end # end each table column
|
|
828
|
+
end # end each table row
|
|
829
|
+
if result == ""
|
|
830
|
+
result = nil
|
|
831
|
+
end
|
|
832
|
+
result
|
|
833
|
+
end
|
|
834
|
+
|
|
835
|
+
# Determines how to display all the binary table data based on
|
|
836
|
+
# the table definition and displays it using the various gui elements.
|
|
837
|
+
def display_gui_data(name)
|
|
838
|
+
table_def = @core.table_def.get_table(name)
|
|
839
|
+
gui_table = @gui_tables[name]
|
|
840
|
+
|
|
841
|
+
# Cancel any table selections so the text will be visible when it is refreshed
|
|
842
|
+
gui_table.clearSelection
|
|
843
|
+
|
|
844
|
+
# if we can't find the table do nothing
|
|
845
|
+
if table_def.nil? or gui_table.nil? then return end
|
|
846
|
+
|
|
847
|
+
items = table_def.sorted_items
|
|
848
|
+
|
|
849
|
+
if table_def.type == :TWO_DIMENSIONAL
|
|
850
|
+
row_headers = []
|
|
851
|
+
(0...table_def.num_rows).each {|i| row_headers << "#{i+1}" }
|
|
852
|
+
gui_table.setVerticalHeaderLabels(row_headers)
|
|
853
|
+
|
|
854
|
+
column_headers = []
|
|
855
|
+
(0...table_def.num_columns).each {|i| column_headers << items[i].name[0...-1] }
|
|
856
|
+
gui_table.setHorizontalHeaderLabels(column_headers)
|
|
857
|
+
else
|
|
858
|
+
row_headers = []
|
|
859
|
+
items.each {|item_def| row_headers << item_def.name }
|
|
860
|
+
gui_table.setVerticalHeaderLabels(row_headers)
|
|
861
|
+
gui_table.setHorizontalHeaderLabels(["Value"])
|
|
862
|
+
end
|
|
863
|
+
|
|
864
|
+
table_row = 0
|
|
865
|
+
table_column = 0
|
|
866
|
+
|
|
867
|
+
items.each do |item_def|
|
|
868
|
+
update_gui_item(name, table_def, item_def, table_row, table_column)
|
|
869
|
+
|
|
870
|
+
if table_def.type == :TWO_DIMENSIONAL
|
|
871
|
+
# only increment our row when we've processed all the columns
|
|
872
|
+
if table_column == table_def.num_columns - 1
|
|
873
|
+
table_row += 1
|
|
874
|
+
table_column = 0
|
|
875
|
+
else
|
|
876
|
+
table_column += 1
|
|
877
|
+
end
|
|
878
|
+
else
|
|
879
|
+
table_row += 1
|
|
880
|
+
end
|
|
881
|
+
end
|
|
882
|
+
|
|
883
|
+
gui_table.resizeColumnsToContents()
|
|
884
|
+
gui_table.resizeRowsToContents()
|
|
885
|
+
end
|
|
886
|
+
|
|
887
|
+
# Updates the table by setting the value in the table to the properly formatted value.
|
|
888
|
+
def update_gui_item(table_name, table_def, item_def, table_row, table_column)
|
|
889
|
+
gui_table = @gui_tables[table_name]
|
|
890
|
+
|
|
891
|
+
case item_def.display_type
|
|
892
|
+
when :STATE
|
|
893
|
+
gui_table.setItem(table_row, table_column, Qt::TableWidgetItem.new(table_def.read(item_def.name)))
|
|
894
|
+
if item_def.editable
|
|
895
|
+
gui_table.item(table_row, table_column).setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsEditable)
|
|
896
|
+
else
|
|
897
|
+
gui_table.item(table_row, table_column).setFlags(Qt::NoItemFlags)
|
|
898
|
+
end
|
|
899
|
+
|
|
900
|
+
when :CHECK
|
|
901
|
+
gui_table.setItem(table_row, table_column, Qt::TableWidgetItem.new(table_def.read(item_def.name)))
|
|
902
|
+
# the ItemData will be 0 for unchecked (corresponds with min value),
|
|
903
|
+
# and 1 for checked (corresponds with max value)
|
|
904
|
+
if table_def.read(item_def.name) == item_def.range.begin
|
|
905
|
+
gui_table.item(table_row, table_column).setCheckState(Qt::Unchecked)
|
|
906
|
+
else
|
|
907
|
+
gui_table.item(table_row, table_column).setCheckState(Qt::Checked)
|
|
908
|
+
end
|
|
909
|
+
if item_def.editable
|
|
910
|
+
gui_table.item(table_row, table_column).setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsUserCheckable)
|
|
911
|
+
else
|
|
912
|
+
gui_table.item(table_row, table_column).setFlags(Qt::NoItemFlags)
|
|
913
|
+
end
|
|
914
|
+
|
|
915
|
+
when :DEC
|
|
916
|
+
gui_table.setItem(table_row, table_column, Qt::TableWidgetItem.new(tr(table_def.read(item_def.name).to_s)))
|
|
917
|
+
if item_def.editable
|
|
918
|
+
gui_table.item(table_row, table_column).setFlags(Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsEnabled)
|
|
919
|
+
else
|
|
920
|
+
gui_table.item(table_row, table_column).setFlags(Qt::NoItemFlags)
|
|
921
|
+
end
|
|
922
|
+
|
|
923
|
+
when :HEX
|
|
924
|
+
case item_def.bit_size
|
|
925
|
+
when 8
|
|
926
|
+
x = sprintf("%02X", table_def.read(item_def.name).to_s)
|
|
927
|
+
# if the number was negative x will have .. and possibly another
|
|
928
|
+
# F in the string which we remove by taking the last 4 digits
|
|
929
|
+
x = /\w{2}$/.match(x)[0]
|
|
930
|
+
when 16
|
|
931
|
+
x = sprintf("%04X", table_def.read(item_def.name).to_s)
|
|
932
|
+
# if the number was negative x will have .. and possibly another
|
|
933
|
+
# F in the string which we remove by taking the last 4 digits
|
|
934
|
+
x = /\w{4}$/.match(x)[0]
|
|
935
|
+
else
|
|
936
|
+
x = sprintf("%08X", table_def.read(item_def.name).to_s)
|
|
937
|
+
# if the number was negative x will have .. and possibly another
|
|
938
|
+
# F in the string which we remove by taking the last 8 digits
|
|
939
|
+
x = /\w{8}$/.match(x)[0]
|
|
940
|
+
end
|
|
941
|
+
x = Integer("0x#{x}") # convert to Integer
|
|
942
|
+
gui_table.setItem(table_row, table_column, Qt::TableWidgetItem.new(tr("0x%X" % x)))
|
|
943
|
+
if item_def.editable
|
|
944
|
+
gui_table.item(table_row, table_column).setFlags(Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsEnabled)
|
|
945
|
+
else
|
|
946
|
+
gui_table.item(table_row, table_column).setFlags(Qt::NoItemFlags)
|
|
947
|
+
end
|
|
948
|
+
end
|
|
949
|
+
end
|
|
950
|
+
|
|
951
|
+
# Looks in a directory for a definition file for the given binary file.
|
|
952
|
+
# The definition file name up to the _def.txt must be fully contained in
|
|
953
|
+
# the given binary file. For example: XXX_YYY1_def.txt will be returned for
|
|
954
|
+
# a binary file name of XXX_YYY1_Extra.bin. A binary file of XXX_YYY2.bin
|
|
955
|
+
# will not match.
|
|
956
|
+
#
|
|
957
|
+
# @return [String|nil] Path to the best definition file or nil
|
|
958
|
+
def get_best_definition_file(path, bin_file)
|
|
959
|
+
def_file = nil
|
|
960
|
+
|
|
961
|
+
# compare the filename with all possibilities in the directory
|
|
962
|
+
Dir.foreach(path) do |possible_def_file|
|
|
963
|
+
# only bother checking definition files
|
|
964
|
+
index = possible_def_file.index('_def.txt')
|
|
965
|
+
next unless index
|
|
966
|
+
|
|
967
|
+
base_name = possible_def_file[0...index]
|
|
968
|
+
if bin_file.index(base_name)
|
|
969
|
+
# If we've already found a def_file and now found another match we
|
|
970
|
+
# clear the first and stop the search. Force the user to decide.
|
|
971
|
+
if def_file
|
|
972
|
+
def_file = nil
|
|
973
|
+
break
|
|
974
|
+
end
|
|
975
|
+
def_file = File.join(path, possible_def_file)
|
|
976
|
+
end
|
|
977
|
+
end # each file in the directory
|
|
978
|
+
|
|
979
|
+
return def_file
|
|
980
|
+
end
|
|
981
|
+
|
|
982
|
+
# Prompts the user to select a binary table file to open.
|
|
983
|
+
# (e.g. MyBinary_TC2.dat or MyBinaryJMT = MyBinary_def.dat)
|
|
984
|
+
# Returns both the path to the binary file and the table definition file or
|
|
985
|
+
# nil for both if either can not be found.
|
|
986
|
+
def get_binary_and_definition_file_paths
|
|
987
|
+
bin_file = nil
|
|
988
|
+
def_file = nil
|
|
989
|
+
|
|
990
|
+
bin_file = Qt::FileDialog.getOpenFileName(
|
|
991
|
+
self, "Open Binary", @bin_path, "Binary File (*.bin *.dat);;All Files (*)")
|
|
992
|
+
unless bin_file.nil? or bin_file.empty?
|
|
993
|
+
@bin_path = File.dirname(bin_file)
|
|
994
|
+
bin_file_base = File.basename(bin_file).split('.')[0]
|
|
995
|
+
|
|
996
|
+
# Look in the binary file's base directory
|
|
997
|
+
def_file = get_best_definition_file(File.dirname(bin_file), bin_file_base)
|
|
998
|
+
def_found = !def_file.nil?
|
|
999
|
+
|
|
1000
|
+
if not def_found
|
|
1001
|
+
# Look in the stored definition file directory
|
|
1002
|
+
def_file = get_best_definition_file(@def_path, bin_file_base)
|
|
1003
|
+
def_found = !def_file.nil?
|
|
1004
|
+
end
|
|
1005
|
+
|
|
1006
|
+
if def_found # if the definition file was automatically found
|
|
1007
|
+
return bin_file, def_file
|
|
1008
|
+
else # the definition file was not automatically found
|
|
1009
|
+
result = Qt::MessageBox.question(self, "Manually Open Definition File",
|
|
1010
|
+
"The definition text file for #{File.basename(bin_file)} could not be found.\nWould you like to manually locate it?",
|
|
1011
|
+
Qt::MessageBox::Yes | Qt::MessageBox::No | Qt::MessageBox::Cancel, Qt::MessageBox::Yes)
|
|
1012
|
+
if result == Qt::MessageBox::Yes
|
|
1013
|
+
def_file = Qt::FileDialog.getOpenFileName(self,
|
|
1014
|
+
"Open Definition File",
|
|
1015
|
+
@def_path,
|
|
1016
|
+
"Definition File (*.txt)\nAll Files (*)")
|
|
1017
|
+
unless def_file.nil? or def_file.empty?
|
|
1018
|
+
if File.basename(def_file) =~ /\.txt/
|
|
1019
|
+
@def_path = File.dirname(def_file)
|
|
1020
|
+
return bin_file, def_file
|
|
1021
|
+
else
|
|
1022
|
+
Qt::MessageBox.information(self, "Open Definition File Errors",
|
|
1023
|
+
"Definition file #{File.basename(def_file)} does not have .txt extension")
|
|
1024
|
+
end
|
|
1025
|
+
end # the user clicked Cancel on the File Open dialog
|
|
1026
|
+
end # the user clicked No when prompted to find the definition file
|
|
1027
|
+
end # end if the definition file wasn't found
|
|
1028
|
+
end # end if the user did not click Cancel on the Open dialog
|
|
1029
|
+
return nil, nil
|
|
1030
|
+
end
|
|
1031
|
+
|
|
1032
|
+
# Delete all the tabs in the table manager gui and initialize globals to
|
|
1033
|
+
# prepare for the next table to load.
|
|
1034
|
+
def delete_tabs
|
|
1035
|
+
@gui_tables = Hash.new
|
|
1036
|
+
@ordered_gui_table_names = Array.new
|
|
1037
|
+
@currently_displayed_table_name = ""
|
|
1038
|
+
|
|
1039
|
+
@tabbook.tabs.each_with_index do |tab, index|
|
|
1040
|
+
tab.dispose
|
|
1041
|
+
@tabbook.removeTab(index)
|
|
1042
|
+
end
|
|
1043
|
+
end
|
|
1044
|
+
|
|
1045
|
+
def self.run(option_parser = nil, options = nil)
|
|
1046
|
+
Cosmos.catch_fatal_exception do
|
|
1047
|
+
unless option_parser and options
|
|
1048
|
+
option_parser, options = create_default_options()
|
|
1049
|
+
options.width = 800
|
|
1050
|
+
options.height = 600
|
|
1051
|
+
options.title = "Table Manager"
|
|
1052
|
+
options.auto_size = false
|
|
1053
|
+
options.no_tables = false
|
|
1054
|
+
option_parser.separator "Table Manager Specific Options:"
|
|
1055
|
+
option_parser.on("-n", "--notables", "Do not include table file editing options. This will remove the 'Table' menu.") do
|
|
1056
|
+
options.no_tables = true
|
|
1057
|
+
end
|
|
1058
|
+
end
|
|
1059
|
+
|
|
1060
|
+
super(option_parser, options)
|
|
1061
|
+
end
|
|
1062
|
+
end
|
|
1063
|
+
end
|
|
1064
|
+
|
|
1065
|
+
end # module Cosmos
|