openc3 5.17.0 → 5.18.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of openc3 might be problematic. Click here for more details.

Files changed (64) hide show
  1. checksums.yaml +4 -4
  2. data/bin/openc3cli +1 -1
  3. data/data/config/_interfaces.yaml +4 -4
  4. data/data/config/command_modifiers.yaml +4 -0
  5. data/data/config/interface_modifiers.yaml +18 -8
  6. data/data/config/item_modifiers.yaml +34 -26
  7. data/data/config/microservice.yaml +4 -1
  8. data/data/config/param_item_modifiers.yaml +16 -0
  9. data/data/config/parameter_modifiers.yaml +29 -12
  10. data/data/config/plugins.yaml +3 -3
  11. data/data/config/screen.yaml +7 -7
  12. data/data/config/telemetry_modifiers.yaml +9 -4
  13. data/data/config/widgets.yaml +41 -14
  14. data/ext/openc3/ext/packet/packet.c +6 -0
  15. data/lib/openc3/accessors/accessor.rb +1 -0
  16. data/lib/openc3/accessors/binary_accessor.rb +170 -11
  17. data/lib/openc3/api/cmd_api.rb +39 -35
  18. data/lib/openc3/api/config_api.rb +10 -10
  19. data/lib/openc3/api/interface_api.rb +28 -21
  20. data/lib/openc3/api/limits_api.rb +29 -29
  21. data/lib/openc3/api/metrics_api.rb +3 -3
  22. data/lib/openc3/api/offline_access_api.rb +5 -5
  23. data/lib/openc3/api/router_api.rb +25 -19
  24. data/lib/openc3/api/settings_api.rb +10 -10
  25. data/lib/openc3/api/stash_api.rb +10 -10
  26. data/lib/openc3/api/target_api.rb +10 -10
  27. data/lib/openc3/api/tlm_api.rb +44 -44
  28. data/lib/openc3/conversions/bit_reverse_conversion.rb +60 -0
  29. data/lib/openc3/conversions/ip_read_conversion.rb +59 -0
  30. data/lib/openc3/conversions/ip_write_conversion.rb +61 -0
  31. data/lib/openc3/conversions/object_read_conversion.rb +88 -0
  32. data/lib/openc3/conversions/object_write_conversion.rb +38 -0
  33. data/lib/openc3/conversions.rb +6 -1
  34. data/lib/openc3/io/json_drb.rb +19 -21
  35. data/lib/openc3/io/json_rpc.rb +14 -13
  36. data/lib/openc3/microservices/microservice.rb +11 -11
  37. data/lib/openc3/microservices/scope_cleanup_microservice.rb +1 -1
  38. data/lib/openc3/microservices/timeline_microservice.rb +76 -51
  39. data/lib/openc3/models/activity_model.rb +25 -21
  40. data/lib/openc3/models/scope_model.rb +44 -13
  41. data/lib/openc3/models/sorted_model.rb +1 -1
  42. data/lib/openc3/models/target_model.rb +4 -1
  43. data/lib/openc3/operators/microservice_operator.rb +2 -2
  44. data/lib/openc3/operators/operator.rb +9 -9
  45. data/lib/openc3/packets/packet.rb +18 -1
  46. data/lib/openc3/packets/packet_config.rb +37 -16
  47. data/lib/openc3/packets/packet_item.rb +5 -0
  48. data/lib/openc3/packets/structure.rb +67 -3
  49. data/lib/openc3/packets/structure_item.rb +49 -12
  50. data/lib/openc3/script/calendar.rb +2 -2
  51. data/lib/openc3/script/extract.rb +5 -3
  52. data/lib/openc3/script/web_socket_api.rb +11 -0
  53. data/lib/openc3/topics/decom_interface_topic.rb +2 -1
  54. data/lib/openc3/topics/system_events_topic.rb +40 -0
  55. data/lib/openc3/utilities/authentication.rb +2 -1
  56. data/lib/openc3/utilities/authorization.rb +2 -2
  57. data/lib/openc3/version.rb +5 -5
  58. data/templates/tool_angular/package.json +5 -5
  59. data/templates/tool_react/package.json +8 -8
  60. data/templates/tool_svelte/package.json +10 -10
  61. data/templates/tool_vue/package.json +10 -10
  62. data/templates/widget/package.json +10 -10
  63. data/templates/widget/src/Widget.vue +0 -1
  64. metadata +22 -2
