Sha256: 5696ce411549134d1618cd1e1ba5bbbc41a79487535063ce70e68ec4cfeb0a31

Contents?: true

Size: 1.35 KB

Versions: 7

Compression:

Stored size: 1.35 KB

Contents

module Denko
  module I2C
    class Bus
      include Behaviors::SinglePin
      include Behaviors::BusControllerAddressed
      include Behaviors::Reader

      attr_reader :found_devices

      def after_initialize(options={})
        super(options)
        @found_devices = []
        bubble_callbacks
      end

      def search
        addresses = read_using -> { board.i2c_search }
        @found_devices = addresses.split(":").map(&:to_i) if addresses
      end

      def write(address, bytes, frequency=100000, repeated_start=false)
        board.i2c_write(address, bytes, frequency, repeated_start)
      end

      def _read(address, register, num_bytes, frequency=100000, repeated_start=false)
        board.i2c_read(address, register, num_bytes, frequency, repeated_start)
      end
      
      def bubble_callbacks
        add_callback(:bus_controller) do |str|
          if str && str.match(/\A\d+-/)
            address, data = str.split("-", 2)
            address = address.to_i

            data = data.split(",").map(&:to_i)
            data = nil if data.empty?

            update_component(address, data)
          end
        end
      end

      def update_component(address, data)
        components.each do |component|
          if component.address == address
            component.update(data)
          end
        end
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
denko-0.13.6 lib/denko/i2c/bus.rb
denko-0.13.5 lib/denko/i2c/bus.rb
denko-0.13.4 lib/denko/i2c/bus.rb
denko-0.13.3 lib/denko/i2c/bus.rb
denko-0.13.2 lib/denko/i2c/bus.rb
denko-0.13.1 lib/denko/i2c/bus.rb
denko-0.13.0 lib/denko/i2c/bus.rb