cosmos 4.4.1 → 4.4.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2c926798369e35c0ecb4a90b82b466222eba498919398d71260a8a788c93ec08
4
- data.tar.gz: 1741c93c093df086241b47a82dbfdcabcab568da5bceb5890b4f8ad79b3b57a5
3
+ metadata.gz: 118c33651e0616201ed73bde1566f2e1d645ef30d06fe558e9d6585602e912e7
4
+ data.tar.gz: eaf90fcf26d5313349cd0f11c05fdfce4c24ee3de2a9d73d222dd349eae10af7
5
5
  SHA512:
6
- metadata.gz: 54a24530208e5d2c775e621f896d219e84f00f647ea00a662dc204eb97786e5985b7a40acc4d88ad8889e0da7b0374922ca2235c3ac8aea77cea50cccb92b677
7
- data.tar.gz: de63f56dd7fdffb1290825321710b3242915a31465fc6331c880fa9eadb58da9b42573233d21382081287ed6109d14da16a85253ce7ac4f530da4c29b82e6968
6
+ metadata.gz: 38a5ee8dd5fc1d4b5c1a2e97c3ecfe6e5e944150da861f9fa0a32db9c69c1896019e804f021fdbc4da5f7a47874d614d385cb246f76adb3542fa55a7101ea0c1
7
+ data.tar.gz: 20503f8f9121ab812625cc778b911feda6ca9b3d9b7e699f44b3d6676e5691551b3734893a5bee0ab6a2ff5eda7ed45f62fc1ddaca65a3d16b385e27d349ec2f
data/Rakefile CHANGED
@@ -320,15 +320,16 @@ task :docker_run do
320
320
  STDOUT.puts "6. rake commit_release"
321
321
  STDOUT.puts "7. export PATH=/opt/jruby/bin:$PATH"
322
322
  STDOUT.puts "8. rake gem"
323
- STDOUT.puts "9. gem push cosmos-X.X.X.gem"
324
- STDOUT.puts "10. gem push cosmos-X.X.X-java.gem"
323
+ STDOUT.puts "9. /usr/bin/gem push cosmos-X.X.X.gem"
324
+ STDOUT.puts "10. /usr/bin/gem push cosmos-X.X.X-java.gem"
325
325
  STDOUT.puts "11. cd /devel/cosmos-docker"
326
- STDOUT.puts "12. Update COSMOS_VERSION in all Dockerfiles"
327
- STDOUT.puts "13. git commit -a -m \"Release COSMOS vX.X.X\""
328
- STDOUT.puts "14. git push"
329
- STDOUT.puts "15. git checkout -b vX.X.X"
330
- STDOUT.puts "16. git push --set-upstream origin vX.X.X"
331
- STDOUT.puts "17. Update release notes on github.com and cosmosrb.com"
326
+ STDOUT.puts "12. git pull"
327
+ STDOUT.puts "13. Update COSMOS_VERSION in all Dockerfiles"
328
+ STDOUT.puts "14. git commit -a -m \"Release COSMOS vX.X.X\""
329
+ STDOUT.puts "15. git push"
330
+ STDOUT.puts "16. git checkout -b vX.X.X"
331
+ STDOUT.puts "17. git push --set-upstream origin vX.X.X"
332
+ STDOUT.puts "18. Update release notes on github.com and cosmosrb.com"
332
333
 
333
334
  _, platform, *_ = RUBY_PLATFORM.split("-")
334
335
  if (platform == 'mswin32' or platform == 'mingw32') and which('winpty')
@@ -114,7 +114,7 @@ spec = Gem::Specification.new do |s|
114
114
  s.add_development_dependency 'simplecov', '~> 0.15'
115
115
  s.add_development_dependency 'codecov', '~> 0.1'
116
116
  s.add_development_dependency 'benchmark-ips', '~> 2.0'
117
- s.add_development_dependency 'ruby-prof', '~> 1.0' if RUBY_ENGINE == 'ruby' # MRI Only
117
+ s.add_development_dependency 'ruby-prof', ['~> 1.0', '< 1.3'] if RUBY_ENGINE == 'ruby' # MRI Only
118
118
 
119
119
  s.post_install_message = "Thanks for installing Ball Aerospace COSMOS!\nStart your first project with: cosmos demo demo\n"
120
120
  end
@@ -158,7 +158,7 @@
158
158
  "lib/cosmos/tools/tlm_viewer/tlm_viewer_config.rb" 0xD1CF7B70
159
159
  "lib/cosmos/tools/tlm_viewer/screen.rb" 0x007BDC26
160
160
  "lib/cosmos/tools/handbook_creator/handbook_creator_config.rb" 0x9706590F
161
- "lib/cosmos/tools/handbook_creator/handbook_creator.rb" 0xA0E1DA06
161
+ "lib/cosmos/tools/handbook_creator/handbook_creator.rb" 0x1F9BF5BB
162
162
  "lib/cosmos/tools/opengl_builder/opengl_builder.rb" 0x2D82B6FB
163
163
  "lib/cosmos/tools/opengl_builder/scene_config.rb" 0x15B59793
164
164
  "lib/cosmos/tools/script_runner/script_audit.rb" 0xAAEFBDF7
@@ -233,7 +233,7 @@
233
233
  "lib/cosmos/script/limits.rb" 0x9693149E
234
234
  "lib/cosmos/script/telemetry.rb" 0x19F63F52
235
235
  "lib/cosmos/script/commands.rb" 0x13531FE3
