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

📄 mmc_fs.h

📁 TELECHIPS MP3解决方案UMS实现源代码
💻 H
字号:
#ifndef __MMCFS_H__
#define __MMCFS_H__

#include "fs_fat.h"
#include "genlib.h"

/////////////////////////////////////////////////////////////////////////////
// Partition IDs
#define	PARTID_UNKNOWN			0x00
#define	PARTID_FAT12			0x01
#define PARTID_XENIX_ROOT		0x02
#define	PARTID_XENIX_USR		0x03
#define	PARTID_FAT16_OLD		0x04		// up to 32MB
#define	PARTID_EXTENDED			0x05
#define PARTID_FAT16			0x06
#define PARTID_HPFS				0x07
#define PARTID_NTFS				0x07
#define PARTID_ADVANCED_UNIX	0x07
#define PARTID_QNX2				0x07		// QNX2.x pre-1988
#define PARTID_OS2_OLD			0x08
#define PARTID_AIX_BOOT			0x08
#define PARTID_SPLIT			0x08
#define PARTID_COMMODORE_DOS	0x08
#define PARTID_DELL				0x08
#define PARTID_QNX_QNY			0x08		// QNX1.x and 2.x ("qny")
#define PARTID_AIX_DATA			0x09				
#define PARTID_COHERENT			0x09
#define PARTID_QNX_QNZ			0x09		// QNX1.x and 2.x ("qnz")
#define PARTID_OS2_BOOT			0x0a
#define PARTID_FAT32			0x0b
#define PARTID_FAT32_LBA		0x0c

/////////////////////////////////////////////////////////////////////////////

#define MMC_FS_UNKNOWN			0
#define MMC_FS_FAT12			1
#define MMC_FS_FAT16			2
#define MMC_FS_FAT32			3

/////////////////////////////////////////////////////////////////////////////

enum TCC730_MMC_ERROR {
	MMC_ERR_NOERROR = 0,			// 0
	MMC_ERR_UNKNOWN,				// 1
	MMC_ERR_INVALID_FILESYS,		// 2
	MMC_ERR_ILLEGAL_COMMAND,		// 3
	MMC_ERR_COMMAND_CRC,			// 4
	MMC_ERR_PARAM,					// 5
	MMC_ERR_DATA_CRC,				// 6
	MMC_ERR_PROTECT,				// 7
	MMC_ERR_INVALID_CARD,			// 8
	MMC_ERR_IO,						// 9, Read/Write Error
	MMC_ERR_HANDLE_EXHAUST,			// 10
	MMC_ERR_ENTRY_EXHAUST,			// 11
	MMC_ERR_PARAMETER,				// 12
	MMC_ERR_FILE_NOT_FOUND,			// 13
	MMC_ERR_FILE_ALREADY_EXIST,		// 14
	MMC_ERR_EOF,					// 15, End of File
	MMC_ERR_READONLY,				// 16
	MMC_ERR_UNSUPPORT,				// 17
	MMC_ERR_DISKFULL,				// 18
	MMC_ERR_OUTOF_RULE,				// 19
	MMC_ERR_FILE_ALREADY_OPEN,		// 20
	MMC_ERR_COUNT
};

/////////////////////////////////////////////////////////////////////////////

// Format Level, It can be compatible with previous TCC730 SSFDC definitions
#define MMC_LOW_FORMAT		1
#define MMC_FAST_FORMAT		0
#define MMC_QUICK_FORMAT	2

/////////////////////////////////////////////////////////////////////////////
//typedef struct __tag_MMC_DriveInfo MMC_DiskInfo;

//typedef unsigned long (*TCC730_MMC_GetNextClusterProc)(MMC_DiskInfo* lpInfo, unsigned long int dwCurCluster);

typedef struct __tag_MMC_DriveInfo{
	unsigned int		nCylinder;		// Cylinder, Unused in TCC730_MMC_GetDiskInfo()
	unsigned int		nHead;			// Head/Cylinder
	unsigned int		nSectorNum;		// Sectors/Track
	unsigned int		nSectorSize;	// Bytes/Sector
	unsigned int		nClusterSize;	// Sectors/Cluster
	
	unsigned int		nFileSysType;		// FileSys Type, Invalid in TCC730_MMC_GetDiskPhysicalInfo()

	unsigned long int	dwTotalSector;		// Total sectors of this partition

	unsigned long int	dwBootSector;
	unsigned long int	dwFATStartSector;
	unsigned long int	dwRootStartSector;
	unsigned long int	dwDataStartSector;

	unsigned long int	dwClusterCount;
	unsigned long int	dwFATSectorCount;
	unsigned int		nRootEntryCount;	// FAT12 & 16 only

	unsigned int		nFATCount;
	unsigned long int	dwRootCluster;		// Root Cluster Number, Valid only in FAT32

	unsigned long		dwUsedClusterCount;
	unsigned long		dwFreeClusterCount;
} MMC_DISK_INFO;

/////////////////////////////////////////////////////////////////////////////
#define MMC_FILE_FLAG_READ				0x0000		// default

#define MMC_FILE_FLAG_WRITE				0x0001
#define MMC_FILE_FLAG_CREATE			0x0002
#define MMC_FILE_FLAG_TRUNCATE			0x0004
#define MMC_FILE_FLAG_CACHE				0x0008		// writing default

#define MMC_FILE_FLAG_USED				0x8000
#define MMC_FILE_FLAG_CREATED			0x4000

typedef struct MMC_FileHandleInfo
{
	unsigned int	nFlags;

	unsigned long	dwStartCluster;
	unsigned long	dwSectorCount;
	unsigned long	dwFileSize;

	unsigned long	dwCurCluster;
	unsigned int	nSectorInCluster;

	unsigned long	dwSectorPointer;

	unsigned long 	_dwEntrySector;
	unsigned int	_nEntryIndexInSector;

	unsigned long 	_dwEntryCluster;
	unsigned int	_nEntrySectorInCluster;
} MMC_FILE_HANDLE_INFO;

typedef struct MMC_FileInfo
{
	// Entry Position at Parent Directory Entry
	unsigned int  _nIndexInSector;
	unsigned long _dwSector;

	unsigned int  _nSectorInCluster;
	unsigned long _dwCluster;

	// file info
	FAT_DIRECTORY_ENTRY entry;
} MMC_FILE_INFO;

typedef int (*TCC730_MMC_ENUM_ENTRY_PROC)(CONST_FAKE FAT_DIRECTORY_ENTRY* lpEntry,
										  unsigned nEntryIndex,
										  unsigned long dwSector,
										  unsigned nSectorInCluster,
										  unsigned long dwCluster,
										  void* lpParam);

/////////////////////////////////////////////////////////////////////////////

#define MMC_MAX_FILE_OPEN_NUM			2

#define MMC_FILE_BEGIN					0
#define MMC_FILE_CURRENT				1
#define MMC_FILE_END					2

#if defined(__cplusplus)
extern "C" {
#endif

void	TCC730_AdjustParitionEntry		(FAT_PARTITION_ENTRY* lpEntry);
void	TCC730_AdjustMBR				(FAT_MBR* lpMBR);

void	TCC730_AdjustPBRCommon			(FAT_PBR_HEAD* lpPBR);
void	TCC730_AdjustPBR16				(FAT16_PBR* lpPBR);
void	TCC730_AdjustPBR32				(FAT32_PBR* lpPBR);

int		TCC730_MMC_GetDiskPhysicalInfo	(MMC_DISK_INFO* lpInfo);
int		TCC730_MMC_GetDiskInfo			(MMC_DISK_INFO* lpInfo, void* lpBuffer);

unsigned      TCC730_MMC_GetSectorSize	(void);
unsigned long TCC730_GetClusterSize		(void);
unsigned long TCC730_MMC_GetDiskSectors	(void);
unsigned long TCC730_MMC_GetDiskUsedSectors(void* lpBuffer);
unsigned long TCC730_MMC_GetDiskFreeSectors(void* lpBuffer);

///////////////////////////////////////////////////////////////////////////////
// Functions for Enumerate Entries 
int		TCC730_MMC_EnumEntriesEx		(unsigned long dwCurDirectory,
										TCC730_MMC_ENUM_ENTRY_PROC lpProc,
										void* lpParam, void* lpBuffer);

///////////////////////////////////////////////////////////////////////////////
// Functions for File Information
int		TCC730_MMC_GetFileInfoEx		(CONST_FAKE char* lpszPathName,
										 int nLen,
										 unsigned long dwCurDirectory,
										 MMC_FILE_INFO* lpfi,
										 void* lpBuffer);
int		TCC730_MMC_GetFileInfo			(CONST_FAKE char* lpszPathName,
										 int nLen,
										 MMC_FILE_INFO* lpfi,
										 void* lpBuffer);
int		TCC730_MMC_GetFileInfoByCodeEx	(code char* lpszPathName,
										 int nLen,
										 unsigned long dwCurDirectory,
										 MMC_FILE_INFO* lpfi,
										 void* lpBuffer);
int		TCC730_MMC_GetFileInfoByCode	(code char* lpszPathName,
										 int nLen,
										 MMC_FILE_INFO* lpfi,
										 void* lpBuffer);
int		TCC730_MMC_GetFileInfoByIndexEx	(unsigned long dwCurDirectory,
										 unsigned nFileIndex,
										 MMC_FILE_INFO* lpfi,
										 void* lpBuffer);
int		TCC730_MMC_GetFileInfoByIndex	(unsigned nFileIndex,
										 MMC_FILE_INFO* lpfi,
										 void* lpBuffer);
int 	TCC730_MMC_GetFileInfoByCluster	(unsigned long dwCluster,
										 MMC_FILE_INFO* lpfi,
										 void* lpBuffer);
unsigned long TCC730_MMC_GetFileSize	(CONST_FAKE char* lpszPathName, void* lpBuffer);
int		TCC730_MMC_GetLongFileName		(CONST_FAKE char* lpszShortName,
										 unsigned short* lpwszLFN,
										 int* lpnLen,
										 void* lpBuffer);
int		TCC730_MMC_GetLongFileNameByIndex(int nIndex,
										 unsigned short* lpwszLFN,
										 int* lpnLen,
										 void* lpBuffer);
int		TCC730_MMC_DeleteFile			(CONST_FAKE char* lpszPathName, void* lpBuffer);
int		TCC730_MMC_DeleteFileByIndex	(int nIndex, void* lpBuffer);
int		TCC730_MMC_DeleteOpenFile		(int nHandle, void* lpBuffer);

///////////////////////////////////////////////////////////////////////////////
// Functions for File System Initializing and Directory

int		TCC730_MMC_InitFileSystem		(void* lpBuffer);
int		TCC730_MMC_MakeDirectory		(CONST_FAKE char* lpszPathName, unsigned long* lpdwNewDirectory, void* lpBuffer);
int		TCC730_MMC_MakeDirectoryByCode	(code char* lpszPathName, unsigned long* lpdwNewDirectory, void* lpBuffer);
int		TCC730_MMC_SetCurrentDirectory	(CONST_FAKE char* lpszPathName, void* lpBuffer);
int		TCC730_MMC_SetCurrentDirectoryByCode(code char* lpszPathName, void* lpBuffer);
int		TCC730_MMC_SetCurrentDirectoryByCluster(unsigned long dwCluster);
#define TCC730_MMC_ChangeDirectory(__lpszPathName, __lpBuffer)		\
		TCC730_MMC_SetCurrentDirectory(__lpszPathName, __lpBuffer)
#define TCC730_MMC_ChangeDirectoryByCode(__lpszPathName, __lpBuffer)		\
		TCC730_MMC_SetCurrentDirectoryByCode(__lpszPathName, __lpBuffer)
#define TCC730_MMC_ChangeDirectoryByCluster(__dwCluster)		\
		TCC730_MMC_SetCurrentDirectoryByCluster(__dwCluster)

unsigned long TCC730_MMC_GetCurrentDirectory(char* lpszDirName, unsigned nLen, void* lpBuffer);

///////////////////////////////////////////////////////////////////////////////
// Functions for Cache optimizing

void	TCC730_MMC_OnIdleRead			(void);
void	TCC730_MMC_OnIdleWrite			(void);

///////////////////////////////////////////////////////////////////////////////
// Finctions for Entry Information

unsigned long TCC730_MMC_GetTotalFileNumEx(unsigned long dwCurDirectory, void* lpBuffer);
unsigned long TCC730_MMC_GetTotalFileNum(void* lpBuffer);
unsigned long TCC730_MMC_GetFreeEntryEx	(unsigned long dwCurDirectory, void* lpBuffer);
unsigned long TCC730_MMC_GetFreeEntry	(void* lpBuffer);
int			  TCC730_MMC_AllocEntryEx	(unsigned long dwCurDirectory,
										 CONST_FAKE char* lpszFileName,
										 int nAttrib,
										 MMC_FILE_INFO* lpfi,
										 void* lpBuffer,
										 int bDirectory);
unsigned long TCC730_MMC_GetEntryCountEx(unsigned dwDirectory, void* lpBuffer);
unsigned long TCC730_MMC_GetEntryCount	(void* lpBuffer);
int		TCC730_MMC_ReadEntrySectorEx	(unsigned dwDirectory,
										 unsigned long dwSectorIndex,
										 void* lpBuffer);
int		TCC730_MMC_ReadEntrySector		(unsigned long dwSectorIndex, void* lpBuffer);

///////////////////////////////////////////////////////////////////////////////
// Functions for File I/O
int		TCC730_MMC_OpenFile				(CONST_FAKE char* lpszFileName,
										 int nFlags,
										 int nAttrib,
										 int* lpnHandle,
										 void* lpBuffer);
int		TCC730_MMC_OpenFileByCode		(code char* lpszFileName,
										 int nFlags,
										 int nAttrib,
										 int* lpnHandle,
										 void* lpBuffer);
int		TCC730_MMC_OpenFileByIndex		(int nFileIndex,
										 int nFlags,
										 int* lpnHandle,
										 void* lpBuffer);
int		TCC730_MMC_CloseFile			(int nHandle, void* lpBuffer);
int		TCC730_MMC_GetOpenFile			(CONST_FAKE char* lpszPathName, void* lpBuffer);
int		TCC730_MMC_GetOpenFileByCode	(code char* lpszPathName, void* lpBuffer);
int		TCC730_MMC_GetOpenFileByIndex	(int nIndex, void* lpBuffer);
int		TCC730_MMC_GetOpenFileInfo		(int nHandle, MMC_FILE_HANDLE_INFO* lpfhi);
int		TCC730_MMC_ReadFileSector		(int nHandle, void* lpBuffer);
int		TCC730_MMC_WriteFileSector		(int nHandle, void* lpDataBuffer, unsigned nLen);

///////////////////////////////////////////////////////////////////////////////
// Functions for File Pointer Moving

int		TCC730_MMC_SetFileSectorPointer	(int nHandle, long lMoveSector, int nMoveMethod, void* lpBuffer);
int		TCC730_MMC_GetFileSectorPointer	(int nHandle, unsigned long* lpdwSectorPointer);

///////////////////////////////////////////////////////////////////////////////
// Functions for FORMAT

typedef void (*MMC_FORMAT_PROGRESS_PROC)(unsigned long dwTotalWork, unsigned long dwProgWork);
int		TCC730_MMC_Format				(int nFormatLevel,
										 int nExpCluster,
										 MMC_FORMAT_PROGRESS_PROC lpProc,
										 void* lpBuffer);

#if defined(__cplusplus)
}
#endif

#endif

⌨️ 快捷键说明

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