cosmos 4.0.0 → 4.0.1

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.
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