Split uinputCfg into its own files

This commit is contained in:
Ingo Ruhnke 2010-05-19 13:30:26 +02:00
parent 5784f09921
commit 197a0ad9f3
5 changed files with 181 additions and 128 deletions

View file

@ -49,6 +49,7 @@ env = conf.Finish()
env.Program('xboxdrv', ['src/xboxdrv.cpp',
'src/xboxmsg.cpp',
'src/uinput.cpp',
'src/uinput_cfg.cpp',
'src/button_event.cpp',
'src/axis_event.cpp',
'src/arg_parser.cpp',

View file

@ -31,114 +31,6 @@
#include "xboxmsg.hpp"
#include "uinput.hpp"
uInputCfg::uInputCfg() :
device_name("Xbox Gamepad (userspace driver)"),
trigger_as_button(false),
dpad_as_button(false),
trigger_as_zaxis(false),
dpad_only(false),
force_feedback(false),
extra_devices(true)
{
std::fill_n(btn_map, static_cast<int>(XBOX_BTN_MAX), ButtonEvent::create(-1, -1));
std::fill_n(axis_map, static_cast<int>(XBOX_AXIS_MAX), AxisEvent::create(-1, -1));
// 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);
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);
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);
btn_map[XBOX_BTN_WHITE] = ButtonEvent::create(EV_KEY, BTN_TL);
btn_map[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);
btn_map[XBOX_BTN_LT] = ButtonEvent::create(EV_KEY, BTN_TL2);
btn_map[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);
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);
// Axis Mapping
axis_map[XBOX_AXIS_X1] = AxisEvent::create(EV_ABS, ABS_X);
axis_map[XBOX_AXIS_Y1] = AxisEvent::create(EV_ABS, ABS_Y);
axis_map[XBOX_AXIS_X2] = AxisEvent::create(EV_ABS, ABS_RX);
axis_map[XBOX_AXIS_Y2] = AxisEvent::create(EV_ABS, ABS_RY);
axis_map[XBOX_AXIS_LT] = AxisEvent::create(EV_ABS, ABS_BRAKE);
axis_map[XBOX_AXIS_RT] = AxisEvent::create(EV_ABS, ABS_GAS);
axis_map[XBOX_AXIS_TRIGGER] = AxisEvent::create(EV_ABS, ABS_Z);
axis_map[XBOX_AXIS_DPAD_X] = AxisEvent::create(EV_ABS, ABS_HAT0X);
axis_map[XBOX_AXIS_DPAD_Y] = AxisEvent::create(EV_ABS, ABS_HAT0Y);
}
void
uInputCfg::mimic_xpad()
{
device_name = "Microsoft X-Box 360 pad";
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);
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);
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);
btn_map[XBOX_BTN_WHITE] = ButtonEvent::create(EV_KEY, BTN_TL);
btn_map[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);
btn_map[XBOX_BTN_LT] = ButtonEvent::create(EV_KEY, BTN_TL2);
btn_map[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);
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);
// Axis Mapping
axis_map[XBOX_AXIS_X1] = AxisEvent::create(EV_ABS, ABS_X, 16, 128);
axis_map[XBOX_AXIS_Y1] = AxisEvent::create(EV_ABS, ABS_Y, 16, 128);
axis_map[XBOX_AXIS_X2] = AxisEvent::create(EV_ABS, ABS_RX, 16, 128);
axis_map[XBOX_AXIS_Y2] = AxisEvent::create(EV_ABS, ABS_RY, 16, 128);
axis_map[XBOX_AXIS_LT] = AxisEvent::create(EV_ABS, ABS_Z);
axis_map[XBOX_AXIS_RT] = AxisEvent::create(EV_ABS, ABS_RZ);
axis_map[XBOX_AXIS_TRIGGER] = AxisEvent::create(EV_ABS, ABS_Z);
axis_map[XBOX_AXIS_DPAD_X] = AxisEvent::create(EV_ABS, ABS_HAT0X);
axis_map[XBOX_AXIS_DPAD_Y] = AxisEvent::create(EV_ABS, ABS_HAT0Y);
}
bool
uInput::need_keyboard_device()

View file

