1
0
Fork 0
forked from len0rd/rockbox

m200v4: make buttons work again (added a small delay). make m200 keymap better. Add button mappings for the sim. Remove some config defines temporary to make building work again.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@19104 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Dominik Wenger 2008-11-14 21:57:43 +00:00
parent 9a0224fd28
commit 83dc89f751
4 changed files with 81 additions and 40 deletions

View file

@ -18,7 +18,7 @@
* KIND, either express or implied. * KIND, either express or implied.
* *
****************************************************************************/ ****************************************************************************/
/* Button Code Definitions for Sandisk c200 target */ /* Button Code Definitions for Sandisk m200 target */
#include "config.h" #include "config.h"
#include "action.h" #include "action.h"
@ -34,11 +34,11 @@
* Insert LAST_ITEM_IN_LIST at the end of each mapping * Insert LAST_ITEM_IN_LIST at the end of each mapping
*/ */
static const struct button_mapping button_context_standard[] = { static const struct button_mapping button_context_standard[] = {
{ ACTION_STD_PREV, BUTTON_VOLUP, BUTTON_NONE }, { ACTION_STD_PREV, BUTTON_PLAYPAUSE, BUTTON_NONE },
{ ACTION_STD_PREVREPEAT, BUTTON_VOLUP|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_STD_PREVREPEAT, BUTTON_PLAYPAUSE|BUTTON_REPEAT, BUTTON_NONE },
{ ACTION_STD_NEXT, BUTTON_VOLDOWN, BUTTON_NONE }, { ACTION_STD_NEXT, BUTTON_REPEATAB, BUTTON_NONE },
{ ACTION_STD_NEXTREPEAT, BUTTON_VOLDOWN|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_STD_NEXTREPEAT, BUTTON_REPEATAB|BUTTON_REPEAT, BUTTON_NONE },
{ ACTION_STD_OK, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT }, { ACTION_STD_OK, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT },
{ ACTION_STD_OK, BUTTON_RIGHT, BUTTON_NONE }, { ACTION_STD_OK, BUTTON_RIGHT, BUTTON_NONE },
@ -53,8 +53,8 @@ static const struct button_mapping button_context_standard[] = {
static const struct button_mapping button_context_wps[] = { static const struct button_mapping button_context_wps[] = {
{ ACTION_WPS_PLAY, BUTTON_VOLUP|BUTTON_REL, BUTTON_VOLUP }, { ACTION_WPS_PLAY, BUTTON_PLAYPAUSE|BUTTON_REL, BUTTON_PLAYPAUSE },
{ ACTION_WPS_STOP, BUTTON_VOLUP|BUTTON_REPEAT, BUTTON_VOLUP }, { ACTION_WPS_STOP, BUTTON_PLAYPAUSE|BUTTON_REPEAT, BUTTON_PLAYPAUSE },
{ ACTION_WPS_SKIPPREV, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT }, { ACTION_WPS_SKIPPREV, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT },
{ ACTION_WPS_SEEKBACK, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_WPS_SEEKBACK, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
@ -66,14 +66,20 @@ static const struct button_mapping button_context_wps[] = {
{ ACTION_WPS_ABSETB_NEXTDIR,BUTTON_MENU|BUTTON_RIGHT, BUTTON_MENU }, { ACTION_WPS_ABSETB_NEXTDIR,BUTTON_MENU|BUTTON_RIGHT, BUTTON_MENU },
{ ACTION_WPS_ABSETA_PREVDIR,BUTTON_MENU|BUTTON_LEFT, BUTTON_MENU }, { ACTION_WPS_ABSETA_PREVDIR,BUTTON_MENU|BUTTON_LEFT, BUTTON_MENU },
{ ACTION_WPS_ABRESET, BUTTON_MENU|BUTTON_VOLUP, BUTTON_MENU }, { ACTION_WPS_ABRESET, BUTTON_MENU|BUTTON_PLAYPAUSE, BUTTON_MENU },
{ ACTION_WPS_VOLUP, BUTTON_VOLUP, BUTTON_NONE },
{ ACTION_WPS_VOLUP, BUTTON_VOLUP|BUTTON_REPEAT, BUTTON_NONE },
{ ACTION_WPS_VOLDOWN, BUTTON_VOLDOWN, BUTTON_NONE },
{ ACTION_WPS_VOLDOWN, BUTTON_VOLDOWN|BUTTON_REPEAT, BUTTON_NONE },
{ ACTION_WPS_MENU, BUTTON_MENU|BUTTON_REL, BUTTON_MENU }, { ACTION_WPS_MENU, BUTTON_MENU|BUTTON_REL, BUTTON_MENU },
{ ACTION_WPS_BROWSE, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT }, { ACTION_WPS_BROWSE, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT },
{ ACTION_WPS_PITCHSCREEN, BUTTON_SELECT|BUTTON_VOLUP, BUTTON_SELECT }, { ACTION_WPS_PITCHSCREEN, BUTTON_SELECT|BUTTON_PLAYPAUSE, BUTTON_SELECT },
{ ACTION_WPS_ID3SCREEN, BUTTON_SELECT|BUTTON_VOLDOWN, BUTTON_SELECT }, { ACTION_WPS_ID3SCREEN, BUTTON_SELECT|BUTTON_REPEATAB, BUTTON_SELECT },
{ ACTION_WPS_CONTEXT, BUTTON_VOLDOWN|BUTTON_REL, BUTTON_VOLDOWN }, { ACTION_WPS_CONTEXT, BUTTON_REPEATAB|BUTTON_REL, BUTTON_REPEATAB },
{ ACTION_WPS_QUICKSCREEN, BUTTON_VOLDOWN|BUTTON_REPEAT, BUTTON_VOLDOWN }, { ACTION_WPS_QUICKSCREEN, BUTTON_REPEATAB|BUTTON_REPEAT, BUTTON_REPEATAB },
LAST_ITEM_IN_LIST LAST_ITEM_IN_LIST
}; /* button_context_wps */ }; /* button_context_wps */
@ -82,11 +88,11 @@ static const struct button_mapping button_context_settings[] = {
{ ACTION_STD_CANCEL, BUTTON_MENU, BUTTON_NONE }, { ACTION_STD_CANCEL, BUTTON_MENU, BUTTON_NONE },
{ ACTION_SETTINGS_RESET, BUTTON_SELECT, BUTTON_NONE }, { ACTION_SETTINGS_RESET, BUTTON_SELECT, BUTTON_NONE },
{ ACTION_SETTINGS_INC, BUTTON_VOLUP, BUTTON_NONE }, { ACTION_SETTINGS_INC, BUTTON_PLAYPAUSE, BUTTON_NONE },
{ ACTION_SETTINGS_INCREPEAT,BUTTON_VOLUP|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_SETTINGS_INCREPEAT,BUTTON_PLAYPAUSE|BUTTON_REPEAT, BUTTON_NONE },
{ ACTION_SETTINGS_DEC, BUTTON_VOLDOWN, BUTTON_NONE }, { ACTION_SETTINGS_DEC, BUTTON_REPEATAB, BUTTON_NONE },
{ ACTION_SETTINGS_DECREPEAT,BUTTON_VOLDOWN|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_SETTINGS_DECREPEAT,BUTTON_REPEATAB|BUTTON_REPEAT, BUTTON_NONE },
{ ACTION_STD_PREV, BUTTON_LEFT, BUTTON_NONE }, { ACTION_STD_PREV, BUTTON_LEFT, BUTTON_NONE },
{ ACTION_STD_PREVREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_STD_PREVREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
@ -132,7 +138,7 @@ static const struct button_mapping button_context_listtree_scroll_without_combo[
}; /* button_context_listtree_scroll_without_combo */ }; /* button_context_listtree_scroll_without_combo */
static const struct button_mapping button_context_listtree_scroll_with_combo[] = { static const struct button_mapping button_context_listtree_scroll_with_combo[] = {
{ ACTION_TREE_ROOT_INIT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, // { ACTION_TREE_ROOT_INIT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
// { ACTION_TREE_PGLEFT, BUTTON_REC|BUTTON_LEFT, BUTTON_REC }, // { ACTION_TREE_PGLEFT, BUTTON_REC|BUTTON_LEFT, BUTTON_REC },
// { ACTION_TREE_PGLEFT, BUTTON_REC|BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, // { ACTION_TREE_PGLEFT, BUTTON_REC|BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
@ -153,11 +159,11 @@ static const struct button_mapping button_context_quickscreen[] = {
{ ACTION_NONE, BUTTON_LEFT, BUTTON_NONE }, { ACTION_NONE, BUTTON_LEFT, BUTTON_NONE },
{ ACTION_STD_CANCEL, BUTTON_MENU|BUTTON_REL, BUTTON_NONE }, { ACTION_STD_CANCEL, BUTTON_MENU|BUTTON_REL, BUTTON_NONE },
{ ACTION_QS_DOWNINV, BUTTON_VOLUP|BUTTON_REL, BUTTON_NONE }, { ACTION_QS_DOWNINV, BUTTON_PLAYPAUSE|BUTTON_REL, BUTTON_NONE },
{ ACTION_QS_DOWNINV, BUTTON_VOLUP|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_QS_DOWNINV, BUTTON_PLAYPAUSE|BUTTON_REPEAT, BUTTON_NONE },
{ ACTION_QS_DOWN, BUTTON_VOLDOWN|BUTTON_REL, BUTTON_NONE }, { ACTION_QS_DOWN, BUTTON_REPEATAB|BUTTON_REL, BUTTON_NONE },
{ ACTION_QS_DOWN, BUTTON_VOLDOWN|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_QS_DOWN, BUTTON_REPEATAB|BUTTON_REPEAT, BUTTON_NONE },
{ ACTION_QS_LEFT, BUTTON_LEFT|BUTTON_REL, BUTTON_NONE }, { ACTION_QS_LEFT, BUTTON_LEFT|BUTTON_REL, BUTTON_NONE },
{ ACTION_QS_LEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_QS_LEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
@ -181,11 +187,11 @@ static const struct button_mapping button_context_settings_right_is_inc[] = {
}; /* button_context_settings_right_is_inc */ }; /* button_context_settings_right_is_inc */
static const struct button_mapping button_context_pitchscreen[] = { static const struct button_mapping button_context_pitchscreen[] = {
{ ACTION_PS_INC_SMALL, BUTTON_VOLUP, BUTTON_NONE }, { ACTION_PS_INC_SMALL, BUTTON_PLAYPAUSE, BUTTON_NONE },
{ ACTION_PS_INC_BIG, BUTTON_VOLUP|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_PS_INC_BIG, BUTTON_PLAYPAUSE|BUTTON_REPEAT, BUTTON_NONE },
{ ACTION_PS_DEC_SMALL, BUTTON_VOLDOWN, BUTTON_NONE }, { ACTION_PS_DEC_SMALL, BUTTON_REPEATAB, BUTTON_NONE },
{ ACTION_PS_DEC_BIG, BUTTON_VOLDOWN|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_PS_DEC_BIG, BUTTON_REPEATAB|BUTTON_REPEAT, BUTTON_NONE },
{ ACTION_PS_NUDGE_LEFT, BUTTON_LEFT, BUTTON_NONE }, { ACTION_PS_NUDGE_LEFT, BUTTON_LEFT, BUTTON_NONE },
{ ACTION_PS_NUDGE_LEFTOFF, BUTTON_LEFT|BUTTON_REL, BUTTON_NONE }, { ACTION_PS_NUDGE_LEFTOFF, BUTTON_LEFT|BUTTON_REL, BUTTON_NONE },
@ -219,13 +225,13 @@ static const struct button_mapping button_context_recscreen[] = {
/** FM Radio Screen **/ /** FM Radio Screen **/
#if CONFIG_TUNER #if CONFIG_TUNER
static const struct button_mapping button_context_radio[] = { static const struct button_mapping button_context_radio[] = {
{ ACTION_NONE, BUTTON_VOLUP, BUTTON_NONE }, { ACTION_NONE, BUTTON_PLAYPAUSE, BUTTON_NONE },
{ ACTION_FM_MENU, BUTTON_VOLDOWN, BUTTON_NONE }, { ACTION_FM_MENU, BUTTON_REPEATAB, BUTTON_NONE },
{ ACTION_FM_PRESET, BUTTON_SELECT, BUTTON_NONE }, { ACTION_FM_PRESET, BUTTON_SELECT, BUTTON_NONE },
{ ACTION_FM_STOP, BUTTON_VOLUP|BUTTON_REPEAT, BUTTON_VOLUP }, { ACTION_FM_STOP, BUTTON_PLAYPAUSE|BUTTON_REPEAT, BUTTON_PLAYPAUSE },
{ ACTION_FM_MODE, BUTTON_REC, BUTTON_NONE }, { ACTION_FM_MODE, BUTTON_REC, BUTTON_NONE },
{ ACTION_FM_EXIT, BUTTON_MENU|BUTTON_REL, BUTTON_MENU }, { ACTION_FM_EXIT, BUTTON_MENU|BUTTON_REL, BUTTON_MENU },
{ ACTION_FM_PLAY, BUTTON_VOLUP|BUTTON_REL, BUTTON_VOLUP }, { ACTION_FM_PLAY, BUTTON_PLAYPAUSE|BUTTON_REL, BUTTON_PLAYPAUSE },
{ ACTION_SETTINGS_INC, BUTTON_VOL_UP, BUTTON_NONE }, { ACTION_SETTINGS_INC, BUTTON_VOL_UP, BUTTON_NONE },
{ ACTION_SETTINGS_INCREPEAT,BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_SETTINGS_INCREPEAT,BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
{ ACTION_SETTINGS_DEC, BUTTON_VOL_DOWN, BUTTON_NONE }, { ACTION_SETTINGS_DEC, BUTTON_VOL_DOWN, BUTTON_NONE },
@ -246,10 +252,10 @@ static const struct button_mapping button_context_keyboard[] = {
// { ACTION_KBD_CURSOR_RIGHT, BUTTON_REC|BUTTON_RIGHT, BUTTON_NONE }, // { ACTION_KBD_CURSOR_RIGHT, BUTTON_REC|BUTTON_RIGHT, BUTTON_NONE },
// { ACTION_KBD_CURSOR_RIGHT, BUTTON_REC|BUTTON_RIGHT|BUTTON_REPEAT,BUTTON_NONE }, // { ACTION_KBD_CURSOR_RIGHT, BUTTON_REC|BUTTON_RIGHT|BUTTON_REPEAT,BUTTON_NONE },
{ ACTION_KBD_UP, BUTTON_VOLUP, BUTTON_NONE }, { ACTION_KBD_UP, BUTTON_PLAYPAUSE, BUTTON_NONE },
{ ACTION_KBD_UP, BUTTON_VOLUP|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_KBD_UP, BUTTON_PLAYPAUSE|BUTTON_REPEAT, BUTTON_NONE },
{ ACTION_KBD_DOWN, BUTTON_VOLDOWN, BUTTON_NONE }, { ACTION_KBD_DOWN, BUTTON_REPEATAB, BUTTON_NONE },
{ ACTION_KBD_DOWN, BUTTON_VOLDOWN|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_KBD_DOWN, BUTTON_REPEATAB|BUTTON_REPEAT, BUTTON_NONE },
// { ACTION_KBD_BACKSPACE, BUTTON_REC|BUTTON_VOLDOWN, BUTTON_NONE }, // { ACTION_KBD_BACKSPACE, BUTTON_REC|BUTTON_VOLDOWN, BUTTON_NONE },
// { ACTION_KBD_BACKSPACE, BUTTON_REC|BUTTON_VOLDOWN|BUTTON_REPEAT,BUTTON_NONE }, // { ACTION_KBD_BACKSPACE, BUTTON_REC|BUTTON_VOLDOWN|BUTTON_REPEAT,BUTTON_NONE },

View file

@ -38,12 +38,12 @@
#define HAVE_LCD_INVERT #define HAVE_LCD_INVERT
/* define this if you have access to the quickscreen */ /* define this if you have access to the quickscreen */
#define HAVE_QUICKSCREEN //#define HAVE_QUICKSCREEN
/* define this if you have access to the pitchscreen */ /* define this if you have access to the pitchscreen */
#define HAVE_PITCHSCREEN //#define HAVE_PITCHSCREEN
/* define this if you would like tagcache to build on this target */ /* define this if you would like tagcache to build on this target */
#define HAVE_TAGCACHE //#define HAVE_TAGCACHE
/* define this if you have a flash memory storage */ /* define this if you have a flash memory storage */
#define HAVE_FLASH_STORAGE #define HAVE_FLASH_STORAGE

View file

@ -30,17 +30,20 @@ void button_init_device(void)
GPIOA_DIR |= ((1<<6) | (1<<5) | (1<<4)); /* A4-A6 row outputs */ GPIOA_DIR |= ((1<<6) | (1<<5) | (1<<4)); /* A4-A6 row outputs */
} }
/* short delay is needed between raising a colum pin, and reading the row pin. values is arbitraty */
static inline void btn_delay(void) { int i = 5; while(i--) ; }
int button_read_device(void) int button_read_device(void)
{ {
int result = BUTTON_NONE; int result = BUTTON_NONE;
/* direct GPIO connections */ /* direct GPIO connections */
if (GPIOA_PIN(3)) if (GPIOA_PIN(3))
result |= BUTTON_MENU; result |= BUTTON_MENU;
/* This is a keypad using A4-A6 as columns and A0-A2 as rows */ /* This is a keypad using A4-A6 as columns and A0-A2 as rows */
GPIOA_PIN(4) = (1<<4); GPIOA_PIN(4) = (1<<4);
btn_delay();
/* A4A0 is unused */ /* A4A0 is unused */
if (GPIOA_PIN(1)) if (GPIOA_PIN(1))
@ -52,7 +55,8 @@ int button_read_device(void)
GPIOA_PIN(4) = 0x00; GPIOA_PIN(4) = 0x00;
GPIOA_PIN(5) = (1<<5); GPIOA_PIN(5) = (1<<5);
btn_delay();
if (GPIOA_PIN(0)) if (GPIOA_PIN(0))
result |= BUTTON_LEFT; result |= BUTTON_LEFT;
@ -66,7 +70,8 @@ int button_read_device(void)
GPIOA_PIN(6) = (1<<6); GPIOA_PIN(6) = (1<<6);
btn_delay();
if (GPIOA_PIN(0)) if (GPIOA_PIN(0))
result |= BUTTON_REPEATAB; result |= BUTTON_REPEATAB;
@ -75,6 +80,7 @@ int button_read_device(void)
if (GPIOA_PIN(2)) if (GPIOA_PIN(2))
result |= BUTTON_HOLD; result |= BUTTON_HOLD;
GPIOA_PIN(6) = 0x00; GPIOA_PIN(6) = 0x00;
return result; return result;

View file

@ -1020,6 +1020,35 @@ void button_event(int key, bool pressed)
case SDLK_p: case SDLK_p:
new_btn = BUTTON_POWER; new_btn = BUTTON_POWER;
break; break;
#elif CONFIG_KEYPAD == SANSA_M200_PAD
case SDLK_KP4:
case SDLK_LEFT:
new_btn = BUTTON_LEFT;
break;
case SDLK_KP6:
case SDLK_RIGHT:
new_btn = BUTTON_RIGHT;
break;
case SDLK_KP8:
case SDLK_UP:
new_btn = BUTTON_PLAYPAUSE;
break;
case SDLK_KP2:
case SDLK_DOWN:
new_btn = BUTTON_REPEATAB;
break;
case SDLK_PLUS:
new_btn = BUTTON_MENU;
break;
case SDLK_KP5:
new_btn = BUTTON_SELECT;
break;
case SDLK_KP7:
new_btn = BUTTON_VOLDOWN;
break;
case SDLK_KP9:
new_btn = BUTTON_VOLUP;
break;
#else #else
#error No keymap defined! #error No keymap defined!
#endif /* CONFIG_KEYPAD */ #endif /* CONFIG_KEYPAD */