📄 fs.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 + -