1
0
Fork 0
forked from len0rd/rockbox

Moved archos button reading to target tree. * Cleanup of button.[ch]. * Deactivated serial remote code for recorder FM/V2 as there is no remote pin, saving ~500 bytes of code.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@11612 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Jens Arnold 2006-11-27 02:16:32 +00:00
parent e43f56b58d
commit 0e6dd7efcd
18 changed files with 625 additions and 368 deletions

View file

@ -215,6 +215,7 @@ const struct button_mapping button_context_radio[] = {
}; };
#if BUTTON_REMOTE != 0
/***************************************************************************** /*****************************************************************************
* Remote control mappings * Remote control mappings
*****************************************************************************/ *****************************************************************************/
@ -254,11 +255,14 @@ static const struct button_mapping* get_context_mapping_remote( int context )
return remote_button_context_standard; return remote_button_context_standard;
} }
} }
#endif /* BUTTON_REMOTE != 0 */
const struct button_mapping* get_context_mapping( int context ) const struct button_mapping* get_context_mapping( int context )
{ {
#if BUTTON_REMOTE != 0
if (context&CONTEXT_REMOTE) if (context&CONTEXT_REMOTE)
return get_context_mapping_remote(context); return get_context_mapping_remote(context);
#endif
switch( context ) switch( context )
{ {

View file

@ -309,8 +309,7 @@ void init(void)
#ifdef DEBUG #ifdef DEBUG
debug_init(); debug_init();
#else #else
#ifndef HAVE_MMC /* FIXME: This is also necessary for debug builds #if !defined(HAVE_FMADC) && !defined(HAVE_MMC)
* (do debug builds on the Ondio make sense?) */
serial_setup(); serial_setup();
#endif #endif
#endif #endif

View file

@ -29,15 +29,17 @@ PLUGIN_HEADER
#define EV_EXIT 1337 #define EV_EXIT 1337
/* seems to work with 1300, but who knows... */ /* seems to work with 1300, but who knows... */
#define THREAD_STACK_SIZE DEFAULT_STACK_SIZE + 0x200 #define THREAD_STACK_SIZE DEFAULT_STACK_SIZE + 0x200
#if CONFIG_KEYPAD == RECORDER_PAD #if CONFIG_KEYPAD == RECORDER_PAD
#define BATTERY_ON BUTTON_PLAY #define BATTERY_ON BUTTON_PLAY
#define BATTERY_RC_ON BUTTON_RC_PLAY
#define BATTERY_OFF BUTTON_OFF #define BATTERY_OFF BUTTON_OFF
#if BUTTON_REMOTE != 0
#define BATTERY_RC_ON BUTTON_RC_PLAY
#define BATTERY_RC_OFF BUTTON_RC_STOP #define BATTERY_RC_OFF BUTTON_RC_STOP
#endif
#elif CONFIG_KEYPAD == ONDIO_PAD #elif CONFIG_KEYPAD == ONDIO_PAD

View file

@ -47,15 +47,17 @@ PLUGIN_HEADER
#define BTN_DIR_RIGHT BUTTON_RIGHT #define BTN_DIR_RIGHT BUTTON_RIGHT
#define BTN_PLAYER2_DIR1 BUTTON_F2 #define BTN_PLAYER2_DIR1 BUTTON_F2
#define BTN_PLAYER2_DIR2 BUTTON_F3 #define BTN_PLAYER2_DIR2 BUTTON_F3
#define BTN_RC_UP BUTTON_RC_VOL_UP
#define BTN_RC_DOWN BUTTON_RC_VOL_DOWN
#define BTN_STARTPAUSE BUTTON_PLAY #define BTN_STARTPAUSE BUTTON_PLAY
#define BTN_QUIT BUTTON_OFF #define BTN_QUIT BUTTON_OFF
#define BTN_STOPRESET BUTTON_ON #define BTN_STOPRESET BUTTON_ON
#define BTN_TOGGLE_KEYS BUTTON_F1 #define BTN_TOGGLE_KEYS BUTTON_F1
#if BUTTON_REMOTE != 0
#define BTN_RC_UP BUTTON_RC_VOL_UP
#define BTN_RC_DOWN BUTTON_RC_VOL_DOWN
#define REMOTE #define REMOTE
#define MULTIPLAYER #define MULTIPLAYER
#endif
#define PLAYERS_TEXT "UP/DN" #define PLAYERS_TEXT "UP/DN"
#define WORMS_TEXT "L/R" #define WORMS_TEXT "L/R"

View file

@ -281,6 +281,7 @@ drivers/i2c.c
#ifdef ARCHOS_PLAYER #ifdef ARCHOS_PLAYER
#ifndef SIMULATOR #ifndef SIMULATOR
target/sh/archos/player/button-player.c
target/sh/archos/player/lcd-as-player.S target/sh/archos/player/lcd-as-player.S
#endif /* SIMULATOR */ #endif /* SIMULATOR */
#endif /* ARCHOS_PLAYER */ #endif /* ARCHOS_PLAYER */
@ -289,6 +290,7 @@ target/sh/archos/player/lcd-as-player.S
#ifndef SIMULATOR #ifndef SIMULATOR
target/sh/archos/lcd-archos-bitmap.c target/sh/archos/lcd-archos-bitmap.c
target/sh/archos/lcd-as-archos-bitmap.S target/sh/archos/lcd-as-archos-bitmap.S
target/sh/archos/recorder/button-recorder.c
#endif /* SIMULATOR */ #endif /* SIMULATOR */
#endif /* ARCHOS_RECORDER */ #endif /* ARCHOS_RECORDER */
@ -296,6 +298,7 @@ target/sh/archos/lcd-as-archos-bitmap.S
#ifndef SIMULATOR #ifndef SIMULATOR
target/sh/archos/lcd-archos-bitmap.c target/sh/archos/lcd-archos-bitmap.c
target/sh/archos/lcd-as-archos-bitmap.S target/sh/archos/lcd-as-archos-bitmap.S
target/sh/archos/fm_v2/button-fm_v2.c
#endif /* SIMULATOR */ #endif /* SIMULATOR */
#endif /* ARCHOS_FMRECORDER || ARCHOS_RECORDERV2 */ #endif /* ARCHOS_FMRECORDER || ARCHOS_RECORDERV2 */
@ -303,6 +306,7 @@ target/sh/archos/lcd-as-archos-bitmap.S
#ifndef SIMULATOR #ifndef SIMULATOR
target/sh/archos/lcd-archos-bitmap.c target/sh/archos/lcd-archos-bitmap.c
target/sh/archos/lcd-as-archos-bitmap.S target/sh/archos/lcd-as-archos-bitmap.S
target/sh/archos/ondio/button-ondio.c
#endif /* SIMULATOR */ #endif /* SIMULATOR */
#endif /* ARCHOS_ONDIOFM || ARCHOS_ONDIOFM */ #endif /* ARCHOS_ONDIOFM || ARCHOS_ONDIOFM */

View file

@ -9,12 +9,6 @@
* *
* Copyright (C) 2002 by Daniel Stenberg * Copyright (C) 2002 by Daniel Stenberg
* *
* iPod driver based on code from the ipodlinux project - http://ipodlinux.org
* Adapted for Rockbox in December 2005
* Original file: linux/arch/armnommu/mach-ipod/keyboard.c
* Copyright (c) 2003-2005 Bernard Leach (leachbj@bouncycastle.org)
*
*
* All files in this archive are subject to the GNU General Public License. * 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. * See the file COPYING in the source tree root for full license agreement.
* *
@ -29,25 +23,19 @@
#include <stdlib.h> #include <stdlib.h>
#include "config.h" #include "config.h"
#include "cpu.h"
#include "system.h" #include "system.h"
#include "button.h" #include "button.h"
#include "kernel.h" #include "kernel.h"
#include "backlight.h" #include "backlight.h"
#include "adc.h"
#include "serial.h" #include "serial.h"
#include "power.h" #include "power.h"
#include "system.h"
#include "powermgmt.h" #include "powermgmt.h"
#include "button-target.h"
#ifdef HAVE_REMOTE_LCD #ifdef HAVE_REMOTE_LCD
#include "lcd-remote.h" #include "lcd-remote.h"
#endif #endif
#ifdef TARGET_TREE
#include "button-target.h"
#endif
struct event_queue button_queue; struct event_queue button_queue;
static long lastbtn; /* Last valid button status */ static long lastbtn; /* Last valid button status */
@ -60,6 +48,9 @@ static bool filter_first_keypress;
#ifdef HAVE_REMOTE_LCD #ifdef HAVE_REMOTE_LCD
static bool remote_filter_first_keypress; static bool remote_filter_first_keypress;
#endif #endif
#endif /* CONFIG_BACKLIGHT */
#ifdef HAVE_HEADPHONE_DETECTION
bool phones_present = false;
#endif #endif
/* how long until repeat kicks in, in ticks */ /* how long until repeat kicks in, in ticks */
@ -71,18 +62,8 @@ static bool remote_filter_first_keypress;
/* speed repeat finishes at, in ticks */ /* speed repeat finishes at, in ticks */
#define REPEAT_INTERVAL_FINISH 5 #define REPEAT_INTERVAL_FINISH 5
/* the power-off button and number of repeated keys before shutting off */
#if !defined(TARGET_TREE)
#define POWEROFF_BUTTON BUTTON_OFF
#define POWEROFF_COUNT 10
#endif
static int button_read(void); static int button_read(void);
#ifdef HAVE_HEADPHONE_DETECTION
bool phones_present = false;
#endif
static void button_tick(void) static void button_tick(void)
{ {
static int count = 0; static int count = 0;
@ -99,8 +80,7 @@ static void button_tick(void)
int diff; int diff;
int btn; int btn;
#if (CONFIG_KEYPAD == PLAYER_PAD) || (CONFIG_KEYPAD == RECORDER_PAD) #ifdef HAS_SERIAL_REMOTE
/* Post events for the remote control */ /* Post events for the remote control */
btn = remote_control_rx(); btn = remote_control_rx();
if(btn) if(btn)
@ -180,9 +160,7 @@ static void button_tick(void)
key */ key */
#ifdef HAVE_SW_POWEROFF #ifdef HAVE_SW_POWEROFF
if ((btn == POWEROFF_BUTTON if ((btn == POWEROFF_BUTTON
#ifdef BUTTON_RC_STOP #ifdef RC_POWEROFF_BUTTON
|| btn == BUTTON_RC_STOP
#elif defined(RC_POWEROFF_BUTTON)
|| btn == RC_POWEROFF_BUTTON || btn == RC_POWEROFF_BUTTON
#endif #endif
) && ) &&
@ -299,22 +277,8 @@ long button_get_w_tmo(int ticks)
void button_init(void) void button_init(void)
{ {
/* hardware inits */ /* hardware inits */
#ifdef TARGET_TREE
button_init_device(); button_init_device();
#elif CONFIG_KEYPAD == RECORDER_PAD
/* Set PB4 and PB8 as input pins */
PBCR1 &= 0xfffc; /* PB8MD = 00 */
PBCR2 &= 0xfcff; /* PB4MD = 00 */
PBIOR &= ~0x0110; /* Inputs */
#elif CONFIG_KEYPAD == PLAYER_PAD
/* set PA5 and PA11 as input pins */
PACR1 &= 0xff3f; /* PA11MD = 00 */
PACR2 &= 0xfbff; /* PA5MD = 0 */
PAIOR &= ~0x0820; /* Inputs */
#elif CONFIG_KEYPAD == ONDIO_PAD
/* nothing to initialize here */
#endif /* CONFIG_KEYPAD */
queue_init(&button_queue, true); queue_init(&button_queue, true);
button_read(); button_read();
lastbtn = button_read(); lastbtn = button_read();
@ -409,195 +373,13 @@ void set_remote_backlight_filter_keypress(bool value)
#endif #endif
#endif #endif
/*
Archos hardware button hookup
=============================
Recorder / Recorder FM/V2
-------------------------
F1, F2, F3, UP: connected to AN4 through a resistor network
DOWN, PLAY, LEFT, RIGHT: likewise connected to AN5
The voltage on AN4/ AN5 depends on which keys (or key combo) is pressed
FM/V2 has PLAY and RIGHT switched compared to plain recorder
ON: PB8, low active (plain recorder) / AN3, low active (fm/v2)
OFF: PB4, low active (plain recorder) / AN2, high active (fm/v2)
Player
------
LEFT: AN0
MENU: AN1
RIGHT: AN2
PLAY: AN3
STOP: PA11
ON: PA5
All buttons are low active
Ondio
-----
LEFT, RIGHT, UP, DOWN: connected to AN4 through a resistor network
The voltage on AN4 depends on which keys (or key combo) is pressed
OPTION: AN2, high active (assigned as MENU)
ON/OFF: AN3, low active (assigned as OFF)
*/
#if CONFIG_KEYPAD == RECORDER_PAD
#ifdef HAVE_FMADC
/* FM Recorder super-special levels */
#define LEVEL1 150
#define LEVEL2 385
#define LEVEL3 545
#define LEVEL4 700
#define ROW2_BUTTON1 BUTTON_PLAY
#define ROW2_BUTTON3 BUTTON_RIGHT
#else
/* plain bog standard Recorder levels */
#define LEVEL1 250
#define LEVEL2 500
#define LEVEL3 700
#define LEVEL4 900
#define ROW2_BUTTON1 BUTTON_RIGHT
#define ROW2_BUTTON3 BUTTON_PLAY
#endif /* HAVE_FMADC */
#elif CONFIG_KEYPAD == ONDIO_PAD
/* Ondio levels */
#define LEVEL1 165
#define LEVEL2 415
#define LEVEL3 585
#define LEVEL4 755
#endif /* CONFIG_KEYPAD */
/* /*
* Get button pressed from hardware * Get button pressed from hardware
*/ */
static int button_read(void) static int button_read(void)
{ {
int btn = BUTTON_NONE; int btn = button_read_device();
int retval; int retval;
#ifndef TARGET_TREE
int data;
#endif
#ifdef TARGET_TREE
btn = button_read_device();
#elif CONFIG_KEYPAD == RECORDER_PAD
#ifndef HAVE_FMADC
static int off_button_count = 0;
#endif
/* check F1..F3 and UP */
data = adc_read(ADC_BUTTON_ROW1);
if (data >= LEVEL1)
{
if (data >= LEVEL3)
if (data >= LEVEL4)
btn = BUTTON_F3;
else
btn = BUTTON_UP;
else
if (data >= LEVEL2)
btn = BUTTON_F2;
else
btn = BUTTON_F1;
}
/* Some units have mushy keypads, so pressing UP also activates
the Left/Right buttons. Let's combat that by skipping the AN5
checks when UP is pressed. */
if(!(btn & BUTTON_UP))
{
/* check DOWN, PLAY, LEFT, RIGHT */
data = adc_read(ADC_BUTTON_ROW2);
if (data >= LEVEL1)
{
if (data >= LEVEL3)
if (data >= LEVEL4)
btn |= BUTTON_DOWN;
else
btn |= ROW2_BUTTON3;
else
if (data >= LEVEL2)
btn |= BUTTON_LEFT;
else
btn |= ROW2_BUTTON1;
}
}
#ifdef HAVE_FMADC
if ( adc_read(ADC_BUTTON_ON) < 512 )
btn |= BUTTON_ON;
if ( adc_read(ADC_BUTTON_OFF) > 512 )
btn |= BUTTON_OFF;
#else
/* check port B pins for ON and OFF */
data = PBDR;
if ((data & 0x0100) == 0)
btn |= BUTTON_ON;
if ((data & 0x0010) == 0)
{
/* When the batteries are low, the low-battery shutdown logic causes
* spurious OFF events due to voltage fluctuation on some units.
* Only accept OFF when read several times in sequence. */
if (++off_button_count > 3)
btn |= BUTTON_OFF;
}
else
off_button_count = 0;
#endif
#elif CONFIG_KEYPAD == PLAYER_PAD
/* buttons are active low */
if (adc_read(0) < 0x180)
btn = BUTTON_LEFT;
if (adc_read(1) < 0x180)
btn |= BUTTON_MENU;
if(adc_read(2) < 0x180)
btn |= BUTTON_RIGHT;
if(adc_read(3) < 0x180)
btn |= BUTTON_PLAY;
/* check port A pins for ON and STOP */
data = PADR;
if ( !(data & 0x0020) )
btn |= BUTTON_ON;
if ( !(data & 0x0800) )
btn |= BUTTON_STOP;
#elif CONFIG_KEYPAD == ONDIO_PAD
/* Check the 4 direction keys */
data = adc_read(ADC_BUTTON_ROW1);
if (data >= LEVEL1)
{
if (data >= LEVEL3)
if (data >= LEVEL4)
btn = BUTTON_LEFT;
else
btn = BUTTON_RIGHT;
else
if (data >= LEVEL2)
btn = BUTTON_UP;
else
btn = BUTTON_DOWN;
}
if(adc_read(ADC_BUTTON_OPTION) > 0x200) /* active high */
btn |= BUTTON_MENU;
if(adc_read(ADC_BUTTON_ONOFF) < 0x120) /* active low */
btn |= BUTTON_OFF;
#endif /* CONFIG_KEYPAD */
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
if (btn && flipped) if (btn && flipped)

View file

@ -33,7 +33,8 @@
/* FIX: this doesn't work on iRiver or iPod yet */ /* FIX: this doesn't work on iRiver or iPod yet */
/* iFP7xx has no remote */ /* iFP7xx has no remote */
#ifndef HAVE_MMC /* MMC takes serial port 1, so don't mess with it */ #if !defined(HAVE_FMADC) /* Recorder FM/V2 has no remote control pin */ \
&& !defined(HAVE_MMC) /* MMC takes serial port 1, so don't mess with it */
/* Received byte identifiers */ /* Received byte identifiers */
#define PLAY 0xC1 #define PLAY 0xC1
@ -51,8 +52,8 @@ void serial_setup (void)
SMR1 = 0x00; SMR1 = 0x00;
SCR1 = 0; SCR1 = 0;
BRR1 = (FREQ/(32*9600))-1; BRR1 = (FREQ/(32*9600))-1;
SSR1 &= 0; /* The status bits must be read before they are cleared, and_b(0, &SSR1); /* The status bits must be read before they are cleared,
so we do an AND operation */ so we do an AND operation */
/* Let the hardware settle. The serial port needs to wait "at least /* Let the hardware settle. The serial port needs to wait "at least
the interval required to transmit or receive one bit" before it the interval required to transmit or receive one bit" before it
@ -75,7 +76,7 @@ int remote_control_rx(void)
/* Errors? Just clear'em. The receiver stops if we don't */ /* Errors? Just clear'em. The receiver stops if we don't */
if(SSR1 & (SCI_ORER | SCI_FER | SCI_PER)) { if(SSR1 & (SCI_ORER | SCI_FER | SCI_PER)) {
SSR1 &= ~(SCI_ORER | SCI_FER | SCI_PER); and_b(~(SCI_ORER | SCI_FER | SCI_PER), &SSR1);
last_valid_button = BUTTON_NONE; last_valid_button = BUTTON_NONE;
last_was_error = true; last_was_error = true;
return BUTTON_NONE; return BUTTON_NONE;
@ -84,7 +85,7 @@ int remote_control_rx(void)
if(SSR1 & SCI_RDRF) { if(SSR1 & SCI_RDRF) {
/* Read byte and clear the Rx Full bit */ /* Read byte and clear the Rx Full bit */
btn = RDR1; btn = RDR1;
SSR1 &= ~SCI_RDRF; and_b(~SCI_RDRF, &SSR1);
if(last_was_error) if(last_was_error)
{ {
@ -93,38 +94,36 @@ int remote_control_rx(void)
} }
else else
{ {
#if CONFIG_KEYPAD != ONDIO_PAD
switch (btn) switch (btn)
{ {
case STOP: case STOP:
last_valid_button = BUTTON_RC_STOP; last_valid_button = BUTTON_RC_STOP;
break; break;
case PLAY: case PLAY:
last_valid_button = BUTTON_RC_PLAY; last_valid_button = BUTTON_RC_PLAY;
break; break;
case VOLUP: case VOLUP:
last_valid_button = BUTTON_RC_VOL_UP; last_valid_button = BUTTON_RC_VOL_UP;
break; break;
case VOLDN: case VOLDN:
last_valid_button = BUTTON_RC_VOL_DOWN; last_valid_button = BUTTON_RC_VOL_DOWN;
break; break;
case PREV: case PREV:
last_valid_button = BUTTON_RC_LEFT; last_valid_button = BUTTON_RC_LEFT;
break; break;
case NEXT: case NEXT:
last_valid_button = BUTTON_RC_RIGHT; last_valid_button = BUTTON_RC_RIGHT;
break; break;
default: default:
last_valid_button = BUTTON_NONE; last_valid_button = BUTTON_NONE;
break; break;
} }
#endif
} }
} }
else else
@ -142,7 +141,7 @@ int remote_control_rx(void)
return ret; return ret;
} }
#endif /* HAVE_MMC */ #endif /* !HAVE_FMADC && !HAVE_MMC */
#elif defined(CPU_COLDFIRE) && defined(HAVE_SERIAL) #elif defined(CPU_COLDFIRE) && defined(HAVE_SERIAL)
void serial_tx(const unsigned char *buf) void serial_tx(const unsigned char *buf)

View file

@ -22,11 +22,8 @@
#include <stdbool.h> #include <stdbool.h>
#include "config.h" #include "config.h"
#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ #include "button-target.h"
(CONFIG_KEYPAD == IRIVER_H300_PAD)
#define HAS_BUTTON_HOLD
#define HAS_REMOTE_BUTTON_HOLD
#endif
extern struct event_queue button_queue; extern struct event_queue button_queue;
void button_init (void); void button_init (void);
@ -44,12 +41,6 @@ void set_remote_backlight_filter_keypress(bool value);
#endif #endif
#endif #endif
#ifdef HAS_BUTTON_HOLD
bool button_hold(void);
#endif
#ifdef HAS_REMOTE_BUTTON_HOLD
bool remote_button_hold(void);
#endif
#ifdef HAVE_HEADPHONE_DETECTION #ifdef HAVE_HEADPHONE_DETECTION
bool headphones_inserted(void); bool headphones_inserted(void);
#endif #endif
@ -58,116 +49,10 @@ int wheel_status(void);
void wheel_send_events(bool send); void wheel_send_events(bool send);
#endif #endif
#define BUTTON_NONE 0x00000000 #define BUTTON_NONE 0x00000000
/* Button modifiers */ /* Button modifiers */
#define BUTTON_REL 0x02000000 #define BUTTON_REL 0x02000000
#define BUTTON_REPEAT 0x04000000 #define BUTTON_REPEAT 0x04000000
#ifdef TARGET_TREE
#include "button-target.h"
#else
/* Target specific button codes */
#if CONFIG_KEYPAD == RECORDER_PAD
/* Recorder specific button codes */
/* Main unit's buttons */
#define BUTTON_ON 0x00000001
#define BUTTON_OFF 0x00000002
#define BUTTON_LEFT 0x00000004
#define BUTTON_RIGHT 0x00000008
#define BUTTON_UP 0x00000010
#define BUTTON_DOWN 0x00000020
#define BUTTON_PLAY 0x00000040
#define BUTTON_F1 0x00000080
#define BUTTON_F2 0x00000100
#define BUTTON_F3 0x00000200
#define BUTTON_MAIN (BUTTON_ON|BUTTON_OFF|BUTTON_LEFT|BUTTON_RIGHT\
|BUTTON_UP|BUTTON_DOWN|BUTTON_PLAY\
|BUTTON_F1|BUTTON_F2|BUTTON_F3)
/* Remote control's buttons */
#define BUTTON_RC_PLAY 0x00100000
#define BUTTON_RC_STOP 0x00080000
#define BUTTON_RC_LEFT 0x00040000
#define BUTTON_RC_RIGHT 0x00020000
#define BUTTON_RC_VOL_UP 0x00010000
#define BUTTON_RC_VOL_DOWN 0x00008000
#define BUTTON_REMOTE (BUTTON_RC_PLAY|BUTTON_RC_STOP\
|BUTTON_RC_LEFT|BUTTON_RC_RIGHT\
|BUTTON_RC_VOL_UP|BUTTON_RC_VOL_DOWN)
#elif CONFIG_KEYPAD == PLAYER_PAD
/* Main unit's buttons */
#define BUTTON_ON 0x00000001
#define BUTTON_STOP 0x00000002
#define BUTTON_LEFT 0x00000004
#define BUTTON_RIGHT 0x00000008
#define BUTTON_PLAY 0x00000010
#define BUTTON_MENU 0x00000020
#define BUTTON_MAIN (BUTTON_ON|BUTTON_STOP|BUTTON_LEFT|BUTTON_RIGHT\
|BUTTON_PLAY|BUTTON_MENU)
/* Remote control's buttons */
#define BUTTON_RC_PLAY 0x00100000
#define BUTTON_RC_STOP 0x00080000
#define BUTTON_RC_LEFT 0x00040000
#define BUTTON_RC_RIGHT 0x00020000
#define BUTTON_RC_VOL_UP 0x00010000
#define BUTTON_RC_VOL_DOWN 0x00008000
#define BUTTON_REMOTE (BUTTON_RC_PLAY|BUTTON_RC_STOP\
|BUTTON_RC_LEFT|BUTTON_RC_RIGHT\
|BUTTON_RC_VOL_UP|BUTTON_RC_VOL_DOWN)
#elif CONFIG_KEYPAD == ONDIO_PAD
/* Ondio specific button codes */
#define BUTTON_OFF 0x00000001
#define BUTTON_MENU 0x00000002
#define BUTTON_LEFT 0x00000004
#define BUTTON_RIGHT 0x00000008
#define BUTTON_UP 0x00000010
#define BUTTON_DOWN 0x00000020
#define BUTTON_MAIN (BUTTON_OFF|BUTTON_MENU|BUTTON_LEFT|BUTTON_RIGHT\
|BUTTON_UP|BUTTON_DOWN)
#define BUTTON_REMOTE 0
#elif 0
/*
* Please, add the next Rockbox target's button defines here,
* using:
* - bits 0 and up: for main unit's buttons
* - bits 20 (0x00100000) and downwards for the remote buttons (if applicable)
* Don't forget to add BUTTON_MAIN and BUTTON_REMOTE masks
* Currently, main buttons on all targets are up to bit 9 (0x00000200),
* and remote buttons are down to bit 10 (0x00000400)
*/
#endif /* RECORDER/PLAYER/ONDIO KEYPAD */
#endif /* TARGET_TREE */
#endif /* _BUTTON_H_ */ #endif /* _BUTTON_H_ */

View file

@ -80,6 +80,7 @@ bool button_scan_enabled(void);
|BUTTON_RC_SOURCE) |BUTTON_RC_SOURCE)
#define POWEROFF_BUTTON BUTTON_OFF #define POWEROFF_BUTTON BUTTON_OFF
#define RC_POWEROFF_BUTTON BUTTON_RC_STOP
#define POWEROFF_COUNT 10 #define POWEROFF_COUNT 10
#endif /* _BUTTON_TARGET_H_ */ #endif /* _BUTTON_TARGET_H_ */

View file

@ -0,0 +1,97 @@
/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
* $Id$
*
* Copyright (C) 2006 by Jens Arnold
*
* 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"
/*
Recorder FM/V2 hardware button hookup
=====================================
F1, F2, F3, UP: connected to AN4 through a resistor network
DOWN, PLAY, LEFT, RIGHT: likewise connected to AN5
The voltage on AN4/ AN5 depends on which keys (or key combo) is pressed
FM/V2 has PLAY and RIGHT switched compared to plain recorder
ON: AN3, low active
OFF: AN2, high active
*/
void button_init_device(void)
{
/* Set PB4 and PB8 as input pins */
PBCR1 &= 0xfffc; /* PB8MD = 00 */
PBCR2 &= 0xfcff; /* PB4MD = 00 */
PBIOR &= ~0x0110; /* Inputs */
}
int button_read_device(void)
{
int btn = BUTTON_NONE;
int data;
/* check F1..F3 and UP */
data = adc_read(ADC_BUTTON_ROW1);
if (data >= 150)
{
if (data >= 545)
if (data >= 700)
btn = BUTTON_F3;
else
btn = BUTTON_UP;
else
if (data >= 385)
btn = BUTTON_F2;
else
btn = BUTTON_F1;
}
/* Some units have mushy keypads, so pressing UP also activates
the Left/Right buttons. Let's combat that by skipping the AN5
checks when UP is pressed. */
if(!(btn & BUTTON_UP))
{
/* check DOWN, PLAY, LEFT, RIGHT */
data = adc_read(ADC_BUTTON_ROW2);
if (data >= 150)
{
if (data >= 545)
if (data >= 700)
btn |= BUTTON_DOWN;
else
btn |= BUTTON_RIGHT;
else
if (data >= 385)
btn |= BUTTON_LEFT;
else
btn |= BUTTON_PLAY;
}
}
if ( adc_read(ADC_BUTTON_ON) < 512 )
btn |= BUTTON_ON;
if ( adc_read(ADC_BUTTON_OFF) > 512 )
btn |= BUTTON_OFF;
return btn;
}

View file

@ -0,0 +1,53 @@
/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
* $Id$
*
* Copyright (C) 2006 by Jens Arnold
*
* 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 <stdbool.h>
#include "config.h"
void button_init_device(void);
int button_read_device(void);
/* Main unit's buttons */
#define BUTTON_ON 0x00000001
#define BUTTON_OFF 0x00000002
#define BUTTON_LEFT 0x00000004
#define BUTTON_RIGHT 0x00000008
#define BUTTON_UP 0x00000010
#define BUTTON_DOWN 0x00000020
#define BUTTON_PLAY 0x00000040
#define BUTTON_F1 0x00000080
#define BUTTON_F2 0x00000100
#define BUTTON_F3 0x00000200
#define BUTTON_MAIN (BUTTON_ON|BUTTON_OFF|BUTTON_LEFT|BUTTON_RIGHT\
|BUTTON_UP|BUTTON_DOWN|BUTTON_PLAY\
|BUTTON_F1|BUTTON_F2|BUTTON_F3)
#define BUTTON_REMOTE 0
#define POWEROFF_BUTTON BUTTON_OFF
#define POWEROFF_COUNT 10
#endif /* _BUTTON_TARGET_H_ */

View file

@ -0,0 +1,65 @@
/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
* $Id$
*
* Copyright (C) 2006 by Jens Arnold
*
* 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"
/*
Ondio hardware button hookup
============================
LEFT, RIGHT, UP, DOWN: connected to AN4 through a resistor network
The voltage on AN4 depends on which keys (or key combo) is pressed
OPTION: AN2, high active (assigned as MENU)
ON/OFF: AN3, low active (assigned as OFF)
*/
int button_read_device(void)
{
int btn = BUTTON_NONE;
int data;
/* Check the 4 direction keys */
data = adc_read(ADC_BUTTON_ROW1);
if (data >= 165)
{
if (data >= 585)
if (data >= 755)
btn = BUTTON_LEFT;
else
btn = BUTTON_RIGHT;
else
if (data >= 415)
btn = BUTTON_UP;
else
btn = BUTTON_DOWN;
}
if(adc_read(ADC_BUTTON_OPTION) > 0x200) /* active high */
btn |= BUTTON_MENU;
if(adc_read(ADC_BUTTON_ONOFF) < 0x120) /* active low */
btn |= BUTTON_OFF;
return btn;
}

View file

@ -0,0 +1,45 @@
/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
* $Id$
*
* Copyright (C) 2006 by Jens Arnold
*
* 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 <stdbool.h>
#include "config.h"
#define button_init_device()
int button_read_device(void);
#define BUTTON_OFF 0x00000001
#define BUTTON_MENU 0x00000002
#define BUTTON_LEFT 0x00000004
#define BUTTON_RIGHT 0x00000008
#define BUTTON_UP 0x00000010
#define BUTTON_DOWN 0x00000020
#define BUTTON_MAIN (BUTTON_OFF|BUTTON_MENU|BUTTON_LEFT|BUTTON_RIGHT\
|BUTTON_UP|BUTTON_DOWN)
#define BUTTON_REMOTE 0
#define POWEROFF_BUTTON BUTTON_OFF
#define POWEROFF_COUNT 10
#endif /* _BUTTON_TARGET_H_ */

View file

@ -0,0 +1,74 @@
/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
* $Id$
*
* Copyright (C) 2006 by Jens Arnold
*
* 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"
/*
Player hardware button hookup
=============================
Player
------
LEFT: AN0
MENU: AN1
RIGHT: AN2
PLAY: AN3
STOP: PA11
ON: PA5
All buttons are low active
*/
void button_init_device(void)
{
/* set PA5 and PA11 as input pins */
PACR1 &= 0xff3f; /* PA11MD = 00 */
PACR2 &= 0xfbff; /* PA5MD = 0 */
PAIOR &= ~0x0820; /* Inputs */
}
int button_read_device(void)
{
int btn = BUTTON_NONE;
int data;
/* buttons are active low */
if (adc_read(0) < 0x180)
btn = BUTTON_LEFT;
if (adc_read(1) < 0x180)
btn |= BUTTON_MENU;
if (adc_read(2) < 0x180)
btn |= BUTTON_RIGHT;
if (adc_read(3) < 0x180)
btn |= BUTTON_PLAY;
/* check port A pins for ON and STOP */
data = PADR;
if ( !(data & 0x0020) )
btn |= BUTTON_ON;
if ( !(data & 0x0800) )
btn |= BUTTON_STOP;
return btn;
}

View file

@ -0,0 +1,56 @@
/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
* $Id$
*
* Copyright (C) 2006 by Jens Arnold
*
* 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 <stdbool.h>
#include "config.h"
#define HAS_SERIAL_REMOTE
void button_init_device(void);
int button_read_device(void);
/* Main unit's buttons */
#define BUTTON_ON 0x00000001
#define BUTTON_STOP 0x00000002
#define BUTTON_LEFT 0x00000004
#define BUTTON_RIGHT 0x00000008
#define BUTTON_PLAY 0x00000010
#define BUTTON_MENU 0x00000020
#define BUTTON_MAIN (BUTTON_ON|BUTTON_STOP|BUTTON_LEFT|BUTTON_RIGHT\
|BUTTON_PLAY|BUTTON_MENU)
/* Remote control's buttons */
#define BUTTON_RC_PLAY 0x00100000
#define BUTTON_RC_STOP 0x00080000
#define BUTTON_RC_LEFT 0x00040000
#define BUTTON_RC_RIGHT 0x00020000
#define BUTTON_RC_VOL_UP 0x00010000
#define BUTTON_RC_VOL_DOWN 0x00008000
#define BUTTON_REMOTE (BUTTON_RC_PLAY|BUTTON_RC_STOP\
|BUTTON_RC_LEFT|BUTTON_RC_RIGHT\
|BUTTON_RC_VOL_UP|BUTTON_RC_VOL_DOWN)
#endif /* _BUTTON_TARGET_H_ */

View file

@ -0,0 +1,108 @@
/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
* $Id$
*
* Copyright (C) 2006 by Jens Arnold
*
* 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"
/*
Recorder hardware button hookup
===============================
F1, F2, F3, UP: connected to AN4 through a resistor network
DOWN, PLAY, LEFT, RIGHT: likewise connected to AN5
The voltage on AN4/ AN5 depends on which keys (or key combo) is pressed
ON: PB8, low active
OFF: PB4, low active
*/
void button_init_device(void)
{
/* Set PB4 and PB8 as input pins */
PBCR1 &= 0xfffc; /* PB8MD = 00 */
PBCR2 &= 0xfcff; /* PB4MD = 00 */
PBIOR &= ~0x0110; /* Inputs */
}
int button_read_device(void)
{
int btn = BUTTON_NONE;
int data;
static int off_button_count = 0;
/* check F1..F3 and UP */
data = adc_read(ADC_BUTTON_ROW1);
if (data >= 250)
{
if (data >= 700)
if (data >= 900)
btn = BUTTON_F3;
else
btn = BUTTON_UP;
else
if (data >= 500)
btn = BUTTON_F2;
else
btn = BUTTON_F1;
}
/* Some units have mushy keypads, so pressing UP also activates
the Left/Right buttons. Let's combat that by skipping the AN5
checks when UP is pressed. */
if(!(btn & BUTTON_UP))
{
/* check DOWN, PLAY, LEFT, RIGHT */
data = adc_read(ADC_BUTTON_ROW2);
if (data >= 250)
{
if (data >= 700)
if (data >= 900)
btn |= BUTTON_DOWN;
else
btn |= BUTTON_PLAY;
else
if (data >= 500)
btn |= BUTTON_LEFT;
else
btn |= BUTTON_RIGHT;
}
}
/* check port B pins for ON and OFF */
data = PBDR;
if ((data & 0x0100) == 0)
btn |= BUTTON_ON;
if ((data & 0x0010) == 0)
{
/* When the batteries are low, the low-battery shutdown logic causes
* spurious OFF events due to voltage fluctuation on some units.
* Only accept OFF when read several times in sequence. */
if (++off_button_count > 3)
btn |= BUTTON_OFF;
}
else
off_button_count = 0;
return btn;
}

View file

@ -0,0 +1,63 @@
/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
* $Id$
*
* Copyright (C) 2006 by Jens Arnold
*
* 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 <stdbool.h>
#include "config.h"
#define HAS_SERIAL_REMOTE
void button_init_device(void);
int button_read_device(void);
/* Main unit's buttons */
#define BUTTON_ON 0x00000001
#define BUTTON_OFF 0x00000002
#define BUTTON_LEFT 0x00000004
#define BUTTON_RIGHT 0x00000008
#define BUTTON_UP 0x00000010
#define BUTTON_DOWN 0x00000020
#define BUTTON_PLAY 0x00000040
#define BUTTON_F1 0x00000080
#define BUTTON_F2 0x00000100
#define BUTTON_F3 0x00000200
#define BUTTON_MAIN (BUTTON_ON|BUTTON_OFF|BUTTON_LEFT|BUTTON_RIGHT\
|BUTTON_UP|BUTTON_DOWN|BUTTON_PLAY\
|BUTTON_F1|BUTTON_F2|BUTTON_F3)
/* Remote control's buttons */
#define BUTTON_RC_PLAY 0x00100000
#define BUTTON_RC_STOP 0x00080000
#define BUTTON_RC_LEFT 0x00040000
#define BUTTON_RC_RIGHT 0x00020000
#define BUTTON_RC_VOL_UP 0x00010000
#define BUTTON_RC_VOL_DOWN 0x00008000
#define BUTTON_REMOTE (BUTTON_RC_PLAY|BUTTON_RC_STOP\
|BUTTON_RC_LEFT|BUTTON_RC_RIGHT\
|BUTTON_RC_VOL_UP|BUTTON_RC_VOL_DOWN)
#endif /* _BUTTON_TARGET_H_ */

