亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? pmp_fs_api_za.c

?? 嵌入式系統下的文件管理處理,和基本圖片jpg格式處理原代碼
?? C
?? 第 1 頁 / 共 4 頁
字號:
/*-------------------------------------------------*
* $RCSfile: pmp_fs_api_ZA.c,v $
* $Date: 2007/01/17 12:28:43 $
* $Author: lanzhu $
* $Log: pmp_fs_api_ZA.c,v $
* Revision 1.1.1.1  2007/01/17 12:28:43  lanzhu
* 齊蘭柱 準備一個新的代碼分支
*
* Revision 1.4  2006/12/29 07:24:45  lanzhu
* 在進行ZA_fread ZA_fwrite 時, 進行CACHE 的清空動作
*
* Revision 1.3  2006/12/18 02:14:27  taiyun
* Modify include filename
*
* Revision 1.2  2006/12/12 00:29:29  lanzhu
* pmp_fs_ZA.c 修改了一個 讀單個字符出錯的BUG, 去除WARNING
*
* Revision 1.1.1.1  2006/12/05 03:01:16  lanzhu
* no message
*
* Revision 1.1.1.1  2006/12/01 09:49:35  lanzhu
* no message
*
* Revision 1.9  2006/10/13 06:10:24  taoli
* 函數中malloc改為棧內申請
*
* Revision 1.8  2006/10/13 01:34:00  taoli
* modify ZA_chdir
*
* Revision 1.7  2006/10/12 09:22:05  taoli
* ZA_access函數檢測不存在的文件返回為存在,錯誤,已修改.
*
* Revision 1.6  2006/09/23 07:18:37  lanzhu
* 修改了get_unicode_ptr 的一個BUG
*
* Revision 1.5  2006/09/20 12:35:00  lanzhu
* 添加了編碼的轉換功能,并逐個進行了測試
*
* Revision 1.4  2006/09/19 08:49:05  taoli
* modify readdir
*
* Revision 1.3  2006/09/19 07:12:27  lanzhu
* 添加了 rewinddir 函數
*
* Revision 1.2  2006/09/11 12:29:13  lanzhu
* 對所發布的ZA FS API 進行測試, 初步測試OK!
*
* Revision 1.1  2006/09/08 01:05:08  lanzhu
* 為移植專案的程序,進行了FS API 的封裝
*
*
*--------------------------------------------------*/

//#define DEBUG_ZA_FS

#define CHANGE_CODE

#include <ctype.h>
#include <string.h>

#include "SPMP_define.h"
#include "os_api.h"
#include "fs_api.h"
#include "za_fs_api.h"
#include "appdriver.h"

#include "SysUtility.h"

// 定義為專案的接口形式
#define	_FOR_A3K_PROG

/**************************************************************************
 *                   G E N E R A L    C O N S T A N T S                   *
 **************************************************************************/
#define		THE_LAST_DIR	(0)
#define		FS_NAME_BUF		(1024)


/**************************************************************************
 *                             M A C R O S                                *
 **************************************************************************/

/**************************************************************************
 *                         D A T A   T Y P E S                            *
 **************************************************************************/

/**************************************************************************
 *                        G L O B A L   D A T A                           *
 **************************************************************************/

// 進行碼值轉換時使用的內存
static UINT8 *gpFS_strbuf = NULL;

// 進行句柄、指針的轉換
static UINT8	pFHandleBegin;

// FAT 短文件名目錄項中不允許出現的字符, 共10個字符
static const INT8 fnamekeyword[] = "\\/:*?\"<>|";

#define PERSVSUM  34
// WINDOWS FAT 保留的不能作為文件名的字符串
static const INT8 *fnamepersive[PERSVSUM] = 
{
		"COM1",
		"COM2",
		"COM3",
		"COM4",
		"COM5",
		"COM6",
		"COM7",
		"COM8",
		"COM9",
		"COM10",
		"COM11",
		"COM12",
		"COM13",
		"COM14",
		"COM15",
		"COM16",
		
		"LPT1",
		"LPT2",
		"LPT3",
		"LPT4",
		"LPT5",
		"LPT6",
		"LPT7",
		"LPT8",
		"LPT9",
		"LPT10",
		"LPT11",
		"LPT12",
		"LPT13",
		"LPT14",
		"LPT15",
		"LPT16",
		
		"CON",
		"PRN"
};
/**************************************************************************
 *                 E X T E R N A L   R E F E R E N C E S                  *
 **************************************************************************/

