Main Page | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members | Related Pages | Examples

ArJoyHandler Class Reference

#include <ArJoyHandler.h>

List of all members.


Detailed Description

Interfaces to a joystick.

The joystick handler keeps track of the minimum and maximums for both axes, updating them to constantly be better calibrated. The speeds set influence what is returned by getAdjusted...

The joystick is not opened until init is called. What should basically be done to use this class is to 'init' a joystick, do a 'setSpeed' so you can use 'getAdusted', then at some point do a 'getButton' to see if a button is pressed, and then do a 'getAdjusted' to get the values to act on.

Also note that x is usually rotational velocity (since it right/left), whereas Y is translational (since it is up/down).

You can also use this to do multiple uses with the joystick, for example to have button 1 drive the robot while to have button 2 move the camera, you can get the different values you want (don't want to move the camera as quickly or as far as the robot) by using setSpeed before doing getAdjusted since setSpeed is fast and won't take any time.

Examples:

gpsRobotTaskExample.cpp, joydriveActionExample.cpp, and sonyPTZDemo.cpp.


Public Member Functions

 ArJoyHandler (bool useOSCal=true, bool useOldJoystick=false)
 Constructor.
void endCal (void)
 Ends the calibration process.
void getAdjusted (int *x, int *y, int *z=NULL)
 Gets the adjusted reading, as integers, based on the setSpeed.
double getAxis (unsigned int axis)
 Gets the floating (-1 to 1) location of the given joystick axis.
bool getButton (unsigned int button)
 Gets the button.
void getDoubles (double *x, double *y, double *z=NULL)
 Gets the adjusted reading, as floats, between -1.0 and 1.0.
unsigned int getNumAxes (void)
 Gets the number of axes the joystick has.
unsigned int getNumButtons (void)
 Gets the number of buttons the joystick has.
void getSpeeds (int *x, int *y, int *z)
 Gets the speeds that X and Y are set to.
void getStats (int *maxX, int *minX, int *maxY, int *minY, int *cenX, int *cenY)
 Gets the stats for the joystick, useful after calibrating to save values.
void getUnfiltered (int *x, int *y, int *z=NULL)
bool getUseOSCal (void)
 Gets whether to just use OS calibration or not.
bool haveJoystick (void)
 Returns if the joystick was successfully initialized or not.
bool haveZAxis (void)
 Returns true if we definitely have a Z axis (we don't know in windows unless it moves).
bool init (void)
 Intializes the joystick, returns true if successful.
void setSpeeds (int x, int y, int z=0)
 Sets the max that X or Y will return.
void setStats (int maxX, int minX, int maxY, int minY, int cenX, int cenY)
 Sets the stats for the joystick, useful for restoring calibrated settings.
void setUseOSCal (bool useOSCal)
 Sets whether to just use OS calibration or not.
void startCal (void)
 Starts the calibration process.
 ~ArJoyHandler ()
 Destructor.

Protected Member Functions

void getData (void)
void getNewData (void)
 Handles the reading of the data into the bins.
void getOldData (void)

Protected Attributes

std::map< unsigned int, int > myAxes
std::map< unsigned int, bool > myButtons
int myCenX
int myCenY
bool myFirstData
bool myHaveZ
bool myInitialized
int myJoyData
int myJoyDesc
char myJoyNameTemp [512]
int myJoyNumber
ArTime myLastDataGathered
ArTime myLastOpenTry
int myMaxX
int myMaxY
int myMinX
int myMinY
FILE * myOldJoyDesc
int myPhysMax
int myTopX
int myTopY
int myTopZ
bool myUseOld
bool myUseOSCal


Constructor & Destructor Documentation

ArJoyHandler::ArJoyHandler bool  useOSCal = true,
bool  useOld = false
 

Constructor.

Parameters:
useOSCal if this is set then the joystick will just rely on the OS to calibrate, otherwise it will keep track of center min and max and use those values for calibration
useOld use the old linux interface to the joystick


Member Function Documentation

void ArJoyHandler::endCal void   ) 
 

Ends the calibration process.

Ends the calibration, which also sets the center to where the joystick is when the function is called... the center is never reset except in this function, whereas the min and maxes are constantly checked

See also:
startCal

void ArJoyHandler::getAdjusted int *  x,
int *  y,
int *  z = NULL
 

Gets the adjusted reading, as integers, based on the setSpeed.

if useOSCal is true then this returns the readings as calibrated from the OS. If useOSCal is false this finds the percentage of the distance between center and max (or min) then takes this percentage and multiplies it by the speeds given the class, and returns the values computed from this.

Parameters:
x pointer to an integer in which to store the x value, which will be within the range [-1 * x given in setSpeeds(), x given in setSpeeds()]
y pointer to an integer in which to store the y value, which will be within the range [-1 * y given in setSpeeds(), y given in setSpeeds()]
z pointer to an integer in which to store the z value, which will be within the range [-1 * z given in setSpeeds(), z given in setSpeeds()]

double ArJoyHandler::getAxis unsigned int  axis  ) 
 

Gets the floating (-1 to 1) location of the given joystick axis.

Parameters:
axis axis to get, should range from 1 through getNumAxes()
// now make sure its in there if (myAxes.find(axis) == myAxes.end()) return 0; return myAxes[axis]/128.0;

bool ArJoyHandler::getButton unsigned int  button  ) 
 

Gets the button.

Parameters:
button button to test for pressed, within the range 1 through getNumButtons()
Returns:
true if the button is pressed, false otherwise

void ArJoyHandler::getDoubles double *  x,
double *  y,
double *  z = NULL
 

Gets the adjusted reading, as floats, between -1.0 and 1.0.

If useOSCal is true then this gets normalized values as calibrated by the OS. If useOSCal is false this finds the percentage of the distance between center and max (or min) then takes this percentage and multiplies it by the speeds given the class, and returns the values computed from this.

Parameters:
x pointer to an integer in which to store the x value. Will be within the range [-1.0, 1.0]
y pointer to an integer in which to store the y value. Will be within the range [-1.0, 1.0]
z pointer to an integer in which to store the z value. Will be within the range [-1.0, 1.0]

unsigned int ArJoyHandler::getNumAxes void   ) 
 

Gets the number of axes the joystick has.

Returns:
the number of axes (axes are indexed as 1 through this number)

unsigned int ArJoyHandler::getNumButtons void   ) 
 

Gets the number of buttons the joystick has.

Returns:
the number of buttons (buttons are indexed as 1 through this number)

void ArJoyHandler::getUnfiltered int *  x,
int *  y,
int *  z = NULL
 

Gets the unfilitered reading, mostly for internal use, maybe useful for Calibration

bool ArJoyHandler::getUseOSCal void   ) 
 

Gets whether to just use OS calibration or not.

Returns:
if useOSCal is set then the joystick will just rely on the OS to calibrate, otherwise it will keep track of center min and max and use those values for calibration

void ArJoyHandler::setUseOSCal bool  useOSCal  ) 
 

Sets whether to just use OS calibration or not.

Parameters:
useOSCal if this is set then the joystick will just rely on the OS to calibrate, otherwise it will keep track of center min and max and use those values for calibration

void ArJoyHandler::startCal void   ) 
 

Starts the calibration process.

Starts the calibration, which resets all the min and max variables as well as the center variables.

See also:
endCal


The documentation for this class was generated from the following files:
Generated on Thu Jan 7 10:34:41 2010 for Aria by  doxygen 1.4.2