@@ -44,10 +44,20 @@ module OpenC3
44
44
  # @return [Integer] 0 based bit offset
45
45
  attr_reader :bit_offset
46
46
 
47
+ # Original bit offset when the structure is first defined
48
+ # Will reflect the bit offset with all variable sized items at their
49
+ # minimum size
50
+ # @return [Integer] 0 based bit offset
51
+ attr_accessor :original_bit_offset
52
+
47
53
  # The number of bits which represent this StructureItem in the binary buffer.
48
54
  # @return [Integer] Size in bits
49
55
  attr_reader :bit_size
50
56
 
57
+ # Original bit size when the structure is first defined
58
+ # @return [Integer] 0 based bit offset
59
+ attr_reader :original_bit_size
60
+
51
61
  # The data type is what kind of data this StructureItem
52
62
  # represents when extracted from the binary buffer. :INT and :UINT are
53
63
  # turned into Integers (Ruby Fixnum). :FLOAT are turned into floating point
@@ -70,6 +80,10 @@ module OpenC3
70
80
  # @return [Integer, nil] Array size of the item in bits
71
81
  attr_reader :array_size
72
82
 
83
+ # Original array size when the structure is first defined
84
+ # @return [Integer] total array size in bits
85
+ attr_accessor :original_array_size
86
+
73
87
  # How to handle overflow for :INT, :UINT, :STRING, and :BLOCK data types
74
88
  # Note: Has no meaning for :FLOAT data types
75
89
  # @return [Symbol] {BinaryAccessor::OVERFLOW_TYPES}
@@ -78,6 +92,9 @@ module OpenC3
78
92
  # @return [Boolean] Whether this structure item can overlap another item in the same packet
79
93
  attr_accessor :overlap
80
94
 
95
+ # @return [Hash] Variable bit size information
96
+ attr_reader :variable_bit_size
97
+
81
98
  # Create a StructureItem by setting all the attributes. It
82
99
  # calls all the setter routines to do the attribute verification and then
83
100
  # verifies the overall integrity.
@@ -98,10 +115,14 @@ module OpenC3
98
115
  self.endianness = endianness
99
116
  self.data_type = data_type
100
117
  self.bit_offset = bit_offset
118
+ @original_bit_offset = self.bit_offset
101
119
  self.bit_size = bit_size
120
+ @original_bit_size = self.bit_size
102
121
  self.array_size = array_size
122
+ @original_array_size = self.array_size
103
123
  self.overflow = overflow
104
124
  self.overlap = false
125
+ self.variable_bit_size = nil
105
126
  @create_index = @@create_index
106
127
  @@create_index += 1
107
128
  @structure_item_constructed = true
@@ -150,8 +171,8 @@ module OpenC3
150
171
  def bit_size=(bit_size)
151
172
  raise ArgumentError, "#{@name}: bit_size must be an Integer" unless Integer === bit_size
152
173
  byte_multiple = ((bit_size % 8) == 0)
153
- if bit_size <= 0 and (@data_type == :INT or @data_type == :UINT or @data_type == :FLOAT)
154
- raise ArgumentError, "#{@name}: bit_size cannot be negative or zero for :INT, :UINT, and :FLOAT items: #{bit_size}"
174
+ if bit_size <= 0 and (@data_type == :FLOAT)
175
+ raise ArgumentError, "#{@name}: bit_size cannot be negative or zero for :FLOAT items: #{bit_size}"
155
176
  end
156
177
  if (@data_type == :STRING or @data_type == :BLOCK) and !byte_multiple
157
178
  raise ArgumentError, "#{@name}: bit_size for STRING and BLOCK items must be byte multiples"
@@ -205,6 +226,18 @@ module OpenC3
205
226
  verify_overall() if @structure_item_constructed
206
227
  end
207
228
 
