From 42b9ed80fb50acd76838bb205506feebb50535b9 Mon Sep 17 00:00:00 2001 From: NepEgor Date: Sat, 16 Apr 2022 16:18:59 +0600 Subject: [PATCH] fixed trigger maps; improvements to dpad mapping --- lib/touch_controls/include/touch_dpad.h | 11 ++--- lib/touch_controls/src/touch_dpad.cpp | 4 +- lib/usb_device/include/usb_device.h | 3 +- lib/usb_device/src/usb_device.cpp | 6 +++ src/input_mapper.cpp | 56 +++++++++++++++---------- src/main.cpp | 2 +- 6 files changed, 51 insertions(+), 31 deletions(-) diff --git a/lib/touch_controls/include/touch_dpad.h b/lib/touch_controls/include/touch_dpad.h index 2132e17..bdeb1e2 100644 --- a/lib/touch_controls/include/touch_dpad.h +++ b/lib/touch_controls/include/touch_dpad.h @@ -7,10 +7,10 @@ class TouchDpad : public TouchControl { public: - enum DpadType + enum DpadType : uint8_t { - DPAD_TYPE_SECTOR4, - DPAD_TYPE_SECTOR8 + DPAD_TYPE_SECTOR_4 = 4, + DPAD_TYPE_SECTOR_8 = 8, }; private: @@ -28,13 +28,14 @@ class TouchDpad : public TouchControl public: TouchDpad() {} - TouchDpad(int32_t pos_x, int32_t pos_y, int32_t pos_r, DpadType dpad_type = DPAD_TYPE_SECTOR4); + TouchDpad(int32_t pos_x, int32_t pos_y, int32_t pos_r, DpadType dpad_type = DPAD_TYPE_SECTOR_4); - void init(int32_t pos_x, int32_t pos_y, int32_t pos_r, DpadType dpad_type = DPAD_TYPE_SECTOR4); + void init(int32_t pos_x, int32_t pos_y, int32_t pos_r, DpadType dpad_type = DPAD_TYPE_SECTOR_4); void setDeadZoneInner(int32_t dead_zone_inner); void setType(DpadType dpad_type) {this->dpad_type = dpad_type;} + DpadType getType() {return dpad_type;} void setInvertX(bool invert_x = true); void setInvertY(bool invert_y = true); diff --git a/lib/touch_controls/src/touch_dpad.cpp b/lib/touch_controls/src/touch_dpad.cpp index 3d33719..20d31a0 100644 --- a/lib/touch_controls/src/touch_dpad.cpp +++ b/lib/touch_controls/src/touch_dpad.cpp @@ -86,7 +86,7 @@ int8_t TouchDpad::touch(int8_t fid, int32_t tx, int32_t ty) { switch (dpad_type) { - case DPAD_TYPE_SECTOR4: + case DPAD_TYPE_SECTOR_4: button |= (invert_y * ty > invert_x * -tx); button |= (invert_y * ty > invert_x * tx) << 1; @@ -102,7 +102,7 @@ int8_t TouchDpad::touch(int8_t fid, int32_t tx, int32_t ty) break; - case DPAD_TYPE_SECTOR8: + case DPAD_TYPE_SECTOR_8: button |= (invert_y * ty > invert_x * -tx * k2); button |= (invert_y * ty > invert_x * -tx * k1) << 1; button |= (invert_y * ty > invert_x * tx * k1) << 2; diff --git a/lib/usb_device/include/usb_device.h b/lib/usb_device/include/usb_device.h index 81e0d26..cb247b2 100644 --- a/lib/usb_device/include/usb_device.h +++ b/lib/usb_device/include/usb_device.h @@ -3,7 +3,6 @@ #include -#include "usbd_hid_composite_if.h" #include "usbd_report.h" class USB_Device @@ -63,6 +62,8 @@ class USB_Device void button(uint16_t button, uint16_t value); + uint16_t isButtonPressed(uint16_t button); + void joystick(uint8_t id, int16_t x, int16_t y); void triggers(uint8_t values[2]); diff --git a/lib/usb_device/src/usb_device.cpp b/lib/usb_device/src/usb_device.cpp index fc64b3d..7a31779 100644 --- a/lib/usb_device/src/usb_device.cpp +++ b/lib/usb_device/src/usb_device.cpp @@ -1,5 +1,6 @@ #include "usb_device.h" +#include "usbd_hid_composite_if.h" #include "usbd_hid_custom_if.h" void USB_Device::begin() @@ -32,6 +33,11 @@ void USB_Device::button(uint16_t button, uint16_t value) ((xinput_report.buttons & ~button) & ~value); } +uint16_t USB_Device::isButtonPressed(uint16_t button) +{ + return xinput_report.buttons & button; +} + void USB_Device::joystick(uint8_t id, int16_t x, int16_t y) { if (id == 0) diff --git a/src/input_mapper.cpp b/src/input_mapper.cpp index f7795b4..07044c9 100644 --- a/src/input_mapper.cpp +++ b/src/input_mapper.cpp @@ -51,39 +51,45 @@ namespace InputMapper pos_x = 20.636 * ppmX; pos_y = 20.636 * ppmY; pos_r = 45 * ppmX / 2; - tdpad_right.init(pos_x, pos_y, pos_r, TouchDpad::DPAD_TYPE_SECTOR4); + tdpad_right.init(pos_x, pos_y, pos_r, TouchDpad::DPAD_TYPE_SECTOR_4); tdpad_right.setDeadZoneInner(dead_zone_inner); pos_x = (62.5 - 20.636) * ppmX; pos_y = 20.636 * ppmY; - tdpad_left.init(pos_x, pos_y, pos_r, TouchDpad::DPAD_TYPE_SECTOR4); + tdpad_left.init(pos_x, pos_y, pos_r, TouchDpad::DPAD_TYPE_SECTOR_4); tdpad_left.setDeadZoneInner(dead_zone_inner); device.begin(); } - uint16_t dpad_map[][4] = + uint16_t dpad_left_map[] = { - { - USB_Device::DPAD_UP, - USB_Device::DPAD_DOWN, - USB_Device::DPAD_LEFT, - USB_Device::DPAD_RIGHT, - }, - { - USB_Device::FACE_Y, - USB_Device::FACE_A, - USB_Device::FACE_X, - USB_Device::FACE_B, - }, + USB_Device::DPAD_UP, + USB_Device::DPAD_DOWN, + USB_Device::DPAD_LEFT, + USB_Device::DPAD_RIGHT, + }; + + uint16_t dpad_right_map[] = + { + USB_Device::FACE_Y, + USB_Device::FACE_A, + USB_Device::FACE_X, + USB_Device::FACE_B, + }; + + uint16_t* dpad_map[] = + { + dpad_left_map, + dpad_right_map, }; - uint16_t mapDpad(uint8_t dpad, uint8_t direction) + uint16_t mapDpad(uint8_t dpad, TouchDpad::DpadType dpad_type, uint8_t direction) { uint16_t button = 0; - for (uint8_t i = 0; i < 4; ++i) + for (uint8_t i = 0; i < dpad_type; ++i) { if (direction & (1 << i)) { @@ -98,7 +104,7 @@ namespace InputMapper { for (uint8_t c = 0; c < num_controls; ++c) { - int res; + int res = 0; switch(tcontrols[id][c]->getControlType()) { @@ -106,18 +112,24 @@ namespace InputMapper break; case TouchControl::CT_JOYSTICK: - res = tcontrols[id][c]->touch(fid, x, y); - device.joystick(id, ((TouchJoystick*)tcontrols[id][c])->getX(), ((TouchJoystick*)tcontrols[id][c])->getY()); + { + res = tcontrols[id][c]->touch(fid, x, y); + + TouchJoystick* tjoy = (TouchJoystick*)tcontrols[id][c]; + device.joystick(id, tjoy->getX(), tjoy->getY()); + } break; case TouchControl::CT_DPAD: { - uint16_t prev_button = mapDpad(id, ((TouchDpad*)tcontrols[id][c])->getButton()); + TouchDpad* dpad = (TouchDpad*)tcontrols[id][c]; + + uint16_t prev_button = mapDpad(id, dpad->getType(), dpad->getButton()); device.button(prev_button, 0); res = tcontrols[id][c]->touch(fid, x, y); - uint16_t button = mapDpad(id, ((TouchDpad*)tcontrols[id][c])->getButton()); + uint16_t button = mapDpad(id, dpad->getType(), dpad->getButton()); device.button(button, button); } break; diff --git a/src/main.cpp b/src/main.cpp index a82c7aa..d078bdd 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3,7 +3,7 @@ #include "trackpad.h" #include "input_mapper.h" -const uint8_t pin_trigger[2] = {PA0, PA1}; +const uint8_t pin_trigger[2] = {PA1, PA0}; const uint8_t pin_button[] = {