Got rid of special guitar handling, use --guitar to get the old mapping

This commit is contained in:
Ingo Ruhnke 2010-12-31 17:31:17 +01:00
parent 90d1745d1f
commit 119cfc8e71
14 changed files with 154 additions and 362 deletions

2
NEWS
View file

@ -1,6 +1,8 @@
xboxdrv 0.6.2 - (??/Jan/2011)
=============================
* merged Xbox360 guitar handling into the regular Xbox360 controller
handling, use --guitar to get the old mapping back
* added generic event filter framework
* added toggle button filter
* added invert button filter

3
TODO
View file

@ -32,7 +32,8 @@ type is only really known after the axis/buttonmap as already been
build):
* remove guide button from default mapping when its an Xbox1 controller
* fixup guitar
* this was broken in: a4e1003cba0ff925358ce5ed84d2bf9a728e93d6 past 0.6.2
Stuff to do before 0.6.x release:
=================================

View file

@ -540,6 +540,10 @@ mapping, except that the right hand side is an event name from
use all \fBKEY_\fR or \fBBTN_\fR
codes for \*(T<\fB\-\-ui\-buttonmap\fR\*(T>.
If the right hand side is left empty all the supplied
filters will be added to the already existing button
binding instead of a new one.
Aside from the named keys, you can also give the input
code directly as number via the
syntax \fBKEY_#\fINUM\fB\fR.
@ -865,6 +869,12 @@ not be switched at runtime.
Sets the button that will be used to toggle between
different uinput configurations.
.TP
\*(T<\fB\-\-guitar\fR\*(T>
Sets a predefined button and axis mapping for use with
guitar controllers. This mainly gets rid of a few
unnecesary buttons and axis not used by a guitar
controller.
.TP
\*(T<\fB\-m, \-\-mouse\fR\*(T>
Lets the controller act as a mouse. It is indendical to:

View file

@ -1062,6 +1062,18 @@ NAME = STRING ;]]></programlisting>
</listitem>
</varlistentry>
<varlistentry>
<term><option>--guitar</option></term>
<listitem>
<para>
Sets a predefined button and axis mapping for use with
guitar controllers. This mainly gets rid of a few
unnecesary buttons and axis not used by a guitar
controller.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-m, --mouse</option></term>
<listitem>

View file

@ -94,6 +94,7 @@ enum {
OPTION_LIST_SUPPORTED_DEVICES_XPAD,
OPTION_LIST_CONTROLLER,
OPTION_MOUSE,
OPTION_GUITAR,
OPTION_EVDEV,
OPTION_EVDEV_NO_GRAB,
OPTION_EVDEV_DEBUG,
@ -175,8 +176,9 @@ CommandLineParser::init_argp()
.add_option(OPTION_UI_TOGGLE, 0, "ui-toggle", "BTN", "Set button to use for toggling between configs")
.add_option(OPTION_UI_BUTTONMAP, 0, "ui-buttonmap", "MAP", "Changes the uinput events send when hitting a button (example: X=BTN_Y,A=KEY_A)")
.add_option(OPTION_UI_AXISMAP, 0, "ui-axismap", "MAP", "Changes the uinput events send when moving a axis (example: X1=ABS_X2)")
.add_option(OPTION_MOUSE, 'm', "mouse", "", "Enable mouse emulation")
.add_option(OPTION_SQUARE_AXIS, 0, "square-axis", "", "Cause the diagonals to be reported as (1,1) instead of (0.7, 0.7)")
.add_option(OPTION_MOUSE, 'm', "mouse", "", "Enable mouse emulation")
.add_option(OPTION_GUITAR, 0, "guitar", "", "Enables guitar button and axis mapping")
.add_option(OPTION_SQUARE_AXIS, 0, "square-axis", "", "Cause the diagonals to be reported as (1,1) instead of (0.7, 0.7)")
.add_option(OPTION_FOUR_WAY_RESTRICTOR,0, "four-way-restrictor", "", "Restrict axis movement to one axis at a time")
.add_option(OPTION_DPAD_ROTATION, 0, "dpad-rotation", "DEGREE", "Rotate the dpad by the given DEGREE, must be a multiple of 45")
.add_option(OPTION_AXIS_SENSITIVITY, 0, "axis-sensitivity", "MAP", "Adjust the axis sensitivity (example: X1=2.0,Y1=1.0)")
@ -230,6 +232,7 @@ CommandLineParser::init_ini(Options* opts)
// uinput stuff
("device-name", &opts->uinput_config.device_name)
("mouse", boost::bind(&uInputCfg::mouse, boost::ref(opts->uinput_config)), boost::function<void ()>())
("guitar", boost::bind(&uInputCfg::guitar, boost::ref(opts->uinput_config)), boost::function<void ()>())
("trigger-as-button", boost::bind(&uInputCfg::trigger_as_button, boost::ref(opts->uinput_config)), boost::function<void ()>())
("trigger-as-zaxis", boost::bind(&uInputCfg::trigger_as_zaxis, boost::ref(opts->uinput_config)), boost::function<void ()>())
("dpad-as-button", boost::bind(&uInputCfg::dpad_as_button, boost::ref(opts->uinput_config)), boost::function<void ()>())
@ -460,6 +463,10 @@ CommandLineParser::parse_args(int argc, char** argv, Options* options)
opts.uinput_config.mouse();
break;
case OPTION_GUITAR:
opts.uinput_config.guitar();
break;
case OPTION_DETACH_KERNEL_DRIVER:
opts.detach_kernel_driver = true;
break;

View file

@ -247,9 +247,6 @@ void apply_square_axis(XboxGenericMsg& msg)
squarify_axis(msg.xbox360.x1, msg.xbox360.y1);
squarify_axis(msg.xbox360.x2, msg.xbox360.y2);
break;
case XBOX_MSG_XBOX360_GUITAR:
break;
}
}
@ -305,10 +302,6 @@ void apply_deadzone(XboxGenericMsg& msg, const Options& opts)
msg.xbox360.lt = scale_trigger_deadzone(msg.xbox360.lt, opts.deadzone_trigger);
msg.xbox360.rt = scale_trigger_deadzone(msg.xbox360.rt, opts.deadzone_trigger);
break;
case XBOX_MSG_XBOX360_GUITAR:
// FIXME: any use for deadzone here?
break;
}
}

View file

@ -174,10 +174,6 @@ uInput::send(XboxGenericMsg& msg)
case XBOX_MSG_XBOX360:
send(msg.xbox360);
break;
case XBOX_MSG_XBOX360_GUITAR:
send(msg.guitar);
break;
default:
std::cout << "XboxGenericMsg type: " << msg.type << std::endl;
@ -295,28 +291,6 @@ uInput::send(XboxMsg& msg)
else send_axis(XBOX_AXIS_DPAD_X, 0);
}
void
uInput::send(Xbox360GuitarMsg& msg)
{
send_button(XBOX_DPAD_UP, msg.dpad_up);
send_button(XBOX_DPAD_DOWN, msg.dpad_down);
send_button(XBOX_DPAD_LEFT, msg.dpad_left);
send_button(XBOX_DPAD_RIGHT, msg.dpad_right);
send_button(XBOX_BTN_START, msg.start);
send_button(XBOX_BTN_GUIDE, msg.guide);
send_button(XBOX_BTN_BACK, msg.back);
send_button(XBOX_BTN_GREEN, msg.green);
send_button(XBOX_BTN_RED, msg.red);
send_button(XBOX_BTN_YELLOW, msg.yellow);
send_button(XBOX_BTN_BLUE, msg.blue);
send_button(XBOX_BTN_ORANGE, msg.orange);
send_axis(XBOX_AXIS_X1, msg.whammy);
send_axis(XBOX_AXIS_Y1, msg.tilt);
}
void
uInput::update(int msec_delta)
{

View file

@ -81,19 +81,13 @@ uInputCfg::mimic_xpad()
get_btn_map().bind(XBOX_BTN_START, ButtonEvent::create_key(BTN_START));
get_btn_map().bind(XBOX_BTN_GUIDE, ButtonEvent::create_key(BTN_MODE));
get_btn_map().bind(XBOX_BTN_BACK, ButtonEvent::create_key(BTN_BACK));
get_btn_map().bind(XBOX_BTN_BACK, ButtonEvent::create_key(BTN_BACK));
get_btn_map().bind(XBOX_BTN_A, ButtonEvent::create_key(BTN_A));
get_btn_map().bind(XBOX_BTN_B, ButtonEvent::create_key(BTN_B));
get_btn_map().bind(XBOX_BTN_X, ButtonEvent::create_key(BTN_X));
get_btn_map().bind(XBOX_BTN_Y, ButtonEvent::create_key(BTN_Y));
get_btn_map().bind(XBOX_BTN_GREEN, ButtonEvent::create_key(BTN_0));
get_btn_map().bind(XBOX_BTN_RED, ButtonEvent::create_key(BTN_1));
get_btn_map().bind(XBOX_BTN_YELLOW, ButtonEvent::create_key(BTN_2));
get_btn_map().bind(XBOX_BTN_BLUE, ButtonEvent::create_key(BTN_3));
get_btn_map().bind(XBOX_BTN_ORANGE, ButtonEvent::create_key(BTN_4));
get_btn_map().bind(XBOX_BTN_WHITE, ButtonEvent::create_key(BTN_TL));
get_btn_map().bind(XBOX_BTN_BLACK, ButtonEvent::create_key(BTN_TR));
@ -106,9 +100,9 @@ uInputCfg::mimic_xpad()
get_btn_map().bind(XBOX_BTN_THUMB_L, ButtonEvent::create_key(BTN_THUMBL));
get_btn_map().bind(XBOX_BTN_THUMB_R, ButtonEvent::create_key(BTN_THUMBR));
get_btn_map().bind(XBOX_DPAD_UP, ButtonEvent::create_key(BTN_BASE));
get_btn_map().bind(XBOX_DPAD_DOWN, ButtonEvent::create_key(BTN_BASE2));
get_btn_map().bind(XBOX_DPAD_LEFT, ButtonEvent::create_key(BTN_BASE3));
get_btn_map().bind(XBOX_DPAD_UP, ButtonEvent::create_key(BTN_BASE));
get_btn_map().bind(XBOX_DPAD_DOWN, ButtonEvent::create_key(BTN_BASE2));
get_btn_map().bind(XBOX_DPAD_LEFT, ButtonEvent::create_key(BTN_BASE3));
get_btn_map().bind(XBOX_DPAD_RIGHT, ButtonEvent::create_key(BTN_BASE4));
// Axis Mapping
@ -171,12 +165,6 @@ uInputCfg::set_defaults()
get_btn_map().bind(XBOX_BTN_X, ButtonEvent::create_key(BTN_X));
get_btn_map().bind(XBOX_BTN_Y, ButtonEvent::create_key(BTN_Y));
get_btn_map().bind(XBOX_BTN_GREEN, ButtonEvent::create_key(BTN_0));
get_btn_map().bind(XBOX_BTN_RED, ButtonEvent::create_key(BTN_1));
get_btn_map().bind(XBOX_BTN_YELLOW, ButtonEvent::create_key(BTN_2));
get_btn_map().bind(XBOX_BTN_BLUE, ButtonEvent::create_key(BTN_3));
get_btn_map().bind(XBOX_BTN_ORANGE, ButtonEvent::create_key(BTN_4));
get_btn_map().bind(XBOX_BTN_WHITE, ButtonEvent::create_key(BTN_TL));
get_btn_map().bind(XBOX_BTN_BLACK, ButtonEvent::create_key(BTN_TR));
@ -372,4 +360,29 @@ uInputCfg::set_ui_buttonmap(const std::string& name, const std::string& value)
}
}
void
uInputCfg::guitar()
{
get_btn_map().clear();
get_axis_map().clear();
// Button Mapping
get_btn_map().bind(XBOX_BTN_START, ButtonEvent::create_key(BTN_START));
get_btn_map().bind(XBOX_BTN_GUIDE, ButtonEvent::create_key(BTN_MODE));
get_btn_map().bind(XBOX_BTN_BACK, ButtonEvent::create_key(BTN_SELECT));
get_btn_map().bind(XBOX_BTN_A, ButtonEvent::create_key(BTN_0)); // green
get_btn_map().bind(XBOX_BTN_B, ButtonEvent::create_key(BTN_1)); // red
get_btn_map().bind(XBOX_BTN_Y, ButtonEvent::create_key(BTN_2)); // blue
get_btn_map().bind(XBOX_BTN_X, ButtonEvent::create_key(BTN_3)); // yellow
get_btn_map().bind(XBOX_BTN_LB, ButtonEvent::create_key(BTN_4)); // orange
// Axis Mapping
get_axis_map().bind(XBOX_AXIS_X2, AxisEvent::create_abs(DEVICEID_AUTO, ABS_X, -32768, 32767, 0, 0)); // whammy
get_axis_map().bind(XBOX_AXIS_Y2, AxisEvent::create_abs(DEVICEID_AUTO, ABS_Y, -32768, 32767, 0, 0)); // tilt
get_axis_map().bind(XBOX_AXIS_DPAD_X, AxisEvent::create_abs(DEVICEID_AUTO, ABS_HAT0X, -1, 1, 0, 0));
get_axis_map().bind(XBOX_AXIS_DPAD_Y, AxisEvent::create_abs(DEVICEID_AUTO, ABS_HAT0Y, -1, 1, 0, 0));
}
/* EOF */

