module I2C::Drivers

Public Class Methods

define_mcp230xx_chip(name, parameters) click to toggle source

Defines a class for a chip implementation.

@param name Class name

# File lib/i2c/drivers/mcp230xx.rb, line 212
def self.define_mcp230xx_chip(name, parameters)
  raise ArgumentError, "Expecting options hash." unless parameters.kind_of? Hash
  [ [ :pin_count, Integer ],
    [ :port_count, Integer ],
    [ :iodir, Array ],
    [ :gpio, Array ] ].each do |expected_key| 
    raise ArgumentError, "Missing option #{expected_key[0]}" unless 
      parameters.has_key? expected_key[0] 
    raise ArgumentError, "Option #{expected_key[0]} expected to be a #{expected_key[1]}" unless 
      parameters[expected_key[0]].kind_of? expected_key[1] 
  end
  chip_class = self.const_set(name.to_sym, Class.new)
  chip_class.instance_eval do
    include MCP230xx
    parameters.each do |method_name, return_value|
      #puts "Defining #{name}##{method_name.to_sym}"
      define_method method_name.to_sym do
        return_value
      end
    end
    define_method :max_pin_no do 
      parameters[:pin_count] - 1 
    end 
    define_method :max_port_no do 
      parameters[:port_count] - 1 
    end 
  end
  chip_class
end