Finally, the new button action system is here, thanks to Jonathan Gordon. Some button mappings have changed and other things may break. Comments should go to the forum, http://forums.rockbox.org/index.php?topic=5829.0 or the mailing list.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@10582 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Linus Nielsen Feltzing 2006-08-15 12:27:07 +00:00
parent c0f8b18770
commit 224c0a13eb
47 changed files with 1986 additions and 1846 deletions

View file

@ -1,6 +1,7 @@
#ifdef ROCKBOX_HAS_LOGF #ifdef ROCKBOX_HAS_LOGF
logfdisp.c logfdisp.c
#endif #endif
action.c
alarm_menu.c alarm_menu.c
abrepeat.c abrepeat.c
bookmark.c bookmark.c
@ -81,3 +82,18 @@ eq_menu.c
#endif #endif
metadata.c metadata.c
tagcache.c tagcache.c
#if (CONFIG_KEYPAD == IRIVER_H100_PAD) \
|| (CONFIG_KEYPAD == IRIVER_H300_PAD)
keymaps/keymap-h1x0_h3x0.c
#elif ((CONFIG_KEYPAD == IPOD_4G_PAD) \
|| (CONFIG_KEYPAD == IPOD_3G_PAD))
keymaps/keymap-ipod.c
#elif CONFIG_KEYPAD == RECORDER_PAD
keymaps/keymap-recorder.c
#elif CONFIG_KEYPAD == ONDIO_PAD
keymaps/keymap-ondio.c
#elif CONFIG_KEYPAD == PLAYER_PAD
keymaps/keymap-player.c
#elif CONFIG_KEYPAD == IAUDIO_X5_PAD
keymaps/keymap-x5.c
#endif

215
apps/action.c Normal file
View file

@ -0,0 +1,215 @@
/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
*
* Copyright (C) 2006 Jonathan Gordon
*
* 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 <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "config.h"
#include "button.h"
#include "action.h"
#include "kernel.h"
#include "debug.h"
bool ignore_until_release = false;
int last_button = BUTTON_NONE;
int soft_unlock_action = ACTION_NONE;
bool allow_remote_actions = true;
/*
* do_button_check is the worker function for get_default_action.
* returns ACTION_UNKNOWN or the requested return value from the list.
*/
inline int do_button_check(struct button_mapping *items,
int button, int last_button, int *start)
{
int i = 0;
int ret = ACTION_UNKNOWN;
if (items == NULL)
return ACTION_UNKNOWN;
/* Special case to make the keymaps smaller */
if(button & BUTTON_REPEAT)
last_button &= ~BUTTON_REPEAT;
while (items[i].button_code != BUTTON_NONE)
{
if (items[i].button_code == button)
{
if (items[i].pre_button_code != BUTTON_NONE)
{
if ((items[i].pre_button_code == last_button) ||
(items[i].button_code == last_button))
{
ret = items[i].action_code;
break;
}
}
else
{
ret = items[i].action_code;
break;
}
}
i++;
}
*start = i;
return ret;
}
inline int get_next_context(struct button_mapping *items, int i)
{
while (items[i].button_code != BUTTON_NONE)
i++;
return (items[i].action_code == ACTION_NONE ) ?
CONTEXT_STD :
items[i].action_code;
}
/*
* int get_action_worker(int context, struct button_mapping *user_mappings,
int timeout)
This function searches the button list for the given context for the just
pressed button.
If there is a match it returns the value from the list.
If there is no match..
the last item in the list "points" to the next context in a chain
so the "chain" is followed until the button is found.
putting ACTION_NONE will get CONTEXT_STD which is always the last list checked.
Timeout can be TIMEOUT_NOBLOCK to return immediatly
TIMEOUT_BLOCK to wait for a button press
Any number >0 to wait that many ticks for a press
*/
int get_action_worker(int context, int timeout,
struct button_mapping* (*get_context_map)(int) )
{
struct button_mapping *items = NULL;
int button;
int i=0;
int ret = ACTION_UNKNOWN;
if (timeout == TIMEOUT_NOBLOCK)
button = button_get(false);
else if (timeout == TIMEOUT_BLOCK)
button = button_get(true);
else
button = button_get_w_tmo(timeout);
if (button == BUTTON_NONE || button&SYS_EVENT)
{
return button;
}
if (ignore_until_release == true)
{
if (button&BUTTON_REL)
{
ignore_until_release = false;
}
/*last_button = BUTTON_NONE; this is done by action_signalscreenchange() */
return ACTION_UNKNOWN; /* "safest" return value */
}
if (soft_unlock_action != ACTION_NONE)
{
if ((button&BUTTON_REMOTE) && !allow_remote_actions)
return ACTION_NONE;
}
/* logf("%x,%x",last_button,button); */
do
{
/* logf("context = %x",context); */
#if (BUTTON_REMOTE != 0)
if (button&BUTTON_REMOTE)
context |= CONTEXT_REMOTE;
#endif
if ((context&CONTEXT_CUSTOM) && get_context_map)
items = get_context_map(context);
else
items = get_context_mapping(context);
ret = do_button_check(items,button,last_button,&i);
if ((context == CONTEXT_STD)
#if (BUTTON_REMOTE != 0)
|| ((unsigned)context == (CONTEXT_STD|CONTEXT_REMOTE))
#endif
) break;
if (ret == ACTION_UNKNOWN )
{
context = get_next_context(items,i);
i = 0;
}
else break;
} while (1);
/* DEBUGF("ret = %x\n",ret); */
if (soft_unlock_action != ACTION_NONE)
{
if ((button&BUTTON_REMOTE) == 0)
{
if (soft_unlock_action == ret)
{
soft_unlock_action = ACTION_NONE;
ret = ACTION_NONE; /* no need to return the code */
}
}
else if (!allow_remote_actions)
ret = ACTION_NONE;
}
last_button = button;
return ret;
}
int get_action(int context, int timeout)
{
return get_action_worker(context,timeout,NULL);
}
int get_custom_action(int context,int timeout,
struct button_mapping* (*get_context_map)(int))
{
return get_action_worker(context,timeout,get_context_map);
}
bool action_userabort(int timeout)
{
action_signalscreenchange();
int action = get_action_worker(CONTEXT_STD,timeout,NULL);
bool ret = (action == ACTION_STD_CANCEL);
action_signalscreenchange();
return ret;
}
void action_signalscreenchange(void)
{
if ((last_button != BUTTON_NONE) &&
!(last_button&BUTTON_REL))
{
ignore_until_release = true;
}
last_button = BUTTON_NONE;
}
void action_setsoftwarekeylock(int unlock_action, bool allow_remote)
{
soft_unlock_action = unlock_action;
allow_remote_actions = allow_remote;
last_button = BUTTON_NONE;
}

View file

@ -19,11 +19,147 @@
#define __ACTION_H__ #define __ACTION_H__
#include "stdbool.h" #include "stdbool.h"
#include "button.h"
#define CONTEXT_WPS 1 #define LAST_ITEM_IN_LIST { ACTION_NONE, BUTTON_NONE, BUTTON_NONE }
#define CONTEXT_TREE 2 #define LAST_ITEM_IN_LIST__NEXTLIST(a) { a, BUTTON_NONE, BUTTON_NONE }
#define CONTEXT_RECORD 3
#define CONTEXT_MAINMENU 4 #define TIMEOUT_BLOCK -1
#define CONTEXT_ID3DB 5 #define TIMEOUT_NOBLOCK 0
#define CONTEXT_REMOTE 0x80000000 /* | this against another context to get remote buttons for that context */
#define CONTEXT_CUSTOM 0x40000000 /* | this against anything to get your context number */
enum {
CONTEXT_STD = 0,
/* These CONTEXT_ values were here before me,
there values may have significance, so dont touch! */
CONTEXT_WPS = 1,
CONTEXT_TREE = 2,
CONTEXT_RECORD = 3,
CONTEXT_MAINMENU = 4,
CONTEXT_ID3DB = 5,
/* Add new contexts here, no need to explicitly define a value for them */
CONTEXT_LIST,
CONTEXT_SETTINGS, /* options style settings, like from menus */
CONTEXT_SETTINGSGRAPHICAL, /* screens like eq config and colour chooser */
CONTEXT_YESNOSCREEN, /*NOTE: make sure your target has this and ACTION_YESNO_ACCEPT */
CONTEXT_BOOKMARKSCREEN, /*NOTE: requires the action_setting_* mappings also */
CONTEXT_QUICKSCREEN, /* uses ACTION_QS_ defines below */
};
enum {
ACTION_NONE = BUTTON_NONE,
ACTION_UNKNOWN,
/* standard actions, use these first */
ACTION_STD_PREV,
ACTION_STD_PREVREPEAT,
ACTION_STD_NEXT,
ACTION_STD_NEXTREPEAT,
ACTION_STD_OK,
ACTION_STD_CANCEL,
ACTION_STD_CONTEXT,
ACTION_STD_MENU,
ACTION_STD_QUICKSCREEN,
ACTION_STD_KEYLOCK, /* software keylock in wps screen, very optional
use with action_setsoftwarekeylock */
/* code context actions */
/* WPS codes */
ACTION_WPS_BROWSE,
ACTION_WPS_PLAY,
ACTION_WPS_SEEKBACK,
ACTION_WPS_SEEKFWD,
ACTION_WPS_STOPSEEK,
ACTION_WPS_SKIPNEXT,
ACTION_WPS_SKIPPREV,
ACTION_WPS_STOP,
ACTION_WPS_VOLDOWN,
ACTION_WPS_VOLUP,
ACTION_WPS_NEXTDIR,/* optional */
ACTION_WPS_PREVDIR,/* optional */
ACTION_WPS_PITCHSCREEN,/* optional */
ACTION_WPS_ID3SCREEN,/* optional */
ACTION_WPS_CONTEXT,
ACTION_WPS_QUICKSCREEN,/* optional */
ACTION_WPS_MENU, /*this should be the same as ACTION_STD_MENU */
/* following code are for AB mode in wps,
only needed if defined(AB_REPEAT_ENABLE) */
ACTION_WPSAB_SINGLE, /* No targets use this, but leave n just-in-case! */
ACTION_WPSAB_SETA, /* either #define WPS_AB_SHARE_DIR_BUTTONS */
ACTION_WPSAB_SETB, /* OR implement ACTION_WPSAB_SET[AB] */
ACTION_WPSAB_RESET,
/* list and tree page up/down */
ACTION_LISTTREE_PGUP,/* optional */
ACTION_LISTTREE_PGDOWN,/* optional */
ACTION_LISTTREE_RC_PGUP,/* optional */
ACTION_LISTTREE_RC_PGDOWN,/* optional */
/* tree */
ACTION_TREE_PGLEFT,/* optional */
ACTION_TREE_PGRIGHT,/* optional */
ACTION_TREE_STOP,
ACTION_TREE_WPS,
/* recording screen */
/* main menu */
/* id3db */
/* list */
/* settings */
ACTION_SETTINGS_INC,
ACTION_SETTINGS_INCREPEAT,
ACTION_SETTINGS_DEC,
ACTION_SETTINGS_DECREPEAT,
/* yesno screen */
ACTION_YESNO_ACCEPT,
/* bookmark screen */
ACTION_BMARK_DELETE,
/* quickscreen */
ACTION_QS_LEFT,
ACTION_QS_RIGHT,
ACTION_QS_DOWN,
ACTION_QS_DOWNINV, /* why is this not called up?? :p */
};
struct button_mapping {
int action_code;
int button_code;
int pre_button_code;
};
/* use if you want to supply your own button mappings, PLUGINS ONLY */
/* get_context_map is a function which returns a button_mapping* depedning on the given context */
/* custom button_mappings may "chain" to inbuilt CONTEXT's */
int get_custom_action(int context,int timeout,
struct button_mapping* (*get_context_map)(int));
/* use if one of the standard CONTEXT_ mappings will work (ALL the core should be using this! */
int get_action(int context, int timeout);
/* call this whenever you leave your button loop */
void action_signalscreenchange(void);
/* call this if you need to check for ACTION_STD_CANCEL only (i.e user abort! */
bool action_userabort(int timeout);
/* on targets without hardware keylock, use this to to emulate keylock.
unlock_action is the action which will disaable the keylock
allow_remote should be true if you want the remote buttons to still be usable while locked */
void action_setsoftwarekeylock(int unlock_action, bool allow_remote);
/* no other code should need this apart from action.c */
struct button_mapping* get_context_mapping(int context);
#endif #endif

View file

@ -25,7 +25,7 @@
#include "options.h" #include "options.h"
#include "lcd.h" #include "lcd.h"
#include "button.h" #include "action.h"
#include "kernel.h" #include "kernel.h"
#include "sprintf.h" #include "sprintf.h"
#include <string.h> #include <string.h>
@ -56,6 +56,7 @@ bool alarm_screen(void)
int button; int button;
int i; int i;
bool update = true; bool update = true;
rtc_get_alarm(&h, &m); rtc_get_alarm(&h, &m);
@ -84,10 +85,10 @@ bool alarm_screen(void)
screens[i].puts(0, 1, buf); screens[i].puts(0, 1, buf);
gui_textarea_update(&screens[i]); gui_textarea_update(&screens[i]);
} }
button = button_get_w_tmo(HZ); button = get_action(CONTEXT_SETTINGS,HZ);
switch(button) { switch(button) {
case BUTTON_PLAY: case ACTION_STD_OK:
/* prevent that an alarm occurs in the shutdown procedure */ /* prevent that an alarm occurs in the shutdown procedure */
/* accept alarms only if they are in 2 minutes or more */ /* accept alarms only if they are in 2 minutes or more */
tm = get_time(); tm = get_time();
@ -106,8 +107,8 @@ bool alarm_screen(void)
break; break;
/* inc(m) */ /* inc(m) */
case BUTTON_RIGHT: case ACTION_SETTINGS_INC:
case BUTTON_RIGHT | BUTTON_REPEAT: case ACTION_SETTINGS_INCREPEAT:
m += 5; m += 5;
if (m == 60) { if (m == 60) {
h += 1; h += 1;
@ -118,8 +119,8 @@ bool alarm_screen(void)
break; break;
/* dec(m) */ /* dec(m) */
case BUTTON_LEFT: case ACTION_SETTINGS_DEC:
case BUTTON_LEFT | BUTTON_REPEAT: case ACTION_SETTINGS_DECREPEAT:
m -= 5; m -= 5;
if (m == -5) { if (m == -5) {
h -= 1; h -= 1;
@ -129,32 +130,25 @@ bool alarm_screen(void)
h = 23; h = 23;
break; break;
#if CONFIG_KEYPAD == RECORDER_PAD
/* inc(h) */ /* inc(h) */
case BUTTON_UP: case ACTION_STD_NEXT:
case BUTTON_UP | BUTTON_REPEAT: case ACTION_STD_NEXTREPEAT:
h = (h+1) % 24; h = (h+1) % 24;
break; break;
/* dec(h) */ /* dec(h) */
case BUTTON_DOWN: case ACTION_STD_PREV:
case BUTTON_DOWN | BUTTON_REPEAT: case ACTION_STD_NEXTREPEAT:
h = (h+23) % 24; h = (h+23) % 24;
break; break;
#endif
#if CONFIG_KEYPAD == RECORDER_PAD case ACTION_STD_CANCEL:
case BUTTON_OFF:
#else
case BUTTON_STOP:
case BUTTON_MENU:
#endif
rtc_enable_alarm(false); rtc_enable_alarm(false);
gui_syncsplash(HZ*2, true, str(LANG_ALARM_MOD_DISABLE)); gui_syncsplash(HZ*2, true, str(LANG_ALARM_MOD_DISABLE));
done = true; done = true;
break; break;
case BUTTON_NONE: case ACTION_NONE:
gui_syncstatusbar_draw(&statusbars, false); gui_syncstatusbar_draw(&statusbars, false);
break; break;
@ -167,7 +161,7 @@ bool alarm_screen(void)
break; break;
} }
} }
action_signalscreenchange();
return false; return false;
} }

View file

@ -24,7 +24,7 @@
#include "applimits.h" #include "applimits.h"
#include "lcd.h" #include "lcd.h"
#include "button.h" #include "action.h"
#include "usb.h" #include "usb.h"
#include "audio.h" #include "audio.h"
#include "playlist.h" #include "playlist.h"
@ -458,30 +458,24 @@ bool bookmark_autoload(const char* file)
while(!done) while(!done)
{ {
/* Wait for a key to be pushed */ /* Wait for a key to be pushed */
key = button_get(true); key = get_action(CONTEXT_SETTINGS,TIMEOUT_BLOCK);
switch(key) switch(key)
{ {
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
#ifdef BOOKMARK_RC_DOWN case ACTION_STD_NEXT:
case BOOKMARK_RC_DOWN:
#endif
case BOOKMARK_DOWN:
return bookmark_load(global_bookmark_file_name, false); return bookmark_load(global_bookmark_file_name, false);
#endif #endif
#ifdef SETTINGS_RC_OK case ACTION_STD_OK:
case SETTINGS_RC_OK:
#endif
case SETTINGS_OK:
return bookmark_load(global_bookmark_file_name, true); return bookmark_load(global_bookmark_file_name, true);
default: default:
/* Handle sys events, ignore button releases & repeats */ /* Handle sys events, ignore button releases & repeats */
if (default_event_handler(key) || if (default_event_handler(key))
!(key & (BUTTON_REPEAT|BUTTON_REL)))
done = true; done = true;
break; break;
} }
} }
action_signalscreenchange();
return false; return false;
} }
} }
@ -571,7 +565,6 @@ static char* select_bookmark(const char* bookmark_file_name)
int bookmark_id = 0; int bookmark_id = 0;
int bookmark_id_prev = -1; int bookmark_id_prev = -1;
int key; int key;
int lastkey = BUTTON_NONE;
char* bookmark = NULL; char* bookmark = NULL;
int bookmark_count = 0; int bookmark_count = 0;
@ -605,6 +598,7 @@ static char* select_bookmark(const char* bookmark_file_name)
{ {
gui_syncsplash(HZ, true, str(LANG_BOOKMARK_LOAD_EMPTY)); gui_syncsplash(HZ, true, str(LANG_BOOKMARK_LOAD_EMPTY));
remove(bookmark_file_name); remove(bookmark_file_name);
action_signalscreenchange();
return NULL; return NULL;
} }
else else
@ -621,17 +615,10 @@ static char* select_bookmark(const char* bookmark_file_name)
} }
/* waiting for the user to click a button */ /* waiting for the user to click a button */
key = button_get(true); key = get_action(CONTEXT_BOOKMARKSCREEN,TIMEOUT_BLOCK);
switch(key) switch(key)
{ {
#ifdef BOOKMARK_RC_SELECT case ACTION_STD_OK:
case BOOKMARK_RC_SELECT:
#endif
case BOOKMARK_SELECT:
#ifdef BOOKMARK_SELECT_PRE
if (lastkey != BOOKMARK_SELECT_PRE)
break;
#endif
/* User wants to use this bookmark */ /* User wants to use this bookmark */
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
if (global_settings.statusbar) if (global_settings.statusbar)
@ -645,11 +632,10 @@ static char* select_bookmark(const char* bookmark_file_name)
screens[i].setmargins(0, 0); screens[i].setmargins(0, 0);
} }
#endif #endif
action_signalscreenchange();
return bookmark; return bookmark;
#ifdef BOOKMARK_RC_DELETE
case BOOKMARK_RC_DELETE: case ACTION_BMARK_DELETE:
#endif
case BOOKMARK_DELETE:
/* User wants to delete this bookmark */ /* User wants to delete this bookmark */
delete_bookmark(bookmark_file_name, bookmark_id); delete_bookmark(bookmark_file_name, bookmark_id);
bookmark_id_prev=-2; bookmark_id_prev=-2;
@ -658,54 +644,32 @@ static char* select_bookmark(const char* bookmark_file_name)
bookmark_id = bookmark_count -1; bookmark_id = bookmark_count -1;
break; break;
#ifdef SETTINGS_RC_DEC case ACTION_SETTINGS_DEC:
case SETTINGS_RC_DEC:
case SETTINGS_RC_DEC | BUTTON_REPEAT:
#endif
case SETTINGS_DEC:
case SETTINGS_DEC | BUTTON_REPEAT:
bookmark_id--; bookmark_id--;
break; break;
#ifdef SETTINGS_RC_DEC case ACTION_SETTINGS_INC:
case SETTINGS_RC_INC:
case SETTINGS_RC_INC | BUTTON_REPEAT:
#endif
case SETTINGS_INC:
case SETTINGS_INC | BUTTON_REPEAT:
bookmark_id++; bookmark_id++;
break; break;
#ifdef SETTINGS_RC_CANCEL case ACTION_STD_CANCEL:
case SETTINGS_RC_CANCEL:
#endif
#ifdef SETTINGS_RC_CANCEL2
case SETTINGS_RC_CANCEL2:
#endif
case SETTINGS_CANCEL:
#ifdef SETTINGS_CANCEL2
case SETTINGS_CANCEL2:
#endif
#ifdef SETTINGS_RC_OK2
case SETTINGS_RC_OK2:
#endif
#ifdef SETTINGS_OK2
case SETTINGS_OK2:
#endif
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
FOR_NB_SCREENS(i) FOR_NB_SCREENS(i)
screens[i].setmargins(x, y); screens[i].setmargins(x, y);
#endif #endif
action_signalscreenchange();
return NULL; return NULL;
default: default:
if(default_event_handler(key) == SYS_USB_CONNECTED) if(default_event_handler(key) == SYS_USB_CONNECTED)
{
action_signalscreenchange();
return NULL; return NULL;
}
break; break;
} }
lastkey = key;
} }
action_signalscreenchange();
return NULL; return NULL;
} }

View file

@ -21,54 +21,6 @@
#include <stdbool.h> #include <stdbool.h>
#if CONFIG_KEYPAD == ONDIO_PAD
#define BOOKMARK_SELECT_PRE BUTTON_RIGHT
#define BOOKMARK_SELECT (BUTTON_RIGHT | BUTTON_REL)
#define BOOKMARK_DELETE (BUTTON_RIGHT | BUTTON_REPEAT)
#define BOOKMARK_DOWN BUTTON_DOWN
#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \
(CONFIG_KEYPAD == IRIVER_H300_PAD)
#define BOOKMARK_SELECT BUTTON_SELECT
#define BOOKMARK_DELETE (BUTTON_ON | BUTTON_SELECT)
#define BOOKMARK_DOWN BUTTON_DOWN
#define BOOKMARK_RC_SELECT BUTTON_RC_MENU
#define BOOKMARK_RC_DELETE (BUTTON_RC_ON | BUTTON_RC_MENU)
#define BOOKMARK_RC_DOWN BUTTON_RC_FF
#define BOOKMARK_RC_EXIT BUTTON_RC_STOP
#elif (CONFIG_KEYPAD == IPOD_3G_PAD) || (CONFIG_KEYPAD == IPOD_4G_PAD)
#define BOOKMARK_SELECT BUTTON_SELECT
#define BOOKMARK_DELETE (BUTTON_RIGHT | BUTTON_REPEAT)
#define BOOKMARK_DOWN BUTTON_SCROLL_FWD
#elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD
#define BOOKMARK_SELECT BUTTON_SELECT
#define BOOKMARK_DELETE (BUTTON_PLAY | BUTTON_SELECT)
#define BOOKMARK_DOWN BUTTON_DOWN
#elif CONFIG_KEYPAD == IAUDIO_X5_PAD
#define BOOKMARK_SELECT BUTTON_SELECT
#define BOOKMARK_DELETE BUTTON_REC | BUTTON_REPEAT
#define BOOKMARK_DOWN BUTTON_DOWN
#elif CONFIG_KEYPAD == GIGABEAT_PAD
#define BOOKMARK_SELECT BUTTON_MENU
#define BOOKMARK_DELETE BUTTON_POWER
#define BOOKMARK_DOWN BUTTON_A
#elif CONFIG_KEYPAD == IRIVER_H10_PAD
#define BOOKMARK_SELECT BUTTON_PLAY
#define BOOKMARK_DELETE (BUTTON_FF | BUTTON_REPEAT)
#define BOOKMARK_DOWN BUTTON_SCROLL_DOWN
#else /* player, recorder, gmini */
#define BOOKMARK_SELECT BUTTON_PLAY
#define BOOKMARK_DELETE (BUTTON_ON | BUTTON_PLAY)
#define BOOKMARK_DOWN BUTTON_DOWN
#endif
bool bookmark_load_menu(void); bool bookmark_load_menu(void);
bool bookmark_autobookmark(void); bool bookmark_autobookmark(void);
bool bookmark_create_menu(void); bool bookmark_create_menu(void);

View file

