Method: OpenC3::BinaryAccessor#handle_read_variable_bit_size

Defined in:
lib/openc3/accessors/binary_accessor.rb

#handle_read_variable_bit_size(item, _buffer) ⇒ Object



114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
# File 'lib/openc3/accessors/binary_accessor.rb', line 114

def handle_read_variable_bit_size(item, _buffer)
  length_value = @packet.read(item.variable_bit_size['length_item_name'], :CONVERTED)
  if item.array_size
    item.array_size = (length_value * item.variable_bit_size['length_bits_per_count']) + item.variable_bit_size['length_value_bit_offset']
  else
    if item.data_type == :INT or item.data_type == :UINT
      # QUIC encoding is currently assumed for individual variable sized integers
      # see https://datatracker.ietf.org/doc/html/rfc9000#name-variable-length-integer-enc
      case length_value
      when 0
        item.bit_size = 6
      when 1
        item.bit_size = 14
      when 2
        item.bit_size = 30
      else
        item.bit_size = 62
      end
    else
      item.bit_size = (length_value * item.variable_bit_size['length_bits_per_count']) + item.variable_bit_size['length_value_bit_offset']
    end
  end
end