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

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

?? api.c

?? sl811 c8051F驅動程序 保證絕對可以使用 USB通信協議USB1.1
?? C
?? 第 1 頁 / 共 2 頁
字號:
//************************************************************************
//author:dragon
//web:8dragon.com
//2004.2.5完成于桃龍源
//*************************************************************************
#include <c8051F020.h>
#include "api.h"
#include "file.h"
#include "host_811.h"
#include  "ufi.h"
#include "string.h"
#include "math.h"
struct _FILE  ApiFileControl;
extern struct _BPB	SimpleBpb;
extern	FAT_PARAMETER FatParameter;
BYTE xdata BuffFile[8*512]  _at_  0xa000;

extern xdata WORD FatCache[2][256] ;


BYTE CreateFile(char* filename, BYTE attribute)
{	
	struct _DIR dir,*pdir;
	BYTE name[11];
	struct _FILE file;
//	WORD NewCluster;
  xdata 	BYTE Cache[512];
	static char NewFileName[12];
	char * p=NewFileName;
	////////////////////////////////////////////////////////////////////////
	//*Get valid filen name
	if(!CheckFileName(filename,p))
		return FALSE;	
	//*核對該文件是否已經存在
	if(LocateFile(filename, NULL)!=0xffffffff)
		return FALSE;
	strncpy(name, p, 11);
	memset(&dir, 0, sizeof(dir));
	memcpy(dir.Name, name, 11);
	dir.Attr = attribute;
	dir.CrtDate =0;
	dir.CrtTime =0;
	dir.CrtTimeTenth =0;
	dir.FileSize =0;
	DelayMs(5);
	if(!LocateDir(&dir, &file))
		return FALSE;	
//	NewCluster=SeekEmptyCluseter();
//	if(NewCluster==0xffff)
//		return FALSE;
	DelayMs(15);
	if(!Read(file.DirSectorNum,1,(BYTE *)Cache))
		return FALSE;
	pdir = (struct _DIR *)Cache;
	pdir += file.DirIndex;
	pdir->FstClusLO =0x00;//WordSwap(NewCluster);
	pdir->FileSize=0;
	if(!Write(file.DirSectorNum,1,Cache,TRUE))
		if(!Write(file.DirSectorNum,1,Cache,TRUE))
		return FALSE;		
 return OpenFile(filename);	
}
BYTE DelFile(const char * filename)
{
	DWORD FileFirstSector;
	BYTE  buf[512];
	WORD  Cluster,Cache[256];
	struct _DIR *dir;
	FileFirstSector=LocateFile(filename, &ApiFileControl);
	if(FileFirstSector==0xffffffff)
		return FALSE;
	dir=(struct _DIR *)buf;
	if(!Read(ApiFileControl.DirSectorNum,1,buf))
		return FALSE;
	ApiFileControl.dir.Name[0]=0xe5;
	dir=dir+ApiFileControl.DirIndex;
	memcpy(dir,&ApiFileControl.dir,sizeof(struct _DIR));
	if(!Write(ApiFileControl.DirSectorNum ,1,buf,TRUE))
		return FALSE;
	Cluster=WordSwap(ApiFileControl.dir.FstClusLO);
	if(!Read(((2*Cluster/SimpleBpb.BytsPerSec)+FatParameter.FirstFatSecNum),1,(BYTE *)Cache))
		return FALSE;
	for(;;)
	{
			  	
	//	Cluster=GetListCluster(Cluster);
		Cache[(Cluster%(SimpleBpb.BytsPerSec/2))]=0;
		if((Cluster%(SimpleBpb.BytsPerSec/2))==0)
		{
			if(!Write((2*Cluster/SimpleBpb.BytsPerSec)+FatParameter.FirstFatSecNum,1,(BYTE *)Cache,TRUE))
				return FALSE;
			if(!Read(((2*Cluster/SimpleBpb.BytsPerSec)+FatParameter.FirstFatSecNum),1,(BYTE *)Cache))
				return FALSE;
		}
		Cluster=GetListCluster(Cluster);
		if((GetListCluster(Cluster)==0xffff)||(Cluster==0))
		{
			Cache[(Cluster%(SimpleBpb.BytsPerSec/2))]=0;
			break;	 
		}
	}
	if(!Write((2*Cluster/SimpleBpb.BytsPerSec)+FatParameter.FirstFatSecNum,1,(BYTE *)Cache,TRUE))	
		return FALSE;
 return TRUE;
}
BYTE OpenFile(const char* filename)
{
	DWORD FileFirstSector;
	WORD  Cluster;
	////////////////////////////////////////////////////////////////////////
	FileFirstSector=LocateFile(filename, &ApiFileControl);
	if(FileFirstSector==0xffffffff)
		return FALSE;	
	ApiFileControl.StartSectorNum = FileFirstSector;
	Cluster=WordSwap(ApiFileControl.dir.FstClusLO);
	for(;;)
	{
		if((GetListCluster(Cluster)==0xffff)||(Cluster==0))
	 		break;	 		  	
		Cluster=GetListCluster(Cluster);
	}
	//ApiFileControl.CurrentSectorNum為該簇對應的第一個扇區
	ApiFileControl.CurrentSectorNum = ClusterToSec(Cluster);
	ApiFileControl.SectorOffset=(DWordSwap(ApiFileControl.dir.FileSize)%(SimpleBpb.BytsPerSec*SimpleBpb.SecPerClus));
	ApiFileControl.dir.FileSize=DWordSwap(ApiFileControl.dir.FileSize);
	return TRUE;
}
 BYTE WriteFile(const char* buffer, UINT bytes)
{
	BYTE *pCache;
	xdata WORD Cache[512];
	UINT write_bytes =0,flag=0;
	UINT max_write_bytes_in_sector;
	WORD Cluster;
	////////////////////////////////////////////////////////////////////////
	//如果打開的文件是一個空文件,則進入下面
	//為其尋找一個開始的數據蔟,標記為0xffff
	//數據直接填在該簇對應的扇區內
	if(ApiFileControl.StartSectorNum<FatParameter.FirstDataSector)
	{
		Cluster=SeekEmptyCluster();
		if(!Read(FatParameter.FirstFatSecNum+(2*Cluster/SimpleBpb.BytsPerSec),1,(BYTE *)Cache))
			return FALSE;
		Cache[Cluster%(SimpleBpb.BytsPerSec/2)]=0xffff;
		if(!Write(FatParameter.FirstFatSecNum+(2*Cluster/SimpleBpb.BytsPerSec),1,(BYTE *)Cache,0))
			return FALSE;
		ApiFileControl.dir.FstClusLO=WordSwap(Cluster);
		ApiFileControl.StartSectorNum=ApiFileControl.CurrentSectorNum=ClusterToSec(Cluster);
		flag=1;
	}
	///////////////////////////////////////////////////////////////////////////////
	//
	//如過前一個WriteFile函數的字節或者打開一個已經有為內容的文件的字節偏移剛好為
	//SimpleBpb.BytsPerSec*SimpleBpb.SecPerClus的整數倍,為了保持總的算法一致
	//(都是先寫好某簇為0xffff然后再寫該簇的內容)則開始的時候必須先為其準備好
	//一個未有內容的簇,標記好為0xffff,然后數據直接填在該簇對應的扇區內。
	//
	//////////////////////////////////////////////////////////////////////////////
	if((ApiFileControl.SectorOffset==0)&&flag==0)
		{
			Cluster =LinkClusterList(SecToCluster(ApiFileControl.CurrentSectorNum));
				if(Cluster == 0xffff)
					return FALSE;		
				ApiFileControl.CurrentSectorNum = ClusterToSec(Cluster);
		}
	for(;;)
	{
		pCache=BuffFile;//Cache;
		pCache += ApiFileControl.SectorOffset;
		if((SimpleBpb.BytsPerSec*SimpleBpb.SecPerClus - ApiFileControl.SectorOffset) > (bytes - write_bytes))
			max_write_bytes_in_sector =  (bytes - write_bytes);
		else
			max_write_bytes_in_sector=(SimpleBpb.BytsPerSec*SimpleBpb.SecPerClus - ApiFileControl.SectorOffset);
		memcpy(pCache, buffer, max_write_bytes_in_sector);
		ApiFileControl.SectorOffset += max_write_bytes_in_sector;
		if(ApiFileControl.SectorOffset>=SimpleBpb.BytsPerSec*SimpleBpb.SecPerClus)
		{				
				if(!Write(ApiFileControl.CurrentSectorNum,SimpleBpb.SecPerClus,(BYTE*)BuffFile,FALSE))
					if(!Write(ApiFileControl.CurrentSectorNum,SimpleBpb.SecPerClus,(BYTE*)BuffFile,FALSE))
						return FALSE;		
				if((write_bytes+max_write_bytes_in_sector)<bytes)
					{
						Cluster =LinkClusterList(SecToCluster(ApiFileControl.CurrentSectorNum));
						if(Cluster == 0xffff)
							return FALSE;		
						ApiFileControl.CurrentSectorNum = ClusterToSec(Cluster);			
					}
			
			ApiFileControl.SectorOffset = 0;
		}
		write_bytes += max_write_bytes_in_sector;
		buffer = (char*)buffer + max_write_bytes_in_sector;
		ApiFileControl.dir.FileSize +=  max_write_bytes_in_sector;
		if(write_bytes >= bytes)
			return TRUE;					
	}//end for cycle 
  return FALSE;
}  
BYTE CloseFile()
{
 xdata	BYTE Cache[512];
	struct _DIR *dir;
	////////////////////////////////////////////////////////////////////////
	if(ApiFileControl.SectorOffset!=0)
	{			
		if(!Write(ApiFileControl.CurrentSectorNum,SimpleBpb.SecPerClus,(unsigned char *)BuffFile,TRUE))
			if(!Write(ApiFileControl.CurrentSectorNum,SimpleBpb.SecPerClus,(unsigned char *)BuffFile,TRUE))
				return FALSE;
	}		
	DelayMs(50);
	if(!Read(ApiFileControl.DirSectorNum,1,Cache))
		if(!Read(ApiFileControl.DirSectorNum,1,Cache))
		return FALSE;
	dir = (struct _DIR *)Cache;
	dir += ApiFileControl.DirIndex;
	ApiFileControl.dir.FileSize=DWordSwap(ApiFileControl.dir.FileSize);
	memcpy(dir, &ApiFileControl.dir, sizeof(struct _DIR));
	DelayMs(50);
	if(!Write(ApiFileControl.DirSectorNum,1,Cache,TRUE))
		if(!Write(ApiFileControl.DirSectorNum,1,Cache,TRUE))
			return FALSE;
	if(FatCache[0][256]!=0)
	{
		if(!Write(FatCache[0][256],1,(BYTE *)FatCache[0],0))
			if(!Write(FatCache[0][256],1,(BYTE *)FatCache[0],0))
				return FALSE;
	}
	return TRUE;		
}

 
BYTE ReadFile(void* buffer, UINT bytes)
{
	BYTE*pCache;
	UINT read_bytes =0;
	UINT max_copy_bytes_in_sector;
	WORD Cluster;
	DWORD FileSize;
//	BYTE buf[600];
//	for(i=0;i<600;i++)
//		buf[i]='a';
//	memcpy(buffer,buf,400);
//	return TRUE;
	////////////////////////////////////////////////////////////////////////
	FileSize = ApiFileControl.dir.FileSize;
	if(bytes>=FileSize)
		bytes=FileSize;
	Cluster=SecToCluster(ApiFileControl.CurrentSectorNum);
//	Sector=ClusterToSec(Cluster);
	ApiFileControl.SectorOffset=ApiFileControl.SectorOffset%(SimpleBpb.BytsPerSec*SimpleBpb.SecPerClus);
		for(; ; )
		{	
			pCache=BuffFile;		
			pCache+=ApiFileControl.SectorOffset;
			if((SimpleBpb.BytsPerSec*SimpleBpb.SecPerClus - ApiFileControl.SectorOffset) > (bytes - read_bytes))
			max_copy_bytes_in_sector =  (bytes - read_bytes);
			else
			max_copy_bytes_in_sector=(SimpleBpb.BytsPerSec*SimpleBpb.SecPerClus - ApiFileControl.SectorOffset);
			ApiFileControl.SectorOffset+=max_copy_bytes_in_sector;
			if(!Read(ApiFileControl.CurrentSectorNum,SimpleBpb.SecPerClus,(BYTE *)BuffFile))
				return FALSE;
			memcpy((char *)buffer, pCache, max_copy_bytes_in_sector);
		//	 return TRUE;
			read_bytes+=max_copy_bytes_in_sector;
			if(read_bytes>=bytes)
				return TRUE;
			buffer = (char*)buffer + max_copy_bytes_in_sector;	
			Cluster=GetListCluster(Cluster);
			ApiFileControl.SectorOffset=0;
			ApiFileControl.CurrentSectorNum=ClusterToSec(Cluster);
			
		}//---------end for cycle
	return FALSE;
}


