亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
久久精品国产一区二区三| 日韩av电影免费观看高清完整版在线观看 | 久久久亚洲综合| 91精品国产91久久久久久一区二区| 91久久香蕉国产日韩欧美9色| 91色视频在线| 在线国产电影不卡| 欧美日韩国产高清一区| 精品1区2区3区| 91.成人天堂一区| 精品999在线播放| 久久精品一区八戒影视| 中文字幕中文字幕在线一区| 亚洲人成影院在线观看| 亚洲国产精品久久久男人的天堂| 夜夜揉揉日日人人青青一国产精品| 亚洲综合成人在线视频| 日韩综合在线视频| 国产盗摄一区二区三区| 成人激情小说网站| 在线观看亚洲一区| 精品少妇一区二区三区 | 丁香桃色午夜亚洲一区二区三区| 成人免费观看视频| 2023国产精品| 国产精品久久久久久亚洲伦| 亚洲自拍与偷拍| 久久99精品久久只有精品| 成人综合在线视频| 91精品久久久久久久久99蜜臂| 精品日本一线二线三线不卡| 中文字幕久久午夜不卡| 香蕉成人啪国产精品视频综合网| 国产在线精品不卡| 欧美在线你懂得| 欧美国产综合色视频| 午夜视频一区在线观看| 成人听书哪个软件好| 欧美亚洲动漫精品| 亚洲国产精品av| 五月天亚洲婷婷| 99国产精品久久| 欧美变态凌虐bdsm| 日韩专区欧美专区| 91免费国产在线| 久久影院视频免费| 日韩在线观看一区二区| 99精品欧美一区| 久久先锋资源网| 丝袜美腿高跟呻吟高潮一区| 99天天综合性| 久久先锋影音av| 日韩黄色小视频| 91啪亚洲精品| 中文字幕一区二区三区四区不卡| 男人的天堂久久精品| 欧美在线观看18| 亚洲欧美另类久久久精品 | 成人动漫一区二区| 精品久久国产老人久久综合| 亚洲成人av一区| 91成人在线观看喷潮| **欧美大码日韩| 国产成人免费视频网站| 久久亚洲影视婷婷| 国产一区二区在线观看视频| 欧美一区日本一区韩国一区| 香蕉成人伊视频在线观看| 在线免费精品视频| 亚洲一区二区三区在线| 91黄色在线观看| 一区二区在线电影| 一本大道久久a久久综合婷婷| 国产精品美女久久久久久2018| 久久99国产精品麻豆| 日韩免费在线观看| 日本特黄久久久高潮| 7777精品伊人久久久大香线蕉最新版| 亚洲一区二区三区四区五区中文 | 琪琪久久久久日韩精品| 91精品久久久久久久99蜜桃| 麻豆91在线看| xvideos.蜜桃一区二区| 国产精品一级片在线观看| 久久久综合激的五月天| 欧美日韩国产综合一区二区| 亚洲在线中文字幕| 777亚洲妇女| 韩国精品久久久| 国产精品乱码久久久久久| av亚洲精华国产精华精华| 伊人开心综合网| 欧美一区二区三区喷汁尤物| 国产一区二区三区免费看| 国产欧美日韩在线| 色婷婷亚洲婷婷| 蜜臀av性久久久久av蜜臀妖精| 精品国产区一区| www.66久久| 日韩精品91亚洲二区在线观看 | 中文字幕一区视频| 欧美日韩国产一级片| 精品一区二区三区欧美| 国产网红主播福利一区二区| 91亚洲午夜精品久久久久久| 日韩精品五月天| 国产女同互慰高潮91漫画| 色偷偷88欧美精品久久久| 奇米影视一区二区三区| 国产精品国产三级国产专播品爱网| 欧美自拍丝袜亚洲| 国产电影一区二区三区| 亚洲成人激情社区| 国产欧美日韩视频在线观看| 制服丝袜亚洲精品中文字幕| 国产成人无遮挡在线视频| 亚洲妇女屁股眼交7| 久久精品欧美日韩| 欧美日韩国产片| 不卡影院免费观看| 九九热在线视频观看这里只有精品| 亚洲天堂免费看| 精品毛片乱码1区2区3区| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 91免费国产在线观看| 九九九久久久精品| 午夜精品一区二区三区三上悠亚| 国产精品久久久一区麻豆最新章节| 日韩一区二区三区四区五区六区| 99精品偷自拍| 国产成人免费av在线| 精品伊人久久久久7777人| 亚洲一区二区中文在线| 亚洲欧洲精品一区二区精品久久久| 久久先锋影音av| 日韩午夜av电影| 8v天堂国产在线一区二区| 在线免费精品视频| 91丨porny丨蝌蚪视频| 成人午夜视频在线观看| 国产河南妇女毛片精品久久久| 日韩成人av影视| 日韩国产一二三区| 视频一区中文字幕国产| 亚洲第一激情av| 午夜精品久久久久久久99樱桃| 亚洲人成小说网站色在线| 国产精品超碰97尤物18| 国产精品你懂的| 最近中文字幕一区二区三区| 国产欧美日韩精品一区| 亚洲国产高清在线| 国产精品国产三级国产aⅴ中文 | 久久夜色精品国产噜噜av| 欧美本精品男人aⅴ天堂| 日韩一级精品视频在线观看| 欧美精品日韩精品| 777亚洲妇女| 久久久久九九视频| 中文字幕一区日韩精品欧美| 亚洲婷婷在线视频| 亚洲综合网站在线观看| 三级精品在线观看| 久久99久久精品| 成人在线视频首页| 色综合天天综合在线视频| 欧美蜜桃一区二区三区| 欧美一级搡bbbb搡bbbb| 久久久久久久久岛国免费| 国产精品日韩成人| 亚洲一区二区三区三| 视频一区二区国产| 韩国精品久久久| 色综合久久天天| 宅男在线国产精品| 国产精品女主播av| 婷婷六月综合网| 国产.欧美.日韩| 欧美在线你懂的| 久久久久国产一区二区三区四区| 亚洲欧美综合在线精品| 日韩成人精品在线观看| 国产成人av一区| 欧美日韩午夜在线视频| xnxx国产精品| 亚洲一区中文在线| 国产一区二区毛片| 色美美综合视频| 久久九九影视网| 五月天激情小说综合| 高清成人免费视频| 欧美久久高跟鞋激| 国产精品久久久久影院老司| 日韩在线卡一卡二| 色屁屁一区二区| 国产色91在线| 精品一区二区三区免费观看| 91成人在线观看喷潮| 日本一区二区动态图| 老司机精品视频线观看86|