mirror of
https://github.com/moonlight-stream/moonlight-embedded.git
synced 2025-07-01 23:35:47 +00:00
Add half-axis support for dpad
This commit is contained in:
parent
35af4c4ede
commit
e8fbb2ec9c
@ -76,6 +76,7 @@ struct input_device {
|
||||
short rightStickX, rightStickY;
|
||||
bool gamepadModified;
|
||||
struct input_abs_parms xParms, yParms, rxParms, ryParms, zParms, rzParms;
|
||||
struct input_abs_parms leftParms, rightParms, upParms, downParms;
|
||||
};
|
||||
|
||||
#define HAT_UP 1
|
||||
@ -458,6 +459,39 @@ static bool evdev_handle_event(struct input_event *ev, struct input_device *dev)
|
||||
dev->rightTrigger = evdev_convert_value_byte(ev, dev, &dev->rzParms, dev->map->halfaxis_righttrigger);
|
||||
gamepadModified = true;
|
||||
}
|
||||
|
||||
if (index == dev->map->abs_dpright) {
|
||||
if (evdev_convert_value_byte(ev, dev, &dev->rightParms, dev->map->halfaxis_dpright) > 127)
|
||||
dev->buttonFlags |= RIGHT_FLAG;
|
||||
else
|
||||
dev->buttonFlags &= ~RIGHT_FLAG;
|
||||
|
||||
gamepadModified = true;
|
||||
}
|
||||
if (index == dev->map->abs_dpleft) {
|
||||
if (evdev_convert_value_byte(ev, dev, &dev->leftParms, dev->map->halfaxis_dpleft) > 127)
|
||||
dev->buttonFlags |= LEFT_FLAG;
|
||||
else
|
||||
dev->buttonFlags &= ~LEFT_FLAG;
|
||||
|
||||
gamepadModified = true;
|
||||
}
|
||||
if (index == dev->map->abs_dpup) {
|
||||
if (evdev_convert_value_byte(ev, dev, &dev->upParms, dev->map->halfaxis_dpup) > 127)
|
||||
dev->buttonFlags |= UP_FLAG;
|
||||
else
|
||||
dev->buttonFlags &= ~UP_FLAG;
|
||||
|
||||
gamepadModified = true;
|
||||
}
|
||||
if (index == dev->map->abs_dpdown) {
|
||||
if (evdev_convert_value_byte(ev, dev, &dev->downParms, dev->map->halfaxis_dpdown) > 127)
|
||||
dev->buttonFlags |= DOWN_FLAG;
|
||||
else
|
||||
dev->buttonFlags &= ~DOWN_FLAG;
|
||||
|
||||
gamepadModified = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -656,6 +690,10 @@ void evdev_create(const char* device, struct mapping* mappings, bool verbose, in
|
||||
valid &= evdev_init_parms(&devices[dev], &(devices[dev].rxParms), devices[dev].map->abs_rightx);
|
||||
valid &= evdev_init_parms(&devices[dev], &(devices[dev].ryParms), devices[dev].map->abs_righty);
|
||||
valid &= evdev_init_parms(&devices[dev], &(devices[dev].rzParms), devices[dev].map->abs_righttrigger);
|
||||
valid &= evdev_init_parms(&devices[dev], &(devices[dev].leftParms), devices[dev].map->abs_dpleft);
|
||||
valid &= evdev_init_parms(&devices[dev], &(devices[dev].rightParms), devices[dev].map->abs_dpright);
|
||||
valid &= evdev_init_parms(&devices[dev], &(devices[dev].upParms), devices[dev].map->abs_dpup);
|
||||
valid &= evdev_init_parms(&devices[dev], &(devices[dev].downParms), devices[dev].map->abs_dpdown);
|
||||
if (!valid)
|
||||
fprintf(stderr, "Mapping for %s (%s) on %s is incorrect\n", name, str_guid, device);
|
||||
}
|
||||
|
@ -110,6 +110,18 @@ struct mapping* mapping_parse(char* mapping) {
|
||||
} else if (strcmp("righttrigger", key) == 0) {
|
||||
map->abs_righttrigger = int_value;
|
||||
map->halfaxis_righttrigger = half_axis;
|
||||
} else if (strcmp("dpright", key) == 0) {
|
||||
map->abs_dpright = int_value;
|
||||
map->halfaxis_dpright = half_axis;
|
||||
} else if (strcmp("dpleft", key) == 0) {
|
||||
map->abs_dpleft = int_value;
|
||||
map->halfaxis_dpleft = half_axis;
|
||||
} else if (strcmp("dpup", key) == 0) {
|
||||
map->abs_dpup = int_value;
|
||||
map->halfaxis_dpup = half_axis;
|
||||
} else if (strcmp("dpdown", key) == 0) {
|
||||
map->abs_dpdown = int_value;
|
||||
map->halfaxis_dpdown = half_axis;
|
||||
}
|
||||
} else if (sscanf(value, "h%d.%d", &int_value, &direction_value) == 2) {
|
||||
if (strcmp("dpright", key) == 0) {
|
||||
|
@ -29,6 +29,8 @@ struct mapping {
|
||||
bool reverse_leftx, reverse_lefty;
|
||||
bool reverse_rightx, reverse_righty;
|
||||
bool halfaxis_lefttrigger, halfaxis_righttrigger;
|
||||
bool halfaxis_dpright, halfaxis_dpleft;
|
||||
bool halfaxis_dpup, halfaxis_dpdown;
|
||||
|
||||
short abs_leftx, abs_lefty;
|
||||
short abs_rightx, abs_righty;
|
||||
@ -36,6 +38,7 @@ struct mapping {
|
||||
short hat_dpright, hat_dpleft, hat_dpup, hat_dpdown;
|
||||
short hat_dir_dpright, hat_dir_dpleft, hat_dir_dpup, hat_dir_dpdown;
|
||||
short btn_dpup, btn_dpdown, btn_dpleft, btn_dpright;
|
||||
short abs_dpright, abs_dpleft, abs_dpup, abs_dpdown;
|
||||
|
||||
short btn_a, btn_x, btn_y, btn_b;
|
||||
short btn_back, btn_start, btn_guide;
|
||||
|
Loading…
x
Reference in New Issue
Block a user