From d282e14d3328020679011983d6ad243a0295dda4 Mon Sep 17 00:00:00 2001 From: Daniel Ankers Date: Sat, 14 Oct 2006 12:14:23 +0000 Subject: Untested first attempt at a Sansa button driver. Based on work by MrH git-svn-id: svn://svn.rockbox.org/rockbox/trunk@11219 a1c6a512-1295-4272-9138-f99709370657 --- .../target/arm/sandisk/sansa-e200/button-e200.c | 82 ++++++++++++++++++++++ .../target/arm/sandisk/sansa-e200/button-target.h | 53 +++++++++++++- 2 files changed, 132 insertions(+), 3 deletions(-) create mode 100644 firmware/target/arm/sandisk/sansa-e200/button-e200.c diff --git a/firmware/target/arm/sandisk/sansa-e200/button-e200.c b/firmware/target/arm/sandisk/sansa-e200/button-e200.c new file mode 100644 index 0000000000..104c7517d8 --- /dev/null +++ b/firmware/target/arm/sandisk/sansa-e200/button-e200.c @@ -0,0 +1,82 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2006 by Barry Wardell + * + * 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. + * + ****************************************************************************/ + +/* Taken from button-h10.c by Barry Wardell and reverse engineering by MrH. */ + +#include +#include "config.h" +#include "cpu.h" +#include "system.h" +#include "button.h" +#include "kernel.h" +#include "backlight.h" +#include "system.h" + + +void button_init_device(void) +{ + /* Enable all buttons except the wheel */ + GPIOF_ENABLE |= 0xff; +} + +bool button_hold(void) +{ + return (GPIOF_INPUT_VAL & 0x80)?true:false; +} + +/* + * Get button pressed from hardware + */ +int button_read_device(void) +{ + int btn = BUTTON_NONE; + unsigned char state; + static bool hold_button = false; + bool hold_button_old; + + /* Hold */ + hold_button_old = hold_button; + hold_button = button_hold(); + +#if 0 +#ifndef BOOTLOADER + /* light handling */ + if (hold_button != hold_button_old) + { + backlight_hold_changed(hold_button); + } +#endif +#endif + + /* device buttons */ + if (!hold_button) + { + /* Read normal buttons */ + state = GPIOF_INPUT_VAL & 0xff; + if ((state & 0x1) == 0) btn |= BUTTON_REC; + if ((state & 0x2) == 0) btn |= BUTTON_DOWN; + if ((state & 0x4) == 0) btn |= BUTTON_RIGHT; + if ((state & 0x8) == 0) btn |= BUTTON_LEFT; + if ((state & 0x10) == 0) btn |= BUTTON_SELECT; /* The centre button */ + if ((state & 0x20) == 0) btn |= BUTTON_UP; /* The "play" button */ + if ((state & 0x40) == 1) btn |= BUTTON_POWER; + } + + return btn; +} diff --git a/firmware/target/arm/sandisk/sansa-e200/button-target.h b/firmware/target/arm/sandisk/sansa-e200/button-target.h index e78f91a154..6ddf466452 100644 --- a/firmware/target/arm/sandisk/sansa-e200/button-target.h +++ b/firmware/target/arm/sandisk/sansa-e200/button-target.h @@ -1,7 +1,54 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2006 by Barry Wardell + * + * 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. + * + ****************************************************************************/ -#define BUTTON_POWER 0x00000001 -#define BUTTON_LEFT 0x00000002 +#ifndef _BUTTON_TARGET_H_ +#define _BUTTON_TARGET_H_ + +#include +#include "config.h" + +#define HAS_BUTTON_HOLD + +bool button_hold(void); +void button_init_device(void); +int button_read_device(void); + +/* Sandisk Sansa E200 button codes */ + +/* Main unit's buttons */ +#define BUTTON_REC 0x00000001 +#define BUTTON_STOP 0x00000002 #define BUTTON_RIGHT 0x00000004 +#define BUTTON_LEFT 0x00000008 +#define BUTTON_SELECT 0x00000010 +#define BUTTON_PLAY 0x00000020 +#define BUTTON_POWER 0x00000040 + +#define BUTTON_UP 0x00000080 +#define BUTTON_DOWN 0x00000100 + +#define BUTTON_MAIN 0x00000fff + +/* No Remote control */ +#define BUTTON_REMOTE 0 #define POWEROFF_BUTTON BUTTON_POWER -#define POWEROFF_COUNT 40 +#define POWEROFF_COUNT 10 + +#endif /* _BUTTON_TARGET_H_ */ -- cgit v1.2.3