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
logfdisp.c
#endif
action.c
alarm_menu.c
abrepeat.c
bookmark.c
@ -81,3 +82,18 @@ eq_menu.c
#endif
metadata.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__
#include "stdbool.h"
#include "button.h"
#define CONTEXT_WPS 1
#define CONTEXT_TREE 2
#define CONTEXT_RECORD 3
#define CONTEXT_MAINMENU 4
#define CONTEXT_ID3DB 5
#define LAST_ITEM_IN_LIST { ACTION_NONE, BUTTON_NONE, BUTTON_NONE }
#define LAST_ITEM_IN_LIST__NEXTLIST(a) { a, BUTTON_NONE, BUTTON_NONE }
#define TIMEOUT_BLOCK -1
#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

View file

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

View file

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

View file

@ -21,54 +21,6 @@
#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_autobookmark(void);
bool bookmark_create_menu(void);

View file

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

View file

@ -26,7 +26,7 @@
#include "kernel.h"
#include "lcd.h"
#include "menu.h"
#include "button.h"
#include "action.h"
#include "mp3_playback.h"
#include "settings.h"
#include "statusbar.h"
@ -49,73 +49,6 @@
#include "wm8758.h"
#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 */
#define EQ_CUTOFF_MIN 20
#define EQ_CUTOFF_MAX 22040
@ -686,27 +619,19 @@ bool eq_menu_graphical(void)
screens[i].update();
}
button = button_get(true);
button = get_action(CONTEXT_SETTINGSGRAPHICAL,TIMEOUT_BLOCK);
switch (button) {
case EQ_BTN_DECREMENT:
case EQ_BTN_DECREMENT | BUTTON_REPEAT:
#ifdef EQ_BTN_RC_DECREMENT
case EQ_BTN_RC_DECREMENT:
case EQ_BTN_RC_DECREMENT | BUTTON_REPEAT:
#endif
case ACTION_SETTINGS_DEC:
case ACTION_SETTINGS_DECREPEAT:
*(setting) -= step;
has_changed = true;
if (*(setting) < min)
*(setting) = min;
break;
case EQ_BTN_INCREMENT:
case EQ_BTN_INCREMENT | BUTTON_REPEAT:
#ifdef EQ_BTN_RC_INCREMENT
case EQ_BTN_RC_INCREMENT:
case EQ_BTN_RC_INCREMENT | BUTTON_REPEAT:
#endif
case ACTION_SETTINGS_INC:
case ACTION_SETTINGS_INCREPEAT:
*(setting) += step;
has_changed = true;
if (*(setting) > max)
@ -731,45 +656,27 @@ bool eq_menu_graphical(void)
break;
#endif
case EQ_BTN_PREV_BAND:
case EQ_BTN_PREV_BAND | BUTTON_REPEAT:
#ifdef EQ_BTN_RC_PREV_BAND
case EQ_BTN_RC_PREV_BAND:
case EQ_BTN_RC_PREV_BAND | BUTTON_REPEAT:
#endif
case ACTION_STD_PREV:
case ACTION_STD_PREVREPEAT:
current_band--;
if (current_band < 0)
current_band = 4; /* wrap around */
break;
case EQ_BTN_NEXT_BAND:
case EQ_BTN_NEXT_BAND | BUTTON_REPEAT:
#ifdef EQ_BTN_RC_NEXT_BAND
case EQ_BTN_RC_NEXT_BAND:
case EQ_BTN_RC_NEXT_BAND | BUTTON_REPEAT:
#endif
case ACTION_STD_NEXT:
case ACTION_STD_NEXTREPEAT:
current_band++;
if (current_band > 4)
current_band = 0; /* wrap around */
break;
case EQ_BTN_CHANGE_MODE:
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
case ACTION_STD_OK:
mode++;
if (mode > Q)
mode = GAIN; /* wrap around */
break;
case EQ_BTN_EXIT:
case EQ_BTN_EXIT | BUTTON_REPEAT:
#ifdef EQ_BTN_RC_EXIT
case EQ_BTN_RC_EXIT:
case EQ_BTN_RC_EXIT | BUTTON_REPEAT:
#endif
case ACTION_STD_CANCEL:
exit_request = true;
result = false;
break;
@ -789,6 +696,7 @@ bool eq_menu_graphical(void)
}
}
action_signalscreenchange();
/* Reset screen settings */
FOR_NB_SCREENS(i) {
screens[i].setfont(FONT_UI);

View file

@ -29,64 +29,11 @@
#include "scrollbar.h"
#include "lang.h"
#include "splash.h"
#include "action.h"
#define TEXT_MARGIN display->char_width+2
#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 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);
}
button = button_get(true);
button = get_action(CONTEXT_SETTINGSGRAPHICAL,TIMEOUT_BLOCK);
switch (button)
{
case SLIDER_UP:
#ifdef SLIDER_RC_UP
case SLIDER_RC_UP:
#endif
case ACTION_STD_PREV:
slider = (slider+2)%3;
break;
case SLIDER_DOWN:
#ifdef SLIDER_RC_DOWN
case SLIDER_RC_DOWN:
#endif
case ACTION_STD_NEXT:
slider = (slider+1)%3;
break;
case SLIDER_RIGHT:
case SLIDER_RIGHT|BUTTON_REPEAT:
#ifdef SLIDER_RC_RIGHT
case SLIDER_RC_RIGHT:
case SLIDER_RC_RIGHT|BUTTON_REPEAT:
#endif
case ACTION_SETTINGS_INC:
case ACTION_SETTINGS_INCREPEAT:
if (rgb_val[slider] < max_val[slider])
rgb_val[slider]++;
break;
case SLIDER_LEFT:
case SLIDER_LEFT|BUTTON_REPEAT:
#ifdef SLIDER_RC_LEFT
case SLIDER_RC_LEFT:
case SLIDER_RC_LEFT|BUTTON_REPEAT:
#endif
case ACTION_SETTINGS_DEC:
case ACTION_SETTINGS_DECREPEAT:
if (rgb_val[slider] > 0)
rgb_val[slider]--;
break;
case SLIDER_OK:
#ifdef HAVE_REMOTE_LCD
case SLIDER_RC_OK:
#endif
#ifdef SLIDER_OK2
case SLIDER_OK2:
#endif
case ACTION_STD_OK:
if ((banned_color!=-1) && (banned_color == newcolor))
{
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;
break;
case SLIDER_CANCEL:
#ifdef HAVE_REMOTE_LCD
case SLIDER_RC_CANCEL:
#endif
case ACTION_STD_CANCEL:
exit = 1;
break;
@ -306,6 +230,6 @@ bool set_color(struct screen *display,char *title, int* color, int banned_color)
}
}
display->set_foreground(fgcolor);
action_signalscreenchange();
return false;
}

View file

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

View file

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

View file

@ -26,6 +26,7 @@
#include "settings.h"
#include "kernel.h"
#include "action.h"
#include "screen_access.h"
#include "list.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);
switch(button)
{
case LIST_PREV:
#ifdef LIST_RC_PREV
case LIST_RC_PREV:
#endif
case ACTION_STD_PREV:
gui_synclist_limit_scroll(lists, false);
case LIST_PREV | BUTTON_REPEAT:
#ifdef LIST_RC_PREV
case LIST_RC_PREV | BUTTON_REPEAT:
#endif
case ACTION_STD_PREVREPEAT:
gui_synclist_select_previous(lists);
gui_synclist_draw(lists);
yield();
return LIST_PREV;
return ACTION_STD_PREV;
case LIST_NEXT:
#ifdef LIST_RC_NEXT
case LIST_RC_NEXT:
#endif
case ACTION_STD_NEXT:
gui_synclist_limit_scroll(lists, false);
case LIST_NEXT | BUTTON_REPEAT:
#ifdef LIST_RC_NEXT
case LIST_RC_NEXT | BUTTON_REPEAT:
#endif
case ACTION_STD_NEXTREPEAT:
gui_synclist_select_next(lists);
gui_synclist_draw(lists);
yield();
return LIST_NEXT;
return ACTION_STD_NEXT;
#ifdef LIST_PGRIGHT
case LIST_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
#ifdef HAVE_LCD_BITMAP
case ACTION_TREE_PGRIGHT:
gui_synclist_scroll_right(lists);
gui_synclist_draw(lists);
return LIST_PGRIGHT;
#endif
#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
return ACTION_TREE_PGRIGHT;
case ACTION_TREE_PGLEFT:
gui_synclist_scroll_left(lists);
gui_synclist_draw(lists);
return LIST_PGLEFT;
return ACTION_TREE_PGLEFT;
#endif
/* 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
* have the same number of lines*/
#ifdef LIST_PGUP
case LIST_PGUP:
case ACTION_LISTTREE_PGUP:
gui_synclist_limit_scroll(lists, false);
case LIST_PGUP | BUTTON_REPEAT:
gui_synclist_select_previous_page(lists, SCREEN_MAIN);
gui_synclist_draw(lists);
yield();
return LIST_NEXT;
#endif
#ifdef LIST_RC_PGUP
case LIST_RC_PGUP:
return ACTION_STD_NEXT;
case ACTION_LISTTREE_PGDOWN:
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_draw(lists);
yield();
return LIST_PREV;
#endif
#ifdef LIST_RC_PGDN
case LIST_RC_PGDN:
return ACTION_STD_PREV;
#if (REMOTE_BUTTON != 0 )
case ACTION_LISTTREE_RC_PGUP:
gui_synclist_limit_scroll(lists, false);
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);
case LIST_RC_PGDN | BUTTON_REPEAT:
gui_synclist_select_next_page(lists, SCREEN_REMOTE);
gui_synclist_draw(lists);
yield();
return LIST_PREV;
return ACTION_STD_PREV;
#endif
}
return 0;

