// | |
// | |
// | |
#define SD_MMC_SPI_MEM 1 | |
#include "ff_headers.h" | |
#include "logbuf.h" | |
#include "secCache.h" | |
#include "ff_flush.h" | |
extern BaseType_t FF_SemaphoreTaken( void *pxSemaphore ); | |
FF_Error_t FF_FlushWrites( FF_IOManager_t *pxIOManager, BaseType_t xForced ) | |
{ | |
FF_Error_t xRetValue; | |
if( ( pxIOManager == NULL ) || ( cache_dirt_count() == 0 ) ) | |
{ | |
xRetValue = FF_ERR_NONE; | |
} | |
else if( ( pxIOManager->ucPreventFlush != pdFALSE ) && ( xForced == pdFALSE ) ) | |
{ | |
xRetValue = FF_ERR_IOMAN_PARTITION_MOUNTED | FF_ERRFLAG; | |
} | |
else | |
{ | |
BaseType_t rc = 0; | |
if( xForced != pdFALSE ) | |
{ | |
FF_FlushCache( pxIOManager ); | |
} | |
// if( FF_TrySemaphore( pxIOManager->pvSemaphore, xForced ? 5000 : 0 ) != pdFALSE ) | |
if( ( xForced != pdFALSE ) || ( FF_SemaphoreTaken( pxIOManager->pvSemaphore ) == pdFALSE ) ) | |
{ | |
rc = cache_flush( xForced ); | |
// FF_ReleaseSemaphore( pxIOManager->pvSemaphore ); | |
} | |
xRetValue = rc; | |
} | |
return xRetValue; | |
} | |
FF_Error_t FF_StopFlush( FF_IOManager_t *pxIOManager, BaseType_t xFlag ) | |
{ | |
FF_Error_t xRetValue; | |
if( pxIOManager == NULL ) | |
{ | |
xRetValue = 0; | |
} | |
else | |
{ | |
vTaskSuspendAll(); | |
{ | |
xRetValue = pxIOManager->ucPreventFlush; | |
if( xFlag != FLUSH_ENABLE ) | |
{ | |
xRetValue++; | |
} | |
else if ( xRetValue > 0 ) | |
{ | |
xRetValue--; | |
} | |
pxIOManager->ucPreventFlush = xRetValue; | |
} | |
xTaskResumeAll(); | |
} | |
return xRetValue; | |
} |