View file

@ -61,6 +61,7 @@ public:
/** Sets a button/axis mapping that is equal to the xpad kernel driver */
void mimic_xpad();
void mouse();
void guitar();
void set_defaults();
void trigger_as_button();

View file

@ -31,9 +31,8 @@
#include "xbox360_controller.hpp"
#include "xboxmsg.hpp"
Xbox360Controller::Xbox360Controller(struct usb_device* dev_, bool is_guitar_, bool try_detach) :
Xbox360Controller::Xbox360Controller(struct usb_device* dev_, bool try_detach) :
dev(dev_),
is_guitar(is_guitar_),
dev_type(),
handle(),
endpoint_in(1),
@ -238,16 +237,8 @@ Xbox360Controller::read(XboxGenericMsg& msg, bool verbose, int timeout)
}
else if (ret == 20 && data[0] == 0x00 && data[1] == 0x14)
{
if (is_guitar)
{
msg.type = XBOX_MSG_XBOX360_GUITAR;
memcpy(&msg.guitar, data, sizeof(Xbox360GuitarMsg));
}
else
{
msg.type = XBOX_MSG_XBOX360;
memcpy(&msg.xbox360, data, sizeof(Xbox360Msg));
}
msg.type = XBOX_MSG_XBOX360;
memcpy(&msg.xbox360, data, sizeof(Xbox360Msg));
return true;
}
else

