cosmos 4.0.0 → 4.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. data/Manifest.txt +16 -3
  3. data/autohotkey/tools/ConfigEditor +16 -0
  4. data/autohotkey/tools/packet_viewer.ahk +2 -1
  5. data/autohotkey/tools/tlm_viewer.ahk +2 -0
  6. data/autohotkey/tools/tool_launch.rb +38 -0
  7. data/data/COSMOS_Architecture.png +0 -0
  8. data/data/config/system.yaml +79 -2
  9. data/data/crc.txt +29 -28
  10. data/demo/Gemfile +1 -1
  11. data/demo/config/data/crc.txt +7 -2
  12. data/demo/config/targets/SYSTEM/cmd_tlm/meta_tlm.txt +10 -0
  13. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server.txt +1 -1
  14. data/demo/tools/mac/ConfigEditor.app/Contents/Info.plist +38 -0
  15. data/demo/tools/mac/ConfigEditor.app/Contents/MacOS/ConfigEditor.rb +16 -0
  16. data/demo/tools/mac/ConfigEditor.app/Contents/MacOS/main.sh +10 -0
  17. data/demo/tools/mac/ConfigEditor.app/Contents/MacOS/tool_launch.rb +38 -0
  18. data/demo/tools/mac/ConfigEditor.app/Contents/Resources/appIcon.icns +0 -0
  19. data/install/Gemfile +1 -1
  20. data/install/config/data/crc.txt +6 -1
  21. data/install/config/targets/SYSTEM/cmd_tlm/meta_tlm.txt +9 -0
  22. data/install/tools/mac/ConfigEditor.app/Contents/Info.plist +38 -0
  23. data/install/tools/mac/ConfigEditor.app/Contents/MacOS/ConfigEditor.rb +16 -0
  24. data/install/tools/mac/ConfigEditor.app/Contents/MacOS/main.sh +10 -0
  25. data/install/tools/mac/ConfigEditor.app/Contents/MacOS/tool_launch.rb +38 -0
  26. data/install/tools/mac/ConfigEditor.app/Contents/Resources/appIcon.icns +0 -0
  27. data/lib/cosmos/gui/dialogs/set_tlm_dialog.rb +3 -0
  28. data/lib/cosmos/gui/dialogs/tlm_graph_dialog.rb +7 -13
  29. data/lib/cosmos/interfaces/interface.rb +1 -1
  30. data/lib/cosmos/packets/commands.rb +5 -0
  31. data/lib/cosmos/packets/packet.rb +8 -0
  32. data/lib/cosmos/packets/packet_item.rb +9 -0
  33. data/lib/cosmos/script/api_shared.rb +1 -29
  34. data/lib/cosmos/script/scripting.rb +2 -4
  35. data/lib/cosmos/script/telemetry.rb +38 -22
  36. data/lib/cosmos/system/system.rb +51 -53
  37. data/lib/cosmos/tools/cmd_tlm_server/api.rb +27 -4
  38. data/lib/cosmos/tools/cmd_tlm_server/gui/packets_tab.rb +1 -7
  39. data/lib/cosmos/tools/config_editor/config_editor.rb +9 -1
  40. data/lib/cosmos/tools/config_editor/config_editor_frame.rb +16 -1
  41. data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +1 -9
  42. data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +1 -1
  43. data/lib/cosmos/tools/tlm_viewer/widgets/canvas_clickable.rb +33 -0
  44. data/lib/cosmos/tools/tlm_viewer/widgets/canvas_widget.rb +14 -6
  45. data/lib/cosmos/tools/tlm_viewer/widgets/canvasdot_widget.rb +15 -17
  46. data/lib/cosmos/tools/tlm_viewer/widgets/canvasimage_widget.rb +5 -3
  47. data/lib/cosmos/tools/tlm_viewer/widgets/canvasimagevalue_widget.rb +17 -15
  48. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabel_widget.rb +13 -6
  49. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabelvalue_widget.rb +5 -7
  50. data/lib/cosmos/tools/tlm_viewer/widgets/canvasline_widget.rb +2 -4
  51. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslinevalue_widget.rb +8 -11
  52. data/lib/cosmos/tools/tlm_viewer/widgets/canvasvalue_widget.rb +2 -4
  53. data/lib/cosmos/top_level.rb +14 -0
  54. data/lib/cosmos/utilities/ruby_lex_utils.rb +1 -1
  55. data/lib/cosmos/version.rb +4 -4
  56. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm.txt +3 -3
  57. data/spec/install/config/targets/SYSTEM/cmd_tlm/meta_tlm.txt +10 -0
  58. data/spec/packets/commands_spec.rb +10 -0
  59. data/spec/packets/packet_spec.rb +62 -0
  60. data/spec/script/telemetry_spec.rb +8 -6
  61. data/spec/system/system_spec.rb +192 -0
  62. data/spec/system/target_spec.rb +6 -5
  63. metadata +18 -5
  64. data/demo/config/targets/SYSTEM/cmd_tlm/meta_cmd_tlm.txt +0 -16
  65. data/install/config/targets/SYSTEM/cmd_tlm/meta_cmd_tlm.txt +0 -14
  66. data/spec/install/config/targets/SYSTEM/cmd_tlm/meta_cmd_tlm.txt +0 -16
