cosmos 4.2.3-java → 4.2.4-java
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +2 -0
- data/Manifest.txt +14 -1
- data/bin/dart_util +4 -0
- data/cosmos.gemspec +3 -2
- data/data/config/interface_modifiers.yaml +2 -1
- data/data/config/item_modifiers.yaml +1 -1
- data/data/config/parameter_modifiers.yaml +1 -1
- data/data/crc.txt +52 -45
- data/demo/config/data/crc.txt +6 -1
- data/demo/config/system/system.txt +1 -0
- data/demo/config/targets/DART/cmd_tlm/dart_cmds.txt +2 -0
- data/demo/config/targets/DART/cmd_tlm/dart_tlm.txt +40 -0
- data/demo/config/targets/DART/cmd_tlm_server.txt +6 -0
- data/demo/config/targets/DART/screens/status.txt +54 -0
- data/demo/config/targets/DART/target.txt +7 -0
- data/ext/cosmos/ext/structure/structure.c +16 -4
- data/lib/cosmos/dart/app/models/status.rb +2 -0
- data/lib/cosmos/dart/db/migrate/20180423205644_create_statuses.rb +22 -0
- data/lib/cosmos/dart/db/migrate/20180425211340_add_decom_state_index.rb +5 -0
- data/lib/cosmos/dart/db/migrate/20180509204705_remove_indexes.rb +29 -0
- data/lib/cosmos/dart/db/migrate/20180510160002_remove_timestamps_from_ples.rb +6 -0
- data/lib/cosmos/dart/db/migrate/20180511194944_add_packet_log_id_to_tables.rb +18 -0
- data/lib/cosmos/dart/db/schema.rb +15 -9
- data/lib/cosmos/dart/db/seeds.rb +8 -0
- data/lib/cosmos/dart/lib/dart_common.rb +5 -6
- data/lib/cosmos/dart/lib/dart_database_cleaner.rb +56 -5
- data/lib/cosmos/dart/lib/dart_decom_query.rb +108 -6
- data/lib/cosmos/dart/lib/dart_decommutator.rb +81 -22
- data/lib/cosmos/dart/lib/dart_importer.rb +44 -14
- data/lib/cosmos/dart/lib/dart_packet_log_writer.rb +73 -55
- data/lib/cosmos/dart/lib/dart_reducer_manager.rb +34 -3
- data/lib/cosmos/dart/lib/dart_reducer_worker_thread.rb +18 -7
- data/lib/cosmos/dart/processes/dart.rb +2 -1
- data/lib/cosmos/dart/processes/dart_decom_server.rb +2 -1
- data/lib/cosmos/dart/processes/dart_import.rb +1 -0
- data/lib/cosmos/dart/processes/dart_ingester.rb +1 -0
- data/lib/cosmos/dart/processes/dart_reducer.rb +1 -0
- data/lib/cosmos/dart/processes/dart_stream_server.rb +1 -0
- data/lib/cosmos/dart/processes/dart_util.rb +147 -0
- data/lib/cosmos/dart/processes/dart_worker.rb +1 -0
- data/lib/cosmos/dart/spec/dart/dart_database_cleaner_spec.rb +1 -1
- data/lib/cosmos/dart/spec/dart/dart_decom_query_spec.rb +1 -0
- data/lib/cosmos/dart/spec/dart/dart_decommutator_spec.rb +1 -0
- data/lib/cosmos/dart/spec/dart/dart_importer_spec.rb +1 -0
- data/lib/cosmos/dart/spec/dart/dart_packet_log_writer_spec.rb +39 -36
- data/lib/cosmos/dart/spec/dart/dart_reducer_manager_spec.rb +2 -1
- data/lib/cosmos/dart/spec/dart/dart_tcpip_server_interface_spec.rb +1 -2
- data/lib/cosmos/gui/widgets/dart_meta_frame.rb +13 -6
- data/lib/cosmos/interfaces.rb +1 -0
- data/lib/cosmos/interfaces/dart_status_interface.rb +91 -0
- data/lib/cosmos/interfaces/serial_interface.rb +5 -1
- data/lib/cosmos/io/json_drb.rb +7 -2
- data/lib/cosmos/io/json_drb_object.rb +11 -6
- data/lib/cosmos/io/json_rpc.rb +1 -0
- data/lib/cosmos/io/posix_serial_driver.rb +4 -2
- data/lib/cosmos/io/serial_driver.rb +8 -4
- data/lib/cosmos/io/win32_serial_driver.rb +4 -3
- data/lib/cosmos/packets/packet_config.rb +12 -2
- data/lib/cosmos/packets/structure_item.rb +1 -0
- data/lib/cosmos/script/extract.rb +4 -2
- data/lib/cosmos/streams/serial_stream.rb +10 -5
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +15 -15
- data/lib/cosmos/tools/cmd_tlm_server/gui/status_tab.rb +1 -1
- data/lib/cosmos/tools/table_manager/table_manager.rb +6 -4
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_dart_thread.rb +5 -4
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_logfile_thread.rb +1 -1
- data/lib/cosmos/top_level.rb +1 -1
- data/lib/cosmos/version.rb +4 -4
- data/spec/interfaces/serial_interface_spec.rb +13 -0
- data/spec/io/json_rpc_spec.rb +7 -0
- data/spec/io/win32_serial_driver_spec.rb +8 -0
- data/spec/packets/structure_item_spec.rb +6 -0
- data/spec/script/extract_spec.rb +5 -0
- data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +10 -0
- metadata +17 -3
- data/lib/cosmos/dart/app/helpers/application_helper.rb +0 -2
@@ -21,6 +21,7 @@ describe DartReducerManager do
|
|
21
21
|
before(:each) do
|
22
22
|
DatabaseCleaner.strategy = :truncation
|
23
23
|
DatabaseCleaner.clean
|
24
|
+
Rails.application.load_seed
|
24
25
|
end
|
25
26
|
|
26
27
|
def setup_ples(entries, delta_time)
|
@@ -48,13 +49,13 @@ describe DartReducerManager do
|
|
48
49
|
end
|
49
50
|
ples = 0
|
50
51
|
count = 0
|
52
|
+
writer.shutdown
|
51
53
|
while ples != (entries + 1) # SYSTEM META is the plus 1
|
52
54
|
ples = PacketLogEntry.count
|
53
55
|
sleep 0.1 # Allow the log writer to work
|
54
56
|
count += 1
|
55
57
|
break if count == 100 # 10s
|
56
58
|
end
|
57
|
-
writer.shutdown
|
58
59
|
sleep 0.1
|
59
60
|
expect(count).to be < 100
|
60
61
|
|
@@ -22,6 +22,7 @@ describe DartTcpipServerInterface do
|
|
22
22
|
before(:each) do
|
23
23
|
DatabaseCleaner.strategy = :truncation
|
24
24
|
DatabaseCleaner.clean
|
25
|
+
Rails.application.load_seed
|
25
26
|
end
|
26
27
|
|
27
28
|
describe "initialize" do
|
@@ -48,8 +49,6 @@ describe DartTcpipServerInterface do
|
|
48
49
|
@request.write('REQUEST', "BLAH")
|
49
50
|
interface.write(@request)
|
50
51
|
sleep 0.1
|
51
|
-
# TODO: Why is the interface still connected?
|
52
|
-
# expect(interface.connected?).to be false
|
53
52
|
i.disconnect
|
54
53
|
|
55
54
|
Dir["#{Cosmos::System.paths['DART_LOGS']}/*"].each do |file|
|
@@ -82,9 +82,14 @@ module Cosmos
|
|
82
82
|
|
83
83
|
setLayout(@layout)
|
84
84
|
|
85
|
-
|
86
|
-
|
87
|
-
|
85
|
+
Thread.new do
|
86
|
+
sleep(0.1)
|
87
|
+
Qt.execute_in_main_thread(true) do
|
88
|
+
unless self.disposed?
|
89
|
+
update_meta_item_names()
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
88
93
|
end
|
89
94
|
|
90
95
|
def meta_filters
|
@@ -100,9 +105,11 @@ module Cosmos
|
|
100
105
|
server = JsonDRbObject.new(System.connect_hosts['DART_DECOM'], System.ports['DART_DECOM'])
|
101
106
|
item_names = server.item_names("SYSTEM", "META")
|
102
107
|
Qt.execute_in_main_thread do
|
103
|
-
|
104
|
-
|
105
|
-
|
108
|
+
unless self.disposed?
|
109
|
+
@meta_item_name.clear
|
110
|
+
item_names.each do |item|
|
111
|
+
@meta_item_name.addItem(item)
|
112
|
+
end
|
106
113
|
end
|
107
114
|
end
|
108
115
|
@got_meta_item_names = true
|
data/lib/cosmos/interfaces.rb
CHANGED
@@ -9,6 +9,7 @@ require 'cosmos/interfaces/tcpip_client_interface'
|
|
9
9
|
require 'cosmos/interfaces/tcpip_server_interface'
|
10
10
|
require 'cosmos/interfaces/udp_interface'
|
11
11
|
require 'cosmos/interfaces/linc_interface'
|
12
|
+
require 'cosmos/interfaces/dart_status_interface'
|
12
13
|
|
13
14
|
require 'cosmos/interfaces/protocols/protocol'
|
14
15
|
require 'cosmos/interfaces/protocols/burst_protocol'
|
@@ -0,0 +1,91 @@
|
|
1
|
+
# encoding: ascii-8bit
|
2
|
+
|
3
|
+
# Copyright 2018 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 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
|
+
require 'cosmos/interfaces/interface'
|
12
|
+
require 'cosmos/io/json_drb_object'
|
13
|
+
require 'cosmos/utilities/sleeper'
|
14
|
+
|
15
|
+
module Cosmos
|
16
|
+
|
17
|
+
# Defines all the attributes and methods common to all interface classes
|
18
|
+
# used by COSMOS.
|
19
|
+
class DartStatusInterface < Interface
|
20
|
+
# Initialize default attribute values
|
21
|
+
def initialize(query_period = 20.0)
|
22
|
+
super()
|
23
|
+
@write_raw_allowed = false
|
24
|
+
@dart = nil
|
25
|
+
@first = true
|
26
|
+
@query_period = query_period.to_f
|
27
|
+
@query_time = nil
|
28
|
+
end
|
29
|
+
|
30
|
+
# Connects the interface to its target(s). Must be implemented by a
|
31
|
+
# subclass.
|
32
|
+
def connect
|
33
|
+
super()
|
34
|
+
@first = true
|
35
|
+
@status_packet = System.telemetry.packet('DART', 'STATUS').clone
|
36
|
+
@status_packet.write('PACKET_ID', 1)
|
37
|
+
@clear_errors_command = System.commands.packet('DART', 'CLEAR_ERRORS')
|
38
|
+
@sleeper = Sleeper.new
|
39
|
+
@dart = JsonDRbObject.new(System.connect_hosts['DART_DECOM'], System.ports['DART_DECOM'])
|
40
|
+
end
|
41
|
+
|
42
|
+
# Indicates if the interface is connected to its target(s) or not. Must be
|
43
|
+
# implemented by a subclass.
|
44
|
+
def connected?
|
45
|
+
if @dart
|
46
|
+
true
|
47
|
+
else
|
48
|
+
false
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
# Disconnects the interface from its target(s). Must be implemented by a
|
53
|
+
# subclass.
|
54
|
+
def disconnect
|
55
|
+
super()
|
56
|
+
@sleeper.cancel
|
57
|
+
@dart.disconnect if @dart
|
58
|
+
@dart = nil
|
59
|
+
end
|
60
|
+
|
61
|
+
def read_interface
|
62
|
+
canceled = false
|
63
|
+
unless @first
|
64
|
+
if @query_time
|
65
|
+
sleep_time = @query_period - (Time.now - @query_time)
|
66
|
+
canceled = @sleeper.sleep(sleep_time) if sleep_time > 0
|
67
|
+
end
|
68
|
+
@query_time = Time.now
|
69
|
+
end
|
70
|
+
@first = false
|
71
|
+
unless canceled
|
72
|
+
data = @dart.dart_status
|
73
|
+
write_interface_base(@dart.request_data.to_s)
|
74
|
+
read_interface_base(@dart.response_data.to_s)
|
75
|
+
data.each do |key, value|
|
76
|
+
@status_packet.write(key, value)
|
77
|
+
end
|
78
|
+
return @status_packet.buffer
|
79
|
+
else
|
80
|
+
return nil
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def write_interface(data)
|
85
|
+
@dart.clear_errors
|
86
|
+
write_interface_base(@dart.request_data.to_s)
|
87
|
+
read_interface_base(@dart.response_data.to_s)
|
88
|
+
return nil
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
@@ -51,6 +51,7 @@ module Cosmos
|
|
51
51
|
@write_raw_allowed = false unless @write_port_name
|
52
52
|
@read_allowed = false unless @read_port_name
|
53
53
|
@flow_control = :NONE
|
54
|
+
@data_bits = 8
|
54
55
|
end
|
55
56
|
|
56
57
|
# Creates a new {SerialStream} using the parameters passed in the constructor
|
@@ -63,7 +64,8 @@ module Cosmos
|
|
63
64
|
@stop_bits,
|
64
65
|
@write_timeout,
|
65
66
|
@read_timeout,
|
66
|
-
@flow_control
|
67
|
+
@flow_control,
|
68
|
+
@data_bits
|
67
69
|
)
|
68
70
|
super()
|
69
71
|
end
|
@@ -75,6 +77,8 @@ module Cosmos
|
|
75
77
|
case option_name.upcase
|
76
78
|
when 'FLOW_CONTROL'
|
77
79
|
@flow_control = option_values[0]
|
80
|
+
when 'DATA_BITS'
|
81
|
+
@data_bits = option_values[0].to_i
|
78
82
|
end
|
79
83
|
end
|
80
84
|
end
|
data/lib/cosmos/io/json_drb.rb
CHANGED
@@ -17,8 +17,13 @@ require 'set'
|
|
17
17
|
require 'cosmos/io/json_rpc'
|
18
18
|
require 'cosmos/io/json_drb_rack'
|
19
19
|
require 'rack/handler/puma'
|
20
|
-
if RUBY_ENGINE == 'ruby' and %w(2.2.7 2.2.8 2.3.4 2.4.1).include? RUBY_VERSION
|
21
|
-
|
20
|
+
if RUBY_ENGINE == 'ruby' and %w(2.2.7 2.2.8 2.2.9 2.2.10 2.3.4 2.4.1).include? RUBY_VERSION
|
21
|
+
begin
|
22
|
+
require 'stopgap_13632'
|
23
|
+
rescue Exception => err
|
24
|
+
msg = "Error loading stopgap. Make sure gem install stopgap_13632 succeeds: #{err.message}"
|
25
|
+
raise $!, msg, $!.backtrace
|
26
|
+
end
|
22
27
|
end
|
23
28
|
|
24
29
|
# Add methods to the Puma::Launcher and Puma::Single class so we can tell
|
@@ -32,6 +32,9 @@ module Cosmos
|
|
32
32
|
# server.cmd(*args)
|
33
33
|
#
|
34
34
|
class JsonDRbObject
|
35
|
+
attr_reader :request_data
|
36
|
+
attr_reader :response_data
|
37
|
+
|
35
38
|
# @param hostname [String] The name of the machine which has started
|
36
39
|
# the JSON service
|
37
40
|
# @param port [Integer] The port number of the JSON service
|
@@ -46,6 +49,8 @@ module Cosmos
|
|
46
49
|
raise error
|
47
50
|
end
|
48
51
|
end
|
52
|
+
@request_data = ""
|
53
|
+
@response_data = ""
|
49
54
|
@hostname = hostname
|
50
55
|
@port = port
|
51
56
|
@uri = URI("http://#{@hostname}:#{@port}")
|
@@ -117,25 +122,25 @@ module Cosmos
|
|
117
122
|
request = JsonRpcRequest.new(method_name, method_params, @id)
|
118
123
|
@id += 1
|
119
124
|
|
120
|
-
request_data = request.to_json(:allow_nan => true)
|
125
|
+
@request_data = request.to_json(:allow_nan => true)
|
121
126
|
begin
|
122
127
|
STDOUT.puts "\nRequest:\n" if JsonDRb.debug?
|
123
|
-
STDOUT.puts request_data if JsonDRb.debug?
|
128
|
+
STDOUT.puts @request_data if JsonDRb.debug?
|
124
129
|
@request_in_progress = true
|
125
130
|
headers = {'Content-Type' => 'application/json-rpc'}
|
126
131
|
res = @http.post(@uri,
|
127
|
-
:body => request_data,
|
132
|
+
:body => @request_data,
|
128
133
|
:header => headers)
|
129
|
-
response_data = res.body
|
134
|
+
@response_data = res.body
|
130
135
|
@request_in_progress = false
|
131
136
|
STDOUT.puts "Response:\n" if JsonDRb.debug?
|
132
|
-
STDOUT.puts response_data if JsonDRb.debug?
|
137
|
+
STDOUT.puts @response_data if JsonDRb.debug?
|
133
138
|
rescue => e
|
134
139
|
disconnect()
|
135
140
|
return false if first_try
|
136
141
|
raise DRb::DRbConnError, e.message, e.backtrace
|
137
142
|
end
|
138
|
-
response_data
|
143
|
+
@response_data
|
139
144
|
end
|
140
145
|
|
141
146
|
def handle_response(response_data)
|
data/lib/cosmos/io/json_rpc.rb
CHANGED
@@ -24,7 +24,8 @@ module Cosmos
|
|
24
24
|
stop_bits = 1,
|
25
25
|
write_timeout = 10.0,
|
26
26
|
read_timeout = nil,
|
27
|
-
flow_control = :NONE
|
27
|
+
flow_control = :NONE,
|
28
|
+
data_bits = 8)
|
28
29
|
|
29
30
|
# Convert Baud Rate into Termios constant
|
30
31
|
begin
|
@@ -34,6 +35,7 @@ module Cosmos
|
|
34
35
|
end
|
35
36
|
|
36
37
|
# Verify Parameters
|
38
|
+
raise(ArgumentError, "Invalid Data Bits: #{data_bits}") unless [5,6,7,8].include?(data_bits)
|
37
39
|
raise(ArgumentError, "Invalid parity: #{parity}") if parity and !SerialDriver::VALID_PARITY.include?(parity)
|
38
40
|
raise(ArgumentError, "Invalid Stop Bits: #{stop_bits}") unless [1,2].include?(stop_bits)
|
39
41
|
@write_timeout = write_timeout
|
@@ -53,7 +55,7 @@ module Cosmos
|
|
53
55
|
iflags |= Termios::IGNPAR unless parity
|
54
56
|
cflags = 0
|
55
57
|
cflags |= Termios::CREAD # Enable receiver
|
56
|
-
cflags |= Termios
|
58
|
+
cflags |= Termios.const_get("CS#{data_bits}") # data bits
|
57
59
|
cflags |= Termios::CLOCAL # Ignore Modem Control Lines
|
58
60
|
cflags |= Termios::CSTOPB if stop_bits == 2
|
59
61
|
cflags |= Termios::PARENB if parity
|
@@ -32,14 +32,16 @@ module Cosmos
|
|
32
32
|
# complete or nil to block
|
33
33
|
# @param read_timeout [Float|nil] Number of seconds to wait for the read to
|
34
34
|
# complete or nil to block
|
35
|
-
# @param flow_control [Symbol] Currently supported :NONE and :RTSCTS
|
35
|
+
# @param flow_control [Symbol] Currently supported :NONE and :RTSCTS (default :NONE)
|
36
|
+
# @param data_bits [Integer] Number of data bits (default 8)
|
36
37
|
def initialize(port_name,
|
37
38
|
baud_rate,
|
38
39
|
parity = :NONE,
|
39
40
|
stop_bits = 1,
|
40
41
|
write_timeout = 10.0,
|
41
42
|
read_timeout = nil,
|
42
|
-
flow_control = :NONE
|
43
|
+
flow_control = :NONE,
|
44
|
+
data_bits = 8)
|
43
45
|
raise(ArgumentError, "Invalid parity: #{parity}") unless VALID_PARITY.include? parity
|
44
46
|
if Kernel.is_windows?
|
45
47
|
@driver = Win32SerialDriver.new(port_name,
|
@@ -50,7 +52,8 @@ module Cosmos
|
|
50
52
|
read_timeout,
|
51
53
|
0.01,
|
52
54
|
1000,
|
53
|
-
flow_control
|
55
|
+
flow_control,
|
56
|
+
data_bits)
|
54
57
|
elsif RUBY_ENGINE == 'ruby'
|
55
58
|
@driver = PosixSerialDriver.new(port_name,
|
56
59
|
baud_rate,
|
@@ -58,7 +61,8 @@ module Cosmos
|
|
58
61
|
stop_bits,
|
59
62
|
write_timeout,
|
60
63
|
read_timeout,
|
61
|
-
flow_control
|
64
|
+
flow_control,
|
65
|
+
data_bits)
|
62
66
|
else
|
63
67
|
@driver = nil # JRuby Serial on Linux not currently supported
|
64
68
|
end
|
@@ -23,13 +23,14 @@ module Cosmos
|
|
23
23
|
read_timeout = nil,
|
24
24
|
read_polling_period = 0.01,
|
25
25
|
read_max_length = 1000,
|
26
|
-
flow_control = :NONE
|
26
|
+
flow_control = :NONE,
|
27
|
+
data_bits = 8)
|
27
28
|
|
28
29
|
# Verify Parameters
|
29
30
|
port_name = '\\\\.\\' + port_name if port_name =~ /^COM[0-9]{2,3}$/
|
30
31
|
|
31
32
|
raise(ArgumentError, "Invalid baud rate: #{baud_rate}") unless baud_rate.between?(Win32::BAUD_RATES[0], Win32::BAUD_RATES[-1])
|
32
|
-
|
33
|
+
raise(ArgumentError, "Invalid data bits: #{data_bits}") unless [5,6,7,8].include?(data_bits)
|
33
34
|
raise(ArgumentError, "Invalid parity: #{parity}") if parity and !SerialDriver::VALID_PARITY.include?(parity)
|
34
35
|
case parity
|
35
36
|
when SerialDriver::ODD
|
@@ -64,7 +65,7 @@ module Cosmos
|
|
64
65
|
# Configure the Comm Port - See: https://msdn.microsoft.com/en-us/library/windows/desktop/aa363214(v=vs.85).aspx
|
65
66
|
dcb = Win32.get_comm_state(@handle)
|
66
67
|
dcb.write('BaudRate', baud_rate)
|
67
|
-
dcb.write('ByteSize',
|
68
|
+
dcb.write('ByteSize', data_bits)
|
68
69
|
dcb.write('Parity', parity)
|
69
70
|
dcb.write('StopBits', stop_bits)
|
70
71
|
if flow_control == :RTSCTS
|
@@ -395,8 +395,13 @@ module Cosmos
|
|
395
395
|
# require should be performed in target.txt
|
396
396
|
klass = params[0].filename_to_class_name.to_class
|
397
397
|
raise parser.error("#{params[0].filename_to_class_name} class not found. Did you require the file in target.txt?", usage) unless klass
|
398
|
-
|
399
|
-
|
398
|
+
conversion = klass.new(*params[1..(params.length - 1)])
|
399
|
+
@current_item.send("#{keyword.downcase}=".to_sym, conversion)
|
400
|
+
if klass != ProcessorConversion and (conversion.converted_type.nil? or conversion.converted_bit_size.nil?)
|
401
|
+
msg = "Read Conversion #{params[0].filename_to_class_name} on item #{@current_item.name} does not specify converted type or bit size. Will not be supported by DART"
|
402
|
+
@warnings << msg
|
403
|
+
Logger.instance.warn @warnings[-1]
|
404
|
+
end
|
400
405
|
rescue Exception => err
|
401
406
|
raise parser.error(err)
|
402
407
|
end
|
@@ -445,6 +450,11 @@ module Cosmos
|
|
445
450
|
raise parser.error("Invalid converted_type: #{@converted_type}.") unless [:INT, :UINT, :FLOAT, :STRING, :BLOCK].include? @converted_type
|
446
451
|
end
|
447
452
|
@converted_bit_size = Integer(params[1]) if params[1]
|
453
|
+
if @converted_type.nil? or @converted_bit_size.nil?
|
454
|
+
msg = "Generic Conversion on item #{@current_item.name} does not specify converted type or bit size. Will not be supported by DART"
|
455
|
+
@warnings << msg
|
456
|
+
Logger.instance.warn @warnings[-1]
|
457
|
+
end
|
448
458
|
|
449
459
|
# Define a set of limits for the current telemetry item
|
450
460
|
when 'LIMITS'
|
@@ -203,6 +203,7 @@ module Cosmos
|
|
203
203
|
# with different names or bit sizes are equal if they have the same bit
|
204
204
|
# offset.
|
205
205
|
def <=>(other_item)
|
206
|
+
return nil unless other_item.kind_of?(StructureItem)
|
206
207
|
other_bit_offset = other_item.bit_offset
|
207
208
|
other_bit_size = other_item.bit_size
|
208
209
|
|
@@ -45,7 +45,7 @@ module Cosmos
|
|
45
45
|
target_name = first_half[0]
|
46
46
|
cmd_name = first_half[1]
|
47
47
|
cmd_params = {}
|
48
|
-
|
48
|
+
|
49
49
|
begin
|
50
50
|
packet = System.commands.packet(target_name, cmd_name).clone
|
51
51
|
rescue
|
@@ -129,7 +129,9 @@ module Cosmos
|
|
129
129
|
comparison_to_eval = nil
|
130
130
|
return [target_name, packet_name, item_name, comparison_to_eval] if split_string.length == 3
|
131
131
|
raise "ERROR: Check improperly specified: #{text}" if split_string.length < 4
|
132
|
-
|
132
|
+
split_string = text.split(/ /) # Split on regex spaces to preserve spaces in comparison
|
133
|
+
index = split_string.index(item_name)
|
134
|
+
comparison_to_eval = split_string[(index + 1)..(split_string.length - 1)].join(" ")
|
133
135
|
raise "ERROR: Use '==' instead of '=': #{text}" if split_string[3] == '='
|
134
136
|
return [target_name, packet_name, item_name, comparison_to_eval]
|
135
137
|
end
|
@@ -35,7 +35,8 @@ module Cosmos
|
|
35
35
|
# complete. Pass nil to create no timeout. The {SerialDriver} will
|
36
36
|
# continously try to read data until it has received data or an error
|
37
37
|
# occurs.
|
38
|
-
# @param flow_control [Symbol] Currently supported :NONE and :RTSCTS
|
38
|
+
# @param flow_control [Symbol] Currently supported :NONE and :RTSCTS (default :NONE)
|
39
|
+
# @param data_bits [Integer] Number of data bits (default 8)
|
39
40
|
def initialize(write_port_name,
|
40
41
|
read_port_name,
|
41
42
|
baud_rate,
|
@@ -43,7 +44,8 @@ module Cosmos
|
|
43
44
|
stop_bits,
|
44
45
|
write_timeout,
|
45
46
|
read_timeout,
|
46
|
-
flow_control = :NONE
|
47
|
+
flow_control = :NONE,
|
48
|
+
data_bits = 8)
|
47
49
|
super()
|
48
50
|
|
49
51
|
# The SerialDriver class will validate the parameters
|
@@ -56,7 +58,8 @@ module Cosmos
|
|
56
58
|
@write_timeout = @write_timeout.to_f if @write_timeout
|
57
59
|
@read_timeout = ConfigParser.handle_nil(read_timeout)
|
58
60
|
@read_timeout = @read_timeout.to_f if @read_timeout
|
59
|
-
@flow_control
|
61
|
+
@flow_control = flow_control.to_s.intern
|
62
|
+
@data_bits = data_bits.to_i
|
60
63
|
|
61
64
|
if @write_port_name
|
62
65
|
@write_serial_port = SerialDriver.new(@write_port_name,
|
@@ -65,7 +68,8 @@ module Cosmos
|
|
65
68
|
@stop_bits,
|
66
69
|
@write_timeout,
|
67
70
|
@read_timeout,
|
68
|
-
@flow_control
|
71
|
+
@flow_control,
|
72
|
+
@data_bits)
|
69
73
|
else
|
70
74
|
@write_serial_port = nil
|
71
75
|
end
|
@@ -79,7 +83,8 @@ module Cosmos
|
|
79
83
|
@stop_bits,
|
80
84
|
@write_timeout,
|
81
85
|
@read_timeout,
|
82
|
-
@flow_control
|
86
|
+
@flow_control,
|
87
|
+
@data_bits)
|
83
88
|
end
|
84
89
|
else
|
85
90
|
@read_serial_port = nil
|