From c849219370fd65be2167a24a9f06f03bc1284ac1 Mon Sep 17 00:00:00 2001 From: Linus Nielsen Feltzing Date: Thu, 27 Jul 2006 13:27:31 +0000 Subject: Moved the X5 button driver to the target tree git-svn-id: svn://svn.rockbox.org/rockbox/trunk@10339 a1c6a512-1295-4272-9138-f99709370657 --- firmware/SOURCES | 1 + firmware/drivers/button.c | 118 +++---------------- firmware/export/button.h | 47 ++------ firmware/target/coldfire/iaudio/x5/button-target.h | 70 +++++++++++ firmware/target/coldfire/iaudio/x5/button-x5.c | 131 +++++++++++++++++++++ 5 files changed, 224 insertions(+), 143 deletions(-) create mode 100755 firmware/target/coldfire/iaudio/x5/button-target.h create mode 100755 firmware/target/coldfire/iaudio/x5/button-x5.c (limited to 'firmware') diff --git a/firmware/SOURCES b/firmware/SOURCES index bef54c0319..70a4c4ad25 100644 --- a/firmware/SOURCES +++ b/firmware/SOURCES @@ -217,6 +217,7 @@ drivers/m5636.c target/coldfire/iaudio/x5/power-x5.c #ifndef SIMULATOR drivers/generic_i2c.c +target/coldfire/iaudio/x5/button-x5.c target/coldfire/iaudio/x5/lcd-x5.c target/coldfire/iaudio/x5/pcf50606-x5.c target/coldfire/iaudio/x5/adc-x5.c diff --git a/firmware/drivers/button.c b/firmware/drivers/button.c index 216c51ea15..d9f9ae2a6d 100644 --- a/firmware/drivers/button.c +++ b/firmware/drivers/button.c @@ -44,6 +44,10 @@ #include "lcd-remote.h" #endif +#ifdef TARGET_TREE +#include "button-target.h" +#endif + struct event_queue button_queue; static long lastbtn; /* Last valid button status */ @@ -72,10 +76,7 @@ static bool remote_filter_first_keypress; (CONFIG_KEYPAD == IRIVER_IFP7XX_PAD) #define POWEROFF_BUTTON BUTTON_PLAY #define POWEROFF_COUNT 40 -#elif (CONFIG_KEYPAD == IAUDIO_X5_PAD) -#define POWEROFF_BUTTON BUTTON_POWER -#define POWEROFF_COUNT 10 -#else +#elif !defined(TARGET_TREE) #define POWEROFF_BUTTON BUTTON_OFF #define POWEROFF_COUNT 10 #endif @@ -603,7 +604,10 @@ long button_get_w_tmo(int ticks) void button_init(void) { /* hardware inits */ -#if CONFIG_KEYPAD == IRIVER_H100_PAD +#ifdef TARGET_TREE + button_init_device(); + +#elif CONFIG_KEYPAD == IRIVER_H100_PAD /* Set GPIO33, GPIO37, GPIO38 and GPIO52 as general purpose inputs */ GPIO1_FUNCTION |= 0x00100062; GPIO1_ENABLE &= ~0x00100060; @@ -614,11 +618,6 @@ void button_init(void) /* Set GPIO33, GPIO37, GPIO38 and GPIO52 as general purpose inputs */ GPIO1_ENABLE &= ~0x00100060; GPIO1_FUNCTION |= 0x00100062; -#elif CONFIG_KEYPAD == IAUDIO_X5_PAD - /* Power, Remote Play & Hold switch */ - GPIO_FUNCTION |= 0x0e000000; - GPIO_ENABLE &= ~0x0e000000; - #elif CONFIG_KEYPAD == RECORDER_PAD /* Set PB4 and PB8 as input pins */ PBCR1 &= 0xfffc; /* PB8MD = 00 */ @@ -833,9 +832,14 @@ static int button_read(void) { int btn = BUTTON_NONE; int retval; +#ifndef TARGET_TREE int data; +#endif -#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD) +#ifdef TARGET_TREE + btn = button_read_device(); + +#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD) static bool hold_button = false; static bool remote_hold_button = false; static int prev_data = 0xff; @@ -1238,86 +1242,6 @@ static int button_read(void) (void)data; btn = ipod_3g_button_read(); -#elif (CONFIG_KEYPAD == IAUDIO_X5_PAD) - static bool hold_button = false; - static bool remote_hold_button = false; - - /* light handling */ - if (hold_button && !button_hold()) - { - backlight_on(); - } - /* TODO: add light handling for the remote */ - - hold_button = button_hold(); - remote_hold_button = remote_button_hold(); - - /* normal buttons */ - if (!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_REC; - else - btn = BUTTON_PLAY; - else - if(data < 0xd3) - btn = BUTTON_DOWN; - else - btn = BUTTON_UP; - } - } - - /* remote buttons */ - data = adc_scan(ADC_REMOTE); - if(data < 0x17) - remote_hold_button = true; - - if(!remote_hold_button) - { - if (data < 0xee) - { - if(data < 0x7a) - if(data < 0x41) - btn |= BUTTON_RC_REW; - else - if(data < 0x61) - btn |= BUTTON_RC_FF; - 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; - if (!(data & 0x04000000)) - btn |= BUTTON_POWER; - - if (!(data & 0x02000000)) - btn |= BUTTON_RC_PLAY; - #endif /* CONFIG_KEYPAD */ #ifdef HAVE_LCD_BITMAP @@ -1375,18 +1299,6 @@ bool button_hold(void) } #endif -#if (CONFIG_KEYPAD == IAUDIO_X5_PAD) -bool button_hold(void) -{ - return (GPIO_READ & 0x08000000)?false:true; -} - -bool remote_button_hold(void) -{ - return false; /* TODO X5 */ -} -#endif - int button_status(void) { return lastbtn; diff --git a/firmware/export/button.h b/firmware/export/button.h index 93e6443645..92c9415372 100644 --- a/firmware/export/button.h +++ b/firmware/export/button.h @@ -23,8 +23,7 @@ #include #include "config.h" #if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ - (CONFIG_KEYPAD == IRIVER_H300_PAD) || \ - (CONFIG_KEYPAD == IAUDIO_X5_PAD) + (CONFIG_KEYPAD == IRIVER_H300_PAD) #define HAS_BUTTON_HOLD #define HAS_REMOTE_BUTTON_HOLD #elif (CONFIG_KEYPAD == IPOD_4G_PAD) || \ @@ -64,6 +63,10 @@ bool remote_button_hold(void); #define BUTTON_REPEAT 0x04000000 +#ifdef TARGET_TREE +#include "button-target.h" +#else + /* Target specific button codes */ #if (CONFIG_KEYPAD == IRIVER_H100_PAD)\ @@ -258,44 +261,6 @@ bool remote_button_hold(void); #define BUTTON_REMOTE 0 -#elif CONFIG_KEYPAD == IAUDIO_X5_PAD - -/* iaudio X5 specific button codes */ - - /* Main unit's buttons */ -#define BUTTON_POWER 0x00000001 -#define BUTTON_REC 0x00000002 - -#define BUTTON_LEFT 0x00000004 -#define BUTTON_RIGHT 0x00000008 -#define BUTTON_UP 0x00000010 -#define BUTTON_DOWN 0x00000020 - -#define BUTTON_PLAY 0x00000040 -#define BUTTON_SELECT 0x00000080 - -#define BUTTON_MAIN (BUTTON_POWER|BUTTON_PLAY|BUTTON_LEFT|BUTTON_RIGHT\ - |BUTTON_UP|BUTTON_DOWN|BUTTON_REC|BUTTON_SELECT) - - /* Remote control's buttons */ -#define BUTTON_RC_PLAY 0x00100000 - -#define BUTTON_RC_REW 0x00080000 -#define BUTTON_RC_FF 0x00040000 -#define BUTTON_RC_VOL_UP 0x00020000 -#define BUTTON_RC_VOL_DOWN 0x00010000 - -#define BUTTON_RC_REC 0x00008000 -#define BUTTON_RC_MENU 0x00004000 - -#define BUTTON_RC_MODE 0x00002000 - -#define BUTTON_REMOTE (BUTTON_RC_PLAY|BUTTON_RC_VOL_UP|BUTTON_RC_VOL_DOWN\ - |BUTTON_RC_REW|BUTTON_RC_FF\ - |BUTTON_RC_REC|BUTTON_RC_MENU|BUTTON_RC_MODE) - - - #elif CONFIG_KEYPAD == GIGABEAT_PAD /* Toshiba Gigabeat specific button codes */ @@ -337,5 +302,7 @@ bool remote_button_hold(void); #endif /* RECORDER/PLAYER/ONDIO/GMINI KEYPAD */ +#endif /* TARGET_TREE */ + #endif /* _BUTTON_H_ */ diff --git a/firmware/target/coldfire/iaudio/x5/button-target.h b/firmware/target/coldfire/iaudio/x5/button-target.h new file mode 100755 index 0000000000..998522fe15 --- /dev/null +++ b/firmware/target/coldfire/iaudio/x5/button-target.h @@ -0,0 +1,70 @@ +/*************************************************************************** + * __________ __ ___. + * 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. + * + ****************************************************************************/ +#ifndef _BUTTON_TARGET_H_ +#define _BUTTON_TARGET_H_ + +#include +#include "config.h" + +#define HAS_BUTTON_HOLD +#define HAS_REMOTE_BUTTON_HOLD + +bool button_hold(void); +bool remote_button_hold(void); +void button_init_device(void); +int button_read_device(void); + +/* iaudio X5 specific button codes */ + + /* Main unit's buttons */ +#define BUTTON_POWER 0x00000001 +#define BUTTON_REC 0x00000002 + +#define BUTTON_LEFT 0x00000004 +#define BUTTON_RIGHT 0x00000008 +#define BUTTON_UP 0x00000010 +#define BUTTON_DOWN 0x00000020 + +#define BUTTON_PLAY 0x00000040 +#define BUTTON_SELECT 0x00000080 + +#define BUTTON_MAIN (BUTTON_POWER|BUTTON_PLAY|BUTTON_LEFT|BUTTON_RIGHT\ + |BUTTON_UP|BUTTON_DOWN|BUTTON_REC|BUTTON_SELECT) + + /* Remote control's buttons */ +#define BUTTON_RC_PLAY 0x00100000 + +#define BUTTON_RC_REW 0x00080000 +#define BUTTON_RC_FF 0x00040000 +#define BUTTON_RC_VOL_UP 0x00020000 +#define BUTTON_RC_VOL_DOWN 0x00010000 + +#define BUTTON_RC_REC 0x00008000 +#define BUTTON_RC_MENU 0x00004000 + +#define BUTTON_RC_MODE 0x00002000 + +#define BUTTON_REMOTE (BUTTON_RC_PLAY|BUTTON_RC_VOL_UP|BUTTON_RC_VOL_DOWN\ + |BUTTON_RC_REW|BUTTON_RC_FF\ + |BUTTON_RC_REC|BUTTON_RC_MENU|BUTTON_RC_MODE) + +#define POWEROFF_BUTTON BUTTON_POWER +#define POWEROFF_COUNT 10 + +#endif /* _BUTTON_TARGET_H_ */ diff --git a/firmware/target/coldfire/iaudio/x5/button-x5.c b/firmware/target/coldfire/iaudio/x5/button-x5.c new file mode 100755 index 0000000000..07bc7bf3f7 --- /dev/null +++ b/firmware/target/coldfire/iaudio/x5/button-x5.c @@ -0,0 +1,131 @@ +/*************************************************************************** + * __________ __ ___. + * 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 +#include "config.h" +#include "cpu.h" +#include "system.h" +#include "button.h" +#include "kernel.h" +#include "backlight.h" +#include "adc.h" +#include "system.h" + +void button_init_device(void) +{ + /* Power, Remote Play & Hold switch */ + GPIO_FUNCTION |= 0x0e000000; + GPIO_ENABLE &= ~0x0e000000; +} + +bool button_hold(void) +{ + return (GPIO_READ & 0x08000000)?false:true; +} + +bool remote_button_hold(void) +{ + return false; /* TODO X5 */ +} + +int button_read_device(void) +{ + int data; + int btn = BUTTON_NONE; + static bool hold_button = false; + static bool remote_hold_button = false; + + /* backlight handling */ + if (hold_button && !button_hold()) + { + backlight_on(); + } + /* TODO: add light handling for the remote */ + + hold_button = button_hold(); + remote_hold_button = remote_button_hold(); + + /* normal buttons */ + if (!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_REC; + else + btn = BUTTON_PLAY; + else + if(data < 0xd3) + btn = BUTTON_DOWN; + else + btn = BUTTON_UP; + } + } + + /* remote buttons */ + data = adc_scan(ADC_REMOTE); + if(data < 0x17) + remote_hold_button = true; + + if(!remote_hold_button) + { + if (data < 0xee) + { + if(data < 0x7a) + if(data < 0x41) + btn |= BUTTON_RC_REW; + else + if(data < 0x61) + btn |= BUTTON_RC_FF; + 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; + if (!(data & 0x04000000)) + btn |= BUTTON_POWER; + + if (!(data & 0x02000000)) + btn |= BUTTON_RC_PLAY; + + return btn; +} -- cgit v1.2.3