Skip to content

Commit 25129e5

Browse files
Added API allowing user to choose settings at runtime - replacement of PR#49 (#51)
* Adding in FF_SDDiskInitWithSettings optional initialization to support runtime initial mounting options. * FAT-#50: Fixing duplicate definition of st_atime, st_mtime, st_ctime for linux. * Fixing formatting with diff provided using uncrustify. --------- Co-authored-by: Paul Helter <[email protected]>
1 parent 08d0cff commit 25129e5

File tree

11 files changed

+93
-22
lines changed

11 files changed

+93
-22
lines changed

ff_stdio.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1137,9 +1137,9 @@ int ff_stat( const char * pcName,
11371137

11381138
#if ( ffconfigTIME_SUPPORT == 1 )
11391139
{
1140-
pxStatBuffer->st_atime = prvFileTime( &( xDirEntry.xAccessedTime ) );
1141-
pxStatBuffer->st_mtime = prvFileTime( &( xDirEntry.xModifiedTime ) );
1142-
pxStatBuffer->st_ctime = prvFileTime( &( xDirEntry.xCreateTime ) );
1140+
pxStatBuffer->ff_atime = prvFileTime( &( xDirEntry.xAccessedTime ) );
1141+
pxStatBuffer->ff_mtime = prvFileTime( &( xDirEntry.xModifiedTime ) );
1142+
pxStatBuffer->ff_ctime = prvFileTime( &( xDirEntry.xCreateTime ) );
11431143
}
11441144
#endif
11451145
}

include/ff_stdio.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -89,9 +89,9 @@
8989

9090
/* Note time_t must be used here otherwise will have bugs when 2032 (uint32_t second clock rolls over) */
9191
#if ( ffconfigTIME_SUPPORT == 1 )
92-
time_t st_atime;
93-
time_t st_mtime;
94-
time_t st_ctime;
92+
time_t ff_atime;
93+
time_t ff_mtime;
94+
time_t ff_ctime;
9595
#endif /* ffconfigTIME_SUPPORT */
9696
} FF_Stat_t;
9797

portable/ATSAM4E/ff_sddisk.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,15 @@ void FF_SDDiskFlush( FF_Disk_t * pxDisk )
310310
}
311311
/*-----------------------------------------------------------*/
312312

313+
FF_Disk_t * FF_SDDiskInitWithSettings( const char * pcName,
314+
const FFInitSettings_t * pxSettings )
315+
{
316+
( void ) pxSettings; /* Unused */
317+
318+
return FF_SDDiskInit( pcName );
319+
}
320+
/*-----------------------------------------------------------*/
321+
313322
/* Initialise the SDIO driver and mount an SD card */
314323
FF_Disk_t * FF_SDDiskInit( const char * pcName )
315324
{

portable/ATSAM4E/ff_sddisk_r.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,15 @@ void FF_SDDiskFlush( FF_Disk_t * pxDisk )
168168
}
169169
/*-----------------------------------------------------------*/
170170

171+
FF_Disk_t * FF_SDDiskInitWithSettings( const char * pcName,
172+
const FFInitSettings_t * pxSettings )
173+
{
174+
( void ) pxSettings; /* Unused */
175+
176+
return FF_SDDiskInit( pcName );
177+
}
178+
/*-----------------------------------------------------------*/
179+
171180
/* Initialise the SDIO driver and mount an SD card */
172181
FF_Disk_t * FF_SDDiskInit( const char * pcName )
173182
{

portable/STM32F4xx/ff_sddisk.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -423,6 +423,15 @@ static void vGPIO_SD_Init( SD_HandleTypeDef * xSDHandle )
423423
}
424424
/*-----------------------------------------------------------*/
425425

426+
FF_Disk_t * FF_SDDiskInitWithSettings( const char * pcName,
427+
const FFInitSettings_t * pxSettings )
428+
{
429+
( void ) pxSettings; /* Unused */
430+
431+
return FF_SDDiskInit( pcName );
432+
}
433+
/*-----------------------------------------------------------*/
434+
426435
FF_Disk_t * FF_SDDiskInit( const char * pcName )
427436
{
428437
FF_Error_t xFFError;

portable/STM32F7xx/ff_sddisk.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -539,6 +539,15 @@ static void vGPIO_SD_Init( SD_HandleTypeDef * xSDHandle )
539539
}
540540
/*-----------------------------------------------------------*/
541541

542+
FF_Disk_t * FF_SDDiskInitWithSettings( const char * pcName,
543+
const FFInitSettings_t * pxSettings )
544+
{
545+
( void ) pxSettings; /* Unused */
546+
547+
return FF_SDDiskInit( pcName );
548+
}
549+
/*-----------------------------------------------------------*/
550+
542551
FF_Disk_t * FF_SDDiskInit( const char * pcName )
543552
{
544553
FF_Error_t xFFError;

portable/Zynq.2019.3/ff_sddisk.c

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -432,20 +432,19 @@ static CacheMemoryInfo_t * pucGetSDIOCacheMemory( BaseType_t xPartition )
432432
}
433433
/*-----------------------------------------------------------*/
434434