236
- "lib/cosmos/script/extract.rb" 0x31199456
236
+ "lib/cosmos/script/extract.rb" 0xE39029E6
237
237
  "lib/cosmos/script/script.rb" 0xA19681FC
238
238
  "lib/cosmos/script/replay.rb" 0xEB08C485
239
239
  "lib/cosmos/script/tools.rb" 0xB30033A7
@@ -447,7 +447,7 @@
447
447
  "lib/cosmos/win32/win32_main.rb" 0x722DDE0D
448
448
  "lib/cosmos/win32/excel.rb" 0x72BFBAC2
449
449
  "lib/cosmos/win32/win32.rb" 0xBCECA922
450
- "lib/cosmos/version.rb" 0x0FA2BCFD
450
+ "lib/cosmos/version.rb" 0xCC5AC5BC
451
451
  "lib/cosmos/interfaces/interface.rb" 0xFC517874
452
452
  "lib/cosmos/interfaces/udp_interface.rb" 0xE673DC8E
453
453
  "lib/cosmos/interfaces/protocols/terminated_protocol.rb" 0xE6AAACCA
@@ -456,15 +456,15 @@
456
456
  "lib/cosmos/interfaces/protocols/ignore_packet_protocol.rb" 0xC5443C01
457
457
  "lib/cosmos/interfaces/protocols/override_protocol.rb" 0x64479CFF
458
458
  "lib/cosmos/interfaces/protocols/preidentified_protocol.rb" 0xE8D0347C
459
- "lib/cosmos/interfaces/protocols/template_protocol.rb" 0x8C86548D
459
+ "lib/cosmos/interfaces/protocols/template_protocol.rb" 0xA16B27DF
460
460
  "lib/cosmos/interfaces/protocols/length_protocol.rb" 0x5036FBBB
461
- "lib/cosmos/interfaces/protocols/burst_protocol.rb" 0xCF4EE7A5
462
- "lib/cosmos/interfaces/protocols/crc_protocol.rb" 0x9212C9CB
461
+ "lib/cosmos/interfaces/protocols/burst_protocol.rb" 0x6A6D8FE9
462
+ "lib/cosmos/interfaces/protocols/crc_protocol.rb" 0x61C90363
463
463
  "lib/cosmos/interfaces/simulated_target_interface.rb" 0x402C2FF5
464
- "lib/cosmos/interfaces/linc_interface.rb" 0xA85A43C1
465
- "lib/cosmos/interfaces/tcpip_server_interface.rb" 0x0209F6E0
464
+ "lib/cosmos/interfaces/linc_interface.rb" 0xBEA1F26B
465
+ "lib/cosmos/interfaces/tcpip_server_interface.rb" 0x0B30B476
466
466
  "lib/cosmos/interfaces/cmd_tlm_server_interface.rb" 0x8921CFC1
467
467
  "lib/cosmos/interfaces/tcpip_client_interface.rb" 0xE9F201A9
468
468
  "lib/cosmos/interfaces/dart_status_interface.rb" 0xE85231B8
469
- "lib/cosmos/interfaces/stream_interface.rb" 0x6D1676BA
469
+ "lib/cosmos/interfaces/stream_interface.rb" 0xF3EE02F8
470
470
  "lib/cosmos/interfaces/serial_interface.rb" 0x97B428D8
@@ -32,7 +32,7 @@
32
32
  "config/tools/tlm_extractor/_adcs_time.txt" 0x3DAD5094
33
33
  "config/tools/tlm_extractor/tlm_extractor4.txt" 0x068824C2
34
34
  "config/tools/tlm_viewer/tlm_viewer.txt" 0x6E6DBC7A
35
- "config/tools/handbook_creator/default_toc.xsl" 0x4122A040
35
+ "config/tools/handbook_creator/default_toc.xsl" 0x00FD130E
36
36
  "config/tools/handbook_creator/templates/command_toc.html.erb" 0x9159BCF9
37
37
  "config/tools/handbook_creator/templates/title.html.erb" 0xBC66E2BC
38
38
  "config/tools/handbook_creator/templates/footer.html.erb" 0x0E1F9800
