summaryrefslogtreecommitdiff
path: root/NxWidgets/nxwm/src/ccalibration.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'NxWidgets/nxwm/src/ccalibration.cxx')
-rw-r--r--NxWidgets/nxwm/src/ccalibration.cxx68
1 files changed, 68 insertions, 0 deletions
diff --git a/NxWidgets/nxwm/src/ccalibration.cxx b/NxWidgets/nxwm/src/ccalibration.cxx
index 416f15883..01bdf3b44 100644
--- a/NxWidgets/nxwm/src/ccalibration.cxx
+++ b/NxWidgets/nxwm/src/ccalibration.cxx
@@ -1128,6 +1128,72 @@ bool CCalibration::createCalibrationData(struct SCalibrationData &data)
return false;
}
+#ifdef CONFIG_NXWM_CALIBRATION_ANISOTROPIC
+ // X lines:
+ //
+ // x2 = slope*y1 + offset
+ //
+ // slope = (bottomY - topY) / (bottomX - topX)
+ // offset = (topY - topX * slope)
+
+ float topX = (float)m_calibData[CALIB_UPPER_LEFT_INDEX].x;
+ float bottomX = (float)m_calibData[CALIB_LOWER_LEFT_INDEX].x;
+
+ float topY = (float)m_calibData[CALIB_UPPER_LEFT_INDEX].y;
+ float bottomY = (float)m_calibData[CALIB_LOWER_LEFT_INDEX].y;
+
+ data.left.slope = (bottomX - topX) / (bottomY - topY);
+ data.left.offset = topX - topY * data.left.slope;
+
+ gdbg("Left slope: %f offset: %f\n", data.left.slope, data.left.offset);
+
+ topX = (float)m_calibData[CALIB_UPPER_RIGHT_INDEX].x;
+ bottomX = (float)m_calibData[CALIB_LOWER_RIGHT_INDEX].x;
+
+ topY = (float)m_calibData[CALIB_UPPER_RIGHT_INDEX].y;
+ bottomY = (float)m_calibData[CALIB_LOWER_RIGHT_INDEX].y;
+
+ data.right.slope = (bottomX - topX) / (bottomY - topY);
+ data.right.offset = topX - topY * data.right.slope;
+
+ gdbg("Right slope: %f offset: %f\n", data.right.slope, data.right.offset);
+
+ // Y lines:
+ //
+ // y2 = slope*x1 + offset
+ //
+ // slope = (rightX - topX) / (rightY - leftY)
+ // offset = (topX - leftY * slope)
+
+ float leftX = (float)m_calibData[CALIB_UPPER_LEFT_INDEX].x;
+ float rightX = (float)m_calibData[CALIB_UPPER_RIGHT_INDEX].x;
+
+ float leftY = (float)m_calibData[CALIB_UPPER_LEFT_INDEX].y;
+ float rightY = (float)m_calibData[CALIB_UPPER_RIGHT_INDEX].y;
+
+ data.top.slope = (rightY - leftY) / (rightX - leftX);
+ data.top.offset = leftY - leftX * data.top.slope;
+
+ gdbg("Top slope: %f offset: %f\n", data.top.slope, data.top.offset);
+
+ leftX = (float)m_calibData[CALIB_LOWER_LEFT_INDEX].x;
+ rightX = (float)m_calibData[CALIB_LOWER_RIGHT_INDEX].x;
+
+ leftY = (float)m_calibData[CALIB_LOWER_LEFT_INDEX].y;
+ rightY = (float)m_calibData[CALIB_LOWER_RIGHT_INDEX].y;
+
+ data.bottom.slope = (rightY - leftY) / (rightX - leftX);
+ data.bottom.offset = leftY - leftX * data.bottom.slope;
+
+ gdbg("Bottom slope: %f offset: %f\n", data.bottom.slope, data.bottom.offset);
+
+ // Save also the calibration screen positions
+
+ data.leftX = CALIBRATION_LEFTX;
+ data.rightX = CALIBRATION_RIGHTX;
+ data.topY = CALIBRATION_TOPY;
+ data.bottomY = CALIBRATION_BOTTOMY;
+#else
// Calculate the calibration parameters
//
// (scaledX - LEFTX) / (rawX - leftX) = (RIGHTX - LEFTX) / (rightX - leftX)
@@ -1169,6 +1235,8 @@ bool CCalibration::createCalibrationData(struct SCalibrationData &data)
data.yOffset = itob16(CALIBRATION_TOPY) - b16mulb16(topY, data.ySlope);
gdbg("New ySlope: %08x yOffset: %08x\n", data.ySlope, data.yOffset);
+#endif
+
return true;
}