mirror of https://github.com/SourMesen/Mesen2
Linux: Fixed d-pad not working with PS3 controllers
This commit is contained in:
parent
c46bc68942
commit
fabc9a6217
|
|
@ -151,24 +151,29 @@ bool LinuxGameController::CheckAxis(unsigned int code, bool forPositive)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool LinuxGameController::CheckButton(int btn)
|
||||||
|
{
|
||||||
|
return libevdev_get_event_value(_device, EV_KEY, btn) == 1;
|
||||||
|
}
|
||||||
|
|
||||||
bool LinuxGameController::IsButtonPressed(int buttonNumber)
|
bool LinuxGameController::IsButtonPressed(int buttonNumber)
|
||||||
{
|
{
|
||||||
bool pressed = false;
|
bool pressed = false;
|
||||||
switch(buttonNumber) {
|
switch(buttonNumber) {
|
||||||
case 0: pressed = libevdev_get_event_value(_device, EV_KEY, BTN_A) == 1; break;
|
case 0: pressed = CheckButton(BTN_A); break;
|
||||||
case 1: pressed = libevdev_get_event_value(_device, EV_KEY, BTN_B) == 1; break;
|
case 1: pressed = CheckButton(BTN_B); break;
|
||||||
case 2: pressed = libevdev_get_event_value(_device, EV_KEY, BTN_C) == 1; break;
|
case 2: pressed = CheckButton(BTN_C); break;
|
||||||
case 3: pressed = libevdev_get_event_value(_device, EV_KEY, BTN_X) == 1; break;
|
case 3: pressed = CheckButton(BTN_X); break;
|
||||||
case 4: pressed = libevdev_get_event_value(_device, EV_KEY, BTN_Y) == 1; break;
|
case 4: pressed = CheckButton(BTN_Y); break;
|
||||||
case 5: pressed = libevdev_get_event_value(_device, EV_KEY, BTN_Z) == 1; break;
|
case 5: pressed = CheckButton(BTN_Z); break;
|
||||||
case 6: pressed = libevdev_get_event_value(_device, EV_KEY, BTN_TL) == 1; break;
|
case 6: pressed = CheckButton(BTN_TL); break;
|
||||||
case 7: pressed = libevdev_get_event_value(_device, EV_KEY, BTN_TR) == 1; break;
|
case 7: pressed = CheckButton(BTN_TR); break;
|
||||||
case 8: pressed = libevdev_get_event_value(_device, EV_KEY, BTN_TL2) == 1; break;
|
case 8: pressed = CheckButton(BTN_TL2); break;
|
||||||
case 9: pressed = libevdev_get_event_value(_device, EV_KEY, BTN_TR2) == 1; break;
|
case 9: pressed = CheckButton(BTN_TR2); break;
|
||||||
case 10: pressed = libevdev_get_event_value(_device, EV_KEY, BTN_SELECT) == 1; break;
|
case 10: pressed = CheckButton(BTN_SELECT); break;
|
||||||
case 11: pressed = libevdev_get_event_value(_device, EV_KEY, BTN_START) == 1; break;
|
case 11: pressed = CheckButton(BTN_START); break;
|
||||||
case 12: pressed = libevdev_get_event_value(_device, EV_KEY, BTN_THUMBL) == 1; break;
|
case 12: pressed = CheckButton(BTN_THUMBL); break;
|
||||||
case 13: pressed = libevdev_get_event_value(_device, EV_KEY, BTN_THUMBR) == 1; break;
|
case 13: pressed = CheckButton(BTN_THUMBR); break;
|
||||||
|
|
||||||
case 14: pressed = CheckAxis(ABS_X, true); break;
|
case 14: pressed = CheckAxis(ABS_X, true); break;
|
||||||
case 15: pressed = CheckAxis(ABS_X, false); break;
|
case 15: pressed = CheckAxis(ABS_X, false); break;
|
||||||
|
|
@ -183,10 +188,12 @@ bool LinuxGameController::IsButtonPressed(int buttonNumber)
|
||||||
case 24: pressed = CheckAxis(ABS_RZ, true); break;
|
case 24: pressed = CheckAxis(ABS_RZ, true); break;
|
||||||
case 25: pressed = CheckAxis(ABS_RZ, false); break;
|
case 25: pressed = CheckAxis(ABS_RZ, false); break;
|
||||||
|
|
||||||
case 26: pressed = CheckAxis(ABS_HAT0X, true); break;
|
//PS3 controller maps the D-Pad to BTN_DPAD_x unlike PS4/Xbox controllers, so check those too
|
||||||
case 27: pressed = CheckAxis(ABS_HAT0X, false); break;
|
case 26: pressed = CheckAxis(ABS_HAT0X, true) || CheckButton(BTN_DPAD_RIGHT); break;
|
||||||
case 28: pressed = CheckAxis(ABS_HAT0Y, true); break;
|
case 27: pressed = CheckAxis(ABS_HAT0X, false) || CheckButton(BTN_DPAD_LEFT); break;
|
||||||
case 29: pressed = CheckAxis(ABS_HAT0Y, false); break;
|
case 28: pressed = CheckAxis(ABS_HAT0Y, true) || CheckButton(BTN_DPAD_DOWN); break;
|
||||||
|
case 29: pressed = CheckAxis(ABS_HAT0Y, false) || CheckButton(BTN_DPAD_UP); break;
|
||||||
|
|
||||||
case 30: pressed = CheckAxis(ABS_HAT1X, true); break;
|
case 30: pressed = CheckAxis(ABS_HAT1X, true); break;
|
||||||
case 31: pressed = CheckAxis(ABS_HAT1X, false); break;
|
case 31: pressed = CheckAxis(ABS_HAT1X, false); break;
|
||||||
case 32: pressed = CheckAxis(ABS_HAT1Y, true); break;
|
case 32: pressed = CheckAxis(ABS_HAT1Y, true); break;
|
||||||
|
|
@ -200,19 +207,19 @@ bool LinuxGameController::IsButtonPressed(int buttonNumber)
|
||||||
case 40: pressed = CheckAxis(ABS_HAT3Y, true); break;
|
case 40: pressed = CheckAxis(ABS_HAT3Y, true); break;
|
||||||
case 41: pressed = CheckAxis(ABS_HAT3Y, false); break;
|
case 41: pressed = CheckAxis(ABS_HAT3Y, false); break;
|
||||||
|
|
||||||
case 42: pressed = libevdev_get_event_value(_device, EV_KEY, BTN_TRIGGER) == 1; break;
|
case 42: pressed = CheckButton(BTN_TRIGGER); break;
|
||||||
case 43: pressed = libevdev_get_event_value(_device, EV_KEY, BTN_THUMB) == 1; break;
|
case 43: pressed = CheckButton(BTN_THUMB); break;
|
||||||
case 44: pressed = libevdev_get_event_value(_device, EV_KEY, BTN_THUMB2) == 1; break;
|
case 44: pressed = CheckButton(BTN_THUMB2); break;
|
||||||
case 45: pressed = libevdev_get_event_value(_device, EV_KEY, BTN_TOP) == 1; break;
|
case 45: pressed = CheckButton(BTN_TOP); break;
|
||||||
case 46: pressed = libevdev_get_event_value(_device, EV_KEY, BTN_TOP2) == 1; break;
|
case 46: pressed = CheckButton(BTN_TOP2); break;
|
||||||
case 47: pressed = libevdev_get_event_value(_device, EV_KEY, BTN_PINKIE) == 1; break;
|
case 47: pressed = CheckButton(BTN_PINKIE); break;
|
||||||
case 48: pressed = libevdev_get_event_value(_device, EV_KEY, BTN_BASE) == 1; break;
|
case 48: pressed = CheckButton(BTN_BASE); break;
|
||||||
case 49: pressed = libevdev_get_event_value(_device, EV_KEY, BTN_BASE2) == 1; break;
|
case 49: pressed = CheckButton(BTN_BASE2); break;
|
||||||
case 50: pressed = libevdev_get_event_value(_device, EV_KEY, BTN_BASE3) == 1; break;
|
case 50: pressed = CheckButton(BTN_BASE3); break;
|
||||||
case 51: pressed = libevdev_get_event_value(_device, EV_KEY, BTN_BASE4) == 1; break;
|
case 51: pressed = CheckButton(BTN_BASE4); break;
|
||||||
case 52: pressed = libevdev_get_event_value(_device, EV_KEY, BTN_BASE5) == 1; break;
|
case 52: pressed = CheckButton(BTN_BASE5); break;
|
||||||
case 53: pressed = libevdev_get_event_value(_device, EV_KEY, BTN_BASE6) == 1; break;
|
case 53: pressed = CheckButton(BTN_BASE6); break;
|
||||||
case 54: pressed = libevdev_get_event_value(_device, EV_KEY, BTN_DEAD) == 1; break;
|
case 54: pressed = CheckButton(BTN_DEAD); break;
|
||||||
}
|
}
|
||||||
|
|
||||||
_enableForceFeedback |= pressed;
|
_enableForceFeedback |= pressed;
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,8 @@ private:
|
||||||
|
|
||||||
LinuxGameController(Emulator* emu, int deviceID, int fileDescriptor, libevdev *device);
|
LinuxGameController(Emulator* emu, int deviceID, int fileDescriptor, libevdev *device);
|
||||||
bool CheckAxis(unsigned int code, bool forPositive);
|
bool CheckAxis(unsigned int code, bool forPositive);
|
||||||
void Calibrate();
|
bool CheckButton(int btn);
|
||||||
|
void Calibrate();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
~LinuxGameController();
|
~LinuxGameController();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue