diff options
author | Tectu <joel@unormal.org> | 2012-10-07 13:24:57 -0700 |
---|---|---|
committer | Tectu <joel@unormal.org> | 2012-10-07 13:24:57 -0700 |
commit | 2ec39c7dbbfa9ce01c517a6204d85a0357a4e66f (patch) | |
tree | 118d6b9cbd152c83281561cabe528d8e2603cc8d /src/touchpad.c | |
parent | effb1db68dfd17d18018fa81e24b72f17ac3c52f (diff) | |
parent | 424dde2d8cec1429ec3b565e80ff2ae749fad954 (diff) | |
download | uGFX-2ec39c7dbbfa9ce01c517a6204d85a0357a4e66f.tar.gz uGFX-2ec39c7dbbfa9ce01c517a6204d85a0357a4e66f.tar.bz2 uGFX-2ec39c7dbbfa9ce01c517a6204d85a0357a4e66f.zip |
Merge pull request #5 from mobyfab/master
Inverted touchpad support
Diffstat (limited to 'src/touchpad.c')
-rw-r--r-- | src/touchpad.c | 36 |
1 files changed, 21 insertions, 15 deletions
diff --git a/src/touchpad.c b/src/touchpad.c index bead82bc..b55823dc 100644 --- a/src/touchpad.c +++ b/src/touchpad.c @@ -149,10 +149,13 @@ void tpInit(const TOUCHPADDriver *tp) { */ uint16_t tpReadX(void) { uint16_t x, y; - +#if defined(TOUCHPAD_XY_INVERTED) && (TOUCHPAD_XY_INVERTED == TRUE) + x = cal.xm * _tpReadRealY() + cal.xn; + y = cal.ym * _tpReadRealX() + cal.yn; +#else x = cal.xm * _tpReadRealX() + cal.xn; y = cal.ym * _tpReadRealY() + cal.yn; - +#endif switch(gdispGetOrientation()) { case GDISP_ROTATE_0: return x; @@ -176,10 +179,13 @@ uint16_t tpReadX(void) { */ uint16_t tpReadY(void) { uint16_t x, y; - +#if defined(TOUCHPAD_XY_INVERTED) && (TOUCHPAD_XY_INVERTED == TRUE) + x = cal.xm * _tpReadRealY() + cal.xn; + y = cal.ym * _tpReadRealX() + cal.yn; +#else x = cal.xm * _tpReadRealX() + cal.xn; y = cal.ym * _tpReadRealY() + cal.yn; - +#endif switch(gdispGetOrientation()) { case GDISP_ROTATE_0: return y; @@ -204,21 +210,21 @@ void tpCalibrate(void) { gdispClear(Red); gdispFillStringBox(0, 10, gdispGetWidth(), 30, "Calibration", &fontUI2Double, White, Red, justifyCenter); - for(i = 0; i < 2; i++) { - _tpDrawCross(cross[i][0], cross[i][1]); - while(!tpIRQ()); - points[i][0] = _tpReadRealX(); - points[i][1] = _tpReadRealY(); + for(i = 0; i < 2; i++) { + _tpDrawCross(cross[i][0], cross[i][1]); + while(!tpIRQ()); + points[i][0] = _tpReadRealX(); + points[i][1] = _tpReadRealY(); chThdSleepMilliseconds(100); - while(tpIRQ()); - gdispFillArea(cross[i][0]-15, cross[i][1]-15, 42, 42, Red); + while(tpIRQ()); + gdispFillArea(cross[i][0]-15, cross[i][1]-15, 42, 42, Red); } - cal.xm = ((float)cross[1][0] - (float)cross[0][0]) / ((float)points[1][0] - (float)points[0][0]); - cal.ym = ((float)cross[1][1] - (float)cross[0][1]) / ((float)points[1][1] - (float)points[0][1]); + cal.xm = ((float)cross[1][0] - (float)cross[0][0]) / ((float)points[1][0] - (float)points[0][0]); + cal.ym = ((float)cross[1][1] - (float)cross[0][1]) / ((float)points[1][1] - (float)points[0][1]); - cal.xn = (float)cross[0][0] - cal.xm * (float)points[0][0]; - cal.yn = (float)cross[0][1] - cal.ym * (float)points[0][1]; + cal.xn = (float)cross[0][0] - cal.xm * (float)points[0][0]; + cal.yn = (float)cross[0][1] - cal.ym * (float)points[0][1]; #if TOUCHPAD_STORE_CALIBRATION lld_tpWriteCalibration(cal); |