@ -27,7 +27,7 @@
#include "debug_menu.h" #include "debug_menu.h"
#include "kernel.h" #include "kernel.h"
#include "sprintf.h" #include "sprintf.h"
#include "button.h" #include "action.h"
#include "adc.h" #include "adc.h"
#include "mas.h" #include "mas.h"
#include "power.h" #include "power.h"
@ -86,7 +86,6 @@ extern const char *thread_name[];
bool dbg_os(void) bool dbg_os(void)
{ {
char buf[32]; char buf[32];
int button;
int i; int i;
int usage; int usage;
@ -106,13 +105,8 @@ bool dbg_os(void)
lcd_update(); lcd_update();
button = button_get_w_tmo(HZ/10); if (action_userabort(TIMEOUT_BLOCK))
return false;
switch(button)
{
case SETTINGS_CANCEL:
return false;
}
} }
return false; return false;
} }
@ -134,20 +128,21 @@ bool dbg_os(void)
snprintf(buf, 32, "%d: %d%% ", currval, usage); snprintf(buf, 32, "%d: %d%% ", currval, usage);
lcd_puts(0, 1, buf); lcd_puts(0, 1, buf);
button = button_get_w_tmo(HZ/10); button = get_action(CONTEXT_SETTINGS,HZ/10);
switch(button) switch(button)
{ {
case SETTINGS_CANCEL: case ACTION_STD_CANCEL:
action_signalscreenchange();
return false; return false;
case SETTINGS_DEC: case ACTION_SETTINGS_DEC:
currval--; currval--;
if(currval < 0) if(currval < 0)
currval = num_threads-1; currval = num_threads-1;
break; break;
case SETTINGS_INC: case ACTION_SETTINGS_INC:
currval++; currval++;
if(currval > num_threads-1) if(currval > num_threads-1)
currval = 0; currval = 0;
@ -163,7 +158,6 @@ bool dbg_os(void)
bool dbg_audio_thread(void) bool dbg_audio_thread(void)
{ {
char buf[32]; char buf[32];
int button;
struct audio_debug d; struct audio_debug d;
lcd_setmargins(0, 0); lcd_setmargins(0, 0);
@ -171,12 +165,8 @@ bool dbg_audio_thread(void)
while(1) while(1)
{ {
button = button_get_w_tmo(HZ/5); if (action_userabort(HZ/5))
switch(button) return false;
{
case SETTINGS_CANCEL:
return false;
}
audio_get_debugdata(&d); audio_get_debugdata(&d);
@ -242,23 +232,22 @@ bool dbg_audio_thread(void)
lcd_setmargins(0, 0); lcd_setmargins(0, 0);
lcd_setfont(FONT_SYSFIXED); lcd_setfont(FONT_SYSFIXED);
while(!done) while(!done)
{ {
button = button_get_w_tmo(HZ/5); button = get_action(CONTEXT_STD,HZ/5);
switch(button) switch(button)
{ {
case SETTINGS_NEXT: case ACTION_STD_NEXT:
audio_next(); audio_next();
break; break;
case SETTINGS_PREV: case ACTION_STD_PREV:
audio_prev(); audio_prev();
break; break;
case SETTINGS_CANCEL: case ACTION_STD_CANCEL:
done = true; done = true;
break; break;
} }
action_signalscreenchange();
line = 0; line = 0;
lcd_clear_display(); lcd_clear_display();
@ -406,7 +395,6 @@ bool dbg_hw_info(void)
{ {
#if CONFIG_CPU == SH7034 #if CONFIG_CPU == SH7034
char buf[32]; char buf[32];
int button;
int usb_polarity; int usb_polarity;
int pr_polarity; int pr_polarity;
int bitmask = *(unsigned short*)0x20000fc; int bitmask = *(unsigned short*)0x20000fc;
@ -494,13 +482,11 @@ bool dbg_hw_info(void)
while(1) while(1)
{ {
button = button_get(true); if (action_userabort(TIMEOUT_BLOCK))
if(button == SETTINGS_CANCEL)
return false; return false;
} }
#elif CONFIG_CPU == MCF5249 || CONFIG_CPU == MCF5250 #elif CONFIG_CPU == MCF5249 || CONFIG_CPU == MCF5250
char buf[32]; char buf[32];
int button;
unsigned manu, id; /* flash IDs */ unsigned manu, id; /* flash IDs */
bool got_id; /* flag if we managed to get the flash IDs */ bool got_id; /* flag if we managed to get the flash IDs */
int oldmode; /* saved memory guard mode */ int oldmode; /* saved memory guard mode */
@ -530,13 +516,11 @@ bool dbg_hw_info(void)
while(1) while(1)
{ {
button = button_get(true); if (action_userabort(TIMEOUT_BLOCK))
if(button == SETTINGS_CANCEL)
return false; return false;
} }
#elif CONFIG_CPU == PP5020 #elif CONFIG_CPU == PP5020
char buf[32]; char buf[32];
int button;
lcd_setmargins(0, 0); lcd_setmargins(0, 0);
lcd_setfont(FONT_SYSFIXED); lcd_setfont(FONT_SYSFIXED);
@ -551,8 +535,7 @@ bool dbg_hw_info(void)
while(1) while(1)
{ {
button = button_get(true); if (action_userabort(TIMEOUT_BLOCK))
if(button == SETTINGS_CANCEL)
return false; return false;
} }
#endif /* CONFIG_CPU */ #endif /* CONFIG_CPU */
@ -641,20 +624,21 @@ bool dbg_hw_info(void)
lcd_puts(0, 1, buf); lcd_puts(0, 1, buf);
lcd_update(); lcd_update();
button = button_get(true); button = get_action(CONTEXT_SETTINGS,TIMEOUT_BLOCK);
switch(button) switch(button)
{ {
case SETTINGS_CANCEL: case ACTION_STD_CANCEL:
action_signalscreenchange();
return false; return false;
case SETTINGS_DEC: case ACTION_SETTINGS_DEC:
currval--; currval--;
if(currval < 0) if(currval < 0)
currval = 5; currval = 5;
break; break;
case SETTINGS_INC: case ACTION_SETTINGS_INC:
currval++; currval++;
if(currval > 5) if(currval > 5)
currval = 0; currval = 0;
@ -688,21 +672,21 @@ bool dbg_partitions(void)
lcd_puts(0, 1, buf); lcd_puts(0, 1, buf);
lcd_update(); lcd_update();
button = button_get(true); button = get_action(CONTEXT_SETTINGS,TIMEOUT_BLOCK);
switch(button) switch(button)
{ {
case SETTINGS_OK: case ACTION_STD_CANCEL:
case SETTINGS_CANCEL: action_signalscreenchange();
return false; return false;
case SETTINGS_DEC: case ACTION_SETTINGS_DEC:
partition--; partition--;
if (partition < 0) if (partition < 0)
partition = 3; partition = 3;
break; break;
case SETTINGS_INC: case ACTION_SETTINGS_INC:
partition++; partition++;
if (partition > 3) if (partition > 3)
partition = 0; partition = 0;
@ -874,13 +858,8 @@ bool dbg_spdif(void)
lcd_update(); lcd_update();
switch (button_get_w_tmo(HZ/10)) if (action_userabort(HZ/2))
{ return false;
case SETTINGS_CANCEL:
case SETTINGS_OK2:
done = true;
break;
}
} }
#ifdef HAVE_SPDIF_POWER #ifdef HAVE_SPDIF_POWER
spdif_power_enable(global_settings.spdif_enable); spdif_power_enable(global_settings.spdif_enable);
@ -940,13 +919,8 @@ bool dbg_ports(void)
lcd_puts(0, 7, buf); lcd_puts(0, 7, buf);
#endif #endif
lcd_update(); lcd_update();
button = button_get_w_tmo(HZ/10); if (action_userabort(HZ/10))
return false;
switch(button)
{
case SETTINGS_CANCEL:
return false;
}
} }
#elif defined(CPU_COLDFIRE) #elif defined(CPU_COLDFIRE)
unsigned int gpio_out; unsigned int gpio_out;
@ -962,7 +936,6 @@ bool dbg_ports(void)
int adc_remotedetect; int adc_remotedetect;
#endif #endif
char buf[128]; char buf[128];
int button;
int line; int line;
int battery_voltage; int battery_voltage;
int batt_int, batt_frac; int batt_int, batt_frac;
@ -1033,13 +1006,8 @@ bool dbg_ports(void)
#endif #endif
lcd_update(); lcd_update();
button = button_get_w_tmo(HZ/10); if (action_userabort(HZ/10))
return false;
switch(button)
{ /* quit on release to allow for reading the cancel button input */
case (SETTINGS_CANCEL|BUTTON_REL):
return false;
}
} }
#elif CONFIG_CPU == PP5020 #elif CONFIG_CPU == PP5020
@ -1049,7 +1017,6 @@ bool dbg_ports(void)
unsigned int gpio_i, gpio_j, gpio_k, gpio_l; unsigned int gpio_i, gpio_j, gpio_k, gpio_l;
char buf[128]; char buf[128];
int button;
int line; int line;
lcd_setmargins(0, 0); lcd_setmargins(0, 0);
@ -1091,13 +1058,8 @@ bool dbg_ports(void)
lcd_puts(0, line++, buf); lcd_puts(0, line++, buf);
lcd_update(); lcd_update();
button = button_get_w_tmo(HZ/10); if (action_userabort(HZ/10))
return false;
switch(button)
{
case SETTINGS_CANCEL:
return false;
}
} }
#endif /* CPU */ #endif /* CPU */
@ -1170,20 +1132,21 @@ bool dbg_ports(void)
snprintf(buf, 32, "Batt: %d.%02dV", batt_int, batt_frac); snprintf(buf, 32, "Batt: %d.%02dV", batt_int, batt_frac);
lcd_puts(0, 1, buf); lcd_puts(0, 1, buf);
button = button_get_w_tmo(HZ/5); button = get_action(CONTEXT_SETTINGS,HZ/5);
switch(button) switch(button)
{ {
case SETTINGS_CANCEL: case ACTION_STD_CANCEL:
action_signalscreenchange();
return false; return false;
case SETTINGS_DEC: case ACTION_SETTINGS_DEC:
currval--; currval--;
if(currval < 0) if(currval < 0)
currval = 10; currval = 10;
break; break;
case SETTINGS_INC: case ACTION_SETTINGS_INC:
currval++; currval++;
if(currval > 10) if(currval > 10)
currval = 0; currval = 0;
@ -1219,43 +1182,25 @@ bool dbg_cpufreq(void)
lcd_puts(0, line++, buf); lcd_puts(0, line++, buf);
lcd_update(); lcd_update();
button = button_get_w_tmo(HZ/10); button = get_action(CONTEXT_STD,HZ/10);
switch(button) switch(button)
{ {
#if (CONFIG_KEYPAD == IPOD_4G_PAD) || (CONFIG_KEYPAD == IPOD_3G_PAD) case ACTION_STD_PREV:
case BUTTON_MENU: cpu_boost(true);
#else break;
case BUTTON_UP: case ACTION_STD_NEXT:
#endif cpu_boost(false);
cpu_boost(true); break;
break;
#if (CONFIG_KEYPAD == IPOD_4G_PAD) || (CONFIG_KEYPAD == IPOD_3G_PAD)
case BUTTON_PLAY:
#else
case BUTTON_DOWN:
#endif
cpu_boost(false);
break;
#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ case ACTION_STD_OK:
(CONFIG_KEYPAD == IRIVER_H300_PAD) || \ set_cpu_frequency(CPUFREQ_DEFAULT);
(CONFIG_KEYPAD == IPOD_4G_PAD) || (CONFIG_KEYPAD == IPOD_3G_PAD) boost_counter = 0;
case BUTTON_SELECT: break;
#else
case BUTTON_PLAY:
#endif
set_cpu_frequency(CPUFREQ_DEFAULT);
boost_counter = 0;
break;
#if (CONFIG_KEYPAD == IPOD_4G_PAD) || (CONFIG_KEYPAD == IPOD_3G_PAD) case ACTION_STD_CANCEL:
case BUTTON_LEFT: action_signalscreenchange();
#else return false;
case SETTINGS_CANCEL:
case SETTINGS_OK2:
#endif
return false;
} }
} }
@ -1428,20 +1373,20 @@ bool view_battery(void)
lcd_update(); lcd_update();
switch(button_get_w_tmo(HZ/2)) switch(get_action(CONTEXT_SETTINGS,HZ/2))
{ {
case SETTINGS_DEC: case ACTION_SETTINGS_DEC:
if (view) if (view)
view--; view--;
break; break;
case SETTINGS_INC: case ACTION_SETTINGS_INC:
if (view < 3) if (view < 3)
view++; view++;
break; break;
case SETTINGS_OK: case ACTION_STD_CANCEL:
case SETTINGS_CANCEL: action_signalscreenchange();
return false; return false;
} }
} }
@ -1498,41 +1443,40 @@ static bool view_runtime(void)
lcd_update(); lcd_update();
/* Wait for a key to be pushed */ /* Wait for a key to be pushed */
key = button_get_w_tmo(HZ); key = get_action(CONTEXT_SETTINGS,HZ);
switch(key) { switch(key) {
case SETTINGS_CANCEL: case ACTION_STD_CANCEL:
done = true; done = true;
break; break;
case SETTINGS_INC: case ACTION_SETTINGS_INC:
case SETTINGS_DEC: case ACTION_SETTINGS_DEC:
if (state == 1) if (state == 1)
state = 2; state = 2;
else else
state = 1; state = 1;
break; break;
case SETTINGS_OK: case ACTION_STD_OK:
lcd_clear_display(); lcd_clear_display();
/*NOTE: this needs to be changed to sync splash! */
lcd_puts(0,0,"Clear time?"); lcd_puts(0,0,"Clear time?");
lcd_puts(0,1,"PLAY = Yes"); lcd_puts(0,1,"PLAY = Yes");
lcd_update(); lcd_update();
while (1) { while (1) {
key = button_get(true); key = get_action(CONTEXT_STD,TIMEOUT_BLOCK);
if ( key == SETTINGS_OK ) { if ( key == ACTION_STD_OK ) {
if ( state == 1 ) if ( state == 1 )
global_settings.runtime = 0; global_settings.runtime = 0;
else else
global_settings.topruntime = 0; global_settings.topruntime = 0;
break; break;
} }
if (!(key & BUTTON_REL)) /* ignore button releases */
break;
} }
break; break;
} }
} }
action_signalscreenchange();
return false; return false;
} }
@ -1620,27 +1564,26 @@ bool dbg_mmc_info(void)
lcd_update(); lcd_update();
switch (button_get_w_tmo(HZ/2)) switch (get_action(CONTEXT_SETTINGS,HZ/2))
{ {
case SETTINGS_OK: case ACTION_STD_CANCEL:
case SETTINGS_CANCEL:
done = true; done = true;
break; break;
case SETTINGS_DEC: case ACTION_SETTINGS_DEC:
currval--; currval--;
if (currval < 0) if (currval < 0)
currval = 3; currval = 3;
break; break;
case SETTINGS_INC: case ACTION_SETTINGS_INC:
currval++; currval++;
if (currval > 3) if (currval > 3)
currval = 0; currval = 0;
break; break;
} }
} }
action_signalscreenchange();
return false; return false;
} }
#else /* !HAVE_MMC */ #else /* !HAVE_MMC */
@ -1781,26 +1724,25 @@ static bool dbg_disk_info(void)
lcd_update(); lcd_update();
/* Wait for a key to be pushed */ /* Wait for a key to be pushed */
key = button_get_w_tmo(HZ*5); key = get_action(CONTEXT_SETTINGS,HZ/5);
switch(key) { switch(key) {
case SETTINGS_OK: case ACTION_STD_CANCEL:
case SETTINGS_CANCEL:
done = true; done = true;
break; break;
case SETTINGS_DEC: case ACTION_SETTINGS_DEC:
if (--page < 0) if (--page < 0)
page = max_page; page = max_page;
break; break;
case SETTINGS_INC: case ACTION_SETTINGS_INC:
if (++page > max_page) if (++page > max_page)
page = 0; page = 0;
break; break;
} }
lcd_stop_scroll(); lcd_stop_scroll();
} }
action_signalscreenchange();
return false; return false;
} }
#endif /* !HAVE_MMC */ #endif /* !HAVE_MMC */
@ -1849,13 +1791,8 @@ static bool dbg_dircache_info(void)
lcd_update(); lcd_update();
switch (button_get_w_tmo(HZ/2)) if (action_userabort(HZ/2))
{ return false;
case SETTINGS_OK:
case SETTINGS_CANCEL:
done = true;
break;
}
} }
return false; return false;
@ -1900,13 +1837,8 @@ static bool dbg_tagcache_info(void)
lcd_update(); lcd_update();
switch (button_get_w_tmo(HZ/2)) if (action_userabort(HZ/2))
{ return false;
case SETTINGS_OK:
case SETTINGS_CANCEL:
done = true;
break;
}
} }
return false; return false;
@ -1979,7 +1911,6 @@ bool dbg_save_roms(void)
bool dbg_fm_radio(void) bool dbg_fm_radio(void)
{ {
char buf[32]; char buf[32];
int button;
bool fm_detected; bool fm_detected;
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
@ -2010,13 +1941,8 @@ bool dbg_fm_radio(void)
lcd_update(); lcd_update();
button = button_get_w_tmo(HZ); if (action_userabort(TIMEOUT_BLOCK))
return false;
switch(button)
{
case SETTINGS_CANCEL:
return false;
}
} }
return false; return false;
} }

View file

@ -26,7 +26,7 @@
#include "kernel.h" #include "kernel.h"
#include "lcd.h" #include "lcd.h"
#include "menu.h" #include "menu.h"
#include "button.h" #include "action.h"
#include "mp3_playback.h" #include "mp3_playback.h"
#include "settings.h" #include "settings.h"
#include "statusbar.h" #include "statusbar.h"
@ -49,73 +49,6 @@
#include "wm8758.h" #include "wm8758.h"
#endif #endif
/* Key definitions */
#if (CONFIG_KEYPAD == IRIVER_H100_PAD || \
CONFIG_KEYPAD == IRIVER_H300_PAD)
#define EQ_BTN_MODIFIER BUTTON_ON
#define EQ_BTN_DECREMENT BUTTON_LEFT
#define EQ_BTN_INCREMENT BUTTON_RIGHT
#define EQ_BTN_NEXT_BAND BUTTON_DOWN
#define EQ_BTN_PREV_BAND BUTTON_UP
#define EQ_BTN_CHANGE_MODE BUTTON_SELECT
#define EQ_BTN_EXIT BUTTON_OFF
#define EQ_BTN_RC_PREV_BAND BUTTON_RC_REW
#define EQ_BTN_RC_NEXT_BAND BUTTON_RC_FF
#define EQ_BTN_RC_DECREMENT BUTTON_RC_SOURCE
#define EQ_BTN_RC_INCREMENT BUTTON_RC_BITRATE
#define EQ_BTN_RC_CHANGE_MODE BUTTON_RC_MENU
#define EQ_BTN_RC_EXIT BUTTON_RC_STOP
#elif (CONFIG_KEYPAD == IPOD_4G_PAD) || \
(CONFIG_KEYPAD == IPOD_3G_PAD)
#define EQ_BTN_DECREMENT BUTTON_SCROLL_BACK
#define EQ_BTN_INCREMENT BUTTON_SCROLL_FWD
#define EQ_BTN_NEXT_BAND BUTTON_RIGHT
#define EQ_BTN_PREV_BAND BUTTON_LEFT
#define EQ_BTN_CHANGE_MODE BUTTON_SELECT
#define EQ_BTN_EXIT BUTTON_MENU
#elif CONFIG_KEYPAD == IAUDIO_X5_PAD
#define EQ_BTN_DECREMENT BUTTON_LEFT
#define EQ_BTN_INCREMENT BUTTON_RIGHT
#define EQ_BTN_NEXT_BAND BUTTON_DOWN
#define EQ_BTN_PREV_BAND BUTTON_UP
#define EQ_BTN_CHANGE_MODE BUTTON_REC
#define EQ_BTN_EXIT BUTTON_SELECT
#elif (CONFIG_KEYPAD == IRIVER_IFP7XX_PAD)
#define EQ_BTN_DECREMENT BUTTON_LEFT
#define EQ_BTN_INCREMENT BUTTON_RIGHT
#define EQ_BTN_NEXT_BAND BUTTON_DOWN
#define EQ_BTN_PREV_BAND BUTTON_UP
#define EQ_BTN_CHANGE_MODE BUTTON_SELECT
#define EQ_BTN_EXIT BUTTON_PLAY
#elif (CONFIG_KEYPAD == GIGABEAT_PAD)
#define EQ_BTN_DECREMENT BUTTON_LEFT
#define EQ_BTN_INCREMENT BUTTON_RIGHT
#define EQ_BTN_NEXT_BAND BUTTON_DOWN
#define EQ_BTN_PREV_BAND BUTTON_UP
#define EQ_BTN_CHANGE_MODE BUTTON_SELECT
#define EQ_BTN_EXIT BUTTON_A
#elif CONFIG_KEYPAD == IRIVER_H10_PAD
#define EQ_BTN_DECREMENT BUTTON_LEFT
#define EQ_BTN_INCREMENT BUTTON_RIGHT
#define EQ_BTN_NEXT_BAND BUTTON_SCROLL_DOWN
#define EQ_BTN_PREV_BAND BUTTON_SCROLL_UP
#define EQ_BTN_CHANGE_MODE BUTTON_PLAY
#define EQ_BTN_EXIT BUTTON_POWER
#endif
/* Various user interface limits and sizes */ /* Various user interface limits and sizes */
#define EQ_CUTOFF_MIN 20 #define EQ_CUTOFF_MIN 20
#define EQ_CUTOFF_MAX 22040 #define EQ_CUTOFF_MAX 22040
@ -686,27 +619,19 @@ bool eq_menu_graphical(void)
screens[i].update(); screens[i].update();
} }
button = button_get(true); button = get_action(CONTEXT_SETTINGSGRAPHICAL,TIMEOUT_BLOCK);
switch (button) { switch (button) {
case EQ_BTN_DECREMENT: case ACTION_SETTINGS_DEC:
case EQ_BTN_DECREMENT | BUTTON_REPEAT: case ACTION_SETTINGS_DECREPEAT:
#ifdef EQ_BTN_RC_DECREMENT
case EQ_BTN_RC_DECREMENT:
case EQ_BTN_RC_DECREMENT | BUTTON_REPEAT:
#endif
*(setting) -= step; *(setting) -= step;
has_changed = true; has_changed = true;
if (*(setting) < min) if (*(setting) < min)
*(setting) = min; *(setting) = min;
break; break;
case EQ_BTN_INCREMENT: case ACTION_SETTINGS_INC:
case EQ_BTN_INCREMENT | BUTTON_REPEAT: case ACTION_SETTINGS_INCREPEAT:
#ifdef EQ_BTN_RC_INCREMENT
case EQ_BTN_RC_INCREMENT:
case EQ_BTN_RC_INCREMENT | BUTTON_REPEAT:
#endif
*(setting) += step; *(setting) += step;
has_changed = true; has_changed = true;
if (*(setting) > max) if (*(setting) > max)
@ -731,45 +656,27 @@ bool eq_menu_graphical(void)
break; break;
#endif #endif
case EQ_BTN_PREV_BAND: case ACTION_STD_PREV:
case EQ_BTN_PREV_BAND | BUTTON_REPEAT: case ACTION_STD_PREVREPEAT:
#ifdef EQ_BTN_RC_PREV_BAND
case EQ_BTN_RC_PREV_BAND:
case EQ_BTN_RC_PREV_BAND | BUTTON_REPEAT:
#endif
current_band--; current_band--;
if (current_band < 0) if (current_band < 0)
current_band = 4; /* wrap around */ current_band = 4; /* wrap around */
break; break;
case EQ_BTN_NEXT_BAND: case ACTION_STD_NEXT:
case EQ_BTN_NEXT_BAND | BUTTON_REPEAT: case ACTION_STD_NEXTREPEAT:
#ifdef EQ_BTN_RC_NEXT_BAND
case EQ_BTN_RC_NEXT_BAND:
case EQ_BTN_RC_NEXT_BAND | BUTTON_REPEAT:
#endif
current_band++; current_band++;
if (current_band > 4) if (current_band > 4)
current_band = 0; /* wrap around */ current_band = 0; /* wrap around */
break; break;
case EQ_BTN_CHANGE_MODE: case ACTION_STD_OK:
case EQ_BTN_CHANGE_MODE | BUTTON_REPEAT:
#ifdef EQ_BTN_RC_CHANGE_MODE
case EQ_BTN_RC_CHANGE_MODE:
case EQ_BTN_RC_CHANGE_MODE | BUTTON_REPEAT:
#endif
mode++; mode++;
if (mode > Q) if (mode > Q)
mode = GAIN; /* wrap around */ mode = GAIN; /* wrap around */
break; break;
case EQ_BTN_EXIT: case ACTION_STD_CANCEL:
case EQ_BTN_EXIT | BUTTON_REPEAT:
#ifdef EQ_BTN_RC_EXIT
case EQ_BTN_RC_EXIT:
case EQ_BTN_RC_EXIT | BUTTON_REPEAT:
#endif
exit_request = true; exit_request = true;
result = false; result = false;
break; break;
@ -789,6 +696,7 @@ bool eq_menu_graphical(void)
} }
} }
action_signalscreenchange();
/* Reset screen settings */ /* Reset screen settings */
FOR_NB_SCREENS(i) { FOR_NB_SCREENS(i) {
screens[i].setfont(FONT_UI); screens[i].setfont(FONT_UI);

View file

@ -29,64 +29,11 @@
#include "scrollbar.h" #include "scrollbar.h"
#include "lang.h" #include "lang.h"
#include "splash.h" #include "splash.h"
#include "action.h"
#define TEXT_MARGIN display->char_width+2 #define TEXT_MARGIN display->char_width+2
#define SLIDER_START 20 #define SLIDER_START 20
#if (CONFIG_KEYPAD == IRIVER_H300_PAD)
#define SLIDER_UP BUTTON_UP
#define SLIDER_DOWN BUTTON_DOWN
#define SLIDER_LEFT BUTTON_LEFT
#define SLIDER_RIGHT BUTTON_RIGHT
#define SLIDER_OK BUTTON_ON
#define SLIDER_OK2 BUTTON_SELECT
#define SLIDER_CANCEL BUTTON_OFF
#define SLIDER_RC_UP BUTTON_RC_REW
#define SLIDER_RC_DOWN BUTTON_RC_FF
#define SLIDER_RC_LEFT BUTTON_RC_SOURCE
#define SLIDER_RC_RIGHT BUTTON_RC_BITRATE
#define SLIDER_RC_OK BUTTON_RC_ON
#define SLIDER_RC_CANCEL BUTTON_RC_STOP
#elif (CONFIG_KEYPAD == GIGABEAT_PAD)
#define SLIDER_UP BUTTON_UP
#define SLIDER_DOWN BUTTON_DOWN
#define SLIDER_LEFT BUTTON_LEFT
#define SLIDER_RIGHT BUTTON_RIGHT
#define SLIDER_OK BUTTON_POWER
#define SLIDER_CANCEL BUTTON_A
#elif (CONFIG_KEYPAD == IPOD_4G_PAD)
#define SLIDER_UP BUTTON_LEFT
#define SLIDER_DOWN BUTTON_RIGHT
#define SLIDER_LEFT BUTTON_SCROLL_BACK
#define SLIDER_RIGHT BUTTON_SCROLL_FWD
#define SLIDER_OK BUTTON_SELECT
#define SLIDER_CANCEL BUTTON_MENU
#elif (CONFIG_KEYPAD == IAUDIO_X5_PAD)
#define SLIDER_UP BUTTON_UP
#define SLIDER_DOWN BUTTON_DOWN
#define SLIDER_LEFT BUTTON_LEFT
#define SLIDER_RIGHT BUTTON_RIGHT
#define SLIDER_OK BUTTON_SELECT
#define SLIDER_CANCEL BUTTON_PLAY
/* FIXME: chosen at will to make it compile */
#define SLIDER_RC_OK BUTTON_RC_PLAY
#define SLIDER_RC_CANCEL BUTTON_RC_REC
#elif (CONFIG_KEYPAD == IRIVER_H10_PAD)
#define SLIDER_UP BUTTON_SCROLL_UP
#define SLIDER_DOWN BUTTON_SCROLL_DOWN
#define SLIDER_LEFT BUTTON_LEFT
#define SLIDER_RIGHT BUTTON_RIGHT
#define SLIDER_OK BUTTON_PLAY
#define SLIDER_CANCEL BUTTON_POWER
#endif
static const int max_val[3] = {LCD_MAX_RED,LCD_MAX_GREEN,LCD_MAX_BLUE}; static const int max_val[3] = {LCD_MAX_RED,LCD_MAX_GREEN,LCD_MAX_BLUE};
static void draw_screen(struct screen *display, char *title, static void draw_screen(struct screen *display, char *title,
@ -237,50 +184,30 @@ bool set_color(struct screen *display,char *title, int* color, int banned_color)
draw_screen(&screens[i], title, rgb_val, newcolor, slider); draw_screen(&screens[i], title, rgb_val, newcolor, slider);
} }
button = button_get(true); button = get_action(CONTEXT_SETTINGSGRAPHICAL,TIMEOUT_BLOCK);
switch (button) switch (button)
{ {
case SLIDER_UP: case ACTION_STD_PREV:
#ifdef SLIDER_RC_UP
case SLIDER_RC_UP:
#endif
slider = (slider+2)%3; slider = (slider+2)%3;
break; break;
case SLIDER_DOWN: case ACTION_STD_NEXT:
#ifdef SLIDER_RC_DOWN
case SLIDER_RC_DOWN:
#endif
slider = (slider+1)%3; slider = (slider+1)%3;
break; break;
case SLIDER_RIGHT: case ACTION_SETTINGS_INC:
case SLIDER_RIGHT|BUTTON_REPEAT: case ACTION_SETTINGS_INCREPEAT:
#ifdef SLIDER_RC_RIGHT
case SLIDER_RC_RIGHT:
case SLIDER_RC_RIGHT|BUTTON_REPEAT:
#endif
if (rgb_val[slider] < max_val[slider]) if (rgb_val[slider] < max_val[slider])
rgb_val[slider]++; rgb_val[slider]++;
break; break;
case SLIDER_LEFT: case ACTION_SETTINGS_DEC:
case SLIDER_LEFT|BUTTON_REPEAT: case ACTION_SETTINGS_DECREPEAT:
#ifdef SLIDER_RC_LEFT
case SLIDER_RC_LEFT:
case SLIDER_RC_LEFT|BUTTON_REPEAT:
#endif
if (rgb_val[slider] > 0) if (rgb_val[slider] > 0)
rgb_val[slider]--; rgb_val[slider]--;
break; break;
case SLIDER_OK: case ACTION_STD_OK:
#ifdef HAVE_REMOTE_LCD
case SLIDER_RC_OK:
#endif
#ifdef SLIDER_OK2
case SLIDER_OK2:
#endif
if ((banned_color!=-1) && (banned_color == newcolor)) if ((banned_color!=-1) && (banned_color == newcolor))
{ {
gui_syncsplash(HZ*2,true,str(LANG_COLOR_UNACCEPTABLE)); gui_syncsplash(HZ*2,true,str(LANG_COLOR_UNACCEPTABLE));
@ -290,10 +217,7 @@ bool set_color(struct screen *display,char *title, int* color, int banned_color)
exit = 1; exit = 1;
break; break;
case SLIDER_CANCEL: case ACTION_STD_CANCEL:
#ifdef HAVE_REMOTE_LCD
case SLIDER_RC_CANCEL:
#endif
exit = 1; exit = 1;
break; break;
@ -306,6 +230,6 @@ bool set_color(struct screen *display,char *title, int* color, int banned_color)
} }
} }
display->set_foreground(fgcolor); display->set_foreground(fgcolor);
action_signalscreenchange();
return false; return false;
} }

