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

📄 fs.h

📁 使用ISP1362芯片的USB_OTG参考设计源代码比较新的版本
💻 H
字号:
/*
**  WASABI-Hot! version 1.2c   
**
**
**      -- copyright (c) 2001-2004 by Philips Japan, Ltd. -- All rights reserved --
**
**
**      ** This code has been made to check/learn                          ** 
**      **                             the ISP1362/ISP1363 functionalities **
**      ** Release 06-Aug-2004                                             **
**
**      OKANO, Akifumi
**      
**		Application Laboratory, Mobile and Connectivity
**      Semiconductors Div, Philips Japan Ltd.
**      akifumi.okano@philips.com
**      +81-3-3740-4668 
*/

#ifndef _FS_H
#define _FS_H

/****************************************************************************/
/*	includes																*/
/****************************************************************************/

#include		"general.h"


/****************************************************************************/
/*	constants																*/
/****************************************************************************/

#define		SUPPORT_DISK_FORMAT



#define			MAX_PATH_STRING_LENGTH			129
#define			MAX_OPEN_FILES					10


//	Mode for file open
#define			FS_READ							0x0
#define			FS_WRITE						0x1
#define			FS_OVER_WRITE					0x0
#define			FS_PROTECT						0x2
#define			FS_ROBUST						0x4
#define			FS_OPN_DIR						0x8

#define			R								FS_READ
#define			W								FS_WRITE
#define			O								FS_OVER_WRITE
#define			P								FS_PROTECT
#define			D								FS_OPN_DIR


#define			FAT_READ						0x0
#define			FAT_WRITE						0x1

#define			DIR_READ						0x0
#define			DIR_WRITE						0x1

#define			ROOT_DIRECTORY_CLUSTER			1

#define			ERROR_MODIFY_DIR_ENTRY__NOT_FOUND					1
#define			ERROR_MODIFY_DIR_ENTRY__IT_IS_DIR					2
#define			ERROR_MODIFY_DIR_ENTRY__ERR_AT_OVERWRITING			3

#define			ERROR_MAKE_DIR__ENTRY_EXIST		1
#define			ERROR_MAKE_DIR__WRITE_FAIL		2

#define			FLAG_MAKE_DIR_ENTRY_FILE		0
#define			FLAG_MAKE_DIR_ENTRY_DIRECTORY	1

#define			FS_ERROR_NO_DISK_SPACE_LEFT		2

#define			FS_RM_DIRECTORY_ACCESS_ERR			1
#define			FS_RM_SUB_DIRECTORY_EXIST			2
#define			FS_RM_SUB_DIRECTORY_IS_NOTEMPTY		5

#define			FS_MV_SOURCE_NOT_FOUND			1
#define			FS_MV_CANNOT_OPEN_TARGET		2
#define			FS_MV_CANNOT_ACCESS_TARGET_ENT	3

/****************************************************************************/
/*	types																	*/
/****************************************************************************/


typedef struct  _directory_entry	{
									char					filename[ 8 ];
									char					suffix[ 3 ];
									unsigned char			attributes;
									unsigned char			reserved[ 10 ];
 									unsigned short			time;
 									unsigned short			date;
 									unsigned short			cluster;
 									unsigned long			size;
                                }
								directory_entry;
								


typedef struct  _fs_FILE		{
									char					path[ MAX_PATH_STRING_LENGTH ];
									char					path_to_dir[ MAX_PATH_STRING_LENGTH ];
									char					file_name[ 12 ];
									unsigned char			mode;
									directory_entry			file_info;
 									unsigned short			start_cluster;
 									unsigned short			directory_entry_cluster;
 									unsigned short			directory_entry_index;
 									unsigned short			current_cluster;
 									unsigned short			buffered_cluster;
 									unsigned short			number_of_cluster_processed;
									unsigned long			current_file_data_position;
									unsigned char			*cluster_buffer_pointer;
									void					*volume_param_ptr;
									unsigned char			index;
                                }
								fs_FILE;
								



typedef struct  _drive_param	{
									unsigned long			last_LBA;
									unsigned long			block_length;
                                }
								drive_param;
								
