summaryrefslogtreecommitdiff
path: root/firmware/target/arm/tcc780x/cowond2/button-cowond2.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm/tcc780x/cowond2/button-cowond2.c')
-rw-r--r--firmware/target/arm/tcc780x/cowond2/button-cowond2.c67
1 files changed, 67 insertions, 0 deletions
diff --git a/firmware/target/arm/tcc780x/cowond2/button-cowond2.c b/firmware/target/arm/tcc780x/cowond2/button-cowond2.c
new file mode 100644
index 0000000000..dccdf4e8e0
--- /dev/null
+++ b/firmware/target/arm/tcc780x/cowond2/button-cowond2.c
@@ -0,0 +1,67 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
9 *
10 * Copyright (C) 2008 by Rob Purchase
11 *
12 * All files in this archive are subject to the GNU General Public License.
13 * See the file COPYING in the source tree root for full license agreement.
14 *
15 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
16 * KIND, either express or implied.
17 *
18 ****************************************************************************/
19
20#include "config.h"
21#include "cpu.h"
22#include "button.h"
23#include "adc.h"
24
25void button_init_device(void)
26{
27 /* Nothing to do */
28}
29
30int button_read_device(void)
31{
32 int btn = BUTTON_NONE;
33 int adc;
34
35 if (GPIOB & 0x4)
36 {
37 adc = adc_read(ADC_BUTTONS);
38
39 /* The following contains some abitrary, but working, guesswork */
40 if (adc < 0x038) {
41 btn |= (BUTTON_MINUS | BUTTON_PLUS | BUTTON_MENU);
42 } else if (adc < 0x048) {
43 btn |= (BUTTON_MINUS | BUTTON_PLUS);
44 } else if (adc < 0x058) {
45 btn |= (BUTTON_PLUS | BUTTON_MENU);
46 } else if (adc < 0x070) {
47 btn |= BUTTON_PLUS;
48 } else if (adc < 0x090) {
49 btn |= (BUTTON_MINUS | BUTTON_MENU);
50 } else if (adc < 0x150) {
51 btn |= BUTTON_MINUS;
52 } else if (adc < 0x200) {
53 btn |= BUTTON_MENU;
54 }
55 }
56
57 /* TODO: Read 'fake' buttons based on touchscreen quadrants.
58 Question: How can I read from the PCF chip (I2C) in a tick task? */
59
60 if (!(GPIOA & 0x8))
61 btn |= BUTTON_HOLD;
62
63 if (!(GPIOA & 0x4))
64 btn |= BUTTON_POWER;
65
66 return btn;
67}