Class: Denko::OneWire::Helper

Inherits:
Object
  • Object
show all
Defined in:
lib/denko/one_wire/helper.rb

Class Method Summary collapse

Class Method Details

.address_to_bytes(address) ⇒ Object



4
5
6
# File 'lib/denko/one_wire/helper.rb', line 4

def self.address_to_bytes(address)
  [address].pack('Q<').split("").map(&:ord)
end

.calculate_crc(data) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/denko/one_wire/helper.rb', line 13

def self.calculate_crc(data)
  if data.class == Integer
    bytes = address_to_bytes(data)
  else
    bytes = data
  end

  crc = 0b00000000
  bytes.take(bytes.length - 1).each do |byte|
    for bit in (0..7)
      xor = byte[bit] ^ crc[0]
      crc = crc ^ ((xor * (2 ** 3)) | (xor * (2 ** 4)))
      crc = crc >> 1
      crc = crc | (xor * (2 ** 7))
    end
  end
  [crc, bytes.last]
end

.crc(data) ⇒ Object



8
9
10
11
# File 'lib/denko/one_wire/helper.rb', line 8

def self.crc(data)
  calculated, received = self.calculate_crc(data)
  calculated == received
end