1
0
Fork 0
mirror of https://github.com/opentx/opentx.git synced 2025-07-14 11:59:50 +03:00

[Horus] Attempt to fix the problem with some files after a massstorage session

This commit is contained in:
Bertrand Songis 2016-08-31 23:54:36 +02:00
parent 76f0b306aa
commit 4221bfdf74
3 changed files with 30 additions and 11 deletions

View file

@ -71,6 +71,11 @@ void DiskCacheBlock::free(DWORD sector, UINT count)
}
}
void DiskCacheBlock::free()
{
endSector = 0;
}
bool DiskCacheBlock::empty() const
{
return (endSector == 0);
@ -84,6 +89,16 @@ DiskCache::DiskCache():
blocks = new DiskCacheBlock[DISK_CACHE_BLOCKS_NUM];
}
void DiskCache::clear()
{
lastBlock = 0;
stats.noHits = 0;
stats.noMisses = 0;
for (int n=0; n<DISK_CACHE_BLOCKS_NUM; ++n) {
blocks[n].free();
}
}
DRESULT DiskCache::read(BYTE drv, BYTE * buff, DWORD sector, UINT count)
{
// TODO: check if not caching first sectors would improve anything

View file

@ -37,6 +37,7 @@ public:
bool read(BYTE* buff, DWORD sector, UINT count);
DRESULT fill(BYTE drv, BYTE* buff, DWORD sector, UINT count);
void free(DWORD sector, UINT count);
void free();
bool empty() const;
private:
@ -53,14 +54,15 @@ struct DiskCacheStats
class DiskCache
{
public:
public:
DiskCache();
DRESULT read(BYTE drv, BYTE* buff, DWORD sector, UINT count);
DRESULT write(BYTE drv, const BYTE* buff, DWORD sector, UINT count);
const DiskCacheStats & getStats() const;
int getHitRate() const;
private:
void clear();
private:
DiskCacheStats stats;
uint32_t lastBlock;
DiskCacheBlock * blocks;

View file

@ -308,6 +308,8 @@ void sdMount()
{
TRACE("sdMount");
diskCache.clear();
if (f_mount(&g_FATFS_Obj, "", 1) == FR_OK) {
// call sdGetFreeSectors() now because f_getfree() takes a long time first time it's called
sdGetFreeSectors();