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

📄 smc_fs.h

📁 TELECHIPS MP3解决方案UMS实现源代码
💻 H
📖 第 1 页 / 共 2 页
字号:

};

// =============== 2002.12.20 ADD by HHC =================
typedef struct EntryInfo {

	unsigned char		ShortName[11];
	unsigned char		Attrib;
	unsigned char		NTRes;
	unsigned char		CrtTimeTenth;
	unsigned int		CrtTime;
	unsigned int		CrtDate;
	unsigned int		LstAccDate;
	unsigned int		FstClusH;
	unsigned int		WrtTime;
	unsigned int		WrtDate;
	unsigned int		FstClusLO;
	unsigned long		FileSize;	
	
} SMC_ENTRY_INFO;
//========================================================
	
typedef struct DIRFILE_INFO {

	SMC_ENTRY_INFO		Entry;
	//unsigned char		Short_Name[11];
	//unsigned char		Attrib;
//	unsigned char		NTRes;
//	unsigned char		CrtTimeTenth;
//	unsigned int		CrtTime;
//	unsigned int		CrtDate;
//	unsigned int		LstAccDate;
//	unsigned int		FstClusH;
//	unsigned int		WrtTime;
//	unsigned int		WrtDate;
//	unsigned int		FstClusLO;
	//unsigned long		FileSize;	

	unsigned int		LogDrvNum;
	unsigned long		FstClus;
	unsigned long		DirClus;
	unsigned char		Long_Name[MAX_LONGNAME+2];
	
} SMC_FILE_INFO;

typedef struct DRV_INFO {								

	unsigned char		FAT_Type;				// 0: Not Valid	1: FAT12	2:FAT16		3:FAT32
	unsigned long		RootDirSectors;
	unsigned long		FAT1StartSector;		// FAT1 Start Sector
	unsigned long		FAT2StartSector;		// FAT2 Start Sector
	unsigned int		FATSize;				// FAT Size
	unsigned long		FirstDataSector;		// Cluster Start Sector	2TH CLUSTER
	unsigned long		DirStartSector;			// Root Start Sector
	unsigned long		DataSec;				// Total Data Sector
	unsigned long		CountofClusters;
	unsigned long		TotalBytes;				// Total Capacity
	unsigned long		SPClusForGetEmpty;		// Start Position for Empty Cluster fast

	unsigned long		CurrDirectory;			// Current Directory Cluster
		
	struct PART_INFO	part;					// [18Bytes]
	struct BS_INFO		BS;						// [57Bytes]

} SMC_DRV_INFO;									// [96Bytes] 

/*
struct	_FAT_Cache {

	unsigned int		Used;
	unsigned int		LogDrvNum;
	unsigned int		Changed;
	unsigned long		Addr;
	unsigned char		Data[1536];				// 512*3 [ because FAT12 ]

};	
*/

//extern struct	_FILE	FILE;					// Define in FILE.H
typedef	struct	_HFILE {

	SMC_ENTRY_INFO		Entry;
	//unsigned char		FileName[8];
	//unsigned char		FileExt[3];	
	
	unsigned int		Used;
	unsigned int		DrvNum;
	unsigned long		OldReadBytes;	
	unsigned long		ReadBytes;
	unsigned long		Size;
	unsigned long		FstClus;
	unsigned long		CurClus;	
	unsigned long		CurOffset;		
	unsigned long		DirClus;
			
} HFILE;


#pragma	packed off
//**********************************************************
//*
//*		Global Variables
//*
//**********************************************************
#pragma	memory=data_seg(TCC730_INTERNAL)

SMC_FS_EXT	struct DRV_INFO			mDrvInfo[MAX_PHY_DRIVE];
//SMC_FS_EXT	struct _FAT_Cache		mFATCache;					// Defined already in FSCOMMON.H

SMC_FS_EXT	unsigned int			mTOTAL_Logic_Drv;
SMC_FS_EXT	unsigned int			mTOTAL_LogDrvofPhyDrv[MAX_PHY_DRIVE];
SMC_FS_EXT	unsigned int			mStatus_PhyDrv[MAX_PHY_DRIVE];

SMC_FS_EXT	unsigned int			mIsUsedVirTualFAT1ForSMC;
SMC_FS_EXT	unsigned int			mIsUsedFATCacheForWriteFile;

