Got rid of special guitar handling, use --guitar to get the old mapping
This commit is contained in:
parent
90d1745d1f
commit
119cfc8e71
14 changed files with 154 additions and 362 deletions
2
NEWS
2
NEWS
|
@ -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
3
TODO
|
@ -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:
|
||||
=================================
|
||||
|
|
|
@ -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:
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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:
|
||||
|
|
316
src/xboxmsg.cpp
316
src/xboxmsg.cpp
|
@ -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";
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue