=begin
 ******************************************************************************
 * Copyright 1990-2007 MBARI
 * MBARI Proprietary Information. All rights reserved.
 ******************************************************************************
 * Summary  : Contain the rover software component objects
 * Filename : rover.rb
 * Author   : Henthorn
 * Project  : Benthic Rover
 * Version  : 2
 * Created  : Nov 08
 * Modified : Updated for lib.2
 ******************************************************************************
=end

# Refer to Rover-code home directory as base
#
require "#{ENV['ROVER_HOME']}/utils/rover_environment"
#

require "singleton"
require "getoptlong"

require "utils/misc"
require "utils/options"
require "device/acm"
require "device/aanderaa"
require "device/relay_board"
require "device/relay8"
require "device/axis"
require "device/prosilica"
require "device/rack"
require "device/ezservo"
require "device/modem"
require "device/hesc"
require "device/battery"
require "device/fluorometer"
require "device/wakey"

#This class is a singleton, to access it call 'Rover.instance'
class Rover
  include Singleton
  include SyslogWriter
  
  attr_accessor :acm, :relay, :video, :port_rack, :motors, :stbd_ref_optode, \
                :modem, :port_optode, :starboard_optode, :cm, :rt, :battery, \
                :port_ref_optode, :transit_cam, :fluoro_cam, :stbd_rack, \
                :hesc, :fluorometer, :wakey

  #in the future, this should be where a config file is read to initialize
  #all the rover's subsystems.
  def initialize
    # Get command-line options. Must be valid before proceeding.
    #

    if(Options.instance.sim)
      initialize_sim()
    else
      self.relay = Relay8.new
      self.motors = Ezstepper.ses
      self.fluoro_cam = Prosilica.new(122975)
      self.fluorometer = Fluorometer.new("/dev/fluorometer")
#      self.wakey = Wakey.new("/dev/wakey")
#      self.rt.warp = Options.instance.warp
      puts("rover: Rover control system instantiated")
    end
  end

  #####
  def new_ez
    if(Options.instance.sim)
      self.motors = SimEzservo.rover
    else
      self.motors.close
      self.motors = nil
      self.motors = Ezservo.rover
    end
  end
  #####

  
  def wakey_msg(msg_string)
    response = `/cf/barbo/device/wakey.rb #{msg_string}`
    syslog("_ wakey response is #{response}")
    response
  end
  

  def humidity()
    response = `/usr/local/bin/usbtenkiget -i 0,1`
    syslog("_ humidity response is #{response}")
    response
  end
  

  # Switch the ethernet port on the TS board on or off
  #
  def ethernet(on_off)
    # on_off parameter evaluates to true or false
    #
    if (on_off)
      syslog("_ ethernet on")
      `/cf/rover/ext/cctl -w ether=on`
    else
      syslog("_ ethernet off")
      `/cf/rover/ext/cctl -w ether=off`
    end
  end

  def sleep_cpu(time_in_seconds)
    sleepcmd = "/cf/rover/lib/bat3 --sleep #{time_in_seconds}"
    syslog("_ " + sleepcmd)
    sleep(1)
    system(sleepcmd)
  end

  def initialize_sim
  end
end