View file

@ -52,6 +52,7 @@
#include "backdrop.h" #include "backdrop.h"
#endif #endif
#include "dsp.h" #include "dsp.h"
#include "action.h"
#ifdef HAVE_LCD_CHARCELLS #ifdef HAVE_LCD_CHARCELLS
static bool draw_player_progress(struct gui_wps *gwps); static bool draw_player_progress(struct gui_wps *gwps);
@ -2319,19 +2320,18 @@ bool ffwd_rew(int button)
bool usb = false; bool usb = false;
int i = 0; int i = 0;
if (button == ACTION_NONE)
{
status_set_ffmode(0);
return usb;
}
while (!exit) while (!exit)
{ {
switch ( button ) switch ( button )
{ {
case WPS_FFWD: case ACTION_WPS_SEEKFWD:
#ifdef WPS_RC_FFWD
case WPS_RC_FFWD:
#endif
direction = 1; direction = 1;
case WPS_REW: case ACTION_WPS_SEEKBACK:
#ifdef WPS_RC_REW
case WPS_RC_REW:
#endif
if (wps_state.ff_rewind) if (wps_state.ff_rewind)
{ {
if (direction == 1) if (direction == 1)
@ -2415,12 +2415,7 @@ bool ffwd_rew(int button)
break; break;
case WPS_PREV: case ACTION_WPS_STOPSEEK:
case WPS_NEXT:
#ifdef WPS_RC_PREV
case WPS_RC_PREV:
case WPS_RC_NEXT:
#endif
wps_state.id3->elapsed = wps_state.id3->elapsed+ff_rewind_count; wps_state.id3->elapsed = wps_state.id3->elapsed+ff_rewind_count;
audio_ff_rewind(wps_state.id3->elapsed); audio_ff_rewind(wps_state.id3->elapsed);
ff_rewind_count = 0; ff_rewind_count = 0;
@ -2445,9 +2440,9 @@ bool ffwd_rew(int button)
break; break;
} }
if (!exit) if (!exit)
button = button_get(true); button = get_action(CONTEXT_WPS,TIMEOUT_BLOCK);
} }
action_signalscreenchange();
return usb; return usb;
} }
@ -2547,7 +2542,7 @@ bool update(struct gui_wps *gwps)
return retcode; return retcode;
} }
#ifdef WPS_KEYLOCK
void display_keylock_text(bool locked) void display_keylock_text(bool locked)
{ {
char* s; char* s;
@ -2569,11 +2564,3 @@ void display_keylock_text(bool locked)
gui_syncsplash(HZ, true, s); gui_syncsplash(HZ, true, s);
} }
void waitfor_nokey(void)
{
/* wait until all keys are released */
while (button_get(false) != BUTTON_NONE)
yield();
}
#endif

View file

@ -35,9 +35,6 @@ bool update(struct gui_wps *gwps);
bool ffwd_rew(int button); bool ffwd_rew(int button);
bool wps_data_preload_tags(struct wps_data *data, char *buf, bool wps_data_preload_tags(struct wps_data *data, char *buf,
const char *bmpdir, size_t bmpdirlen); const char *bmpdir, size_t bmpdirlen);
#ifdef WPS_KEYLOCK
void display_keylock_text(bool locked); void display_keylock_text(bool locked);
void waitfor_nokey(void);
#endif
#endif #endif

View file

@ -25,7 +25,7 @@
#include "lcd.h" #include "lcd.h"
#include "font.h" #include "font.h"
#include "backlight.h" #include "backlight.h"
#include "button.h" #include "action.h"
#include "kernel.h" #include "kernel.h"
#include "tree.h" #include "tree.h"
#include "debug.h" #include "debug.h"
@ -84,14 +84,11 @@ static void gui_wps_set_margin(struct gui_wps *gwps)
long gui_wps_show(void) long gui_wps_show(void)
{ {
long button = 0, lastbutton = 0; long button = 0;
bool ignore_keyup = true;
bool restore = false; bool restore = false;
long restoretimer = 0; /* timer to delay screen redraw temporarily */ long restoretimer = 0; /* timer to delay screen redraw temporarily */
bool exit = false; bool exit = false;
bool update_track = false; bool update_track = false;
unsigned long right_lastclick = 0;
unsigned long left_lastclick = 0;
int i; int i;
wps_state_init(); wps_state_init();
@ -163,8 +160,8 @@ long gui_wps_show(void)
long next_big_refresh = current_tick + HZ / 5; long next_big_refresh = current_tick + HZ / 5;
button = BUTTON_NONE; button = BUTTON_NONE;
while (TIME_BEFORE(current_tick, next_big_refresh)) { while (TIME_BEFORE(current_tick, next_big_refresh)) {
button = button_get(false); button = get_action(CONTEXT_WPS,TIMEOUT_NOBLOCK);
if (button != BUTTON_NONE) { if (button != ACTION_NONE) {
break; break;
} }
peak_meter_peek(); peak_meter_peek();
@ -186,35 +183,10 @@ long gui_wps_show(void)
/* The peak meter is disabled /* The peak meter is disabled
-> no additional screen updates needed */ -> no additional screen updates needed */
else { else {
button = button_get_w_tmo(HZ/5); button = get_action(CONTEXT_WPS,HZ/5);
} }
#else #else
button = button_get_w_tmo(HZ/5); button = get_action(CONTEXT_WPS,HZ/5);
#endif
/* discard first event if it's a button release */
if (button && ignore_keyup)
{
ignore_keyup = false;
/* Negative events are system events */
if (button >= 0 && button & BUTTON_REL )
continue;
}
#ifdef WPS_KEYLOCK
/* ignore non-remote buttons when keys are locked */
if (keys_locked &&
! ((button < 0) ||
(button == BUTTON_NONE) ||
((button & WPS_KEYLOCK) == WPS_KEYLOCK) ||
(button & BUTTON_REMOTE)
))
{
if (!(button & BUTTON_REL))
display_keylock_text(true);
restore = true;
button = BUTTON_NONE;
}
#endif #endif
/* Exit if audio has stopped playing. This can happen if using the /* Exit if audio has stopped playing. This can happen if using the
@ -222,17 +194,14 @@ long gui_wps_show(void)
from F1 */ from F1 */
if (!audio_status()) if (!audio_status())
exit = true; exit = true;
switch(button) switch(button)
{ {
#ifdef WPS_CONTEXT case ACTION_WPS_CONTEXT:
case WPS_CONTEXT:
#ifdef WPS_RC_CONTEXT
case WPS_RC_CONTEXT:
#endif
#ifdef HAVE_LCD_COLOR #ifdef HAVE_LCD_COLOR
show_main_backdrop(); show_main_backdrop();
#endif #endif
action_signalscreenchange();
onplay(wps_state.id3->path, TREE_ATTR_MPA, CONTEXT_WPS); onplay(wps_state.id3->path, TREE_ATTR_MPA, CONTEXT_WPS);
#ifdef HAVE_LCD_COLOR #ifdef HAVE_LCD_COLOR
show_wps_backdrop(); show_wps_backdrop();
@ -245,20 +214,8 @@ long gui_wps_show(void)
#endif #endif
restore = true; restore = true;
break; break;
#endif
#ifdef WPS_RC_BROWSE case ACTION_WPS_BROWSE:
case WPS_RC_BROWSE:
#endif
case WPS_BROWSE:
#ifdef WPS_BROWSE_PRE
if ((lastbutton != WPS_BROWSE_PRE)
#ifdef WPS_RC_BROWSE_PRE
&& (lastbutton != WPS_RC_BROWSE_PRE)
#endif
)
break;
#endif
#ifdef HAVE_LCD_CHARCELLS #ifdef HAVE_LCD_CHARCELLS
status_set_record(false); status_set_record(false);
status_set_audio(false); status_set_audio(false);
@ -270,26 +227,14 @@ long gui_wps_show(void)
if (global_settings.browse_current && if (global_settings.browse_current &&
wps_state.current_track_path[0] != '\0') wps_state.current_track_path[0] != '\0')
set_current_file(wps_state.current_track_path); set_current_file(wps_state.current_track_path);
action_signalscreenchange();
return 0; return 0;
break; break;
/* play/pause */ /* play/pause */
case WPS_PAUSE: case ACTION_WPS_PLAY:
#ifdef WPS_PAUSE_PRE
if (lastbutton != WPS_PAUSE_PRE)
break;
#endif
#ifdef WPS_RC_PAUSE
case WPS_RC_PAUSE:
if (global_settings.party_mode) if (global_settings.party_mode)
break; break;
#ifdef WPS_RC_PAUSE_PRE
if ((button == WPS_RC_PAUSE) &&
(lastbutton != WPS_RC_PAUSE_PRE))
break;
#endif
#endif
if ( wps_state.paused ) if ( wps_state.paused )
{ {
wps_state.paused = false; wps_state.paused = false;
@ -313,12 +258,7 @@ long gui_wps_show(void)
break; break;
/* volume up */ /* volume up */
case WPS_INCVOL: case ACTION_WPS_VOLUP:
case WPS_INCVOL | BUTTON_REPEAT:
#ifdef WPS_RC_INCVOL
case WPS_RC_INCVOL:
case WPS_RC_INCVOL | BUTTON_REPEAT:
#endif
{ {
global_settings.volume++; global_settings.volume++;
bool res = false; bool res = false;
@ -336,12 +276,7 @@ long gui_wps_show(void)
break; break;
/* volume down */ /* volume down */
case WPS_DECVOL: case ACTION_WPS_VOLDOWN:
case WPS_DECVOL | BUTTON_REPEAT:
#ifdef WPS_RC_DECVOL
case WPS_RC_DECVOL:
case WPS_RC_DECVOL | BUTTON_REPEAT:
#endif
{ {
global_settings.volume--; global_settings.volume--;
setvol(); setvol();
@ -357,59 +292,18 @@ long gui_wps_show(void)
} }
} }
break; break;
/* fast forward / rewind */ /* fast forward / rewind */
#ifdef WPS_RC_FFWD case ACTION_WPS_SEEKFWD:
case WPS_RC_FFWD: case ACTION_WPS_SEEKBACK:
#endif
case WPS_FFWD:
if (global_settings.party_mode) if (global_settings.party_mode)
break; break;
#ifdef HAVE_DIR_NAVIGATION
if (current_tick - right_lastclick < HZ)
{
audio_next_dir();
right_lastclick = 0;
break;
}
#endif
#ifdef WPS_RC_REW
case WPS_RC_REW:
#endif
case WPS_REW:
if (global_settings.party_mode)
break;
#ifdef HAVE_DIR_NAVIGATION
if (current_tick - left_lastclick < HZ)
{
audio_prev_dir();
left_lastclick = 0;
break;
}
#endif
ffwd_rew(button); ffwd_rew(button);
break; break;
/* prev / restart */ /* prev / restart */
case WPS_PREV: case ACTION_WPS_SKIPPREV:
#ifdef WPS_PREV_PRE
if (lastbutton != WPS_PREV_PRE)
break;
#endif
#ifdef WPS_RC_PREV
case WPS_RC_PREV:
if (global_settings.party_mode) if (global_settings.party_mode)
break; break;
#ifdef WPS_RC_PREV_PRE
if ((button == WPS_RC_PREV) && (lastbutton != WPS_RC_PREV_PRE))
break;
#endif
#endif
left_lastclick = current_tick;
update_track = true; update_track = true;
#ifdef AB_REPEAT_ENABLE #ifdef AB_REPEAT_ENABLE
@ -450,61 +344,10 @@ long gui_wps_show(void)
} }
break; break;
#ifdef WPS_NEXT_DIR
#ifdef WPS_RC_NEXT_DIR
case WPS_RC_NEXT_DIR:
#endif
case WPS_NEXT_DIR:
if (global_settings.party_mode)
break;
#if defined(AB_REPEAT_ENABLE) && defined(WPS_AB_SHARE_DIR_BUTTONS)
if (ab_repeat_mode_enabled())
{
ab_set_B_marker(wps_state.id3->elapsed);
ab_jump_to_A_marker();
update_track = true;
}
else
#endif
{
audio_next_dir();
}
break;
#endif
#ifdef WPS_PREV_DIR
#ifdef WPS_RC_PREV_DIR
case WPS_RC_PREV_DIR:
#endif
case WPS_PREV_DIR:
if (global_settings.party_mode)
break;
#if defined(AB_REPEAT_ENABLE) && defined(WPS_AB_SHARE_DIR_BUTTONS)
if (ab_repeat_mode_enabled())
ab_set_A_marker(wps_state.id3->elapsed);
else
#endif
{
audio_prev_dir();
}
break;
#endif
/* next */ /* next */
case WPS_NEXT: case ACTION_WPS_SKIPNEXT:
#ifdef WPS_NEXT_PRE
if (lastbutton != WPS_NEXT_PRE)
break;
#endif
#ifdef WPS_RC_NEXT
case WPS_RC_NEXT:
if (global_settings.party_mode) if (global_settings.party_mode)
break; break;
#ifdef WPS_RC_NEXT_PRE
if ((button == WPS_RC_NEXT) && (lastbutton != WPS_RC_NEXT_PRE))
break;
#endif
#endif
right_lastclick = current_tick;
update_track = true; update_track = true;
#ifdef AB_REPEAT_ENABLE #ifdef AB_REPEAT_ENABLE
@ -527,27 +370,44 @@ long gui_wps_show(void)
audio_next(); audio_next();
break; break;
/* next / prev directories */
#ifdef WPS_MENU case ACTION_WPS_NEXTDIR:
if (global_settings.party_mode)
break;
#if defined(AB_REPEAT_ENABLE) && defined(WPS_AB_SHARE_DIR_BUTTONS)
if (ab_repeat_mode_enabled())
{
ab_set_B_marker(wps_state.id3->elapsed);
ab_jump_to_A_marker();
update_track = true;
}
else
#endif
{
audio_next_dir();
}
break;
case ACTION_WPS_PREVDIR:
if (global_settings.party_mode)
break;
#if defined(AB_REPEAT_ENABLE) && defined(WPS_AB_SHARE_DIR_BUTTONS)
if (ab_repeat_mode_enabled())
ab_set_A_marker(wps_state.id3->elapsed);
else
#endif
{
audio_prev_dir();
}
break;
/* menu key functions */ /* menu key functions */
case WPS_MENU: case ACTION_WPS_MENU:
#ifdef WPS_MENU_PRE
if (lastbutton != WPS_MENU_PRE)
break;
#endif
#ifdef WPS_RC_MENU
case WPS_RC_MENU:
#ifdef WPS_RC_MENU_PRE
if ((button == WPS_RC_MENU) && (lastbutton != WPS_RC_MENU_PRE))
break;
#endif
#endif
FOR_NB_SCREENS(i) FOR_NB_SCREENS(i)
gui_wps[i].display->stop_scroll(); gui_wps[i].display->stop_scroll();
#ifdef HAVE_LCD_COLOR #ifdef HAVE_LCD_COLOR
show_main_backdrop(); show_main_backdrop();
#endif #endif
action_signalscreenchange();
if (main_menu()) if (main_menu())
return true; return true;
#ifdef HAVE_LCD_COLOR #ifdef HAVE_LCD_COLOR
@ -561,25 +421,17 @@ long gui_wps_show(void)
#endif #endif
restore = true; restore = true;
break; break;
#endif /* WPS_MENU */
#ifdef WPS_KEYLOCK
/* key lock */ /* key lock */
case WPS_KEYLOCK: case ACTION_STD_KEYLOCK:
case WPS_KEYLOCK | BUTTON_REPEAT: action_setsoftwarekeylock(ACTION_STD_KEYLOCK,true);
keys_locked = !keys_locked; display_keylock_text(true);
display_keylock_text(keys_locked);
restore = true; restore = true;
waitfor_nokey();
break; break;
#endif
#ifdef HAVE_QUICKSCREEN #ifdef HAVE_QUICKSCREEN
/* play settings */ case ACTION_WPS_QUICKSCREEN:
case WPS_QUICK:
#ifdef WPS_RC_QUICK
case WPS_RC_QUICK:
#endif
#ifdef HAVE_LCD_COLOR #ifdef HAVE_LCD_COLOR
show_main_backdrop(); show_main_backdrop();
#endif #endif
@ -595,8 +447,8 @@ long gui_wps_show(void)
} }
#endif #endif
restore = true; restore = true;
lastbutton = 0;
break; break;
#endif /* HAVE_QUICKSCREEN */
/* screen settings */ /* screen settings */
#ifdef BUTTON_F3 #ifdef BUTTON_F3
@ -611,17 +463,14 @@ long gui_wps_show(void)
{ {
gui_wps_set_margin(&gui_wps[i]); gui_wps_set_margin(&gui_wps[i]);
} }
#endif #endif /* BUTTON_F3 */
restore = true; restore = true;
lastbutton = 0;
break; break;
#endif #endif
/* pitch screen */ /* pitch screen */
#if CONFIG_KEYPAD == RECORDER_PAD || CONFIG_KEYPAD == IRIVER_H100_PAD \ #ifdef HAVE_PITCHSCREEN
|| CONFIG_KEYPAD == IRIVER_H300_PAD case ACTION_WPS_PITCHSCREEN:
case BUTTON_ON | BUTTON_UP:
case BUTTON_ON | BUTTON_DOWN:
#ifdef HAVE_LCD_COLOR #ifdef HAVE_LCD_COLOR
show_main_backdrop(); show_main_backdrop();
#endif #endif
@ -632,17 +481,10 @@ long gui_wps_show(void)
#endif #endif
restore = true; restore = true;
break; break;
#endif #endif /* HAVE_PITCHSCREEN */
#endif
#ifdef AB_REPEAT_ENABLE #ifdef AB_REPEAT_ENABLE
case ACTION_WPSAB_SINGLE:
#ifdef WPS_AB_SINGLE
case WPS_AB_SINGLE:
#ifdef WPS_AB_SINGLE_PRE
if (lastbutton != WPS_AB_SINGLE_PRE)
break;
#endif
/* If we are using the menu option to enable ab_repeat mode, don't do anything /* If we are using the menu option to enable ab_repeat mode, don't do anything
* when it's disabled */ * when it's disabled */
#if (AB_REPEAT_ENABLE == 1) #if (AB_REPEAT_ENABLE == 1)
@ -661,20 +503,15 @@ long gui_wps_show(void)
} }
ab_set_A_marker(wps_state.id3->elapsed); ab_set_A_marker(wps_state.id3->elapsed);
break; break;
#endif
#ifdef WPS_AB_SET_A_MARKER
/* set A marker for A-B repeat */ /* set A marker for A-B repeat */
case WPS_AB_SET_A_MARKER: case ACTION_WPSAB_SETA:
if (ab_repeat_mode_enabled()) if (ab_repeat_mode_enabled())
ab_set_A_marker(wps_state.id3->elapsed); ab_set_A_marker(wps_state.id3->elapsed);
break; break;
#endif
#ifdef WPS_AB_SET_B_MARKER
/* set B marker for A-B repeat and jump to A */ /* set B marker for A-B repeat and jump to A */
case WPS_AB_SET_B_MARKER: case ACTION_WPSAB_SETB:
if (ab_repeat_mode_enabled()) if (ab_repeat_mode_enabled())
{ {
ab_set_B_marker(wps_state.id3->elapsed); ab_set_B_marker(wps_state.id3->elapsed);
@ -682,46 +519,24 @@ long gui_wps_show(void)
update_track = true; update_track = true;
} }
break; break;
#endif
#ifdef WPS_AB_RESET_AB_MARKERS
/* reset A&B markers */ /* reset A&B markers */
case WPS_AB_RESET_AB_MARKERS: case ACTION_WPSAB_RESET:
if (ab_repeat_mode_enabled()) if (ab_repeat_mode_enabled())
{ {
ab_reset_markers(); ab_reset_markers();
update_track = true; update_track = true;
} }
break; break;
#endif
#endif /* AB_REPEAT_ENABLE */ #endif /* AB_REPEAT_ENABLE */
/* stop and exit wps */ /* stop and exit wps */
#ifdef WPS_EXIT case ACTION_WPS_STOP:
case WPS_EXIT:
# ifdef WPS_EXIT_PRE
if ((lastbutton & ~BUTTON_REPEAT) != WPS_EXIT_PRE)
break;
# endif
if (global_settings.party_mode) if (global_settings.party_mode)
break; break;
exit = true; exit = true;
#ifdef WPS_RC_EXIT
case WPS_RC_EXIT:
#ifdef WPS_RC_EXIT_PRE
if ((lastbutton & ~BUTTON_REPEAT) != WPS_RC_EXIT_PRE)
break;
#endif
if (global_settings.party_mode)
break;
exit = true;
#endif
break; break;
#endif
#ifdef WPS_ID3 case ACTION_WPS_ID3SCREEN:
case WPS_ID3:
#ifdef HAVE_LCD_COLOR #ifdef HAVE_LCD_COLOR
show_main_backdrop(); show_main_backdrop();
#endif #endif
@ -737,10 +552,10 @@ long gui_wps_show(void)
#endif #endif
restore = true; restore = true;
break; break;
#endif
case BUTTON_NONE: /* Timeout */ case ACTION_NONE: /* Timeout */
update_track = true; update_track = true;
ffwd_rew(button); /* hopefully fix the ffw/rwd bug */
break; break;
case SYS_POWEROFF: case SYS_POWEROFF:
@ -779,6 +594,7 @@ long gui_wps_show(void)
} }
if (exit) { if (exit) {
action_signalscreenchange();
#ifdef HAVE_LCD_CHARCELLS #ifdef HAVE_LCD_CHARCELLS
status_set_record(false); status_set_record(false);
status_set_audio(false); status_set_audio(false);
@ -830,8 +646,6 @@ long gui_wps_show(void)
gui_wps_refresh(&gui_wps[i], 0, WPS_REFRESH_NON_STATIC); gui_wps_refresh(&gui_wps[i], 0, WPS_REFRESH_NON_STATIC);
} }
} }
if (button != BUTTON_NONE)
lastbutton = button;
} }
return 0; /* unreachable - just to reduce compiler warnings */ return 0; /* unreachable - just to reduce compiler warnings */
} }

View file

@ -26,6 +26,7 @@
#include "settings.h" #include "settings.h"
#include "kernel.h" #include "kernel.h"
#include "action.h"
#include "screen_access.h" #include "screen_access.h"
#include "list.h" #include "list.h"
#include "scrollbar.h" #include "scrollbar.h"
@ -683,106 +684,65 @@ unsigned gui_synclist_do_button(struct gui_synclist * lists, unsigned button)
gui_synclist_limit_scroll(lists, true); gui_synclist_limit_scroll(lists, true);
switch(button) switch(button)
{ {
case LIST_PREV: case ACTION_STD_PREV:
#ifdef LIST_RC_PREV
case LIST_RC_PREV:
#endif
gui_synclist_limit_scroll(lists, false); gui_synclist_limit_scroll(lists, false);
case LIST_PREV | BUTTON_REPEAT: case ACTION_STD_PREVREPEAT:
#ifdef LIST_RC_PREV
case LIST_RC_PREV | BUTTON_REPEAT:
#endif
gui_synclist_select_previous(lists); gui_synclist_select_previous(lists);
gui_synclist_draw(lists); gui_synclist_draw(lists);
yield(); yield();
return LIST_PREV; return ACTION_STD_PREV;
case LIST_NEXT: case ACTION_STD_NEXT:
#ifdef LIST_RC_NEXT
case LIST_RC_NEXT:
#endif
gui_synclist_limit_scroll(lists, false); gui_synclist_limit_scroll(lists, false);
case LIST_NEXT | BUTTON_REPEAT: case ACTION_STD_NEXTREPEAT:
#ifdef LIST_RC_NEXT
case LIST_RC_NEXT | BUTTON_REPEAT:
#endif
gui_synclist_select_next(lists); gui_synclist_select_next(lists);
gui_synclist_draw(lists); gui_synclist_draw(lists);
yield(); yield();
return LIST_NEXT; return ACTION_STD_NEXT;
#ifdef LIST_PGRIGHT #ifdef HAVE_LCD_BITMAP
case LIST_PGRIGHT: case ACTION_TREE_PGRIGHT:
#if !(LIST_PGRIGHT & BUTTON_REPEAT)
case LIST_PGRIGHT | BUTTON_REPEAT:
#endif
#ifdef LIST_RC_PGRIGHT
case LIST_RC_PGRIGHT:
case LIST_RC_PGRIGHT | BUTTON_REPEAT:
#endif
gui_synclist_scroll_right(lists); gui_synclist_scroll_right(lists);
gui_synclist_draw(lists); gui_synclist_draw(lists);
return LIST_PGRIGHT; return ACTION_TREE_PGRIGHT;
#endif case ACTION_TREE_PGLEFT:
#ifdef LIST_PGLEFT
case LIST_PGLEFT:
#if !(LIST_PGLEFT & BUTTON_REPEAT)
case LIST_PGLEFT | BUTTON_REPEAT:
#endif
#ifdef LIST_RC_PGLEFT
case LIST_RC_PGLEFT:
case LIST_RC_PGLEFT | BUTTON_REPEAT:
#endif
gui_synclist_scroll_left(lists); gui_synclist_scroll_left(lists);
gui_synclist_draw(lists); gui_synclist_draw(lists);
return LIST_PGLEFT; return ACTION_TREE_PGLEFT;
#endif #endif
/* for pgup / pgdown, we are obliged to have a different behaviour depending on the screen /* for pgup / pgdown, we are obliged to have a different behaviour depending on the screen
* for which the user pressed the key since for example, remote and main screen doesn't * for which the user pressed the key since for example, remote and main screen doesn't
* have the same number of lines*/ * have the same number of lines*/
#ifdef LIST_PGUP case ACTION_LISTTREE_PGUP:
case LIST_PGUP:
gui_synclist_limit_scroll(lists, false); gui_synclist_limit_scroll(lists, false);
case LIST_PGUP | BUTTON_REPEAT:
gui_synclist_select_previous_page(lists, SCREEN_MAIN); gui_synclist_select_previous_page(lists, SCREEN_MAIN);
gui_synclist_draw(lists); gui_synclist_draw(lists);
yield(); yield();
return LIST_NEXT; return ACTION_STD_NEXT;
#endif
case ACTION_LISTTREE_PGDOWN:
#ifdef LIST_RC_PGUP
case LIST_RC_PGUP:
gui_synclist_limit_scroll(lists, false); gui_synclist_limit_scroll(lists, false);
case LIST_RC_PGUP | BUTTON_REPEAT:
gui_synclist_select_previous_page(lists, SCREEN_REMOTE);
gui_synclist_draw(lists);
yield();
return LIST_NEXT;
#endif
#ifdef LIST_PGDN
case LIST_PGDN:
gui_synclist_limit_scroll(lists, false);
case LIST_PGDN | BUTTON_REPEAT:
gui_synclist_select_next_page(lists, SCREEN_MAIN); gui_synclist_select_next_page(lists, SCREEN_MAIN);
gui_synclist_draw(lists); gui_synclist_draw(lists);
yield(); yield();
return LIST_PREV; return ACTION_STD_PREV;
#endif #if (REMOTE_BUTTON != 0 )
case ACTION_LISTTREE_RC_PGUP:
#ifdef LIST_RC_PGDN gui_synclist_limit_scroll(lists, false);
case LIST_RC_PGDN: gui_synclist_select_previous_page(lists, SCREEN_REMOTE);
gui_synclist_draw(lists);
yield();
return ACTION_STD_NEXT;
case ACTION_LISTTREE_RC_PGDOWN:
gui_synclist_limit_scroll(lists, false); gui_synclist_limit_scroll(lists, false);
case LIST_RC_PGDN | BUTTON_REPEAT:
gui_synclist_select_next_page(lists, SCREEN_REMOTE); gui_synclist_select_next_page(lists, SCREEN_REMOTE);
gui_synclist_draw(lists); gui_synclist_draw(lists);
yield(); yield();
return LIST_PREV; return ACTION_STD_PREV;
#endif #endif
} }
return 0; return 0;

View file

