summaryrefslogtreecommitdiff
path: root/firmware/target/arm/olympus/mrobe-500/button-mr500.c
diff options
context:
space:
mode:
authorJonathan Gordon <rockbox@jdgordon.info>2007-09-20 08:42:06 +0000
committerJonathan Gordon <rockbox@jdgordon.info>2007-09-20 08:42:06 +0000
commit376429dc9d60701604dcead5b19af5c8bdc4054f (patch)
tree64db9234cf6a95f8d47c35dcdaa34a70a30da284 /firmware/target/arm/olympus/mrobe-500/button-mr500.c
parent6c9cbfb8035f66aa8370025722e3429cb091b9ca (diff)
downloadrockbox-376429dc9d60701604dcead5b19af5c8bdc4054f.tar.gz
rockbox-376429dc9d60701604dcead5b19af5c8bdc4054f.zip
mr-500 button driver
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@14766 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target/arm/olympus/mrobe-500/button-mr500.c')
-rw-r--r--firmware/target/arm/olympus/mrobe-500/button-mr500.c65
1 files changed, 50 insertions, 15 deletions
diff --git a/firmware/target/arm/olympus/mrobe-500/button-mr500.c b/firmware/target/arm/olympus/mrobe-500/button-mr500.c
index 9cafab5c14..388dbf0689 100644
--- a/firmware/target/arm/olympus/mrobe-500/button-mr500.c
+++ b/firmware/target/arm/olympus/mrobe-500/button-mr500.c
@@ -27,22 +27,11 @@
27#include "system.h" 27#include "system.h"
28#include "backlight-target.h" 28#include "backlight-target.h"
29 29
30static int const remote_buttons[] = 30#define BUTTON_TIMEOUT 50
31{
32 BUTTON_NONE, /* Headphones connected - remote disconnected */
33 BUTTON_RC_PLAY,
34 BUTTON_RC_DSP,
35 BUTTON_RC_REW,
36 BUTTON_RC_FF,
37 BUTTON_RC_VOL_UP,
38 BUTTON_RC_VOL_DOWN,
39 BUTTON_NONE, /* Remote control attached - no buttons pressed */
40 BUTTON_NONE, /* Nothing in the headphone socket */
41};
42
43void button_init_device(void) 31void button_init_device(void)
44{ 32{
45 /* Power, Remote Play & Hold switch */ 33 /* GIO is the power button, set as input */
34 outw(inw(IO_GIO_DIR0)|0x01, IO_GIO_DIR0);
46} 35}
47 36
48inline bool button_hold(void) 37inline bool button_hold(void)
@@ -52,5 +41,51 @@ inline bool button_hold(void)
52 41
53int button_read_device(void) 42int button_read_device(void)
54{ 43{
55 return 0; 44 char data[5], c;
45 int i = 0;
46 int btn = BUTTON_NONE, timeout = BUTTON_TIMEOUT;
47
48 if ((inw(IO_GIO_BITSET0)&0x01) == 0)
49 btn |= BUTTON_POWER;
50
51 uartHeartbeat();
52 while (timeout > 0)
53 {
54 c = uartPollch(BUTTON_TIMEOUT*100);
55 if (c > -1)
56 {
57 if (i && data[0] == 0xf4)
58 {
59 data[i++] = c;
60 }
61 else if (c == 0xf4)
62 {
63 data[0] = c;
64 i = 1;
65 }
66
67 if (i == 5)
68 {
69 if (data[1]& (1<<7))
70 btn |= BUTTON_RC_HEART;
71 if (data[1]& (1<<6))
72 btn |= BUTTON_RC_MODE;
73 if (data[1]& (1<<5))
74 btn |= BUTTON_RC_VOL_DOWN;
75 if (data[1]& (1<<4))
76 btn |= BUTTON_RC_VOL_UP;
77 if (data[1]& (1<<3))
78 btn |= BUTTON_RC_REW;
79 if (data[1]& (1<<2))
80 btn |= BUTTON_RC_FF;
81 if (data[1]& (1<<1))
82 btn |= BUTTON_RC_DOWN;
83 if (data[1]& (1<<0))
84 btn |= BUTTON_RC_PLAY;
85 break;
86 }
87 }
88 timeout--;
89 }
90 return btn;
56} 91}