229
+ def variable_bit_size=(variable_bit_size)
230
+ if variable_bit_size
231
+ raise ArgumentError, "#{@name}: variable_bit_size must be a Hash" unless Hash === variable_bit_size
232
+ raise ArgumentError, "#{@name}: variable_bit_size['length_item_name'] must be a String" unless String === variable_bit_size['length_item_name']
233
+ raise ArgumentError, "#{@name}: variable_bit_size['length_value_bit_offset'] must be an Integer" unless Integer === variable_bit_size['length_value_bit_offset']
234
+ raise ArgumentError, "#{@name}: variable_bit_size['length_bits_per_count'] must be an Integer" unless Integer === variable_bit_size['length_bits_per_count']
235
+ end
236
+ @variable_bit_size = variable_bit_size
237
+
238
+ verify_overall() if @structure_item_constructed
239
+ end
240
+
208
241
  def create_index
209
242
  @create_index.to_i
210
243
  end
@@ -213,11 +246,11 @@ module OpenC3
213
246
  # Comparison Operator based on bit_offset. This means that StructureItems
214
247
  # with different names or bit sizes are equal if they have the same bit
215
248
  # offset.
216
- def <=>(other_item)
217
- return nil unless other_item.kind_of?(StructureItem)
249
+ def <=>(other)
250
+ return nil unless other.kind_of?(StructureItem)
218
251
 
219
- other_bit_offset = other_item.bit_offset
220
- other_bit_size = other_item.bit_size
252
+ other_bit_offset = other.bit_offset
253
+ other_bit_size = other.bit_size
221
254
 
222
255
  # Handle same bit offset case
223
256
  if (@bit_offset == 0) && (other_bit_offset == 0)
@@ -226,7 +259,7 @@ module OpenC3
226
259
  # Compare based on bit size then create index
227
260
  if @bit_size == other_bit_size
228
261
  if @create_index
229
- if @create_index <= other_item.create_index
262
+ if @create_index <= other.create_index
230
263
  return -1
231
264
  else
232
265
  return 1
@@ -246,7 +279,7 @@ module OpenC3
246
279
  # Both Have Same Sign
247
280
  if @bit_offset == other_bit_offset
248
281
  if @create_index
249
- if @create_index <= other_item.create_index
282
+ if @create_index <= other.create_index
250
283
  return -1
251
284
  else
252
285
  return 1
@@ -263,7 +296,7 @@ module OpenC3
263
296
  # Different Signs
264
297
  if @bit_offset == other_bit_offset
265
298
  if @create_index
266
- if @create_index < other_item.create_index
299
+ if @create_index < other.create_index
267
300
  return -1
268
301
  else
269
302
  return 1
@@ -296,6 +329,7 @@ module OpenC3
296
329
  si = StructureItem.new(hash['name'], hash['bit_offset'], hash['bit_size'], data_type,
297
330
  endianness, hash['array_size'], overflow)
298
331
  si.key = hash['key'] || hash['name']
332
+ si.variable_bit_size = hash['variable_bit_size']
299
333
  si
300
334
  end
301
335
 
@@ -303,12 +337,15 @@ module OpenC3
303
337
  hash = {}
304
338
  hash['name'] = self.name
305
339
  hash['key'] = self.key
306
- hash['bit_offset'] = self.bit_offset
307
- hash['bit_size'] = self.bit_size
340
+ hash['bit_offset'] = self.original_bit_offset
341
+ hash['bit_size'] = self.original_bit_size
308
342
  hash['data_type'] = self.data_type
309
343
  hash['endianness'] = self.endianness
310
- hash['array_size'] = self.array_size
344
+ hash['array_size'] = self.original_array_size
311
345
  hash['overflow'] = self.overflow
346
+ if @variable_bit_size
347
+ hash['variable_bit_size'] = @variable_bit_size
348
+ end
312
349
  hash
313
350
  end
314
351
 
@@ -67,8 +67,8 @@ module OpenC3
67
67
  end
68
68
 
69
69
  def create_timeline_activity(name, kind:, start:, stop:, data: {}, scope: $openc3_scope, token: $openc3_token)
70
- kind = kind.to_s.upcase()
71
- kinds = %w(COMMAND SCRIPT RESERVE)
70
+ kind = kind.to_s.downcase()
71
+ kinds = %w(command script reserve)
72
72
  unless kinds.include?(kind)
73
73
  raise "Unknown kind: #{kind}. Must be one of #{kinds.join(', ')}."
74
74
  end