@@ -11,7 +11,6 @@
11
11
  require 'cosmos/tools/tlm_viewer/widgets/widget'
12
12
 
13
13
  module Cosmos
14
-
15
14
  class CanvasvalueWidget
16
15
  include Widget
17
16
 
@@ -53,7 +52,7 @@ module Cosmos
53
52
  # This code uses the booleans set by the process_settings function and evaluates it to logically determine
54
53
  # if the item should be drawn on the canvas as "on" or "off".
55
54
  begin
56
- @item_settings.each_with_index do |item,index|
55
+ @item_settings.each_with_index do |item, index|
57
56
  next if @values[index].to_f.nan? || @values[index].to_f.infinite?
58
57
  eval_string << " " << item[0].to_s << " (" << @values[index].to_s << " " << item[1].to_s << " " << item[2].to_s << ")"
59
58
  end
@@ -121,5 +120,4 @@ module Cosmos
121
120
  end
122
121
  end
123
122
  end
124
-
125
- end # module Cosmos
123
+ end
@@ -345,6 +345,20 @@ module Cosmos
345
345
  thread
346
346
  end
347
347
 
348
+ # Runs a COSMOS tool
349
+ #
350
+ # @param tool_name [String] COSMOS tool to execute
351
+ # @param parameters [String] Parameters string to pass to the tool
352
+ def self.run_cosmos_tool(tool_name, parameters = '')
353
+ if Kernel.is_windows?
354
+ Cosmos.run_process("rubyw tools/#{tool_name} #{parameters}")
355
+ elsif Kernel.is_mac? and File.exist?("tools/mac/#{tool_name}.app")
356
+ Cosmos.run_process("open tools/mac/#{tool_name}.app --args #{parameters}")
357
+ else
358
+ Cosmos.run_process("ruby tools/#{tool_name} #{parameters}")
359
+ end
360
+ end
361
+
348
362
  # Runs an md5 sum over one or more files and returns the Digest::MD5 object.
349
363
  # Handles windows/unix new line differences but changes in whitespace will
350
364
  # change the md5 sum.
@@ -186,7 +186,7 @@ class RubyLexUtils
186
186
  # progress will be set as the processing progresses
187
187
  # @return [String] The text with all comments removed
188
188
  def remove_comments(text, progress_dialog = nil)
189
- comments_removed = text
189
+ comments_removed = text.clone
190
190
  @lex.reinitialize
191
191
  @lex.exception_on_syntax_error = false
192
192
  @lex_io.string = text
