thats good but how can i fore this code or running it ?? my android tablet get me depressed because of calibration problem... thanks
On Sunday, 22 May 2011 19:34:55 UTC-10, Gaurav Singh wrote: > > I have a resistive touchscreen with mechanical misalignments on my > board. The "5 point calibration method" solves errors caused by these > misalignments and converts Touchscreen controller data to actual > screen coordinates. A complete description of mechanical misalignments > and 5 point calibration method can be found at > http://focus.tij.co.jp/jp/lit/an/slyt277/slyt277.pdf. > > 5-point calibration method is part of the TSLIB touchscreen > calibration commonly used for our QT based devices. We can extend > Android's touchscreen Calibration parameters to include the 6 > parameters that are part of the /etc/pointercal file ( calculated when > we run ts_calibrate on TSLIB). Sample idc file below: > > # See output of /etc/pointercal file after running ts_calibrate on normal > Linux > # > # Before running ts_calibrate - > # export TSLIB_TSDEVICE=/dev/input/event1 > # export TSLIB_CALIBFILE=/etc/pointercal > # export TSLIB_CONFFILE=/etc/ts.conf > # export TSLIB_FBDEVICE=/dev/fb0 > # > # Pointercal file format - xscale, xymix, xoffset, yxmix, yscale, > yoffset, divider. > # Enter here the values after dividing xscale etc. with the divider. > # > > touch.5pointcalib.xscale = 0.199488 > touch.5pointcalib.xymix = -0.000325 > touch.5pointcalib.xoffset = -6.898865 > touch.5pointcalib.yxmix = -0.000795 > touch.5pointcalib.yscale = 0.124000 > touch.5pointcalib.yoffset = -8.484802 > > I patched the Android Input subsystem to include the 5 point > calibration method for generating actual screen coordinates. > Gingerbread currently uses simple scaling of touchscreen X and Y data > to CLCD screen X and Y coordinates. In frameworks/base made the > following changes : > > diff --git a/include/ui/InputReader.h b/include/ui/InputReader.h > index 49351b0..bb3ec5e 100644 > --- a/include/ui/InputReader.h > +++ b/include/ui/InputReader.h > @@ -589,6 +589,20 @@ protected: > > // Immutable calibration parameters in parsed form. > struct Calibration { > + // 5 point calibration algorithm coefficients > + bool havexscale; > + float xscale; > + bool havexymix; > + float xymix; > + bool havexoffset; > + float xoffset; > + bool haveyxmix; > + float yxmix; > + bool haveyscale; > + float yscale; > + bool haveyoffset; > + float yoffset; > + > // Touch Size > enum TouchSizeCalibration { > TOUCH_SIZE_CALIBRATION_DEFAULT, > diff --git a/libs/ui/InputReader.cpp b/libs/ui/InputReader.cpp > index 3197ab2..9345dca 100644 > --- a/libs/ui/InputReader.cpp > +++ b/libs/ui/InputReader.cpp > @@ -1682,6 +1682,20 @@ void TouchInputMapper::parseCalibration() { > const InputDeviceCalibration& in = getDevice()->getCalibration(); > Calibration& out = mCalibration; > > + out.havexscale = > in.tryGetProperty(String8("touch.5pointcalib.xscale"), > + out.xscale); > + out.havexymix = in.tryGetProperty(String8("touch.5pointcalib.xymix"), > + out.xymix); > + out.havexoffset = > in.tryGetProperty(String8("touch.5pointcalib.xoffset"), > + out.xoffset); > + out.haveyxmix = in.tryGetProperty(String8("touch.5pointcalib.yxmix"), > + out.yxmix); > + out.haveyscale = > in.tryGetProperty(String8("touch.5pointcalib.yscale"), > + out.yscale); > + out.haveyoffset = > in.tryGetProperty(String8("touch.5pointcalib.yoffset"), > + out.yoffset); > + > + > // Touch Size > out.touchSizeCalibration = > Calibration::TOUCH_SIZE_CALIBRATION_DEFAULT; > String8 touchSizeCalibrationString; > @@ -2294,10 +2308,47 @@ void TouchInputMapper::dispatchTouch(nsecs_t > when, uint32_t policyFlags, > uint32_t inIndex = touch->idToIndex[id]; > > const PointerData& in = touch->pointers[inIndex]; > + float x,y; > > // X and Y > - float x = float(in.x - mLocked.xOrigin) * mLocked.xScale; > - float y = float(in.y - mLocked.yOrigin) * mLocked.yScale; > + if ( mCalibration.havexscale && mCalibration.havexymix && > + mCalibration.havexoffset && > mCalibration.haveyxmix && > + mCalibration.haveyscale && > mCalibration.haveyoffset) { > + > + x = float(in.x - mLocked.xOrigin) * mLocked.xScale; > + y = float(in.y - mLocked.yOrigin) * mLocked.yScale; > + LOGI("x_orig = %f, y_orig = %f\n", x, y); > + float x_temp = float(in.x - mLocked.xOrigin); > + float y_temp = float(in.y - mLocked.yOrigin); > + > + //float xscale = 0.199488; > + //float xymix = -0.000325; > + //float xoffset = -6.898865; > + //float yxmix = -0.000795; > + //float yscale = 0.124000; > + //float yoffset = -8.484802; > + > + // 5 point Calibration coefficients - from tsc.idc > + float xscale = mCalibration.xscale; > + float xymix = mCalibration.xymix; > + float xoffset = mCalibration.xoffset; > + float yxmix = mCalibration.yxmix; > + float yscale = mCalibration.yscale; > + float yoffset = mCalibration.yoffset; > + > + float x_after_calib = (xscale * x_temp) + (xymix * y_temp) > + xoffset; > + float y_after_calib = (yxmix * x_temp) + (yscale * y_temp) > + yoffset; > + > + > + LOGI("x_after_calib = %f, y_after_calib = %f\n xscale = %f, > yoffset = %f\n", x_after_calib, y_after_calib, xscale, yoffset); > + x = x_after_calib; > + y = y_after_calib; > + > + } > + else { > + x = float(in.x - mLocked.xOrigin) * mLocked.xScale; > + y = float(in.y - mLocked.yOrigin) * mLocked.yScale; > + } > > // ToolMajor and ToolMinor > float toolMajor, toolMinor; > > Touchscreen soft-keyboard inputs were being mis-reported on my WVGA > screen and with the patch, keypresses are more accurate. > > Regards > > -- -- unsubscribe: android-porting+unsubscr...@googlegroups.com website: http://groups.google.com/group/android-porting --- You received this message because you are subscribed to the Google Groups "android-porting" group. To unsubscribe from this group and stop receiving emails from it, send an email to android-porting+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.