diff options
| -rw-r--r-- | src/input_common/drivers/udp_client.cpp | 74 | 
1 files changed, 39 insertions, 35 deletions
| diff --git a/src/input_common/drivers/udp_client.cpp b/src/input_common/drivers/udp_client.cpp index fdee0f2d5..730e8b2f3 100644 --- a/src/input_common/drivers/udp_client.cpp +++ b/src/input_common/drivers/udp_client.cpp @@ -536,42 +536,46 @@ CalibrationConfigurationJob::CalibrationConfigurationJob(      std::function<void(u16, u16, u16, u16)> data_callback) {      std::thread([=, this] { +        constexpr u16 CALIBRATION_THRESHOLD = 100; + +        u16 min_x{UINT16_MAX}; +        u16 min_y{UINT16_MAX}; +        u16 max_x{}; +        u16 max_y{}; +          Status current_status{Status::Initialized}; -        SocketCallback callback{ -            [](Response::Version) {}, [](Response::PortInfo) {}, -            [&](Response::PadData data) { -                static constexpr u16 CALIBRATION_THRESHOLD = 100; -                static constexpr u16 MAX_VALUE = UINT16_MAX; - -                if (current_status == Status::Initialized) { -                    // Receiving data means the communication is ready now -                    current_status = Status::Ready; -                    status_callback(current_status); -                } -                const auto& touchpad_0 = data.touch[0]; -                if (touchpad_0.is_active == 0) { -                    return; -                } -                LOG_DEBUG(Input, "Current touch: {} {}", touchpad_0.x, touchpad_0.y); -                const u16 min_x = std::min(MAX_VALUE, static_cast<u16>(touchpad_0.x)); -                const u16 min_y = std::min(MAX_VALUE, static_cast<u16>(touchpad_0.y)); -                if (current_status == Status::Ready) { -                    // First touch - min data (min_x/min_y) -                    current_status = Status::Stage1Completed; -                    status_callback(current_status); -                } -                if (touchpad_0.x - min_x > CALIBRATION_THRESHOLD && -                    touchpad_0.y - min_y > CALIBRATION_THRESHOLD) { -                    // Set the current position as max value and finishes configuration -                    const u16 max_x = touchpad_0.x; -                    const u16 max_y = touchpad_0.y; -                    current_status = Status::Completed; -                    data_callback(min_x, min_y, max_x, max_y); -                    status_callback(current_status); - -                    complete_event.Set(); -                } -            }}; +        SocketCallback callback{[](Response::Version) {}, [](Response::PortInfo) {}, +                                [&](Response::PadData data) { +                                    if (current_status == Status::Initialized) { +                                        // Receiving data means the communication is ready now +                                        current_status = Status::Ready; +                                        status_callback(current_status); +                                    } +                                    if (data.touch[0].is_active == 0) { +                                        return; +                                    } +                                    LOG_DEBUG(Input, "Current touch: {} {}", data.touch[0].x, +                                              data.touch[0].y); +                                    min_x = std::min(min_x, static_cast<u16>(data.touch[0].x)); +                                    min_y = std::min(min_y, static_cast<u16>(data.touch[0].y)); +                                    if (current_status == Status::Ready) { +                                        // First touch - min data (min_x/min_y) +                                        current_status = Status::Stage1Completed; +                                        status_callback(current_status); +                                    } +                                    if (data.touch[0].x - min_x > CALIBRATION_THRESHOLD && +                                        data.touch[0].y - min_y > CALIBRATION_THRESHOLD) { +                                        // Set the current position as max value and finishes +                                        // configuration +                                        max_x = data.touch[0].x; +                                        max_y = data.touch[0].y; +                                        current_status = Status::Completed; +                                        data_callback(min_x, min_y, max_x, max_y); +                                        status_callback(current_status); + +                                        complete_event.Set(); +                                    } +                                }};          Socket socket{host, port, std::move(callback)};          std::thread worker_thread{SocketLoop, &socket};          complete_event.Wait(); | 
