openc3 5.0.6
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/Gemfile +18 -0
- data/Guardfile +35 -0
- data/LICENSE.txt +727 -0
- data/README.md +37 -0
- data/Rakefile +131 -0
- data/bin/cstol_converter +1178 -0
- data/bin/openc3cli +531 -0
- data/bin/rubysloc +139 -0
- data/data/config/_array_params.yaml +23 -0
- data/data/config/_id_items.yaml +24 -0
- data/data/config/_id_params.yaml +58 -0
- data/data/config/_interfaces.yaml +214 -0
- data/data/config/_interfaces.yaml.err +1017 -0
- data/data/config/_items.yaml +20 -0
- data/data/config/_params.yaml +60 -0
- data/data/config/cmd_tlm_server.yaml +136 -0
- data/data/config/command.yaml +44 -0
- data/data/config/command_modifiers.yaml +160 -0
- data/data/config/command_telemetry.yaml +3 -0
- data/data/config/interface_modifiers.yaml +104 -0
- data/data/config/item_modifiers.yaml +221 -0
- data/data/config/microservice.yaml +78 -0
- data/data/config/param_item_modifiers.yaml +52 -0
- data/data/config/parameter_modifiers.yaml +200 -0
- data/data/config/plugins.yaml +80 -0
- data/data/config/protocols.yaml +290 -0
- data/data/config/screen.yaml +147 -0
- data/data/config/table_manager.yaml +89 -0
- data/data/config/table_parameter_modifiers.yaml +9 -0
- data/data/config/target.yaml +142 -0
- data/data/config/target_config.yaml +94 -0
- data/data/config/telemetry.yaml +87 -0
- data/data/config/telemetry_modifiers.yaml +159 -0
- data/data/config/tool.yaml +63 -0
- data/data/config/unknown.yaml +3 -0
- data/data/config/widgets.yaml +1505 -0
- data/ext/mkrf_conf.rb +49 -0
- data/ext/openc3/ext/array/array.c +122 -0
- data/ext/openc3/ext/array/extconf.rb +13 -0
- data/ext/openc3/ext/buffered_file/buffered_file.c +198 -0
- data/ext/openc3/ext/buffered_file/extconf.rb +13 -0
- data/ext/openc3/ext/config_parser/config_parser.c +280 -0
- data/ext/openc3/ext/config_parser/extconf.rb +13 -0
- data/ext/openc3/ext/crc/crc.c +351 -0
- data/ext/openc3/ext/crc/extconf.rb +13 -0
- data/ext/openc3/ext/openc3_io/extconf.rb +13 -0
- data/ext/openc3/ext/openc3_io/openc3_io.c +158 -0
- data/ext/openc3/ext/packet/extconf.rb +13 -0
- data/ext/openc3/ext/packet/packet.c +318 -0
- data/ext/openc3/ext/platform/extconf.rb +13 -0
- data/ext/openc3/ext/platform/platform.c +134 -0
- data/ext/openc3/ext/polynomial_conversion/extconf.rb +13 -0
- data/ext/openc3/ext/polynomial_conversion/polynomial_conversion.c +79 -0
- data/ext/openc3/ext/string/extconf.rb +13 -0
- data/ext/openc3/ext/string/string.c +63 -0
- data/ext/openc3/ext/structure/structure.c +1719 -0
- data/ext/openc3/ext/tabbed_plots_config/extconf.rb +13 -0
- data/ext/openc3/ext/tabbed_plots_config/tabbed_plots_config.c +62 -0
- data/ext/openc3/ext/telemetry/extconf.rb +13 -0
- data/ext/openc3/ext/telemetry/telemetry.c +336 -0
- data/lib/cosmos.rb +20 -0
- data/lib/cosmosc2.rb +20 -0
- data/lib/openc3/api/api.rb +39 -0
- data/lib/openc3/api/authorized_api.rb +30 -0
- data/lib/openc3/api/cmd_api.rb +451 -0
- data/lib/openc3/api/config_api.rb +58 -0
- data/lib/openc3/api/interface_api.rb +117 -0
- data/lib/openc3/api/limits_api.rb +375 -0
- data/lib/openc3/api/router_api.rb +117 -0
- data/lib/openc3/api/settings_api.rb +70 -0
- data/lib/openc3/api/target_api.rb +78 -0
- data/lib/openc3/api/tlm_api.rb +455 -0
- data/lib/openc3/bridge/bridge.rb +54 -0
- data/lib/openc3/bridge/bridge_config.rb +167 -0
- data/lib/openc3/bridge/bridge_interface_thread.rb +42 -0
- data/lib/openc3/bridge/bridge_router_thread.rb +42 -0
- data/lib/openc3/ccsds/ccsds_packet.rb +68 -0
- data/lib/openc3/ccsds/ccsds_parser.rb +148 -0
- data/lib/openc3/config/config_parser.rb +549 -0
- data/lib/openc3/config/meta_config_parser.rb +74 -0
- data/lib/openc3/conversions/conversion.rb +70 -0
- data/lib/openc3/conversions/generic_conversion.rb +83 -0
- data/lib/openc3/conversions/packet_time_formatted_conversion.rb +43 -0
- data/lib/openc3/conversions/packet_time_seconds_conversion.rb +43 -0
- data/lib/openc3/conversions/polynomial_conversion.rb +87 -0
- data/lib/openc3/conversions/processor_conversion.rb +70 -0
- data/lib/openc3/conversions/received_count_conversion.rb +38 -0
- data/lib/openc3/conversions/received_time_formatted_conversion.rb +42 -0
- data/lib/openc3/conversions/received_time_seconds_conversion.rb +42 -0
- data/lib/openc3/conversions/segmented_polynomial_conversion.rb +171 -0
- data/lib/openc3/conversions/unix_time_conversion.rb +68 -0
- data/lib/openc3/conversions/unix_time_formatted_conversion.rb +49 -0
- data/lib/openc3/conversions/unix_time_seconds_conversion.rb +49 -0
- data/lib/openc3/conversions.rb +34 -0
- data/lib/openc3/core_ext/array.rb +416 -0
- data/lib/openc3/core_ext/binding.rb +29 -0
- data/lib/openc3/core_ext/class.rb +72 -0
- data/lib/openc3/core_ext/exception.rb +61 -0
- data/lib/openc3/core_ext/file.rb +83 -0
- data/lib/openc3/core_ext/hash.rb +37 -0
- data/lib/openc3/core_ext/io.rb +134 -0
- data/lib/openc3/core_ext/kernel.rb +42 -0
- data/lib/openc3/core_ext/math.rb +128 -0
- data/lib/openc3/core_ext/matrix.rb +156 -0
- data/lib/openc3/core_ext/objectspace.rb +36 -0
- data/lib/openc3/core_ext/openc3_io.rb +57 -0
- data/lib/openc3/core_ext/range.rb +27 -0
- data/lib/openc3/core_ext/socket.rb +38 -0
- data/lib/openc3/core_ext/string.rb +389 -0
- data/lib/openc3/core_ext/stringio.rb +33 -0
- data/lib/openc3/core_ext/time.rb +508 -0
- data/lib/openc3/core_ext.rb +36 -0
- data/lib/openc3/interfaces/interface.rb +498 -0
- data/lib/openc3/interfaces/linc_interface.rb +475 -0
- data/lib/openc3/interfaces/protocols/burst_protocol.rb +192 -0
- data/lib/openc3/interfaces/protocols/crc_protocol.rb +193 -0
- data/lib/openc3/interfaces/protocols/fixed_protocol.rb +155 -0
- data/lib/openc3/interfaces/protocols/ignore_packet_protocol.rb +56 -0
- data/lib/openc3/interfaces/protocols/length_protocol.rb +165 -0
- data/lib/openc3/interfaces/protocols/override_protocol.rb +60 -0
- data/lib/openc3/interfaces/protocols/preidentified_protocol.rb +206 -0
- data/lib/openc3/interfaces/protocols/protocol.rb +82 -0
- data/lib/openc3/interfaces/protocols/template_protocol.rb +261 -0
- data/lib/openc3/interfaces/protocols/terminated_protocol.rb +93 -0
- data/lib/openc3/interfaces/serial_interface.rb +94 -0
- data/lib/openc3/interfaces/simulated_target_interface.rb +168 -0
- data/lib/openc3/interfaces/stream_interface.rb +81 -0
- data/lib/openc3/interfaces/tcpip_client_interface.rb +69 -0
- data/lib/openc3/interfaces/tcpip_server_interface.rb +629 -0
- data/lib/openc3/interfaces/udp_interface.rb +169 -0
- data/lib/openc3/interfaces.rb +44 -0
- data/lib/openc3/io/buffered_file.rb +109 -0
- data/lib/openc3/io/io_multiplexer.rb +80 -0
- data/lib/openc3/io/json_api_object.rb +208 -0
- data/lib/openc3/io/json_drb.rb +335 -0
- data/lib/openc3/io/json_drb_object.rb +114 -0
- data/lib/openc3/io/json_drb_rack.rb +84 -0
- data/lib/openc3/io/json_rpc.rb +420 -0
- data/lib/openc3/io/openc3_snmp.rb +58 -0
- data/lib/openc3/io/posix_serial_driver.rb +156 -0
- data/lib/openc3/io/raw_logger.rb +167 -0
- data/lib/openc3/io/raw_logger_pair.rb +77 -0
- data/lib/openc3/io/serial_driver.rb +105 -0
- data/lib/openc3/io/stderr.rb +43 -0
- data/lib/openc3/io/stdout.rb +43 -0
- data/lib/openc3/io/udp_sockets.rb +194 -0
- data/lib/openc3/io/win32_serial_driver.rb +196 -0
- data/lib/openc3/logs/log_writer.rb +302 -0
- data/lib/openc3/logs/packet_log_constants.rb +62 -0
- data/lib/openc3/logs/packet_log_reader.rb +345 -0
- data/lib/openc3/logs/packet_log_writer.rb +299 -0
- data/lib/openc3/logs/text_log_writer.rb +68 -0
- data/lib/openc3/logs.rb +25 -0
- data/lib/openc3/microservices/cleanup_microservice.rb +68 -0
- data/lib/openc3/microservices/decom_microservice.rb +136 -0
- data/lib/openc3/microservices/interface_microservice.rb +532 -0
- data/lib/openc3/microservices/log_microservice.rb +108 -0
- data/lib/openc3/microservices/microservice.rb +204 -0
- data/lib/openc3/microservices/plugin_microservice.rb +43 -0
- data/lib/openc3/microservices/reaction_microservice.rb +541 -0
- data/lib/openc3/microservices/reducer_microservice.rb +313 -0
- data/lib/openc3/microservices/router_microservice.rb +44 -0
- data/lib/openc3/microservices/text_log_microservice.rb +84 -0
- data/lib/openc3/microservices/timeline_microservice.rb +363 -0
- data/lib/openc3/microservices/trigger_group_microservice.rb +638 -0
- data/lib/openc3/models/activity_model.rb +319 -0
- data/lib/openc3/models/auth_model.rb +65 -0
- data/lib/openc3/models/cvt_model.rb +185 -0
- data/lib/openc3/models/environment_model.rb +58 -0
- data/lib/openc3/models/gem_model.rb +137 -0
- data/lib/openc3/models/info_model.rb +31 -0
- data/lib/openc3/models/interface_model.rb +281 -0
- data/lib/openc3/models/interface_status_model.rb +117 -0
- data/lib/openc3/models/metadata_model.rb +139 -0
- data/lib/openc3/models/metric_model.rb +59 -0
- data/lib/openc3/models/microservice_model.rb +206 -0
- data/lib/openc3/models/microservice_status_model.rb +74 -0
- data/lib/openc3/models/model.rb +204 -0
- data/lib/openc3/models/note_model.rb +122 -0
- data/lib/openc3/models/notification_model.rb +40 -0
- data/lib/openc3/models/ping_model.rb +35 -0
- data/lib/openc3/models/plugin_model.rb +292 -0
- data/lib/openc3/models/process_status_model.rb +76 -0
- data/lib/openc3/models/reaction_model.rb +322 -0
- data/lib/openc3/models/reducer_model.rb +65 -0
- data/lib/openc3/models/router_model.rb +35 -0
- data/lib/openc3/models/router_status_model.rb +27 -0
- data/lib/openc3/models/scope_model.rb +153 -0
- data/lib/openc3/models/settings_model.rb +55 -0
- data/lib/openc3/models/sorted_model.rb +167 -0
- data/lib/openc3/models/target_model.rb +759 -0
- data/lib/openc3/models/timeline_model.rb +154 -0
- data/lib/openc3/models/tool_config_model.rb +38 -0
- data/lib/openc3/models/tool_model.rb +262 -0
- data/lib/openc3/models/trigger_group_model.rb +186 -0
- data/lib/openc3/models/trigger_model.rb +330 -0
- data/lib/openc3/models/widget_model.rb +138 -0
- data/lib/openc3/operators/microservice_operator.rb +128 -0
- data/lib/openc3/operators/operator.rb +277 -0
- data/lib/openc3/packets/binary_accessor.rb +1207 -0
- data/lib/openc3/packets/commands.rb +373 -0
- data/lib/openc3/packets/json_packet.rb +134 -0
- data/lib/openc3/packets/limits.rb +271 -0
- data/lib/openc3/packets/limits_response.rb +53 -0
- data/lib/openc3/packets/packet.rb +1168 -0
- data/lib/openc3/packets/packet_config.rb +625 -0
- data/lib/openc3/packets/packet_item.rb +586 -0
- data/lib/openc3/packets/packet_item_limits.rb +162 -0
- data/lib/openc3/packets/parsers/format_string_parser.rb +65 -0
- data/lib/openc3/packets/parsers/limits_parser.rb +159 -0
- data/lib/openc3/packets/parsers/limits_response_parser.rb +61 -0
- data/lib/openc3/packets/parsers/packet_item_parser.rb +272 -0
- data/lib/openc3/packets/parsers/packet_parser.rb +134 -0
- data/lib/openc3/packets/parsers/processor_parser.rb +73 -0
- data/lib/openc3/packets/parsers/state_parser.rb +127 -0
- data/lib/openc3/packets/parsers/xtce_converter.rb +442 -0
- data/lib/openc3/packets/parsers/xtce_parser.rb +722 -0
- data/lib/openc3/packets/structure.rb +553 -0
- data/lib/openc3/packets/structure_item.rb +365 -0
- data/lib/openc3/packets/telemetry.rb +487 -0
- data/lib/openc3/processors/processor.rb +86 -0
- data/lib/openc3/processors/statistics_processor.rb +82 -0
- data/lib/openc3/processors/watermark_processor.rb +58 -0
- data/lib/openc3/processors.rb +24 -0
- data/lib/openc3/script/api_shared.rb +828 -0
- data/lib/openc3/script/calendar.rb +89 -0
- data/lib/openc3/script/commands.rb +227 -0
- data/lib/openc3/script/exceptions.rb +29 -0
- data/lib/openc3/script/extract.rb +161 -0
- data/lib/openc3/script/limits.rb +60 -0
- data/lib/openc3/script/script.rb +299 -0
- data/lib/openc3/script/script_runner.rb +238 -0
- data/lib/openc3/script/storage.rb +146 -0
- data/lib/openc3/script/suite.rb +542 -0
- data/lib/openc3/script/suite_results.rb +196 -0
- data/lib/openc3/script/suite_runner.rb +217 -0
- data/lib/openc3/script.rb +21 -0
- data/lib/openc3/streams/serial_stream.rb +167 -0
- data/lib/openc3/streams/stream.rb +63 -0
- data/lib/openc3/streams/tcpip_client_stream.rb +116 -0
- data/lib/openc3/streams/tcpip_socket_stream.rb +195 -0
- data/lib/openc3/system/system.rb +127 -0
- data/lib/openc3/system/system_config.rb +411 -0
- data/lib/openc3/system/target.rb +269 -0
- data/lib/openc3/system.rb +24 -0
- data/lib/openc3/tools/cmd_tlm_server/api.rb +20 -0
- data/lib/openc3/tools/cmd_tlm_server/cmd_tlm_server_config.rb +320 -0
- data/lib/openc3/tools/cmd_tlm_server/interface_thread.rb +294 -0
- data/lib/openc3/tools/table_manager/table.rb +77 -0
- data/lib/openc3/tools/table_manager/table_config.rb +273 -0
- data/lib/openc3/tools/table_manager/table_item.rb +90 -0
- data/lib/openc3/tools/table_manager/table_item_parser.rb +66 -0
- data/lib/openc3/tools/table_manager/table_manager_core.rb +333 -0
- data/lib/openc3/tools/table_manager/table_parser.rb +93 -0
- data/lib/openc3/tools/test_runner/test.rb +67 -0
- data/lib/openc3/top_level.rb +595 -0
- data/lib/openc3/topics/autonomic_topic.rb +52 -0
- data/lib/openc3/topics/calendar_topic.rb +44 -0
- data/lib/openc3/topics/command_decom_topic.rb +76 -0
- data/lib/openc3/topics/command_topic.rb +83 -0
- data/lib/openc3/topics/config_topic.rb +68 -0
- data/lib/openc3/topics/interface_topic.rb +73 -0
- data/lib/openc3/topics/limits_event_topic.rb +109 -0
- data/lib/openc3/topics/notifications_topic.rb +28 -0
- data/lib/openc3/topics/router_topic.rb +85 -0
- data/lib/openc3/topics/telemetry_decom_topic.rb +54 -0
- data/lib/openc3/topics/telemetry_topic.rb +36 -0
- data/lib/openc3/topics/timeline_topic.rb +45 -0
- data/lib/openc3/topics/topic.rb +53 -0
- data/lib/openc3/utilities/authentication.rb +141 -0
- data/lib/openc3/utilities/authorization.rb +51 -0
- data/lib/openc3/utilities/crc.rb +278 -0
- data/lib/openc3/utilities/csv.rb +153 -0
- data/lib/openc3/utilities/logger.rb +187 -0
- data/lib/openc3/utilities/message_log.rb +91 -0
- data/lib/openc3/utilities/metric.rb +141 -0
- data/lib/openc3/utilities/process_manager.rb +139 -0
- data/lib/openc3/utilities/quaternion.rb +257 -0
- data/lib/openc3/utilities/ruby_lex_utils.rb +568 -0
- data/lib/openc3/utilities/s3.rb +202 -0
- data/lib/openc3/utilities/s3_autoload.rb +9 -0
- data/lib/openc3/utilities/s3_file_cache.rb +274 -0
- data/lib/openc3/utilities/simulated_target.rb +117 -0
- data/lib/openc3/utilities/sleeper.rb +51 -0
- data/lib/openc3/utilities/store.rb +23 -0
- data/lib/openc3/utilities/store_autoload.rb +237 -0
- data/lib/openc3/utilities/zip.rb +21 -0
- data/lib/openc3/utilities.rb +35 -0
- data/lib/openc3/version.rb +14 -0
- data/lib/openc3/win32/excel.rb +132 -0
- data/lib/openc3/win32/win32.rb +402 -0
- data/lib/openc3/win32/win32_main.rb +333 -0
- data/lib/openc3.rb +49 -0
- data/tasks/gemfile_stats.rake +113 -0
- data/tasks/spec.rake +30 -0
- data/templates/plugin-template/README.md +15 -0
- data/templates/plugin-template/Rakefile +12 -0
- data/templates/plugin-template/plugin.gemspec +23 -0
- data/templates/plugin-template/plugin.txt +9 -0
- data/templates/plugin-template/targets/TARGET/cmd_tlm/cmd.txt +8 -0
- data/templates/plugin-template/targets/TARGET/cmd_tlm/tlm.txt +8 -0
- data/templates/plugin-template/targets/TARGET/lib/target.rb +10 -0
- data/templates/plugin-template/targets/TARGET/procedures/procedure.rb +3 -0
- data/templates/plugin-template/targets/TARGET/screens/status.txt +9 -0
- data/templates/plugin-template/targets/TARGET/target.txt +5 -0
- metadata +849 -0
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# encoding: ascii-8bit
|
|
2
|
+
|
|
3
|
+
# Copyright 2022 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 Affero 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
|
+
# This program is distributed in the hope that it will be useful,
|
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
14
|
+
# GNU Affero General Public License for more details.
|
|
15
|
+
|
|
16
|
+
# Modified by OpenC3, Inc.
|
|
17
|
+
# All changes Copyright 2022, OpenC3, Inc.
|
|
18
|
+
# All Rights Reserved
|
|
19
|
+
|
|
20
|
+
require 'openc3/packets/packet'
|
|
21
|
+
require 'openc3/tools/table_manager/table_item'
|
|
22
|
+
|
|
23
|
+
module OpenC3
|
|
24
|
+
# Table extends Packet by adding more attributes relative to
|
|
25
|
+
# displaying binary data in a gui.
|
|
26
|
+
class Table < Packet
|
|
27
|
+
# Define the target for tables as 'TABLE' since there is no target
|
|
28
|
+
TARGET = 'TABLE'
|
|
29
|
+
|
|
30
|
+
# @return [Symbol] Either :KEY_VALUE or :ROW_COLUMN
|
|
31
|
+
attr_reader :type
|
|
32
|
+
|
|
33
|
+
# @return [String] File which contains the table definition
|
|
34
|
+
attr_reader :filename
|
|
35
|
+
|
|
36
|
+
# @return [Integer] Number of columns in the table
|
|
37
|
+
attr_accessor :num_columns
|
|
38
|
+
|
|
39
|
+
alias table_name packet_name
|
|
40
|
+
|
|
41
|
+
# Constructor for a TableDefinition
|
|
42
|
+
def initialize(name, endianness, type, description, filename)
|
|
43
|
+
super(TARGET, name, endianness, description, '', TableItem)
|
|
44
|
+
# ONE_DIMENSIONAL and TWO_DIMENSIONAL are deprecated so translate
|
|
45
|
+
type = :KEY_VALUE if type == :ONE_DIMENSIONAL
|
|
46
|
+
type = :ROW_COLUMN if type == :TWO_DIMENSIONAL
|
|
47
|
+
if type != :KEY_VALUE && type != :ROW_COLUMN
|
|
48
|
+
raise ArgumentError,
|
|
49
|
+
"Invalid type '#{type}' for table '#{name}'. Must be KEY_VALUE or ROW_COLUMN"
|
|
50
|
+
end
|
|
51
|
+
@type = type
|
|
52
|
+
@filename = filename
|
|
53
|
+
@num_rows = 0
|
|
54
|
+
@num_columns = (@type == :KEY_VALUE) ? 1 : 0
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# @param num_rows [Integer] Set the number of rows in a ROW_COLUMN table
|
|
58
|
+
def num_rows=(num_rows)
|
|
59
|
+
case @type
|
|
60
|
+
when :KEY_VALUE
|
|
61
|
+
raise 'Rows are fixed in a KEY_VALUE table'
|
|
62
|
+
when :ROW_COLUMN
|
|
63
|
+
@num_rows = num_rows
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# @return [Integer] Number of rows in the table
|
|
68
|
+
def num_rows
|
|
69
|
+
case @type
|
|
70
|
+
when :KEY_VALUE
|
|
71
|
+
@sorted_items.count { |item| !item.hidden }
|
|
72
|
+
when :ROW_COLUMN
|
|
73
|
+
@num_rows
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
# encoding: ascii-8bit
|
|
2
|
+
|
|
3
|
+
# Copyright 2022 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 Affero 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
|
+
# This program is distributed in the hope that it will be useful,
|
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
14
|
+
# GNU Affero General Public License for more details.
|
|
15
|
+
|
|
16
|
+
# Modified by OpenC3, Inc.
|
|
17
|
+
# All changes Copyright 2022, OpenC3, Inc.
|
|
18
|
+
# All Rights Reserved
|
|
19
|
+
|
|
20
|
+
require 'openc3/config/config_parser'
|
|
21
|
+
require 'openc3/packets/packet_config'
|
|
22
|
+
require 'openc3/tools/table_manager/table'
|
|
23
|
+
require 'openc3/tools/table_manager/table_parser'
|
|
24
|
+
require 'openc3/tools/table_manager/table_item_parser'
|
|
25
|
+
|
|
26
|
+
module OpenC3
|
|
27
|
+
# Processes the Table Manager configuration files which define tables. Since
|
|
28
|
+
# this class inherits from {PacketConfig} it only needs to implement Table
|
|
29
|
+
# Manager specific keywords. All tables are accessed through the table
|
|
30
|
+
# and tables methods.
|
|
31
|
+
class TableConfig < PacketConfig
|
|
32
|
+
# @return [String] Table configuration filename
|
|
33
|
+
attr_reader :filename
|
|
34
|
+
|
|
35
|
+
def self.process_file(filename)
|
|
36
|
+
instance = self.new()
|
|
37
|
+
instance.process_file(filename)
|
|
38
|
+
instance
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# Create the table configuration
|
|
42
|
+
def initialize
|
|
43
|
+
super
|
|
44
|
+
# Override commands with the Table::TARGET name to store tables
|
|
45
|
+
@commands[Table::TARGET] = {}
|
|
46
|
+
@definitions = {}
|
|
47
|
+
@last_config = [] # Stores array of [filename, contents]
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# @return [Array<Table>] All tables defined in the configuration file
|
|
51
|
+
def tables
|
|
52
|
+
@commands[Table::TARGET]
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# @return [String] Table definition for the specific table
|
|
56
|
+
def definition(table_name)
|
|
57
|
+
@definitions[table_name.upcase]
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# @return [Array<String>] All the table names
|
|
61
|
+
def table_names
|
|
62
|
+
tables.keys
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# @param table_name [String] Table name to return
|
|
66
|
+
# @return [Table]
|
|
67
|
+
def table(table_name)
|
|
68
|
+
tables[table_name.upcase]
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# Processes a OpenC3 table configuration file and uses the keywords to build up
|
|
72
|
+
# knowledge of the tables.
|
|
73
|
+
#
|
|
74
|
+
# @param filename [String] The name of the configuration file
|
|
75
|
+
def process_file(filename)
|
|
76
|
+
# Partial files are included into another file and thus aren't directly processed
|
|
77
|
+
return if File.basename(filename)[0] == '_' # Partials start with underscore
|
|
78
|
+
@filename = filename
|
|
79
|
+
@last_config = [File.basename(filename), File.read(filename)]
|
|
80
|
+
@converted_type = nil
|
|
81
|
+
@converted_bit_size = nil
|
|
82
|
+
@proc_text = ''
|
|
83
|
+
@building_generic_conversion = false
|
|
84
|
+
@defaults = []
|
|
85
|
+
|
|
86
|
+
parser =
|
|
87
|
+
ConfigParser.new(
|
|
88
|
+
'https://openc3.com/docs/tools/#table-manager-configuration-openc3--39',
|
|
89
|
+
)
|
|
90
|
+
parser.parse_file(filename) do |keyword, params|
|
|
91
|
+
if @building_generic_conversion
|
|
92
|
+
case keyword
|
|
93
|
+
# Complete a generic conversion
|
|
94
|
+
when 'GENERIC_READ_CONVERSION_END', 'GENERIC_WRITE_CONVERSION_END'
|
|
95
|
+
parser.verify_num_parameters(0, 0, keyword)
|
|
96
|
+
@current_item.read_conversion =
|
|
97
|
+
GenericConversion.new(
|
|
98
|
+
@proc_text,
|
|
99
|
+
@converted_type,
|
|
100
|
+
@converted_bit_size,
|
|
101
|
+
) if keyword.include? 'READ'
|
|
102
|
+
@current_item.write_conversion =
|
|
103
|
+
GenericConversion.new(
|
|
104
|
+
@proc_text,
|
|
105
|
+
@converted_type,
|
|
106
|
+
@converted_bit_size,
|
|
107
|
+
) if keyword.include? 'WRITE'
|
|
108
|
+
@building_generic_conversion = false
|
|
109
|
+
# Add the current config.line to the conversion being built
|
|
110
|
+
else
|
|
111
|
+
@proc_text << parser.line << "\n"
|
|
112
|
+
end # case keyword
|
|
113
|
+
else
|
|
114
|
+
# not building generic conversion
|
|
115
|
+
case keyword
|
|
116
|
+
when 'TABLEFILE'
|
|
117
|
+
usage = "#{keyword} <File name>"
|
|
118
|
+
parser.verify_num_parameters(1, 1, usage)
|
|
119
|
+
table_filename = File.join(File.dirname(filename), params[0])
|
|
120
|
+
unless File.exist?(table_filename)
|
|
121
|
+
raise parser.error(
|
|
122
|
+
"Table file #{table_filename} not found",
|
|
123
|
+
usage,
|
|
124
|
+
)
|
|
125
|
+
end
|
|
126
|
+
process_file(table_filename)
|
|
127
|
+
|
|
128
|
+
when 'TABLE'
|
|
129
|
+
finish_packet
|
|
130
|
+
@current_packet =
|
|
131
|
+
TableParser.parse_table(parser, @commands, @warnings)
|
|
132
|
+
@definitions[@current_packet.packet_name] = @last_config
|
|
133
|
+
@current_cmd_or_tlm = COMMAND
|
|
134
|
+
@default_index = 0
|
|
135
|
+
|
|
136
|
+
# Select an existing table for editing
|
|
137
|
+
when 'SELECT_TABLE'
|
|
138
|
+
usage = "#{keyword} <TABLE NAME>"
|
|
139
|
+
finish_packet
|
|
140
|
+
parser.verify_num_parameters(1, 1, usage)
|
|
141
|
+
table_name = params[0].upcase
|
|
142
|
+
@current_packet = table(table_name)
|
|
143
|
+
unless @current_packet
|
|
144
|
+
raise parser.error("Table #{table_name} not found", usage)
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
#######################################################################
|
|
148
|
+
# All the following keywords must have a current packet defined
|
|
149
|
+
#######################################################################
|
|
150
|
+
when 'SELECT_PARAMETER', 'PARAMETER', 'ID_PARAMETER',
|
|
151
|
+
'ARRAY_PARAMETER', 'APPEND_PARAMETER', 'APPEND_ID_PARAMETER',
|
|
152
|
+
'APPEND_ARRAY_PARAMETER', 'ALLOW_SHORT', 'HAZARDOUS',
|
|
153
|
+
'PROCESSOR', 'META', 'DISABLE_MESSAGES', 'DISABLED'
|
|
154
|
+
unless @current_packet
|
|
155
|
+
raise parser.error("No current packet for #{keyword}")
|
|
156
|
+
end
|
|
157
|
+
process_current_packet(parser, keyword, params)
|
|
158
|
+
|
|
159
|
+
#######################################################################
|
|
160
|
+
# All the following keywords must have a current item defined
|
|
161
|
+
#######################################################################
|
|
162
|
+
when 'STATE', 'READ_CONVERSION', 'WRITE_CONVERSION',
|
|
163
|
+
'POLY_READ_CONVERSION', 'POLY_WRITE_CONVERSION',
|
|
164
|
+
'SEG_POLY_READ_CONVERSION', 'SEG_POLY_WRITE_CONVERSION',
|
|
165
|
+
'GENERIC_READ_CONVERSION_START',
|
|
166
|
+
'GENERIC_WRITE_CONVERSION_START', 'REQUIRED', 'LIMITS',
|
|
167
|
+
'LIMITS_RESPONSE', 'UNITS', 'FORMAT_STRING', 'DESCRIPTION',
|
|
168
|
+
'HIDDEN', 'MINIMUM_VALUE', 'MAXIMUM_VALUE', 'DEFAULT_VALUE',
|
|
169
|
+
'OVERFLOW', 'UNEDITABLE'
|
|
170
|
+
unless @current_item
|
|
171
|
+
raise parser.error("No current item for #{keyword}")
|
|
172
|
+
end
|
|
173
|
+
process_current_item(parser, keyword, params)
|
|
174
|
+
|
|
175
|
+
when 'DEFAULT'
|
|
176
|
+
if params.length != @current_packet.sorted_items.length
|
|
177
|
+
raise parser.error("DEFAULT #{params.join(' ')} length of #{params.length} doesn't match item length of #{@current_packet.sorted_items.length}")
|
|
178
|
+
end
|
|
179
|
+
@defaults.concat(params)
|
|
180
|
+
|
|
181
|
+
else
|
|
182
|
+
# blank config.lines will have a nil keyword and should not raise an exception
|
|
183
|
+
raise parser.error("Unknown keyword '#{keyword}'") if keyword
|
|
184
|
+
end # case keyword
|
|
185
|
+
end
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
# Complete the last defined packet
|
|
189
|
+
finish_packet
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
# (see PacketConfig#process_current_packet)
|
|
193
|
+
def process_current_packet(parser, keyword, params)
|
|
194
|
+
super(parser, keyword, params)
|
|
195
|
+
rescue => err
|
|
196
|
+
if err.message.include?('not found')
|
|
197
|
+
raise parser.error(
|
|
198
|
+
"#{params[0]} not found in table #{@current_packet.table_name}",
|
|
199
|
+
'SELECT_PARAMETER <PARAMETER NAME>',
|
|
200
|
+
)
|
|
201
|
+
else
|
|
202
|
+
raise err
|
|
203
|
+
end
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
# Overridden method to handle the unique table item parameters: UNEDITABLE
|
|
207
|
+
# and HIDDEN.
|
|
208
|
+
# (see PacketConfig#process_current_item)
|
|
209
|
+
def process_current_item(parser, keyword, params)
|
|
210
|
+
super(parser, keyword, params)
|
|
211
|
+
case keyword
|
|
212
|
+
when 'UNEDITABLE'
|
|
213
|
+
usage = "#{keyword}"
|
|
214
|
+
parser.verify_num_parameters(0, 0, usage)
|
|
215
|
+
@current_item.editable = false
|
|
216
|
+
when 'HIDDEN'
|
|
217
|
+
usage = "#{keyword}"
|
|
218
|
+
parser.verify_num_parameters(0, 0, usage)
|
|
219
|
+
@current_item.hidden = true
|
|
220
|
+
end
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
# (see PacketConfig#start_item)
|
|
224
|
+
def start_item(parser)
|
|
225
|
+
finish_item
|
|
226
|
+
@current_item = TableItemParser.parse(parser, @current_packet, @warnings)
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
# If the table is ROW_COLUMN all currently defined items are
|
|
230
|
+
# duplicated until the specified number of rows are created.
|
|
231
|
+
def finish_packet
|
|
232
|
+
if @current_packet
|
|
233
|
+
warnings = @current_packet.check_bit_offsets
|
|
234
|
+
if warnings.length > 0
|
|
235
|
+
raise "Overlapping items not allowed in tables.\n#{warnings}"
|
|
236
|
+
end
|
|
237
|
+
if @current_packet.type == :ROW_COLUMN
|
|
238
|
+
items = @current_packet.sorted_items.clone
|
|
239
|
+
(@current_packet.num_rows - 1).times do |row|
|
|
240
|
+
items.each do |item|
|
|
241
|
+
new_item = item.clone
|
|
242
|
+
new_item.name = "#{new_item.name[0...-1]}#{row + 1}"
|
|
243
|
+
@current_packet.append(new_item)
|
|
244
|
+
end
|
|
245
|
+
end
|
|
246
|
+
end
|
|
247
|
+
unless @defaults.empty?
|
|
248
|
+
@current_packet.sorted_items.each_with_index do |item, index|
|
|
249
|
+
case item.data_type
|
|
250
|
+
when :INT, :UINT
|
|
251
|
+
begin
|
|
252
|
+
# Integer handles hex strings, e.g. 0xDEADBEEF
|
|
253
|
+
item.default = Integer(@defaults[index])
|
|
254
|
+
rescue ArgumentError
|
|
255
|
+
value = item.states[@defaults[index]]
|
|
256
|
+
if value
|
|
257
|
+
item.default = value
|
|
258
|
+
else
|
|
259
|
+
raise "Unknown DEFAULT #{@defaults[index]} for item #{item.name}. Valid states are #{item.states.keys.join(', ')}."
|
|
260
|
+
end
|
|
261
|
+
end
|
|
262
|
+
when :FLOAT
|
|
263
|
+
item.default = @defaults[index].to_f
|
|
264
|
+
when :STRING, :BLOCK
|
|
265
|
+
item.default = @defaults[index]
|
|
266
|
+
end
|
|
267
|
+
end
|
|
268
|
+
end
|
|
269
|
+
end
|
|
270
|
+
super()
|
|
271
|
+
end
|
|
272
|
+
end
|
|
273
|
+
end
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# encoding: ascii-8bit
|
|
2
|
+
|
|
3
|
+
# Copyright 2022 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 Affero 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
|
+
# This program is distributed in the hope that it will be useful,
|
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
14
|
+
# GNU Affero General Public License for more details.
|
|
15
|
+
|
|
16
|
+
# Modified by OpenC3, Inc.
|
|
17
|
+
# All changes Copyright 2022, OpenC3, Inc.
|
|
18
|
+
# All Rights Reserved
|
|
19
|
+
|
|
20
|
+
require 'openc3/packets/packet_item'
|
|
21
|
+
|
|
22
|
+
module OpenC3
|
|
23
|
+
# Implements the attributes that are unique to a TableItem such as editable
|
|
24
|
+
# and hidden. All other functionality is inherited from {PacketItem}.
|
|
25
|
+
class TableItem < PacketItem
|
|
26
|
+
# @return [Boolean] Whether this item is editable
|
|
27
|
+
attr_reader :editable
|
|
28
|
+
|
|
29
|
+
# @return [Boolean] Whether this item is hidden (not displayed)
|
|
30
|
+
attr_reader :hidden
|
|
31
|
+
|
|
32
|
+
# (see PacketItem#initialize)
|
|
33
|
+
def initialize(
|
|
34
|
+
name,
|
|
35
|
+
bit_offset,
|
|
36
|
+
bit_size,
|
|
37
|
+
data_type,
|
|
38
|
+
endianness,
|
|
39
|
+
array_size = nil,
|
|
40
|
+
overflow = :ERROR
|
|
41
|
+
)
|
|
42
|
+
super(
|
|
43
|
+
name,
|
|
44
|
+
bit_offset,
|
|
45
|
+
bit_size,
|
|
46
|
+
data_type,
|
|
47
|
+
endianness,
|
|
48
|
+
array_size,
|
|
49
|
+
overflow,
|
|
50
|
+
)
|
|
51
|
+
@display_type = nil
|
|
52
|
+
@editable = true
|
|
53
|
+
@hidden = false
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# @param editable [Boolean] Whether this item can be edited
|
|
57
|
+
def editable=(editable)
|
|
58
|
+
unless !!editable == editable
|
|
59
|
+
raise ArgumentError,
|
|
60
|
+
"#{@name}: editable must be a boolean but is a #{editable.class}"
|
|
61
|
+
end
|
|
62
|
+
@editable = editable
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# @param hidden [Boolean] Whether this item should be hidden
|
|
66
|
+
def hidden=(hidden)
|
|
67
|
+
unless !!hidden == hidden
|
|
68
|
+
raise ArgumentError,
|
|
69
|
+
"#{@name}: hidden must be a boolean but is a #{hidden.class}"
|
|
70
|
+
end
|
|
71
|
+
@hidden = hidden
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# Make a light weight clone of this item
|
|
75
|
+
def clone
|
|
76
|
+
item = super()
|
|
77
|
+
item.editable = self.editable
|
|
78
|
+
item
|
|
79
|
+
end
|
|
80
|
+
alias dup clone
|
|
81
|
+
|
|
82
|
+
# Create a hash of this item's attributes
|
|
83
|
+
def as_json(*a)
|
|
84
|
+
hash = super()
|
|
85
|
+
hash['editable'] = self.editable
|
|
86
|
+
hash['hidden'] = self.hidden
|
|
87
|
+
hash
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# encoding: ascii-8bit
|
|
2
|
+
|
|
3
|
+
# Copyright 2022 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 Affero 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
|
+
# This program is distributed in the hope that it will be useful,
|
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
14
|
+
# GNU Affero General Public License for more details.
|
|
15
|
+
|
|
16
|
+
# Modified by OpenC3, Inc.
|
|
17
|
+
# All changes Copyright 2022, OpenC3, Inc.
|
|
18
|
+
# All Rights Reserved
|
|
19
|
+
|
|
20
|
+
require 'openc3/packets/packet_config'
|
|
21
|
+
require 'openc3/packets/parsers/packet_item_parser'
|
|
22
|
+
require 'openc3/tools/table_manager/table_item'
|
|
23
|
+
|
|
24
|
+
module OpenC3
|
|
25
|
+
# Extends the PacketItemParser to create TableItems for TableManager
|
|
26
|
+
class TableItemParser < PacketItemParser
|
|
27
|
+
# @param parser [ConfigParser] Configuration parser
|
|
28
|
+
# @param table [Table] Table all parsed items should be added to
|
|
29
|
+
# # @param warnings [Array<String>] Array of warning strings from PacketConfig
|
|
30
|
+
def self.parse(parser, table, warnings)
|
|
31
|
+
parser = TableItemParser.new(parser, warnings)
|
|
32
|
+
parser.verify_parameters(PacketConfig::COMMAND)
|
|
33
|
+
parser.create_table_item(table)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# @param table [Table] Table created items are added to
|
|
37
|
+
def create_table_item(table)
|
|
38
|
+
name = @parser.parameters[0]
|
|
39
|
+
if table.type == :ROW_COLUMN
|
|
40
|
+
name = "#{name}0"
|
|
41
|
+
table.num_columns += 1
|
|
42
|
+
end
|
|
43
|
+
item =
|
|
44
|
+
TableItem.new(
|
|
45
|
+
name,
|
|
46
|
+
get_bit_offset,
|
|
47
|
+
get_bit_size,
|
|
48
|
+
get_data_type,
|
|
49
|
+
get_endianness(table),
|
|
50
|
+
get_array_size,
|
|
51
|
+
:ERROR,
|
|
52
|
+
) # overflow
|
|
53
|
+
item.range = get_range
|
|
54
|
+
item.default = get_default
|
|
55
|
+
item.description = get_description
|
|
56
|
+
if append?
|
|
57
|
+
item = table.append(item)
|
|
58
|
+
else
|
|
59
|
+
item = table.define(item)
|
|
60
|
+
end
|
|
61
|
+
item
|
|
62
|
+
rescue => err
|
|
63
|
+
raise @parser.error(err, @usage)
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|