@@ -1,12 +1,12 @@
1
1
  # encoding: ascii-8bit
2
2
 
3
- COSMOS_VERSION = '4.0.0'
3
+ COSMOS_VERSION = '4.0.1'
4
4
  module Cosmos
5
5
  module Version
6
6
  MAJOR = '4'
7
7
  MINOR = '0'
8
- PATCH = '0'
9
- BUILD = '5fd7539d1e07cb9a71388e9cd0ec60b97a0f625a'
8
+ PATCH = '1'
9
+ BUILD = '012697c6665f9dd1c47b86ed75b21c9bc928973f'
10
10
  end
11
- VERSION = '4.0.0'
11
+ VERSION = '4.0.1'
12
12
  end
@@ -163,11 +163,11 @@ TELEMETRY INST PARAMS BIG_ENDIAN "Params set by SETPARAMS command"
163
163
  ITEM TIMESEC 48 32 UINT "Seconds since epoch (January 1st, 1970, midnight)"
164
164
  ITEM TIMEUS 80 32 UINT "Microseconds of second"
165
165
  ID_ITEM PKTID 112 16 UINT 1 "Packet id (The combination of CCSDS_APID and PACKET_ID identify the packet)"
166
- MACRO_APPEND_START 5 1
167
- APPEND_ITEM Value 16 UINT "Value setting"
166
+ <% 5.times do |i| %>
167
+ APPEND_ITEM VALUE<%= i %> 16 UINT "Value setting"
168
168
  STATE GOOD 0 GREEN
169
169
  STATE BAD 1 RED
170
- MACRO_APPEND_END
170
+ <% end %>
171
171
  ITEM TIMESECONDS 0 0 DERIVED "Derived floating-point time since epoch in seconds"
172
172
  READ_CONVERSION unix_time_seconds_conversion.rb TIMESEC TIMEUS
173
173
  FORMAT_STRING '%0.6f'
@@ -0,0 +1,10 @@
1
+ TELEMETRY SYSTEM META BIG_ENDIAN "System Meta Data Telemetry Packet"
2
+ APPEND_ID_ITEM PKTID 8 UINT 1 "Packet Id"
3
+ APPEND_ITEM CONFIG 256 STRING "Configuration Name"
4
+ APPEND_ITEM COSMOS_VERSION 240 STRING "COSMOS Version"
5
+ META READ_ONLY
6
+ APPEND_ITEM USER_VERSION 240 STRING "User Project Version"
7
+ META READ_ONLY
8
+ APPEND_ITEM RUBY_VERSION 240 STRING "Ruby Version"
9
+ META READ_ONLY
10
+ APPEND_ITEM OPERATOR_NAME 512 STRING "Operator Name"
@@ -276,6 +276,16 @@ module Cosmos
276
276
  expect(cmd.raw).to eql true
277
277
  expect(cmd.read("ITEM2")).to eql 10
278
278
  end
279
+
280
+ it "resets the buffer size" do
281
+ packet = @cmd.packet('TGT1', 'PKT1')
282
+ packet.buffer = "\x00" * (packet.defined_length + 1)
283
+ expect(packet.length).to eql 5
284
+ items = {"ITEM2" => 10}
285
+ cmd = @cmd.build_cmd("TGT1","PKT1",items)
286
+ expect(cmd.read("ITEM2")).to eql 10
287
+ expect(cmd.length).to eql 4
288
+ end
279
289
  end
280
290
 
281
291
  describe "format" do
@@ -501,6 +501,68 @@ module Cosmos
501
501
  expect(@p.read("ITEM2", :FORMATTED, "")).to eql ["1", "2", "3", "4", "5"]
502
502
  expect(@p.read("ITEM2", :WITH_UNITS, "")).to eql ["1 V", "2 V", "3 V", "4 V", "5 V"]
503
503
  end
