Support more controllers than real ps4 controllers

This commit is contained in:
dec05eba
2025-10-26 14:26:46 +01:00
parent ecd9a1f13f
commit 1c24616388
4 changed files with 152 additions and 125 deletions

View File

@@ -4,8 +4,10 @@
#include "../Hotplug.hpp"
#include <unordered_map>
#include <thread>
#include <mutex>
#include <condition_variable>
#include <poll.h>
#include <linux/joystick.h>
#include <linux/input.h>
namespace gsr {
static constexpr int max_js_poll_fd = 16;
@@ -30,8 +32,10 @@ namespace gsr {
bool bind_action(const std::string &id, GlobalHotkeyCallback callback) override;
void poll_events() override;
private:
void close_fds();
void read_events();
void process_js_event(int fd, js_event &event);
void process_input_event(int fd, input_event &event);
void add_all_joystick_devices();
bool add_device(const char *dev_input_filepath, bool print_error = true);
bool remove_device(const char *dev_input_filepath);
bool remove_poll_fd(int index);
@@ -45,6 +49,11 @@ namespace gsr {
std::unordered_map<std::string, GlobalHotkeyCallback> bound_actions_by_id;
std::thread read_thread;
std::thread close_fd_thread;
std::vector<int> fds_to_close;
std::mutex close_fd_mutex;
std::condition_variable close_fd_cv;
pollfd poll_fd[max_js_poll_fd];
ExtraData extra_data[max_js_poll_fd];
int num_poll_fd = 0;
@@ -56,8 +65,6 @@ namespace gsr {
bool down_pressed = false;
bool left_pressed = false;
bool right_pressed = false;
bool l3_button_pressed = false;
bool r3_button_pressed = false;
bool save_replay = false;
bool save_1_min_replay = false;