// lanzhu add @[12/29/2006]
extern void mmuFlushDCache( void );

/**************************************************************************
 *               F U N C T I O N   D E C L A R A T I O N S                *
 **************************************************************************/
// 根據輸入的字符串,獲得打開模式的內部定義值
static INT16 QFS_get_open_mode( INT8 * in_str);
// 檢查輸入的文件名是否含有非法字符	
static INT32 QFS_check_fname(INT8 *name );
// 通過邏輯盤的字符串獲得邏輯盤的內部代號		 
static UINT16 get_devid_by_name( UINT8 * pDevName, UINT16 *pDevID);
// 從一個多級目錄串中,只取出一級目錄文本串
static INT16 get_dir_from_str(const INT8 *in_str, INT8 *out_str);
// 從ZA 接口層的句柄指針中, 獲得文件句柄代碼值
static INT16 get_file_handle( void * stream, UINT32 *pHandle );
// 獲得 UNICOE 編碼的地址指針
static UINT8 * get_unicode_ptr(const INT8 *plocal);




/************************************************************************/
/* 
                                                                        */
/************************************************************************/

#ifdef DEBUG_ZA_FS

void test_za_fs( void )
{
	INT32	err;
	UINT8	*pdir;
	FILE_INFO	tmp_info;	
	struct f_info tinfo;
	UINT8	buffer[0x100]; 	
	UINT8	*pfile;


/*
	pfile = ZA_fopen("D:\\阿健康法活動都將返回家","W");
	ZA_fclose(pfile);
 */

/*
	err = ZA_access("03. 草原之夜.mp3", F_OK);
	DEBUG_OUTPUT(("err 0x%x\r\n", err));
 */



//	stat OK!
	err = ZA_stat("03. 草原之夜.mp3", &tinfo);
	DEBUG_OUTPUT(("attr: 0x%x\r\n", tinfo.attribute));
	DEBUG_OUTPUT(("size: %d\r\n", tinfo.file_size));


/*
	//chdir opendir readdir closedir TEST OK!		

	DEBUG_OUTPUT(("\r\ntest ZA begin!\r\n"));
	ZA_chdir("D:\\AUDIO");
	pdir = ZA_opendir("D:\\");	
	DEBUG_OUTPUT(("%x \r\n", pdir));
	while (1) 
	{
		err = ZA_readdir(pdir, buffer, &tmp_info);
		if ( !err ){
			DEBUG_OUTPUT(("+++++ %s\r\n", buffer));
			DEBUG_OUTPUT(("+++++ %x\r\n", tmp_info.attribute));
			continue;
		}
		break;
	}
	err = ZA_closedir( pdir );
	DEBUG_OUTPUT(("%x \r\n", err));

	ZA_getcwd(buffer, sizeof(buffer));
	DEBUG_OUTPUT(("CWD: %s\r\n", buffer));
 */

/*
	ZA_init();
	err = fsFormat(1);	
	DEBUG_OUTPUT(("000 err %x\r\n", err));
	err = fsMount(1);	
	DEBUG_OUTPUT(("0'' err %x\r\n", err));
 */

	err = ZA_mkdir("D:\\阿阿阿111222");
	sio_printf("mkdir err:%x\r\n", err);

	err = ZA_chdir("D:\\阿阿阿111222");
	sio_printf("chdir err:%x\r\n", err);
	err = ZA_chdir("AAABBB111222");
	sio_printf("chdir err:%x\r\n", err);
	err = ZA_getcwd(buffer, sizeof(buffer));
	sio_printf("%s\r\n", buffer);

	while (1);
}

#endif


/************************************************************************/
/*	QFS_init
  input:
			void 
  output:
			void
  func:
			在使用 QFS layer之前,進行初始化的動作
  note:
                                                                        */
