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
@@ -14,25 +14,6 @@ module Cosmos
14
14
 
15
15
  private
16
16
 
17
- # Get a packet which was previously subscribed to by
18
- # subscribe_packet_data. This method can block waiting for new packets or
19
- # not based on the second parameter. It returns a single Cosmos::Packet instance
20
- # and will return nil when no more packets are buffered (assuming non_block
21
- # is false).
22
- # Usage:
23
- # get_packet(id, <true or false to block>)
24
- def get_packet(id, non_block = false)
25
- packet = nil
26
- buffer, target_name, packet_name, received_time, received_count = get_packet_data(id, non_block)
27
- if buffer
28
- packet = System.telemetry.packet(target_name, packet_name).clone
29
- packet.buffer = buffer
30
- packet.received_time = received_time
31
- packet.received_count = received_count
32
- end
33
- packet
34
- end
35
-
36
17
  # Creates a string with the parameters upcased
37
18
  def _upcase(target_name, packet_name, item_name)
38
19
  "#{target_name.upcase} #{packet_name.upcase} #{item_name.upcase}"
@@ -984,17 +965,8 @@ module Cosmos
984
965
 
985
966
  def start_tlm_viewer
986
967
  system_file = File.basename(System.initial_filename)
987
- mac_app = File.join(Cosmos::USERPATH, 'tools', 'mac', 'TlmViewer.app')
988
-
989
- if Kernel.is_mac? && File.exist?(mac_app)
990
- Cosmos.run_process("open '#{mac_app}' --args --system #{system_file}")
991
- else
992
- cmd = 'ruby'
993
- cmd << 'w' if Kernel.is_windows? # Windows uses rubyw to avoid creating a DOS shell
994
- Cosmos.run_process("#{cmd} '#{File.join(Cosmos::USERPATH, 'tools', 'TlmViewer')}' --system #{system_file}")
995
- end
968
+ Cosmos.run_cosmos_tool('TlmViewer', "--system #{system_file}")
996
969
  cosmos_script_sleep(1)
997
970
  end
998
-
999
971
  end
1000
972
  end
@@ -140,7 +140,5 @@ module Cosmos
140
140
  def prompt_combo_box(string, options)
141
141
  prompt_message_box(string, options)
142
142
  end
143
-
144
- end # module Script
145
-
146
- end # module Cosmos
143
+ end
144
+ end
@@ -9,7 +9,6 @@
9
9
  # attribution addendums as found in the LICENSE.txt
10
10
 
11
11
  module Cosmos
12
-
13
12
  module Script
14
13
  private
15
14
 
@@ -19,7 +18,7 @@ module Cosmos
19
18
  # or
20
19
  # tlm('target_name packet_name item_name')
21
20
  def tlm(*args)
22
- return $cmd_tlm_server.tlm(*args)
21
+ $cmd_tlm_server.tlm(*args)
23
22
  end
24
23
 
25
24
  # Poll for the raw value of a telemetry item
@@ -28,7 +27,7 @@ module Cosmos
28
27
  # or
29
28
  # tlm_raw('target_name packet_name item_name')
30
29
  def tlm_raw(*args)
31
- return $cmd_tlm_server.tlm_raw(*args)
30
+ $cmd_tlm_server.tlm_raw(*args)
32
31
  end
33
32
 
34
33
  # Poll for the formatted value of a telemetry item
@@ -37,7 +36,7 @@ module Cosmos
37
36
  # or
38
37
  # tlm_formatted('target_name packet_name item_name')
39
38
  def tlm_formatted(*args)
40
- return $cmd_tlm_server.tlm_formatted(*args)
39
+ $cmd_tlm_server.tlm_formatted(*args)
41
40
  end
42
41
 
43
42
  # Poll for the formatted with units value of a telemetry item
@@ -46,11 +45,11 @@ module Cosmos
46
45
  # or
47
46
  # tlm_with_units('target_name packet_name item_name')
48
47
  def tlm_with_units(*args)
49
- return $cmd_tlm_server.tlm_with_units(*args)
48
+ $cmd_tlm_server.tlm_with_units(*args)
50
49
  end
51
50
 
52
51
  def tlm_variable(*args)
53
- return $cmd_tlm_server.tlm_variable(*args)
52
+ $cmd_tlm_server.tlm_variable(*args)
54
53
  end
55
54
 
56
55
  # Set a telemetry point to a given value. Note this will be over written in
@@ -60,7 +59,7 @@ module Cosmos
60
59
  # or
61
60
  # set_tlm("target_name packet_name item_name = value")
62
61
  def set_tlm(*args)
63
- return $cmd_tlm_server.set_tlm(*args)
62
+ $cmd_tlm_server.set_tlm(*args)
64
63
  end
65
64
 
66
65
  # Set the raw value of a telemetry point to a given value. Note this will
@@ -70,7 +69,7 @@ module Cosmos
70
69
  # or
71
70
  # set_tlm_raw("target_name packet_name item_name = value")
72
71
  def set_tlm_raw(*args)
73
- return $cmd_tlm_server.set_tlm_raw(*args)
72
+ $cmd_tlm_server.set_tlm_raw(*args)
74
73
  end
75
74
 
76
75
  # Injects a packet into the system as if it was received from an interface
@@ -83,7 +82,7 @@ module Cosmos
83
82
  # @param send_packet_log_writers[Boolean] Whether or not to send to the packet log writers for the target's interface
84
83
  # @param create_new_logs[Boolean] Whether or not to create new log files before writing this packet to logs
85
84
  def inject_tlm(target_name, packet_name, item_hash = nil, value_type = :CONVERTED, send_routers = true, send_packet_log_writers = true, create_new_logs = false)
86
- return $cmd_tlm_server.inject_tlm(target_name, packet_name, item_hash, value_type, send_routers, send_packet_log_writers, create_new_logs)
85
+ $cmd_tlm_server.inject_tlm(target_name, packet_name, item_hash, value_type, send_routers, send_packet_log_writers, create_new_logs)
87
86
  end
88
87
 
89
88
  # Permanently set the converted value of a telemetry point to a given value
@@ -92,7 +91,7 @@ module Cosmos
92
91
  # or
93
92
  # override_tlm("target_name packet_name item_name = value")
94
93
  def override_tlm(*args)
95
- return $cmd_tlm_server.override_tlm(*args)
94
+ $cmd_tlm_server.override_tlm(*args)
96
95
  end
97
96
 
98
97
  # Permanently set the raw value of a telemetry point to a given value
@@ -101,7 +100,7 @@ module Cosmos
101
100
  # or
102
101
  # override_tlm_raw("target_name packet_name item_name = value")
103
102
  def override_tlm_raw(*args)
104
- return $cmd_tlm_server.override_tlm_raw(*args)
103
+ $cmd_tlm_server.override_tlm_raw(*args)
105
104
  end
106
105
 
107
106
  # Clear an override of a telemetry point
@@ -110,7 +109,7 @@ module Cosmos
110
109
  # or
111
110
  # normalize_tlm("target_name packet_name item_name")
112
111
  def normalize_tlm(*args)
113
- return $cmd_tlm_server.normalize_tlm(*args)
112
+ $cmd_tlm_server.normalize_tlm(*args)
114
113
  end
115
114
 
116
115
  # Gets all the values from the given packet returned in a two dimensional
@@ -144,18 +143,18 @@ module Cosmos
144
143
  # Gets the packets for a given target name. Returns an array of arrays
145
144
  # consisting of packet names and packet descriptions.
146
145
  def get_tlm_list(target_name)
147
- return $cmd_tlm_server.get_tlm_list(target_name)
146
+ $cmd_tlm_server.get_tlm_list(target_name)
148
147
  end
149
148
 
150
149
  # Gets all the telemetry mnemonics for a given target and packet. Returns an
151
150
  # array of arrays consisting of item names, item states, and item descriptions.
152
151
  def get_tlm_item_list(target_name, packet_name)
153
- return $cmd_tlm_server.get_tlm_item_list(target_name, packet_name)
152
+ $cmd_tlm_server.get_tlm_item_list(target_name, packet_name)
154
153
  end
155
154
 
156
155
  # Gets the list of all defined targets.
157
156
  def get_target_list
158
- return $cmd_tlm_server.get_target_list
157
+ $cmd_tlm_server.get_target_list
159
158
  end
160
159
 
161
160
  def get_tlm_details(items)
@@ -164,7 +163,7 @@ module Cosmos
164
163
 
165
164
  # Returns the buffer from the telemetry packet.
166
165
  def get_tlm_buffer(target_name, packet_name)
167
- return $cmd_tlm_server.get_tlm_buffer(target_name, packet_name)
166
+ $cmd_tlm_server.get_tlm_buffer(target_name, packet_name)
168
167
  end
169
168
 
170
169
  # Subscribe to one or more telemetry packets. The queue ID is returned for
@@ -172,8 +171,7 @@ module Cosmos
172
171
  # Usage:
173
172
  # id = subscribe_packet_data([[target_name,packet_name], ...], <queue_size>)
174
173
  def subscribe_packet_data(packets, queue_size = CmdTlmServer::DEFAULT_PACKET_DATA_QUEUE_SIZE)
175
- result = $cmd_tlm_server.subscribe_packet_data(packets, queue_size)
176
- result
174
+ $cmd_tlm_server.subscribe_packet_data(packets, queue_size)
177
175
  end
178
176
 
179
177
  # Unsubscribe to telemetry packets. Pass the queue ID which was returned by
@@ -181,11 +179,10 @@ module Cosmos
181
179
  # Usage:
182
180
  # unsubscribe_packet_data(id)
183
181
  def unsubscribe_packet_data(id)
184
- result = $cmd_tlm_server.unsubscribe_packet_data(id)
185
- result
182
+ $cmd_tlm_server.unsubscribe_packet_data(id)
186
183
  end
187
184
 
188
- # DEPRECATED
185
+ # DEPRECATED for Ruby APIs although still necessary
189
186
  def get_packet_data(id, non_block = false)
190
187
  results = $cmd_tlm_server.get_packet_data(id, non_block)
191
188
  if Array === results and results[3] and results[4]
@@ -195,6 +192,25 @@ module Cosmos
195
192
  results
196
193
  end
197
194
 
195
+ # Get a packet which was previously subscribed to by
196
+ # subscribe_packet_data. This method can block waiting for new packets or
197
+ # not based on the second parameter. It returns a single Cosmos::Packet instance
198
+ # and will return nil when no more packets are buffered (assuming non_block
199
+ # is false).
200
+ # Usage:
201
+ # get_packet(id, <true or false to block>)
202
+ def get_packet(id, non_block = false)
203
+ packet = nil
204
+ # The get_packet_data above returns a Ruby time after the packet_name.
205
+ # This is different from the API.s
206
+ buffer, target_name, packet_name, time, rx_count = get_packet_data(id, non_block)
207
+ if buffer
208
+ packet = System.telemetry.packet(target_name, packet_name).clone
209
+ packet.buffer = buffer
210
+ packet.received_time = time
211
+ packet.received_count = rx_count
212
+ end
213
+ packet
214
+ end
198
215
  end
199
216
  end
200
-
@@ -105,6 +105,7 @@ module Cosmos
105
105
  @limits_set = :DEFAULT
106
106
  @use_utc = false
107
107
  @additional_md5_files = []
108
+ @meta_init_filename = nil
108
109
 
109
110
  @ports = {}
110
111
  @ports['CTS_API'] = 7777
@@ -150,7 +151,6 @@ module Cosmos
150
151
 
151
152
  @initial_filename = filename
152
153
  @initial_config = nil
153
- @meta_init_filename = nil
154
154
  @@instance = self
155
155
  end
156
156
 
@@ -687,64 +687,27 @@ module Cosmos
687
687
  def setup_system_meta
688
688
  # Ensure SYSTEM META is defined and defined correctly
689
689
  begin
690
+ if @commands.target_names.include?("SYSTEM")
691
+ pkts = @commands.packets('SYSTEM')
692
+ # User should not define COMMAND SYSTEM META as we build it to match TELEMETRY
693
+ raise "COMMAND SYSTEM META defined" if pkts.keys.include?('META')
694
+ end
690
695
  tlm_meta = @telemetry.packet('SYSTEM', 'META')
691
- cmd_meta = @commands.packet('SYSTEM', 'META')
692
696
  item = tlm_meta.get_item('PKTID')
693
- raise "PKTID Incorrect" unless (item.bit_size == 8) && (item.bit_offset == 0)
694
- item = cmd_meta.get_item('PKTID')
695
- raise "PKTID Incorrect" unless (item.bit_size == 8) && (item.bit_offset == 0)
697
+ raise "PKTID incorrect" unless (item.bit_size == 8) && (item.bit_offset == 0)
696
698
  item = tlm_meta.get_item('CONFIG')
697
- raise "CONFIG Incorrect" unless (item.bit_size == 256) && (item.bit_offset == 8)
698
- item = cmd_meta.get_item('CONFIG')
699
- raise "CONFIG Incorrect" unless (item.bit_size == 256) && (item.bit_offset == 8)
699
+ raise "CONFIG incorrect" unless (item.bit_size == 256) && (item.bit_offset == 8)
700
700
  item = tlm_meta.get_item('COSMOS_VERSION')
701
- raise "CONFIG Incorrect" unless (item.bit_size == 240) && (item.bit_offset == 264)
702
- item = cmd_meta.get_item('COSMOS_VERSION')
703
- raise "CONFIG Incorrect" unless (item.bit_size == 240) && (item.bit_offset == 264)
701
+ raise "COSMOS_VERSION incorrect" unless (item.bit_size == 240) && (item.bit_offset == 264)
704
702
  item = tlm_meta.get_item('USER_VERSION')
705
- raise "CONFIG Incorrect" unless (item.bit_size == 240) && (item.bit_offset == 504)
706
- item = cmd_meta.get_item('USER_VERSION')
707
- raise "CONFIG Incorrect" unless (item.bit_size == 240) && (item.bit_offset == 504)
703
+ raise "USER_VERSION incorrect" unless (item.bit_size == 240) && (item.bit_offset == 504)
708
704
  item = tlm_meta.get_item('RUBY_VERSION')
709
- raise "CONFIG Incorrect" unless (item.bit_size == 240) && (item.bit_offset == 744)
710
- item = cmd_meta.get_item('RUBY_VERSION')
711
- raise "CONFIG Incorrect" unless (item.bit_size == 240) && (item.bit_offset == 744)
712
- rescue
713
- Logger.error "SYSTEM META not defined or defined incorrectly - defaulting"
714
-
715
- cmd_meta = Packet.new('SYSTEM', 'META', :BIG_ENDIAN)
716
- item = cmd_meta.append_item('PKTID', 8, :UINT, nil, :BIG_ENDIAN, :ERROR, nil, nil, nil, 1)
717
- item.range = 1..1
718
- item.default = 1
719
- item.description = 'Packet Id'
720
- item = cmd_meta.append_item('CONFIG', 32 * 8, :STRING)
721
- item.default = ''
722
- item.description = 'Configuration Name'
723
- item = cmd_meta.append_item('COSMOS_VERSION', 30 * 8, :STRING)
724
- item.default = ''
725
- item.description = 'COSMOS Version'
726
- item = cmd_meta.append_item('USER_VERSION', 30 * 8, :STRING)
727
- item.default = ''
728
- item.description = 'User Project Version'
729
- item = cmd_meta.append_item('RUBY_VERSION', 30 * 8, :STRING)
730
- item.default = ''
731
- item.description = 'Ruby Version'
732
- @config.commands['SYSTEM'] ||= {}
733
- @config.commands['SYSTEM']['META'] = cmd_meta
734
-
735
- tlm_meta = Packet.new('SYSTEM', 'META', :BIG_ENDIAN)
736
- item = tlm_meta.append_item('PKTID', 8, :UINT, nil, :BIG_ENDIAN, :ERROR, nil, nil, nil, 1)
737
- item.description = 'Packet Id'
738
- item = tlm_meta.append_item('CONFIG', 32 * 8, :STRING)
739
- item.description = 'Configuration Name'
740
- item = tlm_meta.append_item('COSMOS_VERSION', 30 * 8, :STRING)
741
- item.description = 'COSMOS Version'
742
- item = tlm_meta.append_item('USER_VERSION', 30 * 8, :STRING)
743
- item.description = 'User Project Version'
744
- item = tlm_meta.append_item('RUBY_VERSION', 30 * 8, :STRING)
745
- item.description = 'Ruby Version'
746
- @config.telemetry['SYSTEM'] ||= {}
747
- @config.telemetry['SYSTEM']['META'] = tlm_meta
705
+ raise "RUBY_VERSION incorrect" unless (item.bit_size == 240) && (item.bit_offset == 744)
706
+ cmd_meta = build_cmd_system_meta()
707
+ rescue => err
708
+ Logger.error "SYSTEM META not defined correctly due to #{err.message} - defaulting"
709
+ tlm_meta = build_tlm_system_meta()
710
+ cmd_meta = build_cmd_system_meta()
748
711
  end
749
712
 
750
713
  # Initialize the meta packet (if given init filename)
@@ -776,5 +739,40 @@ module Cosmos
776
739
 
777
740
  cmd_meta.buffer = tlm_meta.buffer
778
741
  end
742
+
743
+ def build_cmd_system_meta
744
+ cmd_meta = Packet.new('SYSTEM', 'META', :BIG_ENDIAN)
745
+ cmd_meta.disabled = true
746
+ tlm_meta = @telemetry.packet('SYSTEM', 'META')
747
+ tlm_meta.sorted_items.each do |item|
748
+ next if item.name.include?("RECEIVED") # Tlm only items
749
+ cmd_meta.define(item.clone)
750
+ end
751
+ @config.commands['SYSTEM'] ||= {}
752
+ @config.commands['SYSTEM']['META'] = cmd_meta
753
+ cmd_meta
754
+ end
755
+
756
+ def build_tlm_system_meta
757
+ tlm_meta = Packet.new('SYSTEM', 'META', :BIG_ENDIAN)
758
+ item = tlm_meta.append_item('PKTID', 8, :UINT, nil, :BIG_ENDIAN, :ERROR, nil, nil, nil, 1)
759
+ item.description = 'Packet Id'
760
+ item.meta["READ_ONLY"] = []
761
+ item = tlm_meta.append_item('CONFIG', 32 * 8, :STRING)
762
+ item.description = 'Configuration Name'
763
+ item.meta["READ_ONLY"] = []
764
+ item = tlm_meta.append_item('COSMOS_VERSION', 30 * 8, :STRING)
765
+ item.description = 'COSMOS Version'
766
+ item.meta["READ_ONLY"] = []
767
+ item = tlm_meta.append_item('USER_VERSION', 30 * 8, :STRING)
768
+ item.description = 'User Project Version'
769
+ item.meta["READ_ONLY"] = []
770
+ item = tlm_meta.append_item('RUBY_VERSION', 30 * 8, :STRING)
771
+ item.description = 'Ruby Version'
772
+ item.meta["READ_ONLY"] = []
773
+ @config.telemetry['SYSTEM'] ||= {}
774
+ @config.telemetry['SYSTEM']['META'] = tlm_meta
775
+ tlm_meta
776
+ end
779
777
  end
780
778
  end