View file

@ -26,89 +26,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
* 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
* - button : the keycode of a pressed button
* returned value :
* - LIST_NEXT when moving forward (next item or pgup)
* - LIST_PREV when moving backward (previous item or pgdown)
* - ACTION_STD_NEXT when moving forward (next item or pgup)
* - ACTION_STD_PREV when moving backward (previous item or pgdown)
*/
extern unsigned gui_synclist_do_button(struct gui_synclist * lists, unsigned button);

View file

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

View file

@ -27,42 +27,6 @@
#include "option_select.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;
/*
* Callback function called each time the quickscreen gets modified

View file

@ -23,6 +23,7 @@
#include "textarea.h"
#include "screen_access.h"
#include "kernel.h"
#include "action.h"
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)
{
case SELECT_INC | BUTTON_REPEAT :
#ifdef SELECT_RC_INC
case SELECT_RC_INC | BUTTON_REPEAT :
#endif
case ACTION_SETTINGS_INCREPEAT:
select->options.limit_loop = true;
case SELECT_INC :
#ifdef SELECT_RC_INC
case SELECT_RC_INC :
#endif
case ACTION_SETTINGS_INC:
option_select_next(&select->options);
return(true);
case SELECT_DEC | BUTTON_REPEAT :
#ifdef SELECT_RC_DEC
case SELECT_RC_DEC | BUTTON_REPEAT :
#endif
case ACTION_SETTINGS_DECREPEAT:
select->options.limit_loop = true;
case SELECT_DEC :
#ifdef SELECT_RC_DEC
case SELECT_RC_DEC :
#endif
case ACTION_SETTINGS_DEC:
option_select_prev(&select->options);
return(true);
case SELECT_OK :
#ifdef SELECT_RC_OK
case SELECT_RC_OK :
#endif
#ifdef SELECT_RC_OK2
case SELECT_RC_OK2 :
#endif
#ifdef SELECT_OK2
case SELECT_OK2 :
#endif
case ACTION_STD_OK:
case ACTION_STD_PREV: /*NOTE: this is in CONTEXT_SETTINGS ! */
select->validated=true;
return(false);
case SELECT_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
case ACTION_STD_CANCEL:
select->canceled = true;
gui_syncselect_draw(select);
sleep(HZ/2);
action_signalscreenchange();
return(false);
}
return(false);

View file

@ -23,104 +23,6 @@
#include "settings.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
{
bool canceled;

View file

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

View file

@ -4,41 +4,6 @@
#include "screen_access.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
{
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 <string.h>
#include <kernel.h>
#include <button.h>
#include <action.h>
#include <lcd.h>
#include "menu.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
bool logfdisplay(void)
@ -46,7 +38,6 @@ bool logfdisplay(void)
int lines;
int columns;
int i;
int button;
bool lcd = false; /* fixed atm */
int index;
@ -93,8 +84,7 @@ bool logfdisplay(void)
lcd_puts(0, i, buffer);
}
lcd_update();
button = button_get_w_tmo(HZ/2);
} while(button != LOGF_BUTTON_QUIT);
} while(!action_userabort(HZ));
return false;
}

View file

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

View file

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

View file

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

View file