@@ -14,7 +14,7 @@
14
14
  # GNU Affero General Public License for more details.
15
15
 
16
16
  # Modified by OpenC3, Inc.
17
- # All changes Copyright 2022, OpenC3, Inc.
17
+ # All changes Copyright 2024, OpenC3, Inc.
18
18
  # All Rights Reserved
19
19
  #
20
20
  # This file may also be used under the terms of a commercial license
@@ -34,10 +34,12 @@ module OpenC3
34
34
  # Split keywords into string keywords (part of our API, e.g. "PARAM" => 123) and
35
35
  # symbol keywords which are meant for the internal methods, e.g. scope:, token:, timeout:
36
36
  # If the user tries to pass symbol keywords then that is an error
37
- str, sym = kwargs.partition {|k, v| k.is_a?(String) }.map(&:to_h)
37
+ str, sym = kwargs.partition {|k, _v| k.is_a?(String) }.map(&:to_h)
38
+ # We use :manual in all our APIs so we remove it from the check
39
+ sym.delete(:manual)
38
40
  unless sym.empty?
39
41
  raise ArgumentError, "Unknown symbol keyword(s): #{sym.keys.join(', ')}. "\
40
- "COSMOS command parameters must be passed as strings: \"#{sym.to_a[0][0].to_s}\" => ..."
42
+ "COSMOS command parameters must be passed as strings: \"#{sym.to_a[0][0]}\" => ..."
41
43
  end
42
44
  args << str unless str.empty?
43
45
  end
@@ -284,6 +284,17 @@ module OpenC3
284
284
  end
285
285
  end
286
286
 
287
+ # System Events WebSocket
288
+ class SystemEventsWebSocketApi < CmdTlmWebSocketApi
289
+ def initialize(history_count: 0, url: nil, write_timeout: 10.0, read_timeout: 10.0, connect_timeout: 5.0, authentication: nil, scope: $openc3_scope)
290
+ @identifier = {
291
+ channel: "SystemEventsChannel",
292
+ history_count: history_count
293
+ }
294
+ super(url: url, write_timeout: write_timeout, read_timeout: read_timeout, connect_timeout: connect_timeout, authentication: authentication, scope: scope)
295
+ end
296
+ end
297
+
287
298
  # Timeline WebSocket
288
299
  class TimelineEventsWebSocketApi < CmdTlmWebSocketApi
289
300
  def initialize(history_count: 0, url: nil, write_timeout: 10.0, read_timeout: 10.0, connect_timeout: 5.0, authentication: nil, scope: $openc3_scope)
@@ -30,10 +30,11 @@ module OpenC3
30
30
  # DecomMicroservice is listening to the DECOMINTERFACE topic and is responsible
31
31
  # for actually building the command. This was deliberate to allow this to work
32
32
  # with or without an interface.
33
+ ack_topic = "{#{scope}__ACKCMD}TARGET__#{target_name}"
34
+ Topic.update_topic_offsets([ack_topic])
33
35
  decom_id = Topic.write_topic("#{scope}__DECOMINTERFACE__{#{target_name}}",
34
36
  { 'build_cmd' => JSON.generate(data, allow_nan: true) }, '*', 100)
35
37
  timeout = 5 # Arbitrary 5s timeout
36
- ack_topic = "{#{scope}__ACKCMD}TARGET__#{target_name}"
37
38
  time = Time.now
38
39
  while (Time.now - time) < timeout
39
40
  Topic.read_topics([ack_topic]) do |topic, msg_id, msg_hash, redis|
