aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--glcd.h4
-rw-r--r--touchpad.c41
-rw-r--r--touchpad.h2
3 files changed, 39 insertions, 8 deletions
diff --git a/glcd.h b/glcd.h
index 5fc6aa9b..b9485812 100644
--- a/glcd.h
+++ b/glcd.h
@@ -4,8 +4,8 @@
#include <ch.h> // types
#include <hal.h>
-#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);