The config sector number is now calculated from the lowest partition start sector. Needed for disks with sectors_per_track < 63, e.g. flash cards.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@5124 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Jens Arnold 2004-09-28 18:09:10 +00:00
parent 90cbd3b06d
commit c12e87d881
3 changed files with 39 additions and 6 deletions

View file

@ -79,6 +79,7 @@ void init(void)
font_init(); font_init();
show_logo(); show_logo();
settings_reset(); settings_reset();
settings_calc_config_sector();
settings_load(SETTINGS_ALL); settings_load(SETTINGS_ALL);
settings_apply(); settings_apply();
sleep(HZ/2); sleep(HZ/2);
@ -224,11 +225,12 @@ void init(void)
} }
} }
settings_calc_config_sector();
settings_load(SETTINGS_ALL); settings_load(SETTINGS_ALL);
settings_apply(); settings_apply();
status_init(); status_init();
playlist_init(); playlist_init();
tree_init(); tree_init();
/* No buffer allocation (see buffer.c) may take place after the call to /* No buffer allocation (see buffer.c) may take place after the call to

View file

@ -82,6 +82,7 @@ const char rec_base_directory[] = REC_BASE_DIR;
#endif #endif
long lasttime = 0; long lasttime = 0;
static int config_sector = 0; /* mark uninitialized */
static unsigned char config_block[CONFIG_BLOCK_SIZE]; static unsigned char config_block[CONFIG_BLOCK_SIZE];
@ -481,8 +482,8 @@ static int save_config_buffer( void )
#endif #endif
if (fat_startsector() != 0) if (config_sector != 0)
ata_delayed_write( 61, config_block); ata_delayed_write( config_sector, config_block);
else else
return -1; return -1;
@ -502,8 +503,8 @@ static int load_config_buffer(int which)
if (which & SETTINGS_HD) if (which & SETTINGS_HD)
{ {
if (fat_startsector() != 0) { if (config_sector != 0) {
ata_read_sectors( 61, 1, config_block); ata_read_sectors( config_sector, 1, config_block);
/* calculate the checksum, check it and the header */ /* calculate the checksum, check it and the header */
chksum = calculate_config_checksum(config_block); chksum = calculate_config_checksum(config_block);
@ -601,6 +602,35 @@ static void save_bit_table(const struct bit_entry* p_table, int count, int bitst
curr_bit); /* = position after last element */ curr_bit); /* = position after last element */
} }
/*
* figure out the config sector from the partition table and the
* mounted file system
*/
void settings_calc_config_sector(void)
{
#ifdef SIMULATOR
config_sector = 61;
#else
int i, partition_start;
int sector = 0;
if (fat_startsector != 0) /* There is a partition table */
{
sector = 61;
for (i = 0; i < 4; i++)
{
partition_start = disk_partinfo(i)->start;
if (partition_start != 0 && (partition_start - 2) < sector)
sector = partition_start - 2;
}
if (sector < 0)
sector = 0;
}
splash(HZ, true, "CfgSec: %d", sector);
config_sector = sector;
#endif
}
/* /*
* persist all runtime user settings to disk or RTC RAM * persist all runtime user settings to disk or RTC RAM

View file

@ -281,6 +281,7 @@ struct opt_items {
/* prototypes */ /* prototypes */
void settings_calc_config_sector(void);
int settings_save(void); int settings_save(void);
void settings_load(int which); void settings_load(int which);
void settings_reset(void); void settings_reset(void);