@@ -0,0 +1,40 @@
1
+ # encoding: ascii-8bit
2
+
3
+ # Copyright 2024 OpenC3, Inc.
4
+ # All Rights Reserved.
5
+ #
6
+ # This program is free software; you can modify and/or redistribute it
7
+ # under the terms of the GNU Affero General Public License
8
+ # as published by the Free Software Foundation; version 3 with
9
+ # attribution addendums as found in the LICENSE.txt
10
+ #
11
+ # This program is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU Affero General Public License for more details.
15
+
16
+ # This file may also be used under the terms of a commercial license
17
+ # if purchased from OpenC3, Inc.
18
+
19
+ require 'openc3/topics/topic'
20
+
21
+ module OpenC3
22
+ class SystemEventsTopic < Topic
23
+ PRIMARY_KEY = "OPENC3__SYSTEM__EVENTS".freeze
24
+
25
+ def self.update_topic_offsets()
26
+ Topic.update_topic_offsets([PRIMARY_KEY])
27
+ end
28
+
29
+ def self.write(type, event)
30
+ event['type'] = type
31
+ Topic.write_topic(PRIMARY_KEY, {event: JSON.generate(event)}, '*', 1000)
32
+ end
33
+
34
+ def self.read()
35
+ Topic.read_topics([PRIMARY_KEY]) do |_topic, _msg_id, msg_hash, _redis|
36
+ yield JSON.parse(msg_hash['event'])
37
+ end
38
+ end
39
+ end
40
+ end
@@ -21,6 +21,7 @@
21
21
  # if purchased from OpenC3, Inc.
22
22
 
23
23
  require 'openc3/version'
24
+ require 'openc3/io/json_drb'
24
25
  require 'faraday'
25
26
 
26
27
  module OpenC3
@@ -145,7 +146,7 @@ module OpenC3
145
146
  def _make_request(headers, data)
146
147
  realm = ENV['OPENC3_KEYCLOAK_REALM'] || 'openc3'
147
148
  uri = URI("#{@url}/realms/#{realm}/protocol/openid-connect/token")
148
- @log[0] = "request uri: #{uri.to_s} header: #{headers.to_s} body: #{data.to_s}"
149
+ @log[0] = "request uri: #{uri} header: #{headers} body: #{data}"
149
150
  STDOUT.puts @log[0] if JsonDRb.debug?
150
151
  saved_verbose = $VERBOSE; $VERBOSE = nil
151
152
  begin
@@ -14,7 +14,7 @@
14
14
  # GNU Affero General Public License for more details.
15
15
 
16
16
  # Modified by OpenC3, Inc.
17
- # All changes Copyright 2022, OpenC3, Inc.
17
+ # All changes Copyright 2024, OpenC3, Inc.
18
18
  # All Rights Reserved
19
19
  #
20
20
  # This file may also be used under the terms of a commercial license
@@ -37,7 +37,7 @@ rescue LoadError
37
37
  private
38
38
 
39
39
  # Raises an exception if unauthorized, otherwise does nothing
40
- def authorize(permission: nil, target_name: nil, packet_name: nil, interface_name: nil, router_name: nil, scope: nil, token: nil)
40
+ def authorize(permission: nil, target_name: nil, packet_name: nil, interface_name: nil, router_name: nil, manual: false, scope: nil, token: nil)
41
41
  raise AuthError.new("Scope is required") unless scope
42
42
 
43
43
  if $openc3_authorize
@@ -1,14 +1,14 @@
1
1
  # encoding: ascii-8bit
2
2
 
3
- OPENC3_VERSION = '5.17.0'
3
+ OPENC3_VERSION = '5.18.0'
4
4
  module OpenC3
5
5
  module Version
6
6
  MAJOR = '5'
7
- MINOR = '17'
7
+ MINOR = '18'
8
8
  PATCH = '0'
9
9
  OTHER = ''
10
- BUILD = 'da4e65bcbe6c1fad00b5eb3499a026c9f75412a1'
10
+ BUILD = '15e1526c2ad19e88a87fef40bece0867e65f91e0'
11
11
  end
12
- VERSION = '5.17.0'
13
- GEM_VERSION = '5.17.0'
12
+ VERSION = '5.18.0'
13
+ GEM_VERSION = '5.18.0'
14
14
  end
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "<%= tool_name %>",
3
- "version": "5.17.0",
3
+ "version": "5.18.0",
4
4
  "scripts": {
5
5
  "ng": "ng",
6
6
  "start": "ng serve",
@@ -23,12 +23,12 @@
23
23
  "@angular/platform-browser-dynamic": "^17.0.8",
24
24
  "@angular/router": "^17.0.8",
25
25
  "@astrouxds/astro-web-components": "7.22.1",
26
- "@openc3/tool-common": "5.17.0",
26
+ "@openc3/tool-common": "5.18.0",
27
27
  "rxjs": "~7.8.0",
28
28
  "single-spa": "5.9.5",
29
29
  "single-spa-angular": "^9.0.1",
30
30
  "tslib": "^2.6.2",
31
- "zone.js": "~0.14.3"
31
+ "zone.js": "~0.14.10"
32
32
  },
