summaryrefslogtreecommitdiff
path: root/src/input_common/drivers/udp_client.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/input_common/drivers/udp_client.cpp')
-rw-r--r--src/input_common/drivers/udp_client.cpp74
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 4ab991a7d..a1ce4525d 100644
--- a/src/input_common/drivers/udp_client.cpp
+++ b/src/input_common/drivers/udp_client.cpp
@@ -536,42 +536,46 @@ CalibrationConfigurationJob::CalibrationConfigurationJob(
536 std::function<void(u16, u16, u16, u16)> data_callback) { 536 std::function<void(u16, u16, u16, u16)> data_callback) {
537 537
538 std::thread([=, this] { 538 std::thread([=, this] {
539 u16 min_x{UINT16_MAX};
540 u16 min_y{UINT16_MAX};
541 u16 max_x{};
542 u16 max_y{};
543
539 Status current_status{Status::Initialized}; 544 Status current_status{Status::Initialized};
540 SocketCallback callback{ 545 SocketCallback callback{[](Response::Version) {}, [](Response::PortInfo) {},
541 [](Response::Version) {}, [](Response::PortInfo) {}, 546 [&](Response::PadData data) {
542 [&](Response::PadData data) { 547 constexpr u16 CALIBRATION_THRESHOLD = 100;
543 static constexpr u16 CALIBRATION_THRESHOLD = 100; 548
544 static constexpr u16 MAX_VALUE = UINT16_MAX; 549 if (current_status == Status::Initialized) {
545 550 // Receiving data means the communication is ready now
546 if (current_status == Status::Initialized) { 551 current_status = Status::Ready;
547 // Receiving data means the communication is ready now 552 status_callback(current_status);
548 current_status = Status::Ready; 553 }
549 status_callback(current_status); 554 if (data.touch[0].is_active == 0) {
550 } 555 return;
551 const auto& touchpad_0 = data.touch[0]; 556 }
552 if (touchpad_0.is_active == 0) { 557 LOG_DEBUG(Input, "Current touch: {} {}", data.touch[0].x,
553 return; 558 data.touch[0].y);
554 } 559 min_x = std::min(min_x, static_cast<u16>(data.touch[0].x));
555 LOG_DEBUG(Input, "Current touch: {} {}", touchpad_0.x, touchpad_0.y); 560 min_y = std::min(min_y, static_cast<u16>(data.touch[0].y));
556 const u16 min_x = std::min(MAX_VALUE, static_cast<u16>(touchpad_0.x)); 561 if (current_status == Status::Ready) {
557 const u16 min_y = std::min(MAX_VALUE, static_cast<u16>(touchpad_0.y)); 562 // First touch - min data (min_x/min_y)
558 if (current_status == Status::Ready) { 563 current_status = Status::Stage1Completed;
559 // First touch - min data (min_x/min_y) 564 status_callback(current_status);
560 current_status = Status::Stage1Completed; 565 }
561 status_callback(current_status); 566 if (data.touch[0].x - min_x > CALIBRATION_THRESHOLD &&
562 } 567 data.touch[0].y - min_y > CALIBRATION_THRESHOLD) {
563 if (touchpad_0.x - min_x > CALIBRATION_THRESHOLD && 568 // Set the current position as max value and finishes
564 touchpad_0.y - min_y > CALIBRATION_THRESHOLD) { 569 // configuration
565 // Set the current position as max value and finishes configuration 570 max_x = data.touch[0].x;
566 const u16 max_x = touchpad_0.x; 571 max_y = data.touch[0].y;
567 const u16 max_y = touchpad_0.y; 572 current_status = Status::Completed;
568 current_status = Status::Completed; 573 data_callback(min_x, min_y, max_x, max_y);
569 data_callback(min_x, min_y, max_x, max_y); 574 status_callback(current_status);
570 status_callback(current_status); 575
571 576 complete_event.Set();
572 complete_event.Set(); 577 }
573 } 578 }};
574 }};
575 Socket socket{host, port, std::move(callback)}; 579 Socket socket{host, port, std::move(callback)};
576 std::thread worker_thread{SocketLoop, &socket}; 580 std::thread worker_thread{SocketLoop, &socket};
577 complete_event.Wait(); 581 complete_event.Wait();