BYTE SetFileSector(const char * filename,DWORD fileSector,DWORD offset)
{	
	DWORD FileFirstSector;
	WORD  Cluster;
	////////////////////////////////////////////////////////////////////////
	FileFirstSector=LocateFile(filename, &ApiFileControl);
	if(FileFirstSector==0xffffffff)
		return FALSE;	
	ApiFileControl.StartSectorNum = FileFirstSector;
	Cluster=WordSwap(ApiFileControl.dir.FstClusLO);
	for(;;)
	{
		if((GetListCluster(Cluster)==0xffff)||(Cluster==0))
	 		break;	 		  	
		Cluster=GetListCluster(Cluster);
	}
	//ApiFileControl.CurrentSectorNum為該簇對應的第一個扇區

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91国模大尺度私拍在线视频| 欧美一区国产二区| 亚洲成人1区2区| 26uuu亚洲综合色| 欧美色成人综合| 成人午夜免费电影| 日本美女一区二区三区| 综合分类小说区另类春色亚洲小说欧美| 欧美电影一区二区| 色综合久久中文综合久久牛| 国产一区二区三区在线观看精品 | 色婷婷国产精品| 国产在线视频一区二区三区| 日韩综合在线视频| 亚洲码国产岛国毛片在线| 国产欧美精品一区二区色综合朱莉| 91麻豆精品国产91久久久久久久久 | 色8久久人人97超碰香蕉987| 国产伦精品一区二区三区免费| 午夜影院久久久| 亚洲图片激情小说| 亚洲国产精品t66y| 久久精品视频免费| 精品盗摄一区二区三区| 日韩一区二区精品在线观看| 欧美喷水一区二区| 欧美撒尿777hd撒尿| 色一区在线观看| 一本色道久久加勒比精品| 波多野结衣亚洲| 成人在线综合网站| 风流少妇一区二区| 成人天堂资源www在线| 国产精品亚洲视频| 国产精品一区二区黑丝| 国产精品自拍在线| 国产成人精品免费| 国产成人精品一区二区三区四区| 国内成人精品2018免费看| 久久成人免费电影| 国产一区二区三区在线观看精品 | 美女性感视频久久| 青青草国产精品97视觉盛宴| 日韩二区三区在线观看| 蜜臀久久99精品久久久久宅男| 捆绑调教一区二区三区| 激情欧美一区二区三区在线观看| 久久电影网电视剧免费观看| 国产激情一区二区三区| 国产成人av福利| 不卡的av在线播放| 在线视频中文字幕一区二区| 欧美日韩精品一二三区| 日韩欧美国产综合一区 | 国产精品一区二区果冻传媒| 福利一区福利二区| 色悠久久久久综合欧美99| 欧美视频在线播放| 日韩欧美久久一区| 国产精品嫩草99a| 亚洲精品国产精品乱码不99| 五月天欧美精品| 蜜乳av一区二区| 国产成人综合在线播放| 97久久精品人人爽人人爽蜜臀 | 26uuu精品一区二区在线观看| 日本一区二区三区视频视频| 亚洲欧美日韩国产手机在线| 午夜av区久久| 国产精品一二一区| 日本韩国一区二区三区| 欧美一区二区二区| 国产精品美女久久久久久久久| 亚洲观看高清完整版在线观看| 精品中文av资源站在线观看| 国产91精品入口| 欧美精品xxxxbbbb| 中文字幕精品在线不卡| 亚洲sss视频在线视频| 国产高清在线观看免费不卡| 91搞黄在线观看| 精品国产伦理网| 一区二区成人在线视频| 国模冰冰炮一区二区| 色噜噜夜夜夜综合网| 精品999在线播放| 一区二区三区 在线观看视频| 黑人巨大精品欧美一区| 欧美日韩中文精品| 国产精品色哟哟| 日本不卡一二三| 一本色道久久综合亚洲aⅴ蜜桃| 欧美成人女星排行榜| 一区二区三区在线观看国产| 国内不卡的二区三区中文字幕| 欧美色网站导航| 国产精品久久久久久久久免费丝袜| 日韩电影免费在线看| 99精品视频免费在线观看| 久久综合九色综合欧美就去吻 | www.综合网.com| 日韩免费在线观看| 亚洲一区二区在线观看视频 | 日韩精品一区二区在线观看| 亚洲欧美视频在线观看| 国产精品亚洲人在线观看| 这里只有精品电影| 亚洲精品中文在线| 成人性视频免费网站| 欧美成人精品3d动漫h| 亚洲国产美国国产综合一区二区 | 日韩欧美综合在线| 亚洲成a人片在线观看中文| 99热这里都是精品| 中文av一区二区| 国产精品影音先锋| 精品日韩99亚洲| 免费久久精品视频| 日韩一区二区在线观看| 亚洲丰满少妇videoshd| 在线视频中文字幕一区二区| 亚洲欧美另类图片小说| 成人av综合在线| 国产日产精品一区| 国产一区二区女| 久久久不卡影院| 国产在线不卡一卡二卡三卡四卡| 欧美成人r级一区二区三区| 日韩电影免费一区| 欧美一区二区三区四区高清| 日韩二区在线观看| 日韩欧美一级在线播放| 男人的j进女人的j一区| 制服丝袜亚洲色图| 日本不卡123| 精品国产污污免费网站入口| 极品尤物av久久免费看| 欧美mv和日韩mv国产网站| 久久激情五月婷婷| 久久久久国产精品免费免费搜索| 国产精品一区二区在线观看不卡 | 欧美一区二区三区免费观看视频 | 精品国产不卡一区二区三区| 精品一区二区在线观看| 精品国产区一区| 国产精品88av| 自拍av一区二区三区| 欧美午夜寂寞影院| 美日韩黄色大片| 久久精品网站免费观看| av中文字幕亚洲| 亚洲午夜激情网站| 欧美精品1区2区| 国内精品久久久久影院色| 中文字幕乱码日本亚洲一区二区| www.欧美日韩| 亚洲制服丝袜av| 日韩一区二区三区四区| 狠狠久久亚洲欧美| 亚洲欧美一区二区三区久本道91| 在线观看国产91| 美女视频黄a大片欧美| 国产亚洲欧美日韩俺去了| 91麻豆国产福利精品| 午夜在线电影亚洲一区| 久久奇米777| 色综合欧美在线视频区| 秋霞成人午夜伦在线观看| 久久精品欧美日韩| 欧美亚洲愉拍一区二区| 久久成人18免费观看| 亚洲欧美日韩久久精品| 日韩一级免费观看| 99这里只有久久精品视频| 日韩电影免费在线| 国产精品久久久久天堂| 欧美日韩大陆一区二区| 国产精品99久久久久久久vr| 亚洲国产另类av| 国产欧美精品区一区二区三区 | 欧洲精品在线观看| 国产一区欧美一区| 亚洲精品免费看| ww亚洲ww在线观看国产| 日本道精品一区二区三区| 久久99久久久久久久久久久| 亚洲欧美视频在线观看| 久久婷婷一区二区三区| 欧美网站大全在线观看| 成人国产在线观看| 久久精品免费观看| 一区二区在线看| 久久久综合激的五月天| 精品视频资源站| 91碰在线视频| 国产成人精品亚洲日本在线桃色| 免费观看在线综合色| 亚洲精品美国一| 国产精品毛片无遮挡高清| 欧美r级电影在线观看|