/************************************************************************/
#ifndef _FOR_A3K_PROG
void QFS_init( void )
#else
void ZA_init( void )
#endif
{

/*
	UINT8 *pbuf;
	// 進行內存的申請
	pbuf = MEM_ALLOC( FS_NAME_BUF );
	if (NULL == pbuf) {
		ERROR_REPORT;
		return;
	}
	// 保存內存指針
	gpFS_strbuf = pbuf;
 */
	return;
}

/************************************************************************/
/*	QFS_stat	
input:	
		fname 文件名字符串的指針, 支持全路徑名			
		finfo  文件信息結構體的指針
output:
		0	成功  從 info 結構體中獲取文件信息
		<0	失敗
function:
		獲得文件的屬性信息 時間 長度 占用空間的大小 讀寫屬性
                                                                        */
/************************************************************************/
#ifndef _FOR_A3K_PROG
INT32 QFS_stat(INT8 * pfile_name, struct f_info * pfileinfo)
#else
INT32 ZA_stat (INT8 * pfile_name, struct f_info * pfileinfo)
#endif
{
	UINT16 err;
	File_Info_t FileInfoAttr;
	INT8 *file_name;

	// 判斷輸入參數是否合法	
	if ((NULL == pfile_name) || (NULL == pfileinfo) ){
		ERROR_REPORT;
		return QFS_ERR;
	}
	
#ifndef	CHANGE_CODE 
	file_name = pfile_name;
#else
	file_name = get_unicode_ptr(pfile_name);		
#endif

	// 將輸入進行清空的動作
	memset( pfileinfo, 0x00, sizeof(struct f_info));
	// 獲得文件屬性信息
	err = fsFileInfoGet(file_name, &FileInfoAttr);
	if ( err ) {
		ERROR_REPORT;
		return QFS_ERR;
	}


	// 進行信息的復制
	pfileinfo->attribute	= FileInfoAttr.attr;	
	pfileinfo->file_size	= FileInfoAttr.fileSize;

	pfileinfo->f_tm.tm_year = FileInfoAttr.tCreate.tm_year;
	pfileinfo->f_tm.tm_mon	= FileInfoAttr.tCreate.tm_mon;
	pfileinfo->f_tm.tm_mday = FileInfoAttr.tCreate.tm_mday;

	pfileinfo->f_tm.tm_hour = FileInfoAttr.tCreate.tm_hour;
	pfileinfo->f_tm.tm_min	= FileInfoAttr.tCreate.tm_min;
	pfileinfo->f_tm.tm_sec	= FileInfoAttr.tCreate.tm_sec;


	// 返回成功
	return QFS_OK;
}

/************************************************************************/
/*
  input:
		drvname 邏輯盤字符串指針
  output:	
		0 成功  非0值 失敗
  func:	
		格式化指定的邏輯盤	
                                                                        */
/************************************************************************/
#ifndef	_FOR_A3K_PROG 
INT32 QFS_formart(const INT8 * drvname)
#else
INT32 ZA_formart(const INT8 * drvname)
#endif
{
	UINT16	dev; 
	UINT16	err;

	// 判斷輸入參數是否合法
	if (NULL == drvname) {
		ERROR_REPORT;
		return NULL;		
	}

	// 通過邏輯設備驅動器的名稱, 獲得內部設備ID
	err = get_devid_by_name( (UINT8 *)drvname, &dev );
	if ( err ) {
		ERROR_REPORT;
		return NULL;		
	}

	// 進行邏輯盤的格式化
	err = fsFormat( (UINT8) dev );

	// 返回結果
	return err;
}

/************************************************************************/
/*		QFS_open
input:	
		file_name	[in]	文件名字符串指針, // 可以支持全路徑
					"C:\\A.BIN"				
					"C:\\DIR111\\A.BIN"		

		mode		[in]	文件打開模式字符串指針

					"R"		// 只讀方式,文件必須已經存在
					"R+"	// 讀寫方式, 文件必須已經存在		
					"W"		// 只寫方式,不存在,則創建,存在則,清空全部內容
					"W+"	// 讀寫方式,不存在,則創建,存在則,清空全部內容
					"A"		// 添加模式,不存在,則創建,存在則,打開,指針指向文件尾
					"A+"	// 添加模式,不存在,則創建,存在則,打開,指針指向文件尾

output:	
		NULL		失敗
		其他值		成功                            
func:
		輸入文件名字符串和文件打開模式, 打開文件

  note:	
		[6/5/2006] 增加對文件名 合法性的檢查
		如果輸入的文件名中 含有 windows FAT 所不允許的 字符, 直接返回失敗

																		*/
