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

📄 ufat.h

📁 凌阳SPCE3200 系统开发板随机自带源程序。共安排了32个子目录
💻 H
字号:
/*
 * UFAT3 Header File ufat.h
 * Copyright (C) 2005 Sunnorth
 *
 * First Built: Yongliang 2005-8-9
 */

#ifndef _UFAT3_HEADER_UFAT_H_
#define _UFAT3_HEADER_UFAT_H_

#include "ufat_config.h"
#include "ufat_types.h"
#include "error.h"
#ifndef INCLUDE_PLATFORM_ECOS
#include "errno.h"
#endif

#include "vfs.h"
#include "command.h"


/*
 * interface layer symbols extern
 */
extern int ufat_posix_errno;
extern int _getfserrcode (void);
extern void _clsfserrcode (void);
extern CLUSTER f_cluster_seq;
extern st_cds CDS[NBLKDEV];
extern UINT8 default_drive;
extern CODE INT16 Cp437[256]; 
extern dmatch sda_tmp_dm;       
extern st_dpb DPB[NBLKDEV];  /* driver list */
extern UINT8 ufat_cache_buffer[NUMBUFF * 512]; /* Added By Ahan on: 2005/09/28 * */
extern st_buffer buffers[NUMBUFF];

extern UINT32 dbg_FATcache_clock;
extern UINT32 dbg_FATcache_hit_clock;
extern UINT32 dbg_FATcache_miss_clock;

extern int dbg_write_back_cnt, dbg_get_fat_cnt;
extern int dbg_write_back_clk, dbg_get_fat_clk;
      
/* driver layer */
extern RES dskxfer (UINT8 dsk, SECTOR blkno, buf_t buf, RWCOUNT numblocks, MODE mode);
/* logic block layer */

extern st_buffer_ptr firstbuf; 
#if DIRECT_DMA_MODE
extern UINT8 xfermode;				
#endif




#define b_next(bp)			(bp ->b_next)
#define b_prev(bp)			(bp ->b_prev)
//#define bufptr(fbp)			((buffer_ptr)(fbp))
extern RES clear_buffers (int dsk);
extern RES flush_buffers (int dsk);
extern RES flush1 (st_buffer_ptr bp);
extern void move_buffer (st_buffer_ptr bp, st_buffer_ptr firstbp);
extern st_buffer_ptr searchblock (SECTOR blkno, int dsk);
extern st_buffer_ptr getblk (UINT32 blkno, UINT8 dsk, UINT8 overwrite);
/* file system layer */
extern st_f_node f_nodes_array[NFILES];
dostime time_encode(st_dostime *t);
void UserGetTime(st_dostime *dt);
void UserGetDate(st_dosdate *dd);
#if (UFAT_WITH_PREFETCH_BUFFER == 0)
st_buffer_ptr getFATblock (struct dpb * dpbp, SECTOR clussec);
#endif
st_buffer_ptr getblock (UINT32 sec, UINT32 buf_type, struct dpb * dpbp, UINT8 bReadFromDSK);
st_buffer_ptr lbl_RefillBuff(SECTOR sect, UINT8 dsk, UINT32 buf_type, UINT8 bReadFromDSK);
#if (UFAT_WITH_PREFETCH_BUFFER == 0)
    #define getblock(blkno, dsk) getblk(blkno, dsk, FALSE);
    #define getblockOver(blkno, dsk) getblk(blkno, dsk, TRUE);
#endif

void adjust_freeclst(st_dpb_ptr dpbp, INT32 adjust);
/*                                                              */
/* special word packing prototypes                              */
/*                                                              */
#if ALIGN
#	define getbyte(vp) (*(UINT8 *)(vp))
#	define putbyte(vp, b) (*(UINT8 *)(vp)=b)
	UINT32 getlong(void *);
	UINT16 getword(void *);
	void putlong(void *, UINT32);
	void putword(void *, UINT16);
#	if LITTLE_ENDIAN
#		define putdirent(dp, bp) memcpy(bp, dp, DIRENT_SIZE);
#		define getdirent(bp, dp) memcpy(dp, bp, DIRENT_SIZE);
#	else
		void getdirent(UINT8 * bp, struct ufat_dirent * dp);
		void putdirent(struct ufat_dirent *dp, UINT8 *bp);
