diff options
| -rw-r--r-- | bsp/mini2440/touch.c | 48 |
1 files changed, 39 insertions, 9 deletions
diff --git a/bsp/mini2440/touch.c b/bsp/mini2440/touch.c index 444b7fbbf9..34a9566c26 100644 --- a/bsp/mini2440/touch.c +++ b/bsp/mini2440/touch.c @@ -68,8 +68,8 @@ #define X_MIN 74
#define X_MAX 934
-#define Y_MIN 89
-#define Y_MAX 920
+#define Y_MIN 920
+#define Y_MAX 89
struct s3c2410ts
{
@@ -129,8 +129,23 @@ static void report_touch_input(int updown) }
else
{
+ if (touch->max_x > touch->min_x)
+ {
touch->x = touch->width * (ts.xp-touch->min_x)/(touch->max_x-touch->min_x);
- touch->y = touch->height - (touch->height * (ts.yp-touch->min_y)/(touch->max_y-touch->min_y));
+ }
+ else
+ {
+ touch->x = touch->width * ( touch->min_x - ts.xp ) / (touch->min_x-touch->max_x);
+ }
+
+ if (touch->max_y > touch->min_y)
+ {
+ touch->y = touch->height * ( ts.yp - touch->min_y ) / (touch->max_y-touch->min_y);
+ }
+ else
+ {
+ touch->y = touch->height * ( touch->min_y - ts.yp ) / (touch->min_y-touch->max_y);
+ }
}
emouse.x = touch->x;
@@ -184,9 +199,24 @@ static void report_touch_input(int updown) touch->y = ts.yp;
}
else
- {
- touch->x = touch->width * (ts.xp-touch->min_x)/(touch->max_x-touch->min_x);
- touch->y = touch->height - (touch->height * (ts.yp-touch->min_y)/(touch->max_y-touch->min_y));
+ {
+ if (touch->max_x > touch->min_x)
+ {
+ touch->x = touch->width * ( ts.xp - touch->min_x ) / (touch->max_x-touch->min_x);
+ }
+ else
+ {
+ touch->x = touch->width * ( touch->min_x - ts.xp ) / (touch->min_x-touch->max_x);
+ }
+
+ if (touch->max_y > touch->min_y)
+ {
+ touch->y = touch->height * ( ts.yp - touch->min_y ) / (touch->max_y-touch->min_y);
+ }
+ else
+ {
+ touch->y = touch->height * ( touch->min_y - ts.yp ) / (touch->min_y-touch->max_y);
+ }
}
touch_event.x = touch->x;
@@ -391,8 +421,8 @@ static rt_err_t rtgui_touch_control (rt_device_t dev, rt_uint8_t cmd, void *args /* update */
touch->min_x = data->min_x;
touch->max_x = data->max_x;
- touch->min_y = data->max_y;
- touch->max_y = data->min_y;
+ touch->min_y = data->min_y;
+ touch->max_y = data->max_y;
/*
rt_kprintf("min_x = %d, max_x = %d, min_y = %d, max_y = %d\n",
@@ -428,7 +458,7 @@ void rtgui_touch_hw_init(void) touch->min_x = X_MIN;
touch->max_x = X_MAX;
touch->min_y = Y_MIN;
- touch->max_y = X_MAX;
+ touch->max_y = Y_MAX;
touch->eventpost_func = RT_NULL;
touch->eventpost_param = RT_NULL;
|