33
33
  "devDependencies": {
34
34
  "@angular-builders/custom-webpack": "17.0.2",
@@ -36,8 +36,8 @@
36
36
  "@angular/cli": "~17.3.6",
37
37
  "@angular/compiler-cli": "^17.0.6",
38
38
  "@types/jasmine": "~5.1.4",
39
- "jasmine-core": "~5.1.1",
40
- "karma": "~6.4.0",
39
+ "jasmine-core": "~5.2.0",
40
+ "karma": "~6.4.4",
41
41
  "karma-chrome-launcher": "~3.2.0",
42
42
  "karma-coverage": "~2.2.0",
43
43
  "karma-jasmine": "~5.1.0",
@@ -15,20 +15,20 @@
15
15
  "dependencies": {
16
16
  "@emotion/react": "^11.11.3",
17
17
  "@emotion/styled": "^11.11.0",
18
- "@mui/material": "^5.15.3",
18
+ "@mui/material": "^5.16.7",
19
19
  "react": "^18.2.0",
20
20
  "react-dom": "^18.2.0",
21
21
  "single-spa-react": "^5.1.4"
22
22
  },
23
23
  "devDependencies": {
24
- "@babel/core": "^7.23.7",
25
- "@babel/eslint-parser": "^7.23.3",
24
+ "@babel/core": "^7.25.2",
25
+ "@babel/eslint-parser": "^7.25.1",
26
26
  "@babel/plugin-transform-runtime": "^7.23.7",
27
- "@babel/preset-env": "^7.23.8",
27
+ "@babel/preset-env": "^7.25.3",
28
28
  "@babel/preset-react": "^7.23.3",
29
- "@babel/runtime": "^7.23.8",
30
- "@testing-library/jest-dom": "^6.2.0",
31
- "@testing-library/react": "^14.1.2",
29
+ "@babel/runtime": "^7.25.0",
30
+ "@testing-library/jest-dom": "^6.4.8",
31
+ "@testing-library/react": "^16.0.0",
32
32
  "babel-jest": "^29.7.0",
33
33
  "concurrently": "^8.2.2",
34
34
  "cross-env": "^7.0.3",
@@ -45,6 +45,6 @@
45
45
  "webpack-cli": "^5.1.4",
46
46
  "webpack-config-single-spa-react": "^4.0.5",
47
47
  "webpack-dev-server": "^5.0.4",
48
- "webpack-merge": "^5.10.0"
48
+ "webpack-merge": "^6.0.1"
49
49
  }
50
50
  }
@@ -12,36 +12,36 @@
12
12
  },
13
13
  "dependencies": {
14
14
  "@astrouxds/astro-web-components": "7.22.1",
15
- "@openc3/tool-common": "5.17.0",
15
+ "@openc3/tool-common": "5.18.0",
16
16
  "@smui/button": "^7.0.0-beta.16",
17
17
  "@smui/card": "^7.0.0-beta.16",
18
18
  "@smui/list": "^7.0.0-beta.16",
19
19
  "@smui/menu": "^7.0.0-beta.16",
20
- "axios": "1.7.2",
20
+ "axios": "1.7.4",
21
21
  "single-spa-svelte": "^2.1.1",
22
22
  "sirv-cli": "^2.0.2",
23
23
  "svelte-portal": "^2.2.0"
24
24
  },
25
25
  "devDependencies": {
26
- "@babel/core": "^7.23.7",
27
- "@babel/preset-env": "^7.23.8",
28
- "@rollup/plugin-commonjs": "^25.0.7",
26
+ "@babel/core": "^7.25.2",
27
+ "@babel/preset-env": "^7.25.3",
28
+ "@rollup/plugin-commonjs": "^26.0.1",
29
29
  "@rollup/plugin-node-resolve": "^15.2.3",
30
- "@testing-library/jest-dom": "^6.2.0",
31
- "@testing-library/svelte": "^4.0.5",
30
+ "@testing-library/jest-dom": "^6.4.8",
31
+ "@testing-library/svelte": "^5.2.1",
32
32
  "babel-jest": "^29.7.0",
33
33
  "concurrently": "^8.2.2",
34
34
  "jest": "^29.7.0",
35
- "postcss": "^8.4.33",
35
+ "postcss": "^8.4.41",
36
36
  "prettier": "^3.1.1",
37
37
  "prettier-plugin-svelte": "^3.1.2",
38
- "rollup": "^4.9.4",
38
+ "rollup": "^4.20.0",
39
39
  "rollup-plugin-livereload": "^2.0.5",
40
40
  "rollup-plugin-postcss": "^4.0.2",
41
41
  "rollup-plugin-svelte": "^7.1.6",
42
42
  "rollup-plugin-terser": "^7.0.2",
43
43
  "smui-theme": "^7.0.0-beta.16",
44
44
  "svelte": "^4.2.8",
45
- "svelte-jester": "^3.0.0"
45
+ "svelte-jester": "^5.0.0"
46
46
  }
47
47
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "<%= tool_name %>",
3
- "version": "5.17.0",
3
+ "version": "5.18.0",
4
4
  "private": true,
5
5
  "scripts": {
6
6
  "serve": "vue-cli-service serve",
@@ -12,8 +12,8 @@
12
12
  },
13
13
  "dependencies": {
14
14
  "@astrouxds/astro-web-components": "7.22.1",
15
- "@openc3/tool-common": "5.17.0",
16
- "axios": "1.7.2",
15
+ "@openc3/tool-common": "5.18.0",
16
+ "axios": "1.7.4",
17
17
  "date-fns": "3.6.0",
18
18
  "portal-vue": "2.1.7",
19
19
  "single-spa-vue": "2.5.1",
@@ -25,7 +25,7 @@
25
25
  "vuex": "3.6.2"
26
26
  },
27
27
  "devDependencies": {
28
- "@babel/eslint-parser": "7.24.7",
28
+ "@babel/eslint-parser": "7.25.1",
29
29
  "@vue/babel-preset-app": "5.0.8",
30
30
  "@vue/cli": "5.0.8",
31
31
  "@vue/cli-plugin-babel": "5.0.8",
@@ -36,18 +36,18 @@
36
36
  "@vue/eslint-config-prettier": "9.0.0",
37
37
  "@vue/test-utils": "1.3.0",
38
38
  "babel-loader": "9.1.3",
39
- "babel-plugin-istanbul": "6.1.1",
39
+ "babel-plugin-istanbul": "7.0.0",
40
40
  "eslint": "8.56.0",
41
41
  "eslint-config-prettier": "9.1.0",
42
- "eslint-plugin-prettier": "5.1.3",
43
- "eslint-plugin-vue": "9.26.0",
42
+ "eslint-plugin-prettier": "5.2.1",
43
+ "eslint-plugin-vue": "9.27.0",
44
44
  "html-webpack-plugin": "^5.6.0",
45
- "prettier": "3.3.2",
46
- "sass": "1.77.6",
45
+ "prettier": "3.3.3",
46
+ "sass": "1.77.8",
47
47
  "sass-loader": "14.2.1",
48
48
  "vue-cli-plugin-single-spa": "3.3.0",
49
49
  "vue-cli-plugin-vuetify": "2.5.8",
50
50
  "vue-template-compiler": "2.7.16",
51
- "webpack": "5.92.1"
51
+ "webpack": "5.93.0"
52
52
  }
53
53
  }
