Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions components/dfs/dfs_v1/filesystems/elmfat/00history.txt
Original file line number Diff line number Diff line change
Expand Up @@ -357,3 +357,33 @@ R0.14b (April 17, 2021)
Fixed some compiler warnings.



R0.15 (November 6, 2022)
Changed user provided synchronization functions in order to completely eliminate the platform dependency from FatFs code.
FF_SYNC_t is removed from the configuration options.
Fixed a potential error in f_mount when FF_FS_REENTRANT.
Fixed file lock control FF_FS_LOCK is not mutal excluded when FF_FS_REENTRANT && FF_VOLUMES > 1 is true.
Fixed f_mkfs() creates broken exFAT volume when the size of volume is >= 2^32 sectors.
Fixed string functions cannot write the unicode characters not in BMP when FF_LFN_UNICODE == 2 (UTF-8).
Fixed a compatibility issue in identification of GPT header.



R0.15a (November 22, 2024)
Fixed a complie error when FF_FS_LOCK != 0.
Fixed a potential issue when work FatFs concurrency with FF_FS_REENTRANT, FF_VOLUMES >= 2 and FF_FS_LOCK > 0.
Made f_setlabel() accept a volume label in Unix style volume ID when FF_STR_VOLUME_ID == 2.
Made FatFs update PercInUse field in exFAT VBR. (A preceding f_getfree() is needed for the accuracy)



R0.15b (June 21, 2025)
Added support for timestamp of created time. (FF_FS_CRTIME)
Fixed FatFs fails to load the FsInfo in FAT32 volumes and the f_getfree always be forced a full FAT scan which takes a long time. (appeared at R0.15a)



R0.16 (July 22, 2025)
Removed a long-pending limitation that f_getcwd and double-dot .. in the path name did not work on the exFAT volume.
Fixed f_readdir cannot detect end of directory and it leads the application process into infinite loop. (appeared at R0.15b)
Fixed dot names with terminating separator or duplicated separator are rejected when LFN is not enabled.
2 changes: 1 addition & 1 deletion components/dfs/dfs_v1/filesystems/elmfat/00readme.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FatFs Module Source Files R0.14b
FatFs Module Source Files R0.16


FILES
Expand Down
24 changes: 12 additions & 12 deletions components/dfs/dfs_v1/filesystems/elmfat/dfs_elm.c
Original file line number Diff line number Diff line change
Expand Up @@ -999,41 +999,41 @@ DWORD get_fattime(void)
}

#if FF_FS_REENTRANT
int ff_cre_syncobj(BYTE drv, FF_SYNC_t *m)
static rt_mutex_t Mutex[FF_VOLUMES + 1];

int ff_mutex_create (int vol)
{
char name[8];
rt_mutex_t mutex;

rt_snprintf(name, sizeof(name), "fat%d", drv);
rt_snprintf(name, sizeof(name), "fat%d", vol);
mutex = rt_mutex_create(name, RT_IPC_FLAG_PRIO);
if (mutex != RT_NULL)
{
*m = mutex;
Mutex[vol] = mutex;
return RT_TRUE;
}

return RT_FALSE;
}

int ff_del_syncobj(FF_SYNC_t m)
void ff_mutex_delete (int vol)
{
if (m != RT_NULL)
rt_mutex_delete(m);

return RT_TRUE;
if (Mutex[vol] != RT_NULL)
rt_mutex_delete(Mutex[vol]);
}

int ff_req_grant(FF_SYNC_t m)
int ff_mutex_take (int vol)
{
if (rt_mutex_take(m, FF_FS_TIMEOUT) == RT_EOK)
if (rt_mutex_take(Mutex[vol], FF_FS_TIMEOUT) == RT_EOK)
return RT_TRUE;

return RT_FALSE;
}

void ff_rel_grant(FF_SYNC_t m)
void ff_mutex_give (int vol)
{
rt_mutex_release(m);
rt_mutex_release(Mutex[vol]);
}

#endif
Expand Down
6 changes: 3 additions & 3 deletions components/dfs/dfs_v1/filesystems/elmfat/diskio.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*-----------------------------------------------------------------------/
/ Low level disk interface modlue include file (C)ChaN, 2019 /
/ Low level disk interface modlue include file (C)ChaN, 2025 /
/-----------------------------------------------------------------------*/

#ifndef _DISKIO_DEFINED
Expand Down Expand Up @@ -55,7 +55,7 @@ DRESULT disk_ioctl (BYTE pdrv, BYTE cmd, void* buff);
#define CTRL_EJECT 7 /* Eject media */
#define CTRL_FORMAT 8 /* Create physical format on the media */

/* MMC/SDC specific ioctl command */
/* MMC/SDC specific ioctl command (Not used by FatFs) */
#define MMC_GET_TYPE 10 /* Get card type */
#define MMC_GET_CSD 11 /* Get CSD */
#define MMC_GET_CID 12 /* Get CID */
Expand All @@ -65,7 +65,7 @@ DRESULT disk_ioctl (BYTE pdrv, BYTE cmd, void* buff);
#define ISDIO_WRITE 56 /* Write data to SD iSDIO register */
#define ISDIO_MRITE 57 /* Masked write data to SD iSDIO register */

/* ATA/CF specific ioctl command */
/* ATA/CF specific ioctl command (Not used by FatFs) */
#define ATA_GET_REV 20 /* Get F/W revision */
#define ATA_GET_MODEL 21 /* Get model name */
#define ATA_GET_SN 22 /* Get serial number */
Expand Down
Loading
Loading