| | |
| | |
| | |
| |
|
| | #pragma once |
| |
|
| | #include <functional> |
| | #include <memory> |
| | #include <mutex> |
| | #include <optional> |
| | #include <string> |
| | #include <thread> |
| | #include <tuple> |
| | #include "common/common_types.h" |
| | #include "common/thread.h" |
| | #include "common/vector_math.h" |
| |
|
| | namespace InputCommon::CemuhookUDP { |
| |
|
| | constexpr u16 DEFAULT_PORT = 26760; |
| | constexpr char DEFAULT_ADDR[] = "127.0.0.1"; |
| |
|
| | class Socket; |
| |
|
| | namespace Response { |
| | struct PadData; |
| | struct PortInfo; |
| | struct Version; |
| | } |
| |
|
| | struct DeviceStatus { |
| | std::mutex update_mutex; |
| | std::tuple<Common::Vec3<float>, Common::Vec3<float>> motion_status; |
| | std::tuple<float, float, bool> touch_status; |
| |
|
| | |
| | struct CalibrationData { |
| | u16 min_x{}; |
| | u16 min_y{}; |
| | u16 max_x{}; |
| | u16 max_y{}; |
| | }; |
| | std::optional<CalibrationData> touch_calibration; |
| | }; |
| |
|
| | class Client { |
| | public: |
| | explicit Client(std::shared_ptr<DeviceStatus> status, const std::string& host = DEFAULT_ADDR, |
| | u16 port = DEFAULT_PORT, u8 pad_index = 0, u32 client_id = 24872); |
| | ~Client(); |
| | void ReloadSocket(const std::string& host = "127.0.0.1", u16 port = 26760, u8 pad_index = 0, |
| | u32 client_id = 24872); |
| |
|
| | private: |
| | void OnVersion(Response::Version); |
| | void OnPortInfo(Response::PortInfo); |
| | void OnPadData(Response::PadData); |
| | void StartCommunication(const std::string& host, u16 port, u8 pad_index, u32 client_id); |
| |
|
| | std::unique_ptr<Socket> socket; |
| | std::shared_ptr<DeviceStatus> status; |
| | std::thread thread; |
| | u64 packet_sequence = 0; |
| | }; |
| |
|
| | |
| | class CalibrationConfigurationJob { |
| | public: |
| | enum class Status { |
| | Initialized, |
| | Ready, |
| | Stage1Completed, |
| | Completed, |
| | }; |
| | |
| | |
| | |
| | |
| | |
| | |
| | explicit CalibrationConfigurationJob(const std::string& host, u16 port, u8 pad_index, |
| | u32 client_id, std::function<void(Status)> status_callback, |
| | std::function<void(u16, u16, u16, u16)> data_callback); |
| | ~CalibrationConfigurationJob(); |
| | void Stop(); |
| |
|
| | private: |
| | Common::Event complete_event; |
| | }; |
| |
|
| | void TestCommunication(const std::string& host, u16 port, u8 pad_index, u32 client_id, |
| | const std::function<void()>& success_callback, |
| | const std::function<void()>& failure_callback); |
| |
|
| | } |
| |
|