@@ -1,19 +1,19 @@
1
1
  {
2
2
  "name": "widget",
3
- "version": "5.17.0",
3
+ "version": "5.18.0",
4
4
  "private": true,
5
5
  "scripts": {
6
6
  "build": "vue-cli-service build --target lib --dest tools/widgets/<%= widget_name %> --formats umd-min <%= widget_path %> --name <%= widget_name %>"
7
7
  },
8
8
  "dependencies": {
9
9
  "@astrouxds/astro-web-components": "7.22.1",
10
- "@openc3/tool-common": "5.17.0",
10
+ "@openc3/tool-common": "5.18.0",
11
11
  "vue": "2.7.16",
12
12
  "vuetify": "2.7.1"
13
13
  },
14
14
  "devDependencies": {
15
- "@babel/eslint-parser": "7.24.7",
16
- "@rushstack/eslint-patch": "1.10.3",
15
+ "@babel/eslint-parser": "7.25.1",
16
+ "@rushstack/eslint-patch": "1.10.4",
17
17
  "@vue/babel-preset-app": "5.0.8",
18
18
  "@vue/cli": "5.0.8",
19
19
  "@vue/cli-plugin-babel": "5.0.8",
@@ -21,16 +21,16 @@
21
21
  "@vue/cli-service": "5.0.8",
22
22
  "@vue/eslint-config-prettier": "9.0.0",
23
23
  "babel-loader": "9.1.3",
24
- "babel-plugin-istanbul": "6.1.1",
24
+ "babel-plugin-istanbul": "7.0.0",
25
25
  "eslint": "8.56.0",
26
26
  "eslint-config-prettier": "9.1.0",
27
- "eslint-plugin-prettier": "5.1.3",
28
- "eslint-plugin-vue": "9.26.0",
29
- "prettier": "3.3.2",
30
- "sass": "1.77.6",
27
+ "eslint-plugin-prettier": "5.2.1",
28
+ "eslint-plugin-vue": "9.27.0",
29
+ "prettier": "3.3.3",
30
+ "sass": "1.77.8",
31
31
  "sass-loader": "14.2.1",
32
32
  "vue-cli-plugin-vuetify": "2.5.8",
33
33
  "vue-template-compiler": "2.7.16",
34
- "webpack": "5.92.1"
34
+ "webpack": "5.93.0"
35
35
  }
36
36
  }
@@ -16,7 +16,6 @@
16
16
  single-line
17
17
  hide-no-data
18
18
  hide-details
19
- placeholder="Value"
20
19
  :value="_value"
21
20
  :class="valueClass"
22
21
  :style="computedStyle"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: openc3
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.17.0
4
+ version: 5.18.0
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: 2024-06-26 00:00:00.000000000 Z
12
+ date: 2024-08-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -557,6 +557,20 @@ dependencies:
557
557
  - - "~>"
558
558
  - !ruby/object:Gem::Version
559
559
  version: '1.0'
560
+ - !ruby/object:Gem::Dependency
561
+ name: listen
562
+ requirement: !ruby/object:Gem::Requirement
563
+ requirements:
564
+ - - "~>"
565
+ - !ruby/object:Gem::Version
566
+ version: '3.9'
567
+ type: :runtime
568
+ prerelease: false
569
+ version_requirements: !ruby/object:Gem::Requirement
570
+ requirements:
571
+ - - "~>"
572
+ - !ruby/object:Gem::Version
573
+ version: '3.9'
560
574
  - !ruby/object:Gem::Dependency
561
575
  name: benchmark-ips
562
576
  requirement: !ruby/object:Gem::Requirement
@@ -872,8 +886,13 @@ files:
872
886
  - lib/openc3/config/config_parser.rb
873
887
  - lib/openc3/config/meta_config_parser.rb
874
888
  - lib/openc3/conversions.rb
889
+ - lib/openc3/conversions/bit_reverse_conversion.rb
875
890
  - lib/openc3/conversions/conversion.rb
876
891
  - lib/openc3/conversions/generic_conversion.rb
892
+ - lib/openc3/conversions/ip_read_conversion.rb
893
+ - lib/openc3/conversions/ip_write_conversion.rb
894
+ - lib/openc3/conversions/object_read_conversion.rb
895
+ - lib/openc3/conversions/object_write_conversion.rb
877
896
  - lib/openc3/conversions/packet_time_formatted_conversion.rb
878
897
  - lib/openc3/conversions/packet_time_seconds_conversion.rb
879
898
  - lib/openc3/conversions/polynomial_conversion.rb
@@ -1090,6 +1109,7 @@ files:
1090
1109
  - lib/openc3/topics/interface_topic.rb
1091
1110
  - lib/openc3/topics/limits_event_topic.rb
1092
1111
  - lib/openc3/topics/router_topic.rb
1112
+ - lib/openc3/topics/system_events_topic.rb
1093
1113
  - lib/openc3/topics/telemetry_decom_topic.rb
1094
1114
  - lib/openc3/topics/telemetry_reduced_topics.rb
1095
1115
  - lib/openc3/topics/telemetry_topic.rb