#pragma memory=default
//**********************************************************
//*
//*		Definition FUNCTION
//*
//**********************************************************

//===============================================
//=		Definition Function of SMC_MPX.C
//===============================================
extern SMC_MPX_ERROR		SMC_MPX_InitFileSystem( drv_u16 SMC_DrvNo, drv_u8* Sector_Buffer );
extern unsigned long int	SMC_MPX_GetTotalFileNum( drv_u16 SMC_DrvNo, drv_u8* Sector_Buffer );
extern SMC_MPX_ERROR		SMC_MPX_CloseFile( drv_u16 FHandle, drv_u8* Sector_Buffer );
extern SMC_MPX_ERROR		SMC_MPX_GetFileInfoByIndex( drv_u16 SMC_DrvNo, drv_u16 nFileIndex, SMC_FILE_INFO* lpfi, drv_u8* Sector_Buffer );
extern SMC_MPX_ERROR		SMC_MPX_OpenFileByIndex( drv_u16 SMC_DrvNo, drv_u16 nFileIndex, drv_u16 fopen_mode, F_HANDLE* lpnHandle, drv_u8* Sector_Buffer );
extern SMC_MPX_ERROR		SMC_MPX_GetLongFileNameByIndex( drv_u16 SMC_DrvNo, drv_u16 nIndex, drv_u8* lpwszLFN, drv_u16* lpnLen, drv_u8* Sector_Buffer );
extern SMC_MPX_ERROR		SMC_MPX_DeleteFileByIndex( drv_u16 SMC_DrvNo, drv_u16 nIndex, drv_u8* Sector_Buffer );
extern SMC_MPX_ERROR		SMC_MPX_ReadIdTag3( drv_u16 SMC_DrvNo, drv_u16 nIndex, MPX_IDTAG3_INFO* lpIdTag3Info, MPX_TYPE_INFO* lpTypeInfo );
/*
extern SMC_MPX_ERROR		SMC_MPX_ReadIdTag3( drv_u16 SMC_DrvNo, drv_u16 nIndex, drv_u8* lpbFlags,
												drv_u8 szTitle[30], drv_u8 szArtist[30], drv_u8 szAlbum[30],
												drv_u8 szYear[4], drv_u8 szComment[30], drv_u8* lpbGenre,
												drv_u8* Tag3Buffer, drv_u8* Sector_Buffer );
*/

extern SMC_MPX_ERROR 		SMC_MPX_DecoderInit( drv_u16 SMC_DrvNo, drv_u16* lpnHandle, drv_u16 nFileIndex,
												 drv_u16 nMode, drv_u32 dwBufferStart, drv_u8* Sector_Buffer );
extern SMC_MPX_ERROR		SMC_MPX_MoveToDecoder( drv_u16 nHandle, drv_u32 dwMoveCount, drv_u16 nMode, drv_u32 dwBufferStart,
									 			   drv_u32 dwBufferEnd, drv_u16 bResetBuffer,
									 			   volatile drv_u32* lpdwWritePtr,volatile drv_u16* lpnReadCountPtr,
									 			   drv_u8* Sector_Buffer );
extern SMC_MPX_ERROR		SMC_MPX_ReadOnePage( drv_u16 nHandle, drv_u32 dwBufferStart, drv_u8* Sector_Buffer );
extern SMC_MPX_ERROR		SMC_MPX_EncoderInit( drv_u16 SMC_DrvNo, drv_u8 lpszName[8], drv_u8 lpszExt[3],
												 drv_u16* lpnHandle, drv_u32 dwBufferStart, drv_u8* Sector_Buffer );
extern SMC_MPX_ERROR		SMC_MPX_MoveFromEncoder( int nHandle, unsigned long dwMoveCount, int bSilent );
extern SMC_MPX_ERROR		SMC_MPX_EncoderClose( int nHandle, drv_u8* Sector_Buffer );
extern SMC_MPX_ERROR		SMC_MPX_GetEncodeFileNum( drv_u16 SMC_DrvNo, int* lpnFileNum, drv_u8* Sector_Buffer );
extern SMC_MPX_ERROR		SMC_MPX_Format( drv_u16 SMC_DrvNo, drv_u16 Mode, drv_u8* Sector_Buffer );

