Extended btn_map to a 2D array to allow shifting
This commit is contained in:
parent
fe81b31ee1
commit
715d23f9bd
4 changed files with 106 additions and 98 deletions
|
@ -367,7 +367,8 @@ CommandLineOptions::parse_args(int argc, char** argv)
|
|||
|
||||
case OPTION_UI_CLEAR:
|
||||
std::fill_n(opts.uinput_config.axis_map, static_cast<int>(XBOX_AXIS_MAX), AxisEvent::invalid());
|
||||
std::fill_n(opts.uinput_config.btn_map, static_cast<int>(XBOX_BTN_MAX), ButtonEvent::invalid());
|
||||
for(int i = 0; i < XBOX_BTN_MAX; ++i)
|
||||
std::fill_n(opts.uinput_config.btn_map[i], static_cast<int>(XBOX_BTN_MAX), ButtonEvent::invalid());
|
||||
break;
|
||||
|
||||
case OPTION_UI_AXISMAP:
|
||||
|
@ -375,7 +376,7 @@ CommandLineOptions::parse_args(int argc, char** argv)
|
|||
break;
|
||||
|
||||
case OPTION_UI_BUTTONMAP:
|
||||
arg2apply(opt.argument, boost::bind(&set_ui_button_map, opts.uinput_config.btn_map, _1));
|
||||
arg2apply(opt.argument, boost::bind(&set_ui_button_map, opts.uinput_config.btn_map[XBOX_BTN_UNKNOWN], _1));
|
||||
break;
|
||||
|
||||
case OPTION_ID:
|
||||
|
|
|
@ -36,24 +36,27 @@
|
|||
bool
|
||||
uInput::need_keyboard_device()
|
||||
{
|
||||
for(int i = 0; i < XBOX_BTN_MAX; ++i)
|
||||
for(int j = 0; j < XBOX_BTN_MAX; ++j)
|
||||
{
|
||||
for(int i = 0; i < XBOX_BTN_MAX; ++i)
|
||||
{
|
||||
if (cfg.btn_map[i].type == EV_KEY &&
|
||||
is_keyboard_button(cfg.btn_map[i].code))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
if (cfg.btn_map[j][i].type == EV_KEY &&
|
||||
is_keyboard_button(cfg.btn_map[j][i].code))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for(int i = 0; i < XBOX_AXIS_MAX; ++i)
|
||||
{
|
||||
if (cfg.axis_map[i].type == EV_KEY &&
|
||||
(is_keyboard_button(cfg.axis_map[i].code) ||
|
||||
is_keyboard_button(cfg.axis_map[i].key.secondary_code)))
|
||||
{
|
||||
if (cfg.axis_map[i].type == EV_KEY &&
|
||||
(is_keyboard_button(cfg.axis_map[i].code) ||
|
||||
is_keyboard_button(cfg.axis_map[i].key.secondary_code)))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
@ -61,32 +64,35 @@ uInput::need_keyboard_device()
|
|||
bool
|
||||
uInput::need_mouse_device()
|
||||
{
|
||||
for(int i = 0; i < XBOX_BTN_MAX; ++i)
|
||||
for(int j = 0; j < XBOX_BTN_MAX; ++j)
|
||||
{
|
||||
for(int i = 0; i < XBOX_BTN_MAX; ++i)
|
||||
{
|
||||
if (cfg.btn_map[i].type == EV_KEY &&
|
||||
is_mouse_button(cfg.btn_map[i].code))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else if (cfg.btn_map[i].type == EV_REL)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
if (cfg.btn_map[j][i].type == EV_KEY &&
|
||||
is_mouse_button(cfg.btn_map[j][i].code))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else if (cfg.btn_map[j][i].type == EV_REL)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for(int i = 0; i < XBOX_AXIS_MAX; ++i)
|
||||
{
|
||||
if (cfg.axis_map[i].type == EV_KEY &&
|
||||
(is_mouse_button(cfg.axis_map[i].code) ||
|
||||
is_mouse_button(cfg.axis_map[i].key.secondary_code)))
|
||||
{
|
||||
if (cfg.axis_map[i].type == EV_KEY &&
|
||||
(is_mouse_button(cfg.axis_map[i].code) ||
|
||||
is_mouse_button(cfg.axis_map[i].key.secondary_code)))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else if (cfg.axis_map[i].type == EV_REL)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
else if (cfg.axis_map[i].type == EV_REL)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
@ -125,9 +131,12 @@ uInput::uInput(const XPadDevice& dev, uInputCfg config_) :
|
|||
create_uinput_device(0);
|
||||
}
|
||||
|
||||
for(int i = 0; i < XBOX_BTN_MAX; ++i)
|
||||
for(int j = 0; j < XBOX_BTN_MAX; ++j)
|
||||
{
|
||||
cfg.btn_map[i].device_id = create_uinput_device(cfg.btn_map[i]);
|
||||
for(int i = 0; i < XBOX_BTN_MAX; ++i)
|
||||
{
|
||||
cfg.btn_map[j][i].device_id = create_uinput_device(cfg.btn_map[j][i]);
|
||||
}
|
||||
}
|
||||
|
||||
for(int i = 0; i < XBOX_AXIS_MAX; ++i)
|
||||
|
@ -648,16 +657,9 @@ uInput::update(int msec_delta)
|
|||
|
||||
if (i->time >= i->next_time)
|
||||
{
|
||||
if (0)
|
||||
std::cout << i->button
|
||||
<< " " << cfg.btn_map[i->button].type
|
||||
<< " " << cfg.btn_map[i->button].code
|
||||
<< " " << cfg.btn_map[i->button].rel.value
|
||||
<< " " << cfg.btn_map[i->button].rel.repeat << std::endl;
|
||||
|
||||
get_mouse_uinput()->send(EV_REL, cfg.btn_map[i->button].code,
|
||||
static_cast<int>(cfg.btn_map[i->button].rel.value * button_state[i->button]));
|
||||
i->next_time += cfg.btn_map[i->button].rel.repeat;
|
||||
get_mouse_uinput()->send(EV_REL, cfg.btn_map[XBOX_BTN_UNKNOWN][i->button].code,
|
||||
static_cast<int>(cfg.btn_map[XBOX_BTN_UNKNOWN][i->button].rel.value * button_state[i->button]));
|
||||
i->next_time += cfg.btn_map[XBOX_BTN_UNKNOWN][i->button].rel.repeat;
|
||||
needs_syncronization = true;
|
||||
}
|
||||
}
|
||||
|
@ -678,7 +680,7 @@ uInput::send_button(int code, bool value)
|
|||
{
|
||||
button_state[code] = value;
|
||||
|
||||
const ButtonEvent& event = cfg.btn_map[code];
|
||||
const ButtonEvent& event = cfg.btn_map[XBOX_BTN_UNKNOWN][code];
|
||||
|
||||
send_key(event.device_id, event.code, value);
|
||||
}
|
||||
|
@ -801,7 +803,7 @@ uInput::add_axis(int code, int min, int max)
|
|||
void
|
||||
uInput::add_button(int code)
|
||||
{
|
||||
const ButtonEvent& event = cfg.btn_map[code];
|
||||
const ButtonEvent& event = cfg.btn_map[XBOX_BTN_UNKNOWN][code];
|
||||
|
||||
if (event.type == EV_KEY)
|
||||
{
|
||||
|
|
|
@ -29,41 +29,44 @@ uInputCfg::uInputCfg() :
|
|||
force_feedback(false),
|
||||
extra_devices(true)
|
||||
{
|
||||
std::fill_n(btn_map, static_cast<int>(XBOX_BTN_MAX), ButtonEvent::invalid());
|
||||
for(int i = 0; i < XBOX_BTN_MAX; ++i)
|
||||
std::fill_n(btn_map[i], static_cast<int>(XBOX_BTN_MAX), ButtonEvent::invalid());
|
||||
std::fill_n(axis_map, static_cast<int>(XBOX_AXIS_MAX), AxisEvent::invalid());
|
||||
|
||||
ButtonEvent* bmap = btn_map[XBOX_BTN_UNKNOWN]; // FIXME: little hacky to abuse XBOX_BTN_UNKNOWN
|
||||
|
||||
// Button Mapping
|
||||
btn_map[XBOX_BTN_START] = ButtonEvent::create(EV_KEY, BTN_START);
|
||||
btn_map[XBOX_BTN_GUIDE] = ButtonEvent::create(EV_KEY, BTN_MODE);
|
||||
btn_map[XBOX_BTN_BACK] = ButtonEvent::create(EV_KEY, BTN_SELECT);
|
||||
bmap[XBOX_BTN_START] = ButtonEvent::create(EV_KEY, BTN_START);
|
||||
bmap[XBOX_BTN_GUIDE] = ButtonEvent::create(EV_KEY, BTN_MODE);
|
||||
bmap[XBOX_BTN_BACK] = ButtonEvent::create(EV_KEY, BTN_SELECT);
|
||||
|
||||
btn_map[XBOX_BTN_A] = ButtonEvent::create(EV_KEY, BTN_A);
|
||||
btn_map[XBOX_BTN_B] = ButtonEvent::create(EV_KEY, BTN_B);
|
||||
btn_map[XBOX_BTN_X] = ButtonEvent::create(EV_KEY, BTN_X);
|
||||
btn_map[XBOX_BTN_Y] = ButtonEvent::create(EV_KEY, BTN_Y);
|
||||
bmap[XBOX_BTN_A] = ButtonEvent::create(EV_KEY, BTN_A);
|
||||
bmap[XBOX_BTN_B] = ButtonEvent::create(EV_KEY, BTN_B);
|
||||
bmap[XBOX_BTN_X] = ButtonEvent::create(EV_KEY, BTN_X);
|
||||
bmap[XBOX_BTN_Y] = ButtonEvent::create(EV_KEY, BTN_Y);
|
||||
|
||||
btn_map[XBOX_BTN_GREEN] = ButtonEvent::create(EV_KEY, BTN_0);
|
||||
btn_map[XBOX_BTN_RED] = ButtonEvent::create(EV_KEY, BTN_1);
|
||||
btn_map[XBOX_BTN_YELLOW] = ButtonEvent::create(EV_KEY, BTN_2);
|
||||
btn_map[XBOX_BTN_BLUE] = ButtonEvent::create(EV_KEY, BTN_3);
|
||||
btn_map[XBOX_BTN_ORANGE] = ButtonEvent::create(EV_KEY, BTN_4);
|
||||
bmap[XBOX_BTN_GREEN] = ButtonEvent::create(EV_KEY, BTN_0);
|
||||
bmap[XBOX_BTN_RED] = ButtonEvent::create(EV_KEY, BTN_1);
|
||||
bmap[XBOX_BTN_YELLOW] = ButtonEvent::create(EV_KEY, BTN_2);
|
||||
bmap[XBOX_BTN_BLUE] = ButtonEvent::create(EV_KEY, BTN_3);
|
||||
bmap[XBOX_BTN_ORANGE] = ButtonEvent::create(EV_KEY, BTN_4);
|
||||
|
||||
btn_map[XBOX_BTN_WHITE] = ButtonEvent::create(EV_KEY, BTN_TL);
|
||||
btn_map[XBOX_BTN_BLACK] = ButtonEvent::create(EV_KEY, BTN_TR);
|
||||
bmap[XBOX_BTN_WHITE] = ButtonEvent::create(EV_KEY, BTN_TL);
|
||||
bmap[XBOX_BTN_BLACK] = ButtonEvent::create(EV_KEY, BTN_TR);
|
||||
|
||||
btn_map[XBOX_BTN_LB] = ButtonEvent::create(EV_KEY, BTN_TL);
|
||||
btn_map[XBOX_BTN_RB] = ButtonEvent::create(EV_KEY, BTN_TR);
|
||||
bmap[XBOX_BTN_LB] = ButtonEvent::create(EV_KEY, BTN_TL);
|
||||
bmap[XBOX_BTN_RB] = ButtonEvent::create(EV_KEY, BTN_TR);
|
||||
|
||||
btn_map[XBOX_BTN_LT] = ButtonEvent::create(EV_KEY, BTN_TL2);
|
||||
btn_map[XBOX_BTN_RT] = ButtonEvent::create(EV_KEY, BTN_TR2);
|
||||
bmap[XBOX_BTN_LT] = ButtonEvent::create(EV_KEY, BTN_TL2);
|
||||
bmap[XBOX_BTN_RT] = ButtonEvent::create(EV_KEY, BTN_TR2);
|
||||
|
||||
btn_map[XBOX_BTN_THUMB_L] = ButtonEvent::create(EV_KEY, BTN_THUMBL);
|
||||
btn_map[XBOX_BTN_THUMB_R] = ButtonEvent::create(EV_KEY, BTN_THUMBR);
|
||||
bmap[XBOX_BTN_THUMB_L] = ButtonEvent::create(EV_KEY, BTN_THUMBL);
|
||||
bmap[XBOX_BTN_THUMB_R] = ButtonEvent::create(EV_KEY, BTN_THUMBR);
|
||||
|
||||
btn_map[XBOX_DPAD_UP] = ButtonEvent::create(EV_KEY, BTN_BASE);
|
||||
btn_map[XBOX_DPAD_DOWN] = ButtonEvent::create(EV_KEY, BTN_BASE2);
|
||||
btn_map[XBOX_DPAD_LEFT] = ButtonEvent::create(EV_KEY, BTN_BASE3);
|
||||
btn_map[XBOX_DPAD_RIGHT] = ButtonEvent::create(EV_KEY, BTN_BASE4);
|
||||
bmap[XBOX_DPAD_UP] = ButtonEvent::create(EV_KEY, BTN_BASE);
|
||||
bmap[XBOX_DPAD_DOWN] = ButtonEvent::create(EV_KEY, BTN_BASE2);
|
||||
bmap[XBOX_DPAD_LEFT] = ButtonEvent::create(EV_KEY, BTN_BASE3);
|
||||
bmap[XBOX_DPAD_RIGHT] = ButtonEvent::create(EV_KEY, BTN_BASE4);
|
||||
|
||||
// Axis Mapping
|
||||
axis_map[XBOX_AXIS_X1] = AxisEvent::create(EV_ABS, ABS_X);
|
||||
|
@ -84,37 +87,39 @@ uInputCfg::mimic_xpad()
|
|||
|
||||
extra_devices = false;
|
||||
|
||||
btn_map[XBOX_BTN_START] = ButtonEvent::create(EV_KEY, BTN_START);
|
||||
btn_map[XBOX_BTN_GUIDE] = ButtonEvent::create(EV_KEY, BTN_MODE);
|
||||
btn_map[XBOX_BTN_BACK] = ButtonEvent::create(EV_KEY, BTN_BACK);
|
||||
ButtonEvent* bmap = btn_map[XBOX_BTN_UNKNOWN]; // FIXME: little hacky to abuse XBOX_BTN_UNKNOWN
|
||||
|
||||
btn_map[XBOX_BTN_A] = ButtonEvent::create(EV_KEY, BTN_A);
|
||||
btn_map[XBOX_BTN_B] = ButtonEvent::create(EV_KEY, BTN_B);
|
||||
btn_map[XBOX_BTN_X] = ButtonEvent::create(EV_KEY, BTN_X);
|
||||
btn_map[XBOX_BTN_Y] = ButtonEvent::create(EV_KEY, BTN_Y);
|
||||
bmap[XBOX_BTN_START] = ButtonEvent::create(EV_KEY, BTN_START);
|
||||
bmap[XBOX_BTN_GUIDE] = ButtonEvent::create(EV_KEY, BTN_MODE);
|
||||
bmap[XBOX_BTN_BACK] = ButtonEvent::create(EV_KEY, BTN_BACK);
|
||||
|
||||
btn_map[XBOX_BTN_GREEN] = ButtonEvent::create(EV_KEY, BTN_0);
|
||||
btn_map[XBOX_BTN_RED] = ButtonEvent::create(EV_KEY, BTN_1);
|
||||
btn_map[XBOX_BTN_YELLOW] = ButtonEvent::create(EV_KEY, BTN_2);
|
||||
btn_map[XBOX_BTN_BLUE] = ButtonEvent::create(EV_KEY, BTN_3);
|
||||
btn_map[XBOX_BTN_ORANGE] = ButtonEvent::create(EV_KEY, BTN_4);
|
||||
bmap[XBOX_BTN_A] = ButtonEvent::create(EV_KEY, BTN_A);
|
||||
bmap[XBOX_BTN_B] = ButtonEvent::create(EV_KEY, BTN_B);
|
||||
bmap[XBOX_BTN_X] = ButtonEvent::create(EV_KEY, BTN_X);
|
||||
bmap[XBOX_BTN_Y] = ButtonEvent::create(EV_KEY, BTN_Y);
|
||||
|
||||
btn_map[XBOX_BTN_WHITE] = ButtonEvent::create(EV_KEY, BTN_TL);
|
||||
btn_map[XBOX_BTN_BLACK] = ButtonEvent::create(EV_KEY, BTN_TR);
|
||||
bmap[XBOX_BTN_GREEN] = ButtonEvent::create(EV_KEY, BTN_0);
|
||||
bmap[XBOX_BTN_RED] = ButtonEvent::create(EV_KEY, BTN_1);
|
||||
bmap[XBOX_BTN_YELLOW] = ButtonEvent::create(EV_KEY, BTN_2);
|
||||
bmap[XBOX_BTN_BLUE] = ButtonEvent::create(EV_KEY, BTN_3);
|
||||
bmap[XBOX_BTN_ORANGE] = ButtonEvent::create(EV_KEY, BTN_4);
|
||||
|
||||
btn_map[XBOX_BTN_LB] = ButtonEvent::create(EV_KEY, BTN_TL);
|
||||
btn_map[XBOX_BTN_RB] = ButtonEvent::create(EV_KEY, BTN_TR);
|
||||
bmap[XBOX_BTN_WHITE] = ButtonEvent::create(EV_KEY, BTN_TL);
|
||||
bmap[XBOX_BTN_BLACK] = ButtonEvent::create(EV_KEY, BTN_TR);
|
||||
|
||||
bmap[XBOX_BTN_LB] = ButtonEvent::create(EV_KEY, BTN_TL);
|
||||
bmap[XBOX_BTN_RB] = ButtonEvent::create(EV_KEY, BTN_TR);
|
||||
|
||||
btn_map[XBOX_BTN_LT] = ButtonEvent::create(EV_KEY, BTN_TL2);
|
||||
btn_map[XBOX_BTN_RT] = ButtonEvent::create(EV_KEY, BTN_TR2);
|
||||
bmap[XBOX_BTN_LT] = ButtonEvent::create(EV_KEY, BTN_TL2);
|
||||
bmap[XBOX_BTN_RT] = ButtonEvent::create(EV_KEY, BTN_TR2);
|
||||
|
||||
btn_map[XBOX_BTN_THUMB_L] = ButtonEvent::create(EV_KEY, BTN_THUMBL);
|
||||
btn_map[XBOX_BTN_THUMB_R] = ButtonEvent::create(EV_KEY, BTN_THUMBR);
|
||||
bmap[XBOX_BTN_THUMB_L] = ButtonEvent::create(EV_KEY, BTN_THUMBL);
|
||||
bmap[XBOX_BTN_THUMB_R] = ButtonEvent::create(EV_KEY, BTN_THUMBR);
|
||||
|
||||
btn_map[XBOX_DPAD_UP] = ButtonEvent::create(EV_KEY, BTN_BASE);
|
||||
btn_map[XBOX_DPAD_DOWN] = ButtonEvent::create(EV_KEY, BTN_BASE2);
|
||||
btn_map[XBOX_DPAD_LEFT] = ButtonEvent::create(EV_KEY, BTN_BASE3);
|
||||
btn_map[XBOX_DPAD_RIGHT] = ButtonEvent::create(EV_KEY, BTN_BASE4);
|
||||
bmap[XBOX_DPAD_UP] = ButtonEvent::create(EV_KEY, BTN_BASE);
|
||||
bmap[XBOX_DPAD_DOWN] = ButtonEvent::create(EV_KEY, BTN_BASE2);
|
||||
bmap[XBOX_DPAD_LEFT] = ButtonEvent::create(EV_KEY, BTN_BASE3);
|
||||
bmap[XBOX_DPAD_RIGHT] = ButtonEvent::create(EV_KEY, BTN_BASE4);
|
||||
|
||||
// Axis Mapping
|
||||
axis_map[XBOX_AXIS_X1] = AxisEvent::create(EV_ABS, ABS_X, 16, 128);
|
||||
|
|
|
@ -34,7 +34,7 @@ public:
|
|||
bool force_feedback;
|
||||
bool extra_devices;
|
||||
|
||||
ButtonEvent btn_map[XBOX_BTN_MAX];
|
||||
ButtonEvent btn_map[XBOX_BTN_MAX][XBOX_BTN_MAX];
|
||||
AxisEvent axis_map[XBOX_AXIS_MAX];
|
||||
|
||||
uInputCfg();
|
||||
|
|
Loading…
Add table
Reference in a new issue