[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

@@ -350,6 +350,71 @@ double DriverStation::GetStickAxis(int stick, int axis) {
return axes.axes[axis];
}
DriverStation::TouchpadFinger DriverStation::GetStickTouchpadFinger(
int stick, int touchpad, int finger) {
if (stick < 0 || stick >= kJoystickPorts) {
WPILIB_ReportError(warn::BadJoystickIndex, "stick {} out of range", stick);
return TouchpadFinger{false, 0.0f, 0.0f};
}
if (touchpad < 0 || touchpad >= HAL_kMaxJoystickTouchpads) {
WPILIB_ReportError(warn::BadJoystickAxis, "touchpad {} out of range",
touchpad);
return TouchpadFinger{false, 0.0f, 0.0f};
}
if (finger < 0 || finger >= HAL_kMaxJoystickTouchpadFingers) {
WPILIB_ReportError(warn::BadJoystickAxis, "finger {} out of range", finger);
return TouchpadFinger{false, 0.0f, 0.0f};
}
HAL_JoystickTouchpads touchpads;
HAL_GetJoystickTouchpads(stick, &touchpads);
auto touchpadCount = touchpads.count;
if (touchpad < touchpadCount) {
if (finger < touchpads.touchpads[touchpad].count) {
return TouchpadFinger{
touchpads.touchpads[touchpad].fingers[finger].down != 0,
touchpads.touchpads[touchpad].fingers[finger].x,
touchpads.touchpads[touchpad].fingers[finger].y};
}
}
ReportJoystickUnpluggedWarning(
"Joystick Touchpad Finger {} missing, check if all controllers are "
"plugged in",
touchpad);
return TouchpadFinger{false, 0.0f, 0.0f};
}
bool DriverStation::GetStickTouchpadFingerAvailable(int stick, int touchpad,
int finger) {
if (stick < 0 || stick >= kJoystickPorts) {
WPILIB_ReportError(warn::BadJoystickIndex, "stick {} out of range", stick);
return false;
}
if (touchpad < 0 || touchpad >= HAL_kMaxJoystickTouchpads) {
WPILIB_ReportError(warn::BadJoystickAxis, "touchpad {} out of range",
touchpad);
return false;
}
if (finger < 0 || finger >= HAL_kMaxJoystickTouchpadFingers) {
WPILIB_ReportError(warn::BadJoystickAxis, "finger {} out of range", finger);
return false;
}
HAL_JoystickTouchpads touchpads;
HAL_GetJoystickTouchpads(stick, &touchpads);
auto touchpadCount = touchpads.count;
if (touchpad < touchpadCount) {
if (finger < touchpads.touchpads[touchpad].count) {
return true;
}
}
return false;
}
std::optional<double> DriverStation::GetStickAxisIfAvailable(int stick,
int axis) {
if (stick < 0 || stick >= kJoystickPorts) {

View File

@@ -176,3 +176,13 @@ void GenericHID::SetRumble(RumbleType type, double value) {
HAL_SetJoystickRumble(m_port, m_leftRumble, m_rightRumble,
m_leftTriggerRumble, m_rightTriggerRumble);
}
bool GenericHID::GetTouchpadFingerAvailable(int touchpad, int finger) const {
return DriverStation::GetStickTouchpadFingerAvailable(m_port, touchpad,
finger);
}
DriverStation::TouchpadFinger GenericHID::GetTouchpadFinger(int touchpad,
int finger) const {
return DriverStation::GetStickTouchpadFinger(m_port, touchpad, finger);
}