18
tools/configure vendored
View file

@ -640,6 +640,9 @@ EOF
# firmware/Makefile assumes it is present always, and 2) we will need it when we # firmware/Makefile assumes it is present always, and 2) we will need it when we
# build the player simulator # build the player simulator
t_cpu="sh"
t_manufacturer="archos"
t_model="player"
;; ;;
1|recorder) 1|recorder)
@ -659,6 +662,9 @@ EOF
# toolset is the tools within the tools directory that we build for # toolset is the tools within the tools directory that we build for
# this particular target. # this particular target.
toolset=$archosbitmaptools toolset=$archosbitmaptools
t_cpu="sh"
t_manufacturer="archos"
t_model="recorder"
;; ;;
2|fmrecorder) 2|fmrecorder)
@ -678,6 +684,9 @@ EOF
# toolset is the tools within the tools directory that we build for # toolset is the tools within the tools directory that we build for
# this particular target. # this particular target.
toolset=$archosbitmaptools toolset=$archosbitmaptools
t_cpu="sh"
t_manufacturer="archos"
t_model="fm_v2"
;; ;;
3|recorderv2) 3|recorderv2)
@ -697,6 +706,9 @@ EOF
# toolset is the tools within the tools directory that we build for # toolset is the tools within the tools directory that we build for
# this particular target. # this particular target.
toolset=$archosbitmaptools toolset=$archosbitmaptools
t_cpu="sh"
t_manufacturer="archos"
t_model="fm_v2"
;; ;;
4|ondiosp) 4|ondiosp)
@ -716,6 +728,9 @@ EOF
# toolset is the tools within the tools directory that we build for # toolset is the tools within the tools directory that we build for
# this particular target. # this particular target.
toolset=$archosbitmaptools toolset=$archosbitmaptools
t_cpu="sh"
t_manufacturer="archos"
t_model="ondio"
;; ;;
5|ondiofm) 5|ondiofm)
@ -733,6 +748,9 @@ EOF
plugins="yes" plugins="yes"
codecs="" codecs=""
toolset=$archosbitmaptools toolset=$archosbitmaptools
t_cpu="sh"
t_manufacturer="archos"
t_model="ondio"
;; ;;
10|h120) 10|h120)