/*************************************************************************** * __________ __ ___. * Open \______ \ ____ ____ | | _\_ |__ _______ ___ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ * \/ \/ \/ \/ \/ * $Id$ * * Copyright (C) 2002 by Stuart Martin * * 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. * ****************************************************************************/ #ifndef __SETTINGS_H__ #define __SETTINGS_H__ #include #include #include "inttypes.h" #include "config.h" #include "audiohw.h" /* for the AUDIOHW_* defines */ #include "statusbar.h" /* for the statusbar values */ #include "quickscreen.h" #include "button.h" #if CONFIG_CODEC == SWCODEC #include "audio.h" #endif struct opt_items { unsigned const char* string; int32_t voice_id; }; /** Setting values defines **/ /* name of directory where configuration, fonts and other data * files are stored */ #ifdef __PCTOOL__ #undef ROCKBOX_DIR #undef ROCKBOX_DIR_LEN #undef WPS_DIR #define ROCKBOX_DIR "." #define ROCKBOX_DIR_LEN 1 #else /* ROCKBOX_DIR is now defined in autoconf.h for flexible build types */ #ifndef ROCKBOX_DIR #error ROCKBOX_DIR not defined (should be in autoconf.h) #endif #define ROCKBOX_DIR_LEN (sizeof(ROCKBOX_DIR)-1) #endif /* def __PCTOOL__ */ #define FONT_DIR ROCKBOX_DIR "/fonts" #define LANG_DIR ROCKBOX_DIR "/langs" #define WPS_DIR ROCKBOX_DIR "/wps" #define SBS_DIR WPS_DIR #define THEME_DIR ROCKBOX_DIR "/themes" #define ICON_DIR ROCKBOX_DIR "/icons" #define PLUGIN_DIR ROCKBOX_DIR "/rocks" #define PLUGIN_GAMES_DIR PLUGIN_DIR "/games" #define PLUGIN_APPS_DIR PLUGIN_DIR "/apps" #define PLUGIN_DEMOS_DIR PLUGIN_DIR "/demos" #define VIEWERS_DIR PLUGIN_DIR "/viewers" #define BACKDROP_DIR ROCKBOX_DIR "/backdrops" #define REC_BASE_DIR "/" #define EQS_DIR ROCKBOX_DIR "/eqs" #define CODECS_DIR ROCKBOX_DIR "/codecs" #define RECPRESETS_DIR ROCKBOX_DIR "/recpresets" #define FMPRESET_PATH ROCKBOX_DIR "/fmpresets" #define PLAYLIST_CATALOG_DEFAULT_DIR "/Playlists" #define VIEWERS_CONFIG ROCKBOX_DIR "/viewers.config" #define CONFIGFILE ROCKBOX_DIR "/config.cfg" #define FIXEDSETTINGSFILE ROCKBOX_DIR "/fixed.cfg" #define MAX_FILENAME 32 enum { BOOKMARK_NO = 0, BOOKMARK_YES, BOOKMARK_ASK, BOOKMARK_UNIQUE_ONLY = 2, BOOKMARK_RECENT_ONLY_YES, BOOKMARK_RECENT_ONLY_ASK, }; enum { TRIG_MODE_OFF = 0, TRIG_MODE_NOREARM, TRIG_MODE_REARM }; enum { TRIG_TYPE_STOP = 0, TRIG_TYPE_PAUSE, TRIG_TYPE_NEW_FILE }; #ifdef HAVE_CROSSFADE enum { CROSSFADE_ENABLE_OFF = 0, CROSSFADE_ENABLE_AUTOSKIP, CROSSFADE_ENABLE_MANSKIP, CROSSFADE_ENABLE_SHUFFLE, CROSSFADE_ENABLE_SHUFFLE_OR_MANSKIP, CROSSFADE_ENABLE_ALWAYS, }; #endif enum { FOLDER_ADVANCE_OFF = 0, FOLDER_ADVANCE_NEXT, FOLDER_ADVANCE_RANDOM, }; /* repeat mode options */ enum { REPEAT_OFF = 0, REPEAT_ALL, REPEAT_ONE, REPEAT_SHUFFLE, #ifdef AB_REPEAT_ENABLE REPEAT_AB, #endif NUM_REPEAT_MODES }; /* dir filter options */ /* Note: Any new filter modes need to be added before NUM_FILTER_MODES. * Any new rockbox browse filter modes (accessible through the menu) * must be added after NUM_FILTER_MODES. */ enum { SHOW_ALL, SHOW_SUPPORTED, SHOW_MUSIC, SHOW_PLAYLIST, SHOW_ID3DB, NUM_FILTER_MODES, SHOW_WPS, SHOW_RWPS, SHOW_FMS, SHOW_RFMS, SHOW_SBS, SHOW_RSBS, SHOW_FMR, SHOW_CFG, SHOW_LNG, SHOW_MOD, SHOW_FONT, SHOW_PLUGINS}; /* file and dir sort options */ enum { SORT_ALPHA, SORT_DATE, SORT_DATE_REVERSED, SORT_TYPE, /* available as settings */ SORT_ALPHA_REVERSED, SORT_TYPE_REVERSED }; /* internal use only */ enum { SORT_INTERPRET_AS_DIGIT, SORT_INTERPRET_AS_NUMBER }; /* recursive dir insert options */ enum { RECURSE_OFF, RECURSE_ON, RECURSE_ASK }; /* replaygain types */ enum { REPLAYGAIN_TRACK = 0, REPLAYGAIN_ALBUM, REPLAYGAIN_SHUFFLE, REPLAYGAIN_OFF }; /* show path types */ enum { SHOW_PATH_OFF = 0, SHOW_PATH_CURRENT, SHOW_PATH_FULL }; /* scrollbar visibility/position */ enum { SCROLLBAR_OFF = 0, SCROLLBAR_LEFT, SCROLLBAR_RIGHT }; /* Alarm settings */ #ifdef HAVE_RTC_ALARM enum { ALARM_START_WPS = 0, #if CONFIG_TUNER ALARM_START_FM, #endif #ifdef HAVE_RECORDING ALARM_START_REC, #endif ALARM_START_COUNT }; #if CONFIG_TUNER && defined(HAVE_RECORDING) #define ALARM_SETTING_TEXT "wps,fm,rec" #elif CONFIG_TUNER #define ALARM_SETTING_TEXT "wps,fm" #elif defined(HAVE_RECORDING) #define ALARM_SETTING_TEXT "wps,rec" #endif #endif /* HAVE_RTC_ALARM */ /* Keyclick stuff */ /* Not really a setting but several files should stay synced */ #define KEYCLICK_DURATION 2 /** virtual pointer stuff.. move to another .h maybe? **/ /* These define "virtual pointers", which could either be a literal string, or a mean a string ID if the pointer is in a certain range. This helps to save space for menus and options. */ #define VIRT_SIZE 0xFFFF /* more than enough for our string ID range */ #if defined(CPU_S5L870X) /* the S5L870X has IRAM at 0, so we use 0xffff bytes right after that */ #define VIRT_PTR ((unsigned char*)0x40000) #elif CONFIG_CPU==DM320 /* the DM320 has IRAM at 0, so we use 0xffff bytes right after that */ #define VIRT_PTR ((unsigned char*)0x4000) #else /* a location where we won't store strings, 0 is the fastest */ #define VIRT_PTR ((unsigned char*)0) #endif /* form a "virtual pointer" out of a language ID */ #define ID2P(id) (VIRT_PTR + id) /* resolve a pointer which could be a virtualized ID or a literal */ #define P2STR(p) (char *)((p>=VIRT_PTR && p=VIRT_PTR && p 1 unsigned char backdrop_file[MAX_FILENAME+1]; /* backdrop bitmap file */ #endif #ifdef HAVE_LCD_COLOR int bg_color; /* background color native format */ int fg_color; /* foreground color native format */ int lss_color; /* background color for the selector or start color for the gradient */ int lse_color; /* end color for the selector gradient */ int lst_color; /* color of the text for the selector */ unsigned char colors_file[MAX_FILENAME+1]; #endif /* playlist/playback settings */ int repeat_mode; /* 0=off 1=repeat all 2=repeat one 3=shuffle 4=ab */ int next_folder; /* move to next folder */ int recursive_dir_insert; /* should directories be inserted recursively */ bool fade_on_stop; /* fade on pause/unpause/stop */ bool playlist_shuffle; bool warnon_erase_dynplaylist; /* warn when erasing dynamic playlist */ /* playlist viewer settings */ bool playlist_viewer_icons; /* display icons on viewer */ bool playlist_viewer_indices; /* display playlist indices on viewer */ int playlist_viewer_track_display; /* how to display tracks in viewer */ /* voice UI settings */ bool talk_menu; /* enable voice UI */ int talk_dir; /* voiced directories mode: 0=off 1=number 2=spell */ bool talk_dir_clip; /* use directory .talk clips */ int talk_file; /* voice file mode: 0=off, 1=number, 2=spell */ bool talk_file_clip; /* use file .talk clips */ bool talk_filetype; /* say file type */ bool talk_battery_level; /* file browser sorting */ bool sort_case; /* dir sort order: 0=case insensitive, 1=sensitive */ int sort_dir; /* 0=alpha, 1=date (old first), 2=date (new first) */ int sort_file; /* 0=alpha, 1=date, 2=date (new first), 3=type */ int interpret_numbers; /* true=strnatcmp, false=strcmp */ /* power settings */ int poweroff; /* idle power off timer */ int battery_capacity; /* in mAh */ #if BATTERY_TYPES_COUNT > 1 int battery_type; /* for units which can take multiple types (Ondio). */ #endif #ifdef HAVE_SPDIF_POWER bool spdif_enable; /* S/PDIF power on/off */ #endif #ifdef HAVE_USB_CHARGING_ENABLE int usb_charging; #endif /* device settings */ #ifdef HAVE_LCD_CONTRAST int contrast; /* lcd contrast */ #endif #ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_INVERT bool invert; /* invert display */ #endif #ifdef HAVE_LCD_FLIP bool flip_display; /* turn display (and button layout) by 180 degrees */ #endif int cursor_style; /* style of the selection cursor */ int screen_scroll_step; int show_path_in_browser; /* 0=off, 1=current directory, 2=full path */ bool offset_out_of_view; unsigned char icon_file[MAX_FILENAME+1]; unsigned char viewers_icon_file[MAX_FILENAME+1]; unsigned char font_file[MAX_FILENAME+1]; /* last font */ #ifdef HAVE_REMOTE_LCD unsigned char remote_font_file[MAX_FILENAME+1]; /* last font */ #endif unsigned char kbd_file[MAX_FILENAME+1]; /* last keyboard */ #endif /* HAVE_LCD_BITMAP */ int backlight_timeout; /* backlight off timeout: 0-18 0=never, 1=always, then according to timeout_values[] */ bool caption_backlight; /* turn on backlight at end and start of track */ bool bl_filter_first_keypress; /* filter first keypress when dark? */ #if CONFIG_CHARGING int backlight_timeout_plugged; #endif #ifdef HAVE_BACKLIGHT #ifdef HAS_BUTTON_HOLD int backlight_on_button_hold; /* what to do with backlight when hold switch is on */ #endif #ifdef HAVE_LCD_SLEEP_SETTING int lcd_sleep_after_backlight_off; /* when to put lcd to sleep after backlight has turned off */ #endif #endif #if defined(HAVE_BACKLIGHT_FADING_INT_SETTING) int backlight_fade_in; /* backlight fade in timing: 0..3 */ int backlight_fade_out; /* backlight fade in timing: 0..7 */ #elif defined(HAVE_BACKLIGHT_FADING_BOOL_SETTING) bool backlight_fade_in; bool backlight_fade_out; #endif #ifdef HAVE_BACKLIGHT_BRIGHTNESS int brightness; #endif #ifdef HAVE_REMOTE_LCD /* remote lcd */ int remote_contrast; /* lcd contrast: 0-63 0=low 63=high */ int remote_backlight_timeout; /* backlight off timeout: 0-18 0=never, 1=always, then according to timeout_values[] */ int remote_backlight_timeout_plugged; int remote_scroll_speed; /* long texts scrolling speed: 1-30 */ int remote_scroll_delay; /* delay (in 1/10s) before starting scroll */ int remote_scroll_step; /* pixels to advance per update */ int remote_bidir_limit; /* bidir scroll length limit */ bool remote_invert; /* invert display */ bool remote_flip_display; /* turn display (and button layout) by 180 degrees */ bool remote_caption_backlight; /* turn on backlight at end and start of track */ bool remote_bl_filter_first_keypress; /* filter first remote keypress when remote dark? */ unsigned char remote_icon_file[MAX_FILENAME+1]; unsigned char remote_viewers_icon_file[MAX_FILENAME+1]; #ifdef HAS_REMOTE_BUTTON_HOLD int remote_backlight_on_button_hold; /* what to do with remote backlight when hold switch is on */ #endif #ifdef HAVE_REMOTE_LCD_TICKING bool remote_reduce_ticking; /* 0=normal operation, 1=EMI reduce on with cost more CPU. */ #endif #endif /* HAVE_REMOTE_LCD */ #if CONFIG_CODEC == MAS3507D bool line_in; /* false=off, true=active */ #endif #ifdef HAVE_BUTTON_LIGHT int buttonlight_timeout; #endif #ifdef HAVE_BUTTONLIGHT_BRIGHTNESS int buttonlight_brightness; #endif #ifdef IPOD_ACCESSORY_PROTOCOL int serial_bitrate; /* 0=auto 1=9600 2=19200 3=38400 4=57600 */ #endif #ifdef HAVE_ACCESSORY_SUPPLY bool accessory_supply; /* 0=off 1=on, accessory power supply for iPod */ #endif #ifdef HAVE_LINEOUT_POWEROFF bool lineout_active; #endif #ifdef HAVE_SPEAKER bool speaker_enabled; #endif bool prevent_skip; #ifdef HAVE_TOUCHSCREEN int touch_mode; struct touchscreen_parameter ts_calibration_data; #endif #ifdef HAVE_PITCHSCREEN /* pitch screen settings */ bool pitch_mode_semitone; #if CONFIG_CODEC == SWCODEC bool pitch_mode_timestretch; #endif #endif /* If values are just added to the end, no need to bump plugin API version. */ /* new stuff to be added at the end */ #ifdef USB_ENABLE_HID bool usb_hid; int usb_keypad_mode; #endif #ifdef HAVE_LCD_BITMAP unsigned char ui_vp_config[64]; /* viewport string for the lists */ #ifdef HAVE_REMOTE_LCD unsigned char remote_ui_vp_config[64]; /* viewport string for the remote lists */ #endif #endif #if CONFIG_CODEC == SWCODEC int compressor_threshold; int compressor_makeup_gain; int compressor_ratio; int compressor_knee; int compressor_release_time; #endif #ifdef HAVE_MORSE_INPUT bool morse_input; /* text input method setting */ #endif #ifdef HAVE_HOTKEY /* hotkey assignments - acceptable values are in hotkey_action enum in onplay.h */ int hotkey_wps; int hotkey_tree; #endif #if CONFIG_CODEC == SWCODEC /* When resuming playback (after a stop), rewind this number of seconds */ int resume_rewind; #endif #ifdef AUDIOHW_HAVE_DEPTH_3D int depth_3d; #endif #ifdef AUDIOHW_HAVE_EQ /** Hardware EQ tone controls **/ struct hw_eq_band { /* Maintain the order of members or sound_menu has to be changed */ int gain; #ifdef AUDIOHW_HAVE_EQ_FREQUENCY int frequency; #endif #ifdef AUDIOHW_HAVE_EQ_WIDTH int width; #endif } hw_eq_bands[AUDIOHW_EQ_BAND_NUM]; #endif /* AUDIOHW_HAVE_EQ */ }; /** global variables **/ extern long lasttime; /* global settings */ extern struct user_settings global_settings; /* global status */ extern struct system_status global_status; #endif /* __SETTINGS_H__ */