Joystick: Add support for more axis types to the Windows raw input backend
This commit is contained in:
@@ -35,6 +35,29 @@
|
||||
#include <86box/gameport.h>
|
||||
#include <86box/win.h>
|
||||
|
||||
/* These are defined in hidusage.h in the Windows SDK, but not in mingw-w64. */
|
||||
#ifndef HID_USAGE_SIMULATION_AILERON
|
||||
# define HID_USAGE_SIMULATION_AILERON ((USAGE) 0xb0)
|
||||
#endif
|
||||
#ifndef HID_USAGE_SIMULATION_ELEVATOR
|
||||
# define HID_USAGE_SIMULATION_ELEVATOR ((USAGE) 0xb8)
|
||||
#endif
|
||||
#ifndef HID_USAGE_SIMULATION_ACCELLERATOR
|
||||
# define HID_USAGE_SIMULATION_ACCELLERATOR ((USAGE) 0xc4)
|
||||
#endif
|
||||
#ifndef HID_USAGE_SIMULATION_BRAKE
|
||||
# define HID_USAGE_SIMULATION_BRAKE ((USAGE) 0xc5)
|
||||
#endif
|
||||
#ifndef HID_USAGE_SIMULATION_CLUTCH
|
||||
# define HID_USAGE_SIMULATION_CLUTCH ((USAGE) 0xc6)
|
||||
#endif
|
||||
#ifndef HID_USAGE_SIMULATION_SHIFTER
|
||||
# define HID_USAGE_SIMULATION_SHIFTER ((USAGE) 0xc7)
|
||||
#endif
|
||||
#ifndef HID_USAGE_SIMULATION_STEERING
|
||||
# define HID_USAGE_SIMULATION_STEERING ((USAGE) 0xc8)
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_JOYSTICK_LOG
|
||||
int joystick_do_log = ENABLE_JOYSTICK_LOG;
|
||||
|
||||
@@ -120,6 +143,42 @@ joystick_add_axis(raw_joystick_t *rawjoy, plat_joystick_t *joy, PHIDP_VALUE_CAPS
|
||||
case HID_USAGE_GENERIC_RZ:
|
||||
sprintf(joy->axis[joy->nr_axes].name, "RZ");
|
||||
break;
|
||||
case HID_USAGE_GENERIC_SLIDER:
|
||||
sprintf(joy->axis[joy->nr_axes].name, "Slider");
|
||||
break;
|
||||
case HID_USAGE_GENERIC_DIAL:
|
||||
sprintf(joy->axis[joy->nr_axes].name, "Dial");
|
||||
break;
|
||||
case HID_USAGE_GENERIC_WHEEL:
|
||||
sprintf(joy->axis[joy->nr_axes].name, "Wheel");
|
||||
break;
|
||||
case HID_USAGE_SIMULATION_AILERON:
|
||||
sprintf(joy->axis[joy->nr_axes].name, "Aileron");
|
||||
break;
|
||||
case HID_USAGE_SIMULATION_ELEVATOR:
|
||||
sprintf(joy->axis[joy->nr_axes].name, "Elevator");
|
||||
break;
|
||||
case HID_USAGE_SIMULATION_RUDDER:
|
||||
sprintf(joy->axis[joy->nr_axes].name, "Rudder");
|
||||
break;
|
||||
case HID_USAGE_SIMULATION_THROTTLE:
|
||||
sprintf(joy->axis[joy->nr_axes].name, "Throttle");
|
||||
break;
|
||||
case HID_USAGE_SIMULATION_ACCELLERATOR:
|
||||
sprintf(joy->axis[joy->nr_axes].name, "Accelerator");
|
||||
break;
|
||||
case HID_USAGE_SIMULATION_BRAKE:
|
||||
sprintf(joy->axis[joy->nr_axes].name, "Brake");
|
||||
break;
|
||||
case HID_USAGE_SIMULATION_CLUTCH:
|
||||
sprintf(joy->axis[joy->nr_axes].name, "Clutch");
|
||||
break;
|
||||
case HID_USAGE_SIMULATION_SHIFTER:
|
||||
sprintf(joy->axis[joy->nr_axes].name, "Shifter");
|
||||
break;
|
||||
case HID_USAGE_SIMULATION_STEERING:
|
||||
sprintf(joy->axis[joy->nr_axes].name, "Steering");
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
@@ -367,10 +426,10 @@ win_joystick_handle(PRAWINPUT raw)
|
||||
|
||||
/* Read axes */
|
||||
for (int a = 0; a < plat_joystick_state[j].nr_axes; a++) {
|
||||
struct raw_axis_t *axis = &raw_joystick_state[j].axis[a];
|
||||
ULONG uvalue = 0;
|
||||
LONG value = 0;
|
||||
LONG center = (axis->max - axis->min + 1) / 2;
|
||||
const struct raw_axis_t *axis = &raw_joystick_state[j].axis[a];
|
||||
ULONG uvalue = 0;
|
||||
LONG value = 0;
|
||||
LONG center = (axis->max - axis->min + 1) / 2;
|
||||
|
||||
r = HidP_GetUsageValue(HidP_Input, HID_USAGE_PAGE_GENERIC, axis->link, axis->usage, &uvalue,
|
||||
raw_joystick_state[j].data, (PCHAR) raw->data.hid.bRawData, raw->data.hid.dwSizeHid);
|
||||
@@ -395,14 +454,16 @@ win_joystick_handle(PRAWINPUT raw)
|
||||
}
|
||||
|
||||
plat_joystick_state[j].a[a] = value;
|
||||
// joystick_log("%s %-06d ", plat_joystick_state[j].axis[a].name, plat_joystick_state[j].a[a]);
|
||||
#if 0
|
||||
joystick_log("%s %-06d ", plat_joystick_state[j].axis[a].name, plat_joystick_state[j].a[a]);
|
||||
#endif
|
||||
}
|
||||
|
||||
/* read povs */
|
||||
for (int p = 0; p < plat_joystick_state[j].nr_povs; p++) {
|
||||
struct raw_pov_t *pov = &raw_joystick_state[j].pov[p];
|
||||
ULONG uvalue = 0;
|
||||
LONG value = -1;
|
||||
const struct raw_pov_t *pov = &raw_joystick_state[j].pov[p];
|
||||
ULONG uvalue = 0;
|
||||
LONG value = -1;
|
||||
|
||||
r = HidP_GetUsageValue(HidP_Input, HID_USAGE_PAGE_GENERIC, pov->link, pov->usage, &uvalue,
|
||||
raw_joystick_state[j].data, (PCHAR) raw->data.hid.bRawData, raw->data.hid.dwSizeHid);
|
||||
@@ -415,9 +476,13 @@ win_joystick_handle(PRAWINPUT raw)
|
||||
|
||||
plat_joystick_state[j].p[p] = value;
|
||||
|
||||
// joystick_log("%s %-3d ", plat_joystick_state[j].pov[p].name, plat_joystick_state[j].p[p]);
|
||||
#if 0
|
||||
joystick_log("%s %-3d ", plat_joystick_state[j].pov[p].name, plat_joystick_state[j].p[p]);
|
||||
#endif
|
||||
}
|
||||
// joystick_log("\n");
|
||||
#if 0
|
||||
joystick_log("\n");
|
||||
#endif
|
||||
}
|
||||
|
||||
static int
|
||||
|
@@ -35,6 +35,29 @@
|
||||
#include <86box/gameport.h>
|
||||
#include <86box/win.h>
|
||||
|
||||
/* These are defined in hidusage.h in the Windows SDK, but not in mingw-w64. */
|
||||
#ifndef HID_USAGE_SIMULATION_AILERON
|
||||
# define HID_USAGE_SIMULATION_AILERON ((USAGE) 0xb0)
|
||||
#endif
|
||||
#ifndef HID_USAGE_SIMULATION_ELEVATOR
|
||||
# define HID_USAGE_SIMULATION_ELEVATOR ((USAGE) 0xb8)
|
||||
#endif
|
||||
#ifndef HID_USAGE_SIMULATION_ACCELLERATOR
|
||||
# define HID_USAGE_SIMULATION_ACCELLERATOR ((USAGE) 0xc4)
|
||||
#endif
|
||||
#ifndef HID_USAGE_SIMULATION_BRAKE
|
||||
# define HID_USAGE_SIMULATION_BRAKE ((USAGE) 0xc5)
|
||||
#endif
|
||||
#ifndef HID_USAGE_SIMULATION_CLUTCH
|
||||
# define HID_USAGE_SIMULATION_CLUTCH ((USAGE) 0xc6)
|
||||
#endif
|
||||
#ifndef HID_USAGE_SIMULATION_SHIFTER
|
||||
# define HID_USAGE_SIMULATION_SHIFTER ((USAGE) 0xc7)
|
||||
#endif
|
||||
#ifndef HID_USAGE_SIMULATION_STEERING
|
||||
# define HID_USAGE_SIMULATION_STEERING ((USAGE) 0xc8)
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_JOYSTICK_LOG
|
||||
int joystick_do_log = ENABLE_JOYSTICK_LOG;
|
||||
|
||||
@@ -120,6 +143,42 @@ joystick_add_axis(raw_joystick_t *rawjoy, plat_joystick_t *joy, PHIDP_VALUE_CAPS
|
||||
case HID_USAGE_GENERIC_RZ:
|
||||
sprintf(joy->axis[joy->nr_axes].name, "RZ");
|
||||
break;
|
||||
case HID_USAGE_GENERIC_SLIDER:
|
||||
sprintf(joy->axis[joy->nr_axes].name, "Slider");
|
||||
break;
|
||||
case HID_USAGE_GENERIC_DIAL:
|
||||
sprintf(joy->axis[joy->nr_axes].name, "Dial");
|
||||
break;
|
||||
case HID_USAGE_GENERIC_WHEEL:
|
||||
sprintf(joy->axis[joy->nr_axes].name, "Wheel");
|
||||
break;
|
||||
case HID_USAGE_SIMULATION_AILERON:
|
||||
sprintf(joy->axis[joy->nr_axes].name, "Aileron");
|
||||
break;
|
||||
case HID_USAGE_SIMULATION_ELEVATOR:
|
||||
sprintf(joy->axis[joy->nr_axes].name, "Elevator");
|
||||
break;
|
||||
case HID_USAGE_SIMULATION_RUDDER:
|
||||
sprintf(joy->axis[joy->nr_axes].name, "Rudder");
|
||||
break;
|
||||
case HID_USAGE_SIMULATION_THROTTLE:
|
||||
sprintf(joy->axis[joy->nr_axes].name, "Throttle");
|
||||
break;
|
||||
case HID_USAGE_SIMULATION_ACCELLERATOR:
|
||||
sprintf(joy->axis[joy->nr_axes].name, "Accelerator");
|
||||
break;
|
||||
case HID_USAGE_SIMULATION_BRAKE:
|
||||
sprintf(joy->axis[joy->nr_axes].name, "Brake");
|
||||
break;
|
||||
case HID_USAGE_SIMULATION_CLUTCH:
|
||||
sprintf(joy->axis[joy->nr_axes].name, "Clutch");
|
||||
break;
|
||||
case HID_USAGE_SIMULATION_SHIFTER:
|
||||
sprintf(joy->axis[joy->nr_axes].name, "Shifter");
|
||||
break;
|
||||
case HID_USAGE_SIMULATION_STEERING:
|
||||
sprintf(joy->axis[joy->nr_axes].name, "Steering");
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
@@ -395,7 +454,9 @@ win_joystick_handle(PRAWINPUT raw)
|
||||
}
|
||||
|
||||
plat_joystick_state[j].a[a] = value;
|
||||
// joystick_log("%s %-06d ", plat_joystick_state[j].axis[a].name, plat_joystick_state[j].a[a]);
|
||||
#if 0
|
||||
joystick_log("%s %-06d ", plat_joystick_state[j].axis[a].name, plat_joystick_state[j].a[a]);
|
||||
#endif
|
||||
}
|
||||
|
||||
/* read povs */
|
||||
|
Reference in New Issue
Block a user