View file

@ -30,7 +30,6 @@ class Xbox360Controller : public XboxGenericController
{
private:
struct usb_device* dev;
bool is_guitar;
XPadDevice* dev_type;
struct usb_dev_handle* handle;
@ -42,7 +41,7 @@ private:
void find_endpoints();
public:
Xbox360Controller(struct usb_device* dev, bool is_guitar, bool try_detach);
Xbox360Controller(struct usb_device* dev, bool try_detach);
~Xbox360Controller();
void set_rumble(uint8_t left, uint8_t right);

View file

@ -566,11 +566,11 @@ Xboxdrv::run_main(const Options& opts)
break;
case GAMEPAD_XBOX360_GUITAR:
controller = std::auto_ptr<XboxGenericController>(new Xbox360Controller(dev, true, opts.detach_kernel_driver));
controller = std::auto_ptr<XboxGenericController>(new Xbox360Controller(dev, opts.detach_kernel_driver));
break;
case GAMEPAD_XBOX360:
controller = std::auto_ptr<XboxGenericController>(new Xbox360Controller(dev, false, opts.detach_kernel_driver));
controller = std::auto_ptr<XboxGenericController>(new Xbox360Controller(dev, opts.detach_kernel_driver));
break;
case GAMEPAD_XBOX360_WIRELESS:

View file

@ -125,54 +125,12 @@ std::ostream& operator<<(std::ostream& out, const XboxGenericMsg& msg)
case XBOX_MSG_XBOX360:
return out << msg.xbox360;
case XBOX_MSG_XBOX360_GUITAR:
return out << msg.guitar;
default:
return out << "Error: Unhandled XboxGenericMsg type: " << msg.type;
}
}
std::ostream& operator<<(std::ostream& out, const Xbox360GuitarMsg& msg)
{
out << boost::format(" whammy:%6d tilt:%6d | up:%d down:%d left:%d right:%d | back:%d guide:%d start:%d | green:%d red:%d yellow:%d blue:%d orange:%d ")
% int(msg.whammy)
% int(msg.tilt)
% int(msg.dpad_up)
% int(msg.dpad_down)
% int(msg.dpad_left)
% int(msg.dpad_right)
% int(msg.back)
% int(msg.guide)
% int(msg.start)
% int(msg.green)
% int(msg.red)
% int(msg.yellow)
% int(msg.blue)
% int(msg.orange);
if (g_options->verbose)
{
out << boost::format("| dummy: %d %d %d %d %02hhx %02hhx %04hx %04hx %02x %02x")
% int(msg.thumb_l)
% int(msg.thumb_r)
% int(msg.rb)
% int(msg.dummy1)
% int(msg.lt)
% int(msg.rt)
% int16_t(msg.x1)
% int16_t(msg.y1)
% int(msg.dummy2)
% int(msg.dummy3);
}
return out;
}
std::ostream& operator<<(std::ostream& out, const Xbox360Msg& msg)
{
out << boost::format("X1:%6d Y1:%6d")
@ -256,115 +214,68 @@ int get_button(XboxGenericMsg& msg, XboxButton button)
switch(msg.type)
{
case XBOX_MSG_XBOX360:
case XBOX_MSG_XBOX360_GUITAR:
switch(button)
{
case XBOX_BTN_START:
return msg.xbox360.start;
case XBOX_BTN_GUIDE:
return msg.xbox360.guide;
case XBOX_BTN_BACK:
return msg.xbox360.back;
case XBOX_BTN_START: return msg.xbox360.start;
case XBOX_BTN_GUIDE: return msg.xbox360.guide;
case XBOX_BTN_BACK: return msg.xbox360.back;
case XBOX_BTN_GREEN:
case XBOX_BTN_A:
return msg.xbox360.a;
case XBOX_BTN_RED:
case XBOX_BTN_B:
return msg.xbox360.b;
case XBOX_BTN_BLUE:
case XBOX_BTN_X:
return msg.xbox360.x;
case XBOX_BTN_YELLOW:
case XBOX_BTN_Y:
return msg.xbox360.y;
case XBOX_BTN_A: return msg.xbox360.a;
case XBOX_BTN_B: return msg.xbox360.b;
case XBOX_BTN_X: return msg.xbox360.x;
case XBOX_BTN_Y: return msg.xbox360.y;
case XBOX_BTN_ORANGE:
case XBOX_BTN_LB:
case XBOX_BTN_WHITE:
return msg.xbox360.lb;
case XBOX_BTN_WHITE: return msg.xbox360.lb;
case XBOX_BTN_RB:
case XBOX_BTN_BLACK:
return msg.xbox360.rb;
case XBOX_BTN_BLACK: return msg.xbox360.rb;
case XBOX_BTN_LT:
return msg.xbox360.lt;
case XBOX_BTN_RT:
return msg.xbox360.rt;
case XBOX_BTN_LT: return msg.xbox360.lt;
case XBOX_BTN_RT: return msg.xbox360.rt;
case XBOX_BTN_THUMB_L:
return msg.xbox360.thumb_l;
case XBOX_BTN_THUMB_R:
return msg.xbox360.thumb_r;
case XBOX_BTN_THUMB_L: return msg.xbox360.thumb_l;
case XBOX_BTN_THUMB_R: return msg.xbox360.thumb_r;
case XBOX_DPAD_UP:
return msg.xbox360.dpad_up;
case XBOX_DPAD_DOWN:
return msg.xbox360.dpad_down;
case XBOX_DPAD_LEFT:
return msg.xbox360.dpad_left;
case XBOX_DPAD_RIGHT:
return msg.xbox360.dpad_right;
case XBOX_DPAD_UP: return msg.xbox360.dpad_up;
case XBOX_DPAD_DOWN: return msg.xbox360.dpad_down;
case XBOX_DPAD_LEFT: return msg.xbox360.dpad_left;
case XBOX_DPAD_RIGHT: return msg.xbox360.dpad_right;
case XBOX_BTN_MAX:
case XBOX_BTN_UNKNOWN:
return 0;
case XBOX_BTN_UNKNOWN: return 0;
}
break;
case XBOX_MSG_XBOX:
switch(button)
{
case XBOX_BTN_START:
return msg.xbox.start;
case XBOX_BTN_GUIDE:
return 0;
case XBOX_BTN_BACK:
return msg.xbox.back;
case XBOX_BTN_START: return msg.xbox.start;
case XBOX_BTN_GUIDE: return 0;
case XBOX_BTN_BACK: return msg.xbox.back;
case XBOX_BTN_GREEN:
case XBOX_BTN_A:
return msg.xbox.a;
case XBOX_BTN_RED:
case XBOX_BTN_B:
return msg.xbox.b;
case XBOX_BTN_BLUE:
case XBOX_BTN_X:
return msg.xbox.x;
case XBOX_BTN_YELLOW:
case XBOX_BTN_Y:
return msg.xbox.y;
case XBOX_BTN_A: return msg.xbox.a;
case XBOX_BTN_B: return msg.xbox.b;
case XBOX_BTN_X: return msg.xbox.x;
case XBOX_BTN_Y: return msg.xbox.y;
case XBOX_BTN_ORANGE:
case XBOX_BTN_LB:
case XBOX_BTN_WHITE:
return msg.xbox.white;
case XBOX_BTN_LB:
case XBOX_BTN_WHITE: return msg.xbox.white;
case XBOX_BTN_RB:
case XBOX_BTN_BLACK:
return msg.xbox.black;
case XBOX_BTN_BLACK: return msg.xbox.black;
case XBOX_BTN_LT:
return msg.xbox.lt;
case XBOX_BTN_RT:
return msg.xbox.rt;
case XBOX_BTN_LT: return msg.xbox.lt;
case XBOX_BTN_RT: return msg.xbox.rt;
case XBOX_BTN_THUMB_L:
return msg.xbox.thumb_l;
case XBOX_BTN_THUMB_R:
return msg.xbox.thumb_r;
case XBOX_BTN_THUMB_L: return msg.xbox.thumb_l;
case XBOX_BTN_THUMB_R: return msg.xbox.thumb_r;
case XBOX_DPAD_UP:
return msg.xbox.dpad_up;
case XBOX_DPAD_DOWN:
return msg.xbox.dpad_down;
case XBOX_DPAD_LEFT:
return msg.xbox.dpad_left;
case XBOX_DPAD_RIGHT:
return msg.xbox.dpad_right;
case XBOX_DPAD_UP: return msg.xbox.dpad_up;
case XBOX_DPAD_DOWN: return msg.xbox.dpad_down;
case XBOX_DPAD_LEFT: return msg.xbox.dpad_left;
case XBOX_DPAD_RIGHT: return msg.xbox.dpad_right;
case XBOX_BTN_MAX:
case XBOX_BTN_UNKNOWN:
return 0;
case XBOX_BTN_UNKNOWN: return 0;
}
break;
}
@ -375,112 +286,66 @@ void set_button(XboxGenericMsg& msg, XboxButton button, bool v)
{
switch(msg.type)
{
case XBOX_MSG_XBOX360_GUITAR:
case XBOX_MSG_XBOX360:
switch(button)
{
case XBOX_BTN_START:
msg.xbox360.start = v; break;
case XBOX_BTN_GUIDE:
msg.xbox360.guide = v; break;
case XBOX_BTN_BACK:
msg.xbox360.back = v; break;
case XBOX_BTN_START: msg.xbox360.start = v; break;
case XBOX_BTN_GUIDE: msg.xbox360.guide = v; break;
case XBOX_BTN_BACK: msg.xbox360.back = v; break;
case XBOX_BTN_GREEN:
case XBOX_BTN_A:
msg.xbox360.a = v; break;
case XBOX_BTN_RED:
case XBOX_BTN_B:
msg.xbox360.b = v; break;
case XBOX_BTN_BLUE:
case XBOX_BTN_X:
msg.xbox360.x = v; break;
case XBOX_BTN_YELLOW:
case XBOX_BTN_Y:
msg.xbox360.y = v; break;
case XBOX_BTN_A: msg.xbox360.a = v; break;
case XBOX_BTN_B: msg.xbox360.b = v; break;
case XBOX_BTN_X: msg.xbox360.x = v; break;
case XBOX_BTN_Y: msg.xbox360.y = v; break;
case XBOX_BTN_ORANGE:
case XBOX_BTN_LB:
case XBOX_BTN_WHITE:
msg.xbox360.lb = v; break;
case XBOX_BTN_WHITE: msg.xbox360.lb = v; break;
case XBOX_BTN_RB:
case XBOX_BTN_BLACK:
msg.xbox360.rb = v; break;
case XBOX_BTN_BLACK: msg.xbox360.rb = v; break;
case XBOX_BTN_LT:
msg.xbox360.lt = v*255; break;
case XBOX_BTN_RT:
msg.xbox360.rt = v*255; break;
case XBOX_BTN_LT: msg.xbox360.lt = v*255; break;
case XBOX_BTN_RT: msg.xbox360.rt = v*255; break;
case XBOX_BTN_THUMB_L:
msg.xbox360.thumb_l = v; break;
case XBOX_BTN_THUMB_R:
msg.xbox360.thumb_r = v; break;
case XBOX_BTN_THUMB_L: msg.xbox360.thumb_l = v; break;
case XBOX_BTN_THUMB_R: msg.xbox360.thumb_r = v; break;
case XBOX_DPAD_UP:
msg.xbox360.dpad_up = v; break;
case XBOX_DPAD_DOWN:
msg.xbox360.dpad_down = v; break;
case XBOX_DPAD_LEFT:
msg.xbox360.dpad_left = v; break;
case XBOX_DPAD_RIGHT:
msg.xbox360.dpad_right = v; break;
case XBOX_DPAD_UP: msg.xbox360.dpad_up = v; break;
case XBOX_DPAD_DOWN: msg.xbox360.dpad_down = v; break;
case XBOX_DPAD_LEFT: msg.xbox360.dpad_left = v; break;
case XBOX_DPAD_RIGHT: msg.xbox360.dpad_right = v; break;
case XBOX_BTN_MAX:
case XBOX_BTN_UNKNOWN:
break;
case XBOX_BTN_UNKNOWN: break;
}
break;
case XBOX_MSG_XBOX:
switch(button)
{
case XBOX_BTN_START:
msg.xbox.start = v; break;
case XBOX_BTN_GUIDE:
break;
case XBOX_BTN_BACK:
msg.xbox.back = v; break;
case XBOX_BTN_START: msg.xbox.start = v; break;
case XBOX_BTN_GUIDE: break;
case XBOX_BTN_BACK: msg.xbox.back = v; break;
case XBOX_BTN_GREEN:
case XBOX_BTN_A:
msg.xbox.a = v; break;
case XBOX_BTN_RED:
case XBOX_BTN_B:
msg.xbox.b = v; break;
case XBOX_BTN_BLUE:
case XBOX_BTN_X:
msg.xbox.x = v; break;
case XBOX_BTN_YELLOW:
case XBOX_BTN_Y:
msg.xbox.y = v; break;
case XBOX_BTN_A: msg.xbox.a = v; break;
case XBOX_BTN_B: msg.xbox.b = v; break;
case XBOX_BTN_X: msg.xbox.x = v; break;
case XBOX_BTN_Y: msg.xbox.y = v; break;
case XBOX_BTN_ORANGE:
case XBOX_BTN_LB:
case XBOX_BTN_WHITE:
msg.xbox.white = v; break;
case XBOX_BTN_WHITE: msg.xbox.white = v; break;
case XBOX_BTN_RB:
case XBOX_BTN_BLACK:
msg.xbox.black = v; break;
case XBOX_BTN_BLACK: msg.xbox.black = v; break;
case XBOX_BTN_LT:
msg.xbox.lt = v; break;
case XBOX_BTN_RT:
msg.xbox.rt = v; break;
case XBOX_BTN_LT: msg.xbox.lt = v; break;
case XBOX_BTN_RT: msg.xbox.rt = v; break;
case XBOX_BTN_THUMB_L:
msg.xbox.thumb_l = v; break;
case XBOX_BTN_THUMB_R:
msg.xbox.thumb_r = v; break;
case XBOX_BTN_THUMB_L: msg.xbox.thumb_l = v; break;
case XBOX_BTN_THUMB_R: msg.xbox.thumb_r = v; break;
case XBOX_DPAD_UP:
msg.xbox.dpad_up = v; break;
case XBOX_DPAD_DOWN:
msg.xbox.dpad_down = v; break;
case XBOX_DPAD_LEFT:
msg.xbox.dpad_left = v; break;
case XBOX_DPAD_RIGHT:
msg.xbox.dpad_right = v; break;
case XBOX_DPAD_UP: msg.xbox.dpad_up = v; break;
case XBOX_DPAD_DOWN: msg.xbox.dpad_down = v; break;
case XBOX_DPAD_LEFT: msg.xbox.dpad_left = v; break;
case XBOX_DPAD_RIGHT: msg.xbox.dpad_right = v; break;
case XBOX_BTN_MAX:
case XBOX_BTN_UNKNOWN:
@ -494,7 +359,6 @@ int get_axis(XboxGenericMsg& msg, XboxAxis axis)
{
switch(msg.type)
{
case XBOX_MSG_XBOX360_GUITAR:
case XBOX_MSG_XBOX360:
switch(axis)
{
@ -650,7 +514,6 @@ float get_axis_float(XboxGenericMsg& msg, XboxAxis axis)
{
switch(msg.type)
{
case XBOX_MSG_XBOX360_GUITAR:
case XBOX_MSG_XBOX360:
switch(axis)
{
@ -764,7 +627,6 @@ void set_axis_float(XboxGenericMsg& msg, XboxAxis axis, float v)
{
switch(msg.type)
{
case XBOX_MSG_XBOX360_GUITAR:
case XBOX_MSG_XBOX360:
switch(axis)
{
@ -897,7 +759,6 @@ void set_axis(XboxGenericMsg& msg, XboxAxis axis, int v)
{
switch(msg.type)
{
case XBOX_MSG_XBOX360_GUITAR:
case XBOX_MSG_XBOX360:
switch(axis)
{
@ -1037,32 +898,21 @@ XboxButton string2btn(const std::string& str_)
else if (str == "back")
return XBOX_BTN_BACK;
else if (str == "a" || str == "1")
else if (str == "a" || str == "1" || str == "green")
return XBOX_BTN_A;
else if (str == "b" || str == "2")
else if (str == "b" || str == "2" || str == "red")
return XBOX_BTN_B;
else if (str == "x" || str == "3")
else if (str == "x" || str == "3" || str == "blue")
return XBOX_BTN_X;
else if (str == "y" || str == "4")
else if (str == "y" || str == "4" || str == "yellow")
return XBOX_BTN_Y;
else if (str == "green")
return XBOX_BTN_GREEN;
else if (str == "red")
return XBOX_BTN_RED;
else if (str == "blue")
return XBOX_BTN_BLUE;
else if (str == "yellow")
return XBOX_BTN_YELLOW;
else if (str == "orange")
return XBOX_BTN_ORANGE;
else if (str == "black")
return XBOX_BTN_BLACK;
else if (str == "white")
return XBOX_BTN_WHITE;
else if (str == "lb" || str == "5")
else if (str == "lb" || str == "5" || str == "orange")
return XBOX_BTN_LB;
else if (str == "rb" || str == "6")
return XBOX_BTN_RB;
@ -1098,9 +948,9 @@ XboxAxis string2axis(const std::string& str_)
else if (str == "y1")
return XBOX_AXIS_Y1;
else if (str == "x2")
else if (str == "x2" || str == "whammy")
return XBOX_AXIS_X2;
else if (str == "y2")
else if (str == "y2" || str == "tilt")
return XBOX_AXIS_Y2;
else if (str == "lt")
@ -1160,12 +1010,6 @@ std::string btn2string(XboxButton btn)
case XBOX_BTN_X: return "X";
case XBOX_BTN_Y: return "Y";
case XBOX_BTN_GREEN: return "green";
case XBOX_BTN_RED: return "red";
case XBOX_BTN_BLUE: return "blue";
case XBOX_BTN_YELLOW: return "yellow";
case XBOX_BTN_ORANGE: return "orange";
case XBOX_BTN_WHITE: return "White";
case XBOX_BTN_BLACK: return "Black";

View file

@ -36,8 +36,7 @@ enum GamepadType {
enum XboxMsgType {
XBOX_MSG_XBOX,
XBOX_MSG_XBOX360,
XBOX_MSG_XBOX360_GUITAR
XBOX_MSG_XBOX360
};
struct Xbox360Msg
@ -86,52 +85,6 @@ struct Xbox360Msg
unsigned int dummy3 :16;
} __attribute__((__packed__));
struct Xbox360GuitarMsg
{
// -------------------------
unsigned int type :8;
unsigned int length :8;
// data[2] ------------------
unsigned int dpad_up :1; // also strum-up
unsigned int dpad_down :1; // also strum-down
unsigned int dpad_left :1;
unsigned int dpad_right :1;
unsigned int start :1;
unsigned int back :1;
unsigned int thumb_l :1; // unused
unsigned int thumb_r :1; // unused
// data[3] ------------------
unsigned int orange :1; // 5
unsigned int rb :1; // unused
unsigned int guide :1;
unsigned int dummy1 :1; // unused
unsigned int green :1; // 1, A
unsigned int red :1; // 2, B
unsigned int blue :1; // 4, X
unsigned int yellow :1; // 3, Y
// data[4] ------------------
unsigned int lt :8; // unknown
unsigned int rt :8; // unknown
// data[6] ------------------
int x1 :16; // unused
int y1 :16; // unused
// data[10] -----------------
int whammy :16;
int tilt :16;
// data[14]; ----------------
unsigned int dummy2 :32; // unused
unsigned int dummy3 :16; // unused
} __attribute__((__packed__));
struct XboxMsg
{
// --------------------------
@ -175,14 +128,12 @@ struct XboxGenericMsg
{
XboxMsgType type;
union {
struct Xbox360GuitarMsg guitar;
struct Xbox360Msg xbox360;
struct XboxMsg xbox;
struct Xbox360Msg xbox360;
struct XboxMsg xbox;
};
};
std::ostream& operator<<(std::ostream& out, const GamepadType& type);
std::ostream& operator<<(std::ostream& out, const Xbox360GuitarMsg& msg);
std::ostream& operator<<(std::ostream& out, const Xbox360Msg& msg);
std::ostream& operator<<(std::ostream& out, const XboxMsg& msg);
std::ostream& operator<<(std::ostream& out, const XboxGenericMsg& msg);
@ -198,12 +149,6 @@ enum XboxButton {
XBOX_BTN_X,
XBOX_BTN_Y,
XBOX_BTN_GREEN,
XBOX_BTN_RED,
XBOX_BTN_BLUE,
XBOX_BTN_YELLOW,
XBOX_BTN_ORANGE,
XBOX_BTN_WHITE,
XBOX_BTN_BLACK,