504
+
505
+ context "with :DERIVED items" do
506
+ it "returns nil if no read_conversion defined" do
507
+ @p.append_item("item",0,:DERIVED)
508
+ i = @p.get_item("ITEM")
509
+ i.format_string = "0x%x"
510
+ i.states = {"TRUE"=>1, "FALSE"=>0}
511
+ i.units = "V"
512
+ expect(@p.read("ITEM", :RAW, "")).to be_nil
513
+ expect(@p.read_item(i, :RAW, "")).to be_nil
514
+ end
515
+
516
+ it "reads the RAW value" do
517
+ @p.append_item("item",0,:DERIVED)
518
+ i = @p.get_item("ITEM")
519
+ i.format_string = "0x%x"
520
+ i.states = {"TRUE"=>1, "FALSE"=>0}
521
+ i.units = "V"
522
+ i.read_conversion = GenericConversion.new("0")
523
+ expect(@p.read("ITEM", :RAW, "")).to eql 0
524
+ expect(@p.read_item(i, :RAW, "")).to eql 0
525
+ i.read_conversion = GenericConversion.new("1")
526
+ expect(@p.read("ITEM", :RAW, "")).to eql 1
527
+ expect(@p.read_item(i, :RAW, "")).to eql 1
528
+ end
529
+
530
+ it "reads the CONVERTED value" do
531
+ @p.append_item("item",0,:DERIVED)
532
+ i = @p.get_item("ITEM")
533
+ i.format_string = "0x%x"
534
+ i.states = {"TRUE"=>1, "FALSE"=>0}
535
+ i.units = "V"
536
+ i.read_conversion = GenericConversion.new("0")
537
+ expect(@p.read("ITEM", :CONVERTED, "")).to eql "FALSE"
538
+ expect(@p.read_item(i, :CONVERTED, "")).to eql "FALSE"
539
+ i.read_conversion = GenericConversion.new("1")
540
+ expect(@p.read("ITEM", :CONVERTED, "")).to eql "TRUE"
541
+ expect(@p.read_item(i, :CONVERTED, "")).to eql "TRUE"
542
+ end
543
+
544
+ it "reads the FORMATTED value" do
545
+ @p.append_item("item",0,:DERIVED)
546
+ i = @p.get_item("ITEM")
547
+ i.format_string = "0x%x"
548
+ i.states = {"TRUE"=>1, "FALSE"=>0}
549
+ i.units = "V"
550
+ i.read_conversion = GenericConversion.new("3")
551
+ expect(@p.read("ITEM", :FORMATTED, "")).to eql "0x3"
552
+ expect(@p.read_item(i, :FORMATTED, "")).to eql "0x3"
553
+ end
554
+
555
+ it "reads the WITH_UNITS value" do
556
+ @p.append_item("item",0,:DERIVED)
557
+ i = @p.get_item("ITEM")
558
+ i.format_string = "0x%x"
559
+ i.states = {"TRUE"=>1, "FALSE"=>0}
560
+ i.units = "V"
561
+ i.read_conversion = GenericConversion.new("3")
562
+ expect(@p.read("ITEM", :WITH_UNITS, "")).to eql "0x3 V"
563
+ expect(@p.read_item(i, :WITH_UNITS, "")).to eql "0x3 V"
564
+ end
565
+ end
504
566
  end
505
567
 
506
568
  describe "write and write_item" do
@@ -161,12 +161,14 @@ module Cosmos
161
161
  unsubscribe_packet_data(id)
162
162
  end
163
163
 
