Index: tools/configure =================================================================== --- tools/configure (revision 25707) +++ tools/configure (arbetskopia) @@ -907,9 +907,10 @@ 3) Recorder v2 13) iFP-790 23) 3G 4) Ondio SP 14) H10 20Gb 24) 4G Grayscale 5) Ondio FM 15) H10 5/6Gb 25) Mini 1G - 6) AV300 26) Mini 2G - ==Toshiba== 27) 1G, 2G - ==Cowon/iAudio== 40) Gigabeat F/X 28) Nano 2G + 6) AV300 16) E10 26) Mini 2G + 27) 1G, 2G + ==Toshiba== 28) Nano 2G + ==Cowon/iAudio== 40) Gigabeat F/X 30) X5/X5V/X5L 41) Gigabeat S 31) M5/M5L ==SanDisk== 32) 7 ==Olympus= 50) Sansa e200 @@ -1290,6 +1291,28 @@ t_model="h10" ;; + 16|irivere10) + target_id=101 + modelname="irivere10" + target="-DIRIVER_E10" + memory=32 # always + arm940tcc + tool="$rootdir/tools/scramble -ifpcode -model=e10" + bmp2rb_mono="$rootdir/tools/bmp2rb -f 0" + bmp2rb_native="$rootdir/tools/bmp2rb -f 5" + output="E10.HEX" + appextra="recorder:gui" + ## Must not be defined at all. Makefile has ENABLEDPLUGINS if defined here. plugins="no" + swcodec="yes" + # toolset is the tools within the tools directory that we build for + # this particular target. + toolset="$scramblebitmaptools" + # architecture, manufacturer and model for the target-tree build + t_cpu="arm" + t_manufacturer="s5l8700" + t_model="irivere10" + ;; + 20|ipodcolor) target_id=13 modelname="ipodcolor" Index: apps/SOURCES =================================================================== --- apps/SOURCES (revision 25707) +++ apps/SOURCES (arbetskopia) @@ -276,4 +276,6 @@ keymaps/keymap-mini2440.c #elif CONFIG_KEYPAD == PBELL_VIBE500_PAD keymaps/keymap-vibe500.c +#elif CONFIG_KEYPAD == IRIVER_E10_PAD +keymaps/keymap-irivere10.c #endif Index: apps/keymaps/keymap-irivere10.c =================================================================== --- apps/keymaps/keymap-irivere10.c (revision 0) +++ apps/keymaps/keymap-irivere10.c (revision 0) @@ -0,0 +1,368 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id: keymap-gigabeat.c 25433 2010-04-02 01:24:24Z Blue_Dude $ + * + * Copyright (C) 2006 Jonathan Gordon + * Copyright (C) 2010 Olle Bergkvist + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ + +/* IRIVER E10 */ + +/* Was: Button Code Definitions for the toshiba gigabeat target */ +#include +#include +#include + +#include "config.h" +#include "action.h" +#include "button.h" +#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) +CONTEXT_CUSTOM|CONTEXT_SETTINGS = the direction keys for the eq/col picker screens + i.e where up/down is inc/dec + CONTEXT_SETTINGS = up/down is prev/next, l/r is inc/dec + +*/ + + +static const struct button_mapping button_context_standard[] = { + { ACTION_STD_PREV, BUTTON_UP, BUTTON_NONE }, + { ACTION_STD_PREVREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_STD_NEXT, BUTTON_DOWN, BUTTON_NONE }, + { ACTION_STD_NEXTREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, + + { ACTION_STD_CANCEL, BUTTON_LEFT, BUTTON_NONE }, + { ACTION_STD_CANCEL, BUTTON_POWER, BUTTON_NONE }, + + { ACTION_STD_CONTEXT, BUTTON_RIGHT|BUTTON_REPEAT,BUTTON_RIGHT }, + + { ACTION_STD_QUICKSCREEN, BUTTON_EXTRA|BUTTON_REPEAT, BUTTON_EXTRA }, + { ACTION_STD_MENU, BUTTON_EXTRA|BUTTON_REL, BUTTON_EXTRA }, + + { ACTION_STD_OK, BUTTON_RIGHT, BUTTON_NONE }, + + LAST_ITEM_IN_LIST +}; /* button_context_standard */ + + +static const struct button_mapping button_context_wps[] = { + { ACTION_WPS_PLAY, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT }, + { ACTION_WPS_STOP, BUTTON_POWER|BUTTON_REL, BUTTON_POWER }, + + { ACTION_WPS_SKIPNEXT, BUTTON_DOWN|BUTTON_REL, BUTTON_DOWN }, + { ACTION_WPS_SKIPPREV, BUTTON_UP|BUTTON_REL, BUTTON_UP }, + + { ACTION_WPS_SEEKBACK, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_WPS_SEEKFWD, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_WPS_STOPSEEK, BUTTON_UP|BUTTON_REL, BUTTON_UP|BUTTON_REPEAT }, + { ACTION_WPS_STOPSEEK, BUTTON_DOWN|BUTTON_REL, BUTTON_DOWN|BUTTON_REPEAT }, + + { ACTION_WPS_ABSETB_NEXTDIR,BUTTON_EXTRA|BUTTON_DOWN, BUTTON_NONE }, + { ACTION_WPS_ABSETA_PREVDIR,BUTTON_EXTRA|BUTTON_UP, BUTTON_NONE }, + { ACTION_WPS_ABRESET, BUTTON_EXTRA|BUTTON_RIGHT, BUTTON_NONE }, + + { ACTION_WPS_VOLDOWN, BUTTON_VOL_DOWN, BUTTON_NONE }, + { ACTION_WPS_VOLDOWN, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_WPS_VOLUP, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_WPS_VOLUP, BUTTON_VOL_UP, BUTTON_NONE }, + + { ACTION_WPS_PITCHSCREEN, BUTTON_EXTRA|BUTTON_VOL_UP, BUTTON_EXTRA }, + { ACTION_WPS_VIEW_PLAYLIST, BUTTON_EXTRA|BUTTON_VOL_DOWN, BUTTON_EXTRA }, + + { ACTION_WPS_QUICKSCREEN, BUTTON_EXTRA|BUTTON_REPEAT, BUTTON_EXTRA }, + { ACTION_WPS_MENU, BUTTON_EXTRA|BUTTON_REL, BUTTON_EXTRA }, + { ACTION_WPS_CONTEXT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_RIGHT }, + +// { ACTION_WPS_HOTKEY, BUTTON_EXTRA|BUTTON_REL, BUTTON_EXTRA }, + { ACTION_WPS_BROWSE, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT }, + + LAST_ITEM_IN_LIST +}; /* button_context_wps */ + +static const struct button_mapping button_context_list[] = { + { ACTION_LISTTREE_PGUP, BUTTON_EXTRA|BUTTON_UP, BUTTON_EXTRA }, + { ACTION_LISTTREE_PGUP, BUTTON_UP|BUTTON_REL, BUTTON_EXTRA|BUTTON_UP }, + { ACTION_LISTTREE_PGUP, BUTTON_EXTRA|BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, + + { ACTION_LISTTREE_PGDOWN, BUTTON_EXTRA|BUTTON_DOWN, BUTTON_EXTRA }, + { ACTION_LISTTREE_PGDOWN, BUTTON_DOWN|BUTTON_REL, BUTTON_EXTRA|BUTTON_DOWN }, + { ACTION_LISTTREE_PGDOWN, BUTTON_EXTRA|BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, +#ifdef HAVE_VOLUME_IN_LIST + { ACTION_LIST_VOLUP, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_LIST_VOLUP, BUTTON_VOL_UP, BUTTON_NONE }, + { ACTION_LIST_VOLDOWN, BUTTON_VOL_DOWN, BUTTON_NONE }, + { ACTION_LIST_VOLDOWN, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE }, +#endif + + LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) +}; /* button_context_list */ + +static const struct button_mapping button_context_tree[] = { + { ACTION_TREE_WPS, BUTTON_EXTRA|BUTTON_REL, BUTTON_EXTRA }, + { ACTION_TREE_STOP, BUTTON_POWER, BUTTON_NONE }, + { ACTION_TREE_STOP, BUTTON_POWER|BUTTON_REL, BUTTON_POWER }, + { ACTION_TREE_STOP, BUTTON_POWER|BUTTON_REPEAT, BUTTON_NONE }, +// { ACTION_TREE_HOTKEY, BUTTON_EXTRA, BUTTON_NONE }, + + LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST) +}; /* button_context_tree */ + +static const struct button_mapping button_context_listtree_scroll_with_combo[] = { + { ACTION_NONE, BUTTON_EXTRA, BUTTON_NONE }, + + { ACTION_TREE_PGLEFT, BUTTON_EXTRA|BUTTON_LEFT, BUTTON_EXTRA }, + { ACTION_TREE_PGLEFT, BUTTON_LEFT|BUTTON_REL, BUTTON_EXTRA|BUTTON_LEFT }, + { ACTION_TREE_PGLEFT, BUTTON_EXTRA|BUTTON_LEFT, BUTTON_LEFT|BUTTON_REL }, + { ACTION_TREE_PGLEFT, BUTTON_EXTRA|BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, + + { ACTION_TREE_ROOT_INIT, BUTTON_EXTRA|BUTTON_LEFT|BUTTON_REPEAT, BUTTON_EXTRA|BUTTON_LEFT }, + + { ACTION_TREE_PGRIGHT, BUTTON_EXTRA|BUTTON_RIGHT, BUTTON_EXTRA }, + { ACTION_TREE_PGRIGHT, BUTTON_RIGHT|BUTTON_REL, BUTTON_EXTRA|BUTTON_RIGHT }, + { ACTION_TREE_PGRIGHT, BUTTON_EXTRA|BUTTON_RIGHT, BUTTON_RIGHT|BUTTON_REL }, + { ACTION_TREE_PGRIGHT, BUTTON_EXTRA|BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, + + LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_TREE), +}; /* button_context_listtree_scroll_with_combo */ + +static const 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_ROOT_INIT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_LEFT }, + + { ACTION_TREE_PGLEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, + { 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_NONE }, + { ACTION_TREE_PGRIGHT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT|BUTTON_REPEAT }, + LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_TREE), +}; /* button_context_listtree_scroll_without_combo */ + +static const 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_PREVREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_STD_NEXT, BUTTON_RIGHT, BUTTON_NONE }, + { ACTION_STD_NEXTREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_SETTINGS_RESET, BUTTON_EXTRA, BUTTON_NONE }, + + LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) +}; /* button_context_settings */ + +static const struct button_mapping button_context_settings_right_is_inc[] = { + { ACTION_SETTINGS_INC, BUTTON_RIGHT, BUTTON_NONE }, + { ACTION_SETTINGS_INCREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_SETTINGS_DEC, BUTTON_LEFT, BUTTON_NONE }, + { ACTION_SETTINGS_DECREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_STD_PREV, BUTTON_UP, BUTTON_NONE }, + { ACTION_STD_PREVREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_STD_NEXT, BUTTON_DOWN, BUTTON_NONE }, + { ACTION_STD_NEXTREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_SETTINGS_RESET, BUTTON_EXTRA, BUTTON_NONE }, + + LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) +}; /* button_context_settingsgraphical */ + +static const struct button_mapping button_context_yesno[] = { + { ACTION_YESNO_ACCEPT, BUTTON_RIGHT, BUTTON_NONE }, + LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) +}; /* button_context_settings_yesno */ + +static const struct button_mapping button_context_colorchooser[] = { + { ACTION_STD_OK, BUTTON_EXTRA|BUTTON_REL, BUTTON_NONE }, + LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_SETTINGS), +}; /* button_context_colorchooser */ + +static const struct button_mapping button_context_eq[] = { + { ACTION_STD_OK, BUTTON_EXTRA|BUTTON_REL, BUTTON_NONE }, + LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_SETTINGS), +}; /* button_context_eq */ + +/** Bookmark Screen **/ +static const struct button_mapping button_context_bmark[] = { + { ACTION_BMS_DELETE, BUTTON_EXTRA, BUTTON_NONE }, + + LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST), +}; /* button_context_bmark */ + +static const struct button_mapping button_context_time[] = { + { ACTION_STD_CANCEL, BUTTON_POWER, BUTTON_NONE }, + { ACTION_STD_OK, BUTTON_EXTRA, BUTTON_NONE }, + LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_SETTINGS), +}; /* button_context_time */ + +static const struct button_mapping button_context_quickscreen[] = { + { ACTION_QS_TOP, BUTTON_UP, BUTTON_NONE }, + { ACTION_QS_TOP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_QS_DOWN, BUTTON_DOWN, BUTTON_NONE }, + { ACTION_QS_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_QS_LEFT, BUTTON_LEFT, BUTTON_NONE }, + { ACTION_QS_LEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_QS_RIGHT, BUTTON_RIGHT, BUTTON_NONE }, + { ACTION_QS_RIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_STD_CANCEL, BUTTON_POWER, BUTTON_NONE }, + + LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) +}; /* button_context_quickscreen */ + +static const struct button_mapping button_context_pitchscreen[] = { + { ACTION_PS_INC_SMALL, BUTTON_UP, BUTTON_NONE }, + { ACTION_PS_INC_BIG, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_PS_DEC_SMALL, BUTTON_DOWN, BUTTON_NONE }, + { ACTION_PS_DEC_BIG, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_PS_NUDGE_LEFT, BUTTON_LEFT, BUTTON_NONE }, + { ACTION_PS_NUDGE_LEFTOFF, BUTTON_LEFT|BUTTON_REL, BUTTON_NONE }, + { ACTION_PS_NUDGE_RIGHT, BUTTON_RIGHT, BUTTON_NONE }, + { ACTION_PS_NUDGE_RIGHTOFF, BUTTON_RIGHT|BUTTON_REL, BUTTON_NONE }, + { ACTION_PS_TOGGLE_MODE, BUTTON_EXTRA|BUTTON_REL, BUTTON_EXTRA }, + { ACTION_PS_RESET, BUTTON_EXTRA|BUTTON_REPEAT, BUTTON_EXTRA }, + { ACTION_PS_EXIT, BUTTON_POWER, BUTTON_NONE }, + { ACTION_PS_SLOWER, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_PS_FASTER, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, + + LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) +}; /* button_context_pitchcreen */ + +static const struct button_mapping button_context_keyboard[] = { + { ACTION_KBD_LEFT, BUTTON_LEFT, BUTTON_NONE }, + { ACTION_KBD_LEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_KBD_RIGHT, BUTTON_RIGHT, BUTTON_NONE }, + { ACTION_KBD_RIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_KBD_CURSOR_LEFT, BUTTON_EXTRA|BUTTON_LEFT, BUTTON_EXTRA }, + { ACTION_KBD_CURSOR_LEFT, BUTTON_EXTRA|BUTTON_LEFT|BUTTON_REPEAT, BUTTON_EXTRA }, + { ACTION_KBD_CURSOR_RIGHT, BUTTON_EXTRA|BUTTON_RIGHT, BUTTON_EXTRA }, + { ACTION_KBD_CURSOR_RIGHT, BUTTON_EXTRA|BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_EXTRA }, + + { ACTION_KBD_SELECT, BUTTON_EXTRA|BUTTON_REL, BUTTON_EXTRA }, + { ACTION_KBD_PAGE_FLIP, BUTTON_EXTRA|BUTTON_POWER, BUTTON_EXTRA }, + + { ACTION_KBD_DONE, BUTTON_EXTRA|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_KBD_ABORT, BUTTON_POWER|BUTTON_REPEAT, BUTTON_NONE }, + + { ACTION_KBD_BACKSPACE, BUTTON_POWER|BUTTON_REL, BUTTON_POWER }, +// { ACTION_KBD_BACKSPACE, BUTTON_POWER|BUTTON_REPEAT, BUTTON_NONE }, + + { ACTION_KBD_UP, BUTTON_UP, BUTTON_NONE }, + { ACTION_KBD_UP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_KBD_DOWN, BUTTON_DOWN, BUTTON_NONE }, + { ACTION_KBD_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_KBD_MORSE_INPUT, BUTTON_EXTRA|BUTTON_UP, BUTTON_NONE }, + { ACTION_KBD_MORSE_SELECT, BUTTON_EXTRA|BUTTON_DOWN, BUTTON_NONE }, + + LAST_ITEM_IN_LIST +}; /* button_context_keyboard */ + +/***************************************************************************** + * Remote control mappings + *****************************************************************************/ + +static const struct button_mapping remote_button_context_standard[] = { + + LAST_ITEM_IN_LIST +}; + +static const struct button_mapping remote_button_context_wps[] = { + + LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) +}; + +static const struct button_mapping remote_button_context_tree[] = { + + LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) +}; + +static const struct button_mapping* get_context_mapping_remote( int context ) +{ + context ^= CONTEXT_REMOTE; + + switch (context) + { + case CONTEXT_WPS: + return remote_button_context_wps; + case CONTEXT_MAINMENU: + case CONTEXT_TREE: + return remote_button_context_tree; + } + return remote_button_context_standard; +} + +const struct button_mapping* get_context_mapping(int context) +{ + if (context&CONTEXT_REMOTE) + return get_context_mapping_remote(context); + + switch (context) + { + case CONTEXT_STD: + return button_context_standard; + case CONTEXT_WPS: + return button_context_wps; + + case CONTEXT_LIST: + return button_context_list; + case CONTEXT_MAINMENU: + 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|CONTEXT_TREE: + return button_context_tree; + + case CONTEXT_SETTINGS: + return button_context_settings; + case CONTEXT_CUSTOM|CONTEXT_SETTINGS: + return button_context_settings_right_is_inc; + + case CONTEXT_SETTINGS_COLOURCHOOSER: + return button_context_colorchooser; + case CONTEXT_SETTINGS_EQ: + return button_context_eq; + + case CONTEXT_SETTINGS_TIME: + return button_context_time; + + case CONTEXT_YESNOSCREEN: + return button_context_yesno; + case CONTEXT_BOOKMARKSCREEN: + return button_context_bmark; + case CONTEXT_QUICKSCREEN: + return button_context_quickscreen; + case CONTEXT_PITCHSCREEN: + return button_context_pitchscreen; + case CONTEXT_KEYBOARD: + case CONTEXT_MORSE_INPUT: + return button_context_keyboard; + } + return button_context_standard; +} Index: firmware/export/s5l8700.h =================================================================== --- firmware/export/s5l8700.h (revision 25707) +++ firmware/export/s5l8700.h (arbetskopia) @@ -649,9 +649,9 @@ #define LCDDITHMODE (*(REG32_PTR_T)(0x39200064)) /* Dithering mode register. */ /* 28. ATA CONTROLLER */ -#define ATA_CONTROL (*(REG32_PTR_T)(0x38E00000)) /* Enable and clock down status */ -#define ATA_STATUS (*(REG32_PTR_T)(0x38E00004)) /* Status */ -#define ATA_COMMAND (*(REG32_PTR_T)(0x38E00008)) /* Command */ +#define ATA_S5L8700_CONTROL (*(REG32_PTR_T)(0x38E00000)) /* Enable and clock down status */ +#define ATA_S5L8700_STATUS (*(REG32_PTR_T)(0x38E00004)) /* Status */ +#define ATA_S5L8700_COMMAND (*(REG32_PTR_T)(0x38E00008)) /* Command */ #define ATA_SWRST (*(REG32_PTR_T)(0x38E0000C)) /* Software reset */ #define ATA_IRQ (*(REG32_PTR_T)(0x38E00010)) /* Interrupt sources */ #define ATA_IRQ_MASK (*(REG32_PTR_T)(0x38E00014)) /* Interrupt mask */ @@ -666,6 +666,7 @@ #define ATA_SBUF_SIZE (*(REG32_PTR_T)(0x38E00048)) /* Size of source buffer1 */ #define ATA_CADR_TBUF (*(REG32_PTR_T)(0x38E0004C)) /* Current write address of track buffer */ #define ATA_CADR_SBUF (*(REG32_PTR_T)(0x38E00050)) /* Current read address of source buffer */ + #define ATA_PIO_DTR (*(REG32_PTR_T)(0x38E00054)) /* PIO device data register */ #define ATA_PIO_FED (*(REG32_PTR_T)(0x38E00058)) /* PIO device Feature/Error register */ #define ATA_PIO_SCR (*(REG32_PTR_T)(0x38E0005C)) /* PIO sector count register */ @@ -677,9 +678,51 @@ #define ATA_PIO_DAD (*(REG32_PTR_T)(0x38E00074)) /* PIO control/alternate status register */ #define ATA_PIO_READY (*(REG32_PTR_T)(0x38E00078)) /* PIO data read/write ready */ #define ATA_PIO_RDATA (*(REG32_PTR_T)(0x38E0007C)) /* PIO read data from device register */ + #define BUS_FIFO_STATUS (*(REG32_PTR_T)(0x38E00080)) /* Reserved */ #define ATA_FIFO_STATUS (*(REG32_PTR_T)(0x38E00084)) /* Reserved */ +/* FIXME: drivers/ata.c uses a few names for different registers than + * the info above and the datasheet did. ata.c needs to win. + */ +#define ATA_COMMAND ATA_PIO_CSD +#define ATA_CONTROL ATA_PIO_DAD +#define ATA_DATA ATA_PIO_DTR +#define ATA_SELECT ATA_PIO_DVR +#define ATA_NSECTOR ATA_PIO_SCR +#define ATA_SECTOR ATA_PIO_LLR +#define ATA_LCYL ATA_PIO_LMR +#define ATA_HCYL ATA_PIO_LHR +#define ATA_ERROR ATA_PIO_FED + +#define STATUS_BSY 0x80 +#define STATUS_RDY 0x40 +#define STATUS_DF 0x20 +#define STATUS_DRQ 0x08 +#define STATUS_ERR 0x01 + +#define ERROR_ABRT 0x04 +#define ERROR_IDNF 0x10 + +// FIXME: Is this correct? Some ata-target.c leftshifts val to the MSB. +#define SET_REG(reg,val) reg = (val) +#define SET_16BITREG(reg,val) reg = (val) + +#define WRITE_PATTERN1 0xa5 +#define WRITE_PATTERN2 0x5a +#define WRITE_PATTERN3 0xaa +#define WRITE_PATTERN4 0x55 + +#define READ_PATTERN1 0xa5 +#define READ_PATTERN2 0x5a +#define READ_PATTERN3 0xaa +#define READ_PATTERN4 0x55 + +#define READ_PATTERN1_MASK 0xff +#define READ_PATTERN2_MASK 0xff +#define READ_PATTERN3_MASK 0xff +#define READ_PATTERN4_MASK 0xff + /* 29. CHIP ID */ #define REG_ONE (*(REG32_PTR_T)(0x3D100000)) /* Receive the first 32 bits from a fuse box */ #define REG_TWO (*(REG32_PTR_T)(0x3D100004)) /* Receive the other 8 bits from a fuse box */ Index: firmware/export/cs42l51.h =================================================================== --- firmware/export/cs42l51.h (revision 0) +++ firmware/export/cs42l51.h (revision 0) @@ -0,0 +1,15 @@ +// FIXME +#define VOLUME_MIN (-666) +#define VOLUME_MAX 0 + +// FIXME - this is probably wrong +/* Sampling frequency (PLL mode) */ +#define CS_PLL_8000HZ (7 << 5) +#define CS_PLL_11025HZ (2 << 5) +#define CS_PLL_16000HZ (6 << 5) +#define CS_PLL_22050HZ (1 << 5) +#define CS_PLL_24000HZ (5 << 5) +#define CS_PLL_32000HZ (4 << 5) +#define CS_PLL_44100HZ (0 << 5) +#define CS_PLL_48000HZ (3 << 5) + Index: firmware/export/audiohw.h =================================================================== --- firmware/export/audiohw.h (revision 25707) +++ firmware/export/audiohw.h (arbetskopia) @@ -63,6 +63,8 @@ #include "jz4740-codec.h" #elif defined(HAVE_AK4537) #include "ak4537.h" +#elif defined(HAVE_CS42L51) +#include "cs42l51.h" #endif /* convert caps into defines */ Index: firmware/export/config.h =================================================================== --- firmware/export/config.h (revision 25707) +++ firmware/export/config.h (arbetskopia) @@ -117,6 +117,7 @@ #define MINI2440_PAD 41 #define PHILIPS_HDD6330_PAD 42 #define PBELL_VIBE500_PAD 43 +#define IRIVER_E10_PAD 44 /* CONFIG_REMOTE_KEYPAD */ #define H100_REMOTE 1 @@ -199,6 +200,7 @@ #define LCD_MINI2440 37 /* as used by the Mini2440 */ #define LCD_HDD6330 38 /* as used by the Philips HDD6330 */ #define LCD_VIBE500 39 /* as used by the Packard Bell Vibe 500 */ +#define LCD_E10 40 /* as used by the iriver E10 */ /* LCD_PIXELFORMAT */ #define HORIZONTAL_PACKING 1 @@ -252,7 +254,7 @@ #define RTC_PCF50605 2 /* iPod 3G, 4G & Mini */ #define RTC_PCF50606 3 /* iriver H300 */ #define RTC_S3C2440 4 -#define RTC_E8564 5 /* iriver H10 */ +#define RTC_E8564 5 /* iriver H10 and E10 */ #define RTC_AS3514 6 /* Sandisk Sansa series */ #define RTC_DS1339_DS3231 7 /* h1x0 RTC mod */ #define RTC_IMX31L 8 @@ -324,6 +326,8 @@ #include "config/ipodnano2g.h" #elif defined(IRIVER_IFP7XX) #include "config/iriverifp7xx.h" +#elif defined(IRIVER_E10) +#include "config/irivere10.h" #elif defined(GIGABEAT_F) #include "config/gigabeatfx.h" #elif defined(GIGABEAT_S) Index: firmware/export/config/irivere10.h =================================================================== --- firmware/export/config/irivere10.h (revision 0) +++ firmware/export/config/irivere10.h (revision 0) @@ -0,0 +1,184 @@ +/* + * This config file is for iriver E10. + */ + +#define IRIVER_E10 1 +#define TARGET_TREE /* this target is using the target tree system */ + +/* For Rolo and boot loader */ +#define MODEL_NUMBER 1 +#define MODEL_NAME "iriver E10" + +/* define this if you have recording possibility */ +#define HAVE_RECORDING +#define HAVE_RECORDING_HISTOGRAM + +/* Define bitmask of input sources - recordable bitmask can be defined + explicitly if different */ +#define INPUT_SRC_CAPS (SRC_CAP_MIC|SRC_CAP_FMRADIO) + +/* define the bitmask of hardware sample rates */ +#define HW_SAMPR_CAPS (SAMPR_CAP_88 | SAMPR_CAP_44 | SAMPR_CAP_22 | SAMPR_CAP_11) + +/* define the bitmask of recording sample rates */ +#define REC_SAMPR_CAPS (SAMPR_CAP_88 | SAMPR_CAP_44 | SAMPR_CAP_22 | SAMPR_CAP_11) + +/* define this if you have a bitmap LCD display */ +#define HAVE_LCD_BITMAP + +/* define this if you have a colour LCD */ +#define HAVE_LCD_COLOR + +/* define this if you want album art for this target */ +#define HAVE_ALBUMART + +/* define this to enable bitmap scaling */ +#define HAVE_BMP_SCALING + +/* define this to enable JPEG decoding */ +#define HAVE_JPEG + +/* define this if the LCD can shut down */ +#define HAVE_LCD_SHUTDOWN + +/* LCD stays visible without backlight - simulator hint */ +//#define HAVE_TRANSFLECTIVE_LCD + +/* define this if you have access to the quickscreen */ +#define HAVE_QUICKSCREEN + +/* define this if you have access to the pitchscreen */ +#define HAVE_PITCHSCREEN + +/* define this if you would like tagcache to build on this target */ +#define HAVE_TAGCACHE + +/* define this if the unit uses a scrollwheel for navigation */ + +#define CONFIG_STORAGE STORAGE_ATA + +/* define this if at least one storage driver + needs to do cleanup on shutdown */ +#define HAVE_STORAGE_FLUSH + +/* LCD dimensions */ +#define LCD_WIDTH 128 +#define LCD_HEIGHT 128 +#define LCD_DEPTH 16 /* pseudo 262.144 colors */ +#define LCD_PIXELFORMAT RGB565 /* rgb565 */ + +/* Define this if your LCD can be enabled/disabled */ +//#define HAVE_LCD_ENABLE + +/* Define this if your LCD can be put to sleep. HAVE_LCD_ENABLE + should be defined as well. */ +//#define HAVE_LCD_SLEEP + +#define CONFIG_KEYPAD IRIVER_E10_PAD + +#define AB_REPEAT_ENABLE 1 +//#define ACTION_WPSAB_SINGLE ACTION_WPS_BROWSE + +/* Define this to enable morse code input */ +#define HAVE_MORSE_INPUT + +/* Define this if you do software codec */ +#define CONFIG_CODEC SWCODEC + +/* define this if you have a real-time clock */ +#define CONFIG_RTC RTC_E8564 + +/* Define if the device can wake from an RTC alarm */ +#define HAVE_RTC_ALARM + +#define CONFIG_LCD LCD_E10 + +/* Define the type of audio codec */ +#define HAVE_CS42L51 + +#define HAVE_PCM_DMA_ADDRESS + +/* Define this for LCD backlight available */ +#define HAVE_BACKLIGHT +//#define HAVE_BACKLIGHT_BRIGHTNESS + +/* Define this if you have a software controlled poweroff */ +#define HAVE_SW_POWEROFF + +/* The number of bytes reserved for loadable codecs */ +#define CODEC_SIZE 0x100000 + +/* The number of bytes reserved for loadable plugins */ +#define PLUGIN_BUFFER_SIZE 0x80000 + +#define BATTERY_CAPACITY_DEFAULT 400 /* default battery capacity */ +#define BATTERY_CAPACITY_MIN 400 /* min. capacity selectable */ +#define BATTERY_CAPACITY_MAX 400 /* max. capacity selectable */ +#define BATTERY_CAPACITY_INC 50 /* capacity increment */ +#define BATTERY_TYPES_COUNT 1 /* only one type */ + +/* Hardware controlled charging with monitoring */ +#define CONFIG_CHARGING CHARGING_MONITOR + +/* define this if the unit can be powered or charged via USB */ +#define HAVE_USB_POWER + +/* Define this if your LCD can set contrast */ +//#define HAVE_LCD_CONTRAST + +/* Define iriver tuner */ +#define CONFIG_TUNER SI4700 + +/* The exact type of CPU */ +#define CONFIG_CPU S5L8701 + +/* I2C interface */ +#define CONFIG_I2C I2C_S5L8700 + +#define HAVE_USB_CHARGING_ENABLE + +/* Define this to the CPU frequency */ +#define CPU_FREQ 191692800 + +/* define this if the hardware can be powered off while charging */ +#define HAVE_POWEROFF_WHILE_CHARGING + +/* Offset ( in the firmware file's header ) to the file CRC */ +#define FIRMWARE_OFFSET_FILE_CRC 0 + +/* Offset ( in the firmware file's header ) to the real data */ +#define FIRMWARE_OFFSET_FILE_DATA 8 + +/* Define this if you have adjustable CPU frequency */ +#define HAVE_ADJUSTABLE_CPU_FREQ + +#define BOOTFILE_EXT "BIN" +#define BOOTFILE "E10" BOOTFILE_EXT +#define BOOTDIR "/" + +/* Alternative bootfile extension - this is for encrypted images */ +#define BOOTFILE_EXT2 "HEX" + +/* Define this for FM radio input available */ +#define HAVE_FMRADIO_IN + +/** Port-specific settings **/ + +/* USB defines */ +#define HAVE_USBSTACK +//#define HAVE_USB_HID_MOUSE - broken? +#define CONFIG_USBOTG USBOTG_S3C6400X +#define USB_VENDOR_ID 0x1006 +#define USB_PRODUCT_ID 0x3010 +#define USB_NUM_ENDPOINTS 5 +#define USE_ROCKBOX_USB +#define USB_DEVBSS_ATTR __attribute__((aligned(16))) + +/* Define this if you can switch on/off the accessory power supply */ +//#define HAVE_ACCESSORY_SUPPLY +//#define HAVE_SERIAL + +#define USB_WRITE_BUFFER_SIZE (1024*64) + +/* Define this if a programmable hotkey is mapped */ +//#define HAVE_HOTKEY Index: firmware/export/usb.h =================================================================== --- firmware/export/usb.h (revision 25707) +++ firmware/export/usb.h (arbetskopia) @@ -101,6 +101,9 @@ #elif CONFIG_KEYPAD == PBELL_VIBE500_PAD #define USBPOWER_BUTTON BUTTON_REC #define USBPOWER_BTN_IGNORE BUTTON_POWER +#elif CONFIG_KEYPAD == IRIVER_E10_PAD +#define USBPOWER_BUTTON BUTTON_RIGHT +#define USBPOWER_BTN_IGNORE BUTTON_LEFT #endif #endif /* HAVE_USB_POWER */ Index: firmware/sound.c =================================================================== --- firmware/sound.c (revision 25707) +++ firmware/sound.c (arbetskopia) @@ -586,7 +586,8 @@ && !defined(HAVE_WM8758) && !defined(HAVE_TSC2100) \ && !defined (HAVE_WM8711) && !defined (HAVE_WM8721) \ && !defined (HAVE_WM8731) && !defined (HAVE_WM8978) \ - && !defined(HAVE_AK4537)) || defined(SIMULATOR) + && !defined(HAVE_AK4537)) && !defined (HAVE_CS42L51) \ + || defined(SIMULATOR) int sound_val2phys(int setting, int value) { #if CONFIG_CODEC == MAS3587F Index: firmware/SOURCES =================================================================== --- firmware/SOURCES (revision 25707) +++ firmware/SOURCES (arbetskopia) @@ -1447,11 +1447,26 @@ target/arm/s5l8700/wmcodec-s5l8700.c target/arm/s5l8700/ipodnano2g/audio-nano2g.c target/arm/s5l8700/ipodnano2g/adc-nano2g.c -#endif -#endif -#endif +#endif /* BOOTLOADER */ +#endif /* SIMULATOR */ +#endif /* IPOD_NANO2G */ +#ifdef IRIVER_E10 #ifndef SIMULATOR +target/arm/s5l8700/kernel-s5l8700.c +target/arm/s5l8700/dma-s5l8700.c +#ifndef BOOTLOADER +drivers/audio/cs42l51.c +target/arm/usb-s3c6400x.c +target/arm/s5l8700/debug-s5l8700.c +target/arm/s5l8700/pcm-s5l8700.c +target/arm/s5l8700/wmcodec-s5l8700.c +#endif /* BOOTLOADER */ +#endif /* SIMULATOR */ +#endif /* IRIVER_E10 */ + + +#ifndef SIMULATOR #if CONFIG_CPU == JZ4732 target/mips/ingenic_jz47xx/ata-nand-jz4740.c target/mips/ingenic_jz47xx/ata-sd-jz4740.c Index: firmware/target/arm/s5l8700/pcm-s5l8700.c =================================================================== --- firmware/target/arm/s5l8700/pcm-s5l8700.c (revision 25707) +++ firmware/target/arm/s5l8700/pcm-s5l8700.c (arbetskopia) @@ -395,7 +395,7 @@ const void * pcm_rec_dma_get_peak_buffer(int *count) { - (void)count; + return (void*)count; } #endif /* HAVE_RECORDING */ Index: firmware/target/arm/s5l8700/debug-target.h =================================================================== --- firmware/target/arm/s5l8700/debug-target.h (revision 25707) +++ firmware/target/arm/s5l8700/debug-target.h (arbetskopia) @@ -24,7 +24,11 @@ #include +#ifdef IPOD_NANO2G #define DEBUG_CANCEL BUTTON_MENU +#elif defined(IRIVER_E10) +#define DEBUG_CANCEL BUTTON_EXTRA +#endif bool __dbg_hw_info(void); bool __dbg_ports(void); Index: firmware/target/arm/s5l8700/debug-s5l8700.c =================================================================== --- firmware/target/arm/s5l8700/debug-s5l8700.c (revision 25707) +++ firmware/target/arm/s5l8700/debug-s5l8700.c (arbetskopia) @@ -45,10 +45,10 @@ bool __dbg_hw_info(void) { int line; - int i; -#ifdef IPOD_NANO2G unsigned int state = 0; const unsigned int max_states=2; +#ifdef IPOD_NANO2G + int i; int nand_bank_count; struct storage_info info; const struct nand_device_info_type *nand_devicetype[4]; @@ -139,11 +139,19 @@ lcd_update(); switch(button_get_w_tmo(HZ/20)) { +#ifdef IPOD_NANO2G case BUTTON_SCROLL_BACK: +#elif defined(IRIVER_E10) + case BUTTON_VOL_UP: +#endif if(state!=0) state--; break; +#ifdef IPOD_NANO2G case BUTTON_SCROLL_FWD: +#elif defined(IRIVER_E10) + case BUTTON_VOL_DOWN: +#endif if(state!=max_states-1) { state++; Index: firmware/target/arm/s5l8700/irivere10/button-target.h =================================================================== --- firmware/target/arm/s5l8700/irivere10/button-target.h (revision 0) +++ firmware/target/arm/s5l8700/irivere10/button-target.h (revision 0) @@ -0,0 +1,59 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id: button-target.h 21503 2009-06-24 22:23:45Z mcuelenaere $ + * + * Copyright (C) 2006 by Barry Wardell + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ + +/* Custom written for the E10 */ + +#ifndef _BUTTON_TARGET_H_ +#define _BUTTON_TARGET_H_ + +#include +#include "config.h" + +#define HAS_BUTTON_HOLD + +bool button_hold(void); +void button_init_device(void); +int button_read_device(void); + +/* iriver E10 specific button codes */ + + /* Main unit's buttons */ +#define BUTTON_POWER 0x00000001 + +#define BUTTON_LEFT 0x00000002 +#define BUTTON_RIGHT 0x00000004 +#define BUTTON_UP 0x00000008 +#define BUTTON_DOWN 0x00000010 + +#define BUTTON_EXTRA 0x00000020 + +#define BUTTON_VOL_UP 0x00000040 +#define BUTTON_VOL_DOWN 0x00000080 + +#define BUTTON_MAIN (BUTTON_LEFT | BUTTON_RIGHT | BUTTON_UP | BUTTON_DOWN \ + | BUTTON_VOLUME_UP | BUTTON_VOLUME_DOWN | BUTTON_POWER | BUTTON_EXTRA) + +#define POWEROFF_BUTTON BUTTON_POWER +#define POWEROFF_COUNT 10 + +#define BUTTON_REMOTE 0 + +#endif /* _BUTTON_TARGET_H_ */ Index: firmware/drivers/audio/cs42l51.c =================================================================== --- firmware/drivers/audio/cs42l51.c (revision 0) +++ firmware/drivers/audio/cs42l51.c (revision 0) @@ -0,0 +1,232 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * + * Cirrus Logic CS42L51 (CS42L51C) used by iriver E10 + * + * + * Copyright (c) 2009 Mark Arigo + * Copyright (c) 2010 Olle Bergkvist + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ + +#include "system.h" +#include "audiohw.h" +#include "i2c.h" +#include "logf.h" +#include "pcm_sampr.h" + +// For simplicity. Actually there are 0x21 regs, from 0x01 to 0x21. +#define CS_NUM_REGS 0x22 + +#ifdef IRIVER_E10 +// FIXME Verify that pin #4 AD0 is really GND and that bit #6 is 0 +#define PIN_AD0 0 +#else +#error "Must know the target PCB layout, but this one is unknown" +#endif + +#define CS42L51_CHIP_ADDRESS 0x94 + +#define ISP_AUDIO_ADDRESS CS42L51_CHIP_ADDRESS +#define I2C_AUDIO_ADDRESS (CS42L51_CHIP_ADDRESS | PIN_AD0) + +#define AUDIO_WRITE 0x0 +#define AUDIO_READ 0x1 + +#define ISP_AUDIO_ADDRESS_WRITE (ISP_AUDIO_ADDRESS | AUDIO_WRITE) +#define ISP_AUDIO_ADDRESS_READ (ISP_AUDIO_ADDRESS | AUDIO_READ) + +#define I2C_AUDIO_ADDRESS_WRITE (I2C_AUDIO_ADDRESS | AUDIO_WRITE) +#define I2C_AUDIO_ADDRESS_READ (I2C_AUDIO_ADDRESS | AUDIO_READ) + +/* + * Initialise the I2C. + */ +void audiohw_init(void) +{ + i2c_init(); +} + +const struct sound_settings_info audiohw_settings[] = { + [SOUND_VOLUME] = {"dB", 0, 1,-127, 0, -25}, + [SOUND_BALANCE] = {"%", 0, 1,-100, 100, 0}, + [SOUND_CHANNELS] = {"", 0, 1, 0, 5, 0}, + [SOUND_STEREO_WIDTH] = {"%", 0, 5, 0, 250, 100}, +#if defined(HAVE_RECORDING) + [SOUND_LEFT_GAIN] = {"dB", 1, 1, 0, 31, 23}, + [SOUND_RIGHT_GAIN] = {"dB", 1, 1, 0, 31, 23}, + [SOUND_MIC_GAIN] = {"dB", 1, 1, 0, 1, 0}, +#endif +}; + +static unsigned char cs_regs[CS_NUM_REGS]; + +static void cs_write_reg_hw(int reg, unsigned char val) +{ + unsigned char msgbuf[2]; + msgbuf[0] = reg; + msgbuf[1] = val; + + i2c_write(I2C_AUDIO_ADDRESS_WRITE, msgbuf, 2); +} + +static unsigned char cs_read_reg_hw(unsigned char reg) +{ + unsigned char tmp = reg; + + i2c_write(I2C_AUDIO_ADDRESS_WRITE, &tmp, 1); + i2c_read(I2C_AUDIO_ADDRESS_READ, &tmp, 1); + + return tmp; +} + +static void cs_write(int reg, unsigned val) +{ + if ((unsigned)reg >= CS_NUM_REGS) + return; + + cs_regs[reg] = (unsigned char)val; +} + +static void cs_set(int reg, unsigned bits) +{ + cs_write(reg, cs_regs[reg] | bits); +} + +static void cs_clear(int reg, unsigned bits) +{ + cs_write(reg, cs_regs[reg] & ~bits); +} + +static void cs_write_masked(int reg, unsigned bits, unsigned mask) +{ + cs_write(reg, (cs_regs[reg] & ~mask) | (bits & mask)); +} + +/* convert tenth of dB volume (-1270..0) to master volume register value */ +int tenthdb2master(int db) +{ + if (db < VOLUME_MIN) + return 0xff; /* mute */ + else if (db >= VOLUME_MAX) + return 0x00; + else + return ((-db)/5); +} + +int sound_val2phys(int setting, int value) +{ + int result; + + switch(setting) + { +#ifdef HAVE_RECORDING + case SOUND_LEFT_GAIN: + case SOUND_RIGHT_GAIN: + result = (value - 23) * 15; /* fix */ + break; + case SOUND_MIC_GAIN: + result = value * 200; /* fix */ + break; +#endif + default: + result = value; + break; + } + + return result; +} + +void audiohw_mute(bool mute) +{ + if (mute) + { + } + else + { + } +} + +void audiohw_preinit(void) +{ + int i; + for (i = 0; i < CS_NUM_REGS; i++) + cs_regs[i] = cs_read_reg_hw(i); + + /* POWER UP SEQUENCE (from the datasheet) */ + +} + +void audiohw_postinit(void) +{ + /* nothing */ +} + +void audiohw_close(void) +{ + /* POWER DOWN SEQUENCE (from the datasheet) */ +} + +void audiohw_set_master_vol(int vol_l, int vol_r) +{ + (void)vol_l; + (void)vol_r; +} + +void audiohw_set_frequency(int fsel) +{ + static const unsigned char srctrl_table[HW_NUM_FREQ] = + { + HW_HAVE_8_([HW_FREQ_8] = CS_PLL_8000HZ, ) + HW_HAVE_11_([HW_FREQ_11] = CS_PLL_11025HZ,) + HW_HAVE_16_([HW_FREQ_16] = CS_PLL_16000HZ,) + HW_HAVE_22_([HW_FREQ_22] = CS_PLL_22050HZ,) + HW_HAVE_24_([HW_FREQ_24] = CS_PLL_24000HZ,) + HW_HAVE_32_([HW_FREQ_32] = CS_PLL_32000HZ,) + HW_HAVE_44_([HW_FREQ_44] = CS_PLL_44100HZ,) + HW_HAVE_48_([HW_FREQ_48] = CS_PLL_48000HZ,) + }; + + if ((unsigned)fsel >= HW_NUM_FREQ) + fsel = HW_FREQ_DEFAULT; + +// cs_write_masked(CS_REG_, srctrl_table[fsel], FS_MASK); +} + +#if defined(HAVE_RECORDING) +void audiohw_enable_recording(bool source_mic) +{ + (void)source_mic; +} + +void audiohw_disable_recording(void) +{ +} + +void audiohw_set_recvol(int left, int right, int type) +{ + (void)left; + (void)right; + (void)type; +} + +void audiohw_set_monitor(bool enable) +{ + (void)enable; +} +#endif /* HAVE_RECORDING */ Index: uisimulator/sdl/button.c =================================================================== --- uisimulator/sdl/button.c (revision 25707) +++ uisimulator/sdl/button.c (arbetskopia) @@ -1305,6 +1305,37 @@ case SDLK_KP_MULTIPLY: new_btn = BUTTON_REC; break; +#elif CONFIG_KEYPAD == IRIVER_E10_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_UP; + break; + case SDLK_KP2: + case SDLK_DOWN: + new_btn = BUTTON_DOWN; + break; + case SDLK_KP_PLUS: + case SDLK_F8: + case SDLK_ESCAPE: + new_btn = BUTTON_POWER; + break; + case SDLK_KP_MINUS: + new_btn = BUTTON_EXTRA; + break; + case SDLK_KP9: + new_btn = BUTTON_VOL_UP; + break; + case SDLK_KP3: + new_btn = BUTTON_VOL_DOWN; + break; #else #error No keymap defined! #endif /* CONFIG_KEYPAD */ Index: uisimulator/sdl/UI-irivere10.bmp =================================================================== Kan inte visa: filen markerad som binär. svn:mime-type = application/octet-stream Egenskapsändringar för: uisimulator/sdl/UI-irivere10.bmp ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Index: uisimulator/sdl/uisdl.h =================================================================== --- uisimulator/sdl/uisdl.h (revision 25707) +++ uisimulator/sdl/uisdl.h (arbetskopia) @@ -389,6 +389,13 @@ #define UI_HEIGHT 488 /* height of GUI window */ #define UI_LCD_POSX 64 /* x position of lcd */ #define UI_LCD_POSY 61 /* y position of lcd */ + +#elif defined(IRIVER_E10) +#define UI_TITLE "iriver E10" +#define UI_WIDTH 290 /* width of GUI window */ +#define UI_HEIGHT 570 /* height of GUI window */ +#define UI_LCD_POSX 75 /* x position of lcd */ +#define UI_LCD_POSY 75 /* y position of lcd */ #else #error no UI defines #endif