|
@@ -536,42 +536,46 @@ CalibrationConfigurationJob::CalibrationConfigurationJob(
|
|
|
std::function<void(u16, u16, u16, u16)> data_callback) {
|
|
std::function<void(u16, u16, u16, u16)> data_callback) {
|
|
|
|
|
|
|
|
std::thread([=, this] {
|
|
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};
|
|
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)};
|
|
Socket socket{host, port, std::move(callback)};
|
|
|
std::thread worker_thread{SocketLoop, &socket};
|
|
std::thread worker_thread{SocketLoop, &socket};
|
|
|
complete_event.Wait();
|
|
complete_event.Wait();
|