@ -26,89 +26,6 @@
#define SCROLLBAR_WIDTH 6 #define SCROLLBAR_WIDTH 6
/* Key assignement */
#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \
(CONFIG_KEYPAD == IRIVER_H300_PAD)
#define LIST_NEXT BUTTON_DOWN
#define LIST_PREV BUTTON_UP
#define LIST_PGUP (BUTTON_ON | BUTTON_UP)
#define LIST_PGDN (BUTTON_ON | BUTTON_DOWN)
#define LIST_PGRIGHT (BUTTON_RIGHT | BUTTON_REPEAT)
#define LIST_PGLEFT (BUTTON_LEFT | BUTTON_REPEAT)
#ifdef CONFIG_REMOTE_KEYPAD
#define LIST_RC_NEXT BUTTON_RC_FF
#define LIST_RC_PREV BUTTON_RC_REW
#define LIST_RC_PGUP BUTTON_RC_SOURCE
#define LIST_RC_PGDN BUTTON_RC_BITRATE
#define LIST_RC_PGRIGHT (BUTTON_RC_VOL_UP)
#define LIST_RC_PGLEFT (BUTTON_RC_VOL_DOWN)
#endif /* CONFIG_REMOTE_KEYPAD */
#elif CONFIG_KEYPAD == RECORDER_PAD
#define LIST_NEXT BUTTON_DOWN
#define LIST_PREV BUTTON_UP
#define LIST_PGUP (BUTTON_ON | BUTTON_UP)
#define LIST_PGDN (BUTTON_ON | BUTTON_DOWN)
#define LIST_PGRIGHT (BUTTON_RIGHT | BUTTON_REPEAT)
#define LIST_PGLEFT (BUTTON_LEFT | BUTTON_REPEAT)
#define LIST_RC_NEXT BUTTON_RC_RIGHT
#define LIST_RC_PREV BUTTON_RC_LEFT
#elif CONFIG_KEYPAD == PLAYER_PAD
#define LIST_NEXT BUTTON_RIGHT
#define LIST_PREV BUTTON_LEFT
#define LIST_RC_NEXT BUTTON_RC_RIGHT
#define LIST_RC_PREV BUTTON_RC_LEFT
#elif CONFIG_KEYPAD == ONDIO_PAD
#define LIST_NEXT BUTTON_DOWN
#define LIST_PREV BUTTON_UP
#define LIST_PGRIGHT (BUTTON_MENU | BUTTON_RIGHT)
#define LIST_PGLEFT (BUTTON_MENU | BUTTON_LEFT)
#elif (CONFIG_KEYPAD == IPOD_3G_PAD) || (CONFIG_KEYPAD == IPOD_4G_PAD)
#define LIST_NEXT BUTTON_SCROLL_FWD
#define LIST_PREV BUTTON_SCROLL_BACK
#define LIST_PGRIGHT (BUTTON_RIGHT | BUTTON_REPEAT)
#define LIST_PGLEFT (BUTTON_LEFT | BUTTON_REPEAT)
#elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD
#define LIST_NEXT BUTTON_DOWN
#define LIST_PREV BUTTON_UP
//#define LIST_PGRIGHT (BUTTON_RIGHT | BUTTON_)
//#define LIST_PGLEFT (BUTTON_LEFT | BUTTON_) Todo: define those
#elif CONFIG_KEYPAD == GMINI100_PAD
#define LIST_NEXT BUTTON_DOWN
#define LIST_PREV BUTTON_UP
#define LIST_PGUP (BUTTON_ON | BUTTON_UP)
#define LIST_PGDN (BUTTON_ON | BUTTON_DOWN)
#define LIST_PGRIGHT (BUTTON_RIGHT | BUTTON_REPEAT)
#define LIST_PGLEFT (BUTTON_LEFT | BUTTON_REPEAT)
#elif CONFIG_KEYPAD == IAUDIO_X5_PAD
#define LIST_NEXT BUTTON_DOWN
#define LIST_PREV BUTTON_UP
#define LIST_PGRIGHT (BUTTON_RIGHT | BUTTON_REPEAT)
#define LIST_PGLEFT (BUTTON_LEFT | BUTTON_REPEAT)
#elif CONFIG_KEYPAD == GIGABEAT_PAD
#define LIST_NEXT BUTTON_DOWN
#define LIST_PREV BUTTON_UP
#define LIST_PGRIGHT (BUTTON_RIGHT | BUTTON_REPEAT)
#define LIST_PGLEFT (BUTTON_LEFT | BUTTON_REPEAT)
#elif CONFIG_KEYPAD == IRIVER_H10_PAD
#define LIST_NEXT BUTTON_SCROLL_DOWN
#define LIST_PREV BUTTON_SCROLL_UP
#define LIST_PGRIGHT (BUTTON_RIGHT | BUTTON_REPEAT)
#define LIST_PGLEFT (BUTTON_LEFT | BUTTON_REPEAT)
#endif
/* /*
* The gui_list is based on callback functions, if you want the list * The gui_list is based on callback functions, if you want the list
* to display something you have to provide it a function that * to display something you have to provide it a function that
@ -390,8 +307,8 @@ void gui_synclist_scroll_left(struct gui_synclist * lists);
* - lists : the synchronized lists * - lists : the synchronized lists
* - button : the keycode of a pressed button * - button : the keycode of a pressed button
* returned value : * returned value :
* - LIST_NEXT when moving forward (next item or pgup) * - ACTION_STD_NEXT when moving forward (next item or pgup)
* - LIST_PREV when moving backward (previous item or pgdown) * - ACTION_STD_PREV when moving backward (previous item or pgdown)
*/ */
extern unsigned gui_synclist_do_button(struct gui_synclist * lists, unsigned button); extern unsigned gui_synclist_do_button(struct gui_synclist * lists, unsigned button);

View file

@ -29,6 +29,7 @@
#include "kernel.h" #include "kernel.h"
#include "misc.h" #include "misc.h"
#include "statusbar.h" #include "statusbar.h"
#include "action.h"
void gui_quickscreen_init(struct gui_quickscreen * qs, void gui_quickscreen_init(struct gui_quickscreen * qs,
struct option_select *left_option, struct option_select *left_option,
@ -128,59 +129,28 @@ bool gui_quickscreen_do_button(struct gui_quickscreen * qs, int button)
switch(button) switch(button)
{ {
case QUICKSCREEN_LEFT : case ACTION_QS_LEFT:
case QUICKSCREEN_LEFT | BUTTON_REPEAT :
#ifdef QUICKSCREEN_RC_LEFT
case QUICKSCREEN_RC_LEFT :
case QUICKSCREEN_RC_LEFT | BUTTON_REPEAT :
#endif
option_select_next(qs->left_option); option_select_next(qs->left_option);
return(true); return(true);
case QUICKSCREEN_BOTTOM : case ACTION_QS_DOWN:
case QUICKSCREEN_BOTTOM | BUTTON_REPEAT :
#ifdef QUICKSCREEN_RC_BOTTOM
case QUICKSCREEN_RC_BOTTOM :
case QUICKSCREEN_RC_BOTTOM | BUTTON_REPEAT :
#endif
option_select_next(qs->bottom_option); option_select_next(qs->bottom_option);
return(true); return(true);
case QUICKSCREEN_RIGHT : case ACTION_QS_RIGHT:
case QUICKSCREEN_RIGHT | BUTTON_REPEAT :
#ifdef QUICKSCREEN_RC_RIGHT
case QUICKSCREEN_RC_RIGHT :
case QUICKSCREEN_RC_RIGHT | BUTTON_REPEAT :
#endif
option_select_next(qs->right_option); option_select_next(qs->right_option);
return(true); return(true);
#ifdef QUICKSCREEN_BOTTOM_INV case ACTION_QS_DOWNINV:
case QUICKSCREEN_BOTTOM_INV :
case QUICKSCREEN_BOTTOM_INV | BUTTON_REPEAT :
#endif
#ifdef QUICKSCREEN_RC_BOTTOM_INV
case QUICKSCREEN_RC_BOTTOM_INV :
case QUICKSCREEN_RC_BOTTOM_INV | BUTTON_REPEAT :
#endif
#if defined(QUICKSCREEN_RC_BOTTOM_INV) || defined(QUICKSCREEN_BOTTOM_INV)
option_select_prev(qs->bottom_option); option_select_prev(qs->bottom_option);
return(true); return(true);
#endif
} }
return(false); return(false);
} }
#ifdef BUTTON_REMOTE
#define uncombine_button(key_read, combined_button) \
key_read & ~(combined_button & ~BUTTON_REMOTE)
#else
#define uncombine_button(key_read, combined_button) \
key_read & ~combined_button
#endif
bool gui_syncquickscreen_run(struct gui_quickscreen * qs, int button_enter) bool gui_syncquickscreen_run(struct gui_quickscreen * qs, int button_enter)
{ {
int raw_key, button; int button;
/* To quit we need either : /* To quit we need either :
* - a second press on the button that made us enter * - a second press on the button that made us enter
* - an action taken while pressing the enter button, * - an action taken while pressing the enter button,
@ -188,9 +158,9 @@ bool gui_syncquickscreen_run(struct gui_quickscreen * qs, int button_enter)
bool can_quit=false; bool can_quit=false;
gui_syncquickscreen_draw(qs); gui_syncquickscreen_draw(qs);
gui_syncstatusbar_draw(&statusbars, true); gui_syncstatusbar_draw(&statusbars, true);
action_signalscreenchange();
while (true) { while (true) {
raw_key = button_get(true); button = get_action(CONTEXT_QUICKSCREEN,TIMEOUT_BLOCK);
button=uncombine_button(raw_key, button_enter);
if(default_event_handler(button) == SYS_USB_CONNECTED) if(default_event_handler(button) == SYS_USB_CONNECTED)
return(true); return(true);
if(gui_quickscreen_do_button(qs, button)) if(gui_quickscreen_do_button(qs, button))
@ -200,23 +170,19 @@ bool gui_syncquickscreen_run(struct gui_quickscreen * qs, int button_enter)
qs->callback(qs); qs->callback(qs);
gui_syncquickscreen_draw(qs); gui_syncquickscreen_draw(qs);
} }
else if(raw_key==button_enter) else if(button==button_enter)
can_quit=true; can_quit=true;
if(raw_key==(button_enter | BUTTON_REL) && can_quit)
return(false); if((button == button_enter) && can_quit)
#ifdef QUICKSCREEN_QUIT break;
if(raw_key==QUICKSCREEN_QUIT
#ifdef QUICKSCREEN_QUIT2 if(button==ACTION_STD_CANCEL)
|| raw_key==QUICKSCREEN_QUIT2 break;
#endif
#if QUICKSCREEN_RC_QUIT
|| raw_key==QUICKSCREEN_RC_QUIT
#endif
)
return(false);
#endif /* QUICKSCREEN_QUIT */
gui_syncstatusbar_draw(&statusbars, false); gui_syncstatusbar_draw(&statusbars, false);
} }
action_signalscreenchange();
return false;
} }
#endif /* HAVE_QUICKSCREEN */ #endif /* HAVE_QUICKSCREEN */

View file

@ -27,42 +27,6 @@
#include "option_select.h" #include "option_select.h"
#include "screen_access.h" #include "screen_access.h"
#define QUICKSCREEN_LEFT BUTTON_LEFT
#define QUICKSCREEN_RIGHT BUTTON_RIGHT
#if (CONFIG_KEYPAD == RECORDER_PAD)
#define QUICKSCREEN_BOTTOM BUTTON_DOWN
#define QUICKSCREEN_BOTTOM_INV BUTTON_UP
#define QUICKSCREEN_QUIT BUTTON_F3
#define QUICKSCREEN_QUIT2 BUTTON_OFF
#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD)
#define QUICKSCREEN_BOTTOM BUTTON_DOWN
#define QUICKSCREEN_BOTTOM_INV BUTTON_UP
#define QUICKSCREEN_QUIT BUTTON_MODE
#define QUICKSCREEN_QUIT2 BUTTON_OFF
#define QUICKSCREEN_RC_QUIT BUTTON_RC_MODE
#ifdef CONFIG_REMOTE_KEYPAD
#define QUICKSCREEN_RC_LEFT BUTTON_RC_REW
#define QUICKSCREEN_RC_BOTTOM BUTTON_RC_VOL_DOWN
#define QUICKSCREEN_RC_BOTTOM_INV BUTTON_RC_VOL_UP
#define QUICKSCREEN_RC_RIGHT BUTTON_RC_FF
#endif
#elif (CONFIG_KEYPAD == IPOD_4G_PAD) || (CONFIG_KEYPAD == IPOD_3G_PAD)
#define QUICKSCREEN_BOTTOM BUTTON_PLAY
#define QUICKSCREEN_QUIT BUTTON_MENU
#define QUICKSCREEN_QUIT2 BUTTON_SELECT
#elif (CONFIG_KEYPAD == IAUDIO_X5_PAD)
#define QUICKSCREEN_BOTTOM BUTTON_DOWN
#define QUICKSCREEN_BOTTOM_INV BUTTON_UP
#define QUICKSCREEN_QUIT BUTTON_REC
#define QUICKSCREEN_QUIT2 BUTTON_POWER
#elif (CONFIG_KEYPAD == IRIVER_H10_PAD)
#define QUICKSCREEN_BOTTOM BUTTON_SCROLL_DOWN
#define QUICKSCREEN_BOTTOM_INV BUTTON_SCROLL_UP
#define QUICKSCREEN_QUIT BUTTON_REW
#define QUICKSCREEN_QUIT2 BUTTON_POWER
#endif
struct gui_quickscreen; struct gui_quickscreen;
/* /*
* Callback function called each time the quickscreen gets modified * Callback function called each time the quickscreen gets modified

View file

@ -23,6 +23,7 @@
#include "textarea.h" #include "textarea.h"
#include "screen_access.h" #include "screen_access.h"
#include "kernel.h" #include "kernel.h"
#include "action.h"
void gui_select_init_numeric(struct gui_select * select, void gui_select_init_numeric(struct gui_select * select,
@ -79,56 +80,28 @@ bool gui_syncselect_do_button(struct gui_select * select, int button)
{ {
switch(button) switch(button)
{ {
case SELECT_INC | BUTTON_REPEAT : case ACTION_SETTINGS_INCREPEAT:
#ifdef SELECT_RC_INC
case SELECT_RC_INC | BUTTON_REPEAT :
#endif
select->options.limit_loop = true; select->options.limit_loop = true;
case SELECT_INC : case ACTION_SETTINGS_INC:
#ifdef SELECT_RC_INC
case SELECT_RC_INC :
#endif
option_select_next(&select->options); option_select_next(&select->options);
return(true); return(true);
case SELECT_DEC | BUTTON_REPEAT : case ACTION_SETTINGS_DECREPEAT:
#ifdef SELECT_RC_DEC
case SELECT_RC_DEC | BUTTON_REPEAT :
#endif
select->options.limit_loop = true; select->options.limit_loop = true;
case SELECT_DEC : case ACTION_SETTINGS_DEC:
#ifdef SELECT_RC_DEC
case SELECT_RC_DEC :
#endif
option_select_prev(&select->options); option_select_prev(&select->options);
return(true); return(true);
case SELECT_OK : case ACTION_STD_OK:
#ifdef SELECT_RC_OK case ACTION_STD_PREV: /*NOTE: this is in CONTEXT_SETTINGS ! */
case SELECT_RC_OK :
#endif
#ifdef SELECT_RC_OK2
case SELECT_RC_OK2 :
#endif
#ifdef SELECT_OK2
case SELECT_OK2 :
#endif
select->validated=true; select->validated=true;
return(false); return(false);
case SELECT_CANCEL : case ACTION_STD_CANCEL:
#ifdef SELECT_CANCEL2
case SELECT_CANCEL2 :
#endif
#ifdef SELECT_RC_CANCEL
case SELECT_RC_CANCEL :
#endif
#ifdef SELECT_RC_CANCEL2
case SELECT_RC_CANCEL2 :
#endif
select->canceled = true; select->canceled = true;
gui_syncselect_draw(select); gui_syncselect_draw(select);
sleep(HZ/2); sleep(HZ/2);
action_signalscreenchange();
return(false); return(false);
} }
return(false); return(false);

View file

