fixed trigger maps; improvements to dpad mapping

gyro
NepEgor 2 years ago
parent d8f1771713
commit 42b9ed80fb

@ -7,10 +7,10 @@ class TouchDpad : public TouchControl
{ {
public: public:
enum DpadType enum DpadType : uint8_t
{ {
DPAD_TYPE_SECTOR4, DPAD_TYPE_SECTOR_4 = 4,
DPAD_TYPE_SECTOR8 DPAD_TYPE_SECTOR_8 = 8,
}; };
private: private:
@ -28,13 +28,14 @@ class TouchDpad : public TouchControl
public: public:
TouchDpad() {} 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 setDeadZoneInner(int32_t dead_zone_inner);
void setType(DpadType dpad_type) {this->dpad_type = dpad_type;} void setType(DpadType dpad_type) {this->dpad_type = dpad_type;}
DpadType getType() {return dpad_type;}
void setInvertX(bool invert_x = true); void setInvertX(bool invert_x = true);
void setInvertY(bool invert_y = true); void setInvertY(bool invert_y = true);

@ -86,7 +86,7 @@ int8_t TouchDpad::touch(int8_t fid, int32_t tx, int32_t ty)
{ {
switch (dpad_type) 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);
button |= (invert_y * ty > invert_x * tx) << 1; 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; 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 * k2);
button |= (invert_y * ty > invert_x * -tx * k1) << 1; button |= (invert_y * ty > invert_x * -tx * k1) << 1;
button |= (invert_y * ty > invert_x * tx * k1) << 2; button |= (invert_y * ty > invert_x * tx * k1) << 2;

@ -3,7 +3,6 @@
#include <stdint.h> #include <stdint.h>
#include "usbd_hid_composite_if.h"
#include "usbd_report.h" #include "usbd_report.h"
class USB_Device class USB_Device
@ -63,6 +62,8 @@ class USB_Device
void button(uint16_t button, uint16_t value); 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 joystick(uint8_t id, int16_t x, int16_t y);
void triggers(uint8_t values[2]); void triggers(uint8_t values[2]);

@ -1,5 +1,6 @@
#include "usb_device.h" #include "usb_device.h"
#include "usbd_hid_composite_if.h"
#include "usbd_hid_custom_if.h" #include "usbd_hid_custom_if.h"
void USB_Device::begin() void USB_Device::begin()
@ -32,6 +33,11 @@ void USB_Device::button(uint16_t button, uint16_t value)
((xinput_report.buttons & ~button) & ~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) void USB_Device::joystick(uint8_t id, int16_t x, int16_t y)
{ {
if (id == 0) if (id == 0)

@ -51,39 +51,45 @@ namespace InputMapper
pos_x = 20.636 * ppmX; pos_x = 20.636 * ppmX;
pos_y = 20.636 * ppmY; pos_y = 20.636 * ppmY;
pos_r = 45 * ppmX / 2; 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); tdpad_right.setDeadZoneInner(dead_zone_inner);
pos_x = (62.5 - 20.636) * ppmX; pos_x = (62.5 - 20.636) * ppmX;
pos_y = 20.636 * ppmY; 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); tdpad_left.setDeadZoneInner(dead_zone_inner);
device.begin(); device.begin();
} }
uint16_t dpad_map[][4] = uint16_t dpad_left_map[] =
{ {
{ USB_Device::DPAD_UP,
USB_Device::DPAD_UP, USB_Device::DPAD_DOWN,
USB_Device::DPAD_DOWN, USB_Device::DPAD_LEFT,
USB_Device::DPAD_LEFT, USB_Device::DPAD_RIGHT,
USB_Device::DPAD_RIGHT, };
},
{ uint16_t dpad_right_map[] =
USB_Device::FACE_Y, {
USB_Device::FACE_A, USB_Device::FACE_Y,
USB_Device::FACE_X, USB_Device::FACE_A,
USB_Device::FACE_B, 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; 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)) if (direction & (1 << i))
{ {
@ -98,7 +104,7 @@ namespace InputMapper
{ {
for (uint8_t c = 0; c < num_controls; ++c) for (uint8_t c = 0; c < num_controls; ++c)
{ {
int res; int res = 0;
switch(tcontrols[id][c]->getControlType()) switch(tcontrols[id][c]->getControlType())
{ {
@ -106,18 +112,24 @@ namespace InputMapper
break; break;
case TouchControl::CT_JOYSTICK: 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; break;
case TouchControl::CT_DPAD: 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); device.button(prev_button, 0);
res = tcontrols[id][c]->touch(fid, x, y); 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); device.button(button, button);
} }
break; break;

@ -3,7 +3,7 @@
#include "trackpad.h" #include "trackpad.h"
#include "input_mapper.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[] = const uint8_t pin_button[] =
{ {

Loading…
Cancel
Save