diff options
Diffstat (limited to 'firmware/target/arm/philips/hdd1630/button-hdd1630.c')
-rwxr-xr-x | firmware/target/arm/philips/hdd1630/button-hdd1630.c | 89 |
1 files changed, 25 insertions, 64 deletions
diff --git a/firmware/target/arm/philips/hdd1630/button-hdd1630.c b/firmware/target/arm/philips/hdd1630/button-hdd1630.c index e8214edf91..d45944ef10 100755 --- a/firmware/target/arm/philips/hdd1630/button-hdd1630.c +++ b/firmware/target/arm/philips/hdd1630/button-hdd1630.c | |||
@@ -27,10 +27,6 @@ | |||
27 | #define LOGF_ENABLE | 27 | #define LOGF_ENABLE |
28 | #include "logf.h" | 28 | #include "logf.h" |
29 | 29 | ||
30 | #define MEP_BUTTON_HEADER 0x19 | ||
31 | #define MEP_BUTTON_ID 0x9 | ||
32 | #define MEP_ABSOLUTE_HEADER 0x0b | ||
33 | |||
34 | static int int_btn = BUTTON_NONE; | 30 | static int int_btn = BUTTON_NONE; |
35 | 31 | ||
36 | /* | 32 | /* |
@@ -48,10 +44,8 @@ void button_click(void) | |||
48 | #ifndef BOOTLOADER | 44 | #ifndef BOOTLOADER |
49 | void button_init_device(void) | 45 | void button_init_device(void) |
50 | { | 46 | { |
51 | if (!syn_get_status()) | 47 | /* The touchpad is powered on and initialized in power-hdd1630.c |
52 | { | 48 | since it needs to be ready for both buttons and button lights. */ |
53 | logf("button_init_dev: touchpad not ready"); | ||
54 | } | ||
55 | } | 49 | } |
56 | 50 | ||
57 | /* | 51 | /* |
@@ -59,66 +53,33 @@ void button_init_device(void) | |||
59 | */ | 53 | */ |
60 | void button_int(void) | 54 | void button_int(void) |
61 | { | 55 | { |
62 | int data[4]; | 56 | char data[4]; |
63 | int val, id; | 57 | int val; |
64 | 58 | ||
65 | int_btn = BUTTON_NONE; | 59 | int_btn = BUTTON_NONE; |
66 | 60 | ||
67 | if (syn_get_status()) | 61 | val = touchpad_read_device(data, 4); |
62 | |||
63 | if (val == MEP_BUTTON_HEADER) | ||
64 | { | ||
65 | /* Buttons packet */ | ||
66 | if (data[1] & 0x1) | ||
67 | int_btn |= BUTTON_LEFT; | ||
68 | if (data[1] & 0x2) | ||
69 | int_btn |= BUTTON_RIGHT; | ||
70 | } | ||
71 | else if (val == MEP_ABSOLUTE_HEADER) | ||
68 | { | 72 | { |
69 | /* disable interrupt while we read the touchpad */ | 73 | /* Absolute packet - the finger is on the vertical strip. |
70 | syn_int_enable(false); | 74 | Position ranges from 1-4095, with 1 at the bottom. */ |
71 | 75 | val = ((data[1] >> 4) << 8) | data[2]; /* position */ | |
72 | val = syn_read(data, 4); | 76 | |
73 | if (val > 0) | 77 | if ((val > 0) && (val <= 1365)) |
74 | { | 78 | int_btn |= BUTTON_DOWN; |
75 | val = data[0] & 0xff; /* packet header */ | 79 | else if ((val > 1365) && (val <= 2730)) |
76 | id = (data[1] >> 4) & 0xf; /* packet id */ | 80 | int_btn |= BUTTON_SELECT; |
77 | 81 | else if ((val > 2730) && (val <= 4095)) | |
78 | logf("syn_read:"); | 82 | int_btn |= BUTTON_UP; |
79 | logf(" data[0] = 0x%08x", data[0]); | ||
80 | logf(" data[1] = 0x%08x", data[1]); | ||
81 | logf(" data[2] = 0x%08x", data[2]); | ||
82 | logf(" data[3] = 0x%08x", data[3]); | ||
83 | |||
84 | if ((val == MEP_BUTTON_HEADER) && (id == MEP_BUTTON_ID)) | ||
85 | { | ||
86 | /* Buttons packet */ | ||
87 | if (data[1] & 0x1) | ||
88 | int_btn |= BUTTON_LEFT; | ||
89 | if (data[1] & 0x2) | ||
90 | int_btn |= BUTTON_RIGHT; | ||
91 | |||
92 | /* An Absolute packet should follow which we ignore */ | ||
93 | val = syn_read(data, 4); | ||
94 | logf(" int_btn = 0x%04x", int_btn); | ||
95 | } | ||
96 | else if (val == MEP_ABSOLUTE_HEADER) | ||
97 | { | ||
98 | /* Absolute packet - the finger is on the vertical strip. | ||
99 | Position ranges from 1-4095, with 1 at the bottom. */ | ||
100 | val = ((data[1] >> 4) << 8) | data[2]; /* position */ | ||
101 | |||
102 | logf(" pos %d", val); | ||
103 | logf(" z %d", data[3]); | ||
104 | logf(" finger %d", data[1] & 0x1); | ||
105 | logf(" gesture %d", data[1] & 0x2); | ||
106 | logf(" RelPosVld %d", data[1] & 0x4); | ||
107 | |||
108 | if(data[1] & 0x1) /* if finger on touch strip */ | ||
109 | { | ||
110 | if ((val > 0) && (val <= 1365)) | ||
111 | int_btn |= BUTTON_DOWN; | ||
112 | else if ((val > 1365) && (val <= 2730)) | ||
113 | int_btn |= BUTTON_SELECT; | ||
114 | else if ((val > 2730) && (val <= 4095)) | ||
115 | int_btn |= BUTTON_UP; | ||
116 | } | ||
117 | } | ||
118 | } | ||
119 | |||
120 | /* re-enable interrupts */ | ||
121 | syn_int_enable(true); | ||
122 | } | 83 | } |
123 | } | 84 | } |
124 | #else | 85 | #else |