@ -23,104 +23,6 @@
#include "settings.h" #include "settings.h"
#include "option_select.h" #include "option_select.h"
#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \
(CONFIG_KEYPAD == IRIVER_H300_PAD)
#define SELECT_INC BUTTON_UP
#define SELECT_DEC BUTTON_DOWN
#define SELECT_OK BUTTON_SELECT
#define SELECT_OK2 BUTTON_LEFT
#define SELECT_CANCEL BUTTON_OFF
#define SELECT_CANCEL2 BUTTON_MODE
#define SELECT_RC_INC BUTTON_RC_FF
#define SELECT_RC_DEC BUTTON_RC_REW
#define SELECT_RC_OK BUTTON_RC_ON
#define SELECT_RC_OK2 BUTTON_RC_MENU
#define SELECT_RC_CANCEL BUTTON_RC_STOP
#define SELECT_RC_CANCEL2 BUTTON_RC_MODE
#elif CONFIG_KEYPAD == RECORDER_PAD
#define SELECT_INC BUTTON_UP
#define SELECT_DEC BUTTON_DOWN
#define SELECT_OK BUTTON_PLAY
#define SELECT_OK2 BUTTON_LEFT
#define SELECT_CANCEL BUTTON_OFF
#define SELECT_CANCEL2 BUTTON_F1
#define SELECT_RC_INC BUTTON_RC_RIGHT
#define SELECT_RC_DEC BUTTON_RC_LEFT
#define SELECT_RC_OK BUTTON_RC_PLAY
#define SELECT_RC_CANCEL BUTTON_RC_STOP
#elif CONFIG_KEYPAD == PLAYER_PAD
#define SELECT_INC BUTTON_RIGHT
#define SELECT_DEC BUTTON_LEFT
#define SELECT_OK BUTTON_PLAY
#define SELECT_CANCEL BUTTON_STOP
#define SELECT_CANCEL2 BUTTON_MENU
#define SELECT_RC_INC BUTTON_RC_RIGHT
#define SELECT_RC_DEC BUTTON_RC_LEFT
#define SELECT_RC_OK BUTTON_RC_PLAY
#define SELECT_RC_CANCEL BUTTON_RC_STOP
#elif (CONFIG_KEYPAD == IPOD_3G_PAD) || (CONFIG_KEYPAD == IPOD_4G_PAD)
#define SELECT_INC BUTTON_SCROLL_FWD
#define SELECT_DEC BUTTON_SCROLL_BACK
#define SELECT_OK BUTTON_SELECT
#define SELECT_OK2 BUTTON_LEFT
#define SELECT_CANCEL BUTTON_MENU
#elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD
#define SELECT_INC BUTTON_UP
#define SELECT_DEC BUTTON_DOWN
#define SELECT_OK BUTTON_RIGHT
#define SELECT_OK2 BUTTON_LEFT
#define SELECT_CANCEL BUTTON_PLAY
#define SELECT_CANCEL2 BUTTON_MODE
#elif CONFIG_KEYPAD == ONDIO_PAD
#define SELECT_INC BUTTON_UP
#define SELECT_DEC BUTTON_DOWN
#define SELECT_OK BUTTON_RIGHT
#define SELECT_OK2 BUTTON_LEFT
#define SELECT_CANCEL BUTTON_MENU
#define SELECT_CANCEL2 BUTTON_OFF
#elif CONFIG_KEYPAD == GMINI100_PAD
#define SELECT_INC BUTTON_UP
#define SELECT_DEC BUTTON_DOWN
#define SELECT_OK BUTTON_PLAY
#define SELECT_OK2 BUTTON_LEFT
#define SELECT_CANCEL BUTTON_OFF
#define SELECT_CANCEL2 BUTTON_MENU
#elif CONFIG_KEYPAD == IAUDIO_X5_PAD
#define SELECT_INC BUTTON_UP
#define SELECT_DEC BUTTON_DOWN
#define SELECT_OK BUTTON_SELECT
#define SELECT_OK2 BUTTON_LEFT
#define SELECT_CANCEL BUTTON_PLAY
#define SELECT_CANCEL2 BUTTON_POWER
#elif CONFIG_KEYPAD == GIGABEAT_PAD
#define SELECT_INC BUTTON_UP
#define SELECT_DEC BUTTON_DOWN
#define SELECT_OK BUTTON_MENU
#define SELECT_OK2 BUTTON_LEFT
#define SELECT_CANCEL BUTTON_A
#define SELECT_CANCEL2 BUTTON_POWER
#elif CONFIG_KEYPAD == IRIVER_H10_PAD
#define SELECT_INC BUTTON_SCROLL_UP
#define SELECT_DEC BUTTON_SCROLL_DOWN
#define SELECT_OK BUTTON_PLAY
#define SELECT_OK2 BUTTON_RIGHT
#define SELECT_CANCEL BUTTON_POWER
#define SELECT_CANCEL2 BUTTON_LEFT
#endif
struct gui_select struct gui_select
{ {
bool canceled; bool canceled;

View file

@ -3,6 +3,7 @@
#include "kernel.h" #include "kernel.h"
#include "misc.h" #include "misc.h"
#include "lang.h" #include "lang.h"
#include "action.h"
void gui_yesno_init(struct gui_yesno * yn, void gui_yesno_init(struct gui_yesno * yn,
struct text_message * main_message, struct text_message * main_message,
@ -54,7 +55,7 @@ bool gui_yesno_draw_result(struct gui_yesno * yn, enum yesno_res result)
gui_textarea_put_message(yn->display, message, 0); gui_textarea_put_message(yn->display, message, 0);
return(true); return(true);
} }
#include "debug.h"
enum yesno_res gui_syncyesno_run(struct text_message * main_message, enum yesno_res gui_syncyesno_run(struct text_message * main_message,
struct text_message * yes_message, struct text_message * yes_message,
struct text_message * no_message) struct text_message * no_message)
@ -72,23 +73,21 @@ enum yesno_res gui_syncyesno_run(struct text_message * main_message,
} }
while (result==-1) while (result==-1)
{ {
button = button_get(true); button = get_action(CONTEXT_YESNOSCREEN,TIMEOUT_BLOCK);
DEBUGF("button=%x\n",button);
switch (button) switch (button)
{ {
case YESNO_OK: case ACTION_YESNO_ACCEPT:
#ifdef YESNO_RC_OK
case YESNO_RC_OK:
#endif
result=YESNO_YES; result=YESNO_YES;
break; break;
default: default:
if(default_event_handler(button) == SYS_USB_CONNECTED) if(default_event_handler(button) == SYS_USB_CONNECTED)
return(YESNO_USB); return(YESNO_USB);
if(!(button & BUTTON_REL)) result = YESNO_NO;
result=YESNO_NO;
} }
} }
action_signalscreenchange();
FOR_NB_SCREENS(i) FOR_NB_SCREENS(i)
result_displayed=gui_yesno_draw_result(&(yn[i]), result); result_displayed=gui_yesno_draw_result(&(yn[i]), result);
if(result_displayed) if(result_displayed)

View file

@ -4,41 +4,6 @@
#include "screen_access.h" #include "screen_access.h"
#include "textarea.h" #include "textarea.h"
#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \
(CONFIG_KEYPAD == IRIVER_H300_PAD)
#define YESNO_OK BUTTON_SELECT
#define YESNO_RC_OK BUTTON_RC_MENU
#elif CONFIG_KEYPAD == RECORDER_PAD
#define YESNO_OK BUTTON_PLAY
#define YESNO_RC_OK BUTTON_RC_PLAY
#elif CONFIG_KEYPAD == PLAYER_PAD
#define YESNO_OK BUTTON_PLAY
#define YESNO_RC_OK BUTTON_RC_PLAY
#elif CONFIG_KEYPAD == ONDIO_PAD
#define YESNO_OK BUTTON_RIGHT
#elif CONFIG_KEYPAD == GMINI100_PAD
#define YESNO_OK BUTTON_PLAY
#elif (CONFIG_KEYPAD == IPOD_3G_PAD) || (CONFIG_KEYPAD == IPOD_4G_PAD)
#define YESNO_OK BUTTON_PLAY
#elif (CONFIG_KEYPAD == IRIVER_IFP7XX_PAD)
#define YESNO_OK BUTTON_RIGHT
#elif (CONFIG_KEYPAD == IAUDIO_X5_PAD)
#define YESNO_OK BUTTON_RIGHT
#elif (CONFIG_KEYPAD == GIGABEAT_PAD)
#define YESNO_OK BUTTON_RIGHT
#elif (CONFIG_KEYPAD == IRIVER_H10_PAD)
#define YESNO_OK BUTTON_RIGHT
#endif
enum yesno_res enum yesno_res
{ {
YESNO_YES, YESNO_YES,

View file

@ -0,0 +1,386 @@
/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
*
* Copyright (C) 2006 Jonathan Gordon
*
* 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.
*
****************************************************************************/
/* Button Code Definitions for iriver h100/h300 target */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "config.h"
#include "action.h"
#include "button.h"
#include "lcd-remote.h" /* for remote_type() */
#include "settings.h"
/*
* The format of the list is as follows
* { Action Code, Button code, Prereq button code }
* if there's no need to check the previous button's value, use BUTTON_NONE
* Insert LAST_ITEM_IN_LIST at the end of each mapping
*/
/* CONTEXT_CUSTOM's used in this file...
CONTEXT_CUSTOM|CONTEXT_TREE = the standard list/tree defines (without directions)
*/
struct button_mapping button_context_standard[] = {
{ ACTION_STD_PREV, BUTTON_UP, BUTTON_NONE },
{ ACTION_STD_PREVREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_UP },
{ ACTION_STD_NEXT, BUTTON_DOWN, BUTTON_NONE },
{ ACTION_STD_NEXTREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_DOWN },
{ ACTION_STD_CANCEL, BUTTON_LEFT, BUTTON_NONE },
{ ACTION_STD_CANCEL, BUTTON_OFF, BUTTON_NONE },
{ ACTION_STD_CONTEXT, BUTTON_SELECT|BUTTON_REPEAT,BUTTON_SELECT },
{ ACTION_STD_QUICKSCREEN, BUTTON_MODE|BUTTON_REPEAT, BUTTON_MODE },
{ ACTION_STD_MENU, BUTTON_MODE|BUTTON_REL, BUTTON_MODE },
{ ACTION_STD_OK, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT },
{ ACTION_STD_OK, BUTTON_RIGHT, BUTTON_NONE },
LAST_ITEM_IN_LIST
}; /* button_context_standard */
struct button_mapping button_context_wps[] = {
{ ACTION_WPS_PLAY, BUTTON_ON|BUTTON_REL, BUTTON_ON },
{ ACTION_WPS_SKIPNEXT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT },
{ ACTION_WPS_SKIPPREV, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT },
{ ACTION_WPS_SEEKBACK, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_LEFT },
{ ACTION_WPS_SEEKFWD, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_RIGHT },
{ ACTION_WPS_STOPSEEK, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT|BUTTON_REPEAT },
{ ACTION_WPS_STOPSEEK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT|BUTTON_REPEAT },
{ ACTION_WPS_NEXTDIR, BUTTON_ON|BUTTON_RIGHT, BUTTON_ON },
{ ACTION_WPS_PREVDIR, BUTTON_ON|BUTTON_LEFT, BUTTON_ON },
{ ACTION_WPS_STOP, BUTTON_OFF, BUTTON_NONE },
{ ACTION_WPS_VOLDOWN, BUTTON_DOWN|BUTTON_REL, BUTTON_DOWN },
{ ACTION_WPS_VOLDOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_DOWN },
{ ACTION_WPS_VOLUP, BUTTON_UP|BUTTON_REL, BUTTON_UP },
{ ACTION_WPS_VOLUP, BUTTON_UP|BUTTON_REPEAT, BUTTON_UP },
{ ACTION_WPS_PITCHSCREEN, BUTTON_ON|BUTTON_REPEAT, BUTTON_ON },
{ ACTION_WPS_QUICKSCREEN, BUTTON_MODE|BUTTON_REPEAT, BUTTON_MODE },
{ ACTION_WPS_MENU, BUTTON_MODE|BUTTON_REL, BUTTON_MODE },
{ ACTION_WPS_CONTEXT, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_SELECT },
{ ACTION_WPS_BROWSE, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT },
{ ACTION_WPSAB_RESET, BUTTON_ON|BUTTON_SELECT, BUTTON_ON },
LAST_ITEM_IN_LIST
}; /* button_context_wps */
struct button_mapping button_context_listtree[] = {
{ ACTION_LISTTREE_PGUP, BUTTON_ON|BUTTON_UP, BUTTON_ON },
{ ACTION_LISTTREE_PGUP, BUTTON_UP|BUTTON_REL, BUTTON_ON|BUTTON_UP },
{ ACTION_LISTTREE_PGUP, BUTTON_ON|BUTTON_UP|BUTTON_REPEAT, BUTTON_ON|BUTTON_UP },
{ ACTION_LISTTREE_PGDOWN, BUTTON_ON|BUTTON_DOWN, BUTTON_ON|BUTTON_UP },
{ ACTION_LISTTREE_PGDOWN, BUTTON_DOWN|BUTTON_REL, BUTTON_ON|BUTTON_DOWN },
{ ACTION_LISTTREE_PGDOWN, BUTTON_ON|BUTTON_DOWN|BUTTON_REPEAT, BUTTON_ON|BUTTON_DOWN },
LAST_ITEM_IN_LIST
}; /* button_context_listtree */
struct button_mapping button_context_tree[] = {
{ ACTION_TREE_WPS, BUTTON_ON|BUTTON_REL, BUTTON_ON },
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST)
}; /* button_context_listtree */
struct button_mapping button_context_listtree_scroll_with_combo[] = {
{ ACTION_NONE, BUTTON_ON, BUTTON_NONE },
{ ACTION_TREE_PGLEFT, BUTTON_ON|BUTTON_LEFT, BUTTON_ON },
{ ACTION_TREE_PGLEFT, BUTTON_LEFT|BUTTON_REL, BUTTON_ON|BUTTON_LEFT },
{ ACTION_TREE_PGLEFT, BUTTON_ON|BUTTON_LEFT, BUTTON_LEFT|BUTTON_REL },
{ ACTION_TREE_PGLEFT, BUTTON_ON|BUTTON_LEFT|BUTTON_REPEAT, BUTTON_ON|BUTTON_LEFT },
{ ACTION_TREE_PGRIGHT, BUTTON_ON|BUTTON_RIGHT, BUTTON_ON },
{ ACTION_TREE_PGRIGHT, BUTTON_RIGHT|BUTTON_REL, BUTTON_ON|BUTTON_RIGHT },
{ ACTION_TREE_PGRIGHT, BUTTON_ON|BUTTON_RIGHT, BUTTON_RIGHT|BUTTON_REL },
{ ACTION_TREE_PGRIGHT, BUTTON_ON|BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_ON|BUTTON_RIGHT },
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|1),
};
struct button_mapping button_context_listtree_scroll_without_combo[] = {
{ ACTION_NONE, BUTTON_LEFT, BUTTON_NONE },
{ ACTION_STD_CANCEL, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT },
{ ACTION_TREE_PGLEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_LEFT },
{ ACTION_TREE_PGLEFT, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT|BUTTON_REPEAT },
{ ACTION_NONE, BUTTON_RIGHT, BUTTON_NONE },
{ ACTION_STD_OK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT },
{ ACTION_TREE_PGRIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_RIGHT },
{ ACTION_TREE_PGRIGHT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT|BUTTON_REPEAT },
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|1),
};
struct button_mapping button_context_settings[] = {
{ ACTION_SETTINGS_INC, BUTTON_UP, BUTTON_NONE },
{ ACTION_SETTINGS_INCREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_UP },
{ ACTION_SETTINGS_DEC, BUTTON_DOWN, BUTTON_NONE },
{ ACTION_SETTINGS_DECREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_DOWN },
{ ACTION_NONE, BUTTON_LEFT, BUTTON_NONE },
{ ACTION_NONE, BUTTON_RIGHT, BUTTON_NONE },
LAST_ITEM_IN_LIST
}; /* button_context_settings */
struct button_mapping button_context_settingsgraphical[] = {
{ ACTION_SETTINGS_INC, BUTTON_RIGHT, BUTTON_NONE },
{ ACTION_SETTINGS_INCREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_RIGHT },
{ ACTION_SETTINGS_DEC, BUTTON_LEFT, BUTTON_NONE },
{ ACTION_SETTINGS_DECREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_LEFT },
{ ACTION_STD_PREV, BUTTON_UP, BUTTON_NONE },
{ ACTION_STD_PREVREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_UP },
{ ACTION_STD_NEXT, BUTTON_DOWN, BUTTON_NONE },
{ ACTION_STD_NEXTREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_DOWN },
LAST_ITEM_IN_LIST
}; /* button_context_settingsgraphical */
struct button_mapping button_context_yesno[] = {
{ ACTION_YESNO_ACCEPT, BUTTON_SELECT, BUTTON_NONE },
{ ACTION_YESNO_ACCEPT, BUTTON_RC_ON, BUTTON_NONE },
LAST_ITEM_IN_LIST
}; /* button_context_settings_yesno */
struct button_mapping button_context_bmark[] = {
{ ACTION_BMARK_DELETE, BUTTON_REC, BUTTON_NONE },
{ ACTION_STD_OK, BUTTON_SELECT, BUTTON_NONE },
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_SETTINGSGRAPHICAL),
}; /* button_context_settings_bmark */
struct button_mapping button_context_quickscreen[] = {
{ ACTION_QS_DOWNINV, BUTTON_UP, BUTTON_NONE },
{ ACTION_QS_DOWNINV, BUTTON_UP|BUTTON_REPEAT, BUTTON_UP },
{ ACTION_QS_DOWN, BUTTON_DOWN, BUTTON_NONE },
{ ACTION_QS_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_DOWN },
{ ACTION_QS_LEFT, BUTTON_LEFT, BUTTON_NONE },
{ ACTION_QS_LEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_LEFT },
{ ACTION_QS_RIGHT, BUTTON_RIGHT, BUTTON_NONE },
{ ACTION_QS_RIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_RIGHT },
{ ACTION_STD_CANCEL, BUTTON_MODE, BUTTON_NONE },
LAST_ITEM_IN_LIST
}; /* button_context_quickscreen */
/*****************************************************************************
* Remote control mappings
*****************************************************************************/
/********* H100 LCD remote ******/
struct button_mapping button_context_standard_h100lcdremote[] = {
{ ACTION_STD_PREV, BUTTON_RC_REW, BUTTON_NONE },
{ ACTION_STD_PREVREPEAT, BUTTON_RC_REW|BUTTON_REPEAT, BUTTON_RC_REW },
{ ACTION_STD_NEXT, BUTTON_RC_FF, BUTTON_NONE },
{ ACTION_STD_NEXTREPEAT, BUTTON_RC_FF|BUTTON_REPEAT, BUTTON_RC_FF },
{ ACTION_STD_OK, BUTTON_RC_ON|BUTTON_REL, BUTTON_RC_ON },
{ ACTION_STD_CONTEXT, BUTTON_RC_MENU|BUTTON_REPEAT, BUTTON_RC_MENU },
{ ACTION_STD_CANCEL, BUTTON_RC_STOP, BUTTON_NONE },
{ ACTION_STD_QUICKSCREEN, BUTTON_RC_MODE|BUTTON_REPEAT, BUTTON_RC_MODE },
{ ACTION_STD_MENU, BUTTON_RC_MODE|BUTTON_REL, BUTTON_RC_MODE },
{ ACTION_STD_OK, BUTTON_RC_MENU|BUTTON_REL, BUTTON_RC_MENU },
LAST_ITEM_IN_LIST
}; /* button_context_standard_h100lcdremote */
struct button_mapping button_context_wps_h100lcdremote[] = {
{ ACTION_WPS_PLAY, BUTTON_RC_ON|BUTTON_REL, BUTTON_RC_ON },
{ ACTION_WPS_SKIPNEXT, BUTTON_RC_FF|BUTTON_REL, BUTTON_RC_FF },
{ ACTION_WPS_SEEKFWD, BUTTON_RC_FF|BUTTON_REPEAT, BUTTON_RC_FF },
{ ACTION_WPS_SKIPPREV, BUTTON_RC_REW|BUTTON_REL, BUTTON_RC_REW },
{ ACTION_WPS_SEEKBACK, BUTTON_RC_REW|BUTTON_REPEAT, BUTTON_RC_REW },
{ ACTION_WPS_STOP, BUTTON_RC_STOP, BUTTON_NONE },
{ ACTION_WPS_VOLDOWN, BUTTON_RC_VOL_DOWN, BUTTON_NONE },
{ ACTION_WPS_VOLDOWN, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_RC_VOL_DOWN },
{ ACTION_WPS_VOLUP, BUTTON_RC_VOL_UP, BUTTON_NONE },
{ ACTION_WPS_VOLUP, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_RC_VOL_UP },
{ ACTION_WPS_NEXTDIR, BUTTON_RC_BITRATE, BUTTON_NONE },
{ ACTION_WPS_PREVDIR, BUTTON_RC_SOURCE, BUTTON_NONE },
{ ACTION_WPS_PITCHSCREEN, BUTTON_RC_ON|BUTTON_REPEAT, BUTTON_RC_ON },
{ ACTION_WPS_QUICKSCREEN, BUTTON_RC_MODE|BUTTON_REPEAT, BUTTON_RC_MODE },
{ ACTION_WPS_MENU, BUTTON_RC_MODE|BUTTON_REL, BUTTON_RC_MODE },
{ ACTION_WPS_CONTEXT, BUTTON_RC_MENU|BUTTON_REPEAT, BUTTON_RC_MENU },
{ ACTION_WPS_BROWSE, BUTTON_RC_MENU|BUTTON_REL, BUTTON_RC_MENU },
LAST_ITEM_IN_LIST
}; /* button_context_wps_h100lcdremote */
struct button_mapping button_context_listtree_h100lcdremote[] = {
{ ACTION_LISTTREE_PGUP, BUTTON_RC_SOURCE, BUTTON_NONE },
{ ACTION_LISTTREE_PGUP, BUTTON_RC_SOURCE|BUTTON_REPEAT, BUTTON_RC_SOURCE },
{ ACTION_LISTTREE_PGDOWN, BUTTON_RC_BITRATE, BUTTON_NONE },
{ ACTION_LISTTREE_PGDOWN, BUTTON_RC_BITRATE|BUTTON_REPEAT, BUTTON_RC_BITRATE },
{ ACTION_TREE_WPS, BUTTON_RC_ON|BUTTON_REL, BUTTON_RC_ON },
{ ACTION_TREE_STOP, BUTTON_RC_STOP, BUTTON_NONE },
LAST_ITEM_IN_LIST
}; /* button_context_listtree_h100lcdremote */
/* Not needed? _std_ actions seem to be fine */
struct button_mapping button_context_settings_h100lcdremote[] = {
LAST_ITEM_IN_LIST
};/* button_context_settings_h100lcdremote */
/********* H300 LCD remote ******/
struct button_mapping button_context_standard_h300lcdremote[] = {
{ ACTION_STD_PREV, BUTTON_RC_VOL_UP, BUTTON_NONE },
{ ACTION_STD_PREVREPEAT, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_RC_VOL_UP },
{ ACTION_STD_NEXT, BUTTON_RC_VOL_DOWN, BUTTON_NONE },
{ ACTION_STD_NEXTREPEAT, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_RC_VOL_DOWN },
{ ACTION_STD_OK, BUTTON_RC_ON|BUTTON_REL, BUTTON_RC_ON },
{ ACTION_STD_CANCEL, BUTTON_RC_REW, BUTTON_NONE },
{ ACTION_STD_CANCEL, BUTTON_RC_REW|BUTTON_REPEAT, BUTTON_RC_REW },
{ ACTION_STD_CONTEXT, BUTTON_RC_MENU|BUTTON_REPEAT, BUTTON_RC_MENU },
{ ACTION_STD_CANCEL, BUTTON_RC_STOP, BUTTON_NONE },
{ ACTION_STD_QUICKSCREEN, BUTTON_RC_MODE|BUTTON_REPEAT, BUTTON_RC_MODE },
{ ACTION_STD_MENU, BUTTON_RC_MODE|BUTTON_REL, BUTTON_RC_MODE },
{ ACTION_STD_OK, BUTTON_RC_MENU|BUTTON_REL, BUTTON_RC_MENU },
{ ACTION_STD_OK, BUTTON_RC_FF, BUTTON_NONE },
{ ACTION_STD_OK, BUTTON_RC_FF|BUTTON_REPEAT, BUTTON_NONE},
LAST_ITEM_IN_LIST
}; /* button_context_standard */
/* the mapping of the 2 LCD remotes in the WPS screen should be the same */
struct button_mapping *button_context_wps_h300lcdremote =
button_context_wps_h100lcdremote;
/* FIXME: the same as h100 ?? */
struct button_mapping *button_context_listtree_h300lcdremote =
button_context_listtree_h100lcdremote;
/* FIXME: the same as h100 ?? */
struct button_mapping *button_context_settings_h300lcdremote =
button_context_settings_h100lcdremote;
/* FIXME: non lcd remotes need mappings.. ?? */
/* the actual used tables */
static struct button_mapping
*remote_button_context_std = button_context_standard_h100lcdremote,
*remote_button_context_wps = button_context_wps_h100lcdremote,
*remote_button_context_listtree = button_context_listtree_h100lcdremote,
*remote_button_context_settings = button_context_settings_h100lcdremote;
static int _remote_type = 0;
static void remap_remote(void)
{
_remote_type = remote_type();
switch(_remote_type)
{
case REMOTETYPE_UNPLUGGED:
remote_button_context_std = NULL;
remote_button_context_wps = NULL;
remote_button_context_listtree = NULL;
remote_button_context_settings = NULL;
break;
case REMOTETYPE_H100_LCD:
remote_button_context_std = button_context_standard_h100lcdremote;
remote_button_context_wps = button_context_wps_h100lcdremote;
remote_button_context_listtree = button_context_listtree_h100lcdremote;
remote_button_context_settings = button_context_settings_h100lcdremote;
break;
case REMOTETYPE_H300_LCD:
remote_button_context_std = button_context_standard_h300lcdremote;
remote_button_context_wps = button_context_wps_h300lcdremote;
remote_button_context_listtree = button_context_listtree_h300lcdremote;
remote_button_context_settings = button_context_settings_h300lcdremote;
break;
case REMOTETYPE_H300_NONLCD: /* FIXME: add its tables */
remote_button_context_std = button_context_standard_h300lcdremote;
remote_button_context_wps = button_context_wps_h300lcdremote;
remote_button_context_listtree = button_context_listtree_h300lcdremote;
remote_button_context_settings = button_context_settings_h300lcdremote;
break;
}
}
struct button_mapping* get_context_mapping_remote(int context)
{
if(remote_type() != _remote_type)
remap_remote();
context ^= CONTEXT_REMOTE;
switch (context)
{
case CONTEXT_STD:
case CONTEXT_MAINMENU:
case CONTEXT_SETTINGS:
return remote_button_context_std;
case CONTEXT_WPS:
return remote_button_context_wps;
case CONTEXT_TREE:
case CONTEXT_LIST:
return remote_button_context_listtree;
case CONTEXT_YESNOSCREEN:
case CONTEXT_BOOKMARKSCREEN:
; /* fall out of the switch */
}
return remote_button_context_std;
}
struct button_mapping* get_context_mapping(int context)
{
if (context&CONTEXT_REMOTE)
return get_context_mapping_remote(context);
switch (context)
{
case CONTEXT_STD:
case CONTEXT_MAINMENU:
return button_context_standard;
case CONTEXT_WPS:
return button_context_wps;
case CONTEXT_LIST:
return button_context_listtree;
case CONTEXT_TREE:
if (global_settings.hold_lr_for_scroll_in_list)
return button_context_listtree_scroll_without_combo;
else return button_context_listtree_scroll_with_combo;
case CONTEXT_CUSTOM|1:
return button_context_tree;
case CONTEXT_SETTINGSGRAPHICAL:
return button_context_settingsgraphical;
case CONTEXT_SETTINGS:
return button_context_settings;
case CONTEXT_YESNOSCREEN:
return button_context_yesno;
case CONTEXT_BOOKMARKSCREEN:
return button_context_bmark;
case CONTEXT_QUICKSCREEN:
return button_context_quickscreen;
}
return button_context_standard;
}

151
apps/keymaps/keymap-ipod.c Normal file
View file

@ -0,0 +1,151 @@
/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
*
* Copyright (C) 2006 Jonathan Gordon
*
* 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.
*
****************************************************************************/
/* Button Code Definitions for ipod target */
#include "config.h"
#include "action.h"
#include "button.h"
/*
* The format of the list is as follows
* { Action Code, Button code, Prereq button code }
* if there's no need to check the previous button's value, use BUTTON_NONE
* Insert LAST_ITEM_IN_LIST at the end of each mapping
*/
/* CONTEXT_CUSTOM's used in this file...
CONTEXT_CUSTOM|1 = the standard list/tree defines (without directions)
*/
struct button_mapping button_context_standard[] = {
{ ACTION_STD_PREV, BUTTON_SCROLL_BACK, BUTTON_NONE },
{ ACTION_STD_PREVREPEAT, BUTTON_SCROLL_BACK|BUTTON_REPEAT, BUTTON_SCROLL_BACK },
{ ACTION_STD_NEXT, BUTTON_SCROLL_FWD, BUTTON_NONE },
{ ACTION_STD_NEXTREPEAT, BUTTON_SCROLL_FWD|BUTTON_REPEAT, BUTTON_SCROLL_FWD },
{ ACTION_STD_CANCEL, BUTTON_LEFT, BUTTON_NONE },
{ ACTION_STD_OK, BUTTON_RIGHT, BUTTON_NONE },
{ ACTION_STD_OK, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT },
{ ACTION_STD_MENU, BUTTON_MENU|BUTTON_REL, BUTTON_MENU },
{ ACTION_STD_QUICKSCREEN, BUTTON_MENU|BUTTON_REPEAT, BUTTON_MENU },
{ ACTION_STD_CONTEXT, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_SELECT },
{ ACTION_STD_CANCEL, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY },
LAST_ITEM_IN_LIST
}; /* button_context_standard */
struct button_mapping button_context_tree[] = {
{ ACTION_TREE_WPS, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY },
{ ACTION_TREE_STOP, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY },
LAST_ITEM_IN_LIST
}; /* button_context_tree */
struct button_mapping button_context_tree_scroll_lr[] = {
{ ACTION_NONE, BUTTON_LEFT, BUTTON_NONE },
{ ACTION_STD_CANCEL, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT },
{ ACTION_TREE_PGLEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_LEFT },
{ ACTION_TREE_PGLEFT, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT|BUTTON_REPEAT },
{ ACTION_NONE, BUTTON_RIGHT, BUTTON_NONE },
{ ACTION_STD_OK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT },
{ ACTION_TREE_PGRIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_RIGHT },
{ ACTION_TREE_PGRIGHT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT|BUTTON_REPEAT },
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|1),
};
struct button_mapping button_context_wps[] = {
{ ACTION_WPS_PLAY, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY },
{ ACTION_WPS_STOP, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY },
{ ACTION_WPS_SKIPPREV, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT },
{ ACTION_WPS_SEEKBACK, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_LEFT },
{ ACTION_WPS_STOPSEEK, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT|BUTTON_REPEAT },
{ ACTION_WPS_SKIPNEXT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT },
{ ACTION_WPS_SEEKFWD, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_RIGHT },
{ ACTION_WPS_STOPSEEK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT|BUTTON_REPEAT },
{ ACTION_WPS_VOLDOWN, BUTTON_SCROLL_BACK, BUTTON_NONE },
{ ACTION_WPS_VOLDOWN, BUTTON_SCROLL_BACK|BUTTON_REPEAT, BUTTON_SCROLL_BACK },
{ ACTION_WPS_VOLUP, BUTTON_SCROLL_FWD, BUTTON_NONE },
{ ACTION_WPS_VOLUP, BUTTON_SCROLL_FWD|BUTTON_REPEAT, BUTTON_SCROLL_FWD },
{ ACTION_WPS_BROWSE, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT },
{ ACTION_WPS_CONTEXT, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_SELECT },
{ ACTION_WPS_MENU, BUTTON_MENU|BUTTON_REL, BUTTON_MENU },
{ ACTION_WPS_QUICKSCREEN, BUTTON_MENU|BUTTON_REPEAT, BUTTON_MENU },
LAST_ITEM_IN_LIST
}; /* button_context_wps */
struct button_mapping button_context_settings[] = {
{ ACTION_SETTINGS_INC, BUTTON_SCROLL_FWD, BUTTON_NONE },
{ ACTION_SETTINGS_INCREPEAT, BUTTON_SCROLL_FWD|BUTTON_REPEAT, BUTTON_SCROLL_FWD },
{ ACTION_SETTINGS_DEC, BUTTON_SCROLL_BACK, BUTTON_NONE },
{ ACTION_SETTINGS_DECREPEAT, BUTTON_SCROLL_BACK|BUTTON_REPEAT, BUTTON_SCROLL_BACK },
{ ACTION_STD_PREV, BUTTON_LEFT, BUTTON_NONE },
{ ACTION_STD_PREVREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_LEFT },
{ ACTION_STD_NEXT, BUTTON_RIGHT, BUTTON_NONE },
{ ACTION_STD_NEXTREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_RIGHT },
{ ACTION_STD_CANCEL, BUTTON_MENU|BUTTON_REL, BUTTON_MENU }, /* rel so bmark screen works */
LAST_ITEM_IN_LIST
}; /* button_context_settings */
struct button_mapping button_context_yesno[] = {
{ ACTION_YESNO_ACCEPT, BUTTON_PLAY, BUTTON_NONE },
LAST_ITEM_IN_LIST
}; /* button_context_settings_yesno */
struct button_mapping button_context_bmark[] = {
{ ACTION_BMARK_DELETE, BUTTON_MENU|BUTTON_REPEAT, BUTTON_MENU },
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_SETTINGS),
}; /* button_context_settings_bmark */
/* get_context_mapping returns a pointer to one of the above defined arrays depending on the context */
struct button_mapping* get_context_mapping(int context)
{
switch (context)
{
case CONTEXT_STD:
return button_context_standard;
case CONTEXT_WPS:
return button_context_wps;
case CONTEXT_TREE:
if (global_settings.hold_lr_for_scroll_in_list)
return button_context_tree_scroll_lr;
/* else fall through to CUSTOM|1 */
case CONTEXT_CUSTOM|1:
return button_context_tree;
case CONTEXT_LIST:
case CONTEXT_MAINMENU:
break;
case CONTEXT_SETTINGS:
case CONTEXT_SETTINGSGRAPHICAL:
return button_context_settings;
case CONTEXT_YESNOSCREEN:
return button_context_yesno;
case CONTEXT_BOOKMARKSCREEN:
return button_context_bmark;
default:
return button_context_standard;
}
return button_context_standard;
}

View file

@ -0,0 +1,77 @@
/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
*
* Copyright (C) 200
*
* 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.
*
****************************************************************************/
/* Button Code Definitions for <new> target */
#include "config.h"
#include "action.h"
#include "button.h"
#define LAST_ITEM_IN_LIST { ACTION_NONE,BUTTON_NONE,BUTTON_NONE }
/* {Action Code, Button code, Prereq button code } */
/**
This file is where all button mappings are defined.
In ../action.h there is an enum with all the used ACTION_ codes.
Ideally All the ACTION_STD_* and ACTION_WPS_* codes should be defined somehwere in this file.
Remeber to make a copy of this file and rename it to keymap-<targetname>.c and add it to apps/SOURCES
Good luck and thanks for porting a new target! :D
**/
/*
* The format of the list is as follows
* { Action Code, Button code, Prereq button code }
* if there's no need to check the previous button's value, use BUTTON_NONE
* Insert LAST_ITEM_IN_LIST at the end of each mapping
*/
struct button_mapping button_context_standard[] = {
LAST_ITEM_IN_LIST
}; /* button_context_standard */
struct button_mapping button_context_wps[] = {
LAST_ITEM_IN_LIST
}; /* button_context_wps */
/* get_context_mapping returns a pointer to one of the above defined arrays depending on the context */
struct button_mapping* get_context_mapping(int context)
{
switch (context)
{
case CONTEXT_STD:
return button_context_standard;
case CONTEXT_WPS:
return button_context_wps;
case CONTEXT_TREE:
case CONTEXT_LIST:
case CONTEXT_MAINMENU:
case CONTEXT_SETTINGS:
case CONTEXT_SETTINGS|CONTEXT_REMOTE:
default:
return button_context_standard;
}
return button_context_standard;
}

135
apps/keymaps/keymap-ondio.c Normal file
View file

@ -0,0 +1,135 @@
/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
*
* Copyright (C) 2006 Jonathan Gordon
*
* 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.
*
****************************************************************************/
/* *
* Button Code Definitions for archos ondio fm/sp targets
*
* \TODO test!
*/
#include "config.h"
#include "action.h"
#include "button.h"
#include "settings.h"
/* CONTEXT_CUSTOM's used in this file...
CONTEXT_CUSTOM|1 = the standard list/tree defines (without directions)
*/
struct button_mapping button_context_standard[] = {
{ ACTION_STD_PREV, BUTTON_UP, BUTTON_NONE },
{ ACTION_STD_PREVREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_UP },
{ ACTION_STD_NEXT, BUTTON_DOWN, BUTTON_NONE },
{ ACTION_STD_NEXTREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_DOWN },
{ ACTION_STD_CONTEXT, BUTTON_MENU|BUTTON_REPEAT, BUTTON_MENU },
{ ACTION_STD_CANCEL, BUTTON_LEFT, BUTTON_NONE },
{ ACTION_STD_OK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT },
{ ACTION_STD_MENU, BUTTON_MENU|BUTTON_REL, BUTTON_MENU },
{ ACTION_STD_CANCEL, BUTTON_OFF, BUTTON_NONE },
LAST_ITEM_IN_LIST
};
struct button_mapping button_context_wps[] = {
{ ACTION_WPS_PLAY, BUTTON_OFF|BUTTON_REL, BUTTON_OFF },
{ ACTION_WPS_SKIPNEXT, BUTTON_RIGHT, BUTTON_NONE },
{ ACTION_WPS_SKIPPREV, BUTTON_LEFT, BUTTON_NONE },
{ ACTION_WPS_SEEKBACK, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_LEFT },
{ ACTION_WPS_SEEKFWD, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_RIGHT },
{ ACTION_WPS_STOPSEEK, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT|BUTTON_REPEAT },
{ ACTION_WPS_STOPSEEK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT|BUTTON_REPEAT },
{ ACTION_WPS_STOP, BUTTON_OFF|BUTTON_REPEAT, BUTTON_OFF },
{ ACTION_WPS_VOLDOWN, BUTTON_DOWN, BUTTON_NONE },
{ ACTION_WPS_VOLDOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_DOWN },
{ ACTION_WPS_VOLUP, BUTTON_UP, BUTTON_NONE },
{ ACTION_WPS_VOLUP, BUTTON_UP|BUTTON_REPEAT, BUTTON_UP },
{ ACTION_WPS_BROWSE, BUTTON_MENU|BUTTON_REL, BUTTON_MENU },
{ ACTION_WPS_MENU, BUTTON_MENU|BUTTON_REPEAT, BUTTON_MENU },
{ ACTION_WPS_CONTEXT, BUTTON_MENU|BUTTON_OFF, BUTTON_MENU }, /* this may trigger ACTION_WPS_BROWSE so may need changing */
LAST_ITEM_IN_LIST
};
struct button_mapping button_context_settings[] = {
{ ACTION_SETTINGS_INC, BUTTON_UP, BUTTON_NONE },
{ ACTION_SETTINGS_INCREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_UP },
{ ACTION_SETTINGS_DEC, BUTTON_DOWN, BUTTON_NONE },
{ ACTION_SETTINGS_DECREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_DOWN },
{ ACTION_STD_NEXT, BUTTON_MENU, BUTTON_NONE },
{ ACTION_STD_OK, BUTTON_RIGHT, BUTTON_NONE },
{ ACTION_STD_CANCEL, BUTTON_LEFT, BUTTON_NONE },
LAST_ITEM_IN_LIST
};
struct button_mapping button_context_tree[] = {
{ ACTION_TREE_WPS, BUTTON_OFF|BUTTON_REL, BUTTON_OFF },
{ ACTION_TREE_STOP, BUTTON_OFF|BUTTON_REPEAT, BUTTON_OFF },
LAST_ITEM_IN_LIST
}; /* button_context_listtree */
struct button_mapping button_context_tree_scroll_lr[] = {
{ ACTION_NONE, BUTTON_LEFT, BUTTON_NONE },
{ ACTION_STD_CANCEL, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT },
{ ACTION_TREE_PGLEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_LEFT },
{ ACTION_TREE_PGLEFT, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT|BUTTON_REPEAT },
{ ACTION_NONE, BUTTON_RIGHT, BUTTON_NONE },
{ ACTION_STD_OK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT },
{ ACTION_TREE_PGRIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_RIGHT },
{ ACTION_TREE_PGRIGHT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT|BUTTON_REPEAT },
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|1),
};
struct button_mapping button_context_yesno[] = {
{ ACTION_YESNO_ACCEPT, BUTTON_RIGHT, BUTTON_NONE },
LAST_ITEM_IN_LIST
};
struct button_mapping* get_context_mapping( int context )
{
switch( context )
{
case CONTEXT_STD:
return button_context_standard;
case CONTEXT_WPS:
return button_context_wps;
case CONTEXT_SETTINGS:
return button_context_settings;
case CONTEXT_YESNOSCREEN:
return button_context_yesno;
case CONTEXT_TREE:
if (global_settings.hold_lr_for_scroll_in_list)
return button_context_tree_scroll_lr;
/* else fall through to CUSTOM|1 */
case CONTEXT_CUSTOM|1:
return button_context_tree;
case CONTEXT_LIST:
case CONTEXT_MAINMENU:
default:
return button_context_standard;
}
}