//===============================================
//=		Definition Function of FAT System
//===============================================
extern unsigned long		SMC_FS_GetEntryCount( drv_u16 LogDrvNum, drv_u8* Sector_Buffer );
extern SMC_FS_ERROR			SMC_FS_ReadEntrySector( drv_u16 LogDrvNum, drv_u32 dwSectorIndex,
													drv_u8* InfoBuffer, drv_u8* Sector_Buffer );
														
extern SMC_FS_ERROR			SMC_FS_Format( drv_u16 LogDrvNum, drv_u16 Mode, drv_u8* Buffer512 );
extern SMC_FS_ERROR			SMC_FS_InitIO( void );
extern SMC_FS_ERROR			SMC_FS_Init( drv_u8* Sector_Buffer );	

extern unsigned int			SMC_FS_GetTotalOfPhyDrv( void );
extern unsigned int			SMC_FS_GetTotalOfLogDrv( drv_u8* Sector_Buffer );
extern unsigned int			SMC_FS_GetTotalOfLogDrvInPhyDrv( drv_u16 PhyDrvNum, drv_u8* Sector_Buffer );
extern unsigned int			SMC_FS_GetPhyDrvNo( drv_u16 LogDrvNum );
extern unsigned int			SMC_FS_GetPhyPartNo( drv_u16 LogDrvNum );
extern code unsigned char*	SMC_FS_GetPhyDrvName( drv_u16 PhyDrvNum );
extern unsigned int			SMC_FS_GetLogDrvNo( drv_u16 PhyDrvNum, drv_u16 PhyPartNum );

extern SMC_FS_ERROR			SMC_FS_GetLogDrvInfo( drv_u16 LogDrvNum, struct DRV_INFO *sDrvInfo, drv_u8* Sector_Buffer );
extern SMC_FS_ERROR			SMC_FS_GetTotalOfFileorDirInDirectory( drv_u16 LogDrvNum, drv_u32 DirClus, drv_u16* GetTotalSubDir, drv_u16* GetTotalFile, drv_u16 Max_FILEEXN,
																   drv_u8* Support_FILEEXN, drv_u8* Sector_Buffer );
extern SMC_FS_ERROR			SMC_FS_GetInfoOfFileorDirInDirectory( drv_u16 LogDrvNum, drv_u32 DirClus, drv_u16 Get_Order, drv_u16 DirorFile, struct DIRFILE_INFO* Get_DirFile,
																  drv_u16 Max_FILEEXN, drv_u8* Support_FILEEXN, drv_u8* Sector_Buffer );
extern unsigned long		SMC_FS_CreateDir( drv_u16 LogDrvNum, drv_u32 ParentClus, drv_u8* DirName, drv_u8* Sector_Buffer );
extern SMC_FS_ERROR			SMC_FS_IsDirectoryCluster( drv_u16 LogDrvNum, drv_u32 DirClus, drv_u8* Sector_Buffer );
extern unsigned long		SMC_FS_GetParentDirectoryCluster( drv_u16 LogDrvNum, drv_u32 CurrDirClus, drv_u8* Sector_Buffer );
extern SMC_FS_ERROR			SMC_FS_UpdateFileEntryInRoot( drv_u16 LogDrvNum, drv_u32 DirClus, struct DIRFILE_INFO* GetFileInfo, drv_u16 ModeType, drv_u8* Sector_Buffer );
extern SMC_FS_ERROR			SMC_FS_DeleteEntry( drv_u16 LogDrvNum, drv_u32 Dir_Clus, drv_u32 Cur_Sector, drv_u16 Order, drv_u8* Sector_Buffer );
extern SMC_FS_ERROR			SMC_FS_GetDirEntryWithDirClus( drv_u16 LogDrvNum, drv_u32 DirClus, struct DIRFILE_INFO* Get_DirFile, drv_u8* Sector_Buffer );
extern SMC_FS_ERROR			SMC_FS_GetDirClusWithDirName( drv_u16 LogDrvNum, drv_u8* PathName, drv_u32 CurrDirClus, drv_u32* FindDirClus, drv_u8* Sector_Buffer );
extern SMC_FS_ERROR			SMC_FS_GetFileInfoWithFileShortName( drv_u16 LogDrvNum, drv_u8* FileName, drv_u8* ExtName, drv_u32 CurrDirClus,
																 struct DIRFILE_INFO* GetFileInfo, drv_u8* Sector_Buffer );