164
- it "subscribes and get limits events" do
165
- id = subscribe_packet_data([["INST","HEALTH_STATUS"]])
166
- CmdTlmServer.instance.post_packet(System.telemetry.packet("INST","HEALTH_STATUS"))
167
- packet = get_packet(id, true)
168
- expect(packet.target_name).to eql "INST"
169
- expect(packet.packet_name).to eql "HEALTH_STATUS"
164
+ it "subscribes and gets packets" do
165
+ id = subscribe_packet_data([["SYSTEM","META"]])
166
+ inject_tlm("SYSTEM", "META")
167
+ packet = get_packet(id)
168
+ expect(packet.target_name).to eql "SYSTEM"
169
+ expect(packet.packet_name).to eql "META"
170
+ expect(packet.received_time).to be_within(1).of Time.now
171
+ expect(packet.received_count).to eql 1
170
172
  unsubscribe_packet_data(id)
171
173
  end
172
174
  end
@@ -12,6 +12,7 @@ require 'spec_helper'
12
12
  require 'cosmos'
13
13
  require 'cosmos/system/system'
14
14
  require 'tempfile'
15
+ require 'fileutils'
15
16
 
16
17
  module Cosmos
17
18
 
@@ -50,6 +51,143 @@ module Cosmos
50
51
  # Don't check the actual paths but just that they exist
51
52
  expect(System.paths.keys).to eql %w(LOGS TMP SAVED_CONFIG TABLES HANDBOOKS PROCEDURES SEQUENCES)
52
53
  end
54
+
55
+ context "initializing SYSTEM META" do
56
+ before(:all) do
57
+ FileUtils.mv(File.join(@config_targets, 'SYSTEM', 'cmd_tlm', 'meta_tlm.txt'), Dir.pwd)
58
+ end
59
+ after(:all) do
60
+ FileUtils.mv(File.join(Dir.pwd, 'meta_tlm.txt'), File.join(@config_targets, 'SYSTEM', 'cmd_tlm'))
61
+ end
62
+
63
+ it "initializes the SYSTEM META with no definitions" do
64
+ tlm = System.telemetry.packet("SYSTEM", "META")
65
+ expect(tlm.read("PKTID")).to_not be_nil
66
+ expect(tlm.read("CONFIG")).to_not be_nil
67
+ expect(tlm.read("COSMOS_VERSION")).to_not be_nil
68
+ expect(tlm.read("RUBY_VERSION")).to_not be_nil
69
+ expect(tlm.read("USER_VERSION")).to_not be_nil
70
+ cmd = System.commands.packet("SYSTEM", "META")
71
+ expect(cmd.read("PKTID")).to eql tlm.read("PKTID")
72
+ expect(cmd.read("CONFIG")).to eql tlm.read("CONFIG")
73
+ expect(cmd.read("COSMOS_VERSION")).to eql tlm.read("COSMOS_VERSION")
74
+ expect(cmd.read("RUBY_VERSION")).to eql tlm.read("RUBY_VERSION")
75
+ expect(cmd.read("USER_VERSION")).to eql tlm.read("USER_VERSION")
76
+ end
77
+
78
+ it "defaults badly defined TELEMETRY SYSTEM META" do
79
+ file = File.open(File.join(@config_targets, 'SYSTEM', 'cmd_tlm', 'meta_tlm.txt'), 'w')
80
+ file.puts "TELEMETRY SYSTEM META BIG_ENDIAN"
81
+ file.puts "APPEND_ID_ITEM PKTID 8 UINT 1"
82
+ file.puts "APPEND_ITEM CONFIG 256 STRING"
83
+ file.puts "APPEND_ITEM COSMOS_VERSION 240 STRING"
84
+ file.puts "APPEND_ITEM USER_VERSION 240 STRING"
85
+ file.puts "APPEND_ITEM RUBY_VERSION 200 STRING" # Error in the RUBY_VERSION length
86
+ file.close
87
+
88
+ expect(Logger).to receive(:error) do |msg|
89
+ expect(msg).to eql "SYSTEM META not defined correctly due to RUBY_VERSION incorrect - defaulting"
90
+ end
91
+ tf = Tempfile.new('unittest')
92
+ tf.puts("AUTO_DECLARE_TARGETS")
93
+ tf.close
94
+ System.class_variable_set(:@@instance, nil)
95
+ System.new(tf.path)
96
+ tlm = System.telemetry.packet("SYSTEM", "META")
97
+ expect(tlm.read("PKTID")).to_not be_nil
98
+ expect(tlm.read("CONFIG")).to_not be_nil
99
+ expect(tlm.read("COSMOS_VERSION")).to_not be_nil
100
+ expect(tlm.get_item("COSMOS_VERSION").bit_size).to eql(240)
101
+ expect(tlm.read("RUBY_VERSION")).to_not be_nil
102
+ expect(tlm.read("USER_VERSION")).to_not be_nil
103
+ cmd = System.commands.packet("SYSTEM", "META")
104
+ expect(cmd.read("PKTID")).to eql tlm.read("PKTID")
105
+ expect(cmd.read("CONFIG")).to eql tlm.read("CONFIG")
106
+ expect(cmd.read("COSMOS_VERSION")).to eql tlm.read("COSMOS_VERSION")
107
+ expect(cmd.read("RUBY_VERSION")).to eql tlm.read("RUBY_VERSION")
108
+ expect(cmd.read("USER_VERSION")).to eql tlm.read("USER_VERSION")
109
+ tf.unlink
110
+ end
111
+
112
+ it "doesn't allow COMMAND SYSTEM META definitions" do
113
+ file = File.open(File.join(@config_targets, 'SYSTEM', 'cmd_tlm', 'meta_tlm.txt'), 'w')
114
+ file.puts "TELEMETRY SYSTEM META BIG_ENDIAN"
115
+ file.puts "APPEND_ID_ITEM PKTID 8 UINT 1"
116
+ file.puts "APPEND_ITEM CONFIG 256 STRING"
117
+ file.puts "APPEND_ITEM COSMOS_VERSION 240 STRING"
118
+ file.puts "APPEND_ITEM USER_VERSION 240 STRING"
119
+ file.puts "APPEND_ITEM RUBY_VERSION 240 STRING"
120
+ file.puts "APPEND_ITEM TEST 512 STRING ''"
121
+ # The command system meta definition is correct but not allowed
122
+ file.puts "COMMAND SYSTEM META BIG_ENDIAN"
123
+ file.puts "APPEND_ID_PARAMETER PKTID 8 UINT 1 1 1"
124
+ file.puts "APPEND_PARAMETER CONFIG 256 STRING ''"
125
+ file.puts "APPEND_PARAMETER COSMOS_VERSION 240 STRING ''"
126
+ file.puts "APPEND_PARAMETER USER_VERSION 240 STRING ''"
127
+ file.puts "APPEND_PARAMETER RUBY_VERSION 240 STRING ''"
128
+ file.puts "APPEND_PARAMETER TEST 512 STRING ''"
129
+ file.close
130
+
131
+ expect(Logger).to receive(:error) do |msg|
132
+ expect(msg).to eql "SYSTEM META not defined correctly due to COMMAND SYSTEM META defined - defaulting"
133
+ end
134
+ tf = Tempfile.new('unittest')
135
+ tf.puts("AUTO_DECLARE_TARGETS")
136
+ tf.close
137
+ System.class_variable_set(:@@instance, nil)
138
+ System.new(tf.path)
139
+ tlm = System.telemetry.packet("SYSTEM", "META")
140
+ expect(tlm.read("PKTID")).to_not be_nil
141
+ expect(tlm.read("CONFIG")).to_not be_nil
142
+ expect(tlm.read("COSMOS_VERSION")).to_not be_nil
143
+ expect(tlm.get_item("COSMOS_VERSION").bit_size).to eql(240)
144
+ expect(tlm.read("RUBY_VERSION")).to_not be_nil
145
+ expect(tlm.read("USER_VERSION")).to_not be_nil
146
+ expect(tlm.items.keys.include?("TEST")).to be false
147
+ cmd = System.commands.packet("SYSTEM", "META")
148
+ expect(cmd.read("PKTID")).to eql tlm.read("PKTID")
149
+ expect(cmd.read("CONFIG")).to eql tlm.read("CONFIG")
150
+ expect(cmd.read("COSMOS_VERSION")).to eql tlm.read("COSMOS_VERSION")
151
+ expect(cmd.read("RUBY_VERSION")).to eql tlm.read("RUBY_VERSION")
152
+ expect(cmd.read("USER_VERSION")).to eql tlm.read("USER_VERSION")
153
+ expect(cmd.items.keys.include?("TEST")).to be false
154
+ tf.unlink
155
+ end
156
+
157
+ it "defines COMMAND SYSTEM META based on TELEMETRY" do
158
+ file = File.open(File.join(@config_targets, 'SYSTEM', 'cmd_tlm', 'meta_tlm.txt'), 'w')
159
+ file.puts "TELEMETRY SYSTEM META BIG_ENDIAN"
160
+ file.puts "APPEND_ID_ITEM PKTID 8 UINT 1"
161
+ file.puts "APPEND_ITEM CONFIG 256 STRING"
162
+ file.puts "APPEND_ITEM COSMOS_VERSION 240 STRING"
163
+ file.puts "APPEND_ITEM USER_VERSION 240 STRING"
164
+ file.puts "APPEND_ITEM RUBY_VERSION 240 STRING"
165
+ file.puts "APPEND_ITEM TEST 240 STRING"
166
+ file.close
167
+
168
+ expect(Logger).to_not receive(:error)
169
+ tf = Tempfile.new('unittest')
170
+ tf.puts("AUTO_DECLARE_TARGETS")
171
+ tf.close
172
+ System.class_variable_set(:@@instance, nil)
173
+ System.new(tf.path)
174
+ tlm = System.telemetry.packet("SYSTEM", "META")
175
+ expect(tlm.read("PKTID")).to_not be_nil
176
+ expect(tlm.read("CONFIG")).to_not be_nil
177
+ expect(tlm.read("COSMOS_VERSION")).to_not be_nil
178
+ expect(tlm.read("RUBY_VERSION")).to_not be_nil
179
+ expect(tlm.read("USER_VERSION")).to_not be_nil
180
+ expect(tlm.read("TEST")).to_not be_nil
181
+ cmd = System.commands.packet("SYSTEM", "META")
182
+ expect(cmd.read("PKTID")).to eql tlm.read("PKTID")
183
+ expect(cmd.read("CONFIG")).to eql tlm.read("CONFIG")
184
+ expect(cmd.read("COSMOS_VERSION")).to eql tlm.read("COSMOS_VERSION")
185
+ expect(cmd.read("RUBY_VERSION")).to eql tlm.read("RUBY_VERSION")
186
+ expect(cmd.read("USER_VERSION")).to eql tlm.read("USER_VERSION")
187
+ expect(cmd.read("TEST")).to eql tlm.read("TEST")
188
+ tf.unlink
189
+ end
190
+ end
53
191
  end