View file

@ -0,0 +1,136 @@
/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
*
* Copyright (C) 2006 Jonathan Gordon
*
* 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.
*
****************************************************************************/
/* *
* Button Code Definitions for archos player targets
*
* \TODO test!
*/
#include "config.h"
#include "action.h"
#include "button.h"
#include "settings.h"
/* CONTEXT_CUSTOM's used in this file...
CONTEXT_CUSTOM|1 = the standard list/tree defines (without directions)
*/
struct button_mapping button_context_standard[] = {
{ ACTION_STD_PREV, BUTTON_LEFT, BUTTON_NONE },
{ ACTION_STD_PREVREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_LEFT },
{ ACTION_STD_NEXT, BUTTON_RIGHT, BUTTON_NONE },
{ ACTION_STD_NEXTREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_RIGHT },
{ ACTION_STD_CONTEXT, BUTTON_MENU|BUTTON_REPEAT, BUTTON_MENU },
{ ACTION_STD_CANCEL, BUTTON_STOP, BUTTON_NONE },
{ ACTION_STD_OK, BUTTON_PLAY, BUTTON_NONE },
{ ACTION_STD_OK, BUTTON_ON|BUTTON_REL, BUTTON_ON },
{ ACTION_STD_MENU, BUTTON_MENU|BUTTON_REL, BUTTON_MENU },
LAST_ITEM_IN_LIST
};
struct button_mapping button_context_wps[] = {
{ ACTION_WPS_PLAY, BUTTON_PLAY, BUTTON_NONE },
{ ACTION_WPS_SKIPNEXT, BUTTON_RIGHT, BUTTON_NONE },
{ ACTION_WPS_SKIPPREV, BUTTON_LEFT, BUTTON_NONE },
{ ACTION_WPS_SEEKBACK, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_LEFT },
{ ACTION_WPS_SEEKFWD, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_RIGHT },
{ ACTION_WPS_STOPSEEK, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT|BUTTON_REPEAT },
{ ACTION_WPS_STOPSEEK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT|BUTTON_REPEAT },
{ ACTION_WPS_STOP, BUTTON_STOP, BUTTON_NONE },
{ ACTION_WPS_VOLDOWN, BUTTON_MENU|BUTTON_STOP, BUTTON_MENU },
{ ACTION_WPS_VOLDOWN, BUTTON_MENU|BUTTON_STOP|BUTTON_REPEAT, BUTTON_MENU|BUTTON_STOP },
{ ACTION_WPS_VOLUP, BUTTON_MENU|BUTTON_PLAY, BUTTON_MENU },
{ ACTION_WPS_VOLUP, BUTTON_MENU|BUTTON_PLAY|BUTTON_REPEAT, BUTTON_MENU|BUTTON_PLAY },
{ ACTION_WPS_BROWSE, BUTTON_ON|BUTTON_REL, BUTTON_ON },
{ ACTION_WPS_MENU, BUTTON_MENU|BUTTON_REL, BUTTON_MENU },
{ ACTION_WPS_CONTEXT, BUTTON_ON|BUTTON_REPEAT, BUTTON_ON },
{ ACTION_WPS_ID3SCREEN, BUTTON_MENU|BUTTON_ON, BUTTON_MENU },
LAST_ITEM_IN_LIST
};
struct button_mapping button_context_settings[] = {
{ ACTION_SETTINGS_INC, BUTTON_LEFT, BUTTON_NONE },
{ ACTION_SETTINGS_INCREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_LEFT },
{ ACTION_SETTINGS_DEC, BUTTON_RIGHT, BUTTON_NONE },
{ ACTION_SETTINGS_DECREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_RIGHT },
LAST_ITEM_IN_LIST
};
struct button_mapping button_context_tree[] = {
{ ACTION_TREE_WPS, BUTTON_PLAY, BUTTON_NONE },
{ ACTION_TREE_STOP, BUTTON_STOP, BUTTON_NONE },
LAST_ITEM_IN_LIST
}; /* button_context_listtree */
struct button_mapping button_context_tree_scroll_lr[] = {
{ ACTION_NONE, BUTTON_LEFT, BUTTON_NONE },
{ ACTION_STD_CANCEL, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT },
{ ACTION_TREE_PGLEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_LEFT },
{ ACTION_TREE_PGLEFT, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT|BUTTON_REPEAT },
{ ACTION_NONE, BUTTON_RIGHT, BUTTON_NONE },
{ ACTION_STD_OK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT },
{ ACTION_TREE_PGRIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_RIGHT },
{ ACTION_TREE_PGRIGHT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT|BUTTON_REPEAT },
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|1),
};
struct button_mapping button_context_yesno[] = {
{ ACTION_YESNO_ACCEPT, BUTTON_PLAY, BUTTON_NONE },
LAST_ITEM_IN_LIST
}; /* button_context_settings_yesno */
struct button_mapping* get_context_mapping( int context )
{
switch( context )
{
case CONTEXT_STD:
return button_context_standard;
case CONTEXT_WPS:
return button_context_wps;
case CONTEXT_SETTINGS:
return button_context_settings;
case CONTEXT_YESNOSCREEN:
return button_context_yesno;
case CONTEXT_TREE:
if (global_settings.hold_lr_for_scroll_in_list)
return button_context_tree_scroll_lr;
/* else fall through to CUSTOM|1 */
case CONTEXT_CUSTOM|1:
return button_context_tree;
case CONTEXT_LIST:
case CONTEXT_MAINMENU:
default:
return button_context_standard;
}
}

View file

@ -0,0 +1,141 @@
/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
*
* Copyright (C) 2006 Antoine Cellerier <dionoea @t videolan d.t org>
*
* 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.
*
****************************************************************************/
/* *
* Button Code Definitions for archos recorder target
*
* \TODO handle F3
*/
#include "config.h"
#include "action.h"
#include "button.h"
#include "settings.h"
/* CONTEXT_CUSTOM's used in this file...
CONTEXT_CUSTOM|1 = the standard list/tree defines (without directions)
*/
struct button_mapping button_context_standard[] = {
{ ACTION_STD_PREV, BUTTON_UP, BUTTON_NONE },
{ ACTION_STD_PREVREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_UP },
{ ACTION_STD_NEXT, BUTTON_DOWN, BUTTON_NONE },
{ ACTION_STD_NEXTREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_DOWN },
{ ACTION_STD_OK, BUTTON_ON, BUTTON_NONE },
{ ACTION_STD_OK, BUTTON_RIGHT, BUTTON_NONE },
{ ACTION_STD_OK, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_RIGHT },
{ ACTION_STD_OK, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY },
{ ACTION_STD_MENU, BUTTON_F1, BUTTON_NONE },
{ ACTION_STD_QUICKSCREEN, BUTTON_F2, BUTTON_NONE },
{ ACTION_STD_CONTEXT, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY },
{ ACTION_STD_CANCEL, BUTTON_OFF, BUTTON_NONE },
{ ACTION_STD_CANCEL, BUTTON_LEFT, BUTTON_NONE },
{ ACTION_STD_CANCEL, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_LEFT },
LAST_ITEM_IN_LIST
};
struct button_mapping button_context_wps[] = {
{ ACTION_WPS_PLAY, BUTTON_PLAY, BUTTON_NONE },
{ ACTION_WPS_SKIPNEXT, BUTTON_RIGHT, BUTTON_NONE },
{ ACTION_WPS_SKIPPREV, BUTTON_LEFT, BUTTON_NONE },
{ ACTION_WPS_SEEKBACK, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_LEFT },
{ ACTION_WPS_SEEKFWD, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_RIGHT },
{ ACTION_WPS_STOPSEEK, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT|BUTTON_REPEAT },
{ ACTION_WPS_STOPSEEK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT|BUTTON_REPEAT },
{ ACTION_WPS_STOP, BUTTON_OFF, BUTTON_NONE },
{ ACTION_WPS_VOLDOWN, BUTTON_DOWN, BUTTON_NONE },
{ ACTION_WPS_VOLDOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_DOWN },
{ ACTION_WPS_VOLUP, BUTTON_UP, BUTTON_NONE },
{ ACTION_WPS_VOLUP, BUTTON_UP|BUTTON_REPEAT, BUTTON_UP },
{ ACTION_WPS_MENU, BUTTON_F1, BUTTON_NONE },
{ ACTION_WPS_CONTEXT, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY },
{ ACTION_WPS_QUICKSCREEN, BUTTON_F2, BUTTON_NONE },
{ ACTION_WPS_BROWSE, BUTTON_ON|BUTTON_REL, BUTTON_ON },
{ ACTION_WPS_ID3SCREEN, BUTTON_F1|BUTTON_ON, BUTTON_F1 },
{ ACTION_WPS_PITCHSCREEN, BUTTON_ON|BUTTON_UP, BUTTON_ON },
{ ACTION_WPS_PITCHSCREEN, BUTTON_ON|BUTTON_DOWN, BUTTON_ON },
LAST_ITEM_IN_LIST
};
struct button_mapping button_context_settings[] = {
{ ACTION_SETTINGS_INC, BUTTON_UP, BUTTON_NONE },
{ ACTION_SETTINGS_INCREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_UP },
{ ACTION_SETTINGS_DEC, BUTTON_DOWN, BUTTON_NONE },
{ ACTION_SETTINGS_DECREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_DOWN },
LAST_ITEM_IN_LIST
};
struct button_mapping button_context_tree[] = {
{ ACTION_TREE_WPS, BUTTON_PLAY, BUTTON_NONE },
{ ACTION_TREE_STOP, BUTTON_OFF, BUTTON_NONE },
LAST_ITEM_IN_LIST
}; /* button_context_listtree */
struct button_mapping button_context_tree_scroll_lr[] = {
{ ACTION_NONE, BUTTON_LEFT, BUTTON_NONE },
{ ACTION_STD_CANCEL, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT },
{ ACTION_TREE_PGLEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_LEFT },
{ ACTION_TREE_PGLEFT, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT|BUTTON_REPEAT },
{ ACTION_NONE, BUTTON_RIGHT, BUTTON_NONE },
{ ACTION_STD_OK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT },
{ ACTION_TREE_PGRIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_RIGHT },
{ ACTION_TREE_PGRIGHT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT|BUTTON_REPEAT },
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|1),
};
struct button_mapping button_context_yesno[] = {
{ ACTION_YESNO_ACCEPT, BUTTON_PLAY, BUTTON_NONE },
LAST_ITEM_IN_LIST
};
struct button_mapping* get_context_mapping( int context )
{
switch( context )
{
case CONTEXT_WPS:
return button_context_wps;
case CONTEXT_SETTINGS:
return button_context_settings;
case CONTEXT_YESNOSCREEN:
return button_context_yesno;
case CONTEXT_TREE:
if (global_settings.hold_lr_for_scroll_in_list)
return button_context_tree_scroll_lr;
/* else fall through to CUSTOM|1 */
case CONTEXT_CUSTOM|1:
return button_context_tree;
case CONTEXT_STD:
case CONTEXT_LIST:
case CONTEXT_MAINMENU:
default:
return button_context_standard;
}
}

141
apps/keymaps/keymap-x5.c Normal file
View file

@ -0,0 +1,141 @@
/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
*
* Copyright (C) 2006 Jonathan Gordon
*
* 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.
*
****************************************************************************/
/* *
* Button Code Definitions for iaudio x5 targets
*
* \TODO test!
*/
#include "config.h"
#include "action.h"
#include "button.h"
#include "settings.h"
/* CONTEXT_CUSTOM's used in this file...
CONTEXT_CUSTOM|1 = the standard list/tree defines (without directions)
*/
struct button_mapping button_context_standard[] = {
{ ACTION_STD_PREV, BUTTON_UP, BUTTON_NONE },
{ ACTION_STD_PREVREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_UP },
{ ACTION_STD_NEXT, BUTTON_DOWN, BUTTON_NONE },
{ ACTION_STD_NEXTREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_DOWN },
{ ACTION_STD_CONTEXT, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_SELECT },
{ ACTION_STD_CANCEL, BUTTON_LEFT, BUTTON_NONE },
{ ACTION_STD_OK, BUTTON_RIGHT, BUTTON_NONE },
{ ACTION_STD_OK, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT },
{ ACTION_STD_OK, BUTTON_PLAY, BUTTON_NONE },
{ ACTION_STD_MENU, BUTTON_REC|BUTTON_REL, BUTTON_REC },
{ ACTION_STD_QUICKSCREEN,BUTTON_REC|BUTTON_REPEAT, BUTTON_REC },
{ ACTION_STD_CANCEL, BUTTON_POWER, BUTTON_NONE },
LAST_ITEM_IN_LIST
};
struct button_mapping button_context_wps[] = {
{ ACTION_WPS_PLAY, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY },
{ ACTION_WPS_STOP, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY },
{ ACTION_WPS_SKIPPREV, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT },
{ ACTION_WPS_SEEKBACK, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_LEFT },
{ ACTION_WPS_STOPSEEK, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT|BUTTON_REPEAT },
{ ACTION_WPS_SKIPNEXT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT },
{ ACTION_WPS_SEEKFWD, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_RIGHT },
{ ACTION_WPS_STOPSEEK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT|BUTTON_REPEAT },
{ ACTION_WPS_VOLDOWN, BUTTON_DOWN, BUTTON_NONE },
{ ACTION_WPS_VOLDOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_DOWN },
{ ACTION_WPS_VOLUP, BUTTON_UP, BUTTON_NONE },
{ ACTION_WPS_VOLUP, BUTTON_UP|BUTTON_REPEAT, BUTTON_UP },
{ ACTION_WPS_BROWSE, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT },
{ ACTION_WPS_CONTEXT, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_SELECT },
{ ACTION_WPS_MENU, BUTTON_REC|BUTTON_REL, BUTTON_REC },
{ ACTION_WPS_QUICKSCREEN, BUTTON_REC|BUTTON_REPEAT, BUTTON_REC },
LAST_ITEM_IN_LIST
};
struct button_mapping button_context_settings[] = {
{ ACTION_SETTINGS_INC, BUTTON_UP, BUTTON_NONE },
{ ACTION_SETTINGS_INCREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
{ ACTION_SETTINGS_DEC, BUTTON_DOWN, BUTTON_NONE },
{ ACTION_SETTINGS_DECREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
{ ACTION_STD_PREV, BUTTON_LEFT, BUTTON_NONE },
{ ACTION_STD_CANCEL, BUTTON_REC, BUTTON_NONE },
LAST_ITEM_IN_LIST
};
struct button_mapping button_context_tree[] = {
{ ACTION_NONE, BUTTON_PLAY, BUTTON_NONE },
{ ACTION_TREE_WPS, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY },
{ ACTION_TREE_STOP, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY },
LAST_ITEM_IN_LIST
}; /* button_context_listtree */
struct button_mapping button_context_tree_scroll_lr[] = {
{ ACTION_NONE, BUTTON_LEFT, BUTTON_NONE },
{ ACTION_STD_CANCEL, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT },
{ ACTION_TREE_PGLEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_LEFT },
{ ACTION_TREE_PGLEFT, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT|BUTTON_REPEAT },
{ ACTION_NONE, BUTTON_RIGHT, BUTTON_NONE },
{ ACTION_STD_OK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT },
{ ACTION_TREE_PGRIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_RIGHT },
{ ACTION_TREE_PGRIGHT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT|BUTTON_REPEAT },
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|1),
};
struct button_mapping button_context_yesno[] = {
{ ACTION_YESNO_ACCEPT, BUTTON_SELECT, BUTTON_NONE },
LAST_ITEM_IN_LIST
}; /* button_context_settings_yesno */
struct button_mapping* get_context_mapping( int context )
{
switch( context )
{
case CONTEXT_STD:
return button_context_standard;
case CONTEXT_WPS:
return button_context_wps;
case CONTEXT_SETTINGS:
return button_context_settings;
case CONTEXT_YESNOSCREEN:
return button_context_yesno;
case CONTEXT_TREE:
if (global_settings.hold_lr_for_scroll_in_list)
return button_context_tree_scroll_lr;
/* else fall through to CUSTOM|1 */
case CONTEXT_CUSTOM|1:
return button_context_tree;
case CONTEXT_LIST:
case CONTEXT_MAINMENU:
default:
return button_context_standard;
}
}

View file

@ -24,20 +24,12 @@
#include <timefuncs.h> #include <timefuncs.h>
#include <string.h> #include <string.h>
#include <kernel.h> #include <kernel.h>
#include <button.h> #include <action.h>
#include <lcd.h> #include <lcd.h>
#include "menu.h" #include "menu.h"
#include "logf.h" #include "logf.h"
#if (CONFIG_KEYPAD == IPOD_3G_PAD) || (CONFIG_KEYPAD == IPOD_4G_PAD)
#define LOGF_BUTTON_QUIT BUTTON_MENU
#elif CONFIG_KEYPAD == IAUDIO_X5_PAD
#define LOGF_BUTTON_QUIT BUTTON_POWER
#else
#define LOGF_BUTTON_QUIT BUTTON_OFF
#endif
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
bool logfdisplay(void) bool logfdisplay(void)
@ -46,7 +38,6 @@ bool logfdisplay(void)
int lines; int lines;
int columns; int columns;
int i; int i;
int button;
bool lcd = false; /* fixed atm */ bool lcd = false; /* fixed atm */
int index; int index;
@ -93,8 +84,7 @@ bool logfdisplay(void)
lcd_puts(0, i, buffer); lcd_puts(0, i, buffer);
} }
lcd_update(); lcd_update();
button = button_get_w_tmo(HZ/2); } while(!action_userabort(HZ));
} while(button != LOGF_BUTTON_QUIT);
return false; return false;
} }

View file

@ -365,7 +365,7 @@ void init(void)
lcd_puts(0, 1, str); lcd_puts(0, 1, str);
lcd_puts(0, 3, "Press ON to debug"); lcd_puts(0, 3, "Press ON to debug");
lcd_update(); lcd_update();
while(!(button_get(true) & BUTTON_REL)); while(!(button_get(true) & BUTTON_REL)); /*DO NOT CHANGE TO ACTION SYSTEM */
dbg_ports(); dbg_ports();
#endif #endif
panicf("ata: %d", rc); panicf("ata: %d", rc);

View file

@ -24,7 +24,7 @@
#include "tree.h" #include "tree.h"
#include "lcd.h" #include "lcd.h"
#include "font.h" #include "font.h"
#include "button.h" #include "action.h"
#include "kernel.h" #include "kernel.h"
#include "main_menu.h" #include "main_menu.h"
#include "debug_menu.h" #include "debug_menu.h"
@ -237,48 +237,22 @@ bool show_info(void)
#endif #endif
/* Wait for a key to be pushed */ /* Wait for a key to be pushed */
key = button_get_w_tmo(HZ*5); key = get_action(CONTEXT_MAINMENU,HZ*5);
switch(key) { switch(key) {
case SETTINGS_OK: case ACTION_STD_CANCEL:
#ifdef SETTINGS_RC_OK
case SETTINGS_RC_OK:
#endif
#ifdef SETTINGS_OK2
case SETTINGS_OK2:
#endif
#ifdef SETTINGS_RC_OK2
case SETTINGS_RC_OK2:
#endif
#ifdef SETTINGS_RC_CANCEL
case SETTINGS_RC_CANCEL:
#endif
case SETTINGS_CANCEL:
done = true; done = true;
break; break;
#ifdef HAVE_LCD_CHARCELLS #ifdef HAVE_LCD_CHARCELLS
case SETTINGS_INC: case ACTION_STD_NEXT:
case SETTINGS_DEC: case ACTION_STD_PREV:
#ifdef SETTINGS_RC_INC
case SETTINGS_RC_INC:
#endif
#ifdef SETTINGS_RC_DEC
case SETTINGS_RC_DEC:
#endif
page = (page == 0) ? 1 : 0; page = (page == 0) ? 1 : 0;
break; break;
#endif #endif
#ifndef SIMULATOR #ifndef SIMULATOR
#ifdef SETTINGS_RC_ACCEPT case ACTION_STD_OK:
case SETTINGS_RC_ACCEPT:
#endif
#ifdef SETTINGS_ACCEPT
case SETTINGS_ACCEPT:
#else
case SETTINGS_INC: /* Ondio */
#endif
gui_syncsplash(0, true, str(LANG_DIRCACHE_BUILDING)); gui_syncsplash(0, true, str(LANG_DIRCACHE_BUILDING));
fat_recalc_free(IF_MV(0)); fat_recalc_free(IF_MV(0));
#ifdef HAVE_MULTIVOLUME #ifdef HAVE_MULTIVOLUME
@ -295,7 +269,7 @@ bool show_info(void)
break; break;
} }
} }
action_signalscreenchange();
return false; return false;
} }

View file

@ -40,6 +40,7 @@
#include "talk.h" #include "talk.h"
#include "lang.h" #include "lang.h"
#include "misc.h" #include "misc.h"
#include "action.h"
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
#include "icons.h" #include "icons.h"
@ -124,13 +125,12 @@ int menu_show(int m)
#endif #endif
bool exit = false; bool exit = false;
int key; int key;
unsigned lastbutton = 0;
gui_synclist_draw(&(menus[m].synclist)); gui_synclist_draw(&(menus[m].synclist));
gui_syncstatusbar_draw(&statusbars, true); gui_syncstatusbar_draw(&statusbars, true);
menu_talk_selected(m); menu_talk_selected(m);
while (!exit) { while (!exit) {
key = button_get_w_tmo(HZ/2); key = get_action(CONTEXT_MAINMENU,HZ/2);
/* /*
* "short-circuit" the default keypresses by running the * "short-circuit" the default keypresses by running the
* callback function * callback function
@ -144,40 +144,13 @@ int menu_show(int m)
if(gui_synclist_do_button(&(menus[m].synclist), key)) if(gui_synclist_do_button(&(menus[m].synclist), key))
menu_talk_selected(m); menu_talk_selected(m);
switch( key ) { switch( key ) {
case MENU_ENTER | BUTTON_REL: case ACTION_STD_OK:
if (lastbutton != MENU_ENTER) action_signalscreenchange();
break;
#ifdef MENU_ENTER2
case MENU_ENTER2:
#endif
#ifdef MENU_RC_ENTER
case MENU_RC_ENTER:
#endif
#ifdef MENU_RC_ENTER2
case MENU_RC_ENTER2:
#endif
return gui_synclist_get_sel_pos(&(menus[m].synclist)); return gui_synclist_get_sel_pos(&(menus[m].synclist));
case MENU_EXIT | BUTTON_REL: case ACTION_STD_CANCEL:
if (lastbutton != MENU_EXIT) case ACTION_STD_MENU:
break;
#ifdef MENU_EXIT2
case MENU_EXIT2:
#endif
#ifdef MENU_EXIT_MENU
case MENU_EXIT_MENU | BUTTON_REL:
/* This is important for the Ondio's */
if ((key == (MENU_EXIT_MENU | BUTTON_REL)) &&
(lastbutton != MENU_EXIT_MENU))
break;
#endif
#ifdef MENU_RC_EXIT
case MENU_RC_EXIT:
#endif
#ifdef MENU_RC_EXIT_MENU
case MENU_RC_EXIT_MENU:
#endif
exit = true; exit = true;
break; break;
@ -187,9 +160,8 @@ int menu_show(int m)
break; break;
} }
gui_syncstatusbar_draw(&statusbars, false); gui_syncstatusbar_draw(&statusbars, false);
if ( key )
lastbutton = key;
} }
action_signalscreenchange();
return MENU_SELECTED_EXIT; return MENU_SELECTED_EXIT;
} }

View file