@ -815,11 +815,7 @@ static int onplay_callback(int key, int menu)
{
(void)menu;
if (key == MENU_EXIT_MENU
#ifdef MENU_RC_EXIT_MENU
|| key == MENU_RC_EXIT_MENU
#endif
)
if (key == ACTION_STD_MENU)
exit_to_main = true;
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 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_prev_dir(void);
#else
#define audio_next_dir()
#define audio_prev_dir()
#endif
void audio_preinit(void);
#endif

View file

@ -70,6 +70,7 @@
#include <string.h>
#include "playlist.h"
#include "file.h"
#include "action.h"
#include "dir.h"
#include "sprintf.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++)
{
/* user abort */
if (button_get(false) == SETTINGS_CANCEL)
if (action_userabort(TIMEOUT_NOBLOCK))
{
result = -1;
exit = true;
@ -1440,7 +1441,7 @@ static int check_subdir_for_music(char *dir, char *subdir)
{
for (i=0; i<num_files; i++)
{
if (button_get(false) == SETTINGS_CANCEL)
if (action_userabort(TIMEOUT_NOBLOCK))
{
result = -2;
break;
@ -1888,7 +1889,7 @@ int playlist_resume(void)
str(LANG_OFF_ABORT)
#endif
);
if (SETTINGS_CANCEL == button_get(false))
if (action_userabort(TIMEOUT_NOBLOCK))
{
/* FIXME:
* 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)
{
/* user abort */
if (button_get(false) == SETTINGS_CANCEL)
if (action_userabort(TIMEOUT_NOBLOCK))
break;
if (temp_buf[0] != '#' && temp_buf[0] != '\0')
@ -3281,7 +3282,7 @@ int playlist_save(struct playlist_info* playlist, char *filename)
int seek;
/* user abort */
if (button_get(false) == SETTINGS_CANCEL)
if (action_userabort(TIMEOUT_NOBLOCK))
{
result = -1;
break;
@ -3408,7 +3409,7 @@ int playlist_directory_tracksearch(const char* dirname, bool recurse,
for (i=0; i<num_files; i++)
{
/* user abort */
if (button_get(false) == SETTINGS_CANCEL)
if (action_userabort(TIMEOUT_NOBLOCK))
{
result = -1;
break;

View file

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

View file

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

View file

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

View file

@ -38,6 +38,7 @@
#include "dir.h"
#include "kernel.h"
#include "button.h"
#include "action.h"
#include "usb.h"
#include "font.h"
#include "system.h"
@ -104,7 +105,7 @@
#define PLUGIN_MAGIC 0x526F634B /* RocK */
/* 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
backwards compatibility (and please take the opportunity to sort in any
@ -546,6 +547,12 @@ struct plugin_api {
#endif
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 */

View file

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

View file

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

View file

@ -22,51 +22,6 @@
#include "config.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;
void usb_display_info(struct screen * display);

View file

@ -24,7 +24,7 @@
#include "config.h"
#include "kernel.h"
#include "thread.h"
#include "button.h"
#include "action.h"
#include "settings.h"
#include "disk.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" },
{5|SIGNED, S_O(eq_hw_band4_gain), 12, "eq hardware band 4 gain", NULL },
#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" },
@ -1799,7 +1800,7 @@ void settings_reset(void) {
#ifdef HAVE_LCD_BITMAP
global_settings.kbd_file[0] = '\0';
#endif
global_settings.hold_lr_for_scroll_in_list = true;
}
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,
void (*function)(int))
{
int button;
int action;
bool done = false;
struct gui_synclist lists;
int oldvalue;
@ -1918,11 +1919,11 @@ bool do_set_setting(const unsigned char* string, void *variable,
while (!done)
{
button = button_get(true);
if (button == BUTTON_NONE)
action = get_action(CONTEXT_LIST,TIMEOUT_BLOCK);
if (action == ACTION_NONE)
continue;
if (gui_synclist_do_button(&lists,button))
if (gui_synclist_do_button(&lists,action))
{
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;
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));
if (cb_data->type == INT)
@ -1954,11 +1955,11 @@ bool do_set_setting(const unsigned char* string, void *variable,
else *(bool*)variable = (bool)oldvalue;
done = true;
}
else if (button == SETTINGS_OK)
else if (action == ACTION_STD_OK)
{
done = true;
}
else if(default_event_handler(button) == SYS_USB_CONNECTED)
else if(default_event_handler(action) == SYS_USB_CONNECTED)
return true;
gui_syncstatusbar_draw(&statusbars, false);
if ( function )

View file

@ -45,115 +45,6 @@
#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 */
#define BOOKMARK_NO 0
@ -564,7 +455,7 @@ struct user_settings
int eq_hw_band4_cutoff;
int eq_hw_band4_gain;
#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 */
};

View file

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

View file

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

View file

@ -23,166 +23,6 @@
#include <applimits.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 {
short attr; /* FAT attributes + file type flags */
unsigned long time_write; /* Last write time */

View file

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