Module: Unpack

Included in:
FitObject
Defined in:
lib/fitreader/unpack.rb

Constant Summary collapse

MASKS =
{
  7 => 0b10000000,
  6 => 0b01000000,
  5 => 0b00100000,
  4 => 0b00010000,
  3 => 0b00001000,
  2 => 0b00000100,
  1 => 0b00000010,
  0 => 0b00000001
}.freeze

Instance Method Summary collapse

Instance Method Details

#read_bit(byte, bit) ⇒ Object



22
23
24
# File 'lib/fitreader/unpack.rb', line 22

def read_bit(byte, bit)
  (byte & MASKS[bit]) >> bit
end

#read_bits(byte, range) ⇒ Object



26
27
28
29
30
31
# File 'lib/fitreader/unpack.rb', line 26

def read_bits(byte, range)
  mask = range.first
              .downto(range.last)
              .inject(0) { |sum, i| sum + MASKS[i] }
  (byte & mask) >> range.last
end

#read_multiple(io, char, len, size) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/fitreader/unpack.rb', line 8

def read_multiple(io, char, len, size)
  if char == 'Z*'
    readbytes(io, char, len)
  else
    multiples = len / size
    res = io.read(len).unpack(char * multiples)
    if res.length == 1
      res.first
    else
      res
    end
  end
end

#readbytes(io, char, len) ⇒ Object



2
3
4
5
6
# File 'lib/fitreader/unpack.rb', line 2

def readbytes(io, char, len)
  d = io.read(len)
  # binding.pry if char == 'Z*'
  d.unpack(char).first
end