class Artoo::Connection

The Connection class represents the interface to a specific group of hardware devices. Examples would be an Arduino, a Sphero, or an ARDrone.

Attributes

adaptor[R]
connection_id[R]
details[R]
name[R]
parent[R]
port[R]

Public Class Methods

new(params={}) click to toggle source

Create new connection @param [Hash] params @option params :id [String] @option params :name [String] @option params :parent [String] @option params :adaptor [String] @option params :port [Integer]

# File lib/artoo/connection.rb, line 21
def initialize(params={})
  @connection_id = params[:id] || rand(10000).to_s
  @name = params[:name].to_s
  @port = Port.new(params[:port])
  @parent = params[:parent]
  @details = remove_keys(params, :name, :parent, :id, :loopback)

  require_adaptor(params[:adaptor] || :loopback, params)
end

Public Instance Methods

adaptor_name() click to toggle source

@return [String] Adaptor class name

# File lib/artoo/connection.rb, line 54
def adaptor_name
  adaptor.class.name
end
as_json() click to toggle source

@return [JSON] connection

# File lib/artoo/connection.rb, line 68
def as_json
  MultiJson.dump(to_hash)
end
connect() click to toggle source

Creates adaptor connection @return [Boolean]

# File lib/artoo/connection.rb, line 33
def connect
  Logger.info "Connecting to '#{name}' on port '#{port}'..."
  adaptor.connect
rescue Exception => e
  Logger.error e.message
  Logger.error e.backtrace.inspect
end
connected?() click to toggle source

@return [Boolean] Connection status

# File lib/artoo/connection.rb, line 49
def connected?
  adaptor.connected?
end
disconnect() click to toggle source

Closes adaptor connection @return [Boolean]

# File lib/artoo/connection.rb, line 43
def disconnect
  Logger.info "Disconnecting from '#{name}' on port '#{port}'..."
  adaptor.disconnect
end
inspect() click to toggle source

@return [String] Formated connection

# File lib/artoo/connection.rb, line 73
def inspect
  "#<Connection @id=#{object_id}, @name='#{name}', @adaptor=#{adaptor_name}>"
end
method_missing(method_name, *arguments, &block) click to toggle source

Redirects missing methods to adaptor, attemps reconnection if adaptor not connected

# File lib/artoo/connection.rb, line 79
def method_missing(method_name, *arguments, &block)
  unless adaptor.connected?
    Logger.warn "Cannot call unconnected adaptor '#{name}', attempting to reconnect..."
    adaptor.reconnect
    return nil
  end
  adaptor.send(method_name, *arguments, &block)
rescue Exception => e
  Logger.error e.message
  Logger.error e.backtrace.inspect
  return nil
end
respond_to_missing?(method_name, include_private = false) click to toggle source
# File lib/artoo/connection.rb, line 92
def respond_to_missing?(method_name, include_private = false)
  # TODO: verify that the adaptor supprts the method we're calling
  true
end
to_hash() click to toggle source

@return [Hash] connection

# File lib/artoo/connection.rb, line 59
def to_hash
  {
    :name => name,
    :adaptor => adaptor_name.to_s.gsub(/^.*::/, ''),
    :details => @details
  }
end

Private Instance Methods

require_adaptor(type, params) click to toggle source
# File lib/artoo/connection.rb, line 99
def require_adaptor(type, params)
  if Artoo::Robot.test?
    type = :test
  end

  require "artoo/adaptors/#{type.to_s}"
  @adaptor = constantize("Artoo::Adaptors::#{classify(type.to_s)}").new(:port => port, :parent => current_instance, :additional_params => params)
end