435-
/* Initialise the SDIO driver and mount an SD card */
436-
BaseType_t xMountFailIgnore = 0;
435+
FF_Disk_t * FF_SDDiskInit( const char * pcName )
436+
{
437+
const FFInitSettings_t defaultSettings = {};
437438

438-
/* _HT_ : the function FF_SDDiskInit() used to mount partition-0.
439-
* It would be nice if it has a parameter indicating the partition
440-
* number.
441-
* As for now, the partion can be set with a global variable 'xDiskPartition'.
442-
*/
443-
BaseType_t xDiskPartition = 0;
439+
return FF_SDDiskInitWithSettings( pcName, &defaultSettings );
440+
}
441+
/*-----------------------------------------------------------*/
444442

445-
FF_Disk_t * FF_SDDiskInit( const char * pcName )
443+
/* Initialise the SDIO driver and mount an SD card */
444+
FF_Disk_t * FF_SDDiskInitWithSettings( const char * pcName,
445+
const FFInitSettings_t * pxSettings )
446446
{
447447
FF_Error_t xFFError;
448-
BaseType_t xPartitionNumber = xDiskPartition;
449448
FF_CreationParameters_t xParameters;
450449
FF_Disk_t * pxDisk = NULL;
451450
CacheMemoryInfo_t * pxCacheMem = NULL;
@@ -456,13 +455,13 @@ FF_Disk_t * FF_SDDiskInit( const char * pcName )
456455

457456
do
458457
{
459-
if( pucGetSDIOCacheMemory( xPartitionNumber ) == NULL )
458+
if( pucGetSDIOCacheMemory( pxSettings->xDiskPartition ) == NULL )
460459
{
461460
FF_PRINTF( "FF_SDDiskInit: Cached memory failed\n" );
462461
break;
463462
}
464463

465-
pxCacheMem = pxCacheMemories[ xPartitionNumber ];
464+
pxCacheMem = pxCacheMemories[ pxSettings->xDiskPartition ];
466465

467466
if( pxSDCardInstance == NULL )
468467
{
@@ -551,14 +550,14 @@ FF_Disk_t * FF_SDDiskInit( const char * pcName )
551550
}
552551

553552
pxDisk->xStatus.bIsInitialised = pdTRUE;
554-
pxDisk->xStatus.bPartitionNumber = xPartitionNumber;
553+
pxDisk->xStatus.bPartitionNumber = pxSettings->xDiskPartition;
555554

556555
if( FF_SDDiskMount( pxDisk ) == 0 )
557556
{
558557
/* _HT_ Suppose that the partition is not yet
559558
* formatted, it might be desireable to have a valid
560559
* i/o manager. */
561-
if( xMountFailIgnore == 0 )
560+
if( pxSettings->xMountFailIgnore == 0 )
562561
{
563562
FF_SDDiskDelete( pxDisk );
564563
pxDisk = NULL;

portable/Zynq/ff_sddisk.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -371,6 +371,15 @@ static struct xCACHE_MEMORY_INFO * pucGetSDIOCacheMemory()
371371
}
372372
/*-----------------------------------------------------------*/
373373

374+
FF_Disk_t * FF_SDDiskInitWithSettings( const char * pcName,
375+
const FFInitSettings_t * pxSettings )
376+
{
377+
( void ) pxSettings; /* Unused */
378+
379+
return FF_SDDiskInit( pcName );
380+
}
381+
/*-----------------------------------------------------------*/
382+
374383
/* Initialise the SDIO driver and mount an SD card */
375384
FF_Disk_t * FF_SDDiskInit( const char * pcName )
376385
{

portable/common/ff_sddisk.h

100755100644
Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,18 +28,28 @@
2828

2929
#define __SDDISK_H__
3030

31+
#include "ff_headers.h"
32+
3133
#ifdef __cplusplus
3234
extern "C" {
3335
#endif
3436

35-
#include "ff_headers.h"
37+
/* @brief Initialization settings for more granular control on init. */
38+
typedef struct FFInitSettings_s
39+
{
40+
BaseType_t xMountFailIgnore; /**< Ignore failure when mounting */
41+
BaseType_t xDiskPartition; /**< Default disk partition number */
42+
} FFInitSettings_t;
3643

3744

3845
/* Return non-zero if the SD-card is present.
3946
* The parameter 'pxDisk' may be null, unless device locking is necessary. */
4047
BaseType_t FF_SDDiskDetect( FF_Disk_t * pxDisk );
4148

4249
/* Create a RAM disk, supplying enough memory to hold N sectors of 512 bytes each */
50+
FF_Disk_t * FF_SDDiskInitWithSettings( const char * pcName,
51+
const FFInitSettings_t * pxSettings );
52+
4353
FF_Disk_t * FF_SDDiskInit( const char * pcName );
4454

4555
BaseType_t FF_SDDiskReinit( FF_Disk_t * pxDisk );

portable/linux/ff_sddisk.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,15 @@ void FF_SDDiskFlush( FF_Disk_t * pxDisk )
7474
}
7575
/*-----------------------------------------------------------*/
7676

77+
FF_Disk_t * FF_SDDiskInitWithSettings( const char * pcName,
78+
const FFInitSettings_t * pxSettings )
79+
{
80+
( void ) pxSettings; /* Unused */
81+
82+
return FF_SDDiskInit( pcName );
83+
}
84+
/*-----------------------------------------------------------*/
85+
7786
FF_Disk_t * FF_SDDiskInit( const char * pcName )
7887
{
7988
FF_Disk_t * pxDisk = NULL;

0 commit comments

Comments
 (0)