Sha256: 0c383f9e0db7791ca26bbeebec6047430ed922addabc4654c2b6afaa336734ce

Contents?: true

Size: 1.29 KB

Versions: 7

Compression:

Stored size: 1.29 KB

Contents

module Denko
  module OneWire
    class Peripheral
      include Behaviors::BusPeripheralAddressed
      include Behaviors::Poller
      include Constants

      attr_reader :address
      alias  :bus :board

      def read_scratch(num_bytes, &block)
        atomically do
          bus.add_callback(:read, &block) if block_given?
          match
          bus.write(READ_SCRATCH)
          bus.read(num_bytes)
        end
      end

      def write_scratch(*bytes)
        atomically do
          match
          bus.write(WRITE_SCRATCH)
          bus.write(*bytes)
        end
      end

      def copy_scratch
        atomically do
          match
          bus.write(COPY_SCRATCH)
          sleep 0.05
          bus.reset if bus.parasite_power
        end
      end

      def match
        bus.reset
        if bus.found_devices.count < 2
          bus.write(SKIP_ROM)
        else
          bus.write(MATCH_ROM)
          bus.write(address_bytes)
        end
      end

      def address_bytes
        Helper.address_to_bytes(self.address)
      end

      def serial_number
        @serial_number ||= extract_serial
      end

      def extract_serial
        # Remove CRC & family code.
        serial = (@address & 0x00FFFFFFFFFFFFFF) >> 8
        serial.to_s(16).rjust(12, "0")
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
denko-0.13.6 lib/denko/one_wire/peripheral.rb
denko-0.13.5 lib/denko/one_wire/peripheral.rb
denko-0.13.4 lib/denko/one_wire/peripheral.rb
denko-0.13.3 lib/denko/one_wire/peripheral.rb
denko-0.13.2 lib/denko/one_wire/peripheral.rb
denko-0.13.1 lib/denko/one_wire/peripheral.rb
denko-0.13.0 lib/denko/one_wire/peripheral.rb