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.

Reply via email to