[hal,wpilib] Add Touchpad support (#8401)

This commit is contained in:
Thad House
2025-11-21 13:57:11 -08:00
committed by GitHub
parent 8546d301e3
commit 32fc543dc8
34 changed files with 1319 additions and 437 deletions

View File

@@ -36,6 +36,11 @@ static_assert(org_wpilib_hardware_hal_DriverStationJNI_kMaxJoystickPOVs ==
HAL_kMaxJoystickPOVs);
static_assert(org_wpilib_hardware_hal_DriverStationJNI_kMaxJoysticks ==
HAL_kMaxJoysticks);
static_assert(org_wpilib_hardware_hal_DriverStationJNI_kMaxJoystickTouchpads ==
HAL_kMaxJoystickTouchpads);
static_assert(
org_wpilib_hardware_hal_DriverStationJNI_kMaxJoystickTouchpadFingers ==
HAL_kMaxJoystickTouchpadFingers);
using namespace wpi::hal;
using namespace wpi::util::java;
@@ -137,36 +142,55 @@ Java_org_wpilib_hardware_hal_DriverStationJNI_nativeGetAllianceStation
/*
* Class: org_wpilib_hardware_hal_DriverStationJNI
* Method: getAllJoystickData
* Signature: (I[F[S[B[J)V
* Signature: (I[F[S[B[F[J)V
*/
JNIEXPORT void JNICALL
Java_org_wpilib_hardware_hal_DriverStationJNI_getAllJoystickData
(JNIEnv* env, jclass cls, jint stick, jfloatArray axesArray,
jshortArray rawAxesArray, jbyteArray povsArray,
jlongArray buttonsAndMetadataArray)
jfloatArray touchpadFingersData, jlongArray buttonsAndMetadataArray)
{
HAL_JoystickAxes axes;
HAL_JoystickPOVs povs;
HAL_JoystickButtons buttons;
HAL_JoystickTouchpads touchpads;
HAL_GetAllJoystickData(stick, &axes, &povs, &buttons);
HAL_GetAllJoystickData(stick, &axes, &povs, &buttons, &touchpads);
CriticalJSpan<jfloat> jAxes(env, axesArray);
CriticalJSpan<jshort> jRawAxes(env, rawAxesArray);
CriticalJSpan<jbyte> jPovs(env, povsArray);
CriticalJSpan<jfloat> jTouchpadFingers(env, touchpadFingersData);
CriticalJSpan<jlong> jButtons(env, buttonsAndMetadataArray);
static_assert(sizeof(jAxes[0]) == sizeof(axes.axes[0]));
static_assert(sizeof(jRawAxes[0]) == sizeof(axes.raw[0]));
static_assert(sizeof(jPovs[0]) == sizeof(povs.povs[0]));
static_assert(sizeof(jTouchpadFingers[0]) ==
sizeof(touchpads.touchpads[0].fingers[0].x));
std::memcpy(&jAxes[0], axes.axes, sizeof(axes.axes));
std::memcpy(&jRawAxes[0], axes.raw, sizeof(axes.raw));
std::memcpy(&jPovs[0], povs.povs, sizeof(povs.povs));
jTouchpadFingers[0] = touchpads.touchpads[0].fingers[0].x;
jTouchpadFingers[1] = touchpads.touchpads[0].fingers[0].y;
jTouchpadFingers[2] = touchpads.touchpads[0].fingers[1].x;
jTouchpadFingers[3] = touchpads.touchpads[0].fingers[1].y;
jTouchpadFingers[4] = touchpads.touchpads[1].fingers[0].x;
jTouchpadFingers[5] = touchpads.touchpads[1].fingers[0].y;
jTouchpadFingers[6] = touchpads.touchpads[1].fingers[1].x;
jTouchpadFingers[7] = touchpads.touchpads[1].fingers[1].y;
jButtons[0] = axes.available;
jButtons[1] = povs.available;
jButtons[2] = buttons.available;
jButtons[3] = buttons.buttons;
jButtons[4] = touchpads.count;
jButtons[5] = (touchpads.touchpads[0].fingers[0].down ? 1 : 0) |
(touchpads.touchpads[0].fingers[1].down ? 2 : 0) |
(touchpads.touchpads[0].count << 2);
jButtons[6] = (touchpads.touchpads[1].fingers[0].down ? 1 : 0) |
(touchpads.touchpads[1].fingers[1].down ? 2 : 0) |
(touchpads.touchpads[1].count << 2);
}
/*