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