openc3 5.0.11 → 5.1.1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of openc3 might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Guardfile +3 -0
- data/LICENSE.txt +7 -5
- data/README.md +11 -9
- data/Rakefile +3 -0
- data/bin/cstol_converter +3 -0
- data/bin/openc3cli +29 -18
- data/bin/rubysloc +3 -0
- data/data/config/screen.yaml +10 -2
- data/data/config/target.yaml +1 -1
- data/data/config/widgets.yaml +6 -6
- data/ext/mkrf_conf.rb +3 -0
- data/ext/openc3/ext/array/array.c +3 -0
- data/ext/openc3/ext/buffered_file/buffered_file.c +3 -0
- data/ext/openc3/ext/config_parser/config_parser.c +3 -0
- data/ext/openc3/ext/crc/crc.c +3 -0
- data/ext/openc3/ext/openc3_io/openc3_io.c +3 -0
- data/ext/openc3/ext/packet/packet.c +3 -0
- data/ext/openc3/ext/platform/platform.c +3 -0
- data/ext/openc3/ext/polynomial_conversion/polynomial_conversion.c +3 -0
- data/ext/openc3/ext/string/string.c +3 -0
- data/ext/openc3/ext/structure/structure.c +3 -0
- data/ext/openc3/ext/tabbed_plots_config/tabbed_plots_config.c +3 -0
- data/ext/openc3/ext/telemetry/telemetry.c +3 -0
- data/lib/cosmos.rb +3 -0
- data/lib/cosmosc2.rb +3 -0
- data/lib/openc3/accessors/accessor.rb +3 -0
- data/lib/openc3/accessors/binary_accessor.rb +3 -0
- data/lib/openc3/accessors/cbor_accessor.rb +3 -0
- data/lib/openc3/accessors/html_accessor.rb +3 -0
- data/lib/openc3/accessors/json_accessor.rb +4 -1
- data/lib/openc3/accessors/xml_accessor.rb +3 -0
- data/lib/openc3/accessors.rb +3 -0
- data/lib/openc3/api/api.rb +3 -0
- data/lib/openc3/api/authorized_api.rb +3 -0
- data/lib/openc3/api/cmd_api.rb +6 -3
- data/lib/openc3/api/config_api.rb +3 -0
- data/lib/openc3/api/interface_api.rb +6 -2
- data/lib/openc3/api/limits_api.rb +54 -61
- data/lib/openc3/api/router_api.rb +6 -3
- data/lib/openc3/api/settings_api.rb +3 -0
- data/lib/openc3/api/target_api.rb +3 -0
- data/lib/openc3/api/tlm_api.rb +27 -32
- data/lib/openc3/bridge/bridge.rb +3 -0
- data/lib/openc3/bridge/bridge_config.rb +3 -0
- data/lib/openc3/bridge/bridge_interface_thread.rb +3 -0
- data/lib/openc3/bridge/bridge_router_thread.rb +3 -0
- data/lib/openc3/ccsds/ccsds_packet.rb +3 -0
- data/lib/openc3/ccsds/ccsds_parser.rb +3 -0
- data/lib/openc3/config/config_parser.rb +3 -0
- data/lib/openc3/config/meta_config_parser.rb +3 -0
- data/lib/openc3/conversions/conversion.rb +3 -0
- data/lib/openc3/conversions/generic_conversion.rb +3 -0
- data/lib/openc3/conversions/packet_time_formatted_conversion.rb +3 -0
- data/lib/openc3/conversions/packet_time_seconds_conversion.rb +3 -0
- data/lib/openc3/conversions/polynomial_conversion.rb +3 -0
- data/lib/openc3/conversions/processor_conversion.rb +3 -0
- data/lib/openc3/conversions/received_count_conversion.rb +3 -0
- data/lib/openc3/conversions/received_time_formatted_conversion.rb +3 -0
- data/lib/openc3/conversions/received_time_seconds_conversion.rb +3 -0
- data/lib/openc3/conversions/segmented_polynomial_conversion.rb +3 -0
- data/lib/openc3/conversions/unix_time_conversion.rb +3 -0
- data/lib/openc3/conversions/unix_time_formatted_conversion.rb +3 -0
- data/lib/openc3/conversions/unix_time_seconds_conversion.rb +3 -0
- data/lib/openc3/conversions.rb +3 -0
- data/lib/openc3/core_ext/array.rb +3 -0
- data/lib/openc3/core_ext/binding.rb +3 -0
- data/lib/openc3/core_ext/class.rb +3 -0
- data/lib/openc3/core_ext/exception.rb +3 -0
- data/lib/openc3/core_ext/file.rb +3 -0
- data/lib/openc3/core_ext/hash.rb +3 -0
- data/lib/openc3/core_ext/io.rb +3 -0
- data/lib/openc3/core_ext/kernel.rb +3 -0
- data/lib/openc3/core_ext/math.rb +3 -0
- data/lib/openc3/core_ext/matrix.rb +3 -0
- data/lib/openc3/core_ext/objectspace.rb +3 -0
- data/lib/openc3/core_ext/openc3_io.rb +3 -0
- data/lib/openc3/core_ext/range.rb +3 -0
- data/lib/openc3/core_ext/socket.rb +3 -0
- data/lib/openc3/core_ext/string.rb +3 -0
- data/lib/openc3/core_ext/stringio.rb +3 -0
- data/lib/openc3/core_ext/tempfile.rb +3 -0
- data/lib/openc3/core_ext/time.rb +3 -0
- data/lib/openc3/core_ext.rb +3 -0
- data/lib/openc3/interfaces/interface.rb +3 -0
- data/lib/openc3/interfaces/linc_interface.rb +3 -0
- data/lib/openc3/interfaces/protocols/burst_protocol.rb +3 -0
- data/lib/openc3/interfaces/protocols/crc_protocol.rb +3 -0
- data/lib/openc3/interfaces/protocols/fixed_protocol.rb +3 -0
- data/lib/openc3/interfaces/protocols/ignore_packet_protocol.rb +3 -0
- data/lib/openc3/interfaces/protocols/length_protocol.rb +3 -0
- data/lib/openc3/interfaces/protocols/override_protocol.rb +3 -0
- data/lib/openc3/interfaces/protocols/preidentified_protocol.rb +3 -0
- data/lib/openc3/interfaces/protocols/protocol.rb +3 -0
- data/lib/openc3/interfaces/protocols/template_protocol.rb +3 -0
- data/lib/openc3/interfaces/protocols/terminated_protocol.rb +3 -0
- data/lib/openc3/interfaces/serial_interface.rb +3 -0
- data/lib/openc3/interfaces/simulated_target_interface.rb +3 -0
- data/lib/openc3/interfaces/stream_interface.rb +3 -0
- data/lib/openc3/interfaces/tcpip_client_interface.rb +3 -0
- data/lib/openc3/interfaces/tcpip_server_interface.rb +3 -0
- data/lib/openc3/interfaces/udp_interface.rb +3 -0
- data/lib/openc3/interfaces.rb +3 -0
- data/lib/openc3/io/buffered_file.rb +3 -0
- data/lib/openc3/io/io_multiplexer.rb +8 -0
- data/lib/openc3/io/json_api_object.rb +5 -2
- data/lib/openc3/io/json_drb.rb +3 -0
- data/lib/openc3/io/json_drb_object.rb +5 -2
- data/lib/openc3/io/json_drb_rack.rb +3 -0
- data/lib/openc3/io/json_rpc.rb +8 -3
- data/lib/openc3/io/openc3_snmp.rb +3 -0
- data/lib/openc3/io/posix_serial_driver.rb +3 -0
- data/lib/openc3/io/raw_logger.rb +3 -0
- data/lib/openc3/io/raw_logger_pair.rb +3 -0
- data/lib/openc3/io/serial_driver.rb +3 -0
- data/lib/openc3/io/stderr.rb +3 -0
- data/lib/openc3/io/stdout.rb +3 -0
- data/lib/openc3/io/udp_sockets.rb +3 -0
- data/lib/openc3/io/win32_serial_driver.rb +3 -0
- data/lib/openc3/logs/buffered_packet_log_reader.rb +65 -0
- data/lib/openc3/logs/buffered_packet_log_writer.rb +120 -0
- data/lib/openc3/logs/log_writer.rb +95 -40
- data/lib/openc3/logs/packet_log_constants.rb +9 -0
- data/lib/openc3/logs/packet_log_reader.rb +34 -3
- data/lib/openc3/logs/packet_log_writer.rb +85 -18
- data/lib/openc3/logs/text_log_writer.rb +9 -5
- data/lib/openc3/logs.rb +8 -2
- data/lib/openc3/microservices/cleanup_microservice.rb +18 -18
- data/lib/openc3/microservices/decom_microservice.rb +30 -24
- data/lib/openc3/microservices/interface_microservice.rb +136 -91
- data/lib/openc3/microservices/log_microservice.rb +35 -13
- data/lib/openc3/microservices/microservice.rb +16 -14
- data/lib/openc3/microservices/plugin_microservice.rb +3 -1
- data/lib/openc3/microservices/reaction_microservice.rb +4 -1
- data/lib/openc3/microservices/reducer_microservice.rb +332 -149
- data/lib/openc3/microservices/router_microservice.rb +3 -0
- data/lib/openc3/microservices/text_log_microservice.rb +22 -7
- data/lib/openc3/microservices/timeline_microservice.rb +4 -1
- data/lib/openc3/microservices/trigger_group_microservice.rb +3 -0
- data/lib/openc3/models/activity_model.rb +3 -0
- data/lib/openc3/models/auth_model.rb +3 -0
- data/lib/openc3/models/cvt_model.rb +14 -5
- data/lib/openc3/models/environment_model.rb +3 -0
- data/lib/openc3/models/gem_model.rb +30 -51
- data/lib/openc3/models/info_model.rb +3 -0
- data/lib/openc3/models/interface_model.rb +3 -0
- data/lib/openc3/models/interface_status_model.rb +4 -1
- data/lib/openc3/models/metadata_model.rb +3 -0
- data/lib/openc3/models/metric_model.rb +3 -0
- data/lib/openc3/models/microservice_model.rb +9 -6
- data/lib/openc3/models/microservice_status_model.rb +4 -1
- data/lib/openc3/models/model.rb +3 -0
- data/lib/openc3/models/note_model.rb +3 -0
- data/lib/openc3/models/notification_model.rb +3 -0
- data/lib/openc3/models/ping_model.rb +3 -0
- data/lib/openc3/models/plugin_model.rb +20 -14
- data/lib/openc3/models/process_status_model.rb +4 -1
- data/lib/openc3/models/reaction_model.rb +3 -0
- data/lib/openc3/models/reducer_model.rb +31 -24
- data/lib/openc3/models/router_model.rb +3 -0
- data/lib/openc3/models/router_status_model.rb +3 -0
- data/lib/openc3/models/scope_model.rb +3 -4
- data/lib/openc3/models/settings_model.rb +3 -0
- data/lib/openc3/models/sorted_model.rb +3 -0
- data/lib/openc3/models/target_model.rb +61 -94
- data/lib/openc3/models/timeline_model.rb +4 -1
- data/lib/openc3/models/tool_config_model.rb +3 -0
- data/lib/openc3/models/tool_model.rb +11 -9
- data/lib/openc3/models/trigger_group_model.rb +3 -0
- data/lib/openc3/models/trigger_model.rb +3 -0
- data/lib/openc3/models/widget_model.rb +18 -11
- data/lib/openc3/operators/microservice_operator.rb +3 -0
- data/lib/openc3/operators/operator.rb +105 -34
- data/lib/openc3/packets/commands.rb +3 -0
- data/lib/openc3/packets/json_packet.rb +87 -14
- data/lib/openc3/packets/limits.rb +4 -1
- data/lib/openc3/packets/limits_response.rb +3 -0
- data/lib/openc3/packets/packet.rb +5 -1
- data/lib/openc3/packets/packet_config.rb +3 -0
- data/lib/openc3/packets/packet_item.rb +9 -3
- data/lib/openc3/packets/packet_item_limits.rb +3 -0
- data/lib/openc3/packets/parsers/format_string_parser.rb +3 -0
- data/lib/openc3/packets/parsers/limits_parser.rb +3 -0
- data/lib/openc3/packets/parsers/limits_response_parser.rb +3 -0
- data/lib/openc3/packets/parsers/packet_item_parser.rb +3 -0
- data/lib/openc3/packets/parsers/packet_parser.rb +3 -0
- data/lib/openc3/packets/parsers/processor_parser.rb +3 -0
- data/lib/openc3/packets/parsers/state_parser.rb +3 -0
- data/lib/openc3/packets/parsers/xtce_converter.rb +3 -0
- data/lib/openc3/packets/parsers/xtce_parser.rb +3 -0
- data/lib/openc3/packets/structure.rb +3 -0
- data/lib/openc3/packets/structure_item.rb +3 -0
- data/lib/openc3/packets/telemetry.rb +3 -0
- data/lib/openc3/processors/processor.rb +3 -0
- data/lib/openc3/processors/statistics_processor.rb +3 -0
- data/lib/openc3/processors/watermark_processor.rb +3 -0
- data/lib/openc3/processors.rb +3 -0
- data/lib/openc3/script/api_shared.rb +35 -6
- data/lib/openc3/script/calendar.rb +3 -0
- data/lib/openc3/script/commands.rb +3 -0
- data/lib/openc3/script/exceptions.rb +3 -0
- data/lib/openc3/script/extract.rb +3 -0
- data/lib/openc3/script/limits.rb +3 -24
- data/lib/openc3/script/script.rb +11 -7
- data/lib/openc3/script/script_runner.rb +3 -0
- data/lib/openc3/script/storage.rb +33 -16
- data/lib/openc3/script/suite.rb +3 -0
- data/lib/openc3/script/suite_results.rb +3 -0
- data/lib/openc3/script/suite_runner.rb +3 -0
- data/lib/openc3/script/telemetry.rb +43 -0
- data/lib/openc3/script.rb +3 -0
- data/lib/openc3/streams/serial_stream.rb +3 -0
- data/lib/openc3/streams/stream.rb +3 -0
- data/lib/openc3/streams/tcpip_client_stream.rb +3 -0
- data/lib/openc3/streams/tcpip_socket_stream.rb +3 -0
- data/lib/openc3/system/system.rb +23 -10
- data/lib/openc3/system/system_config.rb +3 -0
- data/lib/openc3/system/target.rb +3 -0
- data/lib/openc3/system.rb +3 -0
- data/lib/openc3/tools/cmd_tlm_server/api.rb +3 -0
- data/lib/openc3/tools/cmd_tlm_server/cmd_tlm_server_config.rb +3 -0
- data/lib/openc3/tools/cmd_tlm_server/interface_thread.rb +3 -0
- data/lib/openc3/tools/table_manager/table.rb +3 -0
- data/lib/openc3/tools/table_manager/table_config.rb +3 -0
- data/lib/openc3/tools/table_manager/table_item.rb +3 -0
- data/lib/openc3/tools/table_manager/table_item_parser.rb +3 -0
- data/lib/openc3/tools/table_manager/table_manager_core.rb +3 -0
- data/lib/openc3/tools/table_manager/table_parser.rb +3 -0
- data/lib/openc3/tools/test_runner/test.rb +3 -0
- data/lib/openc3/top_level.rb +3 -0
- data/lib/openc3/topics/autonomic_topic.rb +3 -0
- data/lib/openc3/topics/calendar_topic.rb +3 -0
- data/lib/openc3/topics/command_decom_topic.rb +4 -1
- data/lib/openc3/topics/command_topic.rb +6 -1
- data/lib/openc3/topics/config_topic.rb +3 -0
- data/lib/openc3/topics/interface_topic.rb +9 -2
- data/lib/openc3/topics/limits_event_topic.rb +144 -10
- data/lib/openc3/topics/notifications_topic.rb +3 -0
- data/lib/openc3/topics/router_topic.rb +10 -3
- data/lib/openc3/topics/telemetry_decom_topic.rb +26 -20
- data/lib/openc3/topics/telemetry_reduced_topics.rb +92 -0
- data/lib/openc3/topics/telemetry_topic.rb +5 -2
- data/lib/openc3/topics/timeline_topic.rb +3 -0
- data/lib/openc3/topics/topic.rb +3 -0
- data/lib/openc3/utilities/authentication.rb +3 -0
- data/lib/openc3/utilities/authorization.rb +3 -0
- data/lib/openc3/utilities/aws_bucket.rb +199 -0
- data/lib/openc3/utilities/bucket.rb +82 -0
- data/lib/openc3/utilities/bucket_file_cache.rb +264 -0
- data/lib/openc3/utilities/bucket_utilities.rb +109 -0
- data/lib/openc3/utilities/crc.rb +3 -0
- data/lib/openc3/utilities/csv.rb +3 -0
- data/lib/openc3/utilities/local_bucket.rb +28 -0
- data/lib/openc3/utilities/local_mode.rb +47 -61
- data/lib/openc3/utilities/logger.rb +7 -1
- data/lib/openc3/utilities/message_log.rb +7 -4
- data/lib/openc3/utilities/metric.rb +4 -1
- data/lib/openc3/utilities/open_telemetry.rb +96 -0
- data/lib/openc3/utilities/process_manager.rb +3 -0
- data/lib/openc3/utilities/quaternion.rb +3 -0
- data/lib/openc3/utilities/ruby_lex_utils.rb +3 -0
- data/lib/openc3/utilities/s3_autoload.rb +3 -3
- data/lib/openc3/utilities/simulated_target.rb +3 -0
- data/lib/openc3/utilities/sleeper.rb +3 -0
- data/lib/openc3/utilities/store.rb +3 -0
- data/lib/openc3/utilities/store_autoload.rb +30 -23
- data/lib/openc3/utilities/target_file.rb +70 -83
- data/lib/openc3/utilities/zip.rb +3 -0
- data/lib/openc3/utilities.rb +3 -0
- data/lib/openc3/version.rb +6 -6
- data/lib/openc3/win32/excel.rb +3 -0
- data/lib/openc3/win32/win32.rb +3 -0
- data/lib/openc3/win32/win32_main.rb +3 -0
- data/lib/openc3.rb +3 -0
- data/tasks/gemfile_stats.rake +3 -0
- data/tasks/spec.rake +3 -0
- data/templates/plugin-template/plugin.gemspec +1 -1
- metadata +112 -6
- data/lib/openc3/utilities/s3.rb +0 -220
- data/lib/openc3/utilities/s3_file_cache.rb +0 -274
@@ -16,6 +16,9 @@
|
|
16
16
|
# Modified by OpenC3, Inc.
|
17
17
|
# All changes Copyright 2022, OpenC3, Inc.
|
18
18
|
# All Rights Reserved
|
19
|
+
#
|
20
|
+
# This file may also be used under the terms of a commercial license
|
21
|
+
# if purchased from OpenC3, Inc.
|
19
22
|
|
20
23
|
require 'openc3/models/interface_model'
|
21
24
|
require 'openc3/models/interface_status_model'
|
@@ -57,9 +60,10 @@ module OpenC3
|
|
57
60
|
# Connects an interface and starts its telemetry gathering thread
|
58
61
|
#
|
59
62
|
# @param interface_name [String] The name of the interface
|
60
|
-
|
63
|
+
# @param interface_params [Array] Optional parameters to pass to the interface
|
64
|
+
def connect_interface(interface_name, *interface_params, scope: $openc3_scope, token: $openc3_token)
|
61
65
|
authorize(permission: 'system_set', interface_name: interface_name, scope: scope, token: token)
|
62
|
-
InterfaceTopic.connect_interface(interface_name, scope: scope)
|
66
|
+
InterfaceTopic.connect_interface(interface_name, *interface_params, scope: scope)
|
63
67
|
end
|
64
68
|
|
65
69
|
# Disconnects from an interface and kills its telemetry gathering thread
|
@@ -16,6 +16,9 @@
|
|
16
16
|
# Modified by OpenC3, Inc.
|
17
17
|
# All changes Copyright 2022, OpenC3, Inc.
|
18
18
|
# All Rights Reserved
|
19
|
+
#
|
20
|
+
# This file may also be used under the terms of a commercial license
|
21
|
+
# if purchased from OpenC3, Inc.
|
19
22
|
|
20
23
|
require 'openc3/api/target_api'
|
21
24
|
|
@@ -23,7 +26,6 @@ module OpenC3
|
|
23
26
|
module Api
|
24
27
|
WHITELIST ||= []
|
25
28
|
WHITELIST.concat([
|
26
|
-
'get_stale',
|
27
29
|
'get_out_of_limits',
|
28
30
|
'get_overall_limits_state',
|
29
31
|
'limits_enabled?',
|
@@ -40,41 +42,6 @@ module OpenC3
|
|
40
42
|
'get_limits_events',
|
41
43
|
])
|
42
44
|
|
43
|
-
# Get the list of stale packets for a specific target or pass nil to list
|
44
|
-
# all stale packets
|
45
|
-
#
|
46
|
-
# @param with_limits_only [Boolean] Return only the stale packets
|
47
|
-
# that have limits items and thus affect the overall limits
|
48
|
-
# state of the system
|
49
|
-
# @param target_name [String] The target to find stale packets for or nil to list
|
50
|
-
# all stale packets in the system
|
51
|
-
# @param staleness_sec [Integer] The amount of time to pass before a packet is marked stale
|
52
|
-
# @return [Array<Array<String, String>>] Array of arrays listing the target
|
53
|
-
# name and packet name
|
54
|
-
def get_stale(with_limits_only: false, target_name: nil, staleness_sec: 30, scope: $openc3_scope, token: $openc3_token)
|
55
|
-
authorize(permission: 'tlm', target_name: target_name, scope: scope, token: token)
|
56
|
-
stale_time = Time.now.sys.to_nsec_from_epoch - (staleness_sec * Time::NSEC_PER_SECOND)
|
57
|
-
stale = []
|
58
|
-
targets = []
|
59
|
-
if target_name
|
60
|
-
targets = [target_name]
|
61
|
-
else
|
62
|
-
targets = get_target_list()
|
63
|
-
end
|
64
|
-
targets.each do |target_name|
|
65
|
-
get_all_telemetry(target_name, scope: scope).each do |packet|
|
66
|
-
topic = "#{scope}__TELEMETRY__{#{target_name}}__#{packet['packet_name']}"
|
67
|
-
_, msg_hash = Topic.get_newest_message(topic)
|
68
|
-
unless msg_hash && msg_hash['time'].to_i > stale_time
|
69
|
-
next if with_limits_only && packet['items'].find { |item| item['limits'] }.nil?
|
70
|
-
|
71
|
-
stale << [packet['target_name'], packet['packet_name']]
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
75
|
-
stale
|
76
|
-
end
|
77
|
-
|
78
45
|
# Return an array of arrays indicating all items in the packet that are out of limits
|
79
46
|
# [[target name, packet name, item name, item limits state], ...]
|
80
47
|
#
|
@@ -95,7 +62,6 @@ module OpenC3
|
|
95
62
|
# We only need to check out of limits items so call get_out_of_limits() which authorizes
|
96
63
|
out_of_limits = get_out_of_limits(scope: scope, token: token)
|
97
64
|
overall = 'GREEN'
|
98
|
-
limits_packet_stale = false # TODO: Calculate stale
|
99
65
|
|
100
66
|
# Build easily matchable ignore list
|
101
67
|
if ignored_items
|
@@ -113,22 +79,21 @@ module OpenC3
|
|
113
79
|
# allows us to detect matches against a TGT__PKT__ with no item defined.
|
114
80
|
next if ignored_items.detect { |item| "#{target_name}__#{packet_name}__#{item_name}" =~ /^#{item}/ }
|
115
81
|
|
82
|
+
if limits_state == 'RED' || limits_state == 'RED_HIGH' || limits_state == 'RED_LOW'
|
83
|
+
overall = limits_state
|
84
|
+
break # Red is as high as we go so no need to look for more
|
85
|
+
end
|
86
|
+
|
116
87
|
case overall
|
117
88
|
# If our overall state is currently blue or green we can go to any state
|
118
89
|
when 'BLUE', 'GREEN', 'GREEN_HIGH', 'GREEN_LOW'
|
119
90
|
overall = limits_state
|
120
|
-
#
|
121
|
-
when 'YELLOW', 'YELLOW_HIGH', 'YELLOW_LOW'
|
122
|
-
if limits_state == 'RED' || limits_state == 'RED_HIGH' || limits_state == 'RED_LOW'
|
123
|
-
overall = limits_state
|
124
|
-
break # Red is as high as we go so no need to look for more
|
125
|
-
end
|
91
|
+
# else YELLOW - Stay at YELLOW until we find a red
|
126
92
|
end
|
127
93
|
end
|
128
94
|
overall = 'GREEN' if overall == 'GREEN_HIGH' || overall == 'GREEN_LOW' || overall == 'BLUE'
|
129
95
|
overall = 'YELLOW' if overall == 'YELLOW_HIGH' || overall == 'YELLOW_LOW'
|
130
96
|
overall = 'RED' if overall == 'RED_HIGH' || overall == 'RED_LOW'
|
131
|
-
overall = 'STALE' if (overall == 'GREEN' || overall == 'BLUE') && limits_packet_stale
|
132
97
|
return overall
|
133
98
|
end
|
134
99
|
|
@@ -172,6 +137,13 @@ module OpenC3
|
|
172
137
|
raise "Item '#{target_name} #{packet_name} #{item_name}' does not exist" unless found_item
|
173
138
|
|
174
139
|
TargetModel.set_packet(target_name, packet_name, packet, scope: scope)
|
140
|
+
|
141
|
+
message = "Enabling Limits For '#{target_name} #{packet_name} #{item_name}'"
|
142
|
+
Logger.info(message, scope: scope)
|
143
|
+
|
144
|
+
event = { type: :LIMITS_ENABLE_STATE, target_name: target_name, packet_name: packet_name,
|
145
|
+
item_name: item_name, enabled: true, time_nsec: Time.now.to_nsec_from_epoch, message: message }
|
146
|
+
LimitsEventTopic.write(event, scope: scope)
|
175
147
|
end
|
176
148
|
|
177
149
|
# Disable limit checking for a telemetry item
|
@@ -198,6 +170,13 @@ module OpenC3
|
|
198
170
|
raise "Item '#{target_name} #{packet_name} #{item_name}' does not exist" unless found_item
|
199
171
|
|
200
172
|
TargetModel.set_packet(target_name, packet_name, packet, scope: scope)
|
173
|
+
|
174
|
+
message = "Disabling Limits For '#{target_name} #{packet_name} #{item_name}'"
|
175
|
+
Logger.info(message, scope: scope)
|
176
|
+
|
177
|
+
event = { type: :LIMITS_ENABLE_STATE, target_name: target_name, packet_name: packet_name,
|
178
|
+
item_name: item_name, enabled: false, time_nsec: Time.now.to_nsec_from_epoch, message: message }
|
179
|
+
LimitsEventTopic.write(event, scope: scope)
|
201
180
|
end
|
202
181
|
|
203
182
|
# Get a Hash of all the limits sets defined for an item. Hash keys are the limit
|
@@ -225,7 +204,7 @@ module OpenC3
|
|
225
204
|
# Change the limits settings for a given item. By default, a new limits set called 'CUSTOM'
|
226
205
|
# is created to avoid overriding existing limits.
|
227
206
|
def set_limits(target_name, packet_name, item_name, red_low, yellow_low, yellow_high, red_high,
|
228
|
-
green_low = nil, green_high = nil, limits_set =
|
207
|
+
green_low = nil, green_high = nil, limits_set = 'CUSTOM', persistence = nil, enabled = true,
|
229
208
|
scope: $openc3_scope, token: $openc3_token)
|
230
209
|
authorize(permission: 'tlm_set', target_name: target_name, packet_name: packet_name, scope: scope, token: token)
|
231
210
|
if (red_low > yellow_low) || (yellow_low >= yellow_high) || (yellow_high > red_high)
|
@@ -238,22 +217,26 @@ module OpenC3
|
|
238
217
|
found_item = nil
|
239
218
|
packet['items'].each do |item|
|
240
219
|
if item['name'] == item_name
|
241
|
-
item['limits']
|
242
|
-
|
243
|
-
|
220
|
+
if item['limits']
|
221
|
+
item['limits']['persistence_setting'] = persistence if persistence
|
222
|
+
if enabled
|
223
|
+
item['limits']['enabled'] = true
|
224
|
+
else
|
225
|
+
item['limits'].delete('enabled')
|
226
|
+
end
|
227
|
+
limits = {}
|
228
|
+
limits['red_low'] = red_low
|
229
|
+
limits['yellow_low'] = yellow_low
|
230
|
+
limits['yellow_high'] = yellow_high
|
231
|
+
limits['red_high'] = red_high
|
232
|
+
limits['green_low'] = green_low if green_low && green_high
|
233
|
+
limits['green_high'] = green_high if green_low && green_high
|
234
|
+
item['limits'][limits_set] = limits
|
235
|
+
found_item = item
|
236
|
+
break
|
244
237
|
else
|
245
|
-
item
|
238
|
+
raise "Cannot set_limits on item without any limits"
|
246
239
|
end
|
247
|
-
limits = {}
|
248
|
-
limits['red_low'] = red_low
|
249
|
-
limits['yellow_low'] = yellow_low
|
250
|
-
limits['yellow_high'] = yellow_high
|
251
|
-
limits['red_high'] = red_high
|
252
|
-
limits['green_low'] = green_low if green_low && green_high
|
253
|
-
limits['green_high'] = green_high if green_low && green_high
|
254
|
-
item['limits'][limits_set] = limits
|
255
|
-
found_item = item
|
256
|
-
break
|
257
240
|
end
|
258
241
|
end
|
259
242
|
raise "Item '#{target_name} #{packet_name} #{item_name}' does not exist" unless found_item
|
@@ -337,13 +320,14 @@ module OpenC3
|
|
337
320
|
# PRIVATE implementation details
|
338
321
|
###########################################################################
|
339
322
|
|
323
|
+
# Enables or disables a limits group
|
340
324
|
def _limits_group(group_name, action:, scope:, token:)
|
341
325
|
authorize(permission: 'tlm_set', scope: scope, token: token)
|
342
326
|
group_name.upcase!
|
343
|
-
group = get_limits_groups()[group_name]
|
327
|
+
group = get_limits_groups(scope: scope, token: token)[group_name]
|
344
328
|
raise "LIMITS_GROUP #{group_name} undefined. Ensure your telemetry definition contains the line: LIMITS_GROUP #{group_name}" unless group
|
345
329
|
|
346
|
-
Logger.info("
|
330
|
+
Logger.info("#{action.to_s.capitalize} Limits Group: #{group_name}", scope: scope)
|
347
331
|
last_target_name = nil
|
348
332
|
last_packet_name = nil
|
349
333
|
packet = nil
|
@@ -357,10 +341,19 @@ module OpenC3
|
|
357
341
|
packet['items'].each do |item|
|
358
342
|
if item['name'] == item_name
|
359
343
|
if action == :enable
|
344
|
+
enabled = true
|
360
345
|
item['limits']['enabled'] = true
|
346
|
+
message = "Enabling Limits For '#{target_name} #{packet_name} #{item_name}'"
|
361
347
|
elsif action == :disable
|
348
|
+
enabled = false
|
362
349
|
item['limits'].delete('enabled')
|
350
|
+
message = "Disabling Limits For '#{target_name} #{packet_name} #{item_name}'"
|
363
351
|
end
|
352
|
+
Logger.info(message, scope: scope)
|
353
|
+
|
354
|
+
event = { type: :LIMITS_ENABLE_STATE, target_name: target_name, packet_name: packet_name,
|
355
|
+
item_name: item_name, enabled: enabled, time_nsec: Time.now.to_nsec_from_epoch, message: message }
|
356
|
+
LimitsEventTopic.write(event, scope: scope)
|
364
357
|
break
|
365
358
|
end
|
366
359
|
end
|
@@ -16,6 +16,9 @@
|
|
16
16
|
# Modified by OpenC3, Inc.
|
17
17
|
# All changes Copyright 2022, OpenC3, Inc.
|
18
18
|
# All Rights Reserved
|
19
|
+
#
|
20
|
+
# This file may also be used under the terms of a commercial license
|
21
|
+
# if purchased from OpenC3, Inc.
|
19
22
|
|
20
23
|
require 'openc3/models/router_model'
|
21
24
|
require 'openc3/models/router_status_model'
|
@@ -55,10 +58,10 @@ module OpenC3
|
|
55
58
|
# Connects a router and starts its command gathering thread
|
56
59
|
#
|
57
60
|
# @param router_name [String] Name of router
|
58
|
-
# @param
|
59
|
-
def connect_router(router_name, *
|
61
|
+
# @param router_params [Array] Optional parameters to pass to the router
|
62
|
+
def connect_router(router_name, *router_params, scope: $openc3_scope, token: $openc3_token)
|
60
63
|
authorize(permission: 'system_set', router_name: router_name, scope: scope, token: token)
|
61
|
-
RouterTopic.connect_router(router_name, scope: scope)
|
64
|
+
RouterTopic.connect_router(router_name, *router_params, scope: scope)
|
62
65
|
end
|
63
66
|
|
64
67
|
# Disconnects a router and kills its command gathering thread
|
@@ -16,6 +16,9 @@
|
|
16
16
|
# Modified by OpenC3, Inc.
|
17
17
|
# All changes Copyright 2022, OpenC3, Inc.
|
18
18
|
# All Rights Reserved
|
19
|
+
#
|
20
|
+
# This file may also be used under the terms of a commercial license
|
21
|
+
# if purchased from OpenC3, Inc.
|
19
22
|
|
20
23
|
require 'openc3/models/target_model'
|
21
24
|
|
data/lib/openc3/api/tlm_api.rb
CHANGED
@@ -16,12 +16,14 @@
|
|
16
16
|
# Modified by OpenC3, Inc.
|
17
17
|
# All changes Copyright 2022, OpenC3, Inc.
|
18
18
|
# All Rights Reserved
|
19
|
+
#
|
20
|
+
# This file may also be used under the terms of a commercial license
|
21
|
+
# if purchased from OpenC3, Inc.
|
19
22
|
|
20
23
|
require 'openc3/models/target_model'
|
21
24
|
require 'openc3/models/cvt_model'
|
22
25
|
require 'openc3/packets/packet'
|
23
26
|
require 'openc3/topics/telemetry_topic'
|
24
|
-
require 'openc3/utilities/s3'
|
25
27
|
|
26
28
|
module OpenC3
|
27
29
|
module Api
|
@@ -48,7 +50,6 @@ module OpenC3
|
|
48
50
|
'get_tlm_cnt',
|
49
51
|
'get_tlm_cnts',
|
50
52
|
'get_packet_derived_items',
|
51
|
-
'get_oldest_logfile',
|
52
53
|
])
|
53
54
|
|
54
55
|
# Request a telemetry item from a packet.
|
@@ -136,9 +137,14 @@ module OpenC3
|
|
136
137
|
packet.write(name.to_s, value, type)
|
137
138
|
end
|
138
139
|
end
|
140
|
+
topic = "#{scope}__TELEMETRY__{#{target_name}}__#{packet_name}"
|
141
|
+
msg_id, msg_hash = Topic.get_newest_message(topic)
|
142
|
+
if msg_id
|
143
|
+
packet.received_count = msg_hash['received_count'].to_i + 1
|
144
|
+
else
|
145
|
+
packet.received_count = 1
|
146
|
+
end
|
139
147
|
packet.received_time = Time.now.sys
|
140
|
-
# TODO: New packet so received_count is not correct
|
141
|
-
packet.received_count += 1
|
142
148
|
TelemetryTopic.write_packet(packet, scope: scope)
|
143
149
|
end
|
144
150
|
|
@@ -202,16 +208,19 @@ module OpenC3
|
|
202
208
|
#
|
203
209
|
# @param target_name [String] Name of the target
|
204
210
|
# @param packet_name [String] Name of the packet
|
211
|
+
# @param stale_time [Integer] Time in seconds from Time.now that packet will be marked stale
|
205
212
|
# @param type [Symbol] Types returned, :RAW, :CONVERTED (default), :FORMATTED, or :WITH_UNITS
|
206
|
-
# @return
|
207
|
-
|
213
|
+
# @return [Array<String, Object, Symbol|nil>] Returns an Array consisting
|
214
|
+
# of [item name, item value, item limits state] where the item limits
|
215
|
+
# state can be one of {OpenC3::Limits::LIMITS_STATES}
|
216
|
+
def get_tlm_packet(target_name, packet_name, stale_time: 30, type: :CONVERTED, scope: $openc3_scope, token: $openc3_token)
|
208
217
|
authorize(permission: 'tlm', target_name: target_name, packet_name: packet_name, scope: scope, token: token)
|
209
218
|
packet = TargetModel.packet(target_name, packet_name, scope: scope)
|
210
219
|
t = _validate_tlm_type(type)
|
211
220
|
raise ArgumentError, "Unknown type '#{type}' for #{target_name} #{packet_name}" if t.nil?
|
212
221
|
items = packet['items'].map { | item | item['name'] }
|
213
222
|
cvt_items = items.map { | item | "#{target_name}__#{packet_name}__#{item}__#{type}" }
|
214
|
-
current_values = CvtModel.get_tlm_values(cvt_items, scope: scope)
|
223
|
+
current_values = CvtModel.get_tlm_values(cvt_items, stale_time: stale_time, scope: scope)
|
215
224
|
items.zip(current_values).map { | item , values | [item, values[0], values[1]]}
|
216
225
|
end
|
217
226
|
|
@@ -221,10 +230,11 @@ module OpenC3
|
|
221
230
|
#
|
222
231
|
# @since 5.0.0
|
223
232
|
# @param items [Array<String>] Array of items consisting of 'tgt__pkt__item__type'
|
233
|
+
# @param stale_time [Integer] Time in seconds from Time.now that data will be marked stale
|
224
234
|
# @return [Array<Object, Symbol>]
|
225
235
|
# Array consisting of the item value and limits state
|
226
236
|
# given as symbols such as :RED, :YELLOW, :STALE
|
227
|
-
def get_tlm_values(items, scope: $openc3_scope, token: $openc3_token)
|
237
|
+
def get_tlm_values(items, stale_time: 30, scope: $openc3_scope, token: $openc3_token)
|
228
238
|
if !items.is_a?(Array) || !items[0].is_a?(String)
|
229
239
|
raise ArgumentError, "items must be array of strings: ['TGT__PKT__ITEM__TYPE', ...]"
|
230
240
|
end
|
@@ -237,7 +247,7 @@ module OpenC3
|
|
237
247
|
end
|
238
248
|
authorize(permission: 'tlm', target_name: target_name, packet_name: packet_name, scope: scope, token: token)
|
239
249
|
end
|
240
|
-
CvtModel.get_tlm_values(items, scope: scope)
|
250
|
+
CvtModel.get_tlm_values(items, stale_time: stale_time, scope: scope)
|
241
251
|
end
|
242
252
|
|
243
253
|
# Returns an array of all the telemetry packet hashes
|
@@ -310,17 +320,17 @@ module OpenC3
|
|
310
320
|
|
311
321
|
# Get packets based on ID returned from subscribe_packet.
|
312
322
|
# @param id [String] ID returned from subscribe_packets or last call to get_packets
|
313
|
-
# @param block [Integer]
|
323
|
+
# @param block [Integer] Unused - Blocking must be implemented at the client
|
314
324
|
# @param count [Integer] Maximum number of packets to return from EACH packet stream
|
315
325
|
# @return [Array<String, Array<Hash>] Array of the ID and array of all packets found
|
316
326
|
def get_packets(id, block: nil, count: 1000, scope: $openc3_scope, token: $openc3_token)
|
317
327
|
authorize(permission: 'tlm', scope: scope, token: token)
|
318
328
|
# Split the list of topic, ID values and turn it into a hash for easy updates
|
319
329
|
lookup = Hash[*id.split(SUBSCRIPTION_DELIMITER)]
|
320
|
-
xread = Topic.read_topics(lookup.keys, lookup.values,
|
321
|
-
# Return the original ID and
|
322
|
-
return [id, nil] if xread.empty?
|
330
|
+
xread = Topic.read_topics(lookup.keys, lookup.values, nil, count) # Always don't block
|
331
|
+
# Return the original ID and and empty array if we didn't get anything
|
323
332
|
packets = []
|
333
|
+
return [id, packets] if xread.empty?
|
324
334
|
xread.each do |topic, data|
|
325
335
|
data.each do |id, msg_hash|
|
326
336
|
lookup[topic] = id # save the new ID
|
@@ -329,7 +339,7 @@ module OpenC3
|
|
329
339
|
packets << msg_hash.merge(json_hash)
|
330
340
|
end
|
331
341
|
end
|
332
|
-
return
|
342
|
+
return lookup.to_a.join(SUBSCRIPTION_DELIMITER), packets
|
333
343
|
end
|
334
344
|
|
335
345
|
# Get the receive count for a telemetry packet
|
@@ -367,23 +377,6 @@ module OpenC3
|
|
367
377
|
return packet['items'].select { |item| item['data_type'] == 'DERIVED' }.map { |item| item['name'] }
|
368
378
|
end
|
369
379
|
|
370
|
-
def get_oldest_logfile(scope: $openc3_scope, token: $openc3_token)
|
371
|
-
authorize(permission: 'tlm', scope: scope, token: token)
|
372
|
-
_, list = S3Utilities.get_total_size_and_oldest_list('logs', "#{scope}/decom_logs", 1_000_000_000)
|
373
|
-
# The list is a S3 structure containing the file paths
|
374
|
-
# Request the path by calling the key method. Returns something like this:
|
375
|
-
# DEFAULT/decom_logs/tlm/INST2/MECH/20220104/20220104165449021942700__20220104170449148642700__DEFAULT__INST2__MECH__rt__decom.bin
|
376
|
-
# Thus we split and take the start date/time part of the filename
|
377
|
-
if list and list[0]
|
378
|
-
start = list[0].key.split('/')[-1].split('__')[0]
|
379
|
-
# Format as YYYY-MM-DD HH:MM:SS for use by the frontend
|
380
|
-
# utc_time = Time.utc(start[0,4], start[4,2], start[6,2], start[8,2], start[10,2], start[12,2])
|
381
|
-
return "#{start[0,4]}-#{start[4,2]}-#{start[6,2]} #{start[8,2]}:#{start[10,2]}:#{start[12,2]}"
|
382
|
-
else
|
383
|
-
return Time.now.utc.to_s[0..18]
|
384
|
-
end
|
385
|
-
end
|
386
|
-
|
387
380
|
# PRIVATE
|
388
381
|
|
389
382
|
def _validate_tlm_type(type)
|
@@ -417,7 +410,9 @@ module OpenC3
|
|
417
410
|
TargetModel.packets(target_name, scope: scope).each do |packet|
|
418
411
|
item = packet['items'].find { |item| item['name'] == item_name }
|
419
412
|
if item
|
420
|
-
|
413
|
+
# TODO: Fixme: This should be using the CVT not topics - Will possibly choose wrong packet if mixed with stored
|
414
|
+
_, msg_hash = Topic.get_newest_message("#{scope}__DECOM__{#{target_name}}__#{packet['packet_name']}")
|
415
|
+
packet_name = packet['packet_name'] if packet_name == 'LATEST'
|
421
416
|
if msg_hash && msg_hash['time'] && msg_hash['time'].to_i > latest
|
422
417
|
packet_name = packet['packet_name']
|
423
418
|
latest = msg_hash['time'].to_i
|
data/lib/openc3/bridge/bridge.rb
CHANGED
@@ -16,6 +16,9 @@
|
|
16
16
|
# Modified by OpenC3, Inc.
|
17
17
|
# All changes Copyright 2022, OpenC3, Inc.
|
18
18
|
# All Rights Reserved
|
19
|
+
#
|
20
|
+
# This file may also be used under the terms of a commercial license
|
21
|
+
# if purchased from OpenC3, Inc.
|
19
22
|
|
20
23
|
require 'openc3'
|
21
24
|
require 'openc3/bridge/bridge_config'
|
@@ -16,6 +16,9 @@
|
|
16
16
|
# Modified by OpenC3, Inc.
|
17
17
|
# All changes Copyright 2022, OpenC3, Inc.
|
18
18
|
# All Rights Reserved
|
19
|
+
#
|
20
|
+
# This file may also be used under the terms of a commercial license
|
21
|
+
# if purchased from OpenC3, Inc.
|
19
22
|
|
20
23
|
require 'openc3/utilities/logger'
|
21
24
|
require 'openc3/config/config_parser'
|
@@ -16,6 +16,9 @@
|
|
16
16
|
# Modified by OpenC3, Inc.
|
17
17
|
# All changes Copyright 2022, OpenC3, Inc.
|
18
18
|
# All Rights Reserved
|
19
|
+
#
|
20
|
+
# This file may also be used under the terms of a commercial license
|
21
|
+
# if purchased from OpenC3, Inc.
|
19
22
|
|
20
23
|
require 'openc3/tools/cmd_tlm_server/interface_thread'
|
21
24
|
|
@@ -16,6 +16,9 @@
|
|
16
16
|
# Modified by OpenC3, Inc.
|
17
17
|
# All changes Copyright 2022, OpenC3, Inc.
|
18
18
|
# All Rights Reserved
|
19
|
+
#
|
20
|
+
# This file may also be used under the terms of a commercial license
|
21
|
+
# if purchased from OpenC3, Inc.
|
19
22
|
|
20
23
|
require 'openc3/tools/cmd_tlm_server/interface_thread'
|
21
24
|
|
@@ -16,6 +16,9 @@
|
|
16
16
|
# Modified by OpenC3, Inc.
|
17
17
|
# All changes Copyright 2022, OpenC3, Inc.
|
18
18
|
# All Rights Reserved
|
19
|
+
#
|
20
|
+
# This file may also be used under the terms of a commercial license
|
21
|
+
# if purchased from OpenC3, Inc.
|
19
22
|
|
20
23
|
require 'openc3'
|
21
24
|
require 'openc3/ccsds/ccsds_packet'
|
@@ -16,6 +16,9 @@
|
|
16
16
|
# Modified by OpenC3, Inc.
|
17
17
|
# All changes Copyright 2022, OpenC3, Inc.
|
18
18
|
# All Rights Reserved
|
19
|
+
#
|
20
|
+
# This file may also be used under the terms of a commercial license
|
21
|
+
# if purchased from OpenC3, Inc.
|
19
22
|
|
20
23
|
require 'openc3/top_level'
|
21
24
|
require 'openc3/ext/config_parser' if RUBY_ENGINE == 'ruby' and !ENV['OPENC3_NO_EXT']
|
@@ -16,6 +16,9 @@
|
|
16
16
|
# Modified by OpenC3, Inc.
|
17
17
|
# All changes Copyright 2022, OpenC3, Inc.
|
18
18
|
# All Rights Reserved
|
19
|
+
#
|
20
|
+
# This file may also be used under the terms of a commercial license
|
21
|
+
# if purchased from OpenC3, Inc.
|
19
22
|
|
20
23
|
module OpenC3
|
21
24
|
# Performs a general conversion via the implementation of the call method
|
@@ -16,6 +16,9 @@
|
|
16
16
|
# Modified by OpenC3, Inc.
|
17
17
|
# All changes Copyright 2022, OpenC3, Inc.
|
18
18
|
# All Rights Reserved
|
19
|
+
#
|
20
|
+
# This file may also be used under the terms of a commercial license
|
21
|
+
# if purchased from OpenC3, Inc.
|
19
22
|
|
20
23
|
require 'openc3/conversions/conversion'
|
21
24
|
require 'openc3/packets/binary_accessor'
|
@@ -16,6 +16,9 @@
|
|
16
16
|
# Modified by OpenC3, Inc.
|
17
17
|
# All changes Copyright 2022, OpenC3, Inc.
|
18
18
|
# All Rights Reserved
|
19
|
+
#
|
20
|
+
# This file may also be used under the terms of a commercial license
|
21
|
+
# if purchased from OpenC3, Inc.
|
19
22
|
|
20
23
|
require 'openc3/conversions/conversion'
|
21
24
|
|
@@ -16,6 +16,9 @@
|
|
16
16
|
# Modified by OpenC3, Inc.
|
17
17
|
# All changes Copyright 2022, OpenC3, Inc.
|
18
18
|
# All Rights Reserved
|
19
|
+
#
|
20
|
+
# This file may also be used under the terms of a commercial license
|
21
|
+
# if purchased from OpenC3, Inc.
|
19
22
|
|
20
23
|
require 'openc3/conversions/conversion'
|
21
24
|
|
@@ -16,6 +16,9 @@
|
|
16
16
|
# Modified by OpenC3, Inc.
|
17
17
|
# All changes Copyright 2022, OpenC3, Inc.
|
18
18
|
# All Rights Reserved
|
19
|
+
#
|
20
|
+
# This file may also be used under the terms of a commercial license
|
21
|
+
# if purchased from OpenC3, Inc.
|
19
22
|
|
20
23
|
require 'openc3/conversions/conversion'
|
21
24
|
require 'openc3/ext/polynomial_conversion' if RUBY_ENGINE == 'ruby' and !ENV['OPENC3_NO_EXT']
|
@@ -16,6 +16,9 @@
|
|
16
16
|
# Modified by OpenC3, Inc.
|
17
17
|
# All changes Copyright 2022, OpenC3, Inc.
|
18
18
|
# All Rights Reserved
|
19
|
+
#
|
20
|
+
# This file may also be used under the terms of a commercial license
|
21
|
+
# if purchased from OpenC3, Inc.
|
19
22
|
|
20
23
|
require 'openc3/conversions/conversion'
|
21
24
|
|
@@ -16,6 +16,9 @@
|
|
16
16
|
# Modified by OpenC3, Inc.
|
17
17
|
# All changes Copyright 2022, OpenC3, Inc.
|
18
18
|
# All Rights Reserved
|
19
|
+
#
|
20
|
+
# This file may also be used under the terms of a commercial license
|
21
|
+
# if purchased from OpenC3, Inc.
|
19
22
|
|
20
23
|
require 'openc3/conversions/conversion'
|
21
24
|
|
@@ -16,6 +16,9 @@
|
|
16
16
|
# Modified by OpenC3, Inc.
|
17
17
|
# All changes Copyright 2022, OpenC3, Inc.
|
18
18
|
# All Rights Reserved
|
19
|
+
#
|
20
|
+
# This file may also be used under the terms of a commercial license
|
21
|
+
# if purchased from OpenC3, Inc.
|
19
22
|
|
20
23
|
require 'openc3/conversions/conversion'
|
21
24
|
|
@@ -16,6 +16,9 @@
|
|
16
16
|
# Modified by OpenC3, Inc.
|
17
17
|
# All changes Copyright 2022, OpenC3, Inc.
|
18
18
|
# All Rights Reserved
|
19
|
+
#
|
20
|
+
# This file may also be used under the terms of a commercial license
|
21
|
+
# if purchased from OpenC3, Inc.
|
19
22
|
|
20
23
|
require 'openc3/conversions/conversion'
|
21
24
|
|
@@ -16,6 +16,9 @@
|
|
16
16
|
# Modified by OpenC3, Inc.
|
17
17
|
# All changes Copyright 2022, OpenC3, Inc.
|
18
18
|
# All Rights Reserved
|
19
|
+
#
|
20
|
+
# This file may also be used under the terms of a commercial license
|
21
|
+
# if purchased from OpenC3, Inc.
|
19
22
|
|
20
23
|
require 'openc3/conversions/conversion'
|
21
24
|
|
@@ -16,6 +16,9 @@
|
|
16
16
|
# Modified by OpenC3, Inc.
|
17
17
|
# All changes Copyright 2022, OpenC3, Inc.
|
18
18
|
# All Rights Reserved
|
19
|
+
#
|
20
|
+
# This file may also be used under the terms of a commercial license
|
21
|
+
# if purchased from OpenC3, Inc.
|
19
22
|
|
20
23
|
require 'openc3/conversions/conversion'
|
21
24
|
|
@@ -16,6 +16,9 @@
|
|
16
16
|
# Modified by OpenC3, Inc.
|
17
17
|
# All changes Copyright 2022, OpenC3, Inc.
|
18
18
|
# All Rights Reserved
|
19
|
+
#
|
20
|
+
# This file may also be used under the terms of a commercial license
|
21
|
+
# if purchased from OpenC3, Inc.
|
19
22
|
|
20
23
|
require 'openc3/conversions/unix_time_conversion'
|
21
24
|
|
@@ -16,6 +16,9 @@
|
|
16
16
|
# Modified by OpenC3, Inc.
|
17
17
|
# All changes Copyright 2022, OpenC3, Inc.
|
18
18
|
# All Rights Reserved
|
19
|
+
#
|
20
|
+
# This file may also be used under the terms of a commercial license
|
21
|
+
# if purchased from OpenC3, Inc.
|
19
22
|
|
20
23
|
require 'openc3/conversions/unix_time_conversion'
|
21
24
|
|