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

📄 ftdevice.h

📁 HFAT32 v1.0是我依据FAT标准,按照自己的理解写出来的一个FAT文件系统 特性: 1.HFAT32 v1.0 是一个小型的嵌入式FAT文件系统,可以方便地在nand flash,R
💻 H
字号:
//---------------------------------------------------------------------------------
// Copyright jinhailiao 2008-2010
// E-mail:   jinhailiao@163.com
// Project:			HFAT16/32
// File:			ftdevice.h
// Description:		
//-------------------------------------------------------------
// Reversion Histroy:
//-------------------------------------------------------------
// Version		date		operations				by who
// 1.0.0		2008-06-01  create                  Kingsea
//---------------------------------------------------------------------------------
#ifndef __FT_DEVICE_H__
#define __FT_DEVICE_H__

#include "hfstype.h"



//fat device cmd define
//
#define DEVCMD_WRITE_PROTECT		1
#define DEVCMD_SECTOR_SIZE			2
#define DEVCMD_TOTAL_SECTOR		3
#define DEVCMD_SEC_PER_CLUS		4
#define DEVCMD_ROOTENTCNT_F16	5
#define DEVCMD_FAT_SIZE				6
#define DEVCMD_ERASE_ALL_SECTOR		7


//device flag
//
#define DEVINFO_FLAG_WRITE_PROTECT		0x0001U
//#define DEVINFO_FLAG_FORMATED			0x0002U



//fat device driver
//
typedef int (*pfnFatDevInit)(void);//complete device reset
typedef int (*pfnFatDevStatus)(void);// return device ready or busy, or other......
typedef int (*pfnFatDevRead)(S_DWORD sector, S_BYTE *OutBuf);
typedef int (*pfnFatDevWrite)(S_DWORD sector, S_BYTE *InBuf);
typedef int (*pfnFatDevCmd)(S_DWORD cmd, S_DWORD arg, S_DWORD *OutVal);
typedef int (*pfnFatDevFlush)(S_DWORD sector, S_BOOL FreeBuffer);

typedef struct tagFatDeviceDrv
{
	S_BYTE *DevName;
	pfnFatDevInit   FatDevInit;
	pfnFatDevStatus FatDevStatus;
	pfnFatDevRead   FatDevRead;
	pfnFatDevWrite  FatDevWrite;
	pfnFatDevCmd    FatDevCmd;
	pfnFatDevFlush  FatDevFlush;
}
S_FATDEVDRV, *SP_FATDEVDRV;



//fat devict info
//
typedef struct tagFatDevInfo
{
	S_BYTE  DiskName; // C, D, E, .....
	S_BYTE  FatType;
	S_WORD  flag;
	S_BYTE  SecPerClust;
	S_BYTE  NumFats;
	S_WORD  RootEntCnt;
	S_WORD  RsvdSec;
	S_WORD  BytsPerSec;
	S_WORD  FSInfo;
	S_WORD  BkBootSec;
	S_DWORD FatSize;
	S_DWORD RootClus;
	S_DWORD TotSec;
	S_DWORD FirstDatSec;
	SP_FATDEVDRV drv;
}
S_FATDEVINFO, *SP_FATDEVINFO;


#ifdef HAVE_INLINE

#ifndef _INLINE_
#error	_INLINE_ not defined!!! 
#endif

_INLINE_ S_BYTE  DevInf_DiskName(int dev);
_INLINE_ S_BYTE  DevInf_FatType(int dev);
_INLINE_ S_WORD  DevInf_flag(int dev);
_INLINE_ S_BYTE  DevInf_SecPerClust(int dev);
_INLINE_ S_BYTE  DevInf_NumFats(int dev);
_INLINE_ S_WORD  DevInf_RootEntCnt(int dev);
_INLINE_ S_WORD  DevInf_RsvdSec(int dev);
_INLINE_ S_WORD  DevInf_BytsPerSec(int dev);
_INLINE_ S_WORD  DevInf_FSInfo(int dev);
_INLINE_ S_WORD  DevInf_BkBootSec(int dev);
_INLINE_ S_DWORD DevInf_FatSize(int dev);
_INLINE_ S_DWORD DevInf_RootClus(int dev);
_INLINE_ S_DWORD DevInf_TotSec(int dev);
_INLINE_ S_DWORD DevInf_FirstDatSec(int dev);


#else

extern SP_FATDEVINFO AllDevInfo[];

#define DevInf_DiskName(dev)		AllDevInfo[dev]->DiskName
#define DevInf_FatType(dev)			AllDevInfo[dev]->FatType
#define DevInf_flag(dev)			AllDevInfo[dev]->flag
#define DevInf_SecPerClust(dev)		AllDevInfo[dev]->SecPerClust
#define DevInf_NumFats(dev)			AllDevInfo[dev]->NumFats
#define DevInf_RootEntCnt(dev)		AllDevInfo[dev]->RootEntCnt
#define DevInf_RsvdSec(dev)			AllDevInfo[dev]->RsvdSec
#define DevInf_BytsPerSec(dev)		AllDevInfo[dev]->BytsPerSec
#define DevInf_FSInfo(dev)			AllDevInfo[dev]->FSInfo
#define DevInf_BkBootSec(dev)		AllDevInfo[dev]->BkBootSec
#define DevInf_FatSize(dev)			AllDevInfo[dev]->FatSize
#define DevInf_RootClus(dev)		AllDevInfo[dev]->RootClus
#define DevInf_TotSec(dev)			AllDevInfo[dev]->TotSec
#define DevInf_FirstDatSec(dev)		AllDevInfo[dev]->FirstDatSec


#endif //HAVE_INLINE



void hai_InitFatDeviceData(void);
int hai_FatDevExist(int dev);
int _hai_InitFatDevice(int DevDrvNo);
int hai_GetDeviceNum(S_BYTE disk);
int hai_UpdateDevFatInfo(int DevNo);

int _hai_FatDevReset(int dev);//complete device reset on boot
int _hai_FatDevInit(int dev);//complete device reset on run
int _hai_FatDevStatus(int dev);// return device ready or busy, or other......
int _hai_FatDevRead(int dev, S_DWORD sector, S_BYTE *OutBuf);
int _hai_FatDevWrite(int dev, S_DWORD sector, S_BYTE *InBuf);
int _hai_FatDevCmd(int dev, S_DWORD cmd, S_DWORD arg, S_DWORD *OutVal);
int _hai_FatDevFlush(int dev, S_DWORD sector, S_BOOL FreeBuffer);


#endif //__FT_DEVICE_H__

⌨️ 快捷键说明

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