cosmos 4.2.4-java → 4.3.0-java
Sign up to get free protection for your applications and to get access to all the features.
- 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)
|