diff --git a/glcd.h b/glcd.h index 5fc6aa9b..b9485812 100644 --- a/glcd.h +++ b/glcd.h @@ -4,8 +4,8 @@ #include // types #include -#define SCREEN_WIDTH 320 -#define SCREEN_HEIGHT 240 +#define SCREEN_WIDTH 240 +#define SCREEN_HEIGHT 320 #define PORTRAIT (lcdGetOrientation() == portrait || lcdGetOrientation() == portraitInv) #define LANDSCAPE (lcdGetOrientation() == landscape || lcdGetOrientation() == landscapeInv) diff --git a/touchpad.c b/touchpad.c index 26dec78f..0a15818d 100644 --- a/touchpad.c +++ b/touchpad.c @@ -52,7 +52,7 @@ uint8_t tpIRQ(void) { return (!palReadPad(TP_PORT, TP_IRQ)); } -static uint16_t tpReadRealX(void) { +uint16_t tpReadRealX(void) { uint32_t results = 0; uint16_t i, x; @@ -61,12 +61,12 @@ static uint16_t tpReadRealX(void) { results += readX(); } - x = (((lcdGetHeight()-1) * (results/CONVERSIONS)) / 2048); + x = (((SCREEN_WIDTH-1) * (results/CONVERSIONS)) / 2048); return x; } -static uint16_t tpReadRealY(void) { +uint16_t tpReadRealY(void) { uint32_t results = 0; uint16_t i, y; @@ -75,17 +75,45 @@ static uint16_t tpReadRealY(void) { results += readY(); } - y = (((lcdGetWidth()-1) * (results/CONVERSIONS)) / 2048); + y = (((SCREEN_HEIGHT-1) * (results/CONVERSIONS)) / 2048); return y; } uint16_t tpReadX(void) { - return cal.xm * tpReadRealX() + cal.xn; + uint16_t x, y; + + x = cal.xm * tpReadRealX() + cal.xn; + y = cal.ym * tpReadRealY() + cal.yn; + + switch(lcdGetOrientation()) { + case portrait: + return x; + case landscape: + return SCREEN_HEIGHT - y; + case portraitInv: + return SCREEN_WIDTH - x; + case landscapeInv: + return y; + } } uint16_t tpReadY(void) { - return cal.ym * tpReadRealY() + cal.yn; + uint16_t x, y; + + x = cal.xm * tpReadRealX() + cal.xn; + y = cal.ym * tpReadRealY() + cal.yn; + + switch(lcdGetOrientation()) { + case portrait: + return y; + case landscape: + return x; + case portraitInv: + return SCREEN_HEIGHT - y; + case landscapeInv: + return SCREEN_WIDTH - x; + } } void tpDrawCross(uint16_t x, uint16_t y) { @@ -112,6 +140,7 @@ void tpCalibrate(void) { uint16_t points[2][2]; uint8_t i; + lcdSetOrientation(portrait); lcdClear(Red); lcdDrawString(40, 10, "Touchpad Calibration", White, Red); diff --git a/touchpad.h b/touchpad.h index c9a686c6..fd2826b2 100644 --- a/touchpad.h +++ b/touchpad.h @@ -19,6 +19,8 @@ void tpInit(void); uint8_t tpIRQ(void); uint16_t tpReadX(void); uint16_t tpReadY(void); +uint16_t tpReadRealX(void); +uint16_t tpReadRealY(void); void tpCalibrate(void); void tpCalibrate2(void); void tpDrawCross(uint16_t x, uint16_t y);