@@ -1,59 +1,59 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <xsl:stylesheet version="1.0"
3
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
4
- xmlns:outline="http://code.google.com/p/wkhtmltopdf/outline"
5
- xmlns="http://www.w3.org/1999/xhtml">
6
- <xsl:output doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
7
- doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
8
- indent="yes" />
9
- <xsl:template match="outline:outline">
10
- <html>
11
- <head>
12
- <title>Table of Contents</title>
13
- <style>
14
- h1 {
15
- text-align: center;
16
- font-size: 20px;
17
- font-family: arial;
18
- }
19
- div {border-bottom: 1px dashed rgb(200,200,200);}
20
- span {float: right;}
21
- li {list-style: none;}
22
- ul {
23
- font-size: 20px;
24
- font-family: arial;
25
- }
26
- ul ul {font-size: 80%; }
27
- ul {padding-left: 0em;}
28
- ul ul {padding-left: 1em;}
29
- a {text-decoration:none; color: black;}
30
- </style>
31
- </head>
32
- <body>
33
- <h1>Table of Contents</h1>
34
- <ul><xsl:apply-templates select="outline:item/outline:item"/></ul>
35
- </body>
36
- </html>
37
- </xsl:template>
38
- <xsl:template match="outline:item">
39
- <li>
40
- <xsl:if test="@title!=''">
41
- <div>
42
- <a>
43
- <xsl:if test="@link">
44
- <xsl:attribute name="href"><xsl:value-of select="@link"/></xsl:attribute>
45
- </xsl:if>
46
- <xsl:if test="@backLink">
47
- <xsl:attribute name="name"><xsl:value-of select="@backLink"/></xsl:attribute>
48
- </xsl:if>
49
- <xsl:value-of select="@title" />
50
- </a>
51
- <span> <xsl:value-of select="@page" /> </span>
52
- </div>
53
- </xsl:if>
54
- <ul>
55
- <xsl:apply-templates select="outline:item"/>
56
- </ul>
57
- </li>
58
- </xsl:template>
59
- </xsl:stylesheet>
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <xsl:stylesheet version="2.0"
3
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
4
+ xmlns:outline="http://code.google.com/p/wkhtmltopdf/outline"
5
+ xmlns="http://www.w3.org/1999/xhtml">
6
+ <xsl:output doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
7
+ doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
8
+ indent="yes" />
9
+ <xsl:template match="outline:outline">
10
+ <html>
11
+ <head>
12
+ <title>Table of Contents</title>
13
+ <style>
14
+ h1 {
15
+ text-align: center;
16
+ font-size: 20px;
17
+ font-family: arial;
18
+ }
19
+ div {border-bottom: 1px dashed rgb(200,200,200);}
20
+ span {float: right;}
21
+ li {list-style: none;}
22
+ ul {
23
+ font-size: 20px;
24
+ font-family: arial;
25
+ }
26
+ ul ul {font-size: 80%; }
27
+ ul {padding-left: 0em;}
28
+ ul ul {padding-left: 1em;}
29
+ a {text-decoration:none; color: black;}
30
+ </style>
31
+ </head>
32
+ <body>
33
+ <h1>Table of Contents</h1>
34
+ <ul><xsl:apply-templates select="outline:item/outline:item"/></ul>
35
+ </body>
36
+ </html>
37
+ </xsl:template>
38
+ <xsl:template match="outline:item">
39
+ <li>
40
+ <xsl:if test="@title!=''">
41
+ <div>
42
+ <a>
43
+ <xsl:if test="@link">
44
+ <xsl:attribute name="href"><xsl:value-of select="@link"/></xsl:attribute>
45
+ </xsl:if>
46
+ <xsl:if test="@backLink">
47
+ <xsl:attribute name="name"><xsl:value-of select="@backLink"/></xsl:attribute>
48
+ </xsl:if>
49
+ <xsl:value-of select="@title" />
50
+ </a>
51
+ <span> <xsl:value-of select="@page" /> </span>
52
+ </div>
53
+ </xsl:if>
54
+ <ul>
55
+ <xsl:apply-templates select="outline:item"/>
56
+ </ul>
57
+ </li>
58
+ </xsl:template>
59
+ </xsl:stylesheet>
@@ -4,7 +4,7 @@
4
4
  "config/tools/launcher/launcher.txt" 0x6A3047DB
5
5
  "config/tools/tlm_extractor/README.txt" 0x93B2C07E
6
6
  "config/tools/tlm_viewer/tlm_viewer.txt" 0xD9071527
7
- "config/tools/handbook_creator/default_toc.xsl" 0x4122A040
7
+ "config/tools/handbook_creator/default_toc.xsl" 0x00FD130E
8
8
  "config/tools/handbook_creator/templates/command_toc.html.erb" 0x9159BCF9
9
9
  "config/tools/handbook_creator/templates/title.html.erb" 0xBC66E2BC
10
10
  "config/tools/handbook_creator/templates/footer.html.erb" 0x0E1F9800
