summaryrefslogtreecommitdiff
path: root/src/input_common/udp/client.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/input_common/udp/client.h')
-rw-r--r--src/input_common/udp/client.h44
1 files changed, 24 insertions, 20 deletions
diff --git a/src/input_common/udp/client.h b/src/input_common/udp/client.h
index e9e438e88..a11ea3068 100644
--- a/src/input_common/udp/client.h
+++ b/src/input_common/udp/client.h
@@ -84,7 +84,7 @@ public:
84 84
85 std::vector<Common::ParamPackage> GetInputDevices() const; 85 std::vector<Common::ParamPackage> GetInputDevices() const;
86 86
87 bool DeviceConnected(std::size_t client) const; 87 bool DeviceConnected(std::size_t pad) const;
88 void ReloadSockets(); 88 void ReloadSockets();
89 89
90 Common::SPSCQueue<UDPPadStatus>& GetPadQueue(); 90 Common::SPSCQueue<UDPPadStatus>& GetPadQueue();
@@ -97,38 +97,40 @@ public:
97 const Input::TouchStatus& GetTouchState() const; 97 const Input::TouchStatus& GetTouchState() const;
98 98
99private: 99private:
100 struct ClientData { 100 struct PadData {
101 ClientData();
102 ~ClientData();
103
104 std::string host{"127.0.0.1"};
105 u16 port{26760};
106 std::size_t pad_index{}; 101 std::size_t pad_index{};
107 std::unique_ptr<Socket> socket; 102 bool connected{};
108 DeviceStatus status; 103 DeviceStatus status;
109 std::thread thread;
110 u64 packet_sequence{}; 104 u64 packet_sequence{};
111 s8 active{-1};
112 105
113 // Realtime values 106 // Realtime values
114 // motion is initalized with PID values for drift correction on joycons 107 // motion is initalized with PID values for drift correction on joycons
115 InputCommon::MotionInput motion{0.3f, 0.005f, 0.0f}; 108 InputCommon::MotionInput motion{0.3f, 0.005f, 0.0f};
116 std::chrono::time_point<std::chrono::steady_clock> last_motion_update; 109 std::chrono::time_point<std::chrono::steady_clock> last_update;
110 };
111
112 struct ClientConnection {
113 ClientConnection();
114 ~ClientConnection();
115 std::string host{"127.0.0.1"};
116 u16 port{26760};
117 s8 active{-1};
118 std::unique_ptr<Socket> socket;
119 std::thread thread;
117 }; 120 };
118 121
119 // For shutting down, clear all data, join all threads, release usb 122 // For shutting down, clear all data, join all threads, release usb
120 void Reset(); 123 void Reset();
121 124
122 // Translates configuration to client number 125 // Translates configuration to client number
123 std::size_t GetClientNumber(std::string_view host, u16 port, std::size_t pad) const; 126 std::size_t GetClientNumber(std::string_view host, u16 port) const;
124 127
125 void OnVersion(Response::Version); 128 void OnVersion(Response::Version);
126 void OnPortInfo(Response::PortInfo); 129 void OnPortInfo(Response::PortInfo);
127 void OnPadData(Response::PadData, std::size_t client); 130 void OnPadData(Response::PadData, std::size_t client);
128 void StartCommunication(std::size_t client, const std::string& host, u16 port, 131 void StartCommunication(std::size_t client, const std::string& host, u16 port);
129 std::size_t pad_index); 132 void UpdateYuzuSettings(std::size_t client, std::size_t pad_index,
130 void UpdateYuzuSettings(std::size_t client, const Common::Vec3<float>& acc, 133 const Common::Vec3<float>& acc, const Common::Vec3<float>& gyro);
131 const Common::Vec3<float>& gyro);
132 134
133 // Returns an unused finger id, if there is no fingers available std::nullopt will be 135 // Returns an unused finger id, if there is no fingers available std::nullopt will be
134 // returned 136 // returned
@@ -140,10 +142,12 @@ private:
140 bool configuring = false; 142 bool configuring = false;
141 143
142 // Allocate clients for 8 udp servers 144 // Allocate clients for 8 udp servers
143 static constexpr std::size_t MAX_UDP_CLIENTS = 4 * 8; 145 static constexpr std::size_t MAX_UDP_CLIENTS = 8;
146 static constexpr std::size_t PADS_PER_CLIENT = 4;
144 // Each client can have up 2 touch inputs 147 // Each client can have up 2 touch inputs
145 static constexpr std::size_t MAX_TOUCH_FINGERS = MAX_UDP_CLIENTS * 2; 148 static constexpr std::size_t MAX_TOUCH_FINGERS = MAX_UDP_CLIENTS * 2;
146 std::array<ClientData, MAX_UDP_CLIENTS> clients{}; 149 std::array<PadData, MAX_UDP_CLIENTS * PADS_PER_CLIENT> pads{};
150 std::array<ClientConnection, MAX_UDP_CLIENTS> clients{};
147 Common::SPSCQueue<UDPPadStatus> pad_queue{}; 151 Common::SPSCQueue<UDPPadStatus> pad_queue{};
148 Input::TouchStatus touch_status{}; 152 Input::TouchStatus touch_status{};
149 std::array<std::size_t, MAX_TOUCH_FINGERS> finger_id{}; 153 std::array<std::size_t, MAX_TOUCH_FINGERS> finger_id{};
@@ -164,7 +168,7 @@ public:
164 * @param status_callback Callback for job status updates 168 * @param status_callback Callback for job status updates
165 * @param data_callback Called when calibration data is ready 169 * @param data_callback Called when calibration data is ready
166 */ 170 */
167 explicit CalibrationConfigurationJob(const std::string& host, u16 port, std::size_t pad_index, 171 explicit CalibrationConfigurationJob(const std::string& host, u16 port,
168 std::function<void(Status)> status_callback, 172 std::function<void(Status)> status_callback,
169 std::function<void(u16, u16, u16, u16)> data_callback); 173 std::function<void(u16, u16, u16, u16)> data_callback);
170 ~CalibrationConfigurationJob(); 174 ~CalibrationConfigurationJob();
@@ -174,7 +178,7 @@ private:
174 Common::Event complete_event; 178 Common::Event complete_event;
175}; 179};
176 180
177void TestCommunication(const std::string& host, u16 port, std::size_t pad_index, 181void TestCommunication(const std::string& host, u16 port,
178 const std::function<void()>& success_callback, 182 const std::function<void()>& success_callback,
179 const std::function<void()>& failure_callback); 183 const std::function<void()>& failure_callback);
180 184