Sha256: fb5043ac0f142f54ae74db08810e1577ab25556b6c086d566e6036eebf6b7ab3

Contents?: true

Size: 794 Bytes

Versions: 1

Compression:

Stored size: 794 Bytes

Contents

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

      def self.crc_check(data)
        calculated, received = self.calculate_crc(data)
        calculated == received
      end
      
      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
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
denko-0.13.0 lib/denko/one_wire/helper.rb