diff options
Diffstat (limited to 'src/input_common/udp/client.h')
| -rw-r--r-- | src/input_common/udp/client.h | 44 |
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 | ||
| 99 | private: | 99 | private: |
| 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 | ||
| 177 | void TestCommunication(const std::string& host, u16 port, std::size_t pad_index, | 181 | void 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 | ||