@@ -532,10 +532,12 @@ module Cosmos
532
532
  packet = cvt_packet.clone
533
533
  packet.received_time = received_time
534
534
 
535
- # Update the packet with item_hash
536
- value_type = value_type.to_s.intern
537
- item_hash.each do |item_name, item_value|
538
- packet.write(item_name, item_value, value_type)
535
+ if item_hash
536
+ # Update the packet with item_hash
537
+ value_type = value_type.to_s.intern
538
+ item_hash.each do |item_name, item_value|
539
+ packet.write(item_name, item_value, value_type)
540
+ end
539
541
  end
540
542
 
541
543
  # Update current value table
@@ -945,6 +947,27 @@ module Cosmos
945
947
  CmdTlmServer.get_packet_data(id, non_block)
946
948
  end
947
949
 
950
+ # Get a packet which was previously subscribed to by
951
+ # subscribe_packet_data. This method can block waiting for new packets or
952
+ # not based on the second parameter. It returns a single Cosmos::Packet instance
953
+ # and will return nil when no more packets are buffered (assuming non_block
954
+ # is false).
955
+ # Usage:
956
+ # get_packet(id, <true or false to block>)
957
+ def get_packet(id, non_block = false)
958
+ packet = nil
959
+ # The get_packet_data in the CmdTlmServer returns the number of seconds
960
+ # followed by microseconds after the packet_name. This is different that the Script API.
961
+ buffer, target_name, packet_name, rx_sec, rx_usec, rx_count = get_packet_data(id, non_block)
962
+ if buffer
963
+ packet = System.telemetry.packet(target_name, packet_name).clone
964
+ packet.buffer = buffer
965
+ packet.received_time = Time.at(rx_sec, rx_usec).sys
966
+ packet.received_count = rx_count
967
+ end
968
+ packet
969
+ end
970
+
948
971
  #
949
972
  # Methods for scripting
950
973
  #
@@ -137,13 +137,7 @@ module Cosmos
137
137
  view_pv = Qt::PushButton.new("View in #{tool_name}")
138
138
  view_pv.connect(SIGNAL('clicked()')) do
139
139
  tool_name = tool_name.split.join.gsub("Command","Cmd") # remove space and convert name
140
- if Kernel.is_windows?
141
- Cosmos.run_process("rubyw tools/#{tool_name} -p \"#{target_name} #{packet_name}\" --system #{File.basename(System.initial_filename)}")
142
- elsif Kernel.is_mac? and File.exist?("tools/mac/#{tool_name}.app")
143
- Cosmos.run_process("open tools/mac/#{tool_name}.app --args -p \"#{target_name} #{packet_name}\" --system #{File.basename(System.initial_filename)}")
144
- else
145
- Cosmos.run_process("ruby tools/#{tool_name} -p \"#{target_name} #{packet_name}\" --system #{File.basename(System.initial_filename)}")
146
- end
140
+ Cosmos.run_cosmos_tool(tool_name, "-p \"#{target_name} #{packet_name}\" --system #{File.basename(System.initial_filename)}")
147
141
  end
148
142
  table.setCellWidget(row, 4, view_pv)
149
143
  else
@@ -75,7 +75,11 @@ module Cosmos
75
75
  initialize_central_widget()
76
76
  complete_initialize()
77
77
 
78
- create_tab()
78
+ if options.filename
79
+ file_open(options.filename)
80
+ else
81
+ create_tab()
82
+ end
79
83
  end
80
84
 
81
85
  def initialize_actions
@@ -712,6 +716,10 @@ module Cosmos
712
716
  options.height = 600
713
717
  options.title = "Config Editor : #{UNTITLED}"
714
718
  options.auto_size = false
719
+ option_parser.separator "Config Editor Specific Options:"
720
+ option_parser.on("-f", "--file FILENAME", "Open the specified configuration file") do |arg|
721
+ options.filename = arg
722
+ end
715
723
  end
716
724
  super(option_parser, options)
717
725
  end