@ -815,11 +815,7 @@ static int onplay_callback(int key, int menu)
{ {
(void)menu; (void)menu;
if (key == MENU_EXIT_MENU if (key == ACTION_STD_MENU)
#ifdef MENU_RC_EXIT_MENU
|| key == MENU_RC_EXIT_MENU
#endif
)
exit_to_main = true; exit_to_main = true;
return key; return key;

View file

@ -67,9 +67,13 @@ void audio_set_track_unbuffer_event(void (*handler)(struct mp3entry *id3,
void audio_invalidate_tracks(void); void audio_invalidate_tracks(void);
void voice_init(void); void voice_init(void);
#if CONFIG_CODEC == SWCODEC /* This #ifdef is better here than gui/gwps.c */
extern void audio_next_dir(void); extern void audio_next_dir(void);
extern void audio_prev_dir(void); extern void audio_prev_dir(void);
#else
#define audio_next_dir()
#define audio_prev_dir()
#endif
void audio_preinit(void); void audio_preinit(void);
#endif #endif

View file

@ -70,6 +70,7 @@
#include <string.h> #include <string.h>
#include "playlist.h" #include "playlist.h"
#include "file.h" #include "file.h"
#include "action.h"
#include "dir.h" #include "dir.h"
#include "sprintf.h" #include "sprintf.h"
#include "debug.h" #include "debug.h"
@ -1342,7 +1343,7 @@ static int get_next_dir(char *dir, bool is_forward, bool recursion)
for (i=0; i<num_files; i++) for (i=0; i<num_files; i++)
{ {
/* user abort */ /* user abort */
if (button_get(false) == SETTINGS_CANCEL) if (action_userabort(TIMEOUT_NOBLOCK))
{ {
result = -1; result = -1;
exit = true; exit = true;
@ -1440,7 +1441,7 @@ static int check_subdir_for_music(char *dir, char *subdir)
{ {
for (i=0; i<num_files; i++) for (i=0; i<num_files; i++)
{ {
if (button_get(false) == SETTINGS_CANCEL) if (action_userabort(TIMEOUT_NOBLOCK))
{ {
result = -2; result = -2;
break; break;
@ -1888,7 +1889,7 @@ int playlist_resume(void)
str(LANG_OFF_ABORT) str(LANG_OFF_ABORT)
#endif #endif
); );
if (SETTINGS_CANCEL == button_get(false)) if (action_userabort(TIMEOUT_NOBLOCK))
{ {
/* FIXME: /* FIXME:
* Not sure how to implement this, somebody more familiar * Not sure how to implement this, somebody more familiar
@ -2870,7 +2871,7 @@ int playlist_insert_playlist(struct playlist_info* playlist, char *filename,
while ((max = read_line(fd, temp_buf, sizeof(temp_buf))) > 0) while ((max = read_line(fd, temp_buf, sizeof(temp_buf))) > 0)
{ {
/* user abort */ /* user abort */
if (button_get(false) == SETTINGS_CANCEL) if (action_userabort(TIMEOUT_NOBLOCK))
break; break;
if (temp_buf[0] != '#' && temp_buf[0] != '\0') if (temp_buf[0] != '#' && temp_buf[0] != '\0')
@ -3281,7 +3282,7 @@ int playlist_save(struct playlist_info* playlist, char *filename)
int seek; int seek;
/* user abort */ /* user abort */
if (button_get(false) == SETTINGS_CANCEL) if (action_userabort(TIMEOUT_NOBLOCK))
{ {
result = -1; result = -1;
break; break;
@ -3408,7 +3409,7 @@ int playlist_directory_tracksearch(const char* dirname, bool recurse,
for (i=0; i<num_files; i++) for (i=0; i<num_files; i++)
{ {
/* user abort */ /* user abort */
if (button_get(false) == SETTINGS_CANCEL) if (action_userabort(TIMEOUT_NOBLOCK))
{ {
result = -1; result = -1;
break; break;

View file

@ -214,7 +214,6 @@ static int display_playlists(char* playlist, bool view)
{ {
int result = -1; int result = -1;
int num_playlists = 0; int num_playlists = 0;
int lastbutton = BUTTON_NONE;
bool exit = false; bool exit = false;
char temp_buf[MAX_PATH]; char temp_buf[MAX_PATH];
char* playlists[MAX_PLAYLISTS]; char* playlists[MAX_PLAYLISTS];
@ -240,7 +239,7 @@ static int display_playlists(char* playlist, bool view)
while (!exit) while (!exit)
{ {
int button = button_get_w_tmo(HZ/2); int button = get_action(CONTEXT_LIST,HZ/2);
char* sel_file; char* sel_file;
gui_synclist_do_button(&playlist_lists, button); gui_synclist_do_button(&playlist_lists, button);
@ -249,34 +248,11 @@ static int display_playlists(char* playlist, bool view)
switch (button) switch (button)
{ {
case TREE_EXIT: case ACTION_STD_CANCEL:
#ifdef TREE_RC_EXIT
case TREE_RC_EXIT:
#endif
#ifdef TREE_OFF
case TREE_OFF:
#endif
exit = true; exit = true;
break; break;
#ifdef TREE_ENTER case ACTION_STD_OK:
case TREE_ENTER:
case TREE_ENTER | BUTTON_REPEAT:
#endif
#ifdef TREE_RC_RUN
case TREE_RC_RUN:
#endif
case TREE_RUN:
#ifdef TREE_RUN_PRE
if (((button == TREE_RUN)
#ifdef TREE_RC_RUN_PRE
|| (button == TREE_RC_RUN))
&& ((lastbutton != TREE_RC_RUN_PRE)
#endif
&& (lastbutton != TREE_RUN_PRE)))
break;
#endif
if (view) if (view)
{ {
/* In view mode, selecting a playlist starts playback */ /* In view mode, selecting a playlist starts playback */
@ -298,13 +274,7 @@ static int display_playlists(char* playlist, bool view)
exit = true; exit = true;
break; break;
case TREE_CONTEXT: case ACTION_STD_CONTEXT:
#ifdef TREE_CONTEXT2
case TREE_CONTEXT2:
#endif
#ifdef TREE_RC_CONTEXT
case TREE_RC_CONTEXT:
#endif
/* context menu only available in view mode */ /* context menu only available in view mode */
if (view) if (view)
{ {
@ -322,7 +292,7 @@ static int display_playlists(char* playlist, bool view)
} }
break; break;
case BUTTON_NONE: case ACTION_NONE:
gui_syncstatusbar_draw(&statusbars, false); gui_syncstatusbar_draw(&statusbars, false);
break; break;
@ -334,10 +304,8 @@ static int display_playlists(char* playlist, bool view)
} }
break; break;
} }
lastbutton = button;
} }
action_signalscreenchange();
return result; return result;
} }

View file

@ -48,6 +48,7 @@
#include "statusbar.h" #include "statusbar.h"
#include "splash.h" #include "splash.h"
#include "playlist_menu.h" #include "playlist_menu.h"
#include "action.h"
/* Maximum number of tracks we can have loaded at one time */ /* Maximum number of tracks we can have loaded at one time */
#define MAX_PLAYLIST_ENTRIES 200 #define MAX_PLAYLIST_ENTRIES 200
@ -614,7 +615,7 @@ bool playlist_viewer_ex(char* filename)
{ {
bool ret = false; /* return value */ bool ret = false; /* return value */
bool exit=false; /* exit viewer */ bool exit=false; /* exit viewer */
int button, lastbutton = BUTTON_NONE; int button;
struct gui_synclist playlist_lists; struct gui_synclist playlist_lists;
if (!playlist_viewer_init(&viewer, filename, false)) if (!playlist_viewer_init(&viewer, filename, false))
goto exit; goto exit;
@ -661,7 +662,7 @@ bool playlist_viewer_ex(char* filename)
} }
/* Timeout so we can determine if play status has changed */ /* Timeout so we can determine if play status has changed */
button = button_get_w_tmo(HZ/2); button = get_action(CONTEXT_TREE,HZ/2);
int list_action; int list_action;
if( (list_action=gui_synclist_do_button(&playlist_lists, button))!=0 ) if( (list_action=gui_synclist_do_button(&playlist_lists, button))!=0 )
{ {
@ -669,7 +670,7 @@ bool playlist_viewer_ex(char* filename)
if(playlist_buffer_needs_reload(&viewer.buffer, if(playlist_buffer_needs_reload(&viewer.buffer,
viewer.selected_track)) viewer.selected_track))
playlist_buffer_load_entries_screen(&viewer.buffer, playlist_buffer_load_entries_screen(&viewer.buffer,
list_action==LIST_NEXT? list_action==ACTION_STD_NEXT?
FORWARD FORWARD
: :
BACKWARD BACKWARD
@ -677,36 +678,11 @@ bool playlist_viewer_ex(char* filename)
} }
switch (button) switch (button)
{ {
case TREE_EXIT | BUTTON_REL: case ACTION_STD_CANCEL:
if (lastbutton != TREE_EXIT)
break;
#ifdef TREE_RC_EXIT
case TREE_RC_EXIT:
#endif
#ifdef TREE_OFF
case TREE_OFF:
#endif
exit = true; exit = true;
break; break;
case ACTION_STD_OK:
#ifdef TREE_ENTER {
case TREE_ENTER | BUTTON_REL:
if (lastbutton != TREE_ENTER)
break;
#endif
#ifdef TREE_RC_RUN
case TREE_RC_RUN:
#endif
case TREE_RUN:
#ifdef TREE_RUN_PRE
if (((button == TREE_RUN)
#ifdef TREE_RC_RUN_PRE
|| (button == TREE_RC_RUN))
&& ((lastbutton != TREE_RC_RUN_PRE)
#endif
&& (lastbutton != TREE_RUN_PRE)))
break;
#endif
struct playlist_entry * current_track = struct playlist_entry * current_track =
playlist_buffer_get_track(&viewer.buffer, playlist_buffer_get_track(&viewer.buffer,
viewer.selected_track); viewer.selected_track);
@ -744,14 +720,8 @@ bool playlist_viewer_ex(char* filename)
gui_synclist_draw(&playlist_lists); gui_synclist_draw(&playlist_lists);
break; break;
}
case TREE_CONTEXT: case ACTION_STD_CONTEXT:
#ifdef TREE_CONTEXT2
case TREE_CONTEXT2:
#endif
#ifdef TREE_RC_CONTEXT
case TREE_RC_CONTEXT:
#endif
{ {
/* ON+PLAY menu */ /* ON+PLAY menu */
int ret; int ret;
@ -774,14 +744,7 @@ bool playlist_viewer_ex(char* filename)
gui_synclist_draw(&playlist_lists); gui_synclist_draw(&playlist_lists);
break; break;
} }
#ifdef TREE_MENU_PRE case ACTION_STD_MENU:
case TREE_MENU_PRE:
#else
case TREE_MENU:
#endif
#ifdef TREE_RC_MENU
case TREE_RC_MENU:
#endif
if (viewer_menu()) if (viewer_menu())
{ {
ret = true; ret = true;
@ -795,7 +758,7 @@ bool playlist_viewer_ex(char* filename)
gui_synclist_draw(&playlist_lists); gui_synclist_draw(&playlist_lists);
break; break;
case BUTTON_NONE: case ACTION_NONE:
gui_syncstatusbar_draw(&statusbars, false); gui_syncstatusbar_draw(&statusbars, false);
break; break;
@ -807,12 +770,12 @@ bool playlist_viewer_ex(char* filename)
} }
break; break;
} }
lastbutton = button;
} }
exit: exit:
if (viewer.playlist) if (viewer.playlist)
playlist_close(viewer.playlist); playlist_close(viewer.playlist);
action_signalscreenchange();
return ret; return ret;
} }
char * playlist_search_callback_name(int selected_item, void * data, char *buffer) char * playlist_search_callback_name(int selected_item, void * data, char *buffer)
@ -860,7 +823,7 @@ bool search_playlist(void)
str(LANG_OFF_ABORT) str(LANG_OFF_ABORT)
#endif #endif
); );
if (SETTINGS_CANCEL == button_get(false)) if (action_userabort(TIMEOUT_NOBLOCK))
return ret; return ret;
playlist_get_track_info(viewer.playlist,i,&track); playlist_get_track_info(viewer.playlist,i,&track);
if (strcasestr(track.filename,search_str)) if (strcasestr(track.filename,search_str))
@ -883,35 +846,22 @@ bool search_playlist(void)
gui_synclist_draw(&playlist_lists); gui_synclist_draw(&playlist_lists);
while (!exit) while (!exit)
{ {
button = button_get(true); button = get_action(CONTEXT_LIST,TIMEOUT_BLOCK);
if (gui_synclist_do_button(&playlist_lists, button)) if (gui_synclist_do_button(&playlist_lists, button))
continue; continue;
switch (button) switch (button)
{ {
case TREE_EXIT: case ACTION_STD_CANCEL:
#ifdef TREE_RC_EXIT
case TREE_RC_EXIT:
#endif
#ifdef TREE_OFF
case TREE_OFF:
#endif
exit = true; exit = true;
break; break;
#ifdef TREE_ENTER case ACTION_STD_OK:
case TREE_ENTER:
case TREE_ENTER | BUTTON_REPEAT:
#endif
#ifdef TREE_RC_RUN
case TREE_RC_RUN:
#endif
case TREE_RUN:
playlist_start( playlist_start(
found_indicies[gui_synclist_get_sel_pos(&playlist_lists)] found_indicies[gui_synclist_get_sel_pos(&playlist_lists)]
,0); ,0);
exit = 1; exit = 1;
break; break;
case BUTTON_NONE: case ACTION_NONE:
break; break;
default: default:
if(default_event_handler(button) == SYS_USB_CONNECTED) if(default_event_handler(button) == SYS_USB_CONNECTED)
@ -922,6 +872,7 @@ bool search_playlist(void)
break; break;
} }
} }
action_signalscreenchange();
return ret; return ret;
} }

View file

@ -468,6 +468,11 @@ static const struct plugin_api rockbox_api = {
#endif #endif
PREFIX(rmdir), PREFIX(rmdir),
/* action handling */
get_custom_action,
get_action,
action_signalscreenchange,
action_userabort,
}; };
int plugin_load(const char* plugin, void* parameter) int plugin_load(const char* plugin, void* parameter)

View file

@ -38,6 +38,7 @@
#include "dir.h" #include "dir.h"
#include "kernel.h" #include "kernel.h"
#include "button.h" #include "button.h"
#include "action.h"
#include "usb.h" #include "usb.h"
#include "font.h" #include "font.h"
#include "system.h" #include "system.h"
@ -104,7 +105,7 @@
#define PLUGIN_MAGIC 0x526F634B /* RocK */ #define PLUGIN_MAGIC 0x526F634B /* RocK */
/* increase this every time the api struct changes */ /* increase this every time the api struct changes */
#define PLUGIN_API_VERSION 28 #define PLUGIN_API_VERSION 29
/* update this to latest version if a change to the api struct breaks /* update this to latest version if a change to the api struct breaks
backwards compatibility (and please take the opportunity to sort in any backwards compatibility (and please take the opportunity to sort in any
@ -546,6 +547,12 @@ struct plugin_api {
#endif #endif
int (*PREFIX(rmdir))(const char *name); int (*PREFIX(rmdir))(const char *name);
/* action handling */
int (*get_custom_action)(int context,int timeout,
struct button_mapping* (*get_context_map)(int));
int (*get_action)(int context, int timeout);
void (*action_signalscreenchange)(void);
bool (*action_userabort)(int timeout);
}; };
/* plugin header */ /* plugin header */

View file

@ -1359,6 +1359,7 @@ bool handle_radio_presets_menu(void)
int handle_radio_presets_cb(int key, int m) int handle_radio_presets_cb(int key, int m)
{ {
(void)m; (void)m;
#if 0 /* this screen needs fixing! */
switch(key) switch(key)
{ {
#ifdef FM_PRESET_ADD #ifdef FM_PRESET_ADD
@ -1372,7 +1373,7 @@ int handle_radio_presets_cb(int key, int m)
#ifdef FM_PRESET #ifdef FM_PRESET
case FM_PRESET: case FM_PRESET:
menu_draw(m); menu_draw(m);
key = MENU_EXIT; /* Fake an exit */ key = ACTION_STD_EXIT; /* Fake an exit */
break; break;
#endif #endif
#endif #endif
@ -1409,21 +1410,11 @@ int handle_radio_presets_cb(int key, int m)
case MENU_ENTER2 | BUTTON_REL: case MENU_ENTER2 | BUTTON_REL:
#endif #endif
case MENU_ENTER | BUTTON_REL: case MENU_ENTER | BUTTON_REL:
key = MENU_ENTER; /* fake enter for short press */ key = ACTION_STD_SELECT; /* fake enter for short press */
break; break;
/* ignore down events */ /* ignore down events */
#ifdef MENU_RC_ENTER case ACTION_STD_SELECT:
case MENU_RC_ENTER:
#endif
#ifdef MENU_RC_ENTER2
case MENU_RC_ENTER2:
#endif
#ifdef MENU_ENTER2
case MENU_ENTER2:
#endif
case MENU_ENTER:
/* Ignore the release events */ /* Ignore the release events */
#ifdef FM_PRESET_ADD #ifdef FM_PRESET_ADD
case FM_PRESET_ADD | BUTTON_REL: case FM_PRESET_ADD | BUTTON_REL:
@ -1434,6 +1425,7 @@ int handle_radio_presets_cb(int key, int m)
key = BUTTON_NONE; key = BUTTON_NONE;
break; break;
} }
#endif
return key; return key;
} }
@ -1611,6 +1603,7 @@ static bool scan_presets(void)
int radio_menu_cb(int key, int m) int radio_menu_cb(int key, int m)
{ {
(void)m; (void)m;
#if 0 /* this screen needs fixing! */
switch(key) switch(key)
{ {
#if (CONFIG_KEYPAD != IRIVER_H100_PAD) && (CONFIG_KEYPAD != IRIVER_H300_PAD) && (CONFIG_KEYPAD != IAUDIO_X5_PAD) #if (CONFIG_KEYPAD != IRIVER_H100_PAD) && (CONFIG_KEYPAD != IRIVER_H300_PAD) && (CONFIG_KEYPAD != IAUDIO_X5_PAD)
@ -1631,7 +1624,7 @@ int radio_menu_cb(int key, int m)
key = MENU_ENTER; /* fake downpress, next menu doesn't like release */ key = MENU_ENTER; /* fake downpress, next menu doesn't like release */
break; break;
} }
#endif
return key; return key;
} }

View file

@ -21,7 +21,7 @@
#include <string.h> #include <string.h>
#include <stdio.h> #include <stdio.h>
#include "backlight.h" #include "backlight.h"
#include "button.h" #include "action.h"
#include "lcd.h" #include "lcd.h"
#include "lang.h" #include "lang.h"
#include "icons.h" #include "icons.h"
@ -309,11 +309,7 @@ void charging_display_info(bool animate)
2 if Off/Stop key was pressed 2 if Off/Stop key was pressed
3 if On key was pressed 3 if On key was pressed
4 if USB was connected */ 4 if USB was connected */
#if (CONFIG_KEYPAD==IPOD_3G_PAD) || (CONFIG_KEYPAD==IPOD_4G_PAD)
# define CHARGE_SCREEN_RESUME BUTTON_SELECT
#else
# define CHARGE_SCREEN_RESUME BUTTON_ON
#endif
int charging_screen(void) int charging_screen(void)
{ {
unsigned int button; unsigned int button;
@ -338,8 +334,8 @@ int charging_screen(void)
{ {
gui_syncstatusbar_draw(&statusbars, false); gui_syncstatusbar_draw(&statusbars, false);
charging_display_info(true); charging_display_info(true);
button = button_get_w_tmo(HZ/3); button = get_action(CONTEXT_STD,HZ/3);
if (button == CHARGE_SCREEN_RESUME) if (button == ACTION_STD_OK)
rc = 2; rc = 2;
else if (usb_detect()) else if (usb_detect())
rc = 3; rc = 3;
@ -350,6 +346,7 @@ int charging_screen(void)
#ifdef HAVE_LCD_CHARCELLS #ifdef HAVE_LCD_CHARCELLS
logo_lock_patterns(false); logo_lock_patterns(false);
#endif #endif
action_signalscreenchange();
return rc; return rc;
} }
#endif /* CONFIG_CHARGING && !HAVE_POWEROFF_WHILE_CHARGING */ #endif /* CONFIG_CHARGING && !HAVE_POWEROFF_WHILE_CHARGING */
@ -423,15 +420,15 @@ bool pitch_screen(void)
{ {
pitch_screen_draw(pitch); pitch_screen_draw(pitch);
button = button_get(true); button = get_action(CONTEXT_SETTINGS,TIMEOUT_BLOCK);
switch (button) { switch (button) {
case PITCH_UP: case ACTION_SETTINGS_INC:
if ( pitch < 2000 ) if ( pitch < 2000 )
pitch++; pitch++;
sound_set_pitch(pitch); sound_set_pitch(pitch);
break; break;
case PITCH_UP | BUTTON_REPEAT: case ACTION_SETTINGS_INCREPEAT:
if ( pitch < 1990 ) if ( pitch < 1990 )
pitch += 10; pitch += 10;
else else
@ -439,13 +436,13 @@ bool pitch_screen(void)
sound_set_pitch(pitch); sound_set_pitch(pitch);
break; break;
case PITCH_DOWN: case ACTION_SETTINGS_DEC:
if ( pitch > 500 ) if ( pitch > 500 )
pitch--; pitch--;
sound_set_pitch(pitch); sound_set_pitch(pitch);
break; break;
case PITCH_DOWN | BUTTON_REPEAT: case ACTION_SETTINGS_DECREPEAT:
if ( pitch > 510 ) if ( pitch > 510 )
pitch -= 10; pitch -= 10;
else else
@ -453,7 +450,7 @@ bool pitch_screen(void)
sound_set_pitch(pitch); sound_set_pitch(pitch);
break; break;
case PITCH_RIGHT: case ACTION_STD_NEXT:
if ( pitch < 1980 ) if ( pitch < 1980 )
{ {
pitch += 20; pitch += 20;
@ -461,15 +458,12 @@ bool pitch_screen(void)
pitch_screen_draw(pitch); pitch_screen_draw(pitch);
while(button != (PITCH_RIGHT|BUTTON_REL))
button = button_get(true);
pitch -= 20; pitch -= 20;
sound_set_pitch(pitch); sound_set_pitch(pitch);
} }
break; break;
case PITCH_LEFT: case ACTION_STD_PREV:
if ( pitch > 520 ) if ( pitch > 520 )
{ {
pitch -= 20; pitch -= 20;
@ -477,20 +471,17 @@ bool pitch_screen(void)
pitch_screen_draw(pitch); pitch_screen_draw(pitch);
while(button != (PITCH_LEFT|BUTTON_REL))
button = button_get(true);;
pitch += 20; pitch += 20;
sound_set_pitch(pitch); sound_set_pitch(pitch);
} }
break; break;
case PITCH_RESET: case ACTION_STD_OK:
pitch = 1000; pitch = 1000;
sound_set_pitch( pitch ); sound_set_pitch( pitch );
break; break;
case PITCH_EXIT: case ACTION_STD_CANCEL:
exit = true; exit = true;
break; break;
@ -504,6 +495,7 @@ bool pitch_screen(void)
pcmbuf_set_low_latency(false); pcmbuf_set_low_latency(false);
#endif #endif
lcd_setfont(FONT_UI); lcd_setfont(FONT_UI);
action_signalscreenchange();
return 0; return 0;
} }
#endif #endif
@ -923,24 +915,22 @@ bool set_time_screen(const char* string, struct tm *tm)
say_time(cursorpos, tm); say_time(cursorpos, tm);
} }
button = button_get_w_tmo(HZ/2); button = get_action(CONTEXT_SETTINGS,HZ/2);
switch ( button ) { switch ( button ) {
case SETTINGS_PREV: case ACTION_STD_PREV:
cursorpos = (cursorpos + 6 - 1) % 6; cursorpos = (cursorpos + 6 - 1) % 6;
break; break;
case SETTINGS_NEXT: case ACTION_STD_NEXT:
cursorpos = (cursorpos + 6 + 1) % 6; cursorpos = (cursorpos + 6 + 1) % 6;
break; break;
case SETTINGS_INC: case ACTION_SETTINGS_INC:
case SETTINGS_INC | BUTTON_REPEAT:
*valptr = (*valptr + steps - min + 1) % *valptr = (*valptr + steps - min + 1) %
steps + min; steps + min;
if(*valptr == 0) if(*valptr == 0)
*valptr = min; *valptr = min;
say_time(cursorpos, tm); say_time(cursorpos, tm);
break; break;
case SETTINGS_DEC: case ACTION_SETTINGS_DEC:
case SETTINGS_DEC | BUTTON_REPEAT:
*valptr = (*valptr + steps - min - 1) % *valptr = (*valptr + steps - min - 1) %
steps + min; steps + min;
if(*valptr == 0) if(*valptr == 0)
@ -948,11 +938,11 @@ bool set_time_screen(const char* string, struct tm *tm)
say_time(cursorpos, tm); say_time(cursorpos, tm);
break; break;
case SETTINGS_ACCEPT: case ACTION_STD_OK:
done = true; done = true;
break; break;
case SETTINGS_CANCEL: case ACTION_STD_CANCEL:
done = true; done = true;
tm->tm_year = -1; tm->tm_year = -1;
break; break;
@ -963,7 +953,7 @@ bool set_time_screen(const char* string, struct tm *tm)
break; break;
} }
} }
action_signalscreenchange();
lcd_set_drawmode(lastmode); lcd_set_drawmode(lastmode);
return false; return false;
} }
@ -981,10 +971,10 @@ bool shutdown_screen(void)
while(!done) while(!done)
{ {
button = button_get_w_tmo(HZ*2); button = get_action(CONTEXT_STD,HZ*2);
switch(button) switch(button)
{ {
case BUTTON_OFF: case ACTION_STD_CANCEL:
sys_poweroff(); sys_poweroff();
break; break;
@ -998,11 +988,14 @@ bool shutdown_screen(void)
not have released the button yet. not have released the button yet.
We also ignore REPEAT events, since we don't want to We also ignore REPEAT events, since we don't want to
remove the splash when the user holds OFF to shut down. */ remove the splash when the user holds OFF to shut down. */
/* Is this still needed? commenting out so it compiles..
CHECK ME!!
if(!(button & (BUTTON_REL | BUTTON_REPEAT))) if(!(button & (BUTTON_REL | BUTTON_REPEAT)))
done = true; */ done = true;
break; break;
} }
} }
action_signalscreenchange();
return false; return false;
} }
#endif #endif
@ -1123,9 +1116,12 @@ bool browse_id3(void)
gui_synclist_set_nb_items(&id3_lists, ID3_ITEMS*2); gui_synclist_set_nb_items(&id3_lists, ID3_ITEMS*2);
gui_synclist_draw(&id3_lists); gui_synclist_draw(&id3_lists);
while (true) { while (true) {
key = button_get_w_tmo(HZ/2); key = get_action(CONTEXT_STD,HZ/2);
if(key!=BUTTON_NONE && !(key&BUTTON_REL) && !gui_synclist_do_button(&id3_lists, key)) if(key!=ACTION_NONE && /* !(key&BUTTON_REL) && ?? */ !gui_synclist_do_button(&id3_lists, key))
{
action_signalscreenchange();
return(default_event_handler(key) == SYS_USB_CONNECTED); return(default_event_handler(key) == SYS_USB_CONNECTED);
}
gui_syncstatusbar_draw(&statusbars, false); gui_syncstatusbar_draw(&statusbars, false);
} }
} }
@ -1147,29 +1143,24 @@ bool set_rating(void)
snprintf(rating_text, sizeof(rating_text), "%d", id3->rating); snprintf(rating_text, sizeof(rating_text), "%d", id3->rating);
lcd_puts(0, 1, (unsigned char *)rating_text); lcd_puts(0, 1, (unsigned char *)rating_text);
lcd_update(); lcd_update();
button = button_get(true); button = get_action(CONTEXT_SETTINGS,TIMEOUT_BLOCK);
switch(button) switch(button)
{ {
case SETTINGS_DEC: case ACTION_SETTINGS_DEC:
if (id3->rating > 0) if (id3->rating > 0)
id3->rating--; id3->rating--;
else else
id3->rating = 10; id3->rating = 10;
break; break;
case SETTINGS_INC: case ACTION_SETTINGS_INC:
if (id3->rating < 10) if (id3->rating < 10)
id3->rating++; id3->rating++;
else else
id3->rating = 0; id3->rating = 0;
break; break;
case SETTINGS_CANCEL: case ACTION_STD_CANCEL:
#ifdef SETTINGS_OK2
case SETTINGS_OK2:
#endif
/* eat release event */
button_get(true);
exit = true; exit = true;
break; break;
@ -1179,5 +1170,6 @@ bool set_rating(void)
break; break;
} }
} }
action_signalscreenchange();
return false; return false;
} }

View file

@ -22,51 +22,6 @@
#include "config.h" #include "config.h"
#include "timefuncs.h" #include "timefuncs.h"
#if (CONFIG_KEYPAD == RECORDER_PAD) || (CONFIG_KEYPAD == IRIVER_H100_PAD) ||\
(CONFIG_KEYPAD == IRIVER_H300_PAD)
#define PITCH_UP BUTTON_UP
#define PITCH_DOWN BUTTON_DOWN
#define PITCH_RIGHT BUTTON_RIGHT
#define PITCH_LEFT BUTTON_LEFT
#define PITCH_EXIT BUTTON_OFF
#define PITCH_RESET BUTTON_ON
#elif (CONFIG_KEYPAD == ONDIO_PAD)
#define PITCH_UP BUTTON_UP
#define PITCH_DOWN BUTTON_DOWN
#define PITCH_RIGHT BUTTON_RIGHT
#define PITCH_LEFT BUTTON_LEFT
#define PITCH_EXIT BUTTON_OFF
#define PITCH_RESET BUTTON_MENU
#elif (CONFIG_KEYPAD == IPOD_4G_PAD) || (CONFIG_KEYPAD == IPOD_3G_PAD)
#define PITCH_UP BUTTON_SCROLL_FWD
#define PITCH_DOWN BUTTON_SCROLL_BACK
#define PITCH_RIGHT BUTTON_RIGHT
#define PITCH_LEFT BUTTON_LEFT
#define PITCH_EXIT BUTTON_SELECT
#define PITCH_RESET BUTTON_MENU
#elif (CONFIG_KEYPAD == GIGABEAT_PAD)
#define PITCH_UP BUTTON_UP
#define PITCH_DOWN BUTTON_DOWN
#define PITCH_RIGHT BUTTON_RIGHT
#define PITCH_LEFT BUTTON_LEFT
#define PITCH_EXIT BUTTON_SELECT
#define PITCH_RESET BUTTON_A
#elif (CONFIG_KEYPAD == IAUDIO_X5_PAD)
#define PITCH_UP BUTTON_UP
#define PITCH_DOWN BUTTON_DOWN
#define PITCH_RIGHT BUTTON_RIGHT
#define PITCH_LEFT BUTTON_LEFT
#define PITCH_EXIT BUTTON_PLAY
#define PITCH_RESET BUTTON_POWER
#elif (CONFIG_KEYPAD == IRIVER_H10_PAD)
#define PITCH_UP BUTTON_SCROLL_UP
#define PITCH_DOWN BUTTON_SCROLL_DOWN
#define PITCH_RIGHT BUTTON_RIGHT
#define PITCH_LEFT BUTTON_LEFT
#define PITCH_EXIT BUTTON_PLAY
#define PITCH_RESET BUTTON_POWER
#endif
struct screen; struct screen;
void usb_display_info(struct screen * display); void usb_display_info(struct screen * display);

View file

@ -24,7 +24,7 @@
#include "config.h" #include "config.h"
#include "kernel.h" #include "kernel.h"
#include "thread.h" #include "thread.h"
#include "button.h" #include "action.h"
#include "settings.h" #include "settings.h"
#include "disk.h" #include "disk.h"
#include "panic.h" #include "panic.h"
@ -612,6 +612,7 @@ static const struct bit_entry hd_bits[] =
{2, S_O(eq_hw_band4_cutoff), 1, "eq hardware band 4 cutoff", "5.3kHz,6.9kHz,9kHz,11.7kHz" }, {2, S_O(eq_hw_band4_cutoff), 1, "eq hardware band 4 cutoff", "5.3kHz,6.9kHz,9kHz,11.7kHz" },
{5|SIGNED, S_O(eq_hw_band4_gain), 12, "eq hardware band 4 gain", NULL }, {5|SIGNED, S_O(eq_hw_band4_gain), 12, "eq hardware band 4 gain", NULL },
#endif #endif
{1, S_O(hold_lr_for_scroll_in_list), true, "hold_lr_for_scroll_in_list", off_on },
{2, S_O(show_path_in_browser), 0, "show path in browser", "off,current directory,full path" }, {2, S_O(show_path_in_browser), 0, "show path in browser", "off,current directory,full path" },
@ -1799,7 +1800,7 @@ void settings_reset(void) {
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
global_settings.kbd_file[0] = '\0'; global_settings.kbd_file[0] = '\0';
#endif #endif
global_settings.hold_lr_for_scroll_in_list = true;
} }
bool set_bool(const char* string, bool* variable ) bool set_bool(const char* string, bool* variable )
@ -1891,7 +1892,7 @@ bool do_set_setting(const unsigned char* string, void *variable,
struct value_setting_data *cb_data, struct value_setting_data *cb_data,
void (*function)(int)) void (*function)(int))
{ {
int button; int action;
bool done = false; bool done = false;
struct gui_synclist lists; struct gui_synclist lists;
int oldvalue; int oldvalue;
@ -1918,11 +1919,11 @@ bool do_set_setting(const unsigned char* string, void *variable,
while (!done) while (!done)
{ {
button = button_get(true); action = get_action(CONTEXT_LIST,TIMEOUT_BLOCK);
if (button == BUTTON_NONE) if (action == ACTION_NONE)
continue; continue;
if (gui_synclist_do_button(&lists,button)) if (gui_synclist_do_button(&lists,action))
{ {
if (global_settings.talk_menu) if (global_settings.talk_menu)
{ {
@ -1946,7 +1947,7 @@ bool do_set_setting(const unsigned char* string, void *variable,
*(bool*)variable = gui_synclist_get_sel_pos(&lists) ? true : false; *(bool*)variable = gui_synclist_get_sel_pos(&lists) ? true : false;
else *(int*)variable = gui_synclist_get_sel_pos(&lists); else *(int*)variable = gui_synclist_get_sel_pos(&lists);
} }
else if (button == SETTINGS_CANCEL) else if (action == ACTION_STD_CANCEL)
{ {
gui_syncsplash(HZ/2,true,str(LANG_MENU_SETTING_CANCEL)); gui_syncsplash(HZ/2,true,str(LANG_MENU_SETTING_CANCEL));
if (cb_data->type == INT) if (cb_data->type == INT)
@ -1954,11 +1955,11 @@ bool do_set_setting(const unsigned char* string, void *variable,
else *(bool*)variable = (bool)oldvalue; else *(bool*)variable = (bool)oldvalue;
done = true; done = true;
} }
else if (button == SETTINGS_OK) else if (action == ACTION_STD_OK)
{ {
done = true; done = true;
} }
else if(default_event_handler(button) == SYS_USB_CONNECTED) else if(default_event_handler(action) == SYS_USB_CONNECTED)
return true; return true;
gui_syncstatusbar_draw(&statusbars, false); gui_syncstatusbar_draw(&statusbars, false);
if ( function ) if ( function )

View file

@ -45,115 +45,6 @@
#define MAX_FILENAME 20 #define MAX_FILENAME 20
/* button definitions */
#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \
(CONFIG_KEYPAD == IRIVER_H300_PAD)
#define SETTINGS_INC BUTTON_UP
#define SETTINGS_DEC BUTTON_DOWN
#define SETTINGS_OK BUTTON_SELECT
#define SETTINGS_OK2 BUTTON_LEFT
#define SETTINGS_CANCEL BUTTON_OFF
#define SETTINGS_CANCEL2 BUTTON_MODE
#define SETTINGS_PREV BUTTON_LEFT
#define SETTINGS_NEXT BUTTON_RIGHT
#define SETTINGS_ACCEPT BUTTON_ON
#define SETTINGS_RC_INC BUTTON_RC_FF
#define SETTINGS_RC_DEC BUTTON_RC_REW
#define SETTINGS_RC_OK BUTTON_RC_MENU
#define SETTINGS_RC_OK2 BUTTON_RC_SOURCE
#define SETTINGS_RC_CANCEL BUTTON_RC_STOP
#define SETTINGS_RC_CANCEL2 BUTTON_RC_MODE
#define SETTINGS_RC_PREV BUTTON_RC_SOURCE
#define SETTINGS_RC_NEXT BUTTON_RC_BITRATE
#define SETTINGS_RC_ACCEPT BUTTON_RC_ON
#elif CONFIG_KEYPAD == RECORDER_PAD
#define SETTINGS_INC BUTTON_UP
#define SETTINGS_DEC BUTTON_DOWN
#define SETTINGS_OK BUTTON_PLAY
#define SETTINGS_OK2 BUTTON_LEFT
#define SETTINGS_CANCEL BUTTON_OFF
#define SETTINGS_CANCEL2 BUTTON_F1
#define SETTINGS_PREV BUTTON_LEFT
#define SETTINGS_NEXT BUTTON_RIGHT
#define SETTINGS_ACCEPT BUTTON_ON
#elif CONFIG_KEYPAD == PLAYER_PAD
#define SETTINGS_INC BUTTON_RIGHT
#define SETTINGS_DEC BUTTON_LEFT
#define SETTINGS_OK BUTTON_PLAY
#define SETTINGS_CANCEL BUTTON_STOP
#define SETTINGS_CANCEL2 BUTTON_MENU
#define SETTINGS_ACCEPT BUTTON_ON
#elif CONFIG_KEYPAD == ONDIO_PAD
#define SETTINGS_INC BUTTON_UP
#define SETTINGS_DEC BUTTON_DOWN
#define SETTINGS_OK BUTTON_RIGHT
#define SETTINGS_OK2 BUTTON_LEFT
#define SETTINGS_CANCEL BUTTON_MENU
#define SETTINGS_CANCEL2 BUTTON_OFF
#elif CONFIG_KEYPAD == GMINI100_PAD
#define SETTINGS_INC BUTTON_UP
#define SETTINGS_DEC BUTTON_DOWN
#define SETTINGS_OK BUTTON_PLAY
#define SETTINGS_OK2 BUTTON_LEFT
#define SETTINGS_CANCEL BUTTON_OFF
#define SETTINGS_CANCEL2 BUTTON_MENU
#define SETTINGS_PREV BUTTON_LEFT
#define SETTINGS_NEXT BUTTON_RIGHT
#define SETTINGS_ACCEPT BUTTON_MENU
#elif (CONFIG_KEYPAD == IPOD_3G_PAD) || (CONFIG_KEYPAD == IPOD_4G_PAD)
#define SETTINGS_INC BUTTON_SCROLL_FWD
#define SETTINGS_DEC BUTTON_SCROLL_BACK
#define SETTINGS_OK BUTTON_SELECT
#define SETTINGS_CANCEL BUTTON_MENU
#define SETTINGS_PREV BUTTON_LEFT
#define SETTINGS_NEXT BUTTON_RIGHT
#define SETTINGS_ACCEPT BUTTON_PLAY
#elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD
#define SETTINGS_INC BUTTON_UP
#define SETTINGS_DEC BUTTON_DOWN
#define SETTINGS_OK BUTTON_SELECT
#define SETTINGS_CANCEL BUTTON_PLAY
#define SETTINGS_PREV BUTTON_LEFT
#define SETTINGS_NEXT BUTTON_RIGHT
#elif CONFIG_KEYPAD == IAUDIO_X5_PAD
#define SETTINGS_INC BUTTON_UP
#define SETTINGS_DEC BUTTON_DOWN
#define SETTINGS_OK BUTTON_SELECT
#define SETTINGS_OK2 BUTTON_LEFT
#define SETTINGS_CANCEL BUTTON_REC
#define SETTINGS_PREV BUTTON_LEFT
#define SETTINGS_NEXT BUTTON_RIGHT
#define SETTINGS_ACCEPT BUTTON_PLAY
#elif CONFIG_KEYPAD == GIGABEAT_PAD
#define SETTINGS_INC BUTTON_UP
#define SETTINGS_DEC BUTTON_DOWN
#define SETTINGS_OK BUTTON_MENU
#define SETTINGS_CANCEL BUTTON_A
#define SETTINGS_PREV BUTTON_LEFT
#define SETTINGS_NEXT BUTTON_RIGHT
#define SETTINGS_ACCEPT BUTTON_SELECT
#elif CONFIG_KEYPAD == IRIVER_H10_PAD
#define SETTINGS_INC BUTTON_SCROLL_UP
#define SETTINGS_DEC BUTTON_SCROLL_DOWN
#define SETTINGS_OK BUTTON_PLAY
#define SETTINGS_OK2 BUTTON_LEFT
#define SETTINGS_CANCEL BUTTON_REW
#define SETTINGS_PREV BUTTON_LEFT
#define SETTINGS_NEXT BUTTON_RIGHT
#define SETTINGS_ACCEPT BUTTON_FF
#endif
/* data structures */ /* data structures */
#define BOOKMARK_NO 0 #define BOOKMARK_NO 0
@ -564,7 +455,7 @@ struct user_settings
int eq_hw_band4_cutoff; int eq_hw_band4_cutoff;
int eq_hw_band4_gain; int eq_hw_band4_gain;
#endif #endif
bool hold_lr_for_scroll_in_list; /* hold L/R scrolls the list left/right */
int show_path_in_browser; /* 0=off, 1=current directory, 2=full path */ int show_path_in_browser; /* 0=off, 1=current directory, 2=full path */
}; };

View file

@ -29,6 +29,7 @@
#include "splash.h" #include "splash.h"
#include "icons.h" #include "icons.h"
#include "tree.h" #include "tree.h"
#include "action.h"
#include "settings.h" #include "settings.h"
#include "tagcache.h" #include "tagcache.h"
#include "tagtree.h" #include "tagtree.h"
@ -539,7 +540,7 @@ bool show_search_progress(bool init, int count)
str(LANG_OFF_ABORT) str(LANG_OFF_ABORT)
#endif #endif
); );
if (SETTINGS_CANCEL == button_get(false)) if (action_userabort(TIMEOUT_NOBLOCK))
return false; return false;
last_tick = current_tick; last_tick = current_tick;
yield(); yield();

View file

@ -72,6 +72,7 @@
#include "splash.h" #include "splash.h"
#include "buttonbar.h" #include "buttonbar.h"
#include "textarea.h" #include "textarea.h"
#include "action.h"
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
#include "widgets.h" #include "widgets.h"
@ -590,28 +591,11 @@ static bool dirbrowse(void)
boot_changed = false; boot_changed = false;
} }
#endif #endif
button = button_get_w_tmo(HZ/5); button = get_action(CONTEXT_TREE,HZ/5);
need_update = gui_synclist_do_button(&tree_lists, button); need_update = gui_synclist_do_button(&tree_lists, button);
switch ( button ) { switch ( button ) {
#ifdef TREE_ENTER case ACTION_STD_OK:
case TREE_ENTER | BUTTON_REL:
if (lastbutton != TREE_ENTER)
break;
#endif
#ifdef TREE_RC_RUN
case TREE_RC_RUN:
#endif
case TREE_RUN:
#ifdef TREE_RUN_PRE
if (((button == TREE_RUN)
#ifdef TREE_RC_RUN_PRE
|| (button == TREE_RC_RUN))
&& ((lastbutton != TREE_RC_RUN_PRE)
#endif
&& (lastbutton != TREE_RUN_PRE)))
break;
#endif
/* nothing to do if no files to display */ /* nothing to do if no files to display */
if ( numentries == 0 ) if ( numentries == 0 )
break; break;
@ -626,31 +610,27 @@ static bool dirbrowse(void)
restore = true; restore = true;
break; break;
case TREE_EXIT | BUTTON_REL: case ACTION_STD_CANCEL:
if (lastbutton != TREE_EXIT)
break;
#ifdef TREE_RC_EXIT
case TREE_RC_EXIT:
#endif
if (*tc.dirfilter > NUM_FILTER_MODES && tc.dirlevel < 1) { if (*tc.dirfilter > NUM_FILTER_MODES && tc.dirlevel < 1) {
exit_func = true; exit_func = true;
break; break;
} }
/* if we are in /, nothing to do */ /* if we are in /, stop playback
if (tc.dirlevel == 0 && !strcmp(currdir,"/")) (skip this and fall into tree_stop)*/
if (tc.dirlevel != 0 || strcmp(currdir,"/"))
{
if (id3db)
tagtree_exit(&tc);
else
if (ft_exit(&tc) == 3)
exit_func = true;
restore = true;
break; break;
}
/* else fall through */
if (id3db) case ACTION_TREE_STOP:
tagtree_exit(&tc);
else
if (ft_exit(&tc) == 3)
exit_func = true;
restore = true;
break;
#ifdef TREE_OFF
case TREE_OFF:
if (*tc.dirfilter < NUM_FILTER_MODES) if (*tc.dirfilter < NUM_FILTER_MODES)
{ {
/* Stop the music if it is playing */ /* Stop the music if it is playing */
@ -676,6 +656,7 @@ static bool dirbrowse(void)
#endif #endif
} }
break; break;
/* ??
#if defined(CONFIG_CHARGING) && !defined(HAVE_POWEROFF_WHILE_CHARGING) #if defined(CONFIG_CHARGING) && !defined(HAVE_POWEROFF_WHILE_CHARGING)
case TREE_OFF | BUTTON_REPEAT: case TREE_OFF | BUTTON_REPEAT:
if (charger_inserted()) { if (charger_inserted()) {
@ -684,25 +665,15 @@ static bool dirbrowse(void)
} }
break; break;
#endif #endif
#endif /* TREE_OFF */ */
case TREE_MENU: case ACTION_STD_MENU:
#ifdef TREE_RC_MENU
case TREE_RC_MENU:
#endif
#ifdef TREE_MENU_PRE
if (lastbutton != TREE_MENU_PRE
#ifdef TREE_RC_MENU_PRE
&& lastbutton != TREE_RC_MENU_PRE
#endif
)
break;
#endif
/* don't enter menu from plugin browser */ /* don't enter menu from plugin browser */
if (*tc.dirfilter < NUM_FILTER_MODES) if (*tc.dirfilter < NUM_FILTER_MODES)
{ {
int i; int i;
FOR_NB_SCREENS(i) FOR_NB_SCREENS(i)
screens[i].stop_scroll(); screens[i].stop_scroll();
action_signalscreenchange();
if (main_menu()) if (main_menu())
reload_dir = true; reload_dir = true;
restore = true; restore = true;
@ -715,18 +686,7 @@ static bool dirbrowse(void)
exit_func = true; exit_func = true;
break; break;
case TREE_WPS: case ACTION_TREE_WPS:
#ifdef TREE_RC_WPS
case TREE_RC_WPS:
#endif
#ifdef TREE_WPS_PRE
if ((lastbutton != TREE_WPS_PRE)
#ifdef TREE_RC_WPS
&& (lastbutton != TREE_RC_WPS_PRE)
#endif
)
break;
#endif
/* don't enter wps from plugin browser etc */ /* don't enter wps from plugin browser etc */
if (*tc.dirfilter < NUM_FILTER_MODES) if (*tc.dirfilter < NUM_FILTER_MODES)
{ {
@ -741,12 +701,8 @@ static bool dirbrowse(void)
} }
} }
break; break;
#ifdef HAVE_QUICKSCREEN #ifdef HAVE_QUICKSCREEN
case TREE_QUICK: case ACTION_STD_QUICKSCREEN:
#ifdef TREE_RC_QUICK
case TREE_RC_QUICK:
#endif
/* don't enter f2 from plugin browser */ /* don't enter f2 from plugin browser */
if (*tc.dirfilter < NUM_FILTER_MODES) if (*tc.dirfilter < NUM_FILTER_MODES)
{ {
@ -759,7 +715,6 @@ static bool dirbrowse(void)
} }
break; break;
#endif #endif
#ifdef BUTTON_F3 #ifdef BUTTON_F3
case BUTTON_F3: case BUTTON_F3:
/* don't enter f3 from plugin browser */ /* don't enter f3 from plugin browser */
@ -772,13 +727,7 @@ static bool dirbrowse(void)
break; break;
#endif #endif
case TREE_CONTEXT: case ACTION_STD_CONTEXT:
#ifdef TREE_RC_CONTEXT
case TREE_RC_CONTEXT:
#endif
#ifdef TREE_CONTEXT2
case TREE_CONTEXT2:
#endif
{ {
int onplay_result; int onplay_result;
int attr = 0; int attr = 0;
@ -827,7 +776,7 @@ static bool dirbrowse(void)
break; break;
} }
case BUTTON_NONE: case ACTION_NONE:
if (thumbnail_time != -1 && if (thumbnail_time != -1 &&
TIME_AFTER(current_tick, thumbnail_time)) TIME_AFTER(current_tick, thumbnail_time))
{ /* a delayed hovering thumbnail is due now */ { /* a delayed hovering thumbnail is due now */
@ -947,7 +896,6 @@ static bool dirbrowse(void)
lastfilter = *tc.dirfilter; lastfilter = *tc.dirfilter;
lastsortcase = global_settings.sort_case; lastsortcase = global_settings.sort_case;
restore = true; restore = true;
button_clear_queue(); /* clear button queue */
} }
if (exit_func) if (exit_func)
@ -1045,7 +993,7 @@ static bool dirbrowse(void)
} }
} }
} }
action_signalscreenchange();
return true; return true;
} }
@ -1057,7 +1005,7 @@ static bool add_dir(char* dirname, int len, int fd)
DIRCACHED* dir; DIRCACHED* dir;
/* check for user abort */ /* check for user abort */
if (button_get(false) == TREE_ABORT) if (action_userabort(TIMEOUT_NOBLOCK))
return true; return true;
dir = opendir_cached(dirname); dir = opendir_cached(dirname);

