openc3 5.12.0 → 5.14.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.
Potentially problematic release.
This version of openc3 might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Gemfile +3 -3
- data/bin/openc3cli +21 -18
- data/data/config/command_modifiers.yaml +53 -1
- data/data/config/graph_settings.yaml +1 -1
- data/data/config/item_modifiers.yaml +1 -2
- data/data/config/parameter_modifiers.yaml +13 -14
- data/data/config/screen.yaml +1 -2
- data/data/config/target_config.yaml +2 -6
- data/lib/openc3/accessors/accessor.rb +42 -29
- data/lib/openc3/accessors/binary_accessor.rb +11 -1
- data/lib/openc3/accessors/form_accessor.rb +11 -1
- data/lib/openc3/accessors/http_accessor.rb +38 -0
- data/lib/openc3/accessors/json_accessor.rb +15 -3
- data/lib/openc3/accessors/template_accessor.rb +150 -0
- data/lib/openc3/accessors/xml_accessor.rb +11 -1
- data/lib/openc3/accessors.rb +1 -0
- data/lib/openc3/api/cmd_api.rb +99 -35
- data/lib/openc3/api/limits_api.rb +3 -3
- data/lib/openc3/api/tlm_api.rb +70 -31
- data/lib/openc3/interfaces/interface.rb +9 -7
- data/lib/openc3/interfaces/mqtt_interface.rb +11 -9
- data/lib/openc3/interfaces/mqtt_stream_interface.rb +78 -0
- data/lib/openc3/interfaces/protocols/cmd_response_protocol.rb +116 -0
- data/lib/openc3/interfaces/tcpip_client_interface.rb +4 -0
- data/lib/openc3/interfaces/tcpip_server_interface.rb +5 -0
- data/lib/openc3/interfaces.rb +1 -1
- data/lib/openc3/logs/packet_log_reader.rb +2 -2
- data/lib/openc3/logs/text_log_writer.rb +3 -2
- data/lib/openc3/microservices/decom_microservice.rb +1 -0
- data/lib/openc3/microservices/interface_microservice.rb +10 -1
- data/lib/openc3/microservices/trigger_group_microservice.rb +2 -1
- data/lib/openc3/models/cvt_model.rb +16 -12
- data/lib/openc3/models/gem_model.rb +20 -3
- data/lib/openc3/models/microservice_model.rb +1 -1
- data/lib/openc3/models/plugin_model.rb +43 -5
- data/lib/openc3/models/target_model.rb +69 -8
- data/lib/openc3/packets/json_packet.rb +46 -15
- data/lib/openc3/packets/packet.rb +92 -4
- data/lib/openc3/packets/packet_config.rb +27 -2
- data/lib/openc3/packets/parsers/xtce_parser.rb +5 -1
- data/lib/openc3/script/api_shared.rb +42 -31
- data/lib/openc3/script/commands.rb +18 -12
- data/lib/openc3/script/limits.rb +1 -1
- data/lib/openc3/script/script.rb +6 -12
- data/lib/openc3/script/storage.rb +4 -4
- data/lib/openc3/script/web_socket_api.rb +2 -2
- data/lib/openc3/streams/mqtt_stream.rb +109 -0
- data/lib/openc3/streams/tcpip_socket_stream.rb +19 -0
- data/lib/openc3/system/system.rb +13 -1
- data/lib/openc3/utilities/cli_generator.rb +48 -21
- data/lib/openc3/utilities/local_mode.rb +3 -3
- data/lib/openc3/utilities/logger.rb +17 -16
- data/lib/openc3/utilities/process_manager.rb +1 -1
- data/lib/openc3/utilities/store_queued.rb +126 -0
- data/lib/openc3/version.rb +5 -5
- data/templates/conversion/conversion.py +28 -0
- data/templates/conversion/conversion.rb +1 -18
- data/templates/limits_response/response.py +37 -0
- data/templates/limits_response/response.rb +0 -17
- data/templates/microservice/microservices/TEMPLATE/microservice.py +54 -0
- data/templates/microservice/microservices/TEMPLATE/microservice.rb +0 -7
- data/templates/plugin/.gitignore +1 -0
- data/templates/plugin/plugin.gemspec +2 -2
- data/templates/target/targets/TARGET/lib/target.py +9 -0
- data/templates/target/targets/TARGET/procedures/procedure.py +3 -0
- data/templates/target/targets/TARGET/public/README.txt +1 -0
- data/templates/tool_angular/package.json +21 -20
- data/templates/tool_angular/yarn.lock +2287 -3171
- data/templates/tool_react/package.json +15 -15
- data/templates/tool_react/yarn.lock +716 -789
- data/templates/tool_svelte/package.json +16 -15
- data/templates/tool_svelte/src/services/openc3-api.js +17 -22
- data/templates/tool_svelte/yarn.lock +715 -620
- data/templates/tool_vue/package.json +16 -15
- data/templates/tool_vue/yarn.lock +149 -69
- data/templates/widget/package.json +15 -14
- data/templates/widget/yarn.lock +132 -63
- metadata +160 -148
- data/lib/openc3/io/openc3_snmp.rb +0 -61
@@ -742,7 +742,7 @@ module OpenC3
|
|
742
742
|
end
|
743
743
|
end
|
744
744
|
|
745
|
-
def
|
745
|
+
def update_target_model(system)
|
746
746
|
target = system.targets[@name]
|
747
747
|
|
748
748
|
# Add in the information from the target and update
|
@@ -754,10 +754,11 @@ module OpenC3
|
|
754
754
|
@tlm_unique_id_mode = target.tlm_unique_id_mode
|
755
755
|
@limits_groups = system.limits.groups.keys
|
756
756
|
update()
|
757
|
+
end
|
757
758
|
|
758
|
-
|
759
|
-
|
760
|
-
Store.del("#{@scope}__openc3tlm__#{target_name}")
|
759
|
+
def update_store_telemetry(packet_hash, clear_old: true)
|
760
|
+
packet_hash.each do |target_name, packets|
|
761
|
+
Store.del("#{@scope}__openc3tlm__#{target_name}") if clear_old
|
761
762
|
packets.each do |packet_name, packet|
|
762
763
|
Logger.info "Configuring tlm packet: #{target_name} #{packet_name}"
|
763
764
|
begin
|
@@ -773,8 +774,11 @@ module OpenC3
|
|
773
774
|
CvtModel.set(json_hash, target_name: packet.target_name, packet_name: packet.packet_name, scope: @scope)
|
774
775
|
end
|
775
776
|
end
|
776
|
-
|
777
|
-
|
777
|
+
end
|
778
|
+
|
779
|
+
def update_store_commands(packet_hash, clear_old: true)
|
780
|
+
packet_hash.each do |target_name, packets|
|
781
|
+
Store.del("#{@scope}__openc3cmd__#{target_name}") if clear_old
|
778
782
|
packets.each do |packet_name, packet|
|
779
783
|
Logger.info "Configuring cmd packet: #{target_name} #{packet_name}"
|
780
784
|
begin
|
@@ -785,7 +789,9 @@ module OpenC3
|
|
785
789
|
end
|
786
790
|
end
|
787
791
|
end
|
788
|
-
|
792
|
+
end
|
793
|
+
|
794
|
+
def update_store_limits_groups(system)
|
789
795
|
system.limits.groups.each do |group, items|
|
790
796
|
begin
|
791
797
|
Store.hset("#{@scope}__limits_groups", group, JSON.generate(items))
|
@@ -794,23 +800,77 @@ module OpenC3
|
|
794
800
|
raise err
|
795
801
|
end
|
796
802
|
end
|
797
|
-
|
803
|
+
end
|
804
|
+
|
805
|
+
def update_store_limits_sets(system)
|
798
806
|
sets = Store.hgetall("#{@scope}__limits_sets")
|
799
807
|
sets ||= {}
|
800
808
|
system.limits.sets.each do |set|
|
801
809
|
sets[set.to_s] = "false" unless sets.key?(set.to_s)
|
802
810
|
end
|
803
811
|
Store.hmset("#{@scope}__limits_sets", *sets)
|
812
|
+
end
|
804
813
|
|
814
|
+
def update_store_item_map
|
805
815
|
# Create item_map
|
806
816
|
item_map_key = "#{@scope}__#{@name}__item_to_packet_map"
|
807
817
|
item_map = self.class.build_item_to_packet_map(@name, scope: @scope)
|
808
818
|
Store.set(item_map_key, JSON.generate(item_map, :allow_nan => true))
|
809
819
|
@@item_map_cache[@name] = [Time.now, item_map]
|
820
|
+
end
|
810
821
|
|
822
|
+
def update_store(system, clear_old: true)
|
823
|
+
update_target_model(system)
|
824
|
+
update_store_telemetry(system.telemetry.all, clear_old: clear_old)
|
825
|
+
update_store_commands(system.commands.all, clear_old: clear_old)
|
826
|
+
update_store_limits_groups(system)
|
827
|
+
update_store_limits_sets(system)
|
828
|
+
update_store_item_map()
|
811
829
|
return system
|
812
830
|
end
|
813
831
|
|
832
|
+
def dynamic_update(packets, cmd_or_tlm = :TELEMETRY, filename = "dynamic_tlm.txt")
|
833
|
+
# Build hash of targets/packets
|
834
|
+
packet_hash = {}
|
835
|
+
packets.each do |packet|
|
836
|
+
target_name = packet.target_name.upcase
|
837
|
+
packet_hash[target_name] ||= {}
|
838
|
+
packet_name = packet.packet_name.upcase
|
839
|
+
packet_hash[target_name][packet_name] = packet
|
840
|
+
end
|
841
|
+
|
842
|
+
# Update Redis
|
843
|
+
if cmd_or_tlm == :TELEMETRY
|
844
|
+
update_store_telemetry(packet_hash, clear_old: false)
|
845
|
+
update_store_item_map()
|
846
|
+
else
|
847
|
+
update_store_commands(packet_hash, clear_old: false)
|
848
|
+
end
|
849
|
+
|
850
|
+
# Build dynamic file for cmd_tlm
|
851
|
+
configs = {}
|
852
|
+
packets.each do |packet|
|
853
|
+
target_name = packet.target_name.upcase
|
854
|
+
configs[target_name] ||= ""
|
855
|
+
config = configs[target_name]
|
856
|
+
config << packet.to_config(cmd_or_tlm)
|
857
|
+
config << "\n"
|
858
|
+
end
|
859
|
+
configs.each do |target_name, config|
|
860
|
+
begin
|
861
|
+
bucket_key = "#{@scope}/targets_modified/#{target_name}/cmd_tlm/#{filename}"
|
862
|
+
client = Bucket.getClient()
|
863
|
+
client.put_object(
|
864
|
+
# Use targets_modified to save modifications
|
865
|
+
# This keeps the original target clean (read-only)
|
866
|
+
bucket: ENV['OPENC3_CONFIG_BUCKET'],
|
867
|
+
key: bucket_key,
|
868
|
+
body: config
|
869
|
+
)
|
870
|
+
end
|
871
|
+
end
|
872
|
+
end
|
873
|
+
|
814
874
|
def deploy_commmandlog_microservice(gem_path, variables, topics, instance = nil, parent = nil)
|
815
875
|
microservice_name = "#{@scope}__COMMANDLOG#{instance}__#{@name}"
|
816
876
|
microservice = MicroserviceModel.new(
|
@@ -990,6 +1050,7 @@ module OpenC3
|
|
990
1050
|
cmd: ["ruby", "multi_microservice.rb", *@children],
|
991
1051
|
work_dir: '/openc3/lib/openc3/microservices',
|
992
1052
|
plugin: @plugin,
|
1053
|
+
needs_dependencies: @needs_dependencies,
|
993
1054
|
scope: @scope
|
994
1055
|
)
|
995
1056
|
microservice.create
|
@@ -65,66 +65,97 @@ module OpenC3
|
|
65
65
|
# @param name [String] Name of the item to read - Should already by upcase
|
66
66
|
# @param value_type (see #read_item)
|
67
67
|
def read(name, value_type = :CONVERTED, reduced_type = nil)
|
68
|
+
value = nil
|
69
|
+
array_index = nil
|
70
|
+
if name[-1] == ']'
|
71
|
+
open_bracket_index = name.index('[')
|
72
|
+
if open_bracket_index
|
73
|
+
array_index = name[(open_bracket_index + 1)..-2].to_i
|
74
|
+
name = name[0..(open_bracket_index - 1)]
|
75
|
+
end
|
76
|
+
end
|
68
77
|
if reduced_type
|
69
78
|
raise "Reduced types only support RAW or CONVERTED value types: #{value_type} unsupported" if value_type == :WITH_UNITS or value_type == :FORMATTED
|
70
79
|
if value_type == :CONVERTED
|
71
80
|
case reduced_type
|
72
81
|
when :AVG
|
73
82
|
value = @json_hash["#{name}__CA"]
|
74
|
-
return value if value
|
75
83
|
when :STDDEV
|
76
84
|
value = @json_hash["#{name}__CS"]
|
77
|
-
return value if value
|
78
85
|
when :MIN
|
79
86
|
value = @json_hash["#{name}__CN"]
|
80
|
-
return value if value
|
81
87
|
when :MAX
|
82
88
|
value = @json_hash["#{name}__CX"]
|
83
|
-
|
89
|
+
end
|
90
|
+
if value
|
91
|
+
value = value[array_index] if array_index
|
92
|
+
return value
|
84
93
|
end
|
85
94
|
end
|
86
95
|
case reduced_type
|
87
96
|
when :AVG
|
88
97
|
value = @json_hash["#{name}__A"]
|
89
|
-
return value if value
|
90
98
|
when :STDDEV
|
91
99
|
value = @json_hash["#{name}__S"]
|
92
|
-
return value if value
|
93
100
|
when :MIN
|
94
101
|
value = @json_hash["#{name}__N"]
|
95
|
-
return value if value
|
96
102
|
when :MAX
|
97
103
|
value = @json_hash["#{name}__X"]
|
98
|
-
|
104
|
+
end
|
105
|
+
if value
|
106
|
+
value = value[array_index] if array_index
|
107
|
+
return value
|
99
108
|
end
|
100
109
|
end
|
101
110
|
if value_type == :WITH_UNITS
|
102
111
|
value = @json_hash["#{name}__U"]
|
103
|
-
|
112
|
+
if value
|
113
|
+
value = value[array_index] if array_index
|
114
|
+
return value
|
115
|
+
end
|
104
116
|
end
|
105
117
|
if value_type == :WITH_UNITS or value_type == :FORMATTED
|
106
118
|
value = @json_hash["#{name}__F"]
|
107
|
-
|
119
|
+
if value
|
120
|
+
value = value[array_index] if array_index
|
121
|
+
return value
|
122
|
+
end
|
108
123
|
|
109
124
|
value = @json_hash["#{name}__C"]
|
110
|
-
|
125
|
+
if value
|
126
|
+
value = value[array_index] if array_index
|
127
|
+
return value.to_s
|
128
|
+
end
|
111
129
|
|
112
130
|
value = @json_hash[name]
|
113
|
-
|
131
|
+
if value
|
132
|
+
value = value[array_index] if array_index
|
133
|
+
return value.to_s
|
134
|
+
end
|
114
135
|
|
115
136
|
return nil
|
116
137
|
end
|
117
138
|
if value_type == :CONVERTED
|
118
139
|
value = @json_hash["#{name}__C"]
|
119
|
-
|
140
|
+
if value
|
141
|
+
value = value[array_index] if array_index
|
142
|
+
return value
|
143
|
+
end
|
120
144
|
end
|
121
|
-
|
145
|
+
value = @json_hash[name]
|
146
|
+
if value
|
147
|
+
value = value[array_index] if array_index
|
148
|
+
return value
|
149
|
+
end
|
150
|
+
return nil
|
122
151
|
end
|
123
152
|
|
124
153
|
def read_with_limits_state(name, value_type = :CONVERTED, reduced_type = nil)
|
125
154
|
value = read(name, value_type, reduced_type)
|
126
155
|
limits_state = @json_hash["#{name}__L"]
|
127
|
-
|
156
|
+
if limits_state
|
157
|
+
limits_state = limits_state.intern
|
158
|
+
end
|
128
159
|
return [value, limits_state]
|
129
160
|
end
|
130
161
|
|
@@ -89,6 +89,18 @@ module OpenC3
|
|
89
89
|
# @return [String] Base data for building packet
|
90
90
|
attr_reader :template
|
91
91
|
|
92
|
+
# @return [Array<Target Name, Packet Name>] Related response packet
|
93
|
+
attr_accessor :response
|
94
|
+
|
95
|
+
# @return [Array<Target Name, Packet Name>] Related error response packet
|
96
|
+
attr_accessor :error_response
|
97
|
+
|
98
|
+
# @return [Array<Target Name, Screen Name>] Related telemetry screen
|
99
|
+
attr_accessor :screen
|
100
|
+
|
101
|
+
# @return [Array<Array<Target Name, Packet Name, Item Name>>] Related items
|
102
|
+
attr_accessor :related_items
|
103
|
+
|
92
104
|
# Valid format types
|
93
105
|
VALUE_TYPES = [:RAW, :CONVERTED, :FORMATTED, :WITH_UNITS]
|
94
106
|
|
@@ -297,6 +309,10 @@ module OpenC3
|
|
297
309
|
@config_name
|
298
310
|
end
|
299
311
|
|
312
|
+
def clear_config_name
|
313
|
+
@config_name = nil
|
314
|
+
end
|
315
|
+
|
300
316
|
# (see Structure#buffer=)
|
301
317
|
def buffer=(buffer)
|
302
318
|
synchronize() do
|
@@ -306,7 +322,6 @@ module OpenC3
|
|
306
322
|
Logger.instance.error "#{@target_name} #{@packet_name} received with actual packet length of #{buffer.length} but defined length of #{@defined_length}"
|
307
323
|
end
|
308
324
|
@read_conversion_cache.clear if @read_conversion_cache
|
309
|
-
process()
|
310
325
|
end
|
311
326
|
end
|
312
327
|
|
@@ -861,6 +876,33 @@ module OpenC3
|
|
861
876
|
item.description = 'OpenC3 packet received count'
|
862
877
|
end
|
863
878
|
|
879
|
+
# Reset the packet to just derived items
|
880
|
+
def clear_all_non_derived_items
|
881
|
+
@defined_length = 0
|
882
|
+
@defined_length_bits = 0
|
883
|
+
@pos_bit_size = 0
|
884
|
+
@neg_bit_size = 0
|
885
|
+
@fixed_size = true
|
886
|
+
@short_buffer_allowed = false
|
887
|
+
@id_items = nil
|
888
|
+
@limits_items = nil
|
889
|
+
new_items = {}
|
890
|
+
new_sorted_items = []
|
891
|
+
@items.each do |name, item|
|
892
|
+
if item.data_type == :DERIVED
|
893
|
+
new_items[name] = item
|
894
|
+
end
|
895
|
+
end
|
896
|
+
@sorted_items.each do |item|
|
897
|
+
if item.data_type == :DERIVED
|
898
|
+
new_sorted_items << item
|
899
|
+
end
|
900
|
+
end
|
901
|
+
@items = new_items
|
902
|
+
@sorted_items = new_sorted_items
|
903
|
+
clear_config_name()
|
904
|
+
end
|
905
|
+
|
864
906
|
# Enable limits on an item by name
|
865
907
|
#
|
866
908
|
# @param name [String] Name of the item to enable limits
|
@@ -1008,6 +1050,13 @@ module OpenC3
|
|
1008
1050
|
else
|
1009
1051
|
config << "COMMAND #{@target_name.to_s.quote_if_necessary} #{@packet_name.to_s.quote_if_necessary} #{@default_endianness} \"#{@description}\"\n"
|
1010
1052
|
end
|
1053
|
+
if @accessor.class.to_s != 'OpenC3::BinaryAccessor'
|
1054
|
+
config << " ACCESSOR #{@accessor.class.to_s} #{@accessor.args.map { |a| a.to_s.quote_if_necessary }.join(" ")}\n"
|
1055
|
+
end
|
1056
|
+
# TODO: Add TEMPLATE_ENCODED so this can always be done inline regardless of content
|
1057
|
+
if @template
|
1058
|
+
config << " TEMPLATE '#{@template}'"
|
1059
|
+
end
|
1011
1060
|
config << " ALLOW_SHORT\n" if @short_buffer_allowed
|
1012
1061
|
config << " HAZARDOUS #{@hazardous_description.to_s.quote_if_necessary}\n" if @hazardous
|
1013
1062
|
config << " DISABLE_MESSAGES\n" if @messages_disabled
|
@@ -1025,7 +1074,7 @@ module OpenC3
|
|
1025
1074
|
|
1026
1075
|
if @meta
|
1027
1076
|
@meta.each do |key, values|
|
1028
|
-
config << " META #{key.to_s.quote_if_necessary} #{values.map { |a| a
|
1077
|
+
config << " META #{key.to_s.quote_if_necessary} #{values.map { |a| a.to_s.quote_if_necessary }.join(" ")}\n"
|
1029
1078
|
end
|
1030
1079
|
end
|
1031
1080
|
|
@@ -1043,6 +1092,20 @@ module OpenC3
|
|
1043
1092
|
end
|
1044
1093
|
end
|
1045
1094
|
|
1095
|
+
if @response
|
1096
|
+
config << " RESPONSE #{@response[0].to_s.quote_if_necessary} #{@response[1].to_s.quote_if_necessary}"
|
1097
|
+
end
|
1098
|
+
if @error_response
|
1099
|
+
config << " ERROR_RESPONSE #{@error_response[0].to_s.quote_if_necessary} #{@error_response[1].to_s.quote_if_necessary}"
|
1100
|
+
end
|
1101
|
+
if @screen
|
1102
|
+
config << " SCREEN #{@screen[0].to_s.quote_if_necessary} #{@screen[1].to_s.quote_if_necessary}"
|
1103
|
+
end
|
1104
|
+
if @related_items
|
1105
|
+
@related_items.each do |target_name, packet_name, item_name|
|
1106
|
+
config << " RELATED_ITEM #{target_name.to_s.quote_if_necessary} #{packet_name.to_s.quote_if_necessary} #{item_name.to_s.quote_if_necessary}"
|
1107
|
+
end
|
1108
|
+
end
|
1046
1109
|
config
|
1047
1110
|
end
|
1048
1111
|
|
@@ -1086,6 +1149,18 @@ module OpenC3
|
|
1086
1149
|
items << item.as_json(*a)
|
1087
1150
|
end
|
1088
1151
|
end
|
1152
|
+
if @response
|
1153
|
+
config['response'] = @response
|
1154
|
+
end
|
1155
|
+
if @error_response
|
1156
|
+
config['error_response'] = @error_response
|
1157
|
+
end
|
1158
|
+
if @screen
|
1159
|
+
config['screen'] = @screen
|
1160
|
+
end
|
1161
|
+
if @related_items
|
1162
|
+
config['related_items'] = @related_items
|
1163
|
+
end
|
1089
1164
|
|
1090
1165
|
config
|
1091
1166
|
end
|
@@ -1117,6 +1192,19 @@ module OpenC3
|
|
1117
1192
|
hash['items'].each do |item|
|
1118
1193
|
packet.define(PacketItem.from_json(item))
|
1119
1194
|
end
|
1195
|
+
if hash['response']
|
1196
|
+
packet.response = hash['response']
|
1197
|
+
end
|
1198
|
+
if hash['error_response']
|
1199
|
+
packet.error_response = hash['error_response']
|
1200
|
+
end
|
1201
|
+
if hash['screen']
|
1202
|
+
packet.screen = hash['screen']
|
1203
|
+
end
|
1204
|
+
if hash['related_items']
|
1205
|
+
packet.related_items = hash['related_items']
|
1206
|
+
end
|
1207
|
+
|
1120
1208
|
packet
|
1121
1209
|
end
|
1122
1210
|
|
@@ -1144,8 +1232,6 @@ module OpenC3
|
|
1144
1232
|
json_hash
|
1145
1233
|
end
|
1146
1234
|
|
1147
|
-
protected
|
1148
|
-
|
1149
1235
|
# Performs packet specific processing on the packet.
|
1150
1236
|
# Intended to only be run once for each packet received
|
1151
1237
|
def process(buffer = @buffer)
|
@@ -1156,6 +1242,8 @@ module OpenC3
|
|
1156
1242
|
end
|
1157
1243
|
end
|
1158
1244
|
|
1245
|
+
protected
|
1246
|
+
|
1159
1247
|
def handle_limits_states(item, value)
|
1160
1248
|
# Retrieve limits state for the given value
|
1161
1249
|
limits_state = item.state_colors[value]
|
@@ -119,7 +119,8 @@ module OpenC3
|
|
119
119
|
# an xtce file to automatically determine the target name.
|
120
120
|
def process_file(filename, process_target_name)
|
121
121
|
# Handle .xtce files
|
122
|
-
|
122
|
+
extension = File.extname(filename).to_s.downcase
|
123
|
+
if extension == ".xtce" or extension == ".xml"
|
123
124
|
XtceParser.process(@commands, @telemetry, @warnings, filename, process_target_name)
|
124
125
|
return
|
125
126
|
end
|
@@ -213,7 +214,8 @@ module OpenC3
|
|
213
214
|
'PARAMETER', 'ID_ITEM', 'ID_PARAMETER', 'ARRAY_ITEM', 'ARRAY_PARAMETER', 'APPEND_ITEM',\
|
214
215
|
'APPEND_PARAMETER', 'APPEND_ID_ITEM', 'APPEND_ID_PARAMETER', 'APPEND_ARRAY_ITEM',\
|
215
216
|
'APPEND_ARRAY_PARAMETER', 'ALLOW_SHORT', 'HAZARDOUS', 'PROCESSOR', 'META',\
|
216
|
-
'DISABLE_MESSAGES', 'HIDDEN', 'DISABLED', 'ACCESSOR', 'TEMPLATE', 'TEMPLATE_FILE'
|
217
|
+
'DISABLE_MESSAGES', 'HIDDEN', 'DISABLED', 'ACCESSOR', 'TEMPLATE', 'TEMPLATE_FILE',\
|
218
|
+
'RESPONSE', 'ERROR_RESPONSE', 'SCREEN', 'RELATED_ITEM'
|
217
219
|
raise parser.error("No current packet for #{keyword}") unless @current_packet
|
218
220
|
|
219
221
|
process_current_packet(parser, keyword, params)
|
@@ -459,7 +461,30 @@ module OpenC3
|
|
459
461
|
rescue Exception => err
|
460
462
|
raise parser.error(err)
|
461
463
|
end
|
464
|
+
|
465
|
+
when 'RESPONSE'
|
466
|
+
usage = "#{keyword} <Target Name> <Packet Name>"
|
467
|
+
parser.verify_num_parameters(2, 2, usage)
|
468
|
+
@current_packet.response = [params[0].upcase, params[1].upcase]
|
469
|
+
|
470
|
+
when 'ERROR_RESPONSE'
|
471
|
+
usage = "#{keyword} <Target Name> <Packet Name>"
|
472
|
+
parser.verify_num_parameters(2, 2, usage)
|
473
|
+
@current_packet.error_response = [params[0].upcase, params[1].upcase]
|
474
|
+
|
475
|
+
when 'SCREEN'
|
476
|
+
usage = "#{keyword} <Target Name> <Screen Name>"
|
477
|
+
parser.verify_num_parameters(2, 2, usage)
|
478
|
+
@current_packet.screen = [params[0].upcase, params[1].upcase]
|
479
|
+
|
480
|
+
when 'RELATED_ITEM'
|
481
|
+
usage = "#{keyword} <Target Name> <Packet Name> <Item Name>"
|
482
|
+
parser.verify_num_parameters(3, 3, usage)
|
483
|
+
@current_packet.related_items ||= []
|
484
|
+
@current_packet.related_items << [params[0].upcase, params[1].upcase, params[2].upcase]
|
485
|
+
|
462
486
|
end
|
487
|
+
|
463
488
|
end
|
464
489
|
|
465
490
|
def process_current_item(parser, keyword, params)
|
@@ -181,7 +181,8 @@ module OpenC3
|
|
181
181
|
when 'ParameterTypeSet', 'EnumerationList', 'ParameterSet', 'ContainerSet',
|
182
182
|
'EntryList', 'DefaultCalibrator', 'DefaultAlarm', 'RestrictionCriteria',
|
183
183
|
'ComparisonList', 'MetaCommandSet', 'ArgumentTypeSet', 'ArgumentList',
|
184
|
-
'ArgumentAssignmentList', 'LocationInContainerInBits', 'ReferenceTime'
|
184
|
+
'ArgumentAssignmentList', 'LocationInContainerInBits', 'ReferenceTime',
|
185
|
+
'AncillaryDataSet', 'AncillaryData'
|
185
186
|
# Do Nothing
|
186
187
|
|
187
188
|
when 'ErrorDetectCorrect'
|
@@ -446,6 +447,9 @@ module OpenC3
|
|
446
447
|
process_ref_entry(element)
|
447
448
|
return false # Already recursed
|
448
449
|
|
450
|
+
when 'ContainerRefEntry'
|
451
|
+
xtce_handle_base_container('ContainerRefEntry', element)
|
452
|
+
|
449
453
|
when 'BaseContainer'
|
450
454
|
# Handled in SequenceContainer/CommandContainer
|
451
455
|
|