Permalink
Find file
Fetching contributors…
Cannot retrieve contributors at this time
270 lines (249 sloc) 6.91 KB
/*
* Gamepad libraries for Nashoba Robotics Simple Robot 2013
*
* These are the gamepad abstractions for the 2013 Simple Robot code by Brandon Yannoni and Alex Brinister
*
* FreeBSD License:
*
* Copyright (c) 2013, Brandon Yannoni and Alex Brinister
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those
* of the authors and should not be interpreted as representing official policies,
* either expressed or implied, of the FreeBSD Project.
*/
#ifndef PADS_HPP
#define PADS_HPP
#include "Joystick.h"
namespace nr
{
namespace gamepad
{
// Logitech F310
class Gamepad : public Joystick
{
public:
// Enums for the axes, sticks, and buttons
typedef enum
{
kLeftStick = 1,
kRightStick = 2
} StickType;
typedef enum
{
kLeftXAxis = 1,
kLeftYAxis = 2,
kRightXAxis = 3,
kRightYAxis = 4,
kDPadXAxis = 5,
kDPadYAxis = 6
} AxisType;
typedef enum
{
kXButton = 1,
kAButton = 2,
kBButton = 3,
kYButton = 4,
kLeftBumper = 5,
kRightBumper = 6,
kLeftTrigger = 7,
kRightTrigger = 8,
kBackButton = 9,
kStartButton = 10,
kLeftStickButton = 11,
kRightStickButton = 12
} ButtonType;
Gamepad(UINT32 port) : Joystick(port) {}
virtual ~Gamepad();
float GetX(StickType stick)
{
switch(stick)
{
case kRightStick:
return GetRawAxis(kRightXAxis);
case kLeftStick:
return GetRawAxis(kLeftXAxis);
default:
return 0.0;
}
}
float GetY(StickType stick)
{
switch(stick)
{
case kRightStick:
return GetRawAxis(kRightYAxis);
case kLeftStick:
return GetRawAxis(kLeftYAxis);
default:
return 0.0;
}
}
float GetAxis(AxisType axis)
{
switch(axis)
{
case kLeftXAxis: return GetX(kLeftStick);
case kLeftYAxis: return GetY(kLeftStick);
case kRightXAxis: return GetX(kRightStick);
case kRightYAxis: return GetY(kRightStick);
case kDPadXAxis: return GetRawAxis(kDPadXAxis);
case kDPadYAxis: return GetRawAxis(kDPadYAxis);
default: return 0.0;
}
}
bool GetButton(ButtonType button)
{
switch(button)
{
case kXButton:
return GetRawButton(kXButton);
case kAButton:
return GetRawButton(kAButton);
case kBButton:
return GetRawButton(kBButton);
case kYButton:
return GetRawButton(kYButton);
case kLeftBumper:
return GetRawButton(kLeftBumper);
case kRightBumper:
return GetRawButton(kRightBumper);
case kLeftTrigger:
return GetRawButton(kLeftTrigger);
case kRightTrigger:
return GetRawButton(kRightTrigger);
case kBackButton:
return GetRawButton(kBackButton);
case kStartButton:
return GetRawButton(kStartButton);
case kLeftStickButton:
return GetRawButton(kLeftStickButton);
case kRightStickButton:
return GetRawButton(kRightStickButton);
default:
return false;
}
}
};
// Xbox controller
class XPad : public Joystick
{
public:
typedef enum
{
kLeftStick = 1,
kRightStick = 2
} StickType;
typedef enum
{
kLeftXAxis = 1,
kLeftYAxis = 2, //Inverted
kTriggerAxis = 3, //Left negative, right posotive
kRightXAxis = 4,
kRightYAxis = 5, //Inverted
kDPadXAxis = 6,
kDPadYAxis = 7 //<-Doesnt seem to work?
} AxisType;
typedef enum
{
kAButton = 1,
kBButton = 2,
kXButton = 3,
kYButton = 4,
kLeftBumperButton = 5,
kRightBumperButton = 6,
kBackButton = 7,
kStartButton = 8,
kLeftStickButton = 9,
kRightStickButton = 10
} ButtonType;
XPad(UINT32 port) : Joystick(port) {}
virtual
~XPad();
float
GetX(StickType stick)
{
if(stick == kRightStick)
return GetRawAxis(kRightXAxis);
else if(stick == kLeftStick)
return GetRawAxis(kLeftXAxis);
else
return 0.0;
}
float
GetY(StickType stick)
{
if(stick == kRightStick)
return GetRawAxis(kRightYAxis);
else if(stick == kLeftStick)
return GetRawAxis(kLeftYAxis);
else
return 0.0;
}
float
GetAxis(AxisType axis)
{
switch(axis)
{
case kLeftXAxis: return GetX(kLeftStick);
case kLeftYAxis: return GetY(kLeftStick);
case kRightXAxis: return GetX(kRightStick);
case kRightYAxis: return GetY(kRightStick);
case kTriggerAxis: return GetRawAxis(kTriggerAxis);
case kDPadXAxis: return GetRawAxis(kDPadXAxis);
case kDPadYAxis: return GetRawAxis(kDPadYAxis);
}
}
bool
GetButton(ButtonType button)
{
switch(button)
{
case kXButton:
return GetRawButton(kXButton);
case kAButton:
return GetRawButton(kAButton);
case kBButton:
return GetRawButton(kBButton);
case kYButton:
return GetRawButton(kYButton);
case kLeftBumperButton:
return GetRawButton(kLeftBumperButton);
case kRightBumperButton:
return GetRawButton(kRightBumperButton);
case kBackButton:
return GetRawButton(kBackButton);
case kStartButton:
return GetRawButton(kStartButton);
case kLeftStickButton:
return GetRawButton(kLeftStickButton);
case kRightStickButton:
return GetRawButton(kRightStickButton);
default:
return false;
}
}
};
}
}
#endif