@ -27,32 +27,13 @@
#include "button_event.hpp"
#include "evdev_helper.hpp"
#include "linux_uinput.hpp"
#include "uinput_cfg.hpp"
#include "xboxdrv.hpp"
#include "xpad_device.hpp"
class Xbox360Msg;
class Xbox360GuitarMsg;
class XboxMsg;
class uInputCfg
{
public:
std::string device_name;
bool trigger_as_button;
bool dpad_as_button;
bool trigger_as_zaxis;
bool dpad_only;
bool force_feedback;
bool extra_devices;
ButtonEvent btn_map[XBOX_BTN_MAX];
AxisEvent axis_map[XBOX_AXIS_MAX];
uInputCfg();
/** Sets a button/axis mapping that is equal to the xpad kernel driver */
void mimic_xpad();
};
class uInput
{

131
src/uinput_cfg.cpp Normal file
View file

@ -0,0 +1,131 @@
/*
** Xbox360 USB Gamepad Userspace Driver
** Copyright (C) 2010 Ingo Ruhnke <grumbel@gmx.de>
**
** This program is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <linux/input.h>
#include "uinput_cfg.hpp"
uInputCfg::uInputCfg() :
device_name("Xbox Gamepad (userspace driver)"),
trigger_as_button(false),
dpad_as_button(false),
trigger_as_zaxis(false),
dpad_only(false),
force_feedback(false),
extra_devices(true)
{
std::fill_n(btn_map, static_cast<int>(XBOX_BTN_MAX), ButtonEvent::create(-1, -1));
std::fill_n(axis_map, static_cast<int>(XBOX_AXIS_MAX), AxisEvent::create(-1, -1));
// 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);
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);
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);
btn_map[XBOX_BTN_WHITE] = ButtonEvent::create(EV_KEY, BTN_TL);
btn_map[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);
btn_map[XBOX_BTN_LT] = ButtonEvent::create(EV_KEY, BTN_TL2);
btn_map[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);
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);
// Axis Mapping
axis_map[XBOX_AXIS_X1] = AxisEvent::create(EV_ABS, ABS_X);
axis_map[XBOX_AXIS_Y1] = AxisEvent::create(EV_ABS, ABS_Y);
axis_map[XBOX_AXIS_X2] = AxisEvent::create(EV_ABS, ABS_RX);
axis_map[XBOX_AXIS_Y2] = AxisEvent::create(EV_ABS, ABS_RY);
axis_map[XBOX_AXIS_LT] = AxisEvent::create(EV_ABS, ABS_BRAKE);
axis_map[XBOX_AXIS_RT] = AxisEvent::create(EV_ABS, ABS_GAS);
axis_map[XBOX_AXIS_TRIGGER] = AxisEvent::create(EV_ABS, ABS_Z);
axis_map[XBOX_AXIS_DPAD_X] = AxisEvent::create(EV_ABS, ABS_HAT0X);
axis_map[XBOX_AXIS_DPAD_Y] = AxisEvent::create(EV_ABS, ABS_HAT0Y);
}
void
uInputCfg::mimic_xpad()
{
device_name = "Microsoft X-Box 360 pad";
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);
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);
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);
btn_map[XBOX_BTN_WHITE] = ButtonEvent::create(EV_KEY, BTN_TL);
btn_map[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);
btn_map[XBOX_BTN_LT] = ButtonEvent::create(EV_KEY, BTN_TL2);
btn_map[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);
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);
// Axis Mapping
axis_map[XBOX_AXIS_X1] = AxisEvent::create(EV_ABS, ABS_X, 16, 128);
axis_map[XBOX_AXIS_Y1] = AxisEvent::create(EV_ABS, ABS_Y, 16, 128);
axis_map[XBOX_AXIS_X2] = AxisEvent::create(EV_ABS, ABS_RX, 16, 128);
axis_map[XBOX_AXIS_Y2] = AxisEvent::create(EV_ABS, ABS_RY, 16, 128);
axis_map[XBOX_AXIS_LT] = AxisEvent::create(EV_ABS, ABS_Z);
axis_map[XBOX_AXIS_RT] = AxisEvent::create(EV_ABS, ABS_RZ);
axis_map[XBOX_AXIS_TRIGGER] = AxisEvent::create(EV_ABS, ABS_Z);
axis_map[XBOX_AXIS_DPAD_X] = AxisEvent::create(EV_ABS, ABS_HAT0X);
axis_map[XBOX_AXIS_DPAD_Y] = AxisEvent::create(EV_ABS, ABS_HAT0Y);
}
/* EOF */

48
src/uinput_cfg.hpp Normal file
View file

@ -0,0 +1,48 @@
/*
** Xbox360 USB Gamepad Userspace Driver
** Copyright (C) 2010 Ingo Ruhnke <grumbel@gmx.de>
**
** This program is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef HEADER_XBOXDRV_UINPUT_CFG_HPP
#define HEADER_XBOXDRV_UINPUT_CFG_HPP
#include "axis_event.hpp"
#include "button_event.hpp"
#include "xboxmsg.hpp"
class uInputCfg
{
public:
std::string device_name;
bool trigger_as_button;
bool dpad_as_button;
bool trigger_as_zaxis;
bool dpad_only;
bool force_feedback;
bool extra_devices;
ButtonEvent btn_map[XBOX_BTN_MAX];
AxisEvent axis_map[XBOX_AXIS_MAX];
uInputCfg();
/** Sets a button/axis mapping that is equal to the xpad kernel driver */
void mimic_xpad();
};
#endif
/* EOF */