#	endif

#else
#	define getlong(vp) (*(UINT32 *)(vp))
#	define getword(vp) (*(UINT16 *)(vp))
#	define getbyte(vp) (*(UINT8 *)(vp))
#	define putlong(vp, l) (*(UINT32 *)(vp)=l)
#	define putword(vp, w) (*(UINT16 *)(vp)=w)
#	define putbyte(vp, b) (*(UINT8 *)(vp)=b)
#	define putdirent(dp, bp) memcpy(bp, dp, DIRENT_SIZE);
#	define getdirent(bp, dp) memcpy(dp, bp, DIRENT_SIZE);
#endif



CLUSTER extend(st_f_node_ptr);
CLUSTER find_fat_free(st_f_node_ptr fnp);
void write_fsinfo(st_dpb_ptr dpbp);
void setdstart(st_dpb_ptr dpbp, st_dirent_ptr dentry, CLUSTER value);
CLUSTER getdstart(st_dpb_ptr dpbp, st_dirent_ptr dentry);
CLUSTER link_fat(st_dpb_ptr dpbp, CLUSTER Cluster1, CLUSTER Cluster2);
RES map_cluster(st_f_node_ptr fnp, MODE mode);   
BOOL checkdstart(st_dpb_ptr dpbp, st_dirent_ptr dentry, CLUSTER value);
CLUSTER next_cluster(st_dpb_ptr dpbp, CLUSTER ClusterNum);
RES dos_extend(st_f_node_ptr);
void shrink_file(st_f_node_ptr);
UINT32 hwDMAExec (UINT32 dram, UINT32 sram, UINT8 dir, UINT32 size);
st_f_node_ptr xlt_fd (int fd);
UINT32 clus2phys(CLUSTER cl_no, st_dpb_ptr dpbp);
BOOL DeleteBlockInBufferCache(UINT32 blknolow, UINT32 blknohigh, UINT8 dsk, MODE mode);
#if DIRECT_DMA_MODE
INT32 rwblock(int fd, UINT32 buffer, RWCOUNT count, MODE mode);
#else
INT32 rwblock(int fd, void *buffer, RWCOUNT count, MODE mode);
#endif
st_dpb_ptr get_dpb(UINT8 dsk);
st_cds_ptr get_cds(UINT8 drive);
UINT8 fat_toupper(INT8 c);
void _5c_to_ff(UINT8 *str);
void _ff_to_5c(UINT8 *str);
void true_current_path(char *path);
RES check_path_length (char *p_name, UINT16 len);
void pre_truename(char *dest);
void pre_truename_dir(char *dest);
RES truename(const char *src, char *dest);
int char2uni(UINT8 **rawstring, UNI_CHAR *uni);
int utf8_to_oemcp(UTF8 *Source, int SourceSize, INT8 *Dest, int DestSize);
void wipe_out(st_f_node_ptr fnp);

/* UTF-16 management functions */
int fd32_utf16to32(const UTF16 *s, UTF32 *Ch);
int fd32_utf32to16(UTF32 Ch, UTF16 *s);

/* UTF-8 management functions */
int fd32_utf8to32(const UTF8 *s, UTF32 *Ch);
int fd32_utf32to8(UTF32 Ch, UTF8 *s);
int utf8_stricmp (const UTF8 *s1, const UTF8 *s2);
int utf8_strupr  (UTF8 *Dest, const UTF8 *Source);

/* Conversion functions between UTF-8 and UTF-16 */
int fd32_utf8to16(const UTF8 *Utf8, UTF16 *Utf16);
int fd32_utf16to8(const UTF16 *Utf16, UTF8 *Utf8);

/* Case conversion functions */
UTF32 unicode_toupper(UTF32 Ch);
unsigned int ChartToUTF8(UINT8 *Chart, UINT8 *UTF8Chart);
st_buffer_ptr getblock_from_off(st_f_node_ptr fnp);
st_buffer_ptr getDIRblock_from_off(st_f_node_ptr fnp);
void release_f_node(st_f_node_ptr fnp);
void swap_deleted(UINT8 *name);
void split_path_LFN(char *FullPath, char *Path, char *Name);
UINT8 check_lfn(char *name);
st_f_node_ptr get_f_node (void);