/************************************************************************/
#ifndef _FOR_A3K_PROG
ZA_FILE * QFS_fopen(const INT8 *pfile_name, const INT8 * mode)
#else
ZA_FILE * ZA_fopen(const INT8 *pfile_name, const INT8 * mode)
#endif
{	
//	INT32	i;
	INT16   open_mode;
	INT32	vfs_open_flag;
	UINT16	err; 	
	UINT32	FileHandle;
	INT8	*file_name;

	err = 0x00;

	// 判斷輸入參數是否合法, 非法直接返回失敗
	if( (pfile_name == NULL) || (mode == NULL) ){
		ERROR_REPORT;
		return NULL;
	}

#ifndef	CHANGE_CODE 
	file_name = pfile_name;		// 直接使用文件名字符串
#else
	file_name = get_unicode_ptr(pfile_name);
#endif

	// 獲得打開模式
	open_mode = QFS_get_open_mode((INT8 *) mode );	// 獲得文件的打開模式
	if(open_mode <0 ){
		ERROR_REPORT;
		return NULL;
	}

	// 暫時不進行打開文件的總數檢查動作

	// 556 系統上可以支持全路徑文件名的打開, 不需要進行目錄的逐級切換

/*
	// 對輸入的文件名,進行檢查, 如果含有 windows FAT 不允許的字符,直接返回失敗
	i = QFS_check_fname( (INT8 *)file_name );
	// 字符串非法, 直接返回失敗
	if(i) {
		ERROR_REPORT;
		return NULL;	// 返回NULL 指針
	}
 */
	
	vfs_open_flag = 0x00;

	switch(open_mode) 
	{
	case F_O_RDONLY:	// R
	case F_O_RD_PLUS:	// R+ 
		vfs_open_flag = FS_O_RDONLY;		// 以只讀的方式
		if( open_mode == F_O_RD_PLUS )
		{
			DEBUG_OUTPUT((" Mode: read write! \r\n "));
			vfs_open_flag = FS_O_RDWR;		// 以讀寫的方式			
		}
		// 使用 SPMP 內部文件函數實現
		err = fsOpen((UINT8 *)file_name, (UINT32) vfs_open_flag, &FileHandle);
		break;

	case F_O_WRONLY:	// W
	case F_O_WR_PLUS:	// W+
		// 進行文件的刪除動作
		err = fsDelete((UINT8 *)file_name );
		// 創建文件,以讀寫的方式進行文件的操作	
		err = fsOpen((UINT8 *)file_name, (UINT32) FS_O_RDWR | FS_O_CREATE, &FileHandle);
		break;

	case F_O_APPEND:		// A		
	case F_O_APPEND_PLUS:	// A+

		// 以讀寫的方式打開文件
		err = fsOpen((UINT8 *)file_name, (UINT32) FS_O_RDWR, &FileHandle);

		// 文件可以打開,說明文件存在,移動文件指針到文件尾 
		if (err){
			err = fsSeek(FileHandle, (UINT32)FS_SEEK_END, 0x00);
		}
		else{	// 進行文件的創建動作
			err = fsOpen((UINT8 *)file_name, (UINT32) FS_O_RDWR | FS_O_CREATE, &FileHandle);			
		}
		break;

	default:
		ERROR_REPORT;
		break;
	}

	// 判斷是否有錯誤發生
	if ( err ) {
		ERROR_REPORT;
		return NULL;
	}

	return 	(&pFHandleBegin + FileHandle);
}


/************************************************************************/
/*	QFS_fread
input:
		buf			[out]	數據讀出后存放的地址值
		unit_size	[in]	一個數據單位的長度值
		unit_count	[in]	數據單位的數量
		stream		[in]	文件句柄的指針		
output:	
		<	0  失敗
		>=	0	成功
func:			
		進行進行文件的讀動作
                                                                        */
/************************************************************************/
#ifndef _FOR_A3K_PROG
INT32 QFS_fread (INT8 *buf, UINT32 unit_size, UINT32 unit_count, ZA_FILE * stream )
#else
INT32 ZA_fread (INT8 *buf, UINT32 unit_size, UINT32 unit_count, ZA_FILE * stream )
#endif
{
	UINT16	err;
	UINT32	BytesWant2Read;
	UINT32	BytesRead;	
	UINT32	FileHandle;

	// 判斷輸入參數的合法性
	if ( (NULL == buf) || (NULL == stream) 
		|| !unit_size || !unit_count )
	{
		ERROR_REPORT;
		return (INT32) QFS_ERR;
	}

	err = get_file_handle(stream, &FileHandle);		
	if ( err ){
		ERROR_REPORT;
		return (INT32) QFS_ERR;
	}

	// 計算需要讀出的數據的總數
	BytesWant2Read = unit_size * unit_count;

	// lanzhu add@[12/29/2006]
	mmuFlushDCache( );

	// 使用內部函數進行數據的讀取動作	
	err = fsRead( (UINT32) FileHandle, buf, BytesWant2Read, &BytesRead );
	if ( err ) {
		ERROR_REPORT;
		return  (INT32) QFS_ERR;
	}

	// 返回數據單位的總數
	return (INT32) BytesRead/unit_size;
}

