mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-24 01:31:46 +00:00
[hal,wpilib] Add Touchpad support (#8401)
This commit is contained in:
@@ -42,6 +42,7 @@ struct JoystickDataCache {
|
||||
HAL_JoystickAxes axes[kJoystickPorts];
|
||||
HAL_JoystickPOVs povs[kJoystickPorts];
|
||||
HAL_JoystickButtons buttons[kJoystickPorts];
|
||||
HAL_JoystickTouchpads touchpads[kJoystickPorts];
|
||||
HAL_AllianceStationID allianceStation;
|
||||
double matchTime;
|
||||
HAL_ControlWord controlWord;
|
||||
@@ -64,6 +65,7 @@ void JoystickDataCache::Update() {
|
||||
SimDriverStationData->GetJoystickAxes(i, &axes[i]);
|
||||
SimDriverStationData->GetJoystickPOVs(i, &povs[i]);
|
||||
SimDriverStationData->GetJoystickButtons(i, &buttons[i]);
|
||||
SimDriverStationData->GetJoystickTouchpads(i, &touchpads[i]);
|
||||
}
|
||||
allianceStation = SimDriverStationData->allianceStationId;
|
||||
matchTime = SimDriverStationData->matchTime;
|
||||
@@ -266,9 +268,21 @@ int32_t HAL_GetJoystickButtons(int32_t joystickNum,
|
||||
return 0;
|
||||
}
|
||||
|
||||
int32_t HAL_GetJoystickTouchpads(int32_t joystickNum,
|
||||
HAL_JoystickTouchpads* touchpads) {
|
||||
if (gShutdown) {
|
||||
return INCOMPATIBLE_STATE;
|
||||
}
|
||||
CHECK_JOYSTICK_NUMBER(joystickNum);
|
||||
std::scoped_lock lock{driverStation->cacheMutex};
|
||||
*touchpads = currentRead->touchpads[joystickNum];
|
||||
return 0;
|
||||
}
|
||||
|
||||
void HAL_GetAllJoystickData(int32_t joystickNum, HAL_JoystickAxes* axes,
|
||||
HAL_JoystickPOVs* povs,
|
||||
HAL_JoystickButtons* buttons) {
|
||||
HAL_JoystickButtons* buttons,
|
||||
HAL_JoystickTouchpads* touchpads) {
|
||||
if (gShutdown) {
|
||||
return;
|
||||
}
|
||||
@@ -276,6 +290,7 @@ void HAL_GetAllJoystickData(int32_t joystickNum, HAL_JoystickAxes* axes,
|
||||
*axes = currentRead->axes[joystickNum];
|
||||
*povs = currentRead->povs[joystickNum];
|
||||
*buttons = currentRead->buttons[joystickNum];
|
||||
*touchpads = currentRead->touchpads[joystickNum];
|
||||
}
|
||||
|
||||
int32_t HAL_GetJoystickDescriptor(int32_t joystickNum,
|
||||
|
||||
@@ -44,6 +44,7 @@ void DriverStationData::ResetData() {
|
||||
m_joystickData[i].povs = HAL_JoystickPOVs{};
|
||||
m_joystickData[i].buttons = HAL_JoystickButtons{};
|
||||
m_joystickData[i].descriptor = HAL_JoystickDescriptor{};
|
||||
m_joystickData[i].touchpads = HAL_JoystickTouchpads{};
|
||||
m_joystickData[i].outputs.leds = 0;
|
||||
m_joystickData[i].outputs.leftRumble = 0;
|
||||
m_joystickData[i].outputs.rightRumble = 0;
|
||||
@@ -105,6 +106,7 @@ void DriverStationData::ResetData() {
|
||||
DEFINE_CPPAPI(Axes, axes, )
|
||||
DEFINE_CPPAPI(POVs, povs, )
|
||||
DEFINE_CPPAPI(Buttons, buttons, )
|
||||
DEFINE_CPPAPI(Touchpads, touchpads, )
|
||||
|
||||
DEFINE_CPPAPI_CALLBACKS(Descriptor, descriptor, )
|
||||
|
||||
@@ -372,6 +374,42 @@ void DriverStationData::GetJoystickAvailables(int32_t stick,
|
||||
*povsAvailable = m_joystickData[stick].povs.available;
|
||||
}
|
||||
|
||||
void DriverStationData::SetJoystickTouchpadCounts(int32_t stick,
|
||||
uint8_t touchpadCount,
|
||||
const uint8_t* fingerCount) {
|
||||
if (stick < 0 || stick >= kNumJoysticks) {
|
||||
return;
|
||||
}
|
||||
std::scoped_lock lock(m_joystickDataMutex);
|
||||
m_joystickData[stick].touchpads.count = touchpadCount;
|
||||
for (uint8_t i = 0; i < touchpadCount; i++) {
|
||||
m_joystickData[stick].touchpads.touchpads[i].count = fingerCount[i];
|
||||
}
|
||||
m_joystickTouchpadsCallbacks(stick, &m_joystickData[stick].touchpads);
|
||||
}
|
||||
|
||||
void DriverStationData::SetJoystickTouchpadFinger(int32_t stick,
|
||||
int32_t touchpad,
|
||||
int32_t finger, HAL_Bool down,
|
||||
double x, double y) {
|
||||
if (stick < 0 || stick >= kNumJoysticks) {
|
||||
return;
|
||||
}
|
||||
if (touchpad < 0 || touchpad >= HAL_kMaxJoystickTouchpads) {
|
||||
return;
|
||||
}
|
||||
if (finger < 0 || finger >= HAL_kMaxJoystickTouchpadFingers) {
|
||||
return;
|
||||
}
|
||||
std::scoped_lock lock(m_joystickDataMutex);
|
||||
HAL_JoystickTouchpad& tp =
|
||||
m_joystickData[stick].touchpads.touchpads[touchpad];
|
||||
tp.fingers[finger].down = down;
|
||||
tp.fingers[finger].x = x;
|
||||
tp.fingers[finger].y = y;
|
||||
m_joystickTouchpadsCallbacks(stick, &m_joystickData[stick].touchpads);
|
||||
}
|
||||
|
||||
void DriverStationData::SetJoystickIsGamepad(int32_t stick,
|
||||
HAL_Bool isGamepad) {
|
||||
if (stick < 0 || stick >= kNumJoysticks) {
|
||||
@@ -490,6 +528,7 @@ DEFINE_CAPI(double, MatchTime, matchTime)
|
||||
DEFINE_CAPI(Axes, axes)
|
||||
DEFINE_CAPI(POVs, povs)
|
||||
DEFINE_CAPI(Buttons, buttons)
|
||||
DEFINE_CAPI(Touchpads, touchpads)
|
||||
DEFINE_CAPI(Descriptor, descriptor)
|
||||
|
||||
int32_t HALSIM_RegisterJoystickLedsCallback(int32_t joystickNum,
|
||||
@@ -607,6 +646,19 @@ void HALSIM_GetJoystickAvailables(int32_t stick, uint16_t* axesAvailable,
|
||||
buttonsAvailable, povsAvailable);
|
||||
}
|
||||
|
||||
void HALSIM_SetJoystickTouchpadCounts(int32_t stick, uint8_t touchpadCount,
|
||||
const uint8_t* fingerCount) {
|
||||
SimDriverStationData->SetJoystickTouchpadCounts(stick, touchpadCount,
|
||||
fingerCount);
|
||||
}
|
||||
|
||||
void HALSIM_SetJoystickTouchpadFinger(int32_t stick, int32_t touchpad,
|
||||
int32_t finger, HAL_Bool down, double x,
|
||||
double y) {
|
||||
SimDriverStationData->SetJoystickTouchpadFinger(stick, touchpad, finger, down,
|
||||
x, y);
|
||||
}
|
||||
|
||||
void HALSIM_SetJoystickIsGamepad(int32_t stick, HAL_Bool isGamepad) {
|
||||
SimDriverStationData->SetJoystickIsGamepad(stick, isGamepad);
|
||||
}
|
||||
|
||||
@@ -28,6 +28,7 @@ class DriverStationData {
|
||||
HAL_SIMCALLBACKREGISTRY_DEFINE_NAME(JoystickDescriptor)
|
||||
HAL_SIMCALLBACKREGISTRY_DEFINE_NAME(JoystickLeds)
|
||||
HAL_SIMCALLBACKREGISTRY_DEFINE_NAME(JoystickRumbles)
|
||||
HAL_SIMCALLBACKREGISTRY_DEFINE_NAME(JoystickTouchpads)
|
||||
HAL_SIMCALLBACKREGISTRY_DEFINE_NAME(MatchInfo)
|
||||
HAL_SIMCALLBACKREGISTRY_DEFINE_NAME(NewData)
|
||||
|
||||
@@ -62,6 +63,15 @@ class DriverStationData {
|
||||
void SetJoystickButtons(int32_t joystickNum,
|
||||
const HAL_JoystickButtons* buttons);
|
||||
|
||||
int32_t RegisterJoystickTouchpadsCallback(
|
||||
int32_t joystickNum, HAL_JoystickTouchpadsCallback callback, void* param,
|
||||
HAL_Bool initialNotify);
|
||||
void CancelJoystickTouchpadsCallback(int32_t uid);
|
||||
void GetJoystickTouchpads(int32_t joystickNum,
|
||||
HAL_JoystickTouchpads* touchpads);
|
||||
void SetJoystickTouchpads(int32_t joystickNum,
|
||||
const HAL_JoystickTouchpads* touchpads);
|
||||
|
||||
int32_t RegisterJoystickDescriptorCallback(
|
||||
int32_t joystickNum, HAL_JoystickDescriptorCallback callback, void* param,
|
||||
HAL_Bool initialNotify);
|
||||
@@ -113,6 +123,11 @@ class DriverStationData {
|
||||
void GetJoystickAvailables(int32_t stick, uint16_t* axesAvailable,
|
||||
uint64_t* buttonsAvailable,
|
||||
uint8_t* povsAvailable);
|
||||
void SetJoystickTouchpadCounts(int32_t stick, uint8_t touchpadCount,
|
||||
const uint8_t* fingerCount);
|
||||
void SetJoystickTouchpadFinger(int32_t stick, int32_t touchpad,
|
||||
int32_t finger, HAL_Bool down, double x,
|
||||
double y);
|
||||
|
||||
void SetJoystickIsGamepad(int32_t stick, HAL_Bool isGamepad);
|
||||
void SetJoystickGamepadType(int32_t stick, int32_t type);
|
||||
@@ -144,6 +159,8 @@ class DriverStationData {
|
||||
m_joystickPOVsCallbacks;
|
||||
SimCallbackRegistry<HAL_JoystickButtonsCallback, GetJoystickButtonsName>
|
||||
m_joystickButtonsCallbacks;
|
||||
SimCallbackRegistry<HAL_JoystickTouchpadsCallback, GetJoystickTouchpadsName>
|
||||
m_joystickTouchpadsCallbacks;
|
||||
SimCallbackRegistry<HAL_JoystickLedsCallback, GetJoystickLedsName>
|
||||
m_joystickLedsCallbacks;
|
||||
SimCallbackRegistry<HAL_JoystickRumblesCallback, GetJoystickRumblesName>
|
||||
@@ -166,6 +183,7 @@ class DriverStationData {
|
||||
HAL_JoystickAxes axes;
|
||||
HAL_JoystickPOVs povs;
|
||||
HAL_JoystickButtons buttons;
|
||||
HAL_JoystickTouchpads touchpads;
|
||||
JoystickOutputStore outputs;
|
||||
HAL_JoystickDescriptor descriptor;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user