|
|
|
@ -471,46 +471,42 @@ 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) { |
|
|
|
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(); |
|
|
|
} |
|
|
|
}}; |
|
|
|
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(); |
|
|
|
} |
|
|
|
}}; |
|
|
|
Socket socket{host, port, std::move(callback)}; |
|
|
|
std::thread worker_thread{SocketLoop, &socket}; |
|
|
|
complete_event.Wait(); |
|
|
|
|