⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fs.c

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 C
字号:
/******************************************************************/
/*   Copyright (C) 2007 ROCK-CHIPS FUZHOU . All Rights Reserved.  */
/*******************************************************************
File          :  fs.c
Desc        :  封装系统统一的 FS接口.

Author     : huangsl
Date        : 2007-06-21
Notes      :

$Log: fs.c,v $
Revision 1.6  2008/06/21 09:33:00  HSL
增加文件系统PC仿真支持.

Revision 1.5  2008/06/19 04:43:25  Administrator
代码整理!

Revision 1.4  2008/05/28 01:42:44  HSL
增加 PC仿真下建立目录的支持.

Revision 1.3  2008/05/26 03:34:52  HSL
增加 PC仿真下 FS_init函数.

Revision 1.2  2008/05/20 07:44:49  HSL
根据PC仿真根改部分文件,增加部分WCHAR接口,根据状态栏进行相应修改.

Revision 1.1.1.1  2008/05/07 04:15:08  Administrator
no message

Revision 1.9  2008/01/08 05:04:54  Huangshilin
增加升级 更新 LOADER 的功能.

Revision 1.8  2007/12/13 01:47:00  Fangzhenfu
取消 媒体库自动更新

Revision 1.7  2007/12/12 02:39:03  Fangzhenfu
文件系统更新! FLASH 底层更新!

Revision 1.6  2007/11/14 08:38:00  Fangzhenfu
文件格式化 BUG 修正!

Revision 1.5  2007/10/13 02:34:15  Huangshilin
System

Revision 1.4  2007/10/11 04:08:09  Huangshilin
System\os

Revision 1.3  2007/10/08 02:58:51  Lingzhaojun
添加版本自动注释脚本

* huangsl             2007-06-21      2007-06-21     封装系统统一的 FS 的接口.
*
*********************************************************************/

#include "include.h"
#include "fs.h"


#if (!defined( BOARD ) && !defined(ROCK_FS) ) || defined(_REGISTER)
#include <direct.h>
#include    <errno.h>

MY_FILE *FSFileOpen(const char *filename, const char *mode)
{
    return fopen(filename , mode);
}
int FSFileClose(MY_FILE        *stream)
{
    return fclose(stream);
}
size_t FSFileRead(void *buffer, size_t size, MY_FILE *stream)
{
    return fread(buffer , 1 , size, stream);
}
size_t FSFileWrite(const void *buffer, size_t size, MY_FILE *stream)
{
    return fwrite(buffer , 1 , size , stream);
}

int FSFileSeek(MY_FILE *stream, size_t offset, int origin)
{
    return fseek(stream , (long)offset , origin);
}

// 0: OK , 其他:错误
int FSFileDelete(const char *filename)
{
    return -1;
}

size_t FSFileGetSize(MY_FILE        *stream)
{
    size_t size;
    size_t bPos = ftell(stream);
    fseek(stream , 0 , SEEK_END);
    size = ftell(stream);
    fseek(stream , bPos , SEEK_SET);
    return size;
}

int FSFileSeekEx(MY_FILE *stream, size_t offset, INT32U clus)
{
    return 0;
}

int     FSFieGetPos(MY_FILE *stream, size_t *pos)
{
    return fgetpos(stream, (fpos_t*)pos);
}


int      FSMakeDir(char *Path)
{
    int r = _mkdir(Path);
    if (r == -1)
    {
        if (errno == EEXIST)
            r = 0;
    }
    return r;
}

int FS_Init(void)
{
    return 1;
}

/****************************************************************/
#else   //板子实现
/****************************************************************/

#if defined(BOARD)
extern const FS_DEVICE_TYPE FS_ImgDevice;
extern const FS_DEVICE_TYPE FS_FlashSysDevice;
extern const FS_DEVICE_TYPE FS_FlashUserDevice;
extern const FS_DEVICE_TYPE FS_SdmmcDevice;
#else
extern const FS_DEVICE_TYPE FS_PCSysDevice;
extern const FS_DEVICE_TYPE FS_PCUserDevice;
#endif

int FS_Init(void)
{
    int DevNum = 0;
    FS_VariableInit();
#if !defined(BOARD)
    if(FS_AddDevice(&FS_PCSysDevice))
    {
        DevNum++;
    }
	if(FS_AddDevice(&FS_PCUserDevice))
	{
		DevNum++;
	}
#else
#if(FLASH_DISK)
    if (FS_AddDevice(&FS_FlashSysDevice))
    {
        DevNum++;
    }
    if (FS_AddDevice(&FS_FlashUserDevice))
    {
        DevNum++;
    }
#endif
#if(SD_CARD_EN)
    if (FS_AddDevice(&FS_SdmmcDevice))
    {
        DevNum++;
    }
#endif

#endif
    //FS_RecoveryFile();
    return(DevNum);
}


MY_FILE *FSFileOpen(const char *filename, const char *mode)
{
    return FS_fopen(filename, mode);
}

// 0: OK , 其他:错误,一下同

int FSFileClose(MY_FILE        *stream)
{
    return (int)FS_fclose(stream);
}
size_t FSFileRead(void *buffer, size_t size, MY_FILE *stream)
{
    return FS_fread((UINT8*)buffer, 1, size, stream);
}
size_t FSFileWrite(const void *buffer, size_t size, MY_FILE *stream)
{
    return FS_fwrite((UINT8*)buffer, 1, size, stream);
}

/*
    2007-08-31,huangsl,考虑到 fileseek 效率,返回 seek 以后文件对应的
    clus , 以便外部备份.暂时不考虑错误情况.
*/
int FSFileSeek(MY_FILE *stream, size_t offset, int origin)
{
    FS_fseek(stream, (long)offset, (UINT8)origin);
    return stream->Clus;
}


int FSFileDelete(const char *filename)
{
    return FS_fdelete(filename);
}

size_t FSFileGetSize(MY_FILE        *stream)
{
    return (stream->FileSize);
}

int     FSFieGetPos(MY_FILE *stream, size_t *pos)
{
    *pos = stream->Offset;
    return 0;
}
/*
    2007-08-31,huangsl,为了提高效率,直接输入 offset 和该offset 对应的 clus。
*/

int FSFileSeekEx(MY_FILE *stream, size_t offset, INT32U clus)
{
    stream->Offset = offset ;
    stream->Clus = clus;
    return 0;
}

int      FSMakeDir(char *Path)
{
    return FS_MakeDir(Path);
}

#endif
/****************************************************************/
//      END OF FILE
/****************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -