diff options
author | Jonathan Gordon <rockbox@jdgordon.info> | 2007-09-20 08:42:06 +0000 |
---|---|---|
committer | Jonathan Gordon <rockbox@jdgordon.info> | 2007-09-20 08:42:06 +0000 |
commit | 376429dc9d60701604dcead5b19af5c8bdc4054f (patch) | |
tree | 64db9234cf6a95f8d47c35dcdaa34a70a30da284 /firmware/target/arm/olympus/mrobe-500/button-mr500.c | |
parent | 6c9cbfb8035f66aa8370025722e3429cb091b9ca (diff) | |
download | rockbox-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.c | 65 |
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 | ||
30 | static 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 | |||
43 | void button_init_device(void) | 31 | void 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 | ||
48 | inline bool button_hold(void) | 37 | inline bool button_hold(void) |
@@ -52,5 +41,51 @@ inline bool button_hold(void) | |||
52 | 41 | ||
53 | int button_read_device(void) | 42 | int 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 | } |