int  fd32_gen_short_fname  (char *Dest, char *Source, INT32 Flags);
int  fd32_build_fcb_name   (char *Dest, char *Source);
int  fd32_expand_fcb_name  (char *Dest, char *Source, UINT8 NTRes);
int  fd32_compare_fcb_names(char *Name1, char *Name2);
char lfn_checksum   (tDirEntry *D);
RES media_check(st_dpb_ptr dpbp);
int ParseDosName(char *filename, char *fcbname, int bAllowWildcards);
void dir_init_fnode(st_f_node_ptr fnp, CLUSTER dirstart);
int fat_find(st_f_node_ptr fnp, char *FileSpec, INT32 Flags, tFatFind *Ff);
int ufat_readdir(st_f_node_ptr Dir, tFatFind *Ff);
int dir_lfnread(st_f_node_ptr fnp, tDirEntry *shortdir);
int dir_lfnwrite(st_f_node_ptr fnp, tDirEntry *shortdir);
RES dir_write(st_f_node_ptr fnp);
RES dir_read(st_f_node_ptr fnp);
int uni2char(UNI_CHAR uni, unsigned char *out);
int char2uni(unsigned char **rawstring, UNI_CHAR *uni);
int xlt_fnp (st_f_node_ptr fnp);
st_f_node_ptr descend_path(char *Path, tFatFind *D);
dosdate dos_getdate(void);
void init_direntry(st_dirent_ptr dentry, unsigned attrib, CLUSTER cluster);
void dir_close(st_f_node_ptr fnp);
int fetch_lfn(tDirEntry *Buffer, int BufferPos, INT16 *Name);
int fat_creat(st_f_node_ptr fnp, char *Name, INT8 Attr);
int allocate_lfn_dir_entries(st_f_node_ptr fnp, tDirEntry *D, char *FileName);
int allocate_sfn_dir_entry(st_f_node_ptr fnp, tDirEntry *D, char *FileName);
char *itoa(int value, char *string, int radix);
int gen_short_fname(st_f_node_ptr fnp, char *LongName, char *ShortName);
int split_lfn(tLfnEntry *Slot, tDirEntry *D, char *LongName, int *NumSlots);
int find_empty_dir_entries(st_f_node_ptr fnp, int NumEntries);
UTF32 unicode_toupper(UTF32 Ch);
int oemcp_to_utf8(char *Source, UTF8 *Dest);
void copy_char_in_lfn_slot(tLfnEntry *Slot, int SlotPos, UTF16 Ch);
dostime dos_gettime(void);
int handle_error_code (int);
unsigned int UTF8ToChart(char *Dest, char *Source);
RES remove_lfn_entries(st_f_node_ptr fnp);
RES delete_dir_entry(st_f_node_ptr fnp);
char* time_decode(UINT16 *tp, char *timec);
char* date_decode(UINT16 *dp, char *datec);
char *init_dir_startcluster(char *Path, st_f_node_ptr fnp);
BOOL fcbmatch(const char *fcbname1, const char *fcbname2);
st_f_node_ptr dir_open(char *dirname);
BOOL  wild_match(char  *match,  char  *dir);
st_f_node_ptr split_path(char * path, char * fcbname);
BOOL find_fname(st_f_node_ptr fnp, char *fcbname, int attr);
//RES Read_DBR(UINT8 dsk);
RES Read_DBR(UINT8 dsk,UINT32 offset1 );

void read_fsinfo(st_dpb_ptr dpbp);
int fat_Format (UINT8 dsk, st_fmt *fmt);
//int  fat_Format (UINT8 dsk,UINT8 FATType);

RES alloc_find_free(st_f_node_ptr fnp, char *path, char *fcbname);
int fs_findnext(struct f_info *f_info);
BOOL fcmp_wild(const char * match, const char * dir, unsigned n);
void ConvertName83ToNameSZ(char * destSZ, const char * srcFCBName);
RES extend_dir(st_f_node_ptr fnp);
BOOL find_free(st_f_node_ptr fnp);
void fs_getdiskfree (	UINT32 * total_clusters,
						UINT32 * sector_per_cluster,
						UINT32 * byte_per_sector, UINT8 dsk);