extern SMC_FS_ERROR			SMC_FS_GetPreviousDir( drv_u16 LogDrvNum, drv_u32 CurrDir_Clus, drv_u32* Prev_DirClus, drv_u8* Sector_Buffer );
extern SMC_FS_ERROR			SMC_FS_GetInfoOfDirFile( drv_u16 LogDrvNum, drv_u32 StartDir_Clus, drv_u32 Dir_Clus, drv_u32 Get_Sector, drv_u16 Order, struct DIRFILE_INFO* Get_DirFile, drv_u8* Sector_Buffer );
extern unsigned long		SMC_FS_ReadFromFile( HFILE* pFile, drv_u8* Buffer, drv_u32 ReadSize );
extern unsigned long		SMC_FS_WriteIntoFile( HFILE* pFile, drv_u8* Buffer, drv_u32 WriteSize );
extern SMC_FS_ERROR			SMC_FS_DeleteFile( HFILE* pFile, drv_u8* Sector_Buffer );
extern SMC_FS_ERROR			SMC_FS_FastSeekClusterOfFile( HFILE* pFile, drv_u8* Sector_Buffer );
extern SMC_FS_ERROR			SMC_FS_GetFastFindForwardCluster( drv_u16 LogDrvNum, drv_u32 Curr_Clus, drv_u32 Offset, drv_u32* Find_Clus, drv_u8* Sector_Buffer );
extern SMC_FS_ERROR			SMC_FS_GetFastFindBackwardCluster( drv_u16 LogDrvNum, drv_u32 Curr_Clus, drv_u32 Offset, drv_u32* Find_Clus, drv_u8* Sector_Buffer );
extern SMC_FS_ERROR			SMC_FS_GetFastFindForwardClusterInFATCache( drv_u16 LogDrvNum, drv_u32 Curr_Clus, drv_u32 Offset, drv_u32* Find_Clus, drv_u8* Sector_Buffer );
extern SMC_FS_ERROR			SMC_FS_GetFastFindBackwardClusterInFATCache( drv_u16 LogDrvNum, drv_u32 Curr_Clus, drv_u32 Offset, drv_u32* Find_Clus, drv_u8* Sector_Buffer );
extern SMC_FS_ERROR			SMC_FS_GetPreviousDirCluster( drv_u16 LogDrvNum, drv_u32 ParentDir_Clus, drv_u32 Curr_Clus, drv_u32* Prev_Clus, drv_u8* Sector_Buffer );
extern SMC_FS_ERROR			SMC_FS_GetNextCluster( drv_u16 LogDrvNum, drv_u32 Curr_Clus, drv_u32* Next_Clus, drv_u8* Sector_Buffer );
extern SMC_FS_ERROR			SMC_FS_SetNextCluster( drv_u16 LogDrvNum, drv_u32 Curr_Clus, drv_u32 Next_Clus, drv_u8* Sector_Buffer );
extern SMC_FS_ERROR			SMC_FS_GetEmptyCluster( drv_u16 LogDrvNum, drv_u32* Empty_Clus, drv_u16 SearchType, drv_u8* Sector_Buffer );
extern SMC_FS_ERROR			SMC_FS_GetNextClusterInFATCache( drv_u16 LogDrvNum, drv_u32 Curr_Clus, drv_u32* Next_Clus, drv_u8* Sector_Buffer );
extern SMC_FS_ERROR			SMC_FS_SetNextClusterInFATCache( drv_u16 LogDrvNum, drv_u32 Curr_Clus, drv_u32 Next_Clus, drv_u8* Sector_Buffer );
extern SMC_FS_ERROR			SMC_FS_GetEmptyClusterInFATCache( drv_u16 LogDrvNum, drv_u32* Empty_Clus, drv_u16 SearchType, drv_u8* Sector_Buffer );
extern SMC_FS_ERROR			SMC_FS_ClearCluster( drv_u16 LogDrvNum, drv_u32 Clear_Clus, drv_u8* Sector_Buffer );
extern SMC_FS_ERROR			SMC_FS_GetFATInfo( struct DRV_INFO *sDrvInfo );
extern SMC_FS_ERROR			SMC_FS_GetFATType( struct DRV_INFO *sDrvInfo );
extern SMC_FS_ERROR			SMC_FS_CheckFAT1IsNormal( drv_u16 LogDrvNum, drv_u8* Sector_Buffer );
extern SMC_FS_ERROR			SMC_FS_SetFAT1ForDefected( drv_u16 LogDrvNum, drv_u8* Sector_Buffer );
extern SMC_FS_ERROR			SMC_FS_SetFAT1ForNormal( drv_u16 LogDrvNum, drv_u8* Sector_Buffer );
extern SMC_FS_ERROR			SMC_FS_OpenFATCache( drv_u16 LogDrvNum, drv_u8* Sector_Buffer );
extern SMC_FS_ERROR			SMC_FS_CloseFATCache( drv_u16 LogDrvNum, drv_u8* Sector_Buffer );
extern SMC_FS_ERROR			SMC_FS_ChangeFATCache( drv_u16 LogDrvNum, drv_u32 CurrClus, drv_u8* Sector_Buffer );
extern SMC_FS_ERROR			SMC_FS_FlushFATCache( drv_u16 LogDrvNum, drv_u8* Sector_Buffer );
extern SMC_FS_ERROR			SMC_FS_SetUsedStatusFATCacheForWriteFile( void );
extern SMC_FS_ERROR			SMC_FS_SetUnUsedStatusFATCacheForWriteFile( void );
extern SMC_FS_ERROR			SMC_FS_CopyFAT1toFAT2( drv_u16 LogDrvNum, drv_u8* Sector_Buffer );
extern SMC_FS_ERROR			SMC_FS_CopyFAT2toFAT1( drv_u16 LogDrvNum, drv_u8* Sector_Buffer );
extern SMC_FS_ERROR			SMC_FS_CompareFAT1withFAT2( drv_u16 LogDrvNum, drv_u8* Sector_Buffer1, drv_u8* Sector_Buffer2 );
extern SMC_FS_ERROR			SMC_FS_GetFreeAndUsedSectorSize( drv_u16 LogDrvNum, drv_u32* FreeSize, drv_u32* UsedSize, drv_u8* Sector_Buffer );

