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:
parent
e43f56b58d
commit
0e6dd7efcd
18 changed files with 625 additions and 368 deletions
|
@ -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 )
|
||||||
{
|
{
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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_ */
|
||||||
|
|
||||||
|
|
|
@ -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_ */
|
||||||
|
|
97
firmware/target/sh/archos/fm_v2/button-fm_v2.c
Executable file
97
firmware/target/sh/archos/fm_v2/button-fm_v2.c
Executable 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;
|
||||||
|
}
|
53
firmware/target/sh/archos/fm_v2/button-target.h
Executable file
53
firmware/target/sh/archos/fm_v2/button-target.h
Executable 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_ */
|
65
firmware/target/sh/archos/ondio/button-ondio.c
Executable file
65
firmware/target/sh/archos/ondio/button-ondio.c
Executable 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;
|
||||||
|
}
|
45
firmware/target/sh/archos/ondio/button-target.h
Executable file
45
firmware/target/sh/archos/ondio/button-target.h
Executable 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_ */
|
74
firmware/target/sh/archos/player/button-player.c
Executable file
74
firmware/target/sh/archos/player/button-player.c
Executable 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;
|
||||||
|
}
|
56
firmware/target/sh/archos/player/button-target.h
Executable file
56
firmware/target/sh/archos/player/button-target.h
Executable 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_ */
|
108
firmware/target/sh/archos/recorder/button-recorder.c
Executable file
108
firmware/target/sh/archos/recorder/button-recorder.c
Executable 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;
|
||||||
|
}
|
63
firmware/target/sh/archos/recorder/button-target.h
Executable file
63
firmware/target/sh/archos/recorder/button-target.h
Executable 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
18
tools/configure
vendored
|
@ -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)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue