aboutsummaryrefslogtreecommitdiffstats
path: root/src/gfile
diff options
context:
space:
mode:
authorinmarket <andrewh@inmarket.com.au>2014-06-27 23:04:01 +1000
committerinmarket <andrewh@inmarket.com.au>2014-06-27 23:04:01 +1000
commita9f1520e02ed5425abbfb7e621f103053c2e3799 (patch)
treec4cf5e3b238bf83b58aaac87d03dc02746d56881 /src/gfile
parentc2a27f3e7c5700be2eb2f29bcfb677241f62703e (diff)
downloaduGFX-a9f1520e02ed5425abbfb7e621f103053c2e3799.tar.gz
uGFX-a9f1520e02ed5425abbfb7e621f103053c2e3799.tar.bz2
uGFX-a9f1520e02ed5425abbfb7e621f103053c2e3799.zip
Fatfs Cleanup
Diffstat (limited to 'src/gfile')
-rw-r--r--src/gfile/fatfs/fatfs.c20
-rw-r--r--src/gfile/fatfs/fatfs.mk6
-rw-r--r--src/gfile/fatfs/fatfs_chibios_diskio.c (renamed from src/gfile/fatfs/src/chibios_fatfs_diskio.c)511
-rw-r--r--src/gfile/fatfs/fatfs_syscall.c (renamed from src/gfile/fatfs/src/syscall.c)155
-rw-r--r--src/gfile/gfile.c44
-rw-r--r--src/gfile/inc_fatfs.c32
-rw-r--r--src/gfile/inc_nativefs.c4
-rw-r--r--src/gfile/sys_defs.h60
-rw-r--r--src/gfile/sys_options.h14
9 files changed, 433 insertions, 413 deletions
diff --git a/src/gfile/fatfs/fatfs.c b/src/gfile/fatfs/fatfs.c
new file mode 100644
index 00000000..f9d11aeb
--- /dev/null
+++ b/src/gfile/fatfs/fatfs.c
@@ -0,0 +1,20 @@
+/*
+ * This file is subject to the terms of the GFX License. If a copy of
+ * the license was not distributed with this file, you can obtain one at:
+ *
+ * http://ugfx.org/license.html
+ */
+
+/**
+ * @file src/gfile/fatfs/fatfs.c
+ * @brief GFILE FATFS wrapper.
+ *
+ */
+
+#include "gfx.h"
+
+#if GFX_USE_GFILE && GFILE_NEED_FATFS
+
+#include "src/ff.c"
+
+#endif // GFX_USE_GFILE && GFILE_NEED_FATFS
diff --git a/src/gfile/fatfs/fatfs.mk b/src/gfile/fatfs/fatfs.mk
index 0b540a41..683cea5b 100644
--- a/src/gfile/fatfs/fatfs.mk
+++ b/src/gfile/fatfs/fatfs.mk
@@ -1,6 +1,6 @@
-GFXSRC += $(GFXLIB)/src/gfile/fatfs/src/ff.c \
- $(GFXLIB)/src/gfile/fatfs/src/chibios_fatfs_diskio.c \
- $(GFXLIB)/src/gfile/fatfs/src/syscall.c
+GFXSRC += $(GFXLIB)/src/gfile/fatfs/fatfs.c \
+ $(GFXLIB)/src/gfile/fatfs/fatfs_syscall.c \
+ $(GFXLIB)/src/gfile/fatfs/fatfs_chibios_diskio.c
GFXINC += $(GFXLIB)/src/gfile/fatfs/src
diff --git a/src/gfile/fatfs/src/chibios_fatfs_diskio.c b/src/gfile/fatfs/fatfs_chibios_diskio.c
index f882aa41..d770e2a1 100644
--- a/src/gfile/fatfs/src/chibios_fatfs_diskio.c
+++ b/src/gfile/fatfs/fatfs_chibios_diskio.c
@@ -1,254 +1,257 @@
-/*-----------------------------------------------------------------------*/
-/* Low level disk I/O module skeleton for FatFs (C)ChaN, 2007 */
-/*-----------------------------------------------------------------------*/
-/* This is a stub disk I/O module that acts as front end of the existing */
-/* disk I/O modules and attach it to FatFs module with common interface. */
-/*-----------------------------------------------------------------------*/
-
-#include "ch.h"
-#include "hal.h"
-#include "ffconf.h"
-#include "diskio.h"
-
-#if HAL_USE_MMC_SPI && HAL_USE_SDC
-#error "cannot specify both MMC_SPI and SDC drivers"
-#endif
-
-#if HAL_USE_MMC_SPI
-extern MMCDriver MMCD1;
-#elif HAL_USE_SDC
-extern SDCDriver SDCD1;
-#else
-#error "MMC_SPI or SDC driver must be specified"
-#endif
-
-#if HAL_USE_RTC
-#include "chrtclib.h"
-extern RTCDriver RTCD1;
-#endif
-
-/*-----------------------------------------------------------------------*/
-/* Correspondence between physical drive number and physical drive. */
-
-#define MMC 0
-#define SDC 0
-
-
-
-/*-----------------------------------------------------------------------*/
-/* Inidialize a Drive */
-
-DSTATUS disk_initialize (
- BYTE drv /* Physical drive nmuber (0..) */
-)
-{
- DSTATUS stat;
-
- switch (drv) {
-#if HAL_USE_MMC_SPI
- case MMC:
- stat = 0;
- /* It is initialized externally, just reads the status.*/
- if (blkGetDriverState(&MMCD1) != BLK_READY)
- stat |= STA_NOINIT;
- if (mmcIsWriteProtected(&MMCD1))
- stat |= STA_PROTECT;
- return stat;
-#else
- case SDC:
- stat = 0;
- /* It is initialized externally, just reads the status.*/
- if (blkGetDriverState(&SDCD1) != BLK_READY)
- stat |= STA_NOINIT;
- if (sdcIsWriteProtected(&SDCD1))
- stat |= STA_PROTECT;
- return stat;
-#endif
- }
- return STA_NODISK;
-}
-
-
-
-/*-----------------------------------------------------------------------*/
-/* Return Disk Status */
-
-DSTATUS disk_status (
- BYTE drv /* Physical drive nmuber (0..) */
-)
-{
- DSTATUS stat;
-
- switch (drv) {
-#if HAL_USE_MMC_SPI
- case MMC:
- stat = 0;
- /* It is initialized externally, just reads the status.*/
- if (blkGetDriverState(&MMCD1) != BLK_READY)
- stat |= STA_NOINIT;
- if (mmcIsWriteProtected(&MMCD1))
- stat |= STA_PROTECT;
- return stat;
-#else
- case SDC:
- stat = 0;
- /* It is initialized externally, just reads the status.*/
- if (blkGetDriverState(&SDCD1) != BLK_READY)
- stat |= STA_NOINIT;
- if (sdcIsWriteProtected(&SDCD1))
- stat |= STA_PROTECT;
- return stat;
-#endif
- }
- return STA_NODISK;
-}
-
-
-
-/*-----------------------------------------------------------------------*/
-/* Read Sector(s) */
-
-DRESULT disk_read (
- BYTE drv, /* Physical drive nmuber (0..) */
- BYTE *buff, /* Data buffer to store read data */
- DWORD sector, /* Sector address (LBA) */
- UINT count /* Number of sectors to read (1..255) */
-)
-{
- switch (drv) {
-#if HAL_USE_MMC_SPI
- case MMC:
- if (blkGetDriverState(&MMCD1) != BLK_READY)
- return RES_NOTRDY;
- if (mmcStartSequentialRead(&MMCD1, sector))
- return RES_ERROR;
- while (count > 0) {
- if (mmcSequentialRead(&MMCD1, buff))
- return RES_ERROR;
- buff += MMCSD_BLOCK_SIZE;
- count--;
- }
- if (mmcStopSequentialRead(&MMCD1))
- return RES_ERROR;
- return RES_OK;
-#else
- case SDC:
- if (blkGetDriverState(&SDCD1) != BLK_READY)
- return RES_NOTRDY;
- if (sdcRead(&SDCD1, sector, buff, count))
- return RES_ERROR;
- return RES_OK;
-#endif
- }
- return RES_PARERR;
-}
-
-
-
-/*-----------------------------------------------------------------------*/
-/* Write Sector(s) */
-
-#if _READONLY == 0
-DRESULT disk_write (
- BYTE drv, /* Physical drive nmuber (0..) */
- const BYTE *buff, /* Data to be written */
- DWORD sector, /* Sector address (LBA) */
- UINT count /* Number of sectors to write (1..255) */
-)
-{
- switch (drv) {
-#if HAL_USE_MMC_SPI
- case MMC:
- if (blkGetDriverState(&MMCD1) != BLK_READY)
- return RES_NOTRDY;
- if (mmcIsWriteProtected(&MMCD1))
- return RES_WRPRT;
- if (mmcStartSequentialWrite(&MMCD1, sector))
- return RES_ERROR;
- while (count > 0) {
- if (mmcSequentialWrite(&MMCD1, buff))
- return RES_ERROR;
- buff += MMCSD_BLOCK_SIZE;
- count--;
- }
- if (mmcStopSequentialWrite(&MMCD1))
- return RES_ERROR;
- return RES_OK;
-#else
- case SDC:
- if (blkGetDriverState(&SDCD1) != BLK_READY)
- return RES_NOTRDY;
- if (sdcWrite(&SDCD1, sector, buff, count))
- return RES_ERROR;
- return RES_OK;
-#endif
- }
- return RES_PARERR;
-}
-#endif /* _READONLY */
-
-
-
-/*-----------------------------------------------------------------------*/
-/* Miscellaneous Functions */
-
-DRESULT disk_ioctl (
- BYTE drv, /* Physical drive nmuber (0..) */
- BYTE ctrl, /* Control code */
- void *buff /* Buffer to send/receive control data */
-)
-{
- switch (drv) {
-#if HAL_USE_MMC_SPI
- case MMC:
- switch (ctrl) {
- case CTRL_SYNC:
- return RES_OK;
- case GET_SECTOR_SIZE:
- *((WORD *)buff) = MMCSD_BLOCK_SIZE;
- return RES_OK;
-#if _USE_ERASE
- case CTRL_ERASE_SECTOR:
- mmcErase(&MMCD1, *((DWORD *)buff), *((DWORD *)buff + 1));
- return RES_OK;
-#endif
- default:
- return RES_PARERR;
- }
-#else
- case SDC:
- switch (ctrl) {
- case CTRL_SYNC:
- return RES_OK;
- case GET_SECTOR_COUNT:
- *((DWORD *)buff) = mmcsdGetCardCapacity(&SDCD1);
- return RES_OK;
- case GET_SECTOR_SIZE:
- *((WORD *)buff) = MMCSD_BLOCK_SIZE;
- return RES_OK;
- case GET_BLOCK_SIZE:
- *((DWORD *)buff) = 256; /* 512b blocks in one erase block */
- return RES_OK;
-#if _USE_ERASE
- case CTRL_ERASE_SECTOR:
- sdcErase(&SDCD1, *((DWORD *)buff), *((DWORD *)buff + 1));
- return RES_OK;
-#endif
- default:
- return RES_PARERR;
- }
-#endif
- }
- return RES_PARERR;
-}
-
-DWORD get_fattime(void) {
-#if HAL_USE_RTC
- return rtcGetTimeFat(&RTCD1);
-#else
- return ((uint32_t)0 | (1 << 16)) | (1 << 21); /* wrong but valid time */
-#endif
-}
-
-
-
+/*-----------------------------------------------------------------------*/
+/* Low level disk I/O module skeleton for FatFs (C)ChaN, 2007 */
+/*-----------------------------------------------------------------------*/
+/* This is a stub disk I/O module that acts as front end of the existing */
+/* disk I/O modules and attach it to FatFs module with common interface. */
+/*-----------------------------------------------------------------------*/
+
+#include "gfx.h"
+
+#if GFX_USE_GFILE && GFILE_NEED_FATFS && GFX_USE_OS_CHIBIOS
+
+#include "ffconf.h"
+#include "diskio.h"
+
+#if HAL_USE_MMC_SPI && HAL_USE_SDC
+#error "cannot specify both MMC_SPI and SDC drivers"
+#endif
+
+#if HAL_USE_MMC_SPI
+extern MMCDriver MMCD1;
+#elif HAL_USE_SDC
+extern SDCDriver SDCD1;
+#else
+#error "MMC_SPI or SDC driver must be specified"
+#endif
+
+#if HAL_USE_RTC
+#include "chrtclib.h"
+extern RTCDriver RTCD1;
+#endif
+
+/*-----------------------------------------------------------------------*/
+/* Correspondence between physical drive number and physical drive. */
+
+#define MMC 0
+#define SDC 0
+
+
+
+/*-----------------------------------------------------------------------*/
+/* Inidialize a Drive */
+
+DSTATUS disk_initialize (
+ BYTE drv /* Physical drive nmuber (0..) */
+)
+{
+ DSTATUS stat;
+
+ switch (drv) {
+#if HAL_USE_MMC_SPI
+ case MMC:
+ stat = 0;
+ /* It is initialized externally, just reads the status.*/
+ if (blkGetDriverState(&MMCD1) != BLK_READY)
+ stat |= STA_NOINIT;
+ if (mmcIsWriteProtected(&MMCD1))
+ stat |= STA_PROTECT;
+ return stat;
+#else
+ case SDC:
+ stat = 0;
+ /* It is initialized externally, just reads the status.*/
+ if (blkGetDriverState(&SDCD1) != BLK_READY)
+ stat |= STA_NOINIT;
+ if (sdcIsWriteProtected(&SDCD1))
+ stat |= STA_PROTECT;
+ return stat;
+#endif
+ }
+ return STA_NODISK;
+}
+
+
+
+/*-----------------------------------------------------------------------*/
+/* Return Disk Status */
+
+DSTATUS disk_status (
+ BYTE drv /* Physical drive nmuber (0..) */
+)
+{
+ DSTATUS stat;
+
+ switch (drv) {
+#if HAL_USE_MMC_SPI
+ case MMC:
+ stat = 0;
+ /* It is initialized externally, just reads the status.*/
+ if (blkGetDriverState(&MMCD1) != BLK_READY)
+ stat |= STA_NOINIT;
+ if (mmcIsWriteProtected(&MMCD1))
+ stat |= STA_PROTECT;
+ return stat;
+#else
+ case SDC:
+ stat = 0;
+ /* It is initialized externally, just reads the status.*/
+ if (blkGetDriverState(&SDCD1) != BLK_READY)
+ stat |= STA_NOINIT;
+ if (sdcIsWriteProtected(&SDCD1))
+ stat |= STA_PROTECT;
+ return stat;
+#endif
+ }
+ return STA_NODISK;
+}
+
+
+
+/*-----------------------------------------------------------------------*/
+/* Read Sector(s) */
+
+DRESULT disk_read (
+ BYTE drv, /* Physical drive nmuber (0..) */
+ BYTE *buff, /* Data buffer to store read data */
+ DWORD sector, /* Sector address (LBA) */
+ UINT count /* Number of sectors to read (1..255) */
+)
+{
+ switch (drv) {
+#if HAL_USE_MMC_SPI
+ case MMC:
+ if (blkGetDriverState(&MMCD1) != BLK_READY)
+ return RES_NOTRDY;
+ if (mmcStartSequentialRead(&MMCD1, sector))
+ return RES_ERROR;
+ while (count > 0) {
+ if (mmcSequentialRead(&MMCD1, buff))
+ return RES_ERROR;
+ buff += MMCSD_BLOCK_SIZE;
+ count--;
+ }
+ if (mmcStopSequentialRead(&MMCD1))
+ return RES_ERROR;
+ return RES_OK;
+#else
+ case SDC:
+ if (blkGetDriverState(&SDCD1) != BLK_READY)
+ return RES_NOTRDY;
+ if (sdcRead(&SDCD1, sector, buff, count))
+ return RES_ERROR;
+ return RES_OK;
+#endif
+ }
+ return RES_PARERR;
+}
+
+
+
+/*-----------------------------------------------------------------------*/
+/* Write Sector(s) */
+
+#if _READONLY == 0
+DRESULT disk_write (
+ BYTE drv, /* Physical drive nmuber (0..) */
+ const BYTE *buff, /* Data to be written */
+ DWORD sector, /* Sector address (LBA) */
+ UINT count /* Number of sectors to write (1..255) */
+)
+{
+ switch (drv) {
+#if HAL_USE_MMC_SPI
+ case MMC:
+ if (blkGetDriverState(&MMCD1) != BLK_READY)
+ return RES_NOTRDY;
+ if (mmcIsWriteProtected(&MMCD1))
+ return RES_WRPRT;
+ if (mmcStartSequentialWrite(&MMCD1, sector))
+ return RES_ERROR;
+ while (count > 0) {
+ if (mmcSequentialWrite(&MMCD1, buff))
+ return RES_ERROR;
+ buff += MMCSD_BLOCK_SIZE;
+ count--;
+ }
+ if (mmcStopSequentialWrite(&MMCD1))
+ return RES_ERROR;
+ return RES_OK;
+#else
+ case SDC:
+ if (blkGetDriverState(&SDCD1) != BLK_READY)
+ return RES_NOTRDY;
+ if (sdcWrite(&SDCD1, sector, buff, count))
+ return RES_ERROR;
+ return RES_OK;
+#endif
+ }
+ return RES_PARERR;
+}
+#endif /* _READONLY */
+
+
+
+/*-----------------------------------------------------------------------*/
+/* Miscellaneous Functions */
+
+DRESULT disk_ioctl (
+ BYTE drv, /* Physical drive nmuber (0..) */
+ BYTE ctrl, /* Control code */
+ void *buff /* Buffer to send/receive control data */
+)
+{
+ switch (drv) {
+#if HAL_USE_MMC_SPI
+ case MMC:
+ switch (ctrl) {
+ case CTRL_SYNC:
+ return RES_OK;
+ case GET_SECTOR_SIZE:
+ *((WORD *)buff) = MMCSD_BLOCK_SIZE;
+ return RES_OK;
+#if _USE_ERASE
+ case CTRL_ERASE_SECTOR:
+ mmcErase(&MMCD1, *((DWORD *)buff), *((DWORD *)buff + 1));
+ return RES_OK;
+#endif
+ default:
+ return RES_PARERR;
+ }
+#else
+ case SDC:
+ switch (ctrl) {
+ case CTRL_SYNC:
+ return RES_OK;
+ case GET_SECTOR_COUNT:
+ *((DWORD *)buff) = mmcsdGetCardCapacity(&SDCD1);
+ return RES_OK;
+ case GET_SECTOR_SIZE:
+ *((WORD *)buff) = MMCSD_BLOCK_SIZE;
+ return RES_OK;
+ case GET_BLOCK_SIZE:
+ *((DWORD *)buff) = 256; /* 512b blocks in one erase block */
+ return RES_OK;
+#if _USE_ERASE
+ case CTRL_ERASE_SECTOR:
+ sdcErase(&SDCD1, *((DWORD *)buff), *((DWORD *)buff + 1));
+ return RES_OK;
+#endif
+ default:
+ return RES_PARERR;
+ }
+#endif
+ }
+ return RES_PARERR;
+}
+
+DWORD get_fattime(void) {
+#if HAL_USE_RTC
+ return rtcGetTimeFat(&RTCD1);
+#else
+ return ((uint32_t)0 | (1 << 16)) | (1 << 21); /* wrong but valid time */
+#endif
+}
+
+#endif // GFX_USE_GFILE && GFILE_NEED_FATFS && GFX_USE_OS_CHIBIOS
+
+
diff --git a/src/gfile/fatfs/src/syscall.c b/src/gfile/fatfs/fatfs_syscall.c
index ccc22bdb..80342731 100644
--- a/src/gfile/fatfs/src/syscall.c
+++ b/src/gfile/fatfs/fatfs_syscall.c
@@ -1,75 +1,80 @@
-/*
- * This file is subject to the terms of the GFX License. If a copy of
- * the license was not distributed with this file, you can obtain one at:
- *
- * http://ugfx.org/license.html
- */
-
-#include "gfx.h"
-#include "ff.h"
-
-#if _FS_REENTRANT
-
-/*------------------------------------------------------------------------*/
-/* Static array of Synchronization Objects */
-/*------------------------------------------------------------------------*/
-static gfxSem ff_sem[_VOLUMES];
-
-/*------------------------------------------------------------------------*/
-/* Create a Synchronization Object */
-/*------------------------------------------------------------------------*/
-int ff_cre_syncobj(BYTE vol, _SYNC_t *sobj)
-{
- *sobj = ff_sem[vol];
- gfxSemInit(sobj, 1, MAX_SEMAPHORE_COUNT);
-
- return 1;
-}
-
-/*------------------------------------------------------------------------*/
-/* Delete a Synchronization Object */
-/*------------------------------------------------------------------------*/
-int ff_del_syncobj(_SYNC_t sobj)
-{
- gfxSemDestroy( (gfxSem*)&sobj );
-
- return 1;
-}
-
-/*------------------------------------------------------------------------*/
-/* Request Grant to Access the Volume */
-/*------------------------------------------------------------------------*/
-int ff_req_grant(_SYNC_t sobj)
-{
- if (gfxSemWait( (gfxSem*)&sobj, (delaytime_t)_FS_TIMEOUT) )
- return TRUE;
- return FALSE;
-}
-
-/*------------------------------------------------------------------------*/
-/* Release Grant to Access the Volume */
-/*------------------------------------------------------------------------*/
-void ff_rel_grant(_SYNC_t sobj)
-{
- gfxSemSignal( (gfxSem*)&sobj );
-}
-#endif /* _FS_REENTRANT */
-
-#if _USE_LFN == 3 /* LFN with a working buffer on the heap */
-/*------------------------------------------------------------------------*/
-/* Allocate a memory block */
-/*------------------------------------------------------------------------*/
-void *ff_memalloc(UINT size)
-{
- return gfxAlloc( (size_t)size );
-}
-
-/*------------------------------------------------------------------------*/
-/* Free a memory block */
-/*------------------------------------------------------------------------*/
-void ff_memfree(void *mblock)
-{
- gfxFree(mblock);
-}
-#endif /* _USE_LFN == 3 */
-
+/*
+ * This file is subject to the terms of the GFX License. If a copy of
+ * the license was not distributed with this file, you can obtain one at:
+ *
+ * http://ugfx.org/license.html
+ */
+
+#include "gfx.h"
+
+#if GFX_USE_GFILE && GFILE_NEED_FATFS
+
+#include "ff.h"
+
+#if _FS_REENTRANT
+
+/*------------------------------------------------------------------------*/
+/* Static array of Synchronization Objects */
+/*------------------------------------------------------------------------*/
+static gfxSem ff_sem[_VOLUMES];
+
+/*------------------------------------------------------------------------*/
+/* Create a Synchronization Object */
+/*------------------------------------------------------------------------*/
+int ff_cre_syncobj(BYTE vol, _SYNC_t *sobj)
+{
+ *sobj = ff_sem[vol];
+ gfxSemInit(sobj, 1, MAX_SEMAPHORE_COUNT);
+
+ return 1;
+}
+
+/*------------------------------------------------------------------------*/
+/* Delete a Synchronization Object */
+/*------------------------------------------------------------------------*/
+int ff_del_syncobj(_SYNC_t sobj)
+{
+ gfxSemDestroy( (gfxSem*)&sobj );
+
+ return 1;
+}
+
+/*------------------------------------------------------------------------*/
+/* Request Grant to Access the Volume */
+/*------------------------------------------------------------------------*/
+int ff_req_grant(_SYNC_t sobj)
+{
+ if (gfxSemWait( (gfxSem*)&sobj, (delaytime_t)_FS_TIMEOUT) )
+ return TRUE;
+ return FALSE;
+}
+
+/*------------------------------------------------------------------------*/
+/* Release Grant to Access the Volume */
+/*------------------------------------------------------------------------*/
+void ff_rel_grant(_SYNC_t sobj)
+{
+ gfxSemSignal( (gfxSem*)&sobj );
+}
+#endif /* _FS_REENTRANT */
+
+#if _USE_LFN == 3 /* LFN with a working buffer on the heap */
+/*------------------------------------------------------------------------*/
+/* Allocate a memory block */
+/*------------------------------------------------------------------------*/
+void *ff_memalloc(UINT size)
+{
+ return gfxAlloc( (size_t)size );
+}
+
+/*------------------------------------------------------------------------*/
+/* Free a memory block */
+/*------------------------------------------------------------------------*/
+void ff_memfree(void *mblock)
+{
+ gfxFree(mblock);
+}
+#endif /* _USE_LFN == 3 */
+
+#endif // GFX_USE_GFILE && GFILE_NEED_FATFS
+
diff --git a/src/gfile/gfile.c b/src/gfile/gfile.c
index a410a801..b7ebbc97 100644
--- a/src/gfile/gfile.c
+++ b/src/gfile/gfile.c
@@ -477,35 +477,33 @@ bool_t gfileEOF(GFILE *f) {
return f->vmt->eof(f);
}
-#if GFILE_NEED_FATFS
- bool_t gfileMount(char fs, const char* drive) {
- const GFILEVMT *p;
-
- // Find the correct VMT
- for(p = FsChain; p; p = p->next) {
- if (p->prefix == fs) {
- if (!p->mount)
- return FALSE;
- return p->mount(drive);
- }
+bool_t gfileMount(char fs, const char* drive) {
+ const GFILEVMT *p;
+
+ // Find the correct VMT
+ for(p = FsChain; p; p = p->next) {
+ if (p->prefix == fs) {
+ if (!p->mount)
+ return FALSE;
+ return p->mount(drive);
}
- return FALSE;
}
+ return FALSE;
+}
- bool_t gfileUnmount(char fs, const char* drive) {
- const GFILEVMT *p;
+bool_t gfileUnmount(char fs, const char* drive) {
+ const GFILEVMT *p;
- // Find the correct VMT
- for(p = FsChain; p; p = p->next) {
- if (p->prefix == fs) {
- if (!p->mount)
- return FALSE;
- return p->unmount(drive);
- }
+ // Find the correct VMT
+ for(p = FsChain; p; p = p->next) {
+ if (p->prefix == fs) {
+ if (!p->mount)
+ return FALSE;
+ return p->unmount(drive);
}
- return FALSE;
}
-#endif
+ return FALSE;
+}
/********************************************************
* String VMT routines
diff --git a/src/gfile/inc_fatfs.c b/src/gfile/inc_fatfs.c
index ff75eb3b..a9066bf9 100644
--- a/src/gfile/inc_fatfs.c
+++ b/src/gfile/inc_fatfs.c
@@ -56,20 +56,21 @@ static const GFILEVMT FsFatFSVMT = {
static bool_t fatfs_mounted = FALSE;
static FATFS fatfs_fs;
-static void _flags2mode(GFILE* f, BYTE* mode)
+static BYTE fatfs_flags2mode(GFILE* f)
{
- *mode = 0;
+ BYTE mode = 0;
if (f->flags & GFILEFLG_READ)
- *mode |= FA_READ;
+ mode |= FA_READ;
if (f->flags & GFILEFLG_WRITE)
- *mode |= FA_WRITE;
+ mode |= FA_WRITE;
if (f->flags & GFILEFLG_APPEND)
- *mode |= 0; // ToDo
+ mode |= 0; // ToDo
if (f->flags & GFILEFLG_TRUNC)
- *mode |= FA_CREATE_ALWAYS;
+ mode |= FA_CREATE_ALWAYS;
- /* ToDo - Complete */
+ /* ToDo - Complete */
+ return mode;
}
static bool_t fatfsDel(const char* fname)
@@ -121,19 +122,16 @@ static bool_t fatfsRename(const char* oldname, const char* newname)
static bool_t fatfsOpen(GFILE* f, const char* fname)
{
FIL* fd;
- BYTE mode;
- FRESULT ferr;
-/*
- if (!fatfs_mounted && !fatfsMount(""))
- return FALSE;
-*/
+
+ #if !GFILE_NEED_NOAUTOMOUNT
+ if (!fatfs_mounted && !fatfsMount(""))
+ return FALSE;
+ #endif
+
if (!(fd = gfxAlloc(sizeof(FIL))))
return FALSE;
- _flags2mode(f, &mode);
-
- ferr = f_open(fd, fname, mode);
- if (ferr != FR_OK) {
+ if (f_open(fd, fname, fatfs_flags2mode(f)) != FR_OK) {
gfxFree(fd);
f->obj = 0;
diff --git a/src/gfile/inc_nativefs.c b/src/gfile/inc_nativefs.c
index 26dc33c5..98e0ab10 100644
--- a/src/gfile/inc_nativefs.c
+++ b/src/gfile/inc_nativefs.c
@@ -51,7 +51,7 @@ static const GFILEVMT FsNativeVMT = {
#undef GFILE_CHAINHEAD
#define GFILE_CHAINHEAD &FsNativeVMT
-static void flags2mode(char *buf, uint16_t flags) {
+static void Native_flags2mode(char *buf, uint16_t flags) {
if (flags & GFILEFLG_MUSTEXIST)
*buf = 'r';
else if (flags & GFILEFLG_APPEND)
@@ -90,7 +90,7 @@ static bool_t NativeOpen(GFILE *f, const char *fname) {
FILE *fd;
char mode[5];
- flags2mode(mode, f->flags);
+ Native_flags2mode(mode, f->flags);
if (!(fd = fopen(fname, mode)))
return FALSE;
f->obj = (void *)fd;
diff --git a/src/gfile/sys_defs.h b/src/gfile/sys_defs.h
index cf5235d2..6b1d27ff 100644
--- a/src/gfile/sys_defs.h
+++ b/src/gfile/sys_defs.h
@@ -197,6 +197,35 @@ extern "C" {
*/
bool_t gfileEOF(GFILE *f);
+ /**
+ * @brief Mount a logical drive (aka partition)
+ *
+ * @details Not supported by every file system
+ * @details Currently just one drive at one is supported.
+ *
+ * @param[in] fs The file system (F for FatFS)
+ * @param[in] drive The logical drive prefix
+ *
+ * @return TRUE on success, FALSE otherwise
+ *
+ * @api
+ */
+ bool_t gfileMount(char fs, const char *drive);
+
+ /**
+ * @brief Unmount a logical drive (aka partition)
+ *
+ * @details Does have no effect if @p gfileMount() as been called before hand
+ *
+ * @param[in] fs The file system (F for FatFS)
+ * @param[in] drive The logical drive prefix
+ *
+ * @return TRUE on success, FALSE otherwise
+ *
+ * @api
+ */
+ bool_t gfileUnmount(char fs, const char *drive);
+
#if GFILE_NEED_CHIBIOSFS && GFX_USE_OS_CHIBIOS
GFILE * gfileOpenBaseFileStream(void *BaseFileStreamPtr, const char *mode);
#endif
@@ -205,37 +234,6 @@ extern "C" {
GFILE * gfileOpenMemory(void *memptr, const char *mode);
#endif
- #if GFILE_NEED_FATFS
- /**
- * @brief Mount a logical drive (aka partition)
- *
- * @details Not supported by every file system
- * @details Currently just one drive at one is supported.
- *
- * @param[in] fs The file system (F for FatFS)
- * @param[in] drive The logical drive prefix
- *
- * @return TRUE on success, FALSE otherwise
- *
- * @api
- */
- bool_t gfileMount(char fs, const char *drive);
-
- /**
- * @brief Unmount a logical drive (aka partition)
- *
- * @details Does have no effect if @p gfileMount() as been called before hand
- *
- * @param[in] fs The file system (F for FatFS)
- * @param[in] drive The logical drive prefix
- *
- * @return TRUE on success, FALSE otherwise
- *
- * @api
- */
- bool_t gfileUnmount(char fs, const char *drive);
- #endif
-
#if GFILE_NEED_PRINTG
#include <stdarg.h>
diff --git a/src/gfile/sys_options.h b/src/gfile/sys_options.h
index 71eb6611..41cf6a63 100644
--- a/src/gfile/sys_options.h
+++ b/src/gfile/sys_options.h
@@ -21,16 +21,14 @@
* @{
*/
/**
- * @brief Should the filesystem be mounted automatically
- * @details The filesystem will be mounted automatically if the
- * user does not do it manually.
+ * @brief Should the filesystem not be mounted automatically
+ * @details The filesystem is normally mounted automatically if the
+ * user does not do it manually. This option turns that off
+ * so the user must manually mount the file-system first.
* @details Defaults to FALSE
- *
- * @note Only available for filesystems that actually implement a
- * mounting routine.
*/
- #ifndef GFILE_NEED_AUTOMOUNT
- #define GFILE_NEED_AUTOMOUNT FALSE
+ #ifndef GFILE_NEED_NOAUTOMOUNT
+ #define GFILE_NEED_NOAUTOMOUNT FALSE
#endif
/**
* @brief Include printg, fprintg etc functions