Unified mapping, made dpad-only, trigger-as-zaxis, trigger-as-button, dpad-as-button into simple mappings instead of special cases
This commit is contained in:
parent
09fcfdae4e
commit
8334c1b2b5
6 changed files with 302 additions and 171 deletions
|
@ -211,10 +211,10 @@ CommandLineParser::init_ini(Options* opts)
|
|||
|
||||
// uinput stuff
|
||||
("device-name", &opts->uinput_config.device_name)
|
||||
("trigger-as-button", &opts->uinput_config.trigger_as_button)
|
||||
("trigger-as-zaxis", &opts->uinput_config.trigger_as_zaxis)
|
||||
("dpad-as-button", &opts->uinput_config.dpad_as_button)
|
||||
("dpad-only", &opts->uinput_config.dpad_only)
|
||||
//FIXME("trigger-as-button", &opts->uinput_config.trigger_as_button)
|
||||
//FIXME("trigger-as-zaxis", &opts->uinput_config.trigger_as_zaxis)
|
||||
//FIXME("dpad-as-button", &opts->uinput_config.dpad_as_button)
|
||||
//FIXME("dpad-only", &opts->uinput_config.dpad_only)
|
||||
("force-feedback", &opts->uinput_config.force_feedback)
|
||||
("extra-devices", &opts->uinput_config.extra_devices)
|
||||
// FIXME: mimic_xpad()
|
||||
|
@ -527,9 +527,9 @@ CommandLineParser::parse_args(int argc, char** argv, Options* options)
|
|||
break;
|
||||
|
||||
case OPTION_MOUSE:
|
||||
opts.uinput_config.dpad_as_button = true;
|
||||
//FIXME:opts.uinput_config.dpad_as_button = true;
|
||||
opts.deadzone = 4000;
|
||||
opts.uinput_config.trigger_as_zaxis = true;
|
||||
//FIXME:opts.uinput_config.trigger_as_zaxis = true;
|
||||
arg2vector2("-y2=y2,-trigger=trigger", opts.axis_map, &AxisMapping::from_string);
|
||||
// send events only every 20msec, lower values cause a jumpy pointer
|
||||
arg2apply("x1=REL_X:15:20,y1=REL_Y:15:20,"
|
||||
|
@ -583,17 +583,23 @@ CommandLineParser::parse_args(int argc, char** argv, Options* options)
|
|||
break;
|
||||
|
||||
case OPTION_DPAD_ONLY:
|
||||
if (opts.uinput_config.dpad_as_button)
|
||||
RAISE_EXCEPTION("Can't combine --dpad-as-button with --dpad-only");
|
||||
|
||||
opts.uinput_config.dpad_only = true;
|
||||
opts.uinput_config.axis_map[XBOX_AXIS_X1] = AxisEvent::invalid();
|
||||
opts.uinput_config.axis_map[XBOX_AXIS_Y1] = AxisEvent::invalid();
|
||||
opts.uinput_config.axis_map[XBOX_AXIS_X2] = AxisEvent::invalid();
|
||||
opts.uinput_config.axis_map[XBOX_AXIS_Y2] = AxisEvent::invalid();
|
||||
|
||||
opts.uinput_config.axis_map[XBOX_AXIS_DPAD_X] = AxisEvent::create_abs(DEVICEID_AUTO, ABS_X, -1, 1, 0, 0);
|
||||
opts.uinput_config.axis_map[XBOX_AXIS_DPAD_Y] = AxisEvent::create_abs(DEVICEID_AUTO, ABS_Y, -1, 1, 0, 0);
|
||||
break;
|
||||
|
||||
case OPTION_DPAD_AS_BUTTON:
|
||||
if (opts.uinput_config.dpad_only)
|
||||
throw std::runtime_error("Can't combine --dpad-as-button with --dpad-only");
|
||||
opts.uinput_config.btn_map.bind(XBOX_DPAD_UP, ButtonEvent::create_key(BTN_BASE));
|
||||
opts.uinput_config.btn_map.bind(XBOX_DPAD_DOWN, ButtonEvent::create_key(BTN_BASE2));
|
||||
opts.uinput_config.btn_map.bind(XBOX_DPAD_LEFT, ButtonEvent::create_key(BTN_BASE3));
|
||||
opts.uinput_config.btn_map.bind(XBOX_DPAD_RIGHT, ButtonEvent::create_key(BTN_BASE4));
|
||||
|
||||
opts.uinput_config.dpad_as_button = true;
|
||||
opts.uinput_config.axis_map[XBOX_AXIS_DPAD_X] = AxisEvent::invalid();
|
||||
opts.uinput_config.axis_map[XBOX_AXIS_DPAD_Y] = AxisEvent::invalid();
|
||||
break;
|
||||
|
||||
case OPTION_DEADZONE:
|
||||
|
@ -605,14 +611,16 @@ CommandLineParser::parse_args(int argc, char** argv, Options* options)
|
|||
break;
|
||||
|
||||
case OPTION_TRIGGER_AS_BUTTON:
|
||||
if (opts.uinput_config.trigger_as_zaxis)
|
||||
{
|
||||
RAISE_EXCEPTION("Can't combine --trigger-as-button and --trigger-as-zaxis");
|
||||
}
|
||||
else
|
||||
{
|
||||
opts.uinput_config.trigger_as_button = true;
|
||||
}
|
||||
opts.uinput_config.axis_map[XBOX_AXIS_LT] = AxisEvent::invalid();
|
||||
opts.uinput_config.axis_map[XBOX_AXIS_RT] = AxisEvent::invalid();
|
||||
opts.uinput_config.btn_map.bind(XBOX_BTN_LT, ButtonEvent::create_key(BTN_TL2));
|
||||
opts.uinput_config.btn_map.bind(XBOX_BTN_RT, ButtonEvent::create_key(BTN_TR2));
|
||||
break;
|
||||
|
||||
case OPTION_TRIGGER_AS_ZAXIS:
|
||||
opts.uinput_config.axis_map[XBOX_AXIS_TRIGGER] = AxisEvent::create_abs(DEVICEID_AUTO, ABS_Z, -255, 255, 0, 0);
|
||||
opts.uinput_config.axis_map[XBOX_AXIS_LT] = AxisEvent::invalid();
|
||||
opts.uinput_config.axis_map[XBOX_AXIS_RT] = AxisEvent::invalid();
|
||||
break;
|
||||
|
||||
case OPTION_AUTOFIRE:
|
||||
|
@ -649,17 +657,6 @@ CommandLineParser::parse_args(int argc, char** argv, Options* options)
|
|||
opts.square_axis = true;
|
||||
break;
|
||||
|
||||
case OPTION_TRIGGER_AS_ZAXIS:
|
||||
if (opts.uinput_config.trigger_as_button)
|
||||
{
|
||||
RAISE_EXCEPTION("Can't combine --trigger-as-button and --trigger-as-zaxis");
|
||||
}
|
||||
else
|
||||
{
|
||||
opts.uinput_config.trigger_as_zaxis = true;
|
||||
}
|
||||
break;
|
||||
|
||||
case OPTION_HELP_LED:
|
||||
opts.mode = Options::PRINT_LED_HELP;
|
||||
break;
|
||||
|
|
157
src/uinput.cpp
157
src/uinput.cpp
|
@ -176,52 +176,34 @@ uInput::setup_xbox360_gamepad(GamepadType type)
|
|||
// '- FF_CUSTOM
|
||||
}
|
||||
|
||||
if (cfg.dpad_only)
|
||||
{
|
||||
add_axis(XBOX_AXIS_X1, -1, 1);
|
||||
add_axis(XBOX_AXIS_Y1, -1, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
add_axis(XBOX_AXIS_X1, -32768, 32767);
|
||||
add_axis(XBOX_AXIS_Y1, -32768, 32767);
|
||||
add_axis(XBOX_AXIS_X1);
|
||||
add_axis(XBOX_AXIS_Y1);
|
||||
|
||||
add_axis(XBOX_AXIS_X2);
|
||||
add_axis(XBOX_AXIS_Y2);
|
||||
}
|
||||
|
||||
if (!cfg.dpad_only)
|
||||
{
|
||||
add_axis(XBOX_AXIS_X2, -32768, 32767);
|
||||
add_axis(XBOX_AXIS_Y2, -32768, 32767);
|
||||
}
|
||||
|
||||
if (cfg.trigger_as_button)
|
||||
{
|
||||
{ // trigger
|
||||
add_button(XBOX_BTN_LT);
|
||||
add_button(XBOX_BTN_RT);
|
||||
}
|
||||
else if (cfg.trigger_as_zaxis)
|
||||
{
|
||||
add_axis(XBOX_AXIS_TRIGGER, -255, 255);
|
||||
}
|
||||
else
|
||||
{
|
||||
add_axis(XBOX_AXIS_LT, 0, 255);
|
||||
add_axis(XBOX_AXIS_RT, 0, 255);
|
||||
|
||||
add_axis(XBOX_AXIS_TRIGGER);
|
||||
|
||||
add_axis(XBOX_AXIS_LT);
|
||||
add_axis(XBOX_AXIS_RT);
|
||||
}
|
||||
|
||||
if (!cfg.dpad_only)
|
||||
{
|
||||
if (!cfg.dpad_as_button)
|
||||
{
|
||||
add_axis(XBOX_AXIS_DPAD_X, -1, 1);
|
||||
add_axis(XBOX_AXIS_DPAD_Y, -1, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
add_button(XBOX_DPAD_UP);
|
||||
add_button(XBOX_DPAD_DOWN);
|
||||
add_button(XBOX_DPAD_LEFT);
|
||||
add_button(XBOX_DPAD_RIGHT);
|
||||
}
|
||||
add_axis(XBOX_AXIS_DPAD_X);
|
||||
add_axis(XBOX_AXIS_DPAD_Y);
|
||||
}
|
||||
|
||||
{
|
||||
add_button(XBOX_DPAD_UP);
|
||||
add_button(XBOX_DPAD_DOWN);
|
||||
add_button(XBOX_DPAD_LEFT);
|
||||
add_button(XBOX_DPAD_RIGHT);
|
||||
}
|
||||
|
||||
add_button(XBOX_BTN_START);
|
||||
|
@ -247,8 +229,8 @@ void
|
|||
uInput::setup_xbox360_guitar()
|
||||
{
|
||||
// Whammy and Tilt
|
||||
add_axis(XBOX_AXIS_X1, -32768, 32767);
|
||||
add_axis(XBOX_AXIS_Y1, -32768, 32767);
|
||||
add_axis(XBOX_AXIS_X1);
|
||||
add_axis(XBOX_AXIS_Y1);
|
||||
|
||||
// Dpad
|
||||
add_button(XBOX_DPAD_UP);
|
||||
|
@ -319,22 +301,14 @@ uInput::send(Xbox360Msg& msg)
|
|||
send_button(XBOX_BTN_X, msg.x);
|
||||
send_button(XBOX_BTN_Y, msg.y);
|
||||
|
||||
if (cfg.trigger_as_zaxis)
|
||||
{
|
||||
send_axis(XBOX_AXIS_TRIGGER, (int(msg.rt) - int(msg.lt)));
|
||||
}
|
||||
else if (cfg.trigger_as_button)
|
||||
{
|
||||
send_button(XBOX_BTN_LT, msg.lt);
|
||||
send_button(XBOX_BTN_RT, msg.rt);
|
||||
}
|
||||
else
|
||||
{
|
||||
send_axis(XBOX_AXIS_LT, msg.lt);
|
||||
send_axis(XBOX_AXIS_RT, msg.rt);
|
||||
}
|
||||
send_axis(XBOX_AXIS_TRIGGER, (int(msg.rt) - int(msg.lt)));
|
||||
|
||||
send_button(XBOX_BTN_LT, msg.lt);
|
||||
send_button(XBOX_BTN_RT, msg.rt);
|
||||
|
||||
send_axis(XBOX_AXIS_LT, msg.lt);
|
||||
send_axis(XBOX_AXIS_RT, msg.rt);
|
||||
|
||||
if (!cfg.dpad_only)
|
||||
{
|
||||
send_axis(XBOX_AXIS_X1, msg.x1);
|
||||
send_axis(XBOX_AXIS_Y1, -msg.y1);
|
||||
|
@ -343,31 +317,21 @@ uInput::send(Xbox360Msg& msg)
|
|||
send_axis(XBOX_AXIS_Y2, -msg.y2);
|
||||
}
|
||||
|
||||
if (cfg.dpad_as_button)
|
||||
{
|
||||
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);
|
||||
}
|
||||
else
|
||||
|
||||
{
|
||||
XboxAxis dpad_x = XBOX_AXIS_DPAD_X;
|
||||
XboxAxis dpad_y = XBOX_AXIS_DPAD_Y;
|
||||
|
||||
if (cfg.dpad_only)
|
||||
{
|
||||
dpad_x = XBOX_AXIS_X1;
|
||||
dpad_y = XBOX_AXIS_Y1;
|
||||
}
|
||||
if (msg.dpad_up) send_axis(XBOX_AXIS_DPAD_Y, -1);
|
||||
else if (msg.dpad_down) send_axis(XBOX_AXIS_DPAD_Y, 1);
|
||||
else send_axis(XBOX_AXIS_DPAD_Y, 0);
|
||||
|
||||
if (msg.dpad_up) send_axis(dpad_y, -1);
|
||||
else if (msg.dpad_down) send_axis(dpad_y, 1);
|
||||
else send_axis(dpad_y, 0);
|
||||
|
||||
if (msg.dpad_left) send_axis(dpad_x, -1);
|
||||
else if (msg.dpad_right) send_axis(dpad_x, 1);
|
||||
else send_axis(dpad_x, 0);
|
||||
if (msg.dpad_left) send_axis(XBOX_AXIS_DPAD_X, -1);
|
||||
else if (msg.dpad_right) send_axis(XBOX_AXIS_DPAD_X, 1);
|
||||
else send_axis(XBOX_AXIS_DPAD_X, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -388,23 +352,14 @@ uInput::send(XboxMsg& msg)
|
|||
send_button(XBOX_BTN_X, msg.x);
|
||||
send_button(XBOX_BTN_Y, msg.y);
|
||||
|
||||
if (cfg.trigger_as_zaxis)
|
||||
{
|
||||
send_axis(XBOX_AXIS_TRIGGER, (int(msg.rt) - int(msg.lt)));
|
||||
}
|
||||
else if (cfg.trigger_as_button)
|
||||
{
|
||||
send_button(XBOX_BTN_LT, msg.lt);
|
||||
send_button(XBOX_BTN_RT, msg.rt);
|
||||
}
|
||||
else
|
||||
{
|
||||
send_axis(XBOX_AXIS_LT, msg.lt);
|
||||
send_axis(XBOX_AXIS_RT, msg.rt);
|
||||
}
|
||||
send_axis(XBOX_AXIS_TRIGGER, (int(msg.rt) - int(msg.lt)));
|
||||
|
||||
send_button(XBOX_BTN_LT, msg.lt);
|
||||
send_button(XBOX_BTN_RT, msg.rt);
|
||||
|
||||
send_axis(XBOX_AXIS_LT, msg.lt);
|
||||
send_axis(XBOX_AXIS_RT, msg.rt);
|
||||
|
||||
if (!cfg.dpad_only)
|
||||
{
|
||||
send_axis(XBOX_AXIS_X1, msg.x1);
|
||||
send_axis(XBOX_AXIS_Y1, -msg.y1);
|
||||
|
@ -413,31 +368,21 @@ uInput::send(XboxMsg& msg)
|
|||
send_axis(XBOX_AXIS_Y2, -msg.y2);
|
||||
}
|
||||
|
||||
if (cfg.dpad_as_button)
|
||||
{
|
||||
{ // dpad as button
|
||||
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);
|
||||
}
|
||||
else
|
||||
{
|
||||
XboxAxis dpad_x = XBOX_AXIS_DPAD_X;
|
||||
XboxAxis dpad_y = XBOX_AXIS_DPAD_Y;
|
||||
|
||||
if (cfg.dpad_only)
|
||||
{
|
||||
dpad_x = XBOX_AXIS_X1;
|
||||
dpad_y = XBOX_AXIS_Y1;
|
||||
}
|
||||
|
||||
if (msg.dpad_up) send_axis(dpad_y, -1);
|
||||
else if (msg.dpad_down) send_axis(dpad_y, 1);
|
||||
else send_axis(dpad_y, 0);
|
||||
{ // dpad as axis
|
||||
if (msg.dpad_up) send_axis(XBOX_AXIS_DPAD_Y, -1);
|
||||
else if (msg.dpad_down) send_axis(XBOX_AXIS_DPAD_Y, 1);
|
||||
else send_axis(XBOX_AXIS_DPAD_Y, 0);
|
||||
|
||||
if (msg.dpad_left) send_axis(dpad_x, -1);
|
||||
else if (msg.dpad_right) send_axis(dpad_x, 1);
|
||||
else send_axis(dpad_x, 0);
|
||||
if (msg.dpad_left) send_axis(XBOX_AXIS_DPAD_X, -1);
|
||||
else if (msg.dpad_right) send_axis(XBOX_AXIS_DPAD_X, 1);
|
||||
else send_axis(XBOX_AXIS_DPAD_X, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -618,7 +563,7 @@ uInput::send_axis(XboxAxis code, int32_t value)
|
|||
}
|
||||
|
||||
void
|
||||
uInput::add_axis(XboxAxis code, int min, int max)
|
||||
uInput::add_axis(XboxAxis code)
|
||||
{
|
||||
const AxisEvent& event = cfg.axis_map[code];
|
||||
if (event.is_valid())
|
||||
|
|
|
@ -77,7 +77,7 @@ private:
|
|||
void send(Xbox360GuitarMsg& msg);
|
||||
void send(XboxMsg& msg);
|
||||
|
||||
void add_axis(XboxAxis code, int min, int max);
|
||||
void add_axis(XboxAxis code);
|
||||
void add_button(XboxButton code);
|
||||
|
||||
void send_button(XboxButton code, bool value);
|
||||
|
|
|
@ -22,10 +22,6 @@
|
|||
|
||||
uInputCfg::uInputCfg() :
|
||||
device_name("Xbox Gamepad (userspace driver)"),
|
||||
trigger_as_button(false),
|
||||
trigger_as_zaxis(false),
|
||||
dpad_as_button(false),
|
||||
dpad_only(false),
|
||||
force_feedback(false),
|
||||
extra_devices(true)
|
||||
{
|
||||
|
@ -54,16 +50,18 @@ uInputCfg::uInputCfg() :
|
|||
btn_map.bind(XBOX_BTN_LB, ButtonEvent::create_key(BTN_TL));
|
||||
btn_map.bind(XBOX_BTN_RB, ButtonEvent::create_key(BTN_TR));
|
||||
|
||||
btn_map.bind(XBOX_BTN_LT, ButtonEvent::create_key(BTN_TL2));
|
||||
btn_map.bind(XBOX_BTN_RT, ButtonEvent::create_key(BTN_TR2));
|
||||
// by default unmapped:
|
||||
//btn_map.bind(XBOX_BTN_LT, ButtonEvent::create_key(BTN_TL2));
|
||||
//btn_map.bind(XBOX_BTN_RT, ButtonEvent::create_key(BTN_TR2));
|
||||
|
||||
btn_map.bind(XBOX_BTN_THUMB_L, ButtonEvent::create_key(BTN_THUMBL));
|
||||
btn_map.bind(XBOX_BTN_THUMB_R, ButtonEvent::create_key(BTN_THUMBR));
|
||||
|
||||
btn_map.bind(XBOX_DPAD_UP, ButtonEvent::create_key(BTN_BASE));
|
||||
btn_map.bind(XBOX_DPAD_DOWN, ButtonEvent::create_key(BTN_BASE2));
|
||||
btn_map.bind(XBOX_DPAD_LEFT, ButtonEvent::create_key(BTN_BASE3));
|
||||
btn_map.bind(XBOX_DPAD_RIGHT, ButtonEvent::create_key(BTN_BASE4));
|
||||
|
||||
// by default unmapped
|
||||
//btn_map.bind(XBOX_DPAD_UP, ButtonEvent::create_key(BTN_BASE));
|
||||
//btn_map.bind(XBOX_DPAD_DOWN, ButtonEvent::create_key(BTN_BASE2));
|
||||
//btn_map.bind(XBOX_DPAD_LEFT, ButtonEvent::create_key(BTN_BASE3));
|
||||
//btn_map.bind(XBOX_DPAD_RIGHT, ButtonEvent::create_key(BTN_BASE4));
|
||||
|
||||
// Axis Mapping
|
||||
axis_map[XBOX_AXIS_X1] = AxisEvent::create_abs(DEVICEID_AUTO, ABS_X, -32768, 32767, 0, 0);
|
||||
|
@ -72,7 +70,10 @@ uInputCfg::uInputCfg() :
|
|||
axis_map[XBOX_AXIS_Y2] = AxisEvent::create_abs(DEVICEID_AUTO, ABS_RY, -32768, 32767, 0, 0);
|
||||
axis_map[XBOX_AXIS_LT] = AxisEvent::create_abs(DEVICEID_AUTO, ABS_BRAKE, 0, 255, 0, 0);
|
||||
axis_map[XBOX_AXIS_RT] = AxisEvent::create_abs(DEVICEID_AUTO, ABS_GAS, 0, 255, 0, 0);
|
||||
axis_map[XBOX_AXIS_TRIGGER] = AxisEvent::create_abs(DEVICEID_AUTO, ABS_Z, -255, 255, 0, 0);
|
||||
|
||||
// by default unmapped:
|
||||
//axis_map[XBOX_AXIS_TRIGGER] = AxisEvent::create_abs(DEVICEID_AUTO, ABS_Z, -255, 255, 0, 0);
|
||||
|
||||
axis_map[XBOX_AXIS_DPAD_X] = AxisEvent::create_abs(DEVICEID_AUTO, ABS_HAT0X, -1, 1, 0, 0);
|
||||
axis_map[XBOX_AXIS_DPAD_Y] = AxisEvent::create_abs(DEVICEID_AUTO, ABS_HAT0Y, -1, 1, 0, 0);
|
||||
}
|
||||
|
|
|
@ -29,12 +29,6 @@ class uInputCfg
|
|||
public:
|
||||
std::string device_name;
|
||||
|
||||
bool trigger_as_button;
|
||||
bool trigger_as_zaxis;
|
||||
|
||||
bool dpad_as_button;
|
||||
bool dpad_only;
|
||||
|
||||
bool force_feedback;
|
||||
bool extra_devices;
|
||||
|
||||
|
|
222
src/xboxmsg.cpp
222
src/xboxmsg.cpp
|
@ -408,9 +408,9 @@ void set_button(XboxGenericMsg& msg, XboxButton button, bool v)
|
|||
msg.xbox360.rb = v; break;
|
||||
|
||||
case XBOX_BTN_LT:
|
||||
msg.xbox360.lt = v; break;
|
||||
msg.xbox360.lt = v*255; break;
|
||||
case XBOX_BTN_RT:
|
||||
msg.xbox360.rt = v; break;
|
||||
msg.xbox360.rt = v*255; break;
|
||||
|
||||
case XBOX_BTN_THUMB_L:
|
||||
msg.xbox360.thumb_l = v; break;
|
||||
|
@ -500,10 +500,39 @@ int get_axis(XboxGenericMsg& msg, XboxAxis axis)
|
|||
{
|
||||
case XBOX_AXIS_MAX:
|
||||
case XBOX_AXIS_UNKNOWN:
|
||||
break;
|
||||
|
||||
case XBOX_AXIS_DPAD_X:
|
||||
if (msg.xbox360.dpad_left)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
else if (msg.xbox360.dpad_right)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
case XBOX_AXIS_DPAD_Y:
|
||||
if (msg.xbox360.dpad_up)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
else if (msg.xbox360.dpad_down)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
case XBOX_AXIS_TRIGGER:
|
||||
return 0;
|
||||
return msg.xbox360.rt - msg.xbox360.lt;
|
||||
|
||||
case XBOX_AXIS_X1:
|
||||
return msg.xbox360.x1;
|
||||
case XBOX_AXIS_Y1:
|
||||
|
@ -524,10 +553,39 @@ int get_axis(XboxGenericMsg& msg, XboxAxis axis)
|
|||
{
|
||||
case XBOX_AXIS_MAX:
|
||||
case XBOX_AXIS_UNKNOWN:
|
||||
break;
|
||||
|
||||
case XBOX_AXIS_DPAD_X:
|
||||
if (msg.xbox.dpad_left)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
else if (msg.xbox.dpad_right)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
case XBOX_AXIS_DPAD_Y:
|
||||
if (msg.xbox.dpad_up)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
else if (msg.xbox.dpad_down)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
case XBOX_AXIS_TRIGGER:
|
||||
return 0;
|
||||
return msg.xbox.rt - msg.xbox.lt;
|
||||
|
||||
case XBOX_AXIS_X1:
|
||||
return msg.xbox.x1;
|
||||
case XBOX_AXIS_Y1:
|
||||
|
@ -598,11 +656,39 @@ float get_axis_float(XboxGenericMsg& msg, XboxAxis axis)
|
|||
{
|
||||
case XBOX_AXIS_MAX:
|
||||
case XBOX_AXIS_UNKNOWN:
|
||||
break;
|
||||
|
||||
case XBOX_AXIS_DPAD_X:
|
||||
if (msg.xbox360.dpad_left)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
else if (msg.xbox360.dpad_down)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
case XBOX_AXIS_DPAD_Y:
|
||||
if (msg.xbox360.dpad_up)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
else if (msg.xbox360.dpad_down)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
case XBOX_AXIS_TRIGGER:
|
||||
// FIXME: Doesn't seem right
|
||||
return 0.0f;
|
||||
return (msg.xbox360.rt - msg.xbox360.lt)/255.0f;
|
||||
|
||||
case XBOX_AXIS_X1:
|
||||
return s16_to_float(msg.xbox360.x1);
|
||||
case XBOX_AXIS_Y1:
|
||||
|
@ -623,10 +709,39 @@ float get_axis_float(XboxGenericMsg& msg, XboxAxis axis)
|
|||
{
|
||||
case XBOX_AXIS_MAX:
|
||||
case XBOX_AXIS_UNKNOWN:
|
||||
break;
|
||||
|
||||
case XBOX_AXIS_DPAD_X:
|
||||
if (msg.xbox.dpad_left)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
else if (msg.xbox.dpad_down)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
case XBOX_AXIS_DPAD_Y:
|
||||
if (msg.xbox.dpad_up)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
else if (msg.xbox.dpad_down)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
case XBOX_AXIS_TRIGGER:
|
||||
return 0.0f;
|
||||
return (msg.xbox.rt - msg.xbox.lt) / 255.0f;
|
||||
|
||||
case XBOX_AXIS_X1:
|
||||
return s16_to_float(msg.xbox.x1);
|
||||
case XBOX_AXIS_Y1:
|
||||
|
@ -655,12 +770,15 @@ void set_axis_float(XboxGenericMsg& msg, XboxAxis axis, float v)
|
|||
{
|
||||
case XBOX_AXIS_MAX:
|
||||
case XBOX_AXIS_UNKNOWN:
|
||||
break;
|
||||
|
||||
case XBOX_AXIS_TRIGGER:
|
||||
// FIXME: Doesn't seem right
|
||||
msg.xbox360.lt = v < 0 ? int(v*255) : 0;
|
||||
msg.xbox360.rt = v > 0 ? int(v*255) : 0;
|
||||
break;
|
||||
|
||||
case XBOX_AXIS_DPAD_X:
|
||||
if (v > 0.5f)
|
||||
if (v > 0.5f)
|
||||
{
|
||||
msg.xbox360.dpad_left = false;
|
||||
msg.xbox360.dpad_right = true;
|
||||
|
@ -715,11 +833,15 @@ void set_axis_float(XboxGenericMsg& msg, XboxAxis axis, float v)
|
|||
{
|
||||
case XBOX_AXIS_MAX:
|
||||
case XBOX_AXIS_UNKNOWN:
|
||||
break;
|
||||
|
||||
case XBOX_AXIS_TRIGGER:
|
||||
msg.xbox.lt = v < 0 ? int(v*255) : 0;
|
||||
msg.xbox.rt = v > 0 ? int(v*255) : 0;
|
||||
break;
|
||||
|
||||
case XBOX_AXIS_DPAD_X:
|
||||
if (v > 0.5f)
|
||||
if (v > 0.5f)
|
||||
{
|
||||
msg.xbox.dpad_left = false;
|
||||
msg.xbox.dpad_right = true;
|
||||
|
@ -784,9 +906,44 @@ void set_axis(XboxGenericMsg& msg, XboxAxis axis, int v)
|
|||
break;
|
||||
|
||||
case XBOX_AXIS_TRIGGER:
|
||||
msg.xbox360.lt = v < 0 ? v : 0;
|
||||
msg.xbox360.rt = v > 0 ? v : 0;
|
||||
break;
|
||||
|
||||
case XBOX_AXIS_DPAD_X:
|
||||
if (v > 0)
|
||||
{
|
||||
msg.xbox360.dpad_left = false;
|
||||
msg.xbox360.dpad_right = true;
|
||||
}
|
||||
else if (v < 0)
|
||||
{
|
||||
msg.xbox360.dpad_left = true;
|
||||
msg.xbox360.dpad_right = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
msg.xbox360.dpad_left = false;
|
||||
msg.xbox360.dpad_right = false;
|
||||
}
|
||||
break;
|
||||
|
||||
case XBOX_AXIS_DPAD_Y:
|
||||
assert(!"not implemented");
|
||||
if (v > 0)
|
||||
{
|
||||
msg.xbox360.dpad_up = false;
|
||||
msg.xbox360.dpad_down = true;
|
||||
}
|
||||
else if (v < 0)
|
||||
{
|
||||
msg.xbox360.dpad_up = true;
|
||||
msg.xbox360.dpad_down = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
msg.xbox360.dpad_up = false;
|
||||
msg.xbox360.dpad_down = false;
|
||||
}
|
||||
break;
|
||||
|
||||
case XBOX_AXIS_X1:
|
||||
|
@ -812,10 +969,46 @@ void set_axis(XboxGenericMsg& msg, XboxAxis axis, int v)
|
|||
break;
|
||||
|
||||
case XBOX_AXIS_DPAD_X:
|
||||
case XBOX_AXIS_DPAD_Y:
|
||||
case XBOX_AXIS_TRIGGER:
|
||||
assert(!"not implement");
|
||||
if (v > 0)
|
||||
{
|
||||
msg.xbox.dpad_left = false;
|
||||
msg.xbox.dpad_right = true;
|
||||
}
|
||||
else if (v < 0)
|
||||
{
|
||||
msg.xbox.dpad_left = true;
|
||||
msg.xbox.dpad_right = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
msg.xbox.dpad_left = false;
|
||||
msg.xbox.dpad_right = false;
|
||||
}
|
||||
break;
|
||||
|
||||
case XBOX_AXIS_DPAD_Y:
|
||||
if (v > 0)
|
||||
{
|
||||
msg.xbox.dpad_up = false;
|
||||
msg.xbox.dpad_down = true;
|
||||
}
|
||||
else if (v < 0)
|
||||
{
|
||||
msg.xbox.dpad_up = true;
|
||||
msg.xbox.dpad_down = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
msg.xbox.dpad_up = false;
|
||||
msg.xbox.dpad_down = false;
|
||||
}
|
||||
break;
|
||||
|
||||
case XBOX_AXIS_TRIGGER:
|
||||
msg.xbox.lt = v < 0 ? v : 0;
|
||||
msg.xbox.rt = v > 0 ? v : 0;
|
||||
break;
|
||||
|
||||
case XBOX_AXIS_X1:
|
||||
msg.xbox.x1 = v; break;
|
||||
case XBOX_AXIS_Y1:
|
||||
|
@ -957,6 +1150,7 @@ std::string btn2string(XboxButton btn)
|
|||
{
|
||||
case XBOX_BTN_MAX:
|
||||
case XBOX_BTN_UNKNOWN: return "unknown";
|
||||
|
||||
case XBOX_BTN_START: return "Start";
|
||||
case XBOX_BTN_GUIDE: return "Guide";
|
||||
case XBOX_BTN_BACK: return "Back";
|
||||
|
|
Loading…
Add table
Reference in a new issue