touchpad does now work in all four modes

This commit is contained in:
Tectu 2012-06-07 01:08:12 +02:00
parent 8d22c27257
commit 8cafee2c32
3 changed files with 39 additions and 8 deletions

4
glcd.h
View file

@ -4,8 +4,8 @@
#include <ch.h> // types #include <ch.h> // types
#include <hal.h> #include <hal.h>
#define SCREEN_WIDTH 320 #define SCREEN_WIDTH 240
#define SCREEN_HEIGHT 240 #define SCREEN_HEIGHT 320
#define PORTRAIT (lcdGetOrientation() == portrait || lcdGetOrientation() == portraitInv) #define PORTRAIT (lcdGetOrientation() == portrait || lcdGetOrientation() == portraitInv)
#define LANDSCAPE (lcdGetOrientation() == landscape || lcdGetOrientation() == landscapeInv) #define LANDSCAPE (lcdGetOrientation() == landscape || lcdGetOrientation() == landscapeInv)

View file

@ -52,7 +52,7 @@ uint8_t tpIRQ(void) {
return (!palReadPad(TP_PORT, TP_IRQ)); return (!palReadPad(TP_PORT, TP_IRQ));
} }
static uint16_t tpReadRealX(void) { uint16_t tpReadRealX(void) {
uint32_t results = 0; uint32_t results = 0;
uint16_t i, x; uint16_t i, x;
@ -61,12 +61,12 @@ static uint16_t tpReadRealX(void) {
results += readX(); results += readX();
} }
x = (((lcdGetHeight()-1) * (results/CONVERSIONS)) / 2048); x = (((SCREEN_WIDTH-1) * (results/CONVERSIONS)) / 2048);
return x; return x;
} }
static uint16_t tpReadRealY(void) { uint16_t tpReadRealY(void) {
uint32_t results = 0; uint32_t results = 0;
uint16_t i, y; uint16_t i, y;
@ -75,17 +75,45 @@ static uint16_t tpReadRealY(void) {
results += readY(); results += readY();
} }
y = (((lcdGetWidth()-1) * (results/CONVERSIONS)) / 2048); y = (((SCREEN_HEIGHT-1) * (results/CONVERSIONS)) / 2048);
return y; return y;
} }
uint16_t tpReadX(void) { 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) { 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) { void tpDrawCross(uint16_t x, uint16_t y) {
@ -112,6 +140,7 @@ void tpCalibrate(void) {
uint16_t points[2][2]; uint16_t points[2][2];
uint8_t i; uint8_t i;
lcdSetOrientation(portrait);
lcdClear(Red); lcdClear(Red);
lcdDrawString(40, 10, "Touchpad Calibration", White, Red); lcdDrawString(40, 10, "Touchpad Calibration", White, Red);

View file

@ -19,6 +19,8 @@ void tpInit(void);
uint8_t tpIRQ(void); uint8_t tpIRQ(void);
uint16_t tpReadX(void); uint16_t tpReadX(void);
uint16_t tpReadY(void); uint16_t tpReadY(void);
uint16_t tpReadRealX(void);
uint16_t tpReadRealY(void);
void tpCalibrate(void); void tpCalibrate(void);
void tpCalibrate2(void); void tpCalibrate2(void);
void tpDrawCross(uint16_t x, uint16_t y); void tpDrawCross(uint16_t x, uint16_t y);