? build ? car.cfg ? rockbox-VWCDPIC-2.7.tar.gz ? tools/bmp2rb ? tools/convbdf ? tools/descramble ? tools/generate_rocklatin ? tools/scramble ? tools/sh2d Index: apps/settings.c =================================================================== RCS file: /cvsroot/rockbox/apps/settings.c,v retrieving revision 1.213 diff -u -b -r1.213 settings.c --- apps/settings.c 23 Jun 2004 08:12:19 -0000 1.213 +++ apps/settings.c 4 Jul 2004 23:49:55 -0000 @@ -81,6 +81,12 @@ #define MAX_LINES 2 #endif +/* tells us we are current running using the "car" mode configuration + settings. when in car mode, we ignore all calls to the save_settings() + function because we will manually save our car mode configuration settings + to the /.rockbox/car.cfg file when the user turns off their car. */ +bool in_car = false; + long lasttime = 0; static unsigned char config_block[CONFIG_BLOCK_SIZE]; @@ -597,6 +603,12 @@ */ int settings_save( void ) { + if(in_car) + { + /* We don't want to overwrite normal settings if we are in car mode */ + return 0; + } + DEBUGF( "settings_save()\n" ); { @@ -1115,6 +1127,49 @@ } } +bool settings_save_config_file(char* filename) +{ + int fd = creat(filename,0); + + return settings_save_config_fd(fd); +} + +bool settings_save_config_fd(int fd) +{ + bool done = false; + int i; + + /* abort if file descriptor is invalid. */ + if (fd < 0) { + return false; + } + + fprintf(fd, "# >>> .cfg file created by rockbox %s <<<\r\n", appsversion); + fprintf(fd, "# >>> http://rockbox.haxx.se <<<\r\n#\r\n"); + fprintf(fd, "#\r\n# wps / language / font \r\n#\r\n"); + + if (global_settings.wps_file[0] != 0) + fprintf(fd, "wps: %s/%s.wps\r\n", ROCKBOX_DIR, + global_settings.wps_file); + + if (global_settings.lang_file[0] != 0) + fprintf(fd, "lang: %s/%s.lng\r\n", ROCKBOX_DIR LANG_DIR, + global_settings.lang_file); + +#ifdef HAVE_LCD_BITMAP + if (global_settings.font_file[0] != 0) + fprintf(fd, "font: %s/%s.fnt\r\n", ROCKBOX_DIR FONT_DIR, + global_settings.font_file); +#endif + + /* here's the action: write values to file, specified via table */ + save_cfg_table(rtc_bits, sizeof(rtc_bits)/sizeof(rtc_bits[0]), fd); + save_cfg_table(hd_bits, sizeof(hd_bits)/sizeof(hd_bits[0]), fd); + + close(fd); + + return true; +} bool settings_save_config(void) { @@ -1135,7 +1190,7 @@ while (!done) { if (!kbd_input(filename, sizeof filename)) { fd = creat(filename,0); - if (fd < 0) { + if ( !settings_save_config_fd(fd) ) { lcd_clear_display(); lcd_puts(0,0,str(LANG_FAILED)); lcd_update(); @@ -1148,7 +1203,7 @@ break; } - /* abort if file couldn't be created */ + /* abort if user decided not to save a config file after all */ if (!done) { lcd_clear_display(); lcd_puts(0,0,str(LANG_RESET_DONE_CANCEL)); @@ -1157,35 +1212,6 @@ return false; } - fprintf(fd, "# >>> .cfg file created by rockbox %s <<<\r\n", appsversion); - fprintf(fd, "# >>> http://rockbox.haxx.se <<<\r\n#\r\n"); - fprintf(fd, "#\r\n# wps / language / font \r\n#\r\n"); - - if (global_settings.wps_file[0] != 0) - fprintf(fd, "wps: %s/%s.wps\r\n", ROCKBOX_DIR, - global_settings.wps_file); - - if (global_settings.lang_file[0] != 0) - fprintf(fd, "lang: %s/%s.lng\r\n", ROCKBOX_DIR LANG_DIR, - global_settings.lang_file); - -#ifdef HAVE_LCD_BITMAP - if (global_settings.font_file[0] != 0) - fprintf(fd, "font: %s/%s.fnt\r\n", ROCKBOX_DIR FONT_DIR, - global_settings.font_file); -#endif - - /* here's the action: write values to file, specified via table */ - save_cfg_table(rtc_bits, sizeof(rtc_bits)/sizeof(rtc_bits[0]), fd); - save_cfg_table(hd_bits, sizeof(hd_bits)/sizeof(hd_bits[0]), fd); - - close(fd); - - lcd_clear_display(); - lcd_puts(0,0,str(LANG_SETTINGS_SAVED1)); - lcd_puts(0,1,str(LANG_SETTINGS_SAVED2)); - lcd_update(); - sleep(HZ); return true; } Index: apps/settings.h =================================================================== RCS file: /cvsroot/rockbox/apps/settings.h,v retrieving revision 1.111 diff -u -b -r1.111 settings.h --- apps/settings.h 22 Jun 2004 12:37:42 -0000 1.111 +++ apps/settings.h 4 Jul 2004 23:49:55 -0000 @@ -231,6 +231,8 @@ void settings_display(void); bool settings_load_config(char* file); +bool settings_save_config_fd(int fd); +bool settings_save_config_file(char* filename); bool settings_save_config(void); bool set_bool_options(char* string, bool* variable, char* yes_str, int yes_voice, @@ -257,6 +259,12 @@ extern char rockboxdir[]; extern long lasttime; +/* tells us we are current running using the "car" mode configuration + settings. when in car mode, we ignore all calls to the save_settings() + function because we will manually save our car mode configuration settings + to the /.rockbox/car.cfg file when the user turns off their car. */ +extern bool in_car; + /* Recording base directory */ extern char rec_base_directory[]; Index: apps/tree.c =================================================================== RCS file: /cvsroot/rockbox/apps/tree.c,v retrieving revision 1.248 diff -u -b -r1.248 tree.c --- apps/tree.c 27 Jun 2004 01:05:40 -0000 1.248 +++ apps/tree.c 4 Jul 2004 23:49:56 -0000 @@ -623,6 +623,52 @@ while (!stop) { switch (button_get(true)) { +#ifdef BUTTON_RC_MENABLE + case BUTTON_RC_MENABLE: +#ifdef BUTTON_RC_SCAN + case BUTTON_RC_SCAN: +#endif + /* First save the current settings so that we can restore + them after exiting car. */ + if ( !in_car ) + { + settings_save(); + + in_car = true; + } + + /* Load the "car mode" settings (if available). */ + settings_load_config("/.rockbox/car.cfg"); + + return true; +#endif + +#ifdef BUTTON_RC_MDISABLE + /* ignore MDISABLE command from resume screen since + we are already "paused." + + We may get an MENABLE right afterwards on some VW head + units anyway. */ + case BUTTON_RC_MDISABLE: + if ( in_car ) + { + /* I think this will never happen because we power up + with in_car = false and the resume screen is probably + only used on power up (is this true?). */ + + /* Save new "car" settings to disk before exiting car. */ + settings_save_config_file("/.rockbox/car.cfg"); + + /* Now restore non-car settings from nonvolatile storage */ + settings_load(SETTINGS_ALL); + settings_apply(); + + in_car = false; + } + + break; +#endif + case BUTTON_PLAY: #ifdef BUTTON_RC_PLAY case BUTTON_RC_PLAY: Index: apps/wps.c =================================================================== RCS file: /cvsroot/rockbox/apps/wps.c,v retrieving revision 1.215 diff -u -b -r1.215 wps.c --- apps/wps.c 27 Jun 2004 01:05:40 -0000 1.215 +++ apps/wps.c 4 Jul 2004 23:49:57 -0000 @@ -823,11 +823,69 @@ break; #endif #endif /* BUTTON_ON */ + + +#ifdef BUTTON_RC_MENABLE + /* Enter car mode and play music */ + case BUTTON_RC_MENABLE: + /* First save the current settings so that we can restore + them after exiting car. */ + if ( !in_car ) + { + settings_save(); + + in_car = true; + } + + /* Load the "car mode" settings (if available). */ + settings_load_config("/.rockbox/car.cfg"); + + /* Start playing if we are currently paused. */ + if ( paused ) + { + paused = false; + if ( global_settings.fade_on_stop ) + fade(1); + else + mpeg_resume(); + } + break; +#endif + +#ifdef BUTTON_RC_MDISABLE + case BUTTON_RC_MDISABLE: + if ( !paused ) + { + paused = true; + if ( global_settings.fade_on_stop ) + fade(0); + else + mpeg_pause(); + } + + if ( in_car ) + { + /* Save new "car" settings to disk before exiting car. */ + settings_save_config_file("/.rockbox/car.cfg"); + + /* Now restore non-car settings from nonvolatile storage */ + settings_load(SETTINGS_ALL); + settings_apply(); + + in_car = false; + } + + break; +#endif + /* play/pause */ case BUTTON_PLAY: #ifdef BUTTON_RC_PLAY case BUTTON_RC_PLAY: #endif +#ifdef BUTTON_RC_SCAN + case BUTTON_RC_SCAN: +#endif if ( paused ) { paused = false; Index: firmware/drivers/serial.c =================================================================== RCS file: /cvsroot/rockbox/firmware/drivers/serial.c,v retrieving revision 1.12 diff -u -b -r1.12 serial.c --- firmware/drivers/serial.c 30 Jun 2004 13:31:14 -0000 1.12 +++ firmware/drivers/serial.c 4 Jul 2004 23:49:57 -0000 @@ -35,6 +35,18 @@ #define VOLUP 0xD0 #define VOLDN 0xE0 +/* VWCDPIC Remote Control Commands */ +#define SCAN 0xA0 +#define SHUFFLE 0x49 +#define MENABLE 0xE4 +#define MDISABLE 0x10 +#define LIST1 0xD1 +#define LIST2 0xD2 +#define LIST3 0xD3 +#define LIST4 0xD4 +#define LIST5 0xD5 +#define LIST6 0xD6 + void serial_setup (void) { /* Set PB10 function to serial Rx */ @@ -112,6 +124,46 @@ last_valid_button = BUTTON_RC_RIGHT; break; + case MENABLE: + last_valid_button = BUTTON_RC_MENABLE; + break; + + case MDISABLE: + last_valid_button = BUTTON_RC_MDISABLE; + break; + + case SCAN: + last_valid_button = BUTTON_RC_SCAN; + break; + + case SHUFFLE: + last_valid_button = BUTTON_RC_SHUFFLE; + break; + + case LIST1: + last_valid_button = BUTTON_RC_LIST1; + break; + + case LIST2: + last_valid_button = BUTTON_RC_LIST2; + break; + + case LIST3: + last_valid_button = BUTTON_RC_LIST3; + break; + + case LIST4: + last_valid_button = BUTTON_RC_LIST4; + break; + + case LIST5: + last_valid_button = BUTTON_RC_LIST5; + break; + + case LIST6: + last_valid_button = BUTTON_RC_LIST6; + break; + default: last_valid_button = BUTTON_NONE; break; Index: firmware/export/button.h =================================================================== RCS file: /cvsroot/rockbox/firmware/export/button.h,v retrieving revision 1.6 diff -u -b -r1.6 button.h --- firmware/export/button.h 22 Jun 2004 07:16:31 -0000 1.6 +++ firmware/export/button.h 4 Jul 2004 23:49:57 -0000 @@ -97,6 +97,18 @@ #define BUTTON_RC_LEFT (BUTTON_LEFT | BUTTON_REMOTE) #define BUTTON_RC_RIGHT (BUTTON_RIGHT| BUTTON_REMOTE) +/* Car remote control commands */ +#define BUTTON_RC_MENABLE (0x0401 | BUTTON_REMOTE) +#define BUTTON_RC_MDISABLE (0x0402 | BUTTON_REMOTE) +#define BUTTON_RC_SCAN (0x0403 | BUTTON_REMOTE) +#define BUTTON_RC_SHUFFLE (0x0404 | BUTTON_REMOTE) +#define BUTTON_RC_LIST1 (0x0405 | BUTTON_REMOTE) +#define BUTTON_RC_LIST2 (0x0406 | BUTTON_REMOTE) +#define BUTTON_RC_LIST3 (0x0407 | BUTTON_REMOTE) +#define BUTTON_RC_LIST4 (0x0408 | BUTTON_REMOTE) +#define BUTTON_RC_LIST5 (0x0409 | BUTTON_REMOTE) +#define BUTTON_RC_LIST6 (0x040A | BUTTON_REMOTE) + #ifdef HAVE_RECORDER_KEYPAD /* Recorder specific button codes */