mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-10-14 02:27:39 -04:00
Properly handle early USB mode, dircache and tagcache state files with
flashed rockbox. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@10525 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
1204136632
commit
3b52bb9c68
5 changed files with 37 additions and 17 deletions
14
apps/main.c
14
apps/main.c
|
@ -338,9 +338,17 @@ void init(void)
|
||||||
panicf("ata: %d", rc);
|
panicf("ata: %d", rc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_EEPROM
|
||||||
|
eeprom_settings_init();
|
||||||
|
#endif
|
||||||
|
|
||||||
usb_start_monitoring();
|
usb_start_monitoring();
|
||||||
while (usb_detect())
|
while (usb_detect())
|
||||||
{ /* enter USB mode early, before trying to mount */
|
{
|
||||||
|
#ifdef HAVE_EEPROM
|
||||||
|
firmware_settings.disk_clean = false;
|
||||||
|
#endif
|
||||||
|
/* enter USB mode early, before trying to mount */
|
||||||
if (button_get_w_tmo(HZ/10) == SYS_USB_CONNECTED)
|
if (button_get_w_tmo(HZ/10) == SYS_USB_CONNECTED)
|
||||||
#ifdef HAVE_MMC
|
#ifdef HAVE_MMC
|
||||||
if (!mmc_touched() || (mmc_remove_request() == SYS_MMC_EXTRACTED))
|
if (!mmc_touched() || (mmc_remove_request() == SYS_MMC_EXTRACTED))
|
||||||
|
@ -374,10 +382,6 @@ void init(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_EEPROM
|
|
||||||
eeprom_settings_init();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
settings_calc_config_sector();
|
settings_calc_config_sector();
|
||||||
|
|
||||||
#if defined(SETTINGS_RESET) || (CONFIG_KEYPAD == IPOD_4G_PAD)
|
#if defined(SETTINGS_RESET) || (CONFIG_KEYPAD == IPOD_4G_PAD)
|
||||||
|
|
|
@ -3300,7 +3300,7 @@ void tagcache_unload_ramcache(void)
|
||||||
{
|
{
|
||||||
stat.ramcache = false;
|
stat.ramcache = false;
|
||||||
/* Just to make sure there is no statefile present. */
|
/* Just to make sure there is no statefile present. */
|
||||||
remove(TAGCACHE_STATEFILE);
|
// remove(TAGCACHE_STATEFILE);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
10
apps/tree.c
10
apps/tree.c
|
@ -1368,16 +1368,14 @@ void tree_flush(void)
|
||||||
#ifdef HAVE_TC_RAMCACHE
|
#ifdef HAVE_TC_RAMCACHE
|
||||||
tagcache_unload_ramcache();
|
tagcache_unload_ramcache();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_DIRCACHE
|
#ifdef HAVE_DIRCACHE
|
||||||
if (global_settings.dircache)
|
if (global_settings.dircache)
|
||||||
{
|
{
|
||||||
|
global_settings.dircache_size = dircache_get_cache_size();
|
||||||
# ifdef HAVE_EEPROM
|
# ifdef HAVE_EEPROM
|
||||||
if (dircache_is_enabled() && firmware_settings.initialized)
|
if (dircache_is_enabled() && firmware_settings.initialized)
|
||||||
{
|
|
||||||
global_settings.dircache_size = dircache_get_cache_size();
|
|
||||||
dircache_save(DIRCACHE_FILE);
|
dircache_save(DIRCACHE_FILE);
|
||||||
}
|
|
||||||
# endif
|
# endif
|
||||||
dircache_disable();
|
dircache_disable();
|
||||||
}
|
}
|
||||||
|
@ -1395,6 +1393,10 @@ void tree_restore(void)
|
||||||
firmware_settings.disk_clean = false;
|
firmware_settings.disk_clean = false;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_TC_RAMCACHE
|
||||||
|
remove(TAGCACHE_STATEFILE);
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_DIRCACHE
|
#ifdef HAVE_DIRCACHE
|
||||||
remove(DIRCACHE_FILE);
|
remove(DIRCACHE_FILE);
|
||||||
if (global_settings.dircache)
|
if (global_settings.dircache)
|
||||||
|
|
|
@ -27,13 +27,20 @@
|
||||||
|
|
||||||
struct eeprom_settings firmware_settings;
|
struct eeprom_settings firmware_settings;
|
||||||
|
|
||||||
static void reset_config(void)
|
static bool reset_config(void)
|
||||||
{
|
{
|
||||||
memset(&firmware_settings, 0, sizeof(struct eeprom_settings));
|
memset(&firmware_settings, 0, sizeof(struct eeprom_settings));
|
||||||
|
#ifdef BOOTLOADER
|
||||||
|
/* Don't reset settings if we are inside bootloader. */
|
||||||
|
firmware_settings.initialized = false;
|
||||||
|
#else
|
||||||
firmware_settings.version = EEPROM_SETTINGS_VERSION;
|
firmware_settings.version = EEPROM_SETTINGS_VERSION;
|
||||||
firmware_settings.initialized = true;
|
firmware_settings.initialized = true;
|
||||||
firmware_settings.boot_disk = false;
|
firmware_settings.boot_disk = false;
|
||||||
firmware_settings.bl_version = 0;
|
firmware_settings.bl_version = 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return firmware_settings.initialized;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool eeprom_settings_init(void)
|
bool eeprom_settings_init(void)
|
||||||
|
@ -69,23 +76,20 @@ bool eeprom_settings_init(void)
|
||||||
if (firmware_settings.version != EEPROM_SETTINGS_VERSION)
|
if (firmware_settings.version != EEPROM_SETTINGS_VERSION)
|
||||||
{
|
{
|
||||||
logf("Version mismatch");
|
logf("Version mismatch");
|
||||||
reset_config();
|
return reset_config();
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (firmware_settings.checksum != sum)
|
if (firmware_settings.checksum != sum)
|
||||||
{
|
{
|
||||||
logf("Checksum mismatch");
|
logf("Checksum mismatch");
|
||||||
reset_config();
|
return reset_config();
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef BOOTLOADER
|
#ifndef BOOTLOADER
|
||||||
if (firmware_settings.bl_version < EEPROM_SETTINGS_BL_MINVER)
|
if (firmware_settings.bl_version < EEPROM_SETTINGS_BL_MINVER)
|
||||||
{
|
{
|
||||||
logf("Too old bootloader: %d", firmware_settings.bl_version);
|
logf("Too old bootloader: %d", firmware_settings.bl_version);
|
||||||
reset_config();
|
return reset_config();
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -84,7 +84,17 @@ bool detect_flashed_rockbox(void)
|
||||||
struct flash_header hdr;
|
struct flash_header hdr;
|
||||||
uint8_t *src = (uint8_t *)FLASH_ENTRYPOINT;
|
uint8_t *src = (uint8_t *)FLASH_ENTRYPOINT;
|
||||||
|
|
||||||
|
# ifndef BOOTLOADER
|
||||||
|
int oldmode;
|
||||||
|
oldmode = system_memory_guard(MEMGUARD_NONE);
|
||||||
|
# endif
|
||||||
|
|
||||||
memcpy(&hdr, src, sizeof(struct flash_header));
|
memcpy(&hdr, src, sizeof(struct flash_header));
|
||||||
|
|
||||||
|
# ifndef BOOTLOADER
|
||||||
|
system_memory_guard(oldmode);
|
||||||
|
# endif
|
||||||
|
|
||||||
if (hdr.magic != FLASH_MAGIC)
|
if (hdr.magic != FLASH_MAGIC)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue