summaryrefslogtreecommitdiff
path: root/firmware
diff options
context:
space:
mode:
Diffstat (limited to 'firmware')
-rw-r--r--firmware/export/button.h19
-rw-r--r--firmware/export/config-cowond2.h1
-rw-r--r--firmware/target/arm/tcc780x/cowond2/button-target.h23
-rw-r--r--firmware/target/arm/tms320dm320/mrobe-500/button-mr500.c32
-rw-r--r--firmware/target/arm/tms320dm320/mrobe-500/button-target.h20
5 files changed, 85 insertions, 10 deletions
diff --git a/firmware/export/button.h b/firmware/export/button.h
index 95da7adc42..6decf6ec69 100644
--- a/firmware/export/button.h
+++ b/firmware/export/button.h
@@ -64,4 +64,23 @@ int button_apply_acceleration(const unsigned int data);
64#define BUTTON_REPEAT 0x04000000 64#define BUTTON_REPEAT 0x04000000
65#define BUTTON_TOUCHPAD 0x08000000 65#define BUTTON_TOUCHPAD 0x08000000
66 66
67#ifdef HAVE_TOUCHPAD
68#if !defined(BUTTON_TOPLEFT) || !defined(BUTTON_TOPMIDDLE) \
69 || !defined(BUTTON_TOPRIGHT) || !defined(BUTTON_MIDLEFT) \
70 || !defined(BUTTON_CENTER) || !defined(BUTTON_MIDRIGHT) \
71 || !defined(BUTTON_BOTTOMLEFT) || !defined(BUTTON_BOTTOMMIDDLE) \
72 || !defined(BUTTON_BOTTOMRIGHT)
73#error Touchpad button mode BUTTON_* defines not set up correctly
74#endif
75enum touchpad_mode {
76 TOUCHPAD_POINT = 0, /* touchpad returns pixel co-ords */
77 TOUCHPAD_BUTTON, /* touchpad returns BUTTON_* area codes
78 actual pixel value will still be accessable
79 from button_get_data */
80};
81/* maybe define the number of buttons in button-target.h ? */
82void touchpad_set_mode(enum touchpad_mode mode);
83enum touchpad_mode touchpad_get_mode(void);
84#endif
85
67#endif /* _BUTTON_H_ */ 86#endif /* _BUTTON_H_ */
diff --git a/firmware/export/config-cowond2.h b/firmware/export/config-cowond2.h
index 9380de57ef..d3b23b225d 100644
--- a/firmware/export/config-cowond2.h
+++ b/firmware/export/config-cowond2.h
@@ -56,6 +56,7 @@
56 56
57/* define this to indicate your device's keypad */ 57/* define this to indicate your device's keypad */
58#define CONFIG_KEYPAD COWOND2_PAD 58#define CONFIG_KEYPAD COWOND2_PAD
59#define HAVE_TOUCHPAD
59 60
60/* define this if you have a real-time clock */ 61/* define this if you have a real-time clock */
61//#define CONFIG_RTC RTC_TCC780X 62//#define CONFIG_RTC RTC_TCC780X
diff --git a/firmware/target/arm/tcc780x/cowond2/button-target.h b/firmware/target/arm/tcc780x/cowond2/button-target.h
index 3ccf70cffd..573ab03a11 100644
--- a/firmware/target/arm/tcc780x/cowond2/button-target.h
+++ b/firmware/target/arm/tcc780x/cowond2/button-target.h
@@ -35,14 +35,25 @@ int button_read_device(void);
35#define BUTTON_MINUS 0x00000004 35#define BUTTON_MINUS 0x00000004
36#define BUTTON_MENU 0x00000008 36#define BUTTON_MENU 0x00000008
37 37
38/* compatibility hacks
39 not mapped to the touchpad button areas because
40 the touchpad is not always in that mode */
41#define BUTTON_LEFT BUTTON_MINUS
42#define BUTTON_RIGHT BUTTON_PLUS
43
38/* Faked buttons based on touchscreen quadrants (not yet read) */ 44/* Faked buttons based on touchscreen quadrants (not yet read) */
39#define BUTTON_UP 0x00000020 45/* Touchpad Screen Area Buttons */
40#define BUTTON_DOWN 0x00000040 46#define BUTTON_TOPLEFT 0x00000010
41#define BUTTON_LEFT 0x00000080 47#define BUTTON_TOPMIDDLE 0x00000020
42#define BUTTON_RIGHT 0x00000100 48#define BUTTON_TOPRIGHT 0x00000040
43#define BUTTON_SELECT 0x00000200 49#define BUTTON_MIDLEFT 0x00000080
50#define BUTTON_CENTER 0x00000100
51#define BUTTON_MIDRIGHT 0x00000200
52#define BUTTON_BOTTOMLEFT 0x00000400
53#define BUTTON_BOTTOMMIDDLE 0x00000800
54#define BUTTON_BOTTOMRIGHT 0x00001000
44 55
45#define BUTTON_MAIN 0x3FF 56#define BUTTON_MAIN 0x1FFF
46 57
47/* No remote */ 58/* No remote */
48#define BUTTON_REMOTE 0 59#define BUTTON_REMOTE 0
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 @@
40static short last_x, last_y, last_z1, last_z2; /* for the touch screen */ 40static short last_x, last_y, last_z1, last_z2; /* for the touch screen */
41static bool touch_available = false; 41static bool touch_available = false;
42 42
43static enum touchpad_mode current_mode = TOUCHPAD_POINT;
44static 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
50void touchpad_set_mode(enum touchpad_mode mode)
51{
52 current_mode = mode;
53}
54enum touchpad_mode touchpad_get_mode(void)
55{
56 return current_mode;
57}
58
43static struct touch_calibration_point topleft, bottomright; 59static 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}
diff --git a/firmware/target/arm/tms320dm320/mrobe-500/button-target.h b/firmware/target/arm/tms320dm320/mrobe-500/button-target.h
index 1f17f3f3c8..ae23346814 100644
--- a/firmware/target/arm/tms320dm320/mrobe-500/button-target.h
+++ b/firmware/target/arm/tms320dm320/mrobe-500/button-target.h
@@ -53,14 +53,30 @@ void use_calibration(bool enable);
53 53
54#define BUTTON_TOUCH 0x00000200 54#define BUTTON_TOUCH 0x00000200
55 55
56/* compatibility hacks */ 56/* Touchpad Screen Area Buttons */
57#define BUTTON_TOPLEFT 0x00004000
58#define BUTTON_TOPMIDDLE 0x00008000
59#define BUTTON_TOPRIGHT 0x00010000
60#define BUTTON_MIDLEFT 0x00020000
61#define BUTTON_CENTER 0x00040000
62#define BUTTON_MIDRIGHT 0x00080000
63#define BUTTON_BOTTOMLEFT 0x00100000
64#define BUTTON_BOTTOMMIDDLE 0x00200000
65#define BUTTON_BOTTOMRIGHT 0x00400000
66
67/* compatibility hacks
68 not mapped to the touchpad button areas because
69 the touchpad is not always in that mode */
57#define BUTTON_LEFT BUTTON_RC_REW 70#define BUTTON_LEFT BUTTON_RC_REW
58#define BUTTON_RIGHT BUTTON_RC_FF 71#define BUTTON_RIGHT BUTTON_RC_FF
59 72
60#define POWEROFF_BUTTON BUTTON_POWER 73#define POWEROFF_BUTTON BUTTON_POWER
61#define POWEROFF_COUNT 10 74#define POWEROFF_COUNT 10
62 75
63#define BUTTON_MAIN BUTTON_POWER 76#define BUTTON_MAIN (BUTTON_POWER| \
77 BUTTON_TOPLEFT|BUTTON_TOPMIDDLE|BUTTON_TOPRIGHT \
78 BUTTON_MIDLEFT|BUTTON_CENTER|BUTTON_MIDRIGHT \
79 BUTTON_BOTTOMLEFT|BUTTON_BOTTOMMIDDLE|BUTTON_BOTTOMRIGHT)
64 80
65#define BUTTON_REMOTE (BUTTON_RC_HEART|BUTTON_RC_MODE| \ 81#define BUTTON_REMOTE (BUTTON_RC_HEART|BUTTON_RC_MODE| \
66 BUTTON_RC_VOL_DOWN|BUTTON_RC_VOL_UP| \ 82 BUTTON_RC_VOL_DOWN|BUTTON_RC_VOL_UP| \