[hal,wpilib,cmd] Update POVs to use enums (#7978)

This commit is contained in:
Joseph Eng
2025-06-29 18:32:26 -07:00
committed by GitHub
parent e13d237390
commit f55564729b
30 changed files with 538 additions and 378 deletions

View File

@@ -142,14 +142,14 @@ class KeyboardJoystick : public SystemJoystick {
struct PovConfig {
explicit PovConfig(glass::Storage& storage);
int& key0;
int& key45;
int& key90;
int& key135;
int& key180;
int& key225;
int& key270;
int& key315;
int& keyUp;
int& keyUpRight;
int& keyRight;
int& keyDownRight;
int& keyDown;
int& keyDownLeft;
int& keyLeft;
int& keyUpLeft;
};
std::vector<std::unique_ptr<glass::Storage>>& m_povStorage;
@@ -459,7 +459,9 @@ void GlfwSystemJoystick::GetData(HALJoystickData* data, bool mapGamepad) const {
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wstringop-overflow="
#endif // __GNUC__ >= 12
data->povs.povs[j] = m_hats[j];
// From https://www.glfw.org/docs/latest/group__hat__state.html, GLFW hat
// states use the same format
data->povs.povs[j] = static_cast<HAL_JoystickPOV>(m_hats[j]);
#if __GNUC__ >= 12
#pragma GCC diagnostic pop
#endif // __GNUC__ >= 12
@@ -482,38 +484,38 @@ KeyboardJoystick::AxisConfig::AxisConfig(glass::Storage& storage)
}
KeyboardJoystick::PovConfig::PovConfig(glass::Storage& storage)
: key0{storage.GetInt("key0", -1)},
key45{storage.GetInt("key45", -1)},
key90{storage.GetInt("key90", -1)},
key135{storage.GetInt("key135", -1)},
key180{storage.GetInt("key180", -1)},
key225{storage.GetInt("key225", -1)},
key270{storage.GetInt("key270", -1)},
key315{storage.GetInt("key315", -1)} {
: keyUp{storage.GetInt("keyUp", -1)},
keyUpRight{storage.GetInt("keyUpRight", -1)},
keyRight{storage.GetInt("keyRight", -1)},
keyDownRight{storage.GetInt("keyDownRight", -1)},
keyDown{storage.GetInt("keyDown", -1)},
keyDownLeft{storage.GetInt("keyDownLeft", -1)},
keyLeft{storage.GetInt("keyLeft", -1)},
keyUpLeft{storage.GetInt("keyUpLeft", -1)} {
// sanity check the key ranges
if (key0 < -1 || key0 >= IM_ARRAYSIZE(ImGuiIO::KeysDown)) {
key0 = -1;
if (keyUp < -1 || keyUp >= IM_ARRAYSIZE(ImGuiIO::KeysDown)) {
keyUp = -1;
}
if (key45 < -1 || key45 >= IM_ARRAYSIZE(ImGuiIO::KeysDown)) {
key45 = -1;
if (keyUpRight < -1 || keyUpRight >= IM_ARRAYSIZE(ImGuiIO::KeysDown)) {
keyUpRight = -1;
}
if (key90 < -1 || key90 >= IM_ARRAYSIZE(ImGuiIO::KeysDown)) {
key90 = -1;
if (keyRight < -1 || keyRight >= IM_ARRAYSIZE(ImGuiIO::KeysDown)) {
keyRight = -1;
}
if (key135 < -1 || key135 >= IM_ARRAYSIZE(ImGuiIO::KeysDown)) {
key135 = -1;
if (keyDownRight < -1 || keyDownRight >= IM_ARRAYSIZE(ImGuiIO::KeysDown)) {
keyDownRight = -1;
}
if (key180 < -1 || key180 >= IM_ARRAYSIZE(ImGuiIO::KeysDown)) {
key180 = -1;
if (keyDown < -1 || keyDown >= IM_ARRAYSIZE(ImGuiIO::KeysDown)) {
keyDown = -1;
}
if (key225 < -1 || key225 >= IM_ARRAYSIZE(ImGuiIO::KeysDown)) {
key225 = -1;
if (keyDownLeft < -1 || keyDownLeft >= IM_ARRAYSIZE(ImGuiIO::KeysDown)) {
keyDownLeft = -1;
}
if (key270 < -1 || key270 >= IM_ARRAYSIZE(ImGuiIO::KeysDown)) {
key270 = -1;
if (keyLeft < -1 || keyLeft >= IM_ARRAYSIZE(ImGuiIO::KeysDown)) {
keyLeft = -1;
}
if (key315 < -1 || key315 >= IM_ARRAYSIZE(ImGuiIO::KeysDown)) {
key315 = -1;
if (keyUpLeft < -1 || keyUpLeft >= IM_ARRAYSIZE(ImGuiIO::KeysDown)) {
keyUpLeft = -1;
}
}
@@ -670,14 +672,14 @@ void KeyboardJoystick::SettingsDisplay() {
wpi::format_to_n_c_str(label, sizeof(label), "POV {}", i);
if (ImGui::TreeNodeEx(label, ImGuiTreeNodeFlags_DefaultOpen)) {
EditKey(" 0 deg", &m_povConfig[i].key0);
EditKey(" 45 deg", &m_povConfig[i].key45);
EditKey(" 90 deg", &m_povConfig[i].key90);
EditKey("135 deg", &m_povConfig[i].key135);
EditKey("180 deg", &m_povConfig[i].key180);
EditKey("225 deg", &m_povConfig[i].key225);
EditKey("270 deg", &m_povConfig[i].key270);
EditKey("315 deg", &m_povConfig[i].key315);
EditKey(" Up", &m_povConfig[i].keyUp);
EditKey(" Up Right", &m_povConfig[i].keyUpRight);
EditKey(" Right", &m_povConfig[i].keyRight);
EditKey("Down Right", &m_povConfig[i].keyDownRight);
EditKey(" Down", &m_povConfig[i].keyDown);
EditKey(" Down Left", &m_povConfig[i].keyDownLeft);
EditKey(" Left", &m_povConfig[i].keyLeft);
EditKey(" Up Left", &m_povConfig[i].keyUpLeft);
ImGui::TreePop();
}
}
@@ -758,37 +760,27 @@ void KeyboardJoystick::Update() {
}
}
#define SDL_HAT_CENTERED 0x00u
#define SDL_HAT_UP 0x01u
#define SDL_HAT_RIGHT 0x02u
#define SDL_HAT_DOWN 0x04u
#define SDL_HAT_LEFT 0x08u
#define SDL_HAT_RIGHTUP (SDL_HAT_RIGHT | SDL_HAT_UP)
#define SDL_HAT_RIGHTDOWN (SDL_HAT_RIGHT | SDL_HAT_DOWN)
#define SDL_HAT_LEFTUP (SDL_HAT_LEFT | SDL_HAT_UP)
#define SDL_HAT_LEFTDOWN (SDL_HAT_LEFT | SDL_HAT_DOWN)
// povs
for (int i = 0; i < m_data.povs.count; ++i) {
auto& config = m_povConfig[i];
auto& povValue = m_data.povs.povs[i];
povValue = 0;
if (IsKeyDown(io, config.key0)) {
povValue = SDL_HAT_UP;
} else if (IsKeyDown(io, config.key45)) {
povValue = SDL_HAT_RIGHTUP;
} else if (IsKeyDown(io, config.key90)) {
povValue = SDL_HAT_RIGHT;
} else if (IsKeyDown(io, config.key135)) {
povValue = SDL_HAT_RIGHTDOWN;
} else if (IsKeyDown(io, config.key180)) {
povValue = SDL_HAT_DOWN;
} else if (IsKeyDown(io, config.key225)) {
povValue = SDL_HAT_LEFTDOWN;
} else if (IsKeyDown(io, config.key270)) {
povValue = SDL_HAT_LEFT;
} else if (IsKeyDown(io, config.key315)) {
povValue = SDL_HAT_LEFTUP;
povValue = HAL_JoystickPOV_kCentered;
if (IsKeyDown(io, config.keyUp)) {
povValue = HAL_JoystickPOV_kUp;
} else if (IsKeyDown(io, config.keyUpRight)) {
povValue = HAL_JoystickPOV_kRightUp;
} else if (IsKeyDown(io, config.keyRight)) {
povValue = HAL_JoystickPOV_kRight;
} else if (IsKeyDown(io, config.keyDownRight)) {
povValue = HAL_JoystickPOV_kRightDown;
} else if (IsKeyDown(io, config.keyDown)) {
povValue = HAL_JoystickPOV_kDown;
} else if (IsKeyDown(io, config.keyDownLeft)) {
povValue = HAL_JoystickPOV_kLeftDown;
} else if (IsKeyDown(io, config.keyLeft)) {
povValue = HAL_JoystickPOV_kLeft;
} else if (IsKeyDown(io, config.keyUpLeft)) {
povValue = HAL_JoystickPOV_kLeftUp;
}
}
@@ -821,29 +813,29 @@ void KeyboardJoystick::ClearKey(int key) {
}
}
for (auto&& config : m_povConfig) {
if (config.key0 == key) {
config.key0 = -1;
if (config.keyUp == key) {
config.keyUp = -1;
}
if (config.key45 == key) {
config.key45 = -1;
if (config.keyUpRight == key) {
config.keyUpRight = -1;
}
if (config.key90 == key) {
config.key90 = -1;
if (config.keyRight == key) {
config.keyRight = -1;
}
if (config.key135 == key) {
config.key135 = -1;
if (config.keyDownRight == key) {
config.keyDownRight = -1;
}
if (config.key180 == key) {
config.key180 = -1;
if (config.keyDown == key) {
config.keyDown = -1;
}
if (config.key225 == key) {
config.key225 = -1;
if (config.keyDownLeft == key) {
config.keyDownLeft = -1;
}
if (config.key270 == key) {
config.key270 = -1;
if (config.keyLeft == key) {
config.keyLeft = -1;
}
if (config.key315 == key) {
config.key315 = -1;
if (config.keyUpLeft == key) {
config.keyUpLeft = -1;
}
}
}
@@ -879,14 +871,14 @@ GlfwKeyboardJoystick::GlfwKeyboardJoystick(glass::Storage& storage, int index)
m_povCount = 1;
m_povStorage.emplace_back(std::make_unique<glass::Storage>());
m_povConfig.emplace_back(*m_povStorage.back());
m_povConfig[0].key0 = GLFW_KEY_KP_8;
m_povConfig[0].key45 = GLFW_KEY_KP_9;
m_povConfig[0].key90 = GLFW_KEY_KP_6;
m_povConfig[0].key135 = GLFW_KEY_KP_3;
m_povConfig[0].key180 = GLFW_KEY_KP_2;
m_povConfig[0].key225 = GLFW_KEY_KP_1;
m_povConfig[0].key270 = GLFW_KEY_KP_4;
m_povConfig[0].key315 = GLFW_KEY_KP_7;
m_povConfig[0].keyUp = GLFW_KEY_KP_8;
m_povConfig[0].keyUpRight = GLFW_KEY_KP_9;
m_povConfig[0].keyRight = GLFW_KEY_KP_6;
m_povConfig[0].keyDownRight = GLFW_KEY_KP_3;
m_povConfig[0].keyDown = GLFW_KEY_KP_2;
m_povConfig[0].keyDownLeft = GLFW_KEY_KP_1;
m_povConfig[0].keyLeft = GLFW_KEY_KP_4;
m_povConfig[0].keyUpLeft = GLFW_KEY_KP_7;
}
} else if (index == 1) {
if (m_axisCount == -1 && m_axisStorage.empty()) {