/* * * * * * * * * * * * * * fat_API define start * * * * * * * * * * * * *  */
/* parameter is name string api define */		
#if LFN
/* mapping common name to LFN api and short name api */
#	define 		fat_unlink		fs_lfndelete
#	define 		fat_mkdir		fs_lfnmkdir
#	define 		fat_open		fs_lfnopen
#	define 		fat_rename		fs_lfnrename
#	define 		fat_rmdir		fs_lfnrmdir
#	define 		fat_chdir		fs_lfncd
#	define		fat_findfirst	fs_lfnfindfirst
#	define		fat_findnext	fs_lfnfindnext
#	define		fat_deleteall	fs_lfndeleteall   
#	define		fat_opendir	    fs_lfnopendir

	int fs_lfndelete(char * dirpath);
	int fs_lfnmkdir(char * dirpath);
	int fs_lfnopen(char *path, unsigned flags, unsigned attrib);
	int fs_lfnrename(char * path1, char * path2);
	int fs_lfnrmdir(char * dirpath);
	int fs_lfncd(char * PathName);
	int fs_lfnfindfirst(char *name, struct f_info *f_info, unsigned char attr);
	int fs_lfnfindnext(struct f_info *f_info);
	int fs_lfndeleteall (char *);

#else

#	define 		fat_unlink		fs_delete
#	define 		fat_mkdir		fs_mkdir
#	define 		fat_open		fs_fopen
#	define 		fat_rename		fs_rename
#	define 		fat_rmdir		fs_rmdir
#	define		fat_chdir		fs_cd            
#	define		fat_findfirst	fs_findfirst
#	define		fat_findnext	fs_findnext
#	define		fat_deleteall	fs_deleteall	
#	define		fat_opendir	    dir_open

	int fs_delete(char * path);
	int fs_mkdir(char * dir);
	int fs_fopen(char *path, unsigned flags, unsigned attrib);
	int fs_rename(char * path1, char * path2);
	int fs_rmdir(char * path);
	int fs_cd(char * PathName);
	int fs_findfirst(char *name, struct f_info *f_info, unsigned char attr);
	int fs_findnext(struct f_info *f_info);
	int fs_deleteall (char *);
#endif /* end of LFN */

char *fs_getcwd(char *buf, int buflen);
int fs_fclose(int fd);

long fs_fread(int fd, void *bp, RWCOUNT n);
long fs_fwrite(int fd, void *bp, RWCOUNT n);

CLUSTER fs_free(unsigned char disk);
long fs_fseek(int fd, long foffset, int origin);
unsigned long fs_getfsize(int fd);
int fs_setfattr(int fd, unsigned char attrp);
int fs_getfattr(int fd);
BOOL fs_setfsize(int fd, long size);

#ifdef _555_FS_
	int fs_setftime(int fd, unsigned short, unsigned short, unsigned short); // 2004-11-23 Yongliang change argument list
	int fs_getftime (int fd, unsigned short *, unsigned short *, unsigned short *, unsigned short *, unsigned short *); // 2004-11-23 Yongliang change function
#else
	int fs_setftime(int fd, dosdate dp, dostime tp);
	int fs_getftime(int fd, dosdate * dp, dostime * tp);
#endif

dostime fs_gettime(void);
dosdate fs_getdate(void);
int fs_format(unsigned char Drv, unsigned char  FAT_Type);
int fs_init(void);
int fs_mount (unsigned char);
int fs_unmount (unsigned char);
int fs_getinfo (char *, char *, char *, unsigned long *, unsigned long *, unsigned char dsk);

/* * * * * * * * * * * * * * fat_API define end * * * * * * * * * * * * *  */

/* misc api define */
#ifndef __MISC__
void *memcpy(void * d, const void * s, int n);
void *memset(void *, int, int);
int memcmp( const void *buf1, const void *buf2, int count );
char *strcpy(char *, const char *);
char *strcat(char *, const char *);
unsigned int strlen(const char *);
char *strrchr( const char *string, int c );
char *strchr( const char *string, int c );
int strcmp( const char *string1, const char *string2 );
char *strpbrk( const char *string, const char *strCharSet ); 
#endif


#endif /* _UFAT3_HEADER_UFAT_H_ */

/* end of file */

⌨️ 快捷键说明

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