cosmos 4.2.4-java → 4.3.0-java
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +1 -1
- data/Gemfile +1 -1
- data/Manifest.txt +12 -0
- data/autohotkey/tools/cmd_sequence.ahk +21 -20
- data/autohotkey/tools/cmd_sequence2.ahk +1 -1
- data/autohotkey/tools/config_editor.ahk +1 -1
- data/autohotkey/tools/launcher.ahk +1 -0
- data/autohotkey/tools/packet_viewer.ahk +6 -5
- data/autohotkey/tools/test_runner.ahk +8 -8
- data/bin/cosmos +37 -0
- data/bin/dart_util +0 -0
- data/data/config/item_modifiers.yaml +9 -0
- data/data/crc.txt +91 -86
- data/demo/Rakefile +2 -0
- data/demo/config/dart/Gemfile +1 -1
- data/demo/config/data/crc.txt +8 -5
- data/demo/config/system/system.txt +28 -0
- data/demo/config/system/system2.txt +21 -3
- data/demo/config/system/system_alt_ports.txt +69 -0
- data/demo/config/targets/INST/cmd_tlm/inst_tlm.txt +1 -0
- data/demo/config/tools/cmd_tlm_server/cmd_tlm_server_chain.txt +18 -0
- data/demo/procedures/cosmos_api_test.rb +18 -14
- data/demo/procedures/local_screen_example.rb +51 -0
- data/ext/cosmos/ext/cosmos_io/cosmos_io.c +32 -4
- data/ext/cosmos/ext/packet/packet.c +6 -0
- data/ext/mkrf_conf.rb +2 -2
- data/install/config/dart/Gemfile +1 -1
- data/install/config/data/crc.txt +2 -2
- data/install/config/system/system.txt +23 -1
- data/lib/cosmos/conversions.rb +2 -0
- data/lib/cosmos/conversions/packet_time_formatted_conversion.rb +38 -0
- data/lib/cosmos/conversions/packet_time_seconds_conversion.rb +38 -0
- data/lib/cosmos/core_ext/cosmos_io.rb +2 -1
- data/lib/cosmos/dart/Gemfile +1 -1
- data/lib/cosmos/dart/examples/dart_stream_client.rb +6 -2
- data/lib/cosmos/dart/lib/dart_common.rb +1 -1
- data/lib/cosmos/dart/lib/dart_database_cleaner.rb +2 -2
- data/lib/cosmos/dart/lib/dart_decommutator.rb +4 -4
- data/lib/cosmos/dart/lib/dart_importer.rb +3 -3
- data/lib/cosmos/dart/lib/dart_packet_log_writer.rb +2 -2
- data/lib/cosmos/dart/processes/dart_ingester.rb +2 -0
- data/lib/cosmos/dart/processes/dart_util.rb +4 -4
- data/lib/cosmos/dart/spec/dart/dart_reducer_manager_spec.rb +3 -3
- data/lib/cosmos/gui/dialogs/cmd_tlm_raw_dialog.rb +9 -5
- data/lib/cosmos/gui/dialogs/details_dialog.rb +29 -29
- data/lib/cosmos/gui/dialogs/exception_list_dialog.rb +1 -1
- data/lib/cosmos/gui/dialogs/find_replace_dialog.rb +3 -3
- data/lib/cosmos/gui/dialogs/interface_raw_dialog.rb +2 -2
- data/lib/cosmos/gui/dialogs/set_tlm_dialog.rb +1 -1
- data/lib/cosmos/gui/dialogs/tlm_details_dialog.rb +10 -10
- data/lib/cosmos/gui/qt.rb +10 -1
- data/lib/cosmos/gui/qt_tool.rb +17 -10
- data/lib/cosmos/gui/text/ruby_editor.rb +47 -8
- data/lib/cosmos/gui/utilities/classification_banner.rb +60 -0
- data/lib/cosmos/gui/utilities/script_module_gui.rb +26 -0
- data/lib/cosmos/interfaces.rb +1 -0
- data/lib/cosmos/interfaces/interface.rb +4 -0
- data/lib/cosmos/interfaces/protocols/ignore_packet_protocol.rb +46 -0
- data/lib/cosmos/interfaces/protocols/preidentified_protocol.rb +68 -23
- data/lib/cosmos/packet_logs/packet_log_reader.rb +69 -26
- data/lib/cosmos/packet_logs/packet_log_writer.rb +13 -1
- data/lib/cosmos/packets/commands.rb +5 -1
- data/lib/cosmos/packets/packet.rb +36 -2
- data/lib/cosmos/packets/packet_config.rb +0 -1
- data/lib/cosmos/packets/parsers/format_string_parser.rb +0 -1
- data/lib/cosmos/packets/parsers/xtce_parser.rb +1 -1
- data/lib/cosmos/packets/telemetry.rb +4 -0
- data/lib/cosmos/script/api_shared.rb +2 -0
- data/lib/cosmos/script/limits.rb +4 -0
- data/lib/cosmos/script/script.rb +27 -11
- data/lib/cosmos/script/telemetry.rb +3 -1
- data/lib/cosmos/script/tools.rb +18 -8
- data/lib/cosmos/system/system.rb +21 -0
- data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +26 -24
- data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +29 -29
- data/lib/cosmos/tools/cmd_sequence/cmd_sequence.rb +65 -40
- data/lib/cosmos/tools/cmd_sequence/sequence_item.rb +6 -6
- data/lib/cosmos/tools/cmd_tlm_server/api.rb +13 -0
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +12 -9
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +7 -1
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +8 -8
- data/lib/cosmos/tools/cmd_tlm_server/commanding.rb +13 -2
- data/lib/cosmos/tools/cmd_tlm_server/gui/interfaces_tab.rb +2 -2
- data/lib/cosmos/tools/cmd_tlm_server/gui/logging_tab.rb +13 -13
- data/lib/cosmos/tools/cmd_tlm_server/gui/packets_tab.rb +4 -4
- data/lib/cosmos/tools/cmd_tlm_server/gui/status_tab.rb +8 -8
- data/lib/cosmos/tools/cmd_tlm_server/gui/targets_tab.rb +5 -5
- data/lib/cosmos/tools/cmd_tlm_server/interface_thread.rb +35 -20
- data/lib/cosmos/tools/cmd_tlm_server/replay_backend.rb +15 -11
- data/lib/cosmos/tools/config_editor/config_editor.rb +69 -69
- data/lib/cosmos/tools/data_viewer/data_viewer.rb +42 -38
- data/lib/cosmos/tools/data_viewer/data_viewer_component.rb +1 -0
- data/lib/cosmos/tools/data_viewer/dump_component.rb +1 -0
- data/lib/cosmos/tools/handbook_creator/handbook_creator.rb +4 -4
- data/lib/cosmos/tools/launcher/launcher.rb +1 -1
- data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +28 -24
- data/lib/cosmos/tools/opengl_builder/opengl_builder.rb +42 -42
- data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +56 -53
- data/lib/cosmos/tools/script_runner/script_runner.rb +112 -95
- data/lib/cosmos/tools/script_runner/script_runner_frame.rb +48 -30
- data/lib/cosmos/tools/table_manager/table_manager.rb +42 -42
- data/lib/cosmos/tools/test_runner/test_runner.rb +45 -27
- data/lib/cosmos/tools/test_runner/test_runner_chooser.rb +3 -3
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +45 -45
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor_config.rb +4 -4
- data/lib/cosmos/tools/tlm_grapher/data_object_adders/xy_data_object_adder.rb +3 -3
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/housekeeping_data_object_editor.rb +7 -7
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/xy_data_object_editor.rb +10 -10
- data/lib/cosmos/tools/tlm_grapher/data_objects/housekeeping_data_object.rb +10 -3
- data/lib/cosmos/tools/tlm_grapher/data_objects/xy_data_object.rb +6 -6
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots/overview_tabbed_plots.rb +14 -14
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tool.rb +83 -83
- data/lib/cosmos/tools/tlm_viewer/screen.rb +73 -13
- data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +15 -15
- data/lib/cosmos/tools/tlm_viewer/widgets.rb +1 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasellipse_widget.rb +40 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/timegraph_widget.rb +1 -1
- data/lib/cosmos/tools/tlm_viewer/widgets/widget.rb +6 -1
- data/lib/cosmos/top_level.rb +14 -1
- data/lib/cosmos/version.rb +5 -5
- data/lib/cosmos/win32/excel.rb +63 -12
- data/make_gems.sh +10 -0
- data/spec/conversions/packet_time_formatted_conversion_spec.rb +58 -0
- data/spec/conversions/packet_time_seconds_conversion_spec.rb +60 -0
- data/spec/interfaces/protocols/ignore_packet_protocol_spec.rb +243 -0
- data/spec/interfaces/protocols/preidentified_protocol_spec.rb +227 -4
- data/spec/io/serial_driver_spec.rb +15 -13
- data/spec/packet_logs/packet_log_reader_spec.rb +72 -17
- data/spec/packets/packet_config_spec.rb +5 -16
- data/spec/packets/parsers/format_string_parser_spec.rb +0 -11
- data/spec/packets/parsers/macro_parser_spec.rb +36 -36
- data/spec/packets/parsers/state_parser_spec.rb +36 -0
- data/spec/packets/telemetry_spec.rb +11 -9
- data/spec/script/script_spec.rb +2 -3
- data/spec/script/scripting_spec.rb +2 -1
- data/spec/script/tools_spec.rb +0 -1
- data/spec/tools/cmd_tlm_server/api_spec.rb +28 -20
- data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +33 -0
- data/spec/tools/cmd_tlm_server/commanding_spec.rb +25 -1
- data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +15 -0
- data/tasks/gemfile_stats.rake +3 -2
- metadata +14 -2
|
@@ -19,7 +19,8 @@ module Cosmos
|
|
|
19
19
|
# Packet adds is the ability to apply formatting to PacketItem values as well
|
|
20
20
|
# as managing PacketItem's limit states.
|
|
21
21
|
class Packet < Structure
|
|
22
|
-
RESERVED_ITEM_NAMES = ['RECEIVED_TIMESECONDS'.freeze, 'RECEIVED_TIMEFORMATTED'.freeze, 'RECEIVED_COUNT'.freeze]
|
|
22
|
+
RESERVED_ITEM_NAMES = ['PACKET_TIMESECONDS'.freeze, 'PACKET_TIMEFORMATTED'.freeze, 'RECEIVED_TIMESECONDS'.freeze, 'RECEIVED_TIMEFORMATTED'.freeze, 'RECEIVED_COUNT'.freeze]
|
|
23
|
+
CATCH_ALL_STATE = 'ANY'
|
|
23
24
|
|
|
24
25
|
# @return [String] Name of the target this packet is associated with
|
|
25
26
|
attr_reader :target_name
|
|
@@ -66,6 +67,12 @@ module Cosmos
|
|
|
66
67
|
# @return [Boolean] Whether or not this is a 'abstract' packet
|
|
67
68
|
attr_accessor :abstract
|
|
68
69
|
|
|
70
|
+
# @return [Boolean] Whether or not this was a stored packet
|
|
71
|
+
attr_accessor :stored
|
|
72
|
+
|
|
73
|
+
# @return [Hash] Extra data to be logged/transferred with packet
|
|
74
|
+
attr_accessor :extra
|
|
75
|
+
|
|
69
76
|
# Valid format types
|
|
70
77
|
VALUE_TYPES = [:RAW, :CONVERTED, :FORMATTED, :WITH_UNITS]
|
|
71
78
|
|
|
@@ -100,6 +107,8 @@ module Cosmos
|
|
|
100
107
|
@meta = nil
|
|
101
108
|
@hidden = false
|
|
102
109
|
@disabled = false
|
|
110
|
+
@stored = false
|
|
111
|
+
@extra = nil
|
|
103
112
|
end
|
|
104
113
|
|
|
105
114
|
# Sets the target name this packet is associated with. Unidentified packets
|
|
@@ -207,6 +216,17 @@ module Cosmos
|
|
|
207
216
|
end
|
|
208
217
|
end # if RUBY_ENGINE != 'ruby' or ENV['COSMOS_NO_EXT']
|
|
209
218
|
|
|
219
|
+
# Returns @received_time unless a packet item called PACKET_TIME exists that returns
|
|
220
|
+
# a Ruby Time object that represents a different timestamp for the packet
|
|
221
|
+
def packet_time
|
|
222
|
+
item = @items['PACKET_TIME'.freeze]
|
|
223
|
+
if item
|
|
224
|
+
return read_item(item, :CONVERTED, @buffer)
|
|
225
|
+
else
|
|
226
|
+
return @received_time
|
|
227
|
+
end
|
|
228
|
+
end
|
|
229
|
+
|
|
210
230
|
# Calculates a unique MD5Sum that changes if the parts of the packet configuration change that could affect
|
|
211
231
|
# the "shape" of the packet. This value is cached and that packet should not be changed if this method is being used
|
|
212
232
|
def config_name
|
|
@@ -529,6 +549,8 @@ module Cosmos
|
|
|
529
549
|
value = value.map do |val, index|
|
|
530
550
|
if item.states.key(val)
|
|
531
551
|
item.states.key(val)
|
|
552
|
+
elsif item.states.values.include?(CATCH_ALL_STATE)
|
|
553
|
+
item.states.key(CATCH_ALL_STATE)
|
|
532
554
|
else
|
|
533
555
|
apply_format_string_and_units(item, val, value_type)
|
|
534
556
|
end
|
|
@@ -537,6 +559,8 @@ module Cosmos
|
|
|
537
559
|
state_value = item.states.key(value)
|
|
538
560
|
if state_value
|
|
539
561
|
value = state_value
|
|
562
|
+
elsif item.states.values.include?(CATCH_ALL_STATE)
|
|
563
|
+
value = item.states.key(CATCH_ALL_STATE)
|
|
540
564
|
else
|
|
541
565
|
value = apply_format_string_and_units(item, value, value_type)
|
|
542
566
|
end
|
|
@@ -670,6 +694,12 @@ module Cosmos
|
|
|
670
694
|
|
|
671
695
|
# Define the reserved items on the current telemetry packet
|
|
672
696
|
def define_reserved_items
|
|
697
|
+
item = define_item('PACKET_TIMESECONDS', 0, 0, :DERIVED, nil, @default_endianness,
|
|
698
|
+
:ERROR, '%0.6f', PacketTimeSecondsConversion.new)
|
|
699
|
+
item.description = 'COSMOS Packet Time (UTC, Floating point, Unix epoch)'
|
|
700
|
+
item = define_item('PACKET_TIMEFORMATTED', 0, 0, :DERIVED, nil, @default_endianness,
|
|
701
|
+
:ERROR, nil, PacketTimeFormattedConversion.new)
|
|
702
|
+
item.description = 'COSMOS Packet Time (Local time zone, Formatted string)'
|
|
673
703
|
item = define_item('RECEIVED_TIMESECONDS', 0, 0, :DERIVED, nil, @default_endianness,
|
|
674
704
|
:ERROR, '%0.6f', ReceivedTimeSecondsConversion.new)
|
|
675
705
|
item.description = 'COSMOS Received Time (UTC, Floating point, Unix epoch)'
|
|
@@ -750,7 +780,8 @@ module Cosmos
|
|
|
750
780
|
def check_limits(limits_set = :DEFAULT, ignore_persistence = false)
|
|
751
781
|
# If check_limits is being called, then a new packet has arrived and
|
|
752
782
|
# this packet is no longer stale
|
|
753
|
-
|
|
783
|
+
# Stored telemetry doesn't affect the current value table and such doesn't affect stale
|
|
784
|
+
if @stale and !@stored
|
|
754
785
|
@stale = false
|
|
755
786
|
set_all_limits_states(nil)
|
|
756
787
|
end
|
|
@@ -786,6 +817,8 @@ module Cosmos
|
|
|
786
817
|
|
|
787
818
|
@received_time = nil
|
|
788
819
|
@received_count = 0
|
|
820
|
+
@stored = false
|
|
821
|
+
@extra = nil
|
|
789
822
|
if @read_conversion_cache
|
|
790
823
|
synchronize() do
|
|
791
824
|
@read_conversion_cache.clear
|
|
@@ -811,6 +844,7 @@ module Cosmos
|
|
|
811
844
|
end
|
|
812
845
|
end
|
|
813
846
|
packet.instance_variable_set("@read_conversion_cache".freeze, nil)
|
|
847
|
+
packet.extra = JSON.parse(packet.extra.to_json) if packet.extra # Deep copy using JSON
|
|
814
848
|
packet
|
|
815
849
|
end
|
|
816
850
|
alias dup clone
|
|
@@ -472,7 +472,6 @@ module Cosmos
|
|
|
472
472
|
|
|
473
473
|
# Define the units of the current telemetry item
|
|
474
474
|
when 'UNITS'
|
|
475
|
-
raise parser.error("Items with STATE can't define UNITS") if @current_item.states
|
|
476
475
|
usage = "UNITS <FULL UNITS NAME> <ABBREVIATED UNITS NAME>"
|
|
477
476
|
parser.verify_num_parameters(2, 2, usage)
|
|
478
477
|
@current_item.units_full = params[0]
|
|
@@ -14,7 +14,6 @@ module Cosmos
|
|
|
14
14
|
# @param parser [ConfigParser] Configuration parser
|
|
15
15
|
# @param item [Packet] The current item
|
|
16
16
|
def self.parse(parser, item)
|
|
17
|
-
raise parser.error("Items with STATE can't define FORMAT_STRING") if item.states
|
|
18
17
|
@parser = FormatStringParser.new(parser)
|
|
19
18
|
@parser.verify_parameters()
|
|
20
19
|
@parser.create_format_string(item)
|
|
@@ -650,7 +650,7 @@ module Cosmos
|
|
|
650
650
|
if base_packet
|
|
651
651
|
count = 0
|
|
652
652
|
base_packet.sorted_items.each do |item|
|
|
653
|
-
unless ['RECEIVED_TIMESECONDS', 'RECEIVED_TIMEFORMATTED', 'RECEIVED_COUNT'].include?(item.name)
|
|
653
|
+
unless ['PACKET_TIMESECONDS', 'PACKET_TIMEFORMATTED', 'RECEIVED_TIMESECONDS', 'RECEIVED_TIMEFORMATTED', 'RECEIVED_COUNT'].include?(item.name)
|
|
654
654
|
begin
|
|
655
655
|
@current_packet.get_item(item.name)
|
|
656
656
|
rescue
|
|
@@ -290,6 +290,8 @@ module Cosmos
|
|
|
290
290
|
identified_packet = identified_packet.clone
|
|
291
291
|
identified_packet.buffer = packet.buffer
|
|
292
292
|
identified_packet.received_time = packet.received_time
|
|
293
|
+
identified_packet.stored = packet.stored
|
|
294
|
+
identified_packet.extra = packet.extra
|
|
293
295
|
return identified_packet
|
|
294
296
|
end
|
|
295
297
|
|
|
@@ -302,6 +304,8 @@ module Cosmos
|
|
|
302
304
|
identified_packet = identified_packet.clone
|
|
303
305
|
identified_packet.buffer = packet.buffer
|
|
304
306
|
identified_packet.received_time = packet.received_time
|
|
307
|
+
identified_packet.stored = packet.stored
|
|
308
|
+
identified_packet.extra = packet.extra
|
|
305
309
|
return identified_packet
|
|
306
310
|
end
|
|
307
311
|
|
|
@@ -789,6 +789,8 @@ module Cosmos
|
|
|
789
789
|
def cosmos_script_sleep(sleep_time = nil)
|
|
790
790
|
return false if $disconnected_targets
|
|
791
791
|
if defined? ScriptRunnerFrame and ScriptRunnerFrame.instance
|
|
792
|
+
ScriptRunnerFrame.instance.active_script_highlight('green')
|
|
793
|
+
|
|
792
794
|
sleep_time = 30000000 unless sleep_time # Handle infinite wait
|
|
793
795
|
if sleep_time > 0.0
|
|
794
796
|
end_time = Time.now.sys + sleep_time
|
data/lib/cosmos/script/limits.rb
CHANGED
|
@@ -98,6 +98,10 @@ module Cosmos
|
|
|
98
98
|
if result[0] == :LIMITS_CHANGE
|
|
99
99
|
result[1][3] = result[1][3].to_s.intern if result[1][3]
|
|
100
100
|
result[1][4] = result[1][4].to_s.intern if result[1][4]
|
|
101
|
+
if result[1][5] and result[1][6]
|
|
102
|
+
result[1][5] = Time.at(result[1][5], result[1][6]).sys
|
|
103
|
+
result[1].delete_at(6)
|
|
104
|
+
end
|
|
101
105
|
elsif result[0] == :LIMITS_SETTINGS
|
|
102
106
|
result[1][3] = result[1][3].to_s.intern if result[1][3]
|
|
103
107
|
elsif result[0] == :STALE_PACKET
|
data/lib/cosmos/script/script.rb
CHANGED
|
@@ -21,6 +21,7 @@ require 'cosmos/script/tools'
|
|
|
21
21
|
|
|
22
22
|
$cmd_tlm_server = nil
|
|
23
23
|
$disconnected_targets = nil
|
|
24
|
+
$disconnect_all_targets = false
|
|
24
25
|
$cmd_tlm_replay_mode = false
|
|
25
26
|
|
|
26
27
|
module Cosmos
|
|
@@ -58,16 +59,6 @@ module Cosmos
|
|
|
58
59
|
# us to proxy the methods to either the disconnected CmdTlmServer object
|
|
59
60
|
# or to the real server through the JsonDRbObject.
|
|
60
61
|
def method_missing(method_name, *method_params)
|
|
61
|
-
if $disconnected_targets && method_params[0].is_a?(String)
|
|
62
|
-
if method_params.length == 1
|
|
63
|
-
target = method_params[0].split(" ")[0]
|
|
64
|
-
else
|
|
65
|
-
target = method_params[0]
|
|
66
|
-
end
|
|
67
|
-
if $disconnected_targets.include?(target)
|
|
68
|
-
return @disconnected.send(method_name, *method_params)
|
|
69
|
-
end
|
|
70
|
-
end
|
|
71
62
|
# Must call shutdown and disconnect on the JsonDrbObject itself
|
|
72
63
|
# to avoid it being sent to the CmdTlmServer
|
|
73
64
|
case method_name
|
|
@@ -77,6 +68,28 @@ module Cosmos
|
|
|
77
68
|
when :disconnect
|
|
78
69
|
@cmd_tlm_server.disconnect
|
|
79
70
|
else
|
|
71
|
+
if $disconnect_all_targets
|
|
72
|
+
return @disconnected.send(method_name, *method_params)
|
|
73
|
+
elsif $disconnected_targets
|
|
74
|
+
name_string = nil
|
|
75
|
+
if method_params[0].is_a?(String)
|
|
76
|
+
name_string = method_params[0]
|
|
77
|
+
elsif method_params[0].is_a?(Array)
|
|
78
|
+
if method_params[0][0].is_a?(Array)
|
|
79
|
+
if method_params[0][0][0].is_a?(String)
|
|
80
|
+
name_string = method_params[0][0][0]
|
|
81
|
+
end
|
|
82
|
+
elsif method_params[0][0].is_a?(String)
|
|
83
|
+
name_string = method_params[0][0]
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
if name_string
|
|
87
|
+
target = name_string.split(" ")[0]
|
|
88
|
+
if $disconnected_targets.include?(target)
|
|
89
|
+
return @disconnected.send(method_name, *method_params)
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
80
93
|
@cmd_tlm_server.method_missing(method_name, *method_params)
|
|
81
94
|
end
|
|
82
95
|
end
|
|
@@ -95,6 +108,7 @@ module Cosmos
|
|
|
95
108
|
# Called when this module is mixed in using "include Cosmos::Script"
|
|
96
109
|
def self.included(base)
|
|
97
110
|
$disconnected_targets = nil
|
|
111
|
+
$disconnect_all_targets = false
|
|
98
112
|
$cmd_tlm_replay_mode = false
|
|
99
113
|
$cmd_tlm_server = nil
|
|
100
114
|
initialize_script_module()
|
|
@@ -109,8 +123,9 @@ module Cosmos
|
|
|
109
123
|
$cmd_tlm_server.shutdown if $cmd_tlm_server
|
|
110
124
|
end
|
|
111
125
|
|
|
112
|
-
def set_disconnected_targets(targets, config_file = CmdTlmServer::DEFAULT_CONFIG_FILE)
|
|
126
|
+
def set_disconnected_targets(targets, all = false, config_file = CmdTlmServer::DEFAULT_CONFIG_FILE)
|
|
113
127
|
$disconnected_targets = targets
|
|
128
|
+
$disconnect_all_targets = all
|
|
114
129
|
initialize_script_module(config_file)
|
|
115
130
|
end
|
|
116
131
|
|
|
@@ -120,6 +135,7 @@ module Cosmos
|
|
|
120
135
|
|
|
121
136
|
def clear_disconnected_targets
|
|
122
137
|
$disconnected_targets = nil
|
|
138
|
+
$disconnect_all_targets = false
|
|
123
139
|
end
|
|
124
140
|
|
|
125
141
|
def script_disconnect
|
|
@@ -203,12 +203,14 @@ module Cosmos
|
|
|
203
203
|
packet = nil
|
|
204
204
|
# The get_packet_data above returns a Ruby time after the packet_name.
|
|
205
205
|
# This is different from the API.s
|
|
206
|
-
buffer, target_name, packet_name, time, rx_count = get_packet_data(id, non_block)
|
|
206
|
+
buffer, target_name, packet_name, time, rx_count, stored, extra = get_packet_data(id, non_block)
|
|
207
207
|
if buffer
|
|
208
208
|
packet = System.telemetry.packet(target_name, packet_name).clone
|
|
209
209
|
packet.buffer = buffer
|
|
210
210
|
packet.received_time = time
|
|
211
211
|
packet.received_count = rx_count
|
|
212
|
+
packet.stored = stored
|
|
213
|
+
packet.extra = extra
|
|
212
214
|
end
|
|
213
215
|
packet
|
|
214
216
|
end
|
data/lib/cosmos/script/tools.rb
CHANGED
|
@@ -67,20 +67,20 @@ module Cosmos
|
|
|
67
67
|
# Methods for debugging
|
|
68
68
|
#######################################
|
|
69
69
|
|
|
70
|
-
def insert_return(*params)
|
|
71
|
-
_ensure_script_runner_frame do
|
|
72
|
-
ScriptRunnerFrame.instance.inline_return = true
|
|
73
|
-
ScriptRunnerFrame.instance.inline_return_params = params
|
|
74
|
-
end
|
|
75
|
-
end
|
|
76
|
-
|
|
77
70
|
def step_mode
|
|
78
71
|
if defined? ScriptRunnerFrame
|
|
72
|
+
# Ensure the Frame has toggled to debug so the user can see the Step button
|
|
73
|
+
_ensure_script_runner_frame do
|
|
74
|
+
Qt.execute_in_main_thread do
|
|
75
|
+
ScriptRunnerFrame.instance.toggle_debug(true)
|
|
76
|
+
end
|
|
77
|
+
end
|
|
79
78
|
ScriptRunnerFrame.step_mode = true
|
|
80
79
|
end
|
|
81
80
|
end
|
|
82
81
|
|
|
83
82
|
def run_mode
|
|
83
|
+
# Run mode simply disables step mode. Debug frame may or may not be displayed.
|
|
84
84
|
if defined? ScriptRunnerFrame
|
|
85
85
|
ScriptRunnerFrame.step_mode = false
|
|
86
86
|
end
|
|
@@ -104,7 +104,17 @@ module Cosmos
|
|
|
104
104
|
# Get a specific screen definition
|
|
105
105
|
def get_screen_definition(screen_full_name, config_filename = nil, force_refresh = false)
|
|
106
106
|
$cmd_tlm_server.get_screen_definition(screen_full_name, config_filename, force_refresh)
|
|
107
|
-
end
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
# Show a local telemetry screen
|
|
110
|
+
def local_screen(title = 'Local Screen', screen_def = nil, x_pos = nil, y_pos = nil, &block)
|
|
111
|
+
# See script_module_gui.rb
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
# Close all local telemetry screens
|
|
115
|
+
def close_local_screens
|
|
116
|
+
# See script_module_gui.rb
|
|
117
|
+
end
|
|
108
118
|
|
|
109
119
|
end # module Script
|
|
110
120
|
|
data/lib/cosmos/system/system.rb
CHANGED
|
@@ -71,6 +71,8 @@ module Cosmos
|
|
|
71
71
|
# calculation in addition to the cmd/tlm definition files that are
|
|
72
72
|
# automatically included
|
|
73
73
|
instance_attr_reader :additional_md5_files
|
|
74
|
+
# @return [Hash<String,String>] Hash of the text/color to use for the classificaiton banner
|
|
75
|
+
instance_attr_reader :classificiation_banner
|
|
74
76
|
|
|
75
77
|
# Known COSMOS ports
|
|
76
78
|
KNOWN_PORTS = ['CTS_API', 'TLMVIEWER_API', 'CTS_PREIDENTIFIED', 'CTS_CMD_ROUTER', 'REPLAY_API', 'REPLAY_PREIDENTIFIED', 'REPLAY_CMD_ROUTER', 'DART_STREAM', 'DART_DECOM']
|
|
@@ -337,6 +339,25 @@ module Cosmos
|
|
|
337
339
|
raise "Missing expected file: #{parameters[0]}"
|
|
338
340
|
end
|
|
339
341
|
|
|
342
|
+
when 'CLASSIFICATION'
|
|
343
|
+
parser.verify_num_parameters(2, 4, "#{keyword} <Display_Text> <Color Name|Red> <Green> <Blue>")
|
|
344
|
+
# Determine if the COSMOS color already exists, otherwise create a new one
|
|
345
|
+
if Cosmos.constants.include? parameters[1].upcase.to_sym
|
|
346
|
+
# We were given a named color that already exists in COSMOS
|
|
347
|
+
color = eval("Cosmos::#{parameters[1].upcase}")
|
|
348
|
+
else
|
|
349
|
+
if parameters.length < 4
|
|
350
|
+
# We were given a named color, but it didn't exist in COSMOS already
|
|
351
|
+
color = Cosmos::getColor(parameters[1].upcase)
|
|
352
|
+
else
|
|
353
|
+
# We were given RGB values
|
|
354
|
+
color = Cosmos::getColor(parameters[1], parameters[2], parameters[3])
|
|
355
|
+
end
|
|
356
|
+
end
|
|
357
|
+
|
|
358
|
+
@classificiation_banner = {'display_text' => parameters[0],
|
|
359
|
+
'color' => color}
|
|
360
|
+
|
|
340
361
|
else
|
|
341
362
|
# blank lines will have a nil keyword and should not raise an exception
|
|
342
363
|
raise parser.error("Unknown keyword '#{keyword}'") if keyword
|
|
@@ -62,25 +62,25 @@ module Cosmos
|
|
|
62
62
|
super()
|
|
63
63
|
|
|
64
64
|
# File Menu Actions
|
|
65
|
-
@analyze_log = Qt::Action.new(
|
|
66
|
-
@analyze_log.statusTip =
|
|
65
|
+
@analyze_log = Qt::Action.new('&Analyze Logs', self)
|
|
66
|
+
@analyze_log.statusTip = 'Analyze log file packet counts'
|
|
67
67
|
@analyze_log.connect(SIGNAL('triggered()')) { analyze_log_files() }
|
|
68
68
|
|
|
69
69
|
# Mode Menu Actions
|
|
70
|
-
@include_raw = Qt::Action.new(
|
|
71
|
-
@include_raw_keyseq = Qt::KeySequence.new(
|
|
70
|
+
@include_raw = Qt::Action.new('Include &Raw Data', self)
|
|
71
|
+
@include_raw_keyseq = Qt::KeySequence.new('Ctrl+R')
|
|
72
72
|
@include_raw.shortcut = @include_raw_keyseq
|
|
73
|
-
@include_raw.statusTip =
|
|
73
|
+
@include_raw.statusTip = 'Include raw packet data in the text output'
|
|
74
74
|
@include_raw.setCheckable(true)
|
|
75
75
|
end
|
|
76
76
|
|
|
77
77
|
# Create the File and Mode menus and initialize the Help menu
|
|
78
78
|
def initialize_menus
|
|
79
|
-
@file_menu = menuBar.addMenu(
|
|
79
|
+
@file_menu = menuBar.addMenu('&File')
|
|
80
80
|
@file_menu.addAction(@analyze_log)
|
|
81
81
|
@file_menu.addSeparator()
|
|
82
82
|
@file_menu.addAction(@exit_action)
|
|
83
|
-
@mode_menu = menuBar.addMenu(
|
|
83
|
+
@mode_menu = menuBar.addMenu('&Mode')
|
|
84
84
|
@mode_menu.addAction(@include_raw)
|
|
85
85
|
@about_string = "Command Extractor extracts commands from a binary command log file into a human readable text file."
|
|
86
86
|
initialize_help_menu()
|
|
@@ -102,20 +102,20 @@ module Cosmos
|
|
|
102
102
|
@data_source_layout.addWidget(label)
|
|
103
103
|
@log_file_radio = Qt::RadioButton.new("Log File", self)
|
|
104
104
|
@log_file_radio.setChecked(true)
|
|
105
|
-
@log_file_radio.connect(SIGNAL('clicked()')) do
|
|
105
|
+
@log_file_radio.connect(SIGNAL('clicked()')) do
|
|
106
106
|
@packet_log_frame.show_log_fields(true)
|
|
107
107
|
@packet_log_frame.output_filename = ""
|
|
108
|
-
@dart_meta_frame.hide
|
|
108
|
+
@dart_meta_frame.hide
|
|
109
109
|
@resize_timer.start(100)
|
|
110
110
|
end
|
|
111
111
|
@data_source_layout.addWidget(@log_file_radio)
|
|
112
112
|
@dart_radio = Qt::RadioButton.new("DART Database", self)
|
|
113
|
-
@dart_radio.connect(SIGNAL('clicked()')) do
|
|
113
|
+
@dart_radio.connect(SIGNAL('clicked()')) do
|
|
114
114
|
@packet_log_frame.show_log_fields(false)
|
|
115
115
|
@packet_log_frame.output_filename = ""
|
|
116
116
|
@dart_meta_frame.show
|
|
117
117
|
@resize_timer.start(100)
|
|
118
|
-
end
|
|
118
|
+
end
|
|
119
119
|
@data_source_layout.addWidget(@dart_radio)
|
|
120
120
|
@data_source_layout.addStretch()
|
|
121
121
|
@top_layout.addLayout(@data_source_layout)
|
|
@@ -176,14 +176,14 @@ module Cosmos
|
|
|
176
176
|
@time_start = @packet_log_frame.time_start
|
|
177
177
|
@time_end = @packet_log_frame.time_end
|
|
178
178
|
@packet_log_reader = @packet_log_frame.packet_log_reader
|
|
179
|
-
@input_filenames = @packet_log_frame.filenames.sort
|
|
179
|
+
@input_filenames = @packet_log_frame.filenames.sort
|
|
180
180
|
@output_filename = @packet_log_frame.output_filename
|
|
181
181
|
@output_filename = nil if @output_filename.strip.empty?
|
|
182
182
|
@meta_filters = @dart_meta_frame.meta_filters
|
|
183
183
|
|
|
184
184
|
return unless pre_process_tests()
|
|
185
185
|
|
|
186
|
-
include_raw = @include_raw.isChecked
|
|
186
|
+
include_raw = @include_raw.isChecked
|
|
187
187
|
if @log_file_radio.isChecked
|
|
188
188
|
begin
|
|
189
189
|
ProgressDialog.execute(self, # parent
|
|
@@ -214,8 +214,8 @@ module Cosmos
|
|
|
214
214
|
ProgressDialog.execute(self, # parent
|
|
215
215
|
'Log File Progress', # title
|
|
216
216
|
600, # width, height
|
|
217
|
-
300,
|
|
218
|
-
true, # Overall progress, no step progress
|
|
217
|
+
300,
|
|
218
|
+
true, # Overall progress, no step progress
|
|
219
219
|
false) do |progress_dialog|
|
|
220
220
|
progress_dialog.cancel_callback = method(:cancel_callback)
|
|
221
221
|
progress_dialog.enable_cancel_button
|
|
@@ -227,7 +227,7 @@ module Cosmos
|
|
|
227
227
|
@interface.disconnect
|
|
228
228
|
request_packet = Cosmos::Packet.new('DART', 'DART')
|
|
229
229
|
request_packet.define_item('REQUEST', 0, 0, :BLOCK)
|
|
230
|
-
|
|
230
|
+
|
|
231
231
|
@time_start ||= Time.utc(1970, 1, 1)
|
|
232
232
|
@time_end ||= Time.now
|
|
233
233
|
@time_delta = @time_end - @time_start
|
|
@@ -239,7 +239,7 @@ module Cosmos
|
|
|
239
239
|
request['cmd_tlm'] = 'CMD'
|
|
240
240
|
request['meta_filters'] = @meta_filters unless @meta_filters.empty?
|
|
241
241
|
request_packet.write('REQUEST', JSON.dump(request))
|
|
242
|
-
|
|
242
|
+
|
|
243
243
|
progress_dialog.append_text("Connecting to DART Database...")
|
|
244
244
|
@interface.connect
|
|
245
245
|
progress_dialog.append_text("Sending DART Database Query...")
|
|
@@ -260,11 +260,11 @@ module Cosmos
|
|
|
260
260
|
# Switch to correct configuration from SYSTEM META when needed
|
|
261
261
|
if packet.target_name == 'SYSTEM'.freeze and packet.packet_name == 'META'.freeze
|
|
262
262
|
meta_packet = System.commands.packet('SYSTEM', 'META')
|
|
263
|
-
meta_packet.buffer = packet.buffer
|
|
263
|
+
meta_packet.buffer = packet.buffer
|
|
264
264
|
Cosmos::System.load_configuration(meta_packet.read('CONFIG'))
|
|
265
265
|
elsif first
|
|
266
266
|
first = false
|
|
267
|
-
@time_start = packet.
|
|
267
|
+
@time_start = packet.packet_time
|
|
268
268
|
@time_delta = @time_end - @time_start
|
|
269
269
|
end
|
|
270
270
|
|
|
@@ -273,6 +273,7 @@ module Cosmos
|
|
|
273
273
|
defined_packet.received_time = packet.received_time
|
|
274
274
|
|
|
275
275
|
output_file.puts "#{defined_packet.target_name} #{defined_packet.packet_name}"
|
|
276
|
+
output_file.puts " PACKET_TIMEFORMATTED: #{defined_packet.packet_time.formatted}"
|
|
276
277
|
output_file.puts " RECEIVED_TIMEFORMATTED: #{defined_packet.received_time.formatted}"
|
|
277
278
|
output_file.puts defined_packet.formatted(:WITH_UNITS, 2)
|
|
278
279
|
if include_raw or !defined_packet.identified? or !defined_packet.defined?
|
|
@@ -281,10 +282,10 @@ module Cosmos
|
|
|
281
282
|
end
|
|
282
283
|
output_file.puts
|
|
283
284
|
|
|
284
|
-
progress = ((@time_delta - (@time_end - defined_packet.
|
|
285
|
+
progress = ((@time_delta - (@time_end - defined_packet.packet_time)).to_f / @time_delta.to_f)
|
|
285
286
|
progress_dialog.set_overall_progress(progress) if !@cancel
|
|
286
287
|
end
|
|
287
|
-
|
|
288
|
+
|
|
288
289
|
end
|
|
289
290
|
end
|
|
290
291
|
|
|
@@ -295,12 +296,12 @@ module Cosmos
|
|
|
295
296
|
@open_button.setEnabled(true)
|
|
296
297
|
end
|
|
297
298
|
end
|
|
298
|
-
end
|
|
299
|
+
end
|
|
299
300
|
rescue => error
|
|
300
301
|
Qt::MessageBox.critical(self, 'Error!', "Error Querying DART Database\n#{error.formatted}")
|
|
301
302
|
ensure
|
|
302
303
|
@interface.disconnect
|
|
303
|
-
end
|
|
304
|
+
end
|
|
304
305
|
end
|
|
305
306
|
end # def process_data
|
|
306
307
|
|
|
@@ -333,8 +334,9 @@ module Cosmos
|
|
|
333
334
|
|
|
334
335
|
break if @cancel
|
|
335
336
|
progress_dialog.set_step_progress(@packet_log_reader.bytes_read / file_size)
|
|
337
|
+
output_file.puts "#{packet.target_name} #{packet.packet_name}"
|
|
336
338
|
if packet.received_time
|
|
337
|
-
output_file.puts "
|
|
339
|
+
output_file.puts " PACKET_TIMEFORMATTED: #{packet.packet_time.formatted}"
|
|
338
340
|
output_file.puts " RECEIVED_TIMEFORMATTED: #{packet.received_time.formatted}"
|
|
339
341
|
end
|
|
340
342
|
output_file.puts packet.formatted(:WITH_UNITS, 2)
|