extern SMC_FS_ERROR			SMC_FS_GetTotalDriveorPartitionInfo( drv_u16 PHY_Drv, drv_u16* LOG_Total_Drv, struct PART_INFO* PartInfo,
																 drv_u16 Type, drv_u8* Sector_Buffer );
extern SMC_FS_ERROR			SMC_FS_ReadBootSector( drv_u16 PhyDrv, drv_u32 LBA_Addr, struct BS_INFO *BS, drv_u8* Sector_Buffer );
extern SMC_FS_ERROR			SMC_FS_ReadMBR( drv_u16 PHY_Drv, drv_u32 LBA_Addr, struct PART_INFO* MBR, drv_u8* Sector_Buffer );

extern SMC_FS_ERROR			SMC_FS_MarkOfDoneEraseUnUsedBlockForSMCMedia( drv_u16 LogDrvNum, drv_u8* Sector_Buffer );
extern SMC_FS_ERROR			SMC_FS_MarkOfNeedEraseUnUsedBlockForSMCMedia( drv_u16 LogDrvNum );
extern SMC_FS_ERROR			SMC_FS_GetIsMarkOfDoneEraseUnUsedBlockForSMCMedia( drv_u16 LogDrvNum );
extern SMC_FS_ERROR			SMC_FS_EraseUnUsedBlockForSMCMedia( drv_u16 LogDrvNum, drv_u8* Sector_Buffer );
extern SMC_FS_ERROR			SMC_FS_ReadyVirtualFAT1ForSMCMedia( drv_u16 LogDrvNum, struct DIRFILE_INFO* GetFileInfo, drv_u8* Sector_Buffer );
extern SMC_FS_ERROR			SMC_FS_EraseVirtualFAT1ForSMCMedia( drv_u16 LogDrvNum, drv_u8* Sector_Buffer );
extern SMC_FS_ERROR			SMC_FS_WriteFATContentToVirtualFAT1ForSMCMedia( drv_u16 LogDrvNum, drv_u16 FATSector, drv_u8* FATData, drv_u8* Sector_Buffer );
extern SMC_FS_ERROR			SMC_FS_CopyVirtualFAT1toFAT1ForSMCMedia( drv_u16 LogDrvNum, drv_u8* Sector_Buffer );
extern SMC_FS_ERROR			SMC_FS_SetUsedStatusVirtualFAT1ForSMCMedia( void );
extern SMC_FS_ERROR			SMC_FS_SetUnUsedStatusVirtualFAT1ForSMCMedia( void );
extern SMC_FS_ERROR			SMC_FS_IsUsedStatusVirtualFAT1ForSMCMedia( void );
extern SMC_FS_ERROR			SMC_FS_EnableVirtualLPTCacheForForSMCMedia( drv_u16 LogDrvNum );
extern SMC_FS_ERROR			SMC_FS_DisableVirtualLPTCacheForForSMCMedia( drv_u16 LogDrvNum );

