diff options
Diffstat (limited to 'firmware/target/arm/tms320dm320/mrobe-500/button-mr500.c')
-rw-r--r-- | firmware/target/arm/tms320dm320/mrobe-500/button-mr500.c | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/firmware/target/arm/tms320dm320/mrobe-500/button-mr500.c b/firmware/target/arm/tms320dm320/mrobe-500/button-mr500.c index 0eb1c07e74..d1fd2eb702 100644 --- a/firmware/target/arm/tms320dm320/mrobe-500/button-mr500.c +++ b/firmware/target/arm/tms320dm320/mrobe-500/button-mr500.c | |||
@@ -40,6 +40,22 @@ | |||
40 | static short last_x, last_y, last_z1, last_z2; /* for the touch screen */ | 40 | static short last_x, last_y, last_z1, last_z2; /* for the touch screen */ |
41 | static bool touch_available = false; | 41 | static bool touch_available = false; |
42 | 42 | ||
43 | static enum touchpad_mode current_mode = TOUCHPAD_POINT; | ||
44 | static int touchpad_buttons[3][3] = { | ||
45 | {BUTTON_TOPLEFT, BUTTON_TOPMIDDLE, BUTTON_TOPRIGHT}, | ||
46 | {BUTTON_MIDLEFT, BUTTON_CENTER, BUTTON_MIDRIGHT}, | ||
47 | {BUTTON_BOTTOMLEFT, BUTTON_BOTTOMMIDDLE, BUTTON_BOTTOMRIGHT}, | ||
48 | }; | ||
49 | |||
50 | void touchpad_set_mode(enum touchpad_mode mode) | ||
51 | { | ||
52 | current_mode = mode; | ||
53 | } | ||
54 | enum touchpad_mode touchpad_get_mode(void) | ||
55 | { | ||
56 | return current_mode; | ||
57 | } | ||
58 | |||
43 | static struct touch_calibration_point topleft, bottomright; | 59 | static struct touch_calibration_point topleft, bottomright; |
44 | 60 | ||
45 | /* Jd's tests.. These will hopefully work for everyone so we dont have to | 61 | /* Jd's tests.. These will hopefully work for everyone so we dont have to |
@@ -165,7 +181,19 @@ int button_read_device(int *data) | |||
165 | last_x = x; | 181 | last_x = x; |
166 | last_y = y; | 182 | last_y = y; |
167 | *data = touch_to_pixels(x, y); | 183 | *data = touch_to_pixels(x, y); |
168 | r_button |= BUTTON_TOUCHPAD; | 184 | switch (current_mode) |
185 | { | ||
186 | case TOUCHPAD_POINT: | ||
187 | r_button |= BUTTON_TOUCHPAD; | ||
188 | break; | ||
189 | case TOUCHPAD_BUTTON: | ||
190 | { | ||
191 | int px_x = ((*data&0xffff0000)>>16), px_y = ((*data&0x0000ffff)); | ||
192 | r_button |= touchpad_buttons[px_y/(LCD_HEIGHT/3)][px_x/(LCD_WIDTH/3)]; | ||
193 | oldbutton = r_button; | ||
194 | break; | ||
195 | } | ||
196 | } | ||
169 | } | 197 | } |
170 | last_touch = current_tick; | 198 | last_touch = current_tick; |
171 | touch_available = false; | 199 | touch_available = false; |
@@ -219,6 +247,6 @@ void GIO14(void) | |||
219 | read_battery_inputs(); | 247 | read_battery_inputs(); |
220 | break; | 248 | break; |
221 | } | 249 | } |
222 | touch_available = true; | 250 | //touch_available = true; |
223 | IO_INTC_IRQ2 = (1<<3); /* IRQ_GIO14 == 35 */ | 251 | IO_INTC_IRQ2 = (1<<3); /* IRQ_GIO14 == 35 */ |
224 | } | 252 | } |