@@ -1,59 +1,59 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <xsl:stylesheet version="1.0"
3
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
4
- xmlns:outline="http://code.google.com/p/wkhtmltopdf/outline"
5
- xmlns="http://www.w3.org/1999/xhtml">
6
- <xsl:output doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
7
- doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
8
- indent="yes" />
9
- <xsl:template match="outline:outline">
10
- <html>
11
- <head>
12
- <title>Table of Contents</title>
13
- <style>
14
- h1 {
15
- text-align: center;
16
- font-size: 20px;
17
- font-family: arial;
18
- }
19
- div {border-bottom: 1px dashed rgb(200,200,200);}
20
- span {float: right;}
21
- li {list-style: none;}
22
- ul {
23
- font-size: 20px;
24
- font-family: arial;
25
- }
26
- ul ul {font-size: 80%; }
27
- ul {padding-left: 0em;}
28
- ul ul {padding-left: 1em;}
29
- a {text-decoration:none; color: black;}
30
- </style>
31
- </head>
32
- <body>
33
- <h1>Table of Contents</h1>
34
- <ul><xsl:apply-templates select="outline:item/outline:item"/></ul>
35
- </body>
36
- </html>
37
- </xsl:template>
38
- <xsl:template match="outline:item">
39
- <li>
40
- <xsl:if test="@title!=''">
41
- <div>
42
- <a>
43
- <xsl:if test="@link">
44
- <xsl:attribute name="href"><xsl:value-of select="@link"/></xsl:attribute>
45
- </xsl:if>
46
- <xsl:if test="@backLink">
47
- <xsl:attribute name="name"><xsl:value-of select="@backLink"/></xsl:attribute>
48
- </xsl:if>
49
- <xsl:value-of select="@title" />
50
- </a>
51
- <span> <xsl:value-of select="@page" /> </span>
52
- </div>
53
- </xsl:if>
54
- <ul>
55
- <xsl:apply-templates select="outline:item"/>
56
- </ul>
57
- </li>
58
- </xsl:template>
59
- </xsl:stylesheet>
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <xsl:stylesheet version="2.0"
3
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
4
+ xmlns:outline="http://code.google.com/p/wkhtmltopdf/outline"
5
+ xmlns="http://www.w3.org/1999/xhtml">
6
+ <xsl:output doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
7
+ doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
8
+ indent="yes" />
9
+ <xsl:template match="outline:outline">
10
+ <html>
11
+ <head>
12
+ <title>Table of Contents</title>
13
+ <style>
14
+ h1 {
15
+ text-align: center;
16
+ font-size: 20px;
17
+ font-family: arial;
18
+ }
19
+ div {border-bottom: 1px dashed rgb(200,200,200);}
20
+ span {float: right;}
21
+ li {list-style: none;}
22
+ ul {
23
+ font-size: 20px;
24
+ font-family: arial;
25
+ }
26
+ ul ul {font-size: 80%; }
27
+ ul {padding-left: 0em;}
28
+ ul ul {padding-left: 1em;}
29
+ a {text-decoration:none; color: black;}
30
+ </style>
31
+ </head>
32
+ <body>
33
+ <h1>Table of Contents</h1>
34
+ <ul><xsl:apply-templates select="outline:item/outline:item"/></ul>
35
+ </body>
36
+ </html>
37
+ </xsl:template>
38
+ <xsl:template match="outline:item">
39
+ <li>
40
+ <xsl:if test="@title!=''">
41
+ <div>
42
+ <a>
43
+ <xsl:if test="@link">
44
+ <xsl:attribute name="href"><xsl:value-of select="@link"/></xsl:attribute>
45
+ </xsl:if>
46
+ <xsl:if test="@backLink">
47
+ <xsl:attribute name="name"><xsl:value-of select="@backLink"/></xsl:attribute>
48
+ </xsl:if>
49
+ <xsl:value-of select="@title" />
50
+ </a>
51
+ <span> <xsl:value-of select="@page" /> </span>
52
+ </div>
53
+ </xsl:if>
54
+ <ul>
55
+ <xsl:apply-templates select="outline:item"/>
56
+ </ul>
57
+ </li>
58
+ </xsl:template>
59
+ </xsl:stylesheet>
@@ -256,7 +256,7 @@ module Cosmos
256
256
  # Handle handshake warnings and errors
257
257
  if status == "OK" and code != 0
258
258
  unless @ignored_error_codes[handshake_cmd.handshake.handshake.target_name].include? code
259
- Logger.warn "Warning sending command (#{code}): #{source}"
259
+ Logger.warn "#{@name}: Warning sending command (#{code}): #{source}"
260
260
  end
261
261
  elsif status == "ERROR"
262
262
  unless @ignored_error_codes[handshake_cmd.handshake.handshake.target_name].include? code
@@ -295,7 +295,7 @@ module Cosmos
295
295
  command.received_count += 1
296
296
 
297
297
  # Put a log of the command onto the server for the user to see
298
- Logger.info("External Command: " + System.commands.format(linc_handshake.identified_command, System.targets[linc_handshake.identified_command.target_name].ignored_parameters))
298
+ Logger.info("#{@name}: External Command: " + System.commands.format(linc_handshake.identified_command, System.targets[linc_handshake.identified_command.target_name].ignored_parameters))
299
299
 
300
300
  # Log the command to the command log(s)
301
301
  @packet_log_writer_pairs.each do |packet_log_writer_pair|
@@ -361,7 +361,7 @@ module Cosmos
361
361
  if @handshake
362
362
  timed_out = false
363
363
  else
364
- Logger.warn "No handshake - must be timeout."
364
+ Logger.warn "#{@name}: No handshake - must be timeout."
365
365
  timed_out = true
366
366
  end
367
367
 
@@ -156,7 +156,7 @@ module Cosmos
156
156
  end
157
157
 
158
158
  def log_discard(length, found)
159
- Logger.error("Sync #{'not ' unless found}found. Discarding #{length} bytes of data.")
159
+ Logger.error("#{@interface ? @interface.name : ""}: Sync #{'not ' unless found}found. Discarding #{length} bytes of data.")
160
160
  if @data.length >= 0