extern SMC_FS_ERROR			SMC_FS_ReadSector( drv_u16 PhyDrvNo, drv_u32 LBA_Addr, drv_u8* ReadBuffer );
extern SMC_FS_ERROR			SMC_FS_ReadMultiSectorStart( drv_u16 PhyDrvNo, drv_u32 LBA_Addr );
extern SMC_FS_ERROR			SMC_FS_ReadMultiSector( drv_u16 PhyDrvNo, drv_u32 LBA_Addr, drv_u8* ReadBuffer );
extern SMC_FS_ERROR			SMC_FS_ReadMultiSectorStop( drv_u16 PhyDrvNo );
extern SMC_FS_ERROR			SMC_FS_WriteSector( drv_u16 PhyDrvNo, drv_u32 LBA_Addr, drv_u8* WriteBuffer );
extern SMC_FS_ERROR			SMC_FS_WriteMultiSectorStart( drv_u16 PhyDrvNo, drv_u32 LBA_Addr, drv_u32 Size );
extern SMC_FS_ERROR			SMC_FS_WriteMultiSector( drv_u16 PhyDrvNo, drv_u32 LBA_Addr, drv_u8* WriteBuffer );
extern SMC_FS_ERROR			SMC_FS_WriteMultiSectorStop( drv_u16 PhyDrvNo );
extern SMC_FS_ERROR			SMC_FS_GetIsExistOfPhyDrv( drv_u16 PhyDrvNo );
extern SMC_FS_ERROR			SMC_FS_IsInited( drv_u16 PhyDrvNo );
extern SMC_FS_ERROR			SMC_FS_InitDrive( drv_u16 PhyDrvNo, drv_u8* Sector_Buffer );
extern void					SMC_FS_GetPatitionCapacityOfDisk( drv_u16 PhyDrvNo, drv_u32* BlockNum, drv_u16* BlockSize );
extern void					SMC_FS_GetCapacityOfDisk( drv_u16 PhyDrvNo, drv_u32* BlockNum, drv_u16* BlockSize );
extern void					SMC_FS_GetCHSOfDisk( drv_u16 PhyDrvNo, drv_u16* Cylinder, drv_u16* Head, drv_u16* SectorNum, drv_u16* SectorSize );
extern SMC_FS_ERROR			SMC_FS_FormatSurfaceOfDisk( drv_u16 PhyDrvNo, drv_u16 Mode, drv_u8* Sector_Buffer );
extern unsigned int			SMC_FS_GetMediaTypeOfDisk( drv_u16 PhyDrvNo );

extern void					loc_GetFATOffsetOfCluster( drv_u16 LogDrvNum, drv_u32 Curr_Clus, drv_u32* Offset_Sector, drv_u16* Remain_point );
extern unsigned long		loc_GetContentOfCluster( drv_u16 LogDrvNum, drv_u32 Curr_Clus, drv_u16 Remain_point, drv_u8* FAT12_Temp, drv_u8* Sector_Buffer );
extern void					loc_SetContentOfCluster( drv_u16 LogDrvNum, drv_u32 Curr_Clus, drv_u32 Next_Clus, drv_u16 Remain_point, drv_u8* Sector_Buffer );

#endif

⌨️ 快捷键说明

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