/*

ARIA header files for use with ARNL 1.7.1

Copyright(C) 2004, 2005 ActivMedia Robotics, LLC. 
Copyright(C) 2006, 2007, 2008, 2009 MobileRobots Inc.
All rights reserved.

This copy of Aria was relicensed for use with Arnl and the Arnl
license by MobileRobots Inc.  If you wish to download a seperate
distribution of Aria licensed under the GPL or a commercial license go to
http://www.mobilerobots.com/SOFTWARE/aria.html or contact MobileRobots
Inc, at robots@mobilerobots.com or MobileRobots Inc,
10 Columbia Drive, Amherst, NH 03031; 800-639-9481

MobileRobots Inc hereby grants to other individuals or
organizations permission to use this software with Arnl and in
compliance with the Arnl license.  This software may not be
distributed to others except by MobileRobots Inc.

MobileRobots Inc does not make any representations about the
suitability of this software for any purpose.  It is provided "as is"
without express or implied warranty.

*/
#ifndef ARROBOTCONFIG_H
#define ARROBOTCONFIG_H

#include "ArFunctor.h"

class ArRobot;
class ArAnalogGyro;

/// Class for controlling robot movement parameters from config
class ArRobotConfig
{
public:
  /// Constructor
  AREXPORT ArRobotConfig(ArRobot *robot);
  /// Destructor
  AREXPORT virtual ~ArRobotConfig();
  /// Adds a gyro to turn on and off
  AREXPORT void addAnalogGyro(ArAnalogGyro *gyro);
  /// Called when we process the config
  AREXPORT bool processFile(void);
  /// Called when we connect to the robot
  AREXPORT void connectCallback(void);
protected:
  ArRobot *myRobot;
  ArAnalogGyro *myAnalogGyro;

  bool mySavedOriginalMovementParameters;
  int myOriginalTransVelMax;
  int myOriginalTransAccel;
  int myOriginalTransDecel;
  int myOriginalRotVelMax;
  int myOriginalRotAccel;
  int myOriginalRotDecel;

  bool myAddedMovementParams;
  int myTransVelMax;
  int myTransAccel;
  int myTransDecel;
  int myRotVelMax;
  int myRotAccel;
  int myRotDecel;

  bool myAddedGyro;
  bool myUseGyro;

  ArFunctorC<ArRobotConfig> myConnectCB;  
  ArRetFunctorC<bool, ArRobotConfig> myProcessFileCB;
};

#endif