View file

@ -23,166 +23,6 @@
#include <applimits.h> #include <applimits.h>
#include <file.h> #include <file.h>
#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \
(CONFIG_KEYPAD == IRIVER_H300_PAD)
#define TREE_EXIT BUTTON_LEFT
#define TREE_ABORT BUTTON_OFF
#define TREE_ENTER BUTTON_RIGHT
#define TREE_RUN (BUTTON_SELECT | BUTTON_REL)
#define TREE_RUN_PRE BUTTON_SELECT
#define TREE_MENU ( BUTTON_MODE | BUTTON_REL)
#define TREE_MENU_PRE BUTTON_MODE
#define TREE_OFF BUTTON_OFF
#define TREE_WPS (BUTTON_ON | BUTTON_REL)
#define TREE_WPS_PRE BUTTON_ON
#define TREE_CONTEXT (BUTTON_SELECT | BUTTON_REPEAT)
#define TREE_CONTEXT2 (BUTTON_ON | BUTTON_SELECT)
#define TREE_QUICK (BUTTON_MODE | BUTTON_REPEAT)
/* Remote keys */
#define TREE_RC_NEXT BUTTON_RC_FF
#define TREE_RC_PREV BUTTON_RC_REW
#define TREE_RC_PGUP BUTTON_RC_SOURCE
#define TREE_RC_PGDN BUTTON_RC_BITRATE
#define TREE_RC_EXIT BUTTON_RC_STOP
#define TREE_RC_RUN (BUTTON_RC_MENU | BUTTON_REL)
#define TREE_RC_RUN_PRE BUTTON_RC_MENU
#define TREE_RC_MENU (BUTTON_RC_MODE | BUTTON_REL)
#define TREE_RC_MENU_PRE BUTTON_RC_MODE
#define TREE_RC_WPS (BUTTON_RC_ON | BUTTON_REL)
#define TREE_RC_WPS_PRE BUTTON_RC_ON
#define TREE_RC_CONTEXT (BUTTON_RC_ON | BUTTON_REPEAT)
#define TREE_RC_QUICK (BUTTON_RC_MODE | BUTTON_REPEAT)
#elif CONFIG_KEYPAD == RECORDER_PAD
#define TREE_EXIT BUTTON_LEFT
#define TREE_ABORT BUTTON_OFF
#define TREE_ENTER BUTTON_RIGHT
#define TREE_RUN (BUTTON_PLAY | BUTTON_REL)
#define TREE_RUN_PRE BUTTON_PLAY
#define TREE_MENU BUTTON_F1
#define TREE_OFF BUTTON_OFF
#define TREE_WPS (BUTTON_ON | BUTTON_REL)
#define TREE_WPS_PRE BUTTON_ON
#define TREE_CONTEXT (BUTTON_PLAY | BUTTON_REPEAT)
#define TREE_CONTEXT2 (BUTTON_ON | BUTTON_PLAY)
#define TREE_QUICK BUTTON_F2
#define TREE_RC_NEXT BUTTON_RC_RIGHT
#define TREE_RC_PREV BUTTON_RC_LEFT
#define TREE_RC_EXIT BUTTON_RC_STOP
#define TREE_RC_RUN BUTTON_RC_PLAY
#elif CONFIG_KEYPAD == PLAYER_PAD
#define TREE_EXIT BUTTON_STOP
#define TREE_ABORT BUTTON_STOP
#define TREE_RUN (BUTTON_PLAY | BUTTON_REL)
#define TREE_RUN_PRE BUTTON_PLAY
#define TREE_MENU BUTTON_MENU
#define TREE_WPS (BUTTON_ON | BUTTON_REL)
#define TREE_WPS_PRE BUTTON_ON
#define TREE_CONTEXT (BUTTON_PLAY | BUTTON_REPEAT)
#define TREE_CONTEXT2 (BUTTON_ON | BUTTON_PLAY)
#define TREE_RC_NEXT BUTTON_RC_RIGHT
#define TREE_RC_PREV BUTTON_RC_LEFT
#define TREE_RC_EXIT BUTTON_RC_STOP
#define TREE_RC_RUN BUTTON_RC_PLAY
#elif CONFIG_KEYPAD == ONDIO_PAD
#define TREE_EXIT BUTTON_LEFT
#define TREE_ABORT BUTTON_OFF
#define TREE_RUN (BUTTON_RIGHT | BUTTON_REL)
#define TREE_RUN_PRE BUTTON_RIGHT
#define TREE_MENU (BUTTON_MENU | BUTTON_REPEAT)
#define TREE_MENU_PRE BUTTON_MENU
#define TREE_OFF BUTTON_OFF
#define TREE_WPS (BUTTON_MENU | BUTTON_REL)
#define TREE_WPS_PRE BUTTON_MENU
#define TREE_CONTEXT (BUTTON_RIGHT | BUTTON_REPEAT)
#elif CONFIG_KEYPAD == GMINI100_PAD
#define TREE_EXIT BUTTON_LEFT
#define TREE_ENTER BUTTON_RIGHT
#define TREE_RUN (BUTTON_PLAY | BUTTON_REL)
#define TREE_RUN_PRE BUTTON_PLAY
#define TREE_MENU BUTTON_MENU
#define TREE_WPS (BUTTON_ON | BUTTON_REL)
#define TREE_WPS_PRE BUTTON_ON
#define TREE_CONTEXT (BUTTON_PLAY | BUTTON_REPEAT)
#define TREE_CONTEXT2 (BUTTON_ON | BUTTON_PLAY)
#elif (CONFIG_KEYPAD == IPOD_3G_PAD) || (CONFIG_KEYPAD == IPOD_4G_PAD)
#define TREE_EXIT BUTTON_LEFT
#define TREE_ABORT BUTTON_LEFT
#define TREE_ENTER BUTTON_RIGHT
#define TREE_RUN (BUTTON_SELECT | BUTTON_REL)
#define TREE_RUN_PRE BUTTON_SELECT
#define TREE_MENU (BUTTON_MENU | BUTTON_REL)
#define TREE_MENU_PRE BUTTON_MENU
#define TREE_WPS (BUTTON_PLAY | BUTTON_REL)
#define TREE_WPS_PRE BUTTON_PLAY
#define TREE_CONTEXT (BUTTON_SELECT | BUTTON_REPEAT)
#define TREE_QUICK (BUTTON_MENU | BUTTON_REPEAT)
#elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD
#define TREE_EXIT BUTTON_LEFT
#define TREE_ABORT BUTTON_PLAY
#define TREE_RUN (BUTTON_RIGHT | BUTTON_REL)
#define TREE_RUN_PRE BUTTON_RIGHT
#define TREE_MENU (BUTTON_SELECT | BUTTON_REPEAT)
#define TREE_MENU_PRE BUTTON_SELECT
#define TREE_WPS (BUTTON_SELECT | BUTTON_REL)
#define TREE_WPS_PRE BUTTON_SELECT
#define TREE_CONTEXT (BUTTON_RIGHT | BUTTON_REPEAT)
#elif CONFIG_KEYPAD == IAUDIO_X5_PAD
#define TREE_EXIT BUTTON_LEFT
#define TREE_ABORT BUTTON_REC
#define TREE_ENTER BUTTON_RIGHT
#define TREE_RUN (BUTTON_SELECT | BUTTON_REL)
#define TREE_RUN_PRE BUTTON_SELECT
#define TREE_MENU (BUTTON_REC | BUTTON_REL)
#define TREE_MENU_PRE BUTTON_REC
#define TREE_WPS (BUTTON_PLAY | BUTTON_REL)
#define TREE_WPS_PRE BUTTON_PLAY
#define TREE_CONTEXT (BUTTON_SELECT | BUTTON_REPEAT)
#define TREE_QUICK (BUTTON_REC | BUTTON_REPEAT)
#elif CONFIG_KEYPAD == GIGABEAT_PAD
#define TREE_NEXT BUTTON_DOWN
#define TREE_PREV BUTTON_UP
#define TREE_EXIT BUTTON_LEFT
#define TREE_ABORT BUTTON_A
#define TREE_ENTER BUTTON_RIGHT
#define TREE_RUN (BUTTON_SELECT | BUTTON_REL)
#define TREE_RUN_PRE BUTTON_SELECT
#define TREE_MENU (BUTTON_MENU | BUTTON_REL)
#define TREE_MENU_PRE BUTTON_MENU
#define TREE_WPS (BUTTON_POWER | BUTTON_REL)
#define TREE_WPS_PRE BUTTON_POWER
#define TREE_CONTEXT (BUTTON_SELECT | BUTTON_REPEAT)
#elif CONFIG_KEYPAD == IRIVER_H10_PAD
#define TREE_EXIT BUTTON_LEFT
#define TREE_ABORT BUTTON_LEFT
#define TREE_ENTER BUTTON_RIGHT
#define TREE_RUN (BUTTON_PLAY | BUTTON_REL)
#define TREE_RUN_PRE BUTTON_PLAY
#define TREE_MENU (BUTTON_REW | BUTTON_REL)
#define TREE_MENU_PRE BUTTON_REW
#define TREE_WPS (BUTTON_FF | BUTTON_REL)
#define TREE_WPS_PRE BUTTON_FF
#define TREE_CONTEXT (BUTTON_PLAY | BUTTON_SCROLL_UP)
#define TREE_QUICK (BUTTON_PLAY | BUTTON_SCROLL_DOWN)
#endif
struct entry { struct entry {
short attr; /* FAT attributes + file type flags */ short attr; /* FAT attributes + file type flags */
unsigned long time_write; /* Last write time */ unsigned long time_write; /* Last write time */

View file

@ -519,7 +519,12 @@ static void remote_tick(void)
if (cs_countdown == 0) if (cs_countdown == 0)
CS_HI; CS_HI;
} }
#endif /* !SIMULATOR */ #else
int remote_type(void)
{
return REMOTETYPE_UNPLUGGED;
}
#endif/* !SIMULATOR */
/* LCD init */ /* LCD init */
#ifdef SIMULATOR #ifdef SIMULATOR