diff options
author | Daniel Ankers <dan@weirdo.org.uk> | 2006-10-14 12:14:23 +0000 |
---|---|---|
committer | Daniel Ankers <dan@weirdo.org.uk> | 2006-10-14 12:14:23 +0000 |
commit | d282e14d3328020679011983d6ad243a0295dda4 (patch) | |
tree | c17442c357925e9e7127215d54e6894c97782639 /firmware/target/arm/sandisk/sansa-e200/button-e200.c | |
parent | 6aa12c11f741a4544d780d11fc583a25a5aef171 (diff) | |
download | rockbox-d282e14d3328020679011983d6ad243a0295dda4.tar.gz rockbox-d282e14d3328020679011983d6ad243a0295dda4.zip |
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
Diffstat (limited to 'firmware/target/arm/sandisk/sansa-e200/button-e200.c')
-rw-r--r-- | firmware/target/arm/sandisk/sansa-e200/button-e200.c | 82 |
1 files changed, 82 insertions, 0 deletions
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 <stdlib.h> +#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; +} |