mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2026-09-23 20:57:20 +08:00
update elmfat to R0.08b
git-svn-id: https://rt-thread.googlecode.com/svn/trunk@1336 bbd45198-f89e-11dd-88c7-29a3b14d5316
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
FatFs Module Source Files R0.07e (C)ChaN, 2009
|
||||
FatFs Module Source Files R0.08b (C)ChaN, 2011
|
||||
|
||||
|
||||
FILES
|
||||
@@ -7,7 +7,6 @@ FILES
|
||||
ff.h Common include file for FatFs and application module.
|
||||
ff.c FatFs module.
|
||||
diskio.h Common include file for FatFs and disk I/O module.
|
||||
diskio.c Skeleton of low level disk I/O module.
|
||||
integer.h Alternative type definitions for integer variables.
|
||||
option Optional external functions.
|
||||
|
||||
@@ -24,7 +23,7 @@ AGREEMENTS
|
||||
small embedded systems. This is a free software and is opened for education,
|
||||
research and commercial developments under license policy of following trems.
|
||||
|
||||
Copyright (C) 2009, ChaN, all right reserved.
|
||||
Copyright (C) 2011, ChaN, all right reserved.
|
||||
|
||||
* The FatFs module is a free software and there is NO WARRANTY.
|
||||
* No restriction on use. You can use, modify and redistribute it for
|
||||
@@ -103,8 +102,26 @@ REVISION HISTORY
|
||||
Added f_chdrive().
|
||||
Added proper case conversion for extended characters.
|
||||
|
||||
Nov 03,'2009 R0.07e Separated out configuration options from ff.h to ffconf.h.
|
||||
Nov 03, 2009 R0.07e Separated out configuration options from ff.h to ffconf.h.
|
||||
Added a configuration option, _LFN_UNICODE.
|
||||
Fixed f_unlink() fails to remove a sub-dir on _FS_RPATH.
|
||||
Fixed name matching error on the 13 char boundary.
|
||||
Changed f_readdir() to return the SFN with always upper case on non-LFN cfg.
|
||||
|
||||
May 15, 2010, R0.08 Added a memory configuration option. (_USE_LFN)
|
||||
Added file lock feature. (_FS_SHARE)
|
||||
Added fast seek feature. (_USE_FASTSEEK)
|
||||
Changed some types on the API, XCHAR->TCHAR.
|
||||
Changed fname member in the FILINFO structure on Unicode cfg.
|
||||
String functions support UTF-8 encoding files on Unicode cfg.
|
||||
|
||||
Aug 16,'10 R0.08a Added f_getcwd(). (_FS_RPATH = 2)
|
||||
Added sector erase feature. (_USE_ERASE)
|
||||
Moved file lock semaphore table from fs object to the bss.
|
||||
Fixed a wrong directory entry is created on non-LFN cfg when the given name contains ';'.
|
||||
Fixed f_mkfs() creates wrong FAT32 volume.
|
||||
|
||||
Jan 15,'11 R0.08b Fast seek feature is also applied to f_read() and f_write().
|
||||
f_lseek() reports required table size on creating CLMP.
|
||||
Extended format syntax of f_printf function.
|
||||
Ignores duplicated directory separators in given path names.
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
#include <dfs_fs.h>
|
||||
#include <dfs_def.h>
|
||||
|
||||
static rt_device_t disk[_DRIVES] = {0};
|
||||
static rt_device_t disk[_VOLUMES] = {0};
|
||||
|
||||
static int elm_result_to_dfs(FRESULT result)
|
||||
{
|
||||
@@ -48,7 +48,7 @@ static int elm_result_to_dfs(FRESULT result)
|
||||
case FR_MKFS_ABORTED:
|
||||
status = -DFS_STATUS_EINVAL;
|
||||
break;
|
||||
|
||||
|
||||
default:
|
||||
status = -1;
|
||||
break;
|
||||
@@ -64,14 +64,14 @@ int dfs_elm_mount(struct dfs_filesystem* fs, unsigned long rwflag, const void* d
|
||||
rt_uint32_t index;
|
||||
|
||||
/* handle RT-Thread device routine */
|
||||
for (index = 0; index < _DRIVES; index ++)
|
||||
for (index = 0; index < _VOLUMES; index ++)
|
||||
{
|
||||
if (disk[index] == RT_NULL)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (index == _DRIVES) return -DFS_STATUS_ENOSPC;
|
||||
if (index == _VOLUMES) return -DFS_STATUS_ENOSPC;
|
||||
|
||||
/* get device */
|
||||
disk[index] = fs->dev_id;
|
||||
@@ -106,7 +106,7 @@ int dfs_elm_unmount(struct dfs_filesystem* fs)
|
||||
RT_ASSERT(fat != RT_NULL);
|
||||
|
||||
/* find the device index and then umount it */
|
||||
for (index = 0; index < _DRIVES; index ++)
|
||||
for (index = 0; index < _VOLUMES; index ++)
|
||||
{
|
||||
if (disk[index] == fs->dev_id)
|
||||
{
|
||||
@@ -132,7 +132,7 @@ int dfs_elm_mkfs(const char* device_name)
|
||||
FRESULT result;
|
||||
|
||||
/* find device name */
|
||||
for (drv = 0; drv < _DRIVES; drv ++)
|
||||
for (drv = 0; drv < _VOLUMES; drv ++)
|
||||
{
|
||||
dev = disk[drv];
|
||||
if (rt_strncmp(dev->parent.name, device_name, RT_NAME_MAX) == 0)
|
||||
@@ -167,12 +167,12 @@ int dfs_elm_statfs(struct dfs_filesystem* fs, struct statfs *buf)
|
||||
|
||||
f = (FATFS*) fs->data;
|
||||
|
||||
rt_snprintf(driver, sizeof(driver), "%d:", f->drive);
|
||||
rt_snprintf(driver, sizeof(driver), "%d:", f->drv);
|
||||
res = f_getfree(driver, &fre_clust, &f);
|
||||
if (res) return elm_result_to_dfs(res);
|
||||
|
||||
|
||||
/* Get total sectors and free sectors */
|
||||
tot_sect = (f->max_clust - 2) * f->csize;
|
||||
tot_sect = (f->n_fatent - 2) * f->csize;
|
||||
fre_sect = fre_clust * f->csize;
|
||||
|
||||
buf->f_bfree = fre_sect;
|
||||
@@ -189,10 +189,10 @@ int dfs_elm_open(struct dfs_fd* file)
|
||||
FRESULT result;
|
||||
char *drivers_fn;
|
||||
|
||||
#if (_DRIVES > 1)
|
||||
#if (_VOLUMES > 1)
|
||||
int vol;
|
||||
extern int elm_get_vol(FATFS *fat);
|
||||
|
||||
|
||||
/* add path for ELM FatFS driver support */
|
||||
vol = elm_get_vol((FATFS *)file->fs->data);
|
||||
if (vol < 0) return -DFS_STATUS_ENOENT;
|
||||
@@ -213,7 +213,7 @@ int dfs_elm_open(struct dfs_fd* file)
|
||||
result = f_mkdir(drivers_fn);
|
||||
if (result != FR_OK)
|
||||
{
|
||||
#if _DRIVES > 1
|
||||
#if _VOLUMES > 1
|
||||
rt_free(drivers_fn);
|
||||
#endif
|
||||
return elm_result_to_dfs(result);
|
||||
@@ -224,14 +224,14 @@ int dfs_elm_open(struct dfs_fd* file)
|
||||
dir = (DIR *)rt_malloc(sizeof(DIR));
|
||||
if (dir == RT_NULL)
|
||||
{
|
||||
#if _DRIVES > 1
|
||||
#if _VOLUMES > 1
|
||||
rt_free(drivers_fn);
|
||||
#endif
|
||||
return -DFS_STATUS_ENOMEM;
|
||||
}
|
||||
|
||||
result = f_opendir(dir, drivers_fn);
|
||||
#if _DRIVES > 1
|
||||
#if _VOLUMES > 1
|
||||
rt_free(drivers_fn);
|
||||
#endif
|
||||
if (result != FR_OK)
|
||||
@@ -264,7 +264,7 @@ int dfs_elm_open(struct dfs_fd* file)
|
||||
}
|
||||
|
||||
result = f_open(fd, drivers_fn, mode);
|
||||
#if _DRIVES > 1
|
||||
#if _VOLUMES > 1
|
||||
rt_free(drivers_fn);
|
||||
#endif
|
||||
if (result == FR_OK)
|
||||
@@ -464,7 +464,7 @@ int dfs_elm_unlink(struct dfs_filesystem* fs, const char* path)
|
||||
{
|
||||
FRESULT result;
|
||||
|
||||
#if _DRIVES > 1
|
||||
#if _VOLUMES > 1
|
||||
int vol;
|
||||
char *drivers_fn;
|
||||
extern int elm_get_vol(FATFS *fat);
|
||||
@@ -482,7 +482,7 @@ int dfs_elm_unlink(struct dfs_filesystem* fs, const char* path)
|
||||
#endif
|
||||
|
||||
result = f_unlink(drivers_fn);
|
||||
#if _DRIVES > 1
|
||||
#if _VOLUMES > 1
|
||||
rt_free(drivers_fn);
|
||||
#endif
|
||||
return elm_result_to_dfs(result);
|
||||
@@ -492,7 +492,7 @@ int dfs_elm_rename(struct dfs_filesystem* fs, const char* oldpath, const char* n
|
||||
{
|
||||
FRESULT result;
|
||||
|
||||
#if _DRIVES > 1
|
||||
#if _VOLUMES > 1
|
||||
char *drivers_oldfn, *drivers_newfn;
|
||||
int vol;
|
||||
extern int elm_get_vol(FATFS *fat);
|
||||
@@ -504,7 +504,7 @@ int dfs_elm_rename(struct dfs_filesystem* fs, const char* oldpath, const char* n
|
||||
drivers_oldfn = rt_malloc(256);
|
||||
if (drivers_oldfn == RT_NULL) return -DFS_STATUS_ENOMEM;
|
||||
drivers_newfn = rt_malloc(256);
|
||||
if (drivers_newfn == RT_NULL)
|
||||
if (drivers_newfn == RT_NULL)
|
||||
{
|
||||
rt_free(drivers_oldfn);
|
||||
return -DFS_STATUS_ENOMEM;
|
||||
@@ -520,7 +520,7 @@ int dfs_elm_rename(struct dfs_filesystem* fs, const char* oldpath, const char* n
|
||||
#endif
|
||||
|
||||
result = f_rename(drivers_oldfn, drivers_newfn);
|
||||
#if _DRIVES > 1
|
||||
#if _VOLUMES > 1
|
||||
rt_free(drivers_oldfn);
|
||||
rt_free(drivers_newfn);
|
||||
#endif
|
||||
@@ -533,7 +533,7 @@ int dfs_elm_stat(struct dfs_filesystem* fs, const char *path, struct stat *st)
|
||||
FRESULT result;
|
||||
|
||||
|
||||
#if _DRIVES > 1
|
||||
#if _VOLUMES > 1
|
||||
int vol;
|
||||
char *drivers_fn;
|
||||
extern int elm_get_vol(FATFS *fat);
|
||||
@@ -557,7 +557,7 @@ int dfs_elm_stat(struct dfs_filesystem* fs, const char *path, struct stat *st)
|
||||
#endif
|
||||
|
||||
result = f_stat(drivers_fn, &file_info);
|
||||
#if _DRIVES > 1
|
||||
#if _VOLUMES > 1
|
||||
rt_free(drivers_fn);
|
||||
#endif
|
||||
if (result == FR_OK)
|
||||
@@ -587,7 +587,7 @@ int dfs_elm_stat(struct dfs_filesystem* fs, const char *path, struct stat *st)
|
||||
return elm_result_to_dfs(result);
|
||||
}
|
||||
|
||||
static const struct dfs_filesystem_operation dfs_elm =
|
||||
static const struct dfs_filesystem_operation dfs_elm =
|
||||
{
|
||||
"elm",
|
||||
dfs_elm_mount,
|
||||
@@ -669,7 +669,7 @@ DRESULT disk_ioctl (BYTE drv, BYTE ctrl, void *buff)
|
||||
rt_device_t device = disk[drv];
|
||||
|
||||
if (device == RT_NULL) return RES_ERROR;
|
||||
|
||||
|
||||
if (ctrl == GET_SECTOR_COUNT)
|
||||
{
|
||||
struct rt_device_blk_geometry geometry;
|
||||
@@ -687,7 +687,7 @@ DRESULT disk_ioctl (BYTE drv, BYTE ctrl, void *buff)
|
||||
rt_memset(&geometry, 0, sizeof(geometry));
|
||||
rt_device_control(device, RT_DEVICE_CTRL_BLK_GETGEOME, &geometry);
|
||||
|
||||
*(DWORD*)buff = geometry.bytes_per_sector;
|
||||
*(WORD*)buff = geometry.bytes_per_sector;
|
||||
}
|
||||
else if (ctrl == GET_BLOCK_SIZE) /* Get erase block size in unit of sectors (DWORD) */
|
||||
{
|
||||
@@ -708,7 +708,7 @@ rt_time_t get_fattime()
|
||||
}
|
||||
|
||||
#if _FS_REENTRANT
|
||||
BOOL ff_cre_syncobj(BYTE drv, _SYNC_t* m)
|
||||
int ff_cre_syncobj(BYTE drv, _SYNC_t* m)
|
||||
{
|
||||
char name[8];
|
||||
rt_mutex_t mutex;
|
||||
@@ -718,24 +718,24 @@ BOOL ff_cre_syncobj(BYTE drv, _SYNC_t* m)
|
||||
if (mutex != RT_NULL)
|
||||
{
|
||||
*m = mutex;
|
||||
return TRUE;
|
||||
return RT_TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
return RT_FALSE;
|
||||
}
|
||||
|
||||
BOOL ff_del_syncobj(_SYNC_t m)
|
||||
int ff_del_syncobj(_SYNC_t m)
|
||||
{
|
||||
rt_mutex_delete(m);
|
||||
|
||||
return TRUE;
|
||||
return RT_TRUE;
|
||||
}
|
||||
|
||||
BOOL ff_req_grant(_SYNC_t m)
|
||||
int ff_req_grant(_SYNC_t m)
|
||||
{
|
||||
if (rt_mutex_take(m, _FS_TIMEOUT) == RT_EOK) return TRUE;
|
||||
if (rt_mutex_take(m, _FS_TIMEOUT) == RT_EOK) return RT_TRUE;
|
||||
|
||||
return FALSE;
|
||||
return RT_FALSE;
|
||||
}
|
||||
|
||||
void ff_rel_grant(_SYNC_t m)
|
||||
|
||||
@@ -1,202 +0,0 @@
|
||||
/*-----------------------------------------------------------------------*/
|
||||
/* 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 "diskio.h"
|
||||
|
||||
/*-----------------------------------------------------------------------*/
|
||||
/* Correspondence between physical drive number and physical drive. */
|
||||
|
||||
#define ATA 0
|
||||
#define MMC 1
|
||||
#define USB 2
|
||||
|
||||
|
||||
|
||||
/*-----------------------------------------------------------------------*/
|
||||
/* Inidialize a Drive */
|
||||
|
||||
DSTATUS disk_initialize (
|
||||
BYTE drv /* Physical drive nmuber (0..) */
|
||||
)
|
||||
{
|
||||
DSTATUS stat;
|
||||
int result;
|
||||
|
||||
switch (drv) {
|
||||
case ATA :
|
||||
result = ATA_disk_initialize();
|
||||
// translate the reslut code here
|
||||
|
||||
return stat;
|
||||
|
||||
case MMC :
|
||||
result = MMC_disk_initialize();
|
||||
// translate the reslut code here
|
||||
|
||||
return stat;
|
||||
|
||||
case USB :
|
||||
result = USB_disk_initialize();
|
||||
// translate the reslut code here
|
||||
|
||||
return stat;
|
||||
}
|
||||
return STA_NOINIT;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*-----------------------------------------------------------------------*/
|
||||
/* Return Disk Status */
|
||||
|
||||
DSTATUS disk_status (
|
||||
BYTE drv /* Physical drive nmuber (0..) */
|
||||
)
|
||||
{
|
||||
DSTATUS stat;
|
||||
int result;
|
||||
|
||||
switch (drv) {
|
||||
case ATA :
|
||||
result = ATA_disk_status();
|
||||
// translate the reslut code here
|
||||
|
||||
return stat;
|
||||
|
||||
case MMC :
|
||||
result = MMC_disk_status();
|
||||
// translate the reslut code here
|
||||
|
||||
return stat;
|
||||
|
||||
case USB :
|
||||
result = USB_disk_status();
|
||||
// translate the reslut code here
|
||||
|
||||
return stat;
|
||||
}
|
||||
return STA_NOINIT;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*-----------------------------------------------------------------------*/
|
||||
/* 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) */
|
||||
BYTE count /* Number of sectors to read (1..255) */
|
||||
)
|
||||
{
|
||||
DRESULT res;
|
||||
int result;
|
||||
|
||||
switch (drv) {
|
||||
case ATA :
|
||||
result = ATA_disk_read(buff, sector, count);
|
||||
// translate the reslut code here
|
||||
|
||||
return res;
|
||||
|
||||
case MMC :
|
||||
result = MMC_disk_read(buff, sector, count);
|
||||
// translate the reslut code here
|
||||
|
||||
return res;
|
||||
|
||||
case USB :
|
||||
result = USB_disk_read(buff, sector, count);
|
||||
// translate the reslut code here
|
||||
|
||||
return res;
|
||||
}
|
||||
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) */
|
||||
BYTE count /* Number of sectors to write (1..255) */
|
||||
)
|
||||
{
|
||||
DRESULT res;
|
||||
int result;
|
||||
|
||||
switch (drv) {
|
||||
case ATA :
|
||||
result = ATA_disk_write(buff, sector, count);
|
||||
// translate the reslut code here
|
||||
|
||||
return res;
|
||||
|
||||
case MMC :
|
||||
result = MMC_disk_write(buff, sector, count);
|
||||
// translate the reslut code here
|
||||
|
||||
return res;
|
||||
|
||||
case USB :
|
||||
result = USB_disk_write(buff, sector, count);
|
||||
// translate the reslut code here
|
||||
|
||||
return res;
|
||||
}
|
||||
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 */
|
||||
)
|
||||
{
|
||||
DRESULT res;
|
||||
int result;
|
||||
|
||||
switch (drv) {
|
||||
case ATA :
|
||||
// pre-process here
|
||||
|
||||
result = ATA_disk_ioctl(ctrl, buff);
|
||||
// post-process here
|
||||
|
||||
return res;
|
||||
|
||||
case MMC :
|
||||
// pre-process here
|
||||
|
||||
result = MMC_disk_ioctl(ctrl, buff);
|
||||
// post-process here
|
||||
|
||||
return res;
|
||||
|
||||
case USB :
|
||||
// pre-process here
|
||||
|
||||
result = USB_disk_ioctl(ctrl, buff);
|
||||
// post-process here
|
||||
|
||||
return res;
|
||||
}
|
||||
return RES_PARERR;
|
||||
}
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
/*-----------------------------------------------------------------------
|
||||
/ Low level disk interface modlue include file R0.07 (C)ChaN, 2009
|
||||
/ Low level disk interface modlue include file
|
||||
/-----------------------------------------------------------------------*/
|
||||
|
||||
#ifndef _DISKIO
|
||||
|
||||
#define _READONLY 0 /* 1: Read-only mode */
|
||||
#define _USE_IOCTL 1
|
||||
#define _READONLY 0 /* 1: Remove write functions */
|
||||
#define _USE_IOCTL 1 /* 1: Use disk_ioctl fucntion */
|
||||
|
||||
#include "integer.h"
|
||||
|
||||
@@ -26,7 +26,7 @@ typedef enum {
|
||||
/*---------------------------------------*/
|
||||
/* Prototypes for disk control functions */
|
||||
|
||||
BOOL assign_drives (int argc, char *argv[]);
|
||||
int assign_drives (int, int);
|
||||
DSTATUS disk_initialize (BYTE);
|
||||
DSTATUS disk_status (BYTE);
|
||||
DRESULT disk_read (BYTE, BYTE*, DWORD, BYTE);
|
||||
@@ -44,26 +44,34 @@ DRESULT disk_ioctl (BYTE, BYTE, void*);
|
||||
#define STA_PROTECT 0x04 /* Write protected */
|
||||
|
||||
|
||||
/* Command code for disk_ioctrl() */
|
||||
/* Command code for disk_ioctrl fucntion */
|
||||
|
||||
/* Generic command (defined for FatFs) */
|
||||
#define CTRL_SYNC 0 /* Flush disk cache (for write functions) */
|
||||
#define GET_SECTOR_COUNT 1 /* Get media size (for only f_mkfs()) */
|
||||
#define GET_SECTOR_SIZE 2 /* Get sector size (for multiple sector size (_MAX_SS >= 1024)) */
|
||||
#define GET_BLOCK_SIZE 3 /* Get erase block size (for only f_mkfs()) */
|
||||
#define CTRL_ERASE_SECTOR 4 /* Force erased a block of sectors (for only _USE_ERASE) */
|
||||
|
||||
/* Generic command */
|
||||
#define CTRL_SYNC 0 /* Mandatory for write functions */
|
||||
#define GET_SECTOR_COUNT 1 /* Mandatory for only f_mkfs() */
|
||||
#define GET_SECTOR_SIZE 2 /* Mandatory for multiple sector size cfg */
|
||||
#define GET_BLOCK_SIZE 3 /* Mandatory for only f_mkfs() */
|
||||
#define CTRL_POWER 4
|
||||
#define CTRL_LOCK 5
|
||||
#define CTRL_EJECT 6
|
||||
/* MMC/SDC command */
|
||||
#define MMC_GET_TYPE 10
|
||||
#define MMC_GET_CSD 11
|
||||
#define MMC_GET_CID 12
|
||||
#define MMC_GET_OCR 13
|
||||
#define MMC_GET_SDSTAT 14
|
||||
/* ATA/CF command */
|
||||
#define ATA_GET_REV 20
|
||||
#define ATA_GET_MODEL 21
|
||||
#define ATA_GET_SN 22
|
||||
#define CTRL_POWER 5 /* Get/Set power status */
|
||||
#define CTRL_LOCK 6 /* Lock/Unlock media removal */
|
||||
#define CTRL_EJECT 7 /* Eject media */
|
||||
|
||||
/* MMC/SDC specific ioctl command */
|
||||
#define MMC_GET_TYPE 10 /* Get card type */
|
||||
#define MMC_GET_CSD 11 /* Get CSD */
|
||||
#define MMC_GET_CID 12 /* Get CID */
|
||||
#define MMC_GET_OCR 13 /* Get OCR */
|
||||
#define MMC_GET_SDSTAT 14 /* Get SD status */
|
||||
|
||||
/* ATA/CF specific ioctl command */
|
||||
#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 */
|
||||
|
||||
/* NAND specific ioctl command */
|
||||
#define NAND_FORMAT 30 /* Create physical format */
|
||||
|
||||
|
||||
#define _DISKIO
|
||||
|
||||
+1836
-1010
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,52 +1,57 @@
|
||||
/*---------------------------------------------------------------------------/
|
||||
/ FatFs - FAT file system module configuration file R0.07e (C)ChaN, 2009
|
||||
/ FatFs - FAT file system module configuration file R0.08b (C)ChaN, 2011
|
||||
/----------------------------------------------------------------------------/
|
||||
/
|
||||
/ CAUTION! Do not forget to make clean the project after any changes to
|
||||
/ the configuration options.
|
||||
/
|
||||
/----------------------------------------------------------------------------*/
|
||||
#ifndef _FFCONFIG
|
||||
#define _FFCONFIG 0x007E
|
||||
#ifndef _FFCONF
|
||||
#define _FFCONF 8237 /* Revision ID */
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------/
|
||||
/ Function and Buffer Configurations
|
||||
/----------------------------------------------------------------------------*/
|
||||
|
||||
#define _FS_TINY 0 /* 0 or 1 */
|
||||
#define _FS_TINY 0 /* 0:Normal or 1:Tiny */
|
||||
/* When _FS_TINY is set to 1, FatFs uses the sector buffer in the file system
|
||||
/ object instead of the sector buffer in the individual file object for file
|
||||
/ data transfer. This reduces memory consumption 512 bytes each file object. */
|
||||
|
||||
|
||||
#define _FS_READONLY 0 /* 0 or 1 */
|
||||
#define _FS_READONLY 0 /* 0:Read/Write or 1:Read only */
|
||||
/* Setting _FS_READONLY to 1 defines read only configuration. This removes
|
||||
/ writing functions, f_write, f_sync, f_unlink, f_mkdir, f_chmod, f_rename,
|
||||
/ f_truncate and useless f_getfree. */
|
||||
|
||||
|
||||
#define _FS_MINIMIZE 0 /* 0, 1, 2 or 3 */
|
||||
#define _FS_MINIMIZE 0 /* 0 to 3 */
|
||||
/* The _FS_MINIMIZE option defines minimization level to remove some functions.
|
||||
/
|
||||
/ 0: Full function.
|
||||
/ 1: f_stat, f_getfree, f_unlink, f_mkdir, f_chmod, f_truncate and f_rename
|
||||
/ are removed.
|
||||
/ 2: f_opendir and f_readdir are removed in addition to level 1.
|
||||
/ 3: f_lseek is removed in addition to level 2. */
|
||||
/ 2: f_opendir and f_readdir are removed in addition to 1.
|
||||
/ 3: f_lseek is removed in addition to 2. */
|
||||
|
||||
|
||||
#define _USE_STRFUNC 0 /* 0, 1 or 2 */
|
||||
#define _USE_STRFUNC 0 /* 0:Disable or 1/2:Enable */
|
||||
/* To enable string functions, set _USE_STRFUNC to 1 or 2. */
|
||||
|
||||
|
||||
#define _USE_MKFS 1 /* 0 or 1 */
|
||||
#define _USE_MKFS 1 /* 0:Disable or 1:Enable */
|
||||
/* To enable f_mkfs function, set _USE_MKFS to 1 and set _FS_READONLY to 0 */
|
||||
|
||||
|
||||
#define _USE_FORWARD 0 /* 0 or 1 */
|
||||
#define _USE_FORWARD 0 /* 0:Disable or 1:Enable */
|
||||
/* To enable f_forward function, set _USE_FORWARD to 1 and set _FS_TINY to 1. */
|
||||
|
||||
|
||||
#define _USE_FASTSEEK 1 /* 0:Disable or 1:Enable */
|
||||
/* To enable fast seek feature, set _USE_FASTSEEK to 1. */
|
||||
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------/
|
||||
/ Locale and Namespace Configurations
|
||||
@@ -84,37 +89,43 @@
|
||||
/ 1 - ASCII only (Valid for non LFN cfg.)
|
||||
*/
|
||||
|
||||
|
||||
#ifdef RT_DFS_ELM_USE_LFN
|
||||
#define _USE_LFN RT_DFS_ELM_USE_LFN
|
||||
#define _MAX_LFN RT_DFS_ELM_MAX_LFN
|
||||
#else
|
||||
#define _USE_LFN 0 /* 0, 1 or 2 */
|
||||
#define _USE_LFN 0 /* 0 to 3 */
|
||||
#define _MAX_LFN 255 /* Maximum LFN length to handle (12 to 255) */
|
||||
#endif
|
||||
|
||||
/* The _USE_LFN option switches the LFN support.
|
||||
/
|
||||
/ 0: Disable LFN. _MAX_LFN and _LFN_UNICODE have no effect.
|
||||
/ 1: Enable LFN with static working buffer on the bss. NOT REENTRANT.
|
||||
/ 0: Disable LFN feature. _MAX_LFN and _LFN_UNICODE have no effect.
|
||||
/ 1: Enable LFN with static working buffer on the BSS. Always NOT reentrant.
|
||||
/ 2: Enable LFN with dynamic working buffer on the STACK.
|
||||
/ 3: Enable LFN with dynamic working buffer on the HEAP.
|
||||
/
|
||||
/ The LFN working buffer occupies (_MAX_LFN + 1) * 2 bytes. When enable LFN,
|
||||
/ two Unicode handling functions ff_convert() and ff_wtoupper() must be added
|
||||
/ to the project. */
|
||||
/ The LFN working buffer occupies (_MAX_LFN + 1) * 2 bytes. To enable LFN,
|
||||
/ Unicode handling functions ff_convert() and ff_wtoupper() must be added
|
||||
/ to the project. When enable to use heap, memory control functions
|
||||
/ ff_memalloc() and ff_memfree() must be added to the project. */
|
||||
|
||||
|
||||
#ifdef RT_DFS_ELM_LFN_UNICODE
|
||||
#define _LFN_UNICODE 1 /* 0 or 1 */
|
||||
#define _LFN_UNICODE 1 /* 0:ANSI/OEM or 1:Unicode */
|
||||
#else
|
||||
#define _LFN_UNICODE 0 /* 0 or 1 */
|
||||
#define _LFN_UNICODE 0 /* 0:ANSI/OEM or 1:Unicode */
|
||||
#endif
|
||||
/* To switch the character code set on FatFs API to Unicode,
|
||||
/ enable LFN feature and set _LFN_UNICODE to 1.
|
||||
*/
|
||||
/ enable LFN feature and set _LFN_UNICODE to 1. */
|
||||
|
||||
|
||||
#define _FS_RPATH 0 /* 0 or 1 */
|
||||
/* When _FS_RPATH is set to 1, relative path feature is enabled and f_chdir,
|
||||
/ f_chdrive function are available.
|
||||
#define _FS_RPATH 0 /* 0 to 2 */
|
||||
/* The _FS_RPATH option configures relative path feature.
|
||||
/
|
||||
/ 0: Disable relative path feature and remove related functions.
|
||||
/ 1: Enable relative path. f_chdrive() and f_chdir() are available.
|
||||
/ 2: f_getcwd() is available in addition to 1.
|
||||
/
|
||||
/ Note that output of the f_readdir fnction is affected by this option. */
|
||||
|
||||
|
||||
@@ -122,10 +133,11 @@
|
||||
/*---------------------------------------------------------------------------/
|
||||
/ Physical Drive Configurations
|
||||
/----------------------------------------------------------------------------*/
|
||||
|
||||
#ifdef RT_DFS_ELM_DRIVES
|
||||
#define _DRIVES RT_DFS_ELM_DRIVES
|
||||
#define _VOLUMES RT_DFS_ELM_DRIVES
|
||||
#else
|
||||
#define _DRIVES 1
|
||||
#define _VOLUMES 1
|
||||
#endif
|
||||
/* Number of volumes (logical drives) to be used. */
|
||||
|
||||
@@ -137,46 +149,56 @@
|
||||
#endif
|
||||
/* Maximum sector size to be handled.
|
||||
/ Always set 512 for memory card and hard disk but a larger value may be
|
||||
/ required for floppy disk (512/1024) and optical disk (512/2048).
|
||||
/ When _MAX_SS is larger than 512, GET_SECTOR_SIZE command must be implememted
|
||||
/ to the disk_ioctl function. */
|
||||
/ required for on-board flash memory, floppy disk and optical disk.
|
||||
/ When _MAX_SS is larger than 512, it configures FatFs to variable sector size
|
||||
/ and GET_SECTOR_SIZE command must be implememted to the disk_ioctl function. */
|
||||
|
||||
|
||||
#define _MULTI_PARTITION 0 /* 0 or 1 */
|
||||
/* When _MULTI_PARTITION is set to 0, each volume is bound to the same physical
|
||||
/ drive number and can mount only first primaly partition. When it is set to 1,
|
||||
/ each volume is tied to the partitions listed in Drives[]. */
|
||||
#define _MULTI_PARTITION 0 /* 0:Single partition or 1:Multiple partition */
|
||||
/* When set to 0, each volume is bound to the same physical drive number and
|
||||
/ it can mount only first primaly partition. When it is set to 1, each volume
|
||||
/ is tied to the partitions listed in VolToPart[]. */
|
||||
|
||||
|
||||
#define _USE_ERASE 0 /* 0:Disable or 1:Enable */
|
||||
/* To enable sector erase feature, set _USE_ERASE to 1. CTRL_ERASE_SECTOR command
|
||||
/ should be added to the disk_ioctl functio. */
|
||||
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------/
|
||||
/ System Configurations
|
||||
/----------------------------------------------------------------------------*/
|
||||
|
||||
#ifdef RT_DFS_ELM_WORD_ACCESS
|
||||
#define _WORD_ACCESS 1
|
||||
#else
|
||||
#define _WORD_ACCESS 0
|
||||
#define _WORD_ACCESS 0 /* 0 or 1 */
|
||||
#endif
|
||||
|
||||
/* The _WORD_ACCESS option defines which access method is used to the word
|
||||
/ data on the FAT volume.
|
||||
/* Set 0 first and it is always compatible with all platforms. The _WORD_ACCESS
|
||||
/ option defines which access method is used to the word data on the FAT volume.
|
||||
/
|
||||
/ 0: Byte-by-byte access. Always compatible with all platforms.
|
||||
/ 0: Byte-by-byte access.
|
||||
/ 1: Word access. Do not choose this unless following condition is met.
|
||||
/
|
||||
/ When the byte order on the memory is big-endian or address miss-aligned
|
||||
/ word access results incorrect behavior, the _WORD_ACCESS must be set to 0.
|
||||
/ When the byte order on the memory is big-endian or address miss-aligned word
|
||||
/ access results incorrect behavior, the _WORD_ACCESS must be set to 0.
|
||||
/ If it is not the case, the value can also be set to 1 to improve the
|
||||
/ performance and code size. */
|
||||
|
||||
|
||||
/* A header file that defines sync object types on the O/S, such as
|
||||
/ windows.h, ucos_ii.h and semphr.h, must be included prior to ff.h. */
|
||||
|
||||
#ifdef RT_DFS_ELM_REENTRANT
|
||||
#define _FS_REENTRANT RT_DFS_ELM_REENTRANT /* 0 or 1 */
|
||||
#else
|
||||
#define _FS_REENTRANT 0
|
||||
#define _FS_REENTRANT 0 /* 0:Disable or 1:Enable */
|
||||
#endif
|
||||
#define _FS_TIMEOUT 1000 /* Timeout period in unit of time ticks */
|
||||
#define _FS_TIMEOUT 1000 /* Timeout period in unit of time ticks */
|
||||
#define _SYNC_t rt_mutex_t /* O/S dependent type of sync object. e.g. HANDLE, OS_EVENT*, ID and etc.. */
|
||||
/* The _FS_REENTRANT option switches the reentrancy of the FatFs module.
|
||||
|
||||
/* The _FS_REENTRANT option switches the reentrancy (thread safe) of the FatFs module.
|
||||
/
|
||||
/ 0: Disable reentrancy. _SYNC_t and _FS_TIMEOUT have no effect.
|
||||
/ 1: Enable reentrancy. Also user provided synchronization handlers,
|
||||
@@ -184,4 +206,9 @@
|
||||
/ function must be added to the project. */
|
||||
|
||||
|
||||
#define _FS_SHARE 0 /* 0:Disable or >=1:Enable */
|
||||
/* To enable file shareing feature, set _FS_SHARE to 1 or greater. The value
|
||||
defines how many files can be opened simultaneously. */
|
||||
|
||||
|
||||
#endif /* _FFCONFIG */
|
||||
|
||||
@@ -3,10 +3,14 @@
|
||||
/*-------------------------------------------*/
|
||||
|
||||
#ifndef _INTEGER
|
||||
#define _INTEGER
|
||||
|
||||
#ifdef _WIN32 /* FatFs development platform */
|
||||
|
||||
#if 0
|
||||
#include <windows.h>
|
||||
#else
|
||||
#include <tchar.h>
|
||||
|
||||
#else /* Embedded platform */
|
||||
|
||||
/* These types must be 16-bit, 32-bit or larger integer */
|
||||
typedef int INT;
|
||||
@@ -28,10 +32,6 @@ typedef long LONG;
|
||||
typedef unsigned long ULONG;
|
||||
typedef unsigned long DWORD;
|
||||
|
||||
/* Boolean type */
|
||||
typedef enum { FALSE = 0, TRUE } BOOL;
|
||||
|
||||
#endif
|
||||
|
||||
#define _INTEGER
|
||||
#endif
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
#define _TINY_TABLE 0
|
||||
|
||||
#if !_USE_LFN || _CODE_PAGE != 932
|
||||
#error This file is not needed in current configuration.
|
||||
#error This file is not needed in current configuration. Remove from the project.
|
||||
#endif
|
||||
|
||||
|
||||
@@ -111,7 +111,7 @@ const WCHAR uni2sjis[] = {
|
||||
0x3088, 0x82E6, 0x3089, 0x82E7, 0x308A, 0x82E8, 0x308B, 0x82E9,
|
||||
0x308C, 0x82EA, 0x308D, 0x82EB, 0x308E, 0x82EC, 0x308F, 0x82ED,
|
||||
0x3090, 0x82EE, 0x3091, 0x82EF, 0x3092, 0x82F0, 0x3093, 0x82F1,
|
||||
0x3094, 0x8394, 0x309B, 0x814A, 0x309C, 0x814B, 0x309D, 0x8154,
|
||||
0x309B, 0x814A, 0x309C, 0x814B, 0x309D, 0x8154,
|
||||
0x309E, 0x8155, 0x30A1, 0x8340, 0x30A2, 0x8341, 0x30A3, 0x8342,
|
||||
0x30A4, 0x8343, 0x30A5, 0x8344, 0x30A6, 0x8345, 0x30A7, 0x8346,
|
||||
0x30A8, 0x8347, 0x30A9, 0x8348, 0x30AA, 0x8349, 0x30AB, 0x834A,
|
||||
@@ -1979,7 +1979,7 @@ const WCHAR sjis2uni[] = {
|
||||
0x8386, 0x30E6, 0x8387, 0x30E7, 0x8388, 0x30E8, 0x8389, 0x30E9,
|
||||
0x838A, 0x30EA, 0x838B, 0x30EB, 0x838C, 0x30EC, 0x838D, 0x30ED,
|
||||
0x838E, 0x30EE, 0x838F, 0x30EF, 0x8390, 0x30F0, 0x8391, 0x30F1,
|
||||
0x8392, 0x30F2, 0x8393, 0x30F3, 0x8394, 0x3094, 0x8394, 0x30F4,
|
||||
0x8392, 0x30F2, 0x8393, 0x30F3, 0x8394, 0x30F4,
|
||||
0x8395, 0x30F5, 0x8396, 0x30F6, 0x839F, 0x0391, 0x83A0, 0x0392,
|
||||
0x83A1, 0x0393, 0x83A2, 0x0394, 0x83A3, 0x0395, 0x83A4, 0x0396,
|
||||
0x83A5, 0x0397, 0x83A6, 0x0398, 0x83A7, 0x0399, 0x83A8, 0x039A,
|
||||
@@ -3760,9 +3760,9 @@ WCHAR ff_convert ( /* Converted code, 0 means conversion error */
|
||||
do {
|
||||
c = *p;
|
||||
p += 2;
|
||||
} while (c && c != src);
|
||||
p -= 3;
|
||||
c = *p;
|
||||
} while (c && c != src);
|
||||
} else { /* Unicode to OEMCP */
|
||||
li = 0; hi = sizeof(uni2sjis) / 4 - 1;
|
||||
for (n = 16; n; n--) {
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
|
||||
#if !_USE_LFN || _CODE_PAGE != 936
|
||||
#error This file is not needed in current configuration.
|
||||
#error This file is not needed in current configuration. Remove from the project.
|
||||
#endif
|
||||
|
||||
static
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
/*------------------------------------------------------------------------*/
|
||||
/* Unicode - OEM code bidirectional converter (C)ChaN, 2009 */
|
||||
/* */
|
||||
/* CP949 (Korean) */
|
||||
/* CP949 (Korean EUC-KR) */
|
||||
/*------------------------------------------------------------------------*/
|
||||
|
||||
#include "../ff.h"
|
||||
|
||||
|
||||
#if !_USE_LFN || _CODE_PAGE != 949
|
||||
#error This file is not needed in current configuration.
|
||||
#error This file is not needed in current configuration. Remove from the project.
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
|
||||
#if !_USE_LFN || _CODE_PAGE != 950
|
||||
#error This file is not needed in current configuration.
|
||||
#error This file is not needed in current configuration. Remove from the project.
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
@@ -329,7 +329,7 @@ const WCHAR Tbl[] = { /* CP1251(0x80-0xFF) to Unicode conversion table */
|
||||
0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417,
|
||||
0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F,
|
||||
0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427,
|
||||
0x0428, 0x0429, 0x042A, 0x042D, 0x042C, 0x042D, 0x042E, 0x042F,
|
||||
0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F,
|
||||
0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437,
|
||||
0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F,
|
||||
0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447,
|
||||
@@ -351,7 +351,7 @@ const WCHAR Tbl[] = { /* CP1252(0x80-0xFF) to Unicode conversion table */
|
||||
0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7,
|
||||
0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF,
|
||||
0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7,
|
||||
0x00D8, 0x00D9, 0x00DA, 0x00BD, 0x00DC, 0x00DD, 0x00DE, 0x00DF,
|
||||
0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF,
|
||||
0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7,
|
||||
0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF,
|
||||
0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7,
|
||||
@@ -494,7 +494,7 @@ const WCHAR Tbl[] = { /* CP1258(0x80-0xFF) to Unicode conversion table */
|
||||
|
||||
|
||||
#if !_TBLDEF || !_USE_LFN
|
||||
#error This file is not needed in current configuration
|
||||
#error This file is not needed in current configuration. Remove from the project.
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
+61
-25
@@ -1,17 +1,17 @@
|
||||
/*------------------------------------------------------------------------*/
|
||||
/* Sample code of OS dependent synchronization object controls */
|
||||
/* for FatFs R0.07d (C)ChaN, 2009 */
|
||||
/* Sample code of OS dependent controls for FatFs R0.08 */
|
||||
/* (C)ChaN, 2010 */
|
||||
/*------------------------------------------------------------------------*/
|
||||
|
||||
#include <windows.h> // Win32
|
||||
//#include <ucos_ii.h> // uC/OS-II
|
||||
#include <stdlib.h> /* ANSI memory controls */
|
||||
#include <malloc.h> /* ANSI memory controls */
|
||||
|
||||
#include "../ff.h"
|
||||
|
||||
#if _FS_REENTRANT
|
||||
|
||||
#if _FS_REENTRANT
|
||||
/*------------------------------------------------------------------------*/
|
||||
/* Create a Synchronization Object for a Volume
|
||||
/* Create a Synchronization Object
|
||||
/*------------------------------------------------------------------------*/
|
||||
/* This function is called in f_mount function to create a new
|
||||
/ synchronization object, such as semaphore and mutex. When a FALSE is
|
||||
@@ -25,14 +25,17 @@ BOOL ff_cre_syncobj ( /* TRUE:Function succeeded, FALSE:Could not create due to
|
||||
{
|
||||
BOOL ret;
|
||||
|
||||
*sobj = CreateMutex(NULL, FALSE, NULL); // Win32
|
||||
ret = (*sobj != INVALID_HANDLE_VALUE) ? TRUE : FALSE; //
|
||||
*sobj = CreateMutex(NULL, FALSE, NULL); /* Win32 */
|
||||
ret = (*sobj != INVALID_HANDLE_VALUE) ? TRUE : FALSE;
|
||||
|
||||
// *sobj = VolumeSemId[vol]; // uITRON (give a static created sync object)
|
||||
// ret = TRUE; // The initial value of the semaphore must be 1.
|
||||
// *sobj = SyncObjects[vol]; /* uITRON (give a static created sync object) */
|
||||
// ret = TRUE; /* The initial value of the semaphore must be 1. */
|
||||
|
||||
// *sobj = OSMutexCreate(0, &err); // uC/OS-II
|
||||
// ret = (err == OS_NO_ERR) ? TRUE : FALSE; //
|
||||
// *sobj = OSMutexCreate(0, &err); /* uC/OS-II */
|
||||
// ret = (err == OS_NO_ERR) ? TRUE : FALSE;
|
||||
|
||||
// *sobj = xSemaphoreCreateMutex(); /* FreeRTOS */
|
||||
// ret = (*sobj != NULL) ? TRUE : FALSE;
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -53,12 +56,14 @@ BOOL ff_del_syncobj ( /* TRUE:Function succeeded, FALSE:Could not delete due to
|
||||
{
|
||||
BOOL ret;
|
||||
|
||||
ret = CloseHandle(sobj); // Win32
|
||||
ret = CloseHandle(sobj); /* Win32 *
|
||||
|
||||
// ret = TRUE; // uITRON (nothing to do)
|
||||
// ret = TRUE; /* uITRON (nothing to do) *
|
||||
|
||||
// OSMutexDel(sobj, OS_DEL_ALWAYS, &err); // uC/OS-II
|
||||
// ret = (err == OS_NO_ERR) ? TRUE : FALSE; //
|
||||
// OSMutexDel(sobj, OS_DEL_ALWAYS, &err); /* uC/OS-II */
|
||||
// ret = (err == OS_NO_ERR) ? TRUE : FALSE;
|
||||
|
||||
// ret = TRUE; /* FreeRTOS (nothing to do) */
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -78,12 +83,14 @@ BOOL ff_req_grant ( /* TRUE:Got a grant to access the volume, FALSE:Could not ge
|
||||
{
|
||||
BOOL ret;
|
||||
|
||||
ret = (WaitForSingleObject(sobj, _FS_TIMEOUT) == WAIT_OBJECT_0) ? TRUE : FALSE; // Win32
|
||||
ret = (WaitForSingleObject(sobj, _FS_TIMEOUT) == WAIT_OBJECT_0) ? TRUE : FALSE; /* Win32 */
|
||||
|
||||
// ret = (wai_sem(sobj) == E_OK) ? TRUE : FALSE; // uITRON
|
||||
// ret = (wai_sem(sobj) == E_OK) ? TRUE : FALSE; /* uITRON */
|
||||
|
||||
// OSMutexPend(sobj, _FS_TIMEOUT, &err)); // uC/OS-II
|
||||
// ret = (err == OS_NO_ERR) ? TRUE : FALSE; //
|
||||
// OSMutexPend(sobj, _FS_TIMEOUT, &err)); /* uC/OS-II */
|
||||
// ret = (err == OS_NO_ERR) ? TRUE : FALSE;
|
||||
|
||||
// ret = (xSemaphoreTake(sobj, _FS_TIMEOUT) == pdTRUE) ? TRUE : FALSE; /* FreeRTOS */
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -100,16 +107,45 @@ void ff_rel_grant (
|
||||
_SYNC_t sobj /* Sync object to be signaled */
|
||||
)
|
||||
{
|
||||
ReleaseMutex(sobj); // Win32
|
||||
ReleaseMutex(sobj); /* Win32 */
|
||||
|
||||
// sig_sem(sobj); // uITRON
|
||||
// sig_sem(sobj); /* uITRON */
|
||||
|
||||
// OSMutexPost(sobj); // uC/OS-II
|
||||
// OSMutexPost(sobj); /* uC/OS-II */
|
||||
|
||||
// xSemaphoreGive(sobj); /* FreeRTOS */
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
#if _USE_LFN == 3 /* LFN with a working buffer on the heap */
|
||||
/*------------------------------------------------------------------------*/
|
||||
/* Allocate a memory block */
|
||||
/*------------------------------------------------------------------------*/
|
||||
/* If a NULL is returned, the file function fails with FR_NOT_ENOUGH_CORE.
|
||||
*/
|
||||
|
||||
void* ff_memalloc ( /* Returns pointer to the allocated memory block */
|
||||
UINT size /* Number of bytes to allocate */
|
||||
)
|
||||
{
|
||||
return malloc(size);
|
||||
}
|
||||
|
||||
|
||||
#else
|
||||
/*------------------------------------------------------------------------*/
|
||||
/* Free a memory block */
|
||||
/*------------------------------------------------------------------------*/
|
||||
|
||||
#error This file is not needed in this configuration.
|
||||
void ff_memfree(
|
||||
void* mblock /* Pointer to the memory block to free */
|
||||
)
|
||||
{
|
||||
free(mblock);
|
||||
}
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user