summaryrefslogtreecommitdiffstats
path: root/firmware/target/coldfire/iaudio/m5/button-m5.c
diff options
context:
space:
mode:
authorJens Arnold <amiconn@rockbox.org>2007-03-05 00:04:00 +0000
committerJens Arnold <amiconn@rockbox.org>2007-03-05 00:04:00 +0000
commit8876018d25c6a56cce118482c1372bbff344cb23 (patch)
treea66dca10bf92674c655b9862fd366ecc77bba76a /firmware/target/coldfire/iaudio/m5/button-m5.c
parentee07215d506def8d3483f4adf6e1d4ae51c10c52 (diff)
downloadrockbox-8876018d25c6a56cce118482c1372bbff344cb23.tar.gz
rockbox-8876018d25c6a56cce118482c1372bbff344cb23.zip
Bring up the M5 port to a working stage: Extended numerous explicit checks for IAUDIO_X5 to also check for IAUDIO_M5, moved code around the target tree, added preliminary background for the sim.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@12610 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target/coldfire/iaudio/m5/button-m5.c')
-rw-r--r--firmware/target/coldfire/iaudio/m5/button-m5.c151
1 files changed, 151 insertions, 0 deletions
diff --git a/firmware/target/coldfire/iaudio/m5/button-m5.c b/firmware/target/coldfire/iaudio/m5/button-m5.c
new file mode 100644
index 0000000000..a5fdd79fde
--- /dev/null
+++ b/firmware/target/coldfire/iaudio/m5/button-m5.c
@@ -0,0 +1,151 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2006 by Linus Nielsen Feltzing
+ *
+ * All files in this archive are subject to the GNU General Public License.
+ * See the file COPYING in the source tree root for full license agreement.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+#include "config.h"
+#include "system.h"
+#include "button.h"
+#include "backlight.h"
+#include "adc.h"
+#include "lcd-remote-target.h"
+
+/* have buttons scan by default */
+static bool button_scan_on = true;
+static bool hold_button = false;
+static bool remote_hold_button = false;
+
+void button_init_device(void)
+{
+ /* Power, Remote Play & Hold switch */
+ GPIO_FUNCTION |= 0x0e000000;
+ GPIO_ENABLE &= ~0x0e000000;
+}
+
+void button_enable_scan(bool enable)
+{
+ button_scan_on = enable;
+}
+
+bool button_scan_enabled(void)
+{
+ return button_scan_on;
+}
+
+bool button_hold(void)
+{
+ return (GPIO_READ & 0x08000000) == 0;
+}
+
+bool remote_button_hold(void)
+{
+ return remote_hold_button;
+}
+
+int button_read_device(void)
+{
+ int btn = BUTTON_NONE;
+ bool hold_button_old;
+ bool remote_hold_button_old;
+ int data;
+
+ /* normal buttons */
+ hold_button_old = hold_button;
+ hold_button = button_hold();
+
+#ifndef BOOTLOADER
+ /* give BL notice if HB state chaged */
+ if (hold_button != hold_button_old)
+ backlight_hold_changed(hold_button);
+#endif
+
+ if (button_scan_on && !hold_button)
+ {
+ data = adc_scan(ADC_BUTTONS);
+
+ if (data < 0xf0)
+ {
+ if(data < 0x7c)
+ if(data < 0x42)
+ btn = BUTTON_LEFT;
+ else
+ if(data < 0x62)
+ btn = BUTTON_RIGHT;
+ else
+ btn = BUTTON_SELECT;
+ else
+ if(data < 0xb6)
+ if(data < 0x98)
+ btn = BUTTON_PLAY;
+ else
+ btn = BUTTON_REC;
+ else
+ if(data < 0xd3)
+ btn = BUTTON_DOWN;
+ else
+ btn = BUTTON_UP;
+ }
+ }
+
+ /* remote buttons */
+ data = remote_detect() ? adc_scan(ADC_REMOTE) : 0xff;
+
+ remote_hold_button_old = remote_hold_button;
+ remote_hold_button = data < 0x17;
+
+#ifndef BOOTLOADER
+ if (remote_hold_button != remote_hold_button_old)
+ remote_backlight_hold_changed(remote_hold_button);
+#endif
+
+ if (!remote_hold_button)
+ {
+ if (data < 0xee)
+ {
+ if(data < 0x7a)
+ if(data < 0x41)
+ btn |= BUTTON_RC_FF;
+ else
+ if(data < 0x61)
+ btn |= BUTTON_RC_REW;
+ else
+ btn |= BUTTON_RC_MODE;
+ else
+ if(data < 0xb4)
+ if(data < 0x96)
+ btn |= BUTTON_RC_REC;
+ else
+ btn |= BUTTON_RC_MENU;
+ else
+ if(data < 0xd1)
+ btn |= BUTTON_RC_VOL_UP;
+ else
+ btn |= BUTTON_RC_VOL_DOWN;
+ }
+ }
+
+ data = GPIO_READ;
+
+ /* hold and power are mutually exclusive */
+ if (!(data & 0x04000000))
+ btn |= BUTTON_POWER;
+
+ /* remote play button should be dead if hold */
+ if (!remote_hold_button && !(data & 0x02000000))
+ btn |= BUTTON_RC_PLAY;
+
+ return btn;
+}