161
161
  Logger.error(sprintf("Starting: 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X\n",
162
162
  @data.length >= 1 ? @data.getbyte(0) : 0,
@@ -140,7 +140,7 @@ module Cosmos
140
140
  crc = BinaryAccessor.read(@bit_offset, @bit_size, :UINT, data, @endianness)
141
141
  calculated_crc = @crc.calc(data[0...(@bit_offset / 8)])
142
142
  if calculated_crc != crc
143
- Logger.error "Invalid CRC detected! Calculated 0x#{calculated_crc.to_s(16).upcase} vs found 0x#{crc.to_s(16).upcase}."
143
+ Logger.error "#{@interface ? @interface.name : ""}: Invalid CRC detected! Calculated 0x#{calculated_crc.to_s(16).upcase} vs found 0x#{crc.to_s(16).upcase}."
144
144
  if @bad_strategy == DISCONNECT
145
145
  return :DISCONNECT
146
146
  end
@@ -146,13 +146,13 @@ module Cosmos
146
146
  # Write the packet value with each of the values received
147
147
  response_values = response_string.scan(response_regexp)[0]
148
148
  if !response_values || (response_values.length != response_item_names.length)
149
- handle_error("#{@interface.name}: Unexpected response: #{response_string}")
149
+ handle_error("#{@interface ? @interface.name : ""}: Unexpected response: #{response_string}")
150
150
  else
151
151
  response_values.each_with_index do |value, i|
152
152
  begin
153
153
  result_packet.write(response_item_names[i], value)
154
154
  rescue => error
155
- handle_error("#{@interface.name}: Could not write value #{value} due to #{error.message}")
155
+ handle_error("#{@interface ? @interface.name : ""}: Could not write value #{value} due to #{error.message}")
156
156
  break
157
157
  end
158
158
  end
@@ -234,7 +234,7 @@ module Cosmos
234
234
  sleep(@response_polling_period)
235
235
  retry if !response_timeout_time
236
236
  retry if response_timeout_time and Time.now < response_timeout_time
237
- handle_error("#{@interface.name}: Timeout waiting for response")
237
+ handle_error("#{@interface ? @interface.name : ""}: Timeout waiting for response")
238
238
  end
239
239
 
240
240
  @response_template = nil
@@ -49,7 +49,7 @@ module Cosmos
49
49
  begin
50
50
  data = @stream.read
51
51
  rescue Timeout::Error
52
- Logger.instance.error "Timeout waiting for data to be read"
52
+ Logger.instance.error "#{@name}: Timeout waiting for data to be read"
53
53
  data = nil
54
54
  end
55
55
  return nil if data.nil? or data.length <= 0
@@ -132,7 +132,7 @@ module Cosmos
132
132
  end
133
133
  rescue Exception => err
134
134
  shutdown_interfaces(@write_interface_infos)
135
- Logger.instance.error("Tcpip server write thread unexpectedly died")
135
+ Logger.instance.error("#{@name}: Tcpip server write thread unexpectedly died")
136
136
  Logger.instance.error(err.formatted)
137
137
  end
138
138
  end
@@ -144,7 +144,7 @@ module Cosmos
144
144
  end
145
145
  rescue Exception => err
146
146
  shutdown_interfaces(@write_interface_infos)
147
- Logger.instance.error("Tcpip server write raw thread unexpectedly died")
147
+ Logger.instance.error("#{@name}: Tcpip server write raw thread unexpectedly died")
148
148
  Logger.instance.error(err.formatted)
149
149
  end
150
150
  end
@@ -346,7 +346,7 @@ module Cosmos
346
346
  break if @cancel_threads
347
347
  end
348
348
  rescue => err
349
- Logger.instance.error("Tcpip server listen thread unexpectedly died")
349
+ Logger.instance.error("#{@name}: Tcpip server listen thread unexpectedly died")
350
350
  Logger.instance.error(err.formatted)
351
351
  end
352
352
  end
@@ -372,7 +372,7 @@ module Cosmos
372
372
  if not System.instance.acl.allow_addr?(addr)
373
373
  # Reject connection
374
374
  Cosmos.close_socket(socket)
375
- Logger.instance.info "Tcpip server rejected connection from #{hostname}(#{host_ip}):#{port}"
375
+ Logger.instance.info "#{@name}: Tcpip server rejected connection from #{hostname}(#{host_ip}):#{port}"
376
376
  return
377
377
  end
378
378
  end
@@ -417,7 +417,7 @@ module Cosmos
417
417
  end
418
418
  start_read_thread(@read_interface_infos[-1])
419
419
  end
420
- Logger.instance.info "Tcpip server accepted connection from #{hostname}(#{host_ip}):#{port}"
420
+ Logger.instance.info "#{@name}: Tcpip server accepted connection from #{hostname}(#{host_ip}):#{port}"
421
421
  end
422
422
 
423
423
  def start_read_thread(interface_info)
@@ -427,10 +427,10 @@ module Cosmos
427
427
  begin
428
428
  read_thread_body(interface_info.interface)
429
429
  rescue Exception => err
430
- Logger.instance.error "Tcpip server read thread unexpectedly died"
430
+ Logger.instance.error "#{@name}: Tcpip server read thread unexpectedly died"
431
431
  Logger.instance.error err.formatted
432
432
  end
433
- Logger.instance.info "Tcpip server lost read connection to #{interface_info.hostname}(#{interface_info.host_ip}):#{interface_info.port}"
433
+ Logger.instance.info "#{@name}: Tcpip server lost read connection to #{interface_info.hostname}(#{interface_info.host_ip}):#{interface_info.port}"
434
434
  @read_threads.delete(Thread.current)
435
435
 
436
436
  index_to_delete = nil
@@ -453,7 +453,7 @@ module Cosmos
453
453
  end
454
454
  end
455
455
  rescue Exception => err
456
- Logger.instance.error "Tcpip server read thread unexpectedly died"
456
+ Logger.instance.error "#{@name}: Tcpip server read thread unexpectedly died"
457
457
  Logger.instance.error err.formatted
458
458
  end
459
459
  end
@@ -500,7 +500,7 @@ module Cosmos
500
500
  end
501
501
 
502
502
  def interface_disconnect(interface_info)
503
- Logger.instance.info "Tcpip server lost write connection to "\
503
+ Logger.instance.info "#{@name}: Tcpip server lost write connection to "\
504
504
  "#{interface_info.hostname}(#{interface_info.host_ip}):#{interface_info.port}"
505
505
  interface_info.interface.disconnect
506
506
  interface_info.interface.raw_logger_pair.stop if interface_info.interface.raw_logger_pair
@@ -552,13 +552,13 @@ module Cosmos
552
552
  next
553
553
  end
554
554
  # Client has disconnected (or is invalidly sending data on the socket)
555
- Logger.instance.info "Tcpip server lost write connection to #{interface_info.hostname}(#{interface_info.host_ip}):#{interface_info.port}"
555
+ Logger.instance.info "#{@name}: Tcpip server lost write connection to #{interface_info.hostname}(#{interface_info.host_ip}):#{interface_info.port}"
556
556
  interface_info.interface.disconnect
557
557
  interface_info.interface.raw_logger_pair.stop if interface_info.interface.raw_logger_pair
558
558
  indexes_to_delete.unshift(index) # Put later indexes at front of array
559
559
  rescue Errno::ECONNRESET, Errno::ECONNABORTED, IOError
560
560
  # Client has disconnected
561
- Logger.instance.info "Tcpip server lost write connection to #{interface_info.hostname}(#{interface_info.host_ip}):#{interface_info.port}"
561
+ Logger.instance.info "#{@name}: Tcpip server lost write connection to #{interface_info.hostname}(#{interface_info.host_ip}):#{interface_info.port}"
562
562
  interface_info.interface.disconnect
563
563
  interface_info.interface.raw_logger_pair.stop if interface_info.interface.raw_logger_pair
564
564
  indexes_to_delete.unshift(index) # Put later indexes at front of array
@@ -600,13 +600,13 @@ module Cosmos
600
600
  need_disconnect = true
601
601
  rescue Exception => err
602
602
  if err.message != "Stream not connected for write_raw"
603
- Logger.instance.error "Error sending to client: #{err.class} #{err.message}"
603
+ Logger.instance.error "#{@name}: Error sending to client: #{err.class} #{err.message}"
604
604
  end
605
605
  need_disconnect = true
606
606
  end
607
607
 
608
608
  if need_disconnect
609
- Logger.instance.info "Tcpip server lost write connection to #{interface_info.hostname}(#{interface_info.host_ip}):#{interface_info.port}"
609
+ Logger.instance.info "#{@name}: Tcpip server lost write connection to #{interface_info.hostname}(#{interface_info.host_ip}):#{interface_info.port}"
610
610
  interface_info.interface.disconnect
611
611
  interface_info.interface.raw_logger_pair.stop if interface_info.interface.raw_logger_pair
612
612
  indexes_to_delete.unshift(index) # Put later indexes at front of array
@@ -130,7 +130,7 @@ module Cosmos
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)
133
+ index = split_string.rindex(item_name)
134
134
  comparison_to_eval = split_string[(index + 1)..(split_string.length - 1)].join(" ")
135
135
  raise "ERROR: Use '==' instead of '=': #{text}" if split_string[3] == '='
136
136
  return [target_name, packet_name, item_name, comparison_to_eval]
@@ -156,7 +156,7 @@ module Cosmos
156
156
  msg << "PDF Handbooks created successfully"
157
157
  progress_dialog.append_text(msg)
158
158
  else
159
- progress_dialog.append_text("\nPDF Handbooks could not be created.\n\nIs wkhtmltopdf in your PATH and are all existing pdfs closed?\n\nUsing version 0.11.0_rc1 of wkhtmltox is recommended which can be found at: http://download.gna.org/wkhtmltopdf/obsolete/\n\nVersion 0.12.x has shown issues with Handbook Creator's default templates.")
159
+ progress_dialog.append_text("\nPDF Handbooks could not be created.\n\nIs wkhtmltopdf in your PATH and are all existing pdfs closed?\n\nwkhtmltopdf can be found at: https://wkhtmltopdf.org/downloads.html.")
160
160
  end
161
161
  rescue => error
162
162
  progress_dialog.append_text("\n\nError processing:\n#{error.formatted}")
@@ -1,12 +1,12 @@
1
1
  # encoding: ascii-8bit
2
2
 
3
- COSMOS_VERSION = '4.4.1'
3
+ COSMOS_VERSION = '4.4.2'
4
4
  module Cosmos
5
5
  module Version
6
6
  MAJOR = '4'
7
7
  MINOR = '4'
8
- PATCH = '1'
9
- BUILD = 'f8e9c89b2d7fcd0c558806ff6c9dd59d167786e4'
8
+ PATCH = '2'
9
+ BUILD = '41a1376a7b11d7bb3498dd6fd0a13c1a9b383946'
10
10
  end
11
- VERSION = '4.4.1'
11
+ VERSION = '4.4.2'
12
12
  end
@@ -179,7 +179,7 @@ module Cosmos
179
179
  it "warns if an error code is set" do
180
180
  allow_any_instance_of(TcpipClientStream).to receive(:read).and_return @handshake.buffer(false)
181
181
  expect(Logger).to receive(:warn) do |msg|
182
- expect(msg).to eql "Warning sending command (12345): BAD"
182
+ expect(msg).to eql "LincInterface: Warning sending command (12345): BAD"
183
183
  end
184
184
  t = Thread.new do
185
185
  sleep 0.1
@@ -23,7 +23,10 @@ module Cosmos
23
23
  plw = PacketLogWriter.new(:CMD,nil,true,nil,10000000,nil,false)
24
24
  @cmd_packets = []
25
25
  pkt = System.commands.packet("SYSTEM","STARTLOGGING").clone
26
- pkt.received_time = Time.new(2020,1,31,12,30,15)
26
+ # Avoid precision errors by rounding to nearest second and then add 1 to ensure
27
+ # the time is AFTER the initial META packet with the current time
28
+ @time = Time.now.round + 1
29
+ pkt.received_time = @time
27
30
  pkt.write('label','PKT1')
28
31
  plw.write(pkt)
29
32
  @cmd_packet_length = pkt.length
@@ -43,7 +46,7 @@ module Cosmos
43
46
  plw = PacketLogWriter.new(:TLM,nil,true,nil,10000000,nil,false)
44
47
  @tlm_packets = []
45
48
  pkt = System.telemetry.packet("SYSTEM","LIMITS_CHANGE").clone
46
- pkt.received_time = Time.new(2020,2,1,12,30,15)
49
+ pkt.received_time = @time
47
50
  pkt.write('PACKET','PKT1')
48
51
  plw.write(pkt)
49
52
  @tlm_packet_length = pkt.length
@@ -239,10 +242,11 @@ module Cosmos
239
242
  expect(packet_offsets).to eql [PacketLogReader::COSMOS4_HEADER_LENGTH, PacketLogReader::COSMOS4_HEADER_LENGTH + meta_header_length + meta_length, PacketLogReader::COSMOS4_HEADER_LENGTH + meta_header_length + meta_length + header_length + @cmd_packet_length, PacketLogReader::COSMOS4_HEADER_LENGTH + meta_header_length + meta_length + (header_length + @cmd_packet_length) * 2]
240
243
 
241
244
  expect(@plr.open(Dir[File.join(@log_path,"*cmd.bin")][0])).to eql [true, nil]
242
- pkt = @plr.read_at_offset(packet_offsets[2])
245
+ pkt = @plr.read_at_offset(packet_offsets[2]) # Grab the second STARTLOGGING (META is 0)
243
246
  expect(pkt.target_name).to eql "SYSTEM"
244
247
  expect(pkt.packet_name).to eql "STARTLOGGING"
245
- expect(pkt.received_time).to eql Time.new(2020,1,31,12,30,16)
248
+ expect(pkt.read('LABEL')).to eql "PKT2"
249
+ expect(pkt.received_time).to eql @time + 1
246
250
  @plr.close
247
251
  end
248
252
 
@@ -257,10 +261,11 @@ module Cosmos
257
261
  expect(packet_offsets).to eql [PacketLogReader::COSMOS4_HEADER_LENGTH, PacketLogReader::COSMOS4_HEADER_LENGTH + meta_header_length + meta_length, PacketLogReader::COSMOS4_HEADER_LENGTH + meta_header_length + meta_length + header_length + @tlm_packet_length, PacketLogReader::COSMOS4_HEADER_LENGTH + meta_header_length + meta_length + (header_length + @tlm_packet_length) * 2]
258
262
 
259
263
  expect(@plr.open(Dir[File.join(@log_path,"*tlm.bin")][0])).to eql [true, nil]
260
- pkt = @plr.read_at_offset(packet_offsets[2])
264
+ pkt = @plr.read_at_offset(packet_offsets[2]) # Grab the second LIMITS_CHANGE (META is 0)
261
265
  expect(pkt.target_name).to eql "SYSTEM"
262
266
  expect(pkt.packet_name).to eql "LIMITS_CHANGE"
263
- expect(pkt.received_time).to eql Time.new(2020,2,1,12,30,16)
267
+ expect(pkt.read('PACKET')).to eql "PKT2"
268
+ expect(pkt.received_time).to eql @time + 1
264
269
  @plr.close
265
270
  end
266
271
  end
@@ -415,9 +420,8 @@ module Cosmos
415
420
  end
416
421
 
417
422
  it "returns all packets if the start time is before all" do
418
- time = Time.new(2000,1,31,12,30,16)
419
423
  index = 0
420
- @plr.each(Dir[File.join(@log_path,"*cmd.bin")][0], true, time) do |packet|
424
+ @plr.each(Dir[File.join(@log_path,"*cmd.bin")][0], true, @time) do |packet|
421
425
  next if packet.packet_name == 'META'
422
426
  expect(packet.target_name).to eql @cmd_packets[index].target_name
423
427
  expect(packet.packet_name).to eql @cmd_packets[index].packet_name
@@ -429,51 +433,48 @@ module Cosmos
429
433
  end
430
434
 
431
435
  it "returns no packets if the start time is after all" do
432
- time = Time.new(2030,2,1,12,30,16)
433
436
  index = 0
434
- @plr.each(Dir[File.join(@log_path,"*tlm.bin")][0], true, time) do |packet|
437
+ @plr.each(Dir[File.join(@log_path,"*tlm.bin")][0], true, @time + 100) do |packet|
435
438
  index += 1
436
439
  end
437
440
  expect(index).to eql 0
438
441
  end
439
442
 
440
443
  it "returns all packets after a start time" do
441
- time = Time.new(2020,1,31,12,30,16)
442
444
  index = 0
443
- @plr.each(Dir[File.join(@log_path,"*cmd.bin")][0], true, time) do |packet|
444
- expect(packet.target_name).to eql @cmd_packets[index+1].target_name
445
- expect(packet.packet_name).to eql @cmd_packets[index+1].packet_name
446
- expect(packet.received_time).to eql @cmd_packets[index+1].received_time
447
- expect(packet.read('LABEL')).to eql @cmd_packets[index+1].read('LABEL')
445
+ @plr.each(Dir[File.join(@log_path,"*cmd.bin")][0], true, @time) do |packet|
446
+ next if packet.packet_name == 'META'
447
+ expect(packet.target_name).to eql @cmd_packets[index].target_name
448
+ expect(packet.packet_name).to eql @cmd_packets[index].packet_name
449
+ expect(packet.received_time).to eql @cmd_packets[index].received_time
450
+ expect(packet.read('LABEL')).to eql @cmd_packets[index].read('LABEL')
448
451
  index += 1
449
452
  end
450
- expect(index).to eql 2
453
+ expect(index).to eql 3
451
454
 
452
- time = Time.new(2020,2,1,12,30,16)
453
- index = 0
454
- @plr.each(Dir[File.join(@log_path,"*tlm.bin")][0], true, time) do |packet|
455
- expect(packet.target_name).to eql @tlm_packets[index+1].target_name
456
- expect(packet.packet_name).to eql @tlm_packets[index+1].packet_name
457
- expect(packet.received_time).to eql @tlm_packets[index+1].received_time
458
- expect(packet.read('PACKET')).to eql @tlm_packets[index+1].read('PACKET')
455
+ index = 1 # @time + 1
456
+ @plr.each(Dir[File.join(@log_path,"*tlm.bin")][0], true, @time + 1) do |packet|
457
+ next if packet.packet_name == 'META'
458
+ expect(packet.target_name).to eql @tlm_packets[index].target_name
459
+ expect(packet.packet_name).to eql @tlm_packets[index].packet_name
460
+ expect(packet.received_time).to eql @tlm_packets[index].received_time
461
+ expect(packet.read('PACKET')).to eql @tlm_packets[index].read('PACKET')
459
462
  index += 1
460
463
  end
461
- expect(index).to eql 2
464
+ expect(index).to eql 3
462
465
  end
463
466
 
464
467
  it "returns no packets if the end time is before all" do
465
- time = Time.new(2000,1,31,12,30,16)
466
468
  index = 0
467
- @plr.each(Dir[File.join(@log_path,"*tlm.bin")][0], true, nil, time) do |packet|
469
+ @plr.each(Dir[File.join(@log_path,"*tlm.bin")][0], true, nil, @time - 10) do |packet|
468
470
  index += 1
469
471
  end
470
472
  expect(index).to eql 0
471
473
  end
472
474
 
473
475
  it "returns all packets if the end time is after all" do
474
- time = Time.new(2030,2,1,12,30,16)
475
476
  index = 0
476
- @plr.each(Dir[File.join(@log_path,"*cmd.bin")][0], true, nil, time) do |packet|
477
+ @plr.each(Dir[File.join(@log_path,"*cmd.bin")][0], true, nil, @time + 10) do |packet|
477
478
  next if packet.packet_name == 'META'
478
479
  expect(packet.target_name).to eql @cmd_packets[index].target_name
479
480
  expect(packet.packet_name).to eql @cmd_packets[index].packet_name
@@ -485,9 +486,8 @@ module Cosmos
485
486
  end
486
487
 
487
488
  it "returns all packets before an end time" do
488
- time = Time.new(2020,1,31,12,30,16)
489
489
  index = 0
490
- @plr.each(Dir[File.join(@log_path,"*cmd.bin")][0], true, nil, time) do |packet|
490
+ @plr.each(Dir[File.join(@log_path,"*cmd.bin")][0], true, nil, @time) do |packet|
491
491
  next if packet.packet_name == 'META'
492
492
  expect(packet.target_name).to eql @cmd_packets[index].target_name
493
493
  expect(packet.packet_name).to eql @cmd_packets[index].packet_name
@@ -495,11 +495,10 @@ module Cosmos
495
495
  expect(packet.read('LABEL')).to eql @cmd_packets[index].read('LABEL')
496
496
  index += 1
497
497
  end
498
- expect(index).to eql 2
498
+ expect(index).to eql 1
499
499
 
500
- time = Time.new(2020,2,1,12,30,16)
501
500
  index = 0
502
- @plr.each(Dir[File.join(@log_path,"*tlm.bin")][0], true, nil, time) do |packet|
501
+ @plr.each(Dir[File.join(@log_path,"*tlm.bin")][0], true, nil, @time + 1) do |packet|
503
502
  next if packet.packet_name == 'META'
504
503
  expect(packet.target_name).to eql @tlm_packets[index].target_name
505
504
  expect(packet.packet_name).to eql @tlm_packets[index].packet_name
@@ -148,6 +148,10 @@ module Cosmos
148
148
  expect(extract_fields_from_check_text("TARGET PACKET ITEM < 5")).to eql(['TARGET', 'PACKET', 'ITEM', '< 5'])
149
149
  end
150
150
 
151
+ it "should support target packet items named the same" do
152
+ expect(extract_fields_from_check_text("TEST TEST TEST == 5")).to eql(['TEST', 'TEST', 'TEST', '== 5'])
153
+ end
154
+
151
155
  it "should complain about trying to do an = comparison" do
152
156
  expect { extract_fields_from_check_text("TARGET PACKET ITEM = 5") }.to raise_error(/ERROR: Use/)
153
157
  end
@@ -160,4 +164,3 @@ module Cosmos
160
164
 
161
165
  end
162
166
  end
163
-
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cosmos
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.4.1
4
+ version: 4.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Melton
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2019-12-30 00:00:00.000000000 Z
12
+ date: 2020-03-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -436,6 +436,9 @@ dependencies:
436
436
  - - "~>"
437
437
  - !ruby/object:Gem::Version
438
438
  version: '1.0'
439
+ - - "<"
440
+ - !ruby/object:Gem::Version
441
+ version: '1.3'
439
442
  type: :development
440
443
  prerelease: false
441
444
  version_requirements: !ruby/object:Gem::Requirement
@@ -443,6 +446,9 @@ dependencies:
443
446
  - - "~>"
444
447
  - !ruby/object:Gem::Version
445
448
  version: '1.0'
449
+ - - "<"
450
+ - !ruby/object:Gem::Version
451
+ version: '1.3'
446
452
  description: |2
447
453
  Ball Aerospace COSMOS provides all the functionality needed to send
448
454
  commands to and receive data from one or more embedded systems