mirror of
				https://git.zaroz.cloud/nintendo-back-up/yuzu/yuzu-mainline.git
				synced 2025-03-21 01:53:15 +00:00 
			
		
		
		
	Address review comments
This commit is contained in:
		
							parent
							
								
									ac3690f205
								
							
						
					
					
						commit
						0fe11746fc
					
				@ -88,15 +88,15 @@ private:
 | 
				
			|||||||
    void HandleSend(const boost::system::error_code& error) {
 | 
					    void HandleSend(const boost::system::error_code& error) {
 | 
				
			||||||
        // Send a request for getting port info for the pad
 | 
					        // Send a request for getting port info for the pad
 | 
				
			||||||
        Request::PortInfo port_info{1, {pad_index, 0, 0, 0}};
 | 
					        Request::PortInfo port_info{1, {pad_index, 0, 0, 0}};
 | 
				
			||||||
        auto port_message = Request::Create(port_info, client_id);
 | 
					        const auto port_message = Request::Create(port_info, client_id);
 | 
				
			||||||
        std::memcpy(&send_buffer1, &port_message, PORT_INFO_SIZE);
 | 
					        std::memcpy(&send_buffer1, &port_message, PORT_INFO_SIZE);
 | 
				
			||||||
        std::size_t len = socket.send_to(boost::asio::buffer(send_buffer1), send_endpoint);
 | 
					        socket.send_to(boost::asio::buffer(send_buffer1), send_endpoint);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Send a request for getting pad data for the pad
 | 
					        // Send a request for getting pad data for the pad
 | 
				
			||||||
        Request::PadData pad_data{Request::PadData::Flags::Id, pad_index, EMPTY_MAC_ADDRESS};
 | 
					        Request::PadData pad_data{Request::PadData::Flags::Id, pad_index, EMPTY_MAC_ADDRESS};
 | 
				
			||||||
        auto pad_message = Request::Create(pad_data, client_id);
 | 
					        const auto pad_message = Request::Create(pad_data, client_id);
 | 
				
			||||||
        std::memcpy(send_buffer2.data(), &pad_message, PAD_DATA_SIZE);
 | 
					        std::memcpy(send_buffer2.data(), &pad_message, PAD_DATA_SIZE);
 | 
				
			||||||
        std::size_t len2 = socket.send_to(boost::asio::buffer(send_buffer2), send_endpoint);
 | 
					        socket.send_to(boost::asio::buffer(send_buffer2), send_endpoint);
 | 
				
			||||||
        StartSend(timer.expiry());
 | 
					        StartSend(timer.expiry());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -105,8 +105,8 @@ private:
 | 
				
			|||||||
    boost::asio::basic_waitable_timer<clock> timer;
 | 
					    boost::asio::basic_waitable_timer<clock> timer;
 | 
				
			||||||
    udp::socket socket;
 | 
					    udp::socket socket;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    u32 client_id;
 | 
					    u32 client_id{};
 | 
				
			||||||
    u8 pad_index;
 | 
					    u8 pad_index{};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    static constexpr std::size_t PORT_INFO_SIZE = sizeof(Message<Request::PortInfo>);
 | 
					    static constexpr std::size_t PORT_INFO_SIZE = sizeof(Message<Request::PortInfo>);
 | 
				
			||||||
    static constexpr std::size_t PAD_DATA_SIZE = sizeof(Message<Request::PadData>);
 | 
					    static constexpr std::size_t PAD_DATA_SIZE = sizeof(Message<Request::PadData>);
 | 
				
			||||||
@ -170,16 +170,16 @@ void Client::OnPadData(Response::PadData data) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        // TODO: add a setting for "click" touch. Click touch refers to a device that differentiates
 | 
					        // TODO: add a setting for "click" touch. Click touch refers to a device that differentiates
 | 
				
			||||||
        // between a simple "tap" and a hard press that causes the touch screen to click.
 | 
					        // between a simple "tap" and a hard press that causes the touch screen to click.
 | 
				
			||||||
        bool is_active = data.touch_1.is_active != 0;
 | 
					        const bool is_active = data.touch_1.is_active != 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        float x = 0;
 | 
					        float x = 0;
 | 
				
			||||||
        float y = 0;
 | 
					        float y = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (is_active && status->touch_calibration) {
 | 
					        if (is_active && status->touch_calibration) {
 | 
				
			||||||
            u16 min_x = status->touch_calibration->min_x;
 | 
					            const u16 min_x = status->touch_calibration->min_x;
 | 
				
			||||||
            u16 max_x = status->touch_calibration->max_x;
 | 
					            const u16 max_x = status->touch_calibration->max_x;
 | 
				
			||||||
            u16 min_y = status->touch_calibration->min_y;
 | 
					            const u16 min_y = status->touch_calibration->min_y;
 | 
				
			||||||
            u16 max_y = status->touch_calibration->max_y;
 | 
					            const u16 max_y = status->touch_calibration->max_y;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            x = (std::clamp(static_cast<u16>(data.touch_1.x), min_x, max_x) - min_x) /
 | 
					            x = (std::clamp(static_cast<u16>(data.touch_1.x), min_x, max_x) - min_x) /
 | 
				
			||||||
                static_cast<float>(max_x - min_x);
 | 
					                static_cast<float>(max_x - min_x);
 | 
				
			||||||
@ -229,7 +229,7 @@ CalibrationConfigurationJob::CalibrationConfigurationJob(
 | 
				
			|||||||
        constexpr u16 CALIBRATION_THRESHOLD = 100;
 | 
					        constexpr u16 CALIBRATION_THRESHOLD = 100;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        u16 min_x{UINT16_MAX}, min_y{UINT16_MAX};
 | 
					        u16 min_x{UINT16_MAX}, min_y{UINT16_MAX};
 | 
				
			||||||
        u16 max_x, max_y;
 | 
					        u16 max_x{}, max_y{};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Status current_status{Status::Initialized};
 | 
					        Status current_status{Status::Initialized};
 | 
				
			||||||
        SocketCallback callback{[](Response::Version version) {}, [](Response::PortInfo info) {},
 | 
					        SocketCallback callback{[](Response::Version version) {}, [](Response::PortInfo info) {},
 | 
				
			||||||
 | 
				
			|||||||
@ -36,10 +36,10 @@ struct DeviceStatus {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    // calibration data for scaling the device's touch area to 3ds
 | 
					    // calibration data for scaling the device's touch area to 3ds
 | 
				
			||||||
    struct CalibrationData {
 | 
					    struct CalibrationData {
 | 
				
			||||||
        u16 min_x;
 | 
					        u16 min_x{};
 | 
				
			||||||
        u16 min_y;
 | 
					        u16 min_y{};
 | 
				
			||||||
        u16 max_x;
 | 
					        u16 max_x{};
 | 
				
			||||||
        u16 max_y;
 | 
					        u16 max_y{};
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
    std::optional<CalibrationData> touch_calibration;
 | 
					    std::optional<CalibrationData> touch_calibration;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
				
			|||||||
@ -9,7 +9,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
namespace InputCommon::CemuhookUDP {
 | 
					namespace InputCommon::CemuhookUDP {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const std::size_t GetSizeOfResponseType(Type t) {
 | 
					static constexpr std::size_t GetSizeOfResponseType(Type t) {
 | 
				
			||||||
    switch (t) {
 | 
					    switch (t) {
 | 
				
			||||||
    case Type::Version:
 | 
					    case Type::Version:
 | 
				
			||||||
        return sizeof(Response::Version);
 | 
					        return sizeof(Response::Version);
 | 
				
			||||||
@ -34,7 +34,7 @@ std::optional<Type> Validate(u8* data, std::size_t size) {
 | 
				
			|||||||
        LOG_DEBUG(Input, "Invalid UDP packet received");
 | 
					        LOG_DEBUG(Input, "Invalid UDP packet received");
 | 
				
			||||||
        return {};
 | 
					        return {};
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    Header header;
 | 
					    Header header{};
 | 
				
			||||||
    std::memcpy(&header, data, sizeof(Header));
 | 
					    std::memcpy(&header, data, sizeof(Header));
 | 
				
			||||||
    if (header.magic != SERVER_MAGIC) {
 | 
					    if (header.magic != SERVER_MAGIC) {
 | 
				
			||||||
        LOG_ERROR(Input, "UDP Packet has an unexpected magic value");
 | 
					        LOG_ERROR(Input, "UDP Packet has an unexpected magic value");
 | 
				
			||||||
 | 
				
			|||||||
@ -26,15 +26,15 @@ enum class Type : u32 {
 | 
				
			|||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct Header {
 | 
					struct Header {
 | 
				
			||||||
    u32_le magic;
 | 
					    u32_le magic{};
 | 
				
			||||||
    u16_le protocol_version;
 | 
					    u16_le protocol_version{};
 | 
				
			||||||
    u16_le payload_length;
 | 
					    u16_le payload_length{};
 | 
				
			||||||
    u32_le crc;
 | 
					    u32_le crc{};
 | 
				
			||||||
    u32_le id;
 | 
					    u32_le id{};
 | 
				
			||||||
    ///> In the protocol, the type of the packet is not part of the header, but its convenient to
 | 
					    ///> In the protocol, the type of the packet is not part of the header, but its convenient to
 | 
				
			||||||
    ///> include in the header so the callee doesn't have to duplicate the type twice when building
 | 
					    ///> include in the header so the callee doesn't have to duplicate the type twice when building
 | 
				
			||||||
    ///> the data
 | 
					    ///> the data
 | 
				
			||||||
    Type type;
 | 
					    Type type{};
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
static_assert(sizeof(Header) == 20, "UDP Message Header struct has wrong size");
 | 
					static_assert(sizeof(Header) == 20, "UDP Message Header struct has wrong size");
 | 
				
			||||||
static_assert(std::is_trivially_copyable_v<Header>, "UDP Message Header is not trivially copyable");
 | 
					static_assert(std::is_trivially_copyable_v<Header>, "UDP Message Header is not trivially copyable");
 | 
				
			||||||
@ -45,7 +45,7 @@ constexpr MacAddress EMPTY_MAC_ADDRESS = {0, 0, 0, 0, 0, 0};
 | 
				
			|||||||
#pragma pack(push, 1)
 | 
					#pragma pack(push, 1)
 | 
				
			||||||
template <typename T>
 | 
					template <typename T>
 | 
				
			||||||
struct Message {
 | 
					struct Message {
 | 
				
			||||||
    Header header;
 | 
					    Header header{};
 | 
				
			||||||
    T data;
 | 
					    T data;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
#pragma pack(pop)
 | 
					#pragma pack(pop)
 | 
				
			||||||
@ -64,7 +64,7 @@ struct Version {};
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
constexpr u32 MAX_PORTS = 4;
 | 
					constexpr u32 MAX_PORTS = 4;
 | 
				
			||||||
struct PortInfo {
 | 
					struct PortInfo {
 | 
				
			||||||
    u32_le pad_count; ///> Number of ports to request data for
 | 
					    u32_le pad_count{}; ///> Number of ports to request data for
 | 
				
			||||||
    std::array<u8, MAX_PORTS> port;
 | 
					    std::array<u8, MAX_PORTS> port;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
static_assert(std::is_trivially_copyable_v<PortInfo>,
 | 
					static_assert(std::is_trivially_copyable_v<PortInfo>,
 | 
				
			||||||
@ -82,9 +82,9 @@ struct PadData {
 | 
				
			|||||||
        Mac,
 | 
					        Mac,
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
    /// Determines which method will be used as a look up for the controller
 | 
					    /// Determines which method will be used as a look up for the controller
 | 
				
			||||||
    Flags flags;
 | 
					    Flags flags{};
 | 
				
			||||||
    /// Index of the port of the controller to retrieve data about
 | 
					    /// Index of the port of the controller to retrieve data about
 | 
				
			||||||
    u8 port_id;
 | 
					    u8 port_id{};
 | 
				
			||||||
    /// Mac address of the controller to retrieve data about
 | 
					    /// Mac address of the controller to retrieve data about
 | 
				
			||||||
    MacAddress mac;
 | 
					    MacAddress mac;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
@ -113,20 +113,20 @@ Message<T> Create(const T data, const u32 client_id = 0) {
 | 
				
			|||||||
namespace Response {
 | 
					namespace Response {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct Version {
 | 
					struct Version {
 | 
				
			||||||
    u16_le version;
 | 
					    u16_le version{};
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
static_assert(sizeof(Version) == 2, "UDP Response Version struct has wrong size");
 | 
					static_assert(sizeof(Version) == 2, "UDP Response Version struct has wrong size");
 | 
				
			||||||
static_assert(std::is_trivially_copyable_v<Version>,
 | 
					static_assert(std::is_trivially_copyable_v<Version>,
 | 
				
			||||||
              "UDP Response Version is not trivially copyable");
 | 
					              "UDP Response Version is not trivially copyable");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct PortInfo {
 | 
					struct PortInfo {
 | 
				
			||||||
    u8 id;
 | 
					    u8 id{};
 | 
				
			||||||
    u8 state;
 | 
					    u8 state{};
 | 
				
			||||||
    u8 model;
 | 
					    u8 model{};
 | 
				
			||||||
    u8 connection_type;
 | 
					    u8 connection_type{};
 | 
				
			||||||
    MacAddress mac;
 | 
					    MacAddress mac;
 | 
				
			||||||
    u8 battery;
 | 
					    u8 battery{};
 | 
				
			||||||
    u8 is_pad_active;
 | 
					    u8 is_pad_active{};
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
static_assert(sizeof(PortInfo) == 12, "UDP Response PortInfo struct has wrong size");
 | 
					static_assert(sizeof(PortInfo) == 12, "UDP Response PortInfo struct has wrong size");
 | 
				
			||||||
static_assert(std::is_trivially_copyable_v<PortInfo>,
 | 
					static_assert(std::is_trivially_copyable_v<PortInfo>,
 | 
				
			||||||
@ -134,10 +134,10 @@ static_assert(std::is_trivially_copyable_v<PortInfo>,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#pragma pack(push, 1)
 | 
					#pragma pack(push, 1)
 | 
				
			||||||
struct PadData {
 | 
					struct PadData {
 | 
				
			||||||
    PortInfo info;
 | 
					    PortInfo info{};
 | 
				
			||||||
    u32_le packet_counter;
 | 
					    u32_le packet_counter{};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    u16_le digital_button;
 | 
					    u16_le digital_button{};
 | 
				
			||||||
    // The following union isn't trivially copyable but we don't use this input anyway.
 | 
					    // The following union isn't trivially copyable but we don't use this input anyway.
 | 
				
			||||||
    // union DigitalButton {
 | 
					    // union DigitalButton {
 | 
				
			||||||
    //     u16_le button;
 | 
					    //     u16_le button;
 | 
				
			||||||
@ -161,46 +161,46 @@ struct PadData {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    u8 home;
 | 
					    u8 home;
 | 
				
			||||||
    /// If the device supports a "click" on the touchpad, this will change to 1 when a click happens
 | 
					    /// If the device supports a "click" on the touchpad, this will change to 1 when a click happens
 | 
				
			||||||
    u8 touch_hard_press;
 | 
					    u8 touch_hard_press{};
 | 
				
			||||||
    u8 left_stick_x;
 | 
					    u8 left_stick_x{};
 | 
				
			||||||
    u8 left_stick_y;
 | 
					    u8 left_stick_y{};
 | 
				
			||||||
    u8 right_stick_x;
 | 
					    u8 right_stick_x{};
 | 
				
			||||||
    u8 right_stick_y;
 | 
					    u8 right_stick_y{};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    struct AnalogButton {
 | 
					    struct AnalogButton {
 | 
				
			||||||
        u8 button_8;
 | 
					        u8 button_8{};
 | 
				
			||||||
        u8 button_7;
 | 
					        u8 button_7{};
 | 
				
			||||||
        u8 button_6;
 | 
					        u8 button_6{};
 | 
				
			||||||
        u8 button_5;
 | 
					        u8 button_5{};
 | 
				
			||||||
        u8 button_12;
 | 
					        u8 button_12{};
 | 
				
			||||||
        u8 button_11;
 | 
					        u8 button_11{};
 | 
				
			||||||
        u8 button_10;
 | 
					        u8 button_10{};
 | 
				
			||||||
        u8 button_9;
 | 
					        u8 button_9{};
 | 
				
			||||||
        u8 button_16;
 | 
					        u8 button_16{};
 | 
				
			||||||
        u8 button_15;
 | 
					        u8 button_15{};
 | 
				
			||||||
        u8 button_14;
 | 
					        u8 button_14{};
 | 
				
			||||||
        u8 button_13;
 | 
					        u8 button_13{};
 | 
				
			||||||
    } analog_button;
 | 
					    } analog_button;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    struct TouchPad {
 | 
					    struct TouchPad {
 | 
				
			||||||
        u8 is_active;
 | 
					        u8 is_active{};
 | 
				
			||||||
        u8 id;
 | 
					        u8 id{};
 | 
				
			||||||
        u16_le x;
 | 
					        u16_le x{};
 | 
				
			||||||
        u16_le y;
 | 
					        u16_le y{};
 | 
				
			||||||
    } touch_1, touch_2;
 | 
					    } touch_1, touch_2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    u64_le motion_timestamp;
 | 
					    u64_le motion_timestamp;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    struct Accelerometer {
 | 
					    struct Accelerometer {
 | 
				
			||||||
        float x;
 | 
					        float x{};
 | 
				
			||||||
        float y;
 | 
					        float y{};
 | 
				
			||||||
        float z;
 | 
					        float z{};
 | 
				
			||||||
    } accel;
 | 
					    } accel;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    struct Gyroscope {
 | 
					    struct Gyroscope {
 | 
				
			||||||
        float pitch;
 | 
					        float pitch{};
 | 
				
			||||||
        float yaw;
 | 
					        float yaw{};
 | 
				
			||||||
        float roll;
 | 
					        float roll{};
 | 
				
			||||||
    } gyro;
 | 
					    } gyro;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
#pragma pack(pop)
 | 
					#pragma pack(pop)
 | 
				
			||||||
@ -212,6 +212,13 @@ static_assert(std::is_trivially_copyable_v<PadData>,
 | 
				
			|||||||
static_assert(sizeof(Message<PadData>) == MAX_PACKET_SIZE,
 | 
					static_assert(sizeof(Message<PadData>) == MAX_PACKET_SIZE,
 | 
				
			||||||
              "UDP MAX_PACKET_SIZE is no longer larger than Message<PadData>");
 | 
					              "UDP MAX_PACKET_SIZE is no longer larger than Message<PadData>");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static_assert(sizeof(PadData::AnalogButton) == 12,
 | 
				
			||||||
 | 
					              "UDP Response AnalogButton struct has wrong size ");
 | 
				
			||||||
 | 
					static_assert(sizeof(PadData::TouchPad) == 6, "UDP Response TouchPad struct has wrong size ");
 | 
				
			||||||
 | 
					static_assert(sizeof(PadData::Accelerometer) == 12,
 | 
				
			||||||
 | 
					              "UDP Response Accelerometer struct has wrong size ");
 | 
				
			||||||
 | 
					static_assert(sizeof(PadData::Gyroscope) == 12, "UDP Response Gyroscope struct has wrong size ");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Create a Response Message from the data
 | 
					 * Create a Response Message from the data
 | 
				
			||||||
 * @param data array of bytes sent from the server
 | 
					 * @param data array of bytes sent from the server
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user