typedef struct  _volume_param	{
									char					label[ 8 ];
									unsigned long			last_LBA;
									unsigned long			block_length;
									unsigned short			bytes_per_sector;
									unsigned char			sector_per_cluster;
									unsigned long			bytes_per_cluster;
									unsigned short			reserved_sectors;
									unsigned char			number_of_FATs;
									unsigned short			root_directory_entries;
									unsigned short			number_of_FAT_sectors;
									unsigned long			start_sector_FAT1;
									unsigned long			start_sector_FAT2;
									unsigned long			start_sector_root_directory;
									unsigned long			start_sector_claster_region;
									unsigned long			number_of_clasters;
									unsigned long			total_sectors;
									char					current_dir[ MAX_PATH_STRING_LENGTH ];
									unsigned short			current_directory_cluster;
									
									unsigned short			*FAT_cache;
									unsigned long			FAT_cached_sector;
									unsigned char			FAT_cache_dirty;
									
									unsigned char			*dir_cache;
									unsigned long			dir_cached_sector;

									unsigned char			file_system;
									
									fs_FILE					*opened_FILE_pointer[ MAX_OPEN_FILES ];
								}
								volume_param;




typedef struct  _PartitionEntry
								{
									unsigned char			DefaultBootPartition;
									unsigned char			StartHead;
									unsigned char			StartSector;
									unsigned char			StartCylinder;
									unsigned char			PartitionType;
									unsigned char			EndHead;
									unsigned char			EndSector;
									unsigned char			EndCylinder;
									unsigned long			StartLBASector;
									unsigned long			NumSectors;
                                }
								PartitionEntry;


typedef struct  _MasterBootRecord
								{
									unsigned char			BootCode[ 446 ];
									PartitionEntry			partition[ 4 ];
									unsigned short			Signature_Word;
                                }
								MasterBootRecord;


typedef struct  _BoisParameterBlock
								{
									unsigned short			BytesPerSector;
									unsigned char			SectorsPerClustor;
									unsigned short			ReservedSectors;
									unsigned char			NumFATs;
									unsigned short			RootDirEntries;
									unsigned short			TotalSectors;
									unsigned char			MediaIDByte;
									unsigned short			NumFATSectors;
									unsigned short			SectorsPerTrack;
									unsigned short			NumHeads;
									unsigned long			HiddenSectors;
									unsigned long			HugeSectors;
                                }
								BoisParameterBlock;



typedef struct  _PartitionBootRecord
								{
									unsigned char			JMP_instruction[ 3 ];
									unsigned char			OEM_name_version[ 8 ];
									BoisParameterBlock		BPB;
									unsigned char			DriveNumber;
									unsigned char			Reserved;
									unsigned char			ExtBootSignature;
									unsigned long			Volume_ID;
									unsigned char			VolumeLabel[ 11 ];
									unsigned char			FileSysType[ 8 ];
//									unsigned char			Boot_code[ 448 ];	//	<-- DUMMY
//									unsigned short			Signature_word;		//	<-- DUMMY
                                }
								PartitionBootRecord;



/****************************************************************************/
/*	global vars																*/
/****************************************************************************/

extern drive_param		gp_drive_parameter;


/****************************************************************************/
/*	function prototypes														*/
/****************************************************************************/

unsigned char	fs_cd( char *path );
void			fs_pwd( char *pwd_str );
unsigned char	fs_ls( char *path, directory_entry *dir, unsigned short entries );
fs_FILE			*fs_fopen( char *path, unsigned char mode );
void			fs_fclose( fs_FILE *fp );
unsigned short	fs_read( fs_FILE *fp, unsigned char *buffer_ptr, unsigned short length );
unsigned short	fs_write( fs_FILE *fp, unsigned char *buffer_ptr, unsigned short length );
static void		flush_FILE_write_buffer( fs_FILE *fp );
unsigned char	fs_rm( char *path, unsigned char recursive );
unsigned short	fs_mv( char *from, char *to );
unsigned char	fs_mkdir( char *path );
void			fs_df( unsigned short *available, unsigned short *total, unsigned short *cluster_size );
void			fs_format( void );
unsigned long	fs_cluster_to_sector( unsigned short c );
unsigned short	fs_read_FAT( unsigned short current_cluster );

volume_param	*fs_volume_open( void );
unsigned char	fs_volume_close( volume_param *vpp );

unsigned short	fs_data_copy( unsigned char *trg, unsigned char *src, unsigned short n );

#endif

⌨️ 快捷键说明

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