/************************************************************************/
/*		QFS_fwrite

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品毛片a∨一区二区三区| 99re热这里只有精品免费视频| 欧美午夜视频网站| 亚洲综合999| 一本高清dvd不卡在线观看| 久久精品一区二区三区av| 激情丁香综合五月| 精品国产一区二区三区忘忧草| 免费看精品久久片| 久久欧美一区二区| www.亚洲精品| 日韩专区欧美专区| 亚洲国产精品久久久久婷婷884 | 国产日产欧美一区二区三区| 国产麻豆一精品一av一免费| 国产精品久久久久三级| 色哟哟精品一区| 美女久久久精品| 国产欧美视频在线观看| www.亚洲精品| 日本视频中文字幕一区二区三区| 欧美电视剧免费全集观看| 国产一区二区三区四| 亚洲一区二区三区免费视频| 337p亚洲精品色噜噜噜| 国产成人午夜精品影院观看视频 | 欧美一区二区三区在线观看| 国产91丝袜在线播放0| 亚洲成av人片在线观看无码| 日韩精品一区在线| 在线观看亚洲a| 国产99久久久国产精品免费看| 午夜伊人狠狠久久| 综合色中文字幕| 欧美国产日产图区| 精品国产人成亚洲区| 欧美精品精品一区| 色欧美乱欧美15图片| 国产精品亚洲午夜一区二区三区| 一二三四区精品视频| 国产精品三级av在线播放| 欧美xxx久久| 日韩欧美电影在线| 国产精品天天摸av网| 欧美精品一区二区不卡| 欧美三级电影一区| 欧美午夜精品久久久| 色婷婷综合在线| 欧美性受xxxx黑人xyx性爽| 色哟哟精品一区| 欧美伊人久久久久久午夜久久久久| 成人app在线观看| 色婷婷综合久久| 欧美性猛片xxxx免费看久爱| 欧美亚洲国产一区二区三区va| av一区二区三区四区| 日本大香伊一区二区三区| 在线观看国产日韩| 69堂成人精品免费视频| 日韩一区二区三区四区五区六区| 精品国产髙清在线看国产毛片| 欧美电视剧在线看免费| 国产精品视频一二| 亚洲最快最全在线视频| 免费成人av在线| 国产福利一区二区三区在线视频| 成人激情免费电影网址| 在线观看亚洲一区| 久久亚洲二区三区| 亚洲日本成人在线观看| 日本成人在线不卡视频| 国产精品99久久久| 欧美日韩一区国产| 国产午夜精品一区二区| 樱花影视一区二区| 国产精品538一区二区在线| 色狠狠色狠狠综合| 国产精品麻豆久久久| 日韩高清电影一区| 国产精品亲子伦对白| 性久久久久久久久久久久| 国产aⅴ精品一区二区三区色成熟| 色成年激情久久综合| 国产精品久久久久久久久久免费看 | 激情综合色综合久久| 在线观看精品一区| 国产精品电影一区二区三区| 欧美aaa在线| 91精品欧美综合在线观看最新| 亚洲同性同志一二三专区| 九九精品一区二区| 日韩欧美在线综合网| 丝袜诱惑亚洲看片| 4438成人网| 五月婷婷激情综合网| 欧美色老头old∨ideo| 国产麻豆成人精品| 精品黑人一区二区三区久久| 蜜臀va亚洲va欧美va天堂| 91精品国产色综合久久久蜜香臀| 亚洲免费大片在线观看| 色婷婷综合激情| 亚洲成人一区在线| 91麻豆精品国产无毒不卡在线观看| 午夜av一区二区| 欧美不卡激情三级在线观看| 国产一区欧美一区| 久久久99免费| 日本韩国欧美在线| 午夜精品一区二区三区电影天堂 | 欧美日韩第一区日日骚| 五月激情综合网| 精品久久久久久最新网址| 国产一区二区三区电影在线观看| 久久久久久97三级| 99久久国产综合精品麻豆| 成人av集中营| 亚洲狠狠爱一区二区三区| 日韩欧美在线影院| 91视频观看免费| 六月丁香婷婷色狠狠久久| 中文字幕成人网| 91麻豆精品国产91久久久资源速度 | 精品国产伦一区二区三区观看体验| 国产综合色视频| 性感美女久久精品| 国产精品久久久久久久久久久免费看 | 中文字幕一区二区三| 欧美喷水一区二区| 成人黄色电影在线| 美女尤物国产一区| 亚洲一区二区四区蜜桃| 久久人人超碰精品| 欧美一级搡bbbb搡bbbb| 色婷婷精品大视频在线蜜桃视频| 国内精品国产成人国产三级粉色| 亚洲一区二区三区中文字幕在线| 久久午夜羞羞影院免费观看| 欧美丰满嫩嫩电影| 欧美日韩中字一区| 91网站最新网址| 91美女蜜桃在线| av电影天堂一区二区在线观看| 国产久卡久卡久卡久卡视频精品| 日本人妖一区二区| 日韩高清在线观看| 蜜臀99久久精品久久久久久软件| 亚洲大片精品永久免费| 亚洲国产精品影院| 日韩精品乱码av一区二区| 亚洲第一电影网| 91色在线porny| 色先锋aa成人| 欧美色网一区二区| 日韩一二三区视频| 久久久久久黄色| 亚洲人妖av一区二区| 亚洲精品国产视频| 亚洲一区av在线| 日韩综合小视频| 国产主播一区二区| 91麻豆123| 欧美电视剧在线看免费| 国产亚洲一区二区三区在线观看 | 欧美日韩视频专区在线播放| 欧美日韩电影在线播放| 久久免费电影网| 亚洲精品国产无天堂网2021| 视频一区二区欧美| 国内精品伊人久久久久av一坑| 成人夜色视频网站在线观看| 日本道免费精品一区二区三区| 日韩欧美国产wwwww| 《视频一区视频二区| 久久福利视频一区二区| 91麻豆精品在线观看| 日韩你懂的在线播放| 亚洲麻豆国产自偷在线| 极品少妇xxxx偷拍精品少妇| 欧美日免费三级在线| 国产精品丝袜一区| 国产在线播放一区三区四| 欧美性生活大片视频| 国产精品久久久久aaaa樱花| 久久激情五月激情| 欧美日韩免费不卡视频一区二区三区| 国产日产欧美一区二区三区 | 国产精品欧美一级免费| 青青草97国产精品免费观看无弹窗版| 99久久久无码国产精品| 久久久久久一级片| 精品中文字幕一区二区小辣椒| 精品视频全国免费看| 玉足女爽爽91| 欧亚洲嫩模精品一区三区| 国产精品久久久久天堂| 波多野结衣中文一区| 精品午夜一区二区三区在线观看| 91福利社在线观看| 亚洲一区二区在线免费观看视频|