54
192
 
55
193
  describe "System.commands" do
@@ -642,6 +780,60 @@ module Cosmos
642
780
  end
643
781
  end
644
782
 
783
+ context "with META_INIT" do
784
+ it "takes 1 parameters" do
785
+ tf = Tempfile.new('unittest')
786
+ tf.puts("META_INIT")
787
+ tf.close
788
+ expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, /Not enough parameters for META_INIT./)
789
+ tf.unlink
790
+
791
+ tf = Tempfile.new('unittest')
792
+ tf.puts("META_INIT 1 2")
793
+ tf.close
794
+ expect { System.instance.process_file(tf.path) }.to raise_error(ConfigParser::Error, /Too many parameters for META_INIT./)
795
+ tf.unlink
796
+ end
797
+
798
+ it "populates the SYSTEM META packet with the file" do
799
+ FileUtils.rm_rf @config_targets
800
+ FileUtils.mkdir_p(File.join(@config_targets, 'SYSTEM', 'cmd_tlm'))
801
+ file = File.open(File.join(@config_targets, 'SYSTEM', 'cmd_tlm', 'meta_tlm.txt'), 'w')
802
+ file.puts "TELEMETRY SYSTEM META BIG_ENDIAN"
803
+ file.puts "APPEND_ID_ITEM PKTID 8 UINT 1"
804
+ file.puts "APPEND_ITEM CONFIG 256 STRING"
805
+ file.puts "APPEND_ITEM COSMOS_VERSION 240 STRING"
806
+ file.puts "APPEND_ITEM USER_VERSION 240 STRING"
807
+ file.puts "APPEND_ITEM RUBY_VERSION 240 STRING"
808
+ file.puts "APPEND_ITEM TEST 512 STRING"
809
+ file.puts "APPEND_ITEM ID 32 UINT"
810
+ file.close
811
+
812
+ meta = Tempfile.new('meta')
813
+ meta.puts("USER_VERSION 4.5")
814
+ meta.puts("TEST hello")
815
+ meta.puts("ID 123456789")
816
+ meta.close
817
+ tf = Tempfile.new('unittest')
818
+ tf.puts("AUTO_DECLARE_TARGETS")
819
+ tf.puts("META_INIT #{meta.path}")
820
+ tf.close
821
+ System.class_variable_set(:@@instance, nil)
822
+ System.new(tf.path)
823
+ tlm = System.telemetry.packet("SYSTEM", "META")
824
+ expect(tlm.read("USER_VERSION")).to eql '4.5'
825
+ expect(tlm.read("TEST")).to eql 'hello'
826
+ expect(tlm.read("ID")).to eql 123456789
827
+ cmd = System.commands.packet("SYSTEM", "META")
828
+ expect(cmd.read("USER_VERSION")).to eql tlm.read("USER_VERSION")
829
+ expect(cmd.read("TEST")).to eql tlm.read("TEST")
830
+ expect(cmd.read("ID")).to eql tlm.read("ID")
831
+ tf.unlink
832
+ meta.unlink
833
+ FileUtils.rm_rf(File.join(@config_targets, 'SYSTEM'))
834
+ end
835
+ end
836
+
645
837
  context "with ADD_MD5_FILE" do
646
838
  it "takes 1 parameters" do
647
839
  tf = Tempfile.new('unittest')
@@ -132,13 +132,13 @@ module Cosmos
132
132
  end
133
133
 
134
134
  it "requires the file in the target lib directory over system lib" do
135
- filename = File.join(Cosmos::USERPATH, 'config', 'targets', 'INST', 'lib', 'tgt_file.rb')
136
- File.open(filename, 'w') do |file|
135
+ filename1 = File.join(Cosmos::USERPATH, 'config', 'targets', 'INST', 'lib', 'tgt_file.rb')
136
+ File.open(filename1, 'w') do |file|
137
137
  file.puts "class TgtLibFile"
138
138
  file.puts "end"
139
139
  end
140
- filename = File.join(Cosmos::USERPATH, 'lib', 'tgt_file.rb')
141
- File.open(filename, 'w') do |file|
140
+ filename2 = File.join(Cosmos::USERPATH, 'lib', 'tgt_file.rb')
141
+ File.open(filename2, 'w') do |file|
142
142
  file.puts "class SystemLibFile"
143
143
  file.puts "end"
144
144
  end
@@ -150,7 +150,8 @@ module Cosmos
150
150
  expect { TgtLibFile.new }.to_not raise_error
151
151
  expect(Object.const_defined?('TgtLibFile')).to be true
152
152
  expect(Object.const_defined?('SystemLibFile')).to be false
153
- File.delete filename
153
+ File.delete filename1
154
+ File.delete filename2
154
155
  tf.unlink
155
156
  end
156
157