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

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

?? hpi32.c

?? USB接口程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
#include "common.h"
#include "TPBULK.H"
#include "HPI.H"
#include "HAL.H"
#include "Fat.h"
#include "Fat32.h"
#include "HPI32.H"

extern FLAGS bdata bFlags;
extern unsigned char xdata DBUF[BUFFER_LENGTH];
//////////////////////////////////////////
extern unsigned char xdata UARTBUF[UARTBUF_LENGTH];
extern SYS_INFO_BLOCK xdata DeviceInfo;
extern FILE_INFO xdata ThisFile;

extern Command_Def xdata Command;
extern Response_Def xdata Response;

unsigned long xdata DirStartCluster32,NowCluster32;
extern unsigned long xdata NowSector;
extern ShowFileName_Def xdata ShowFileName[MaxLFNum];	//long file struct
/////////////////////////////////////////////

unsigned char UartHandler32(void)
{
  Response.Result=0;Response.len=0;
  switch(Command.CLass)
  {
    case 0x00:	//List		
    	Response.Result=List32();
    	break;  
  	case 0x01:	//Open File
 		Response.Result=OpenFile32(Command.Parameter);		
     	break;
	case 0x02:	//Read File		
		Response.Result=ReadFile32(Command.len,UARTBUF);
		break;   
    case 0x03:	//Set Pointer
		Response.Result=SetFilePointer32(Command.len);	
		break;
	case 0x04:	//Great File
		Response.Result=OpenFile32(Command.Parameter);
		if(Response.Result)
			{
			Response.Result=SetFilePointer32(ThisFile.LengthInByte);
			}
		else
    		Response.Result=CreateFile32(Command.len,Command.Parameter,UARTBUF);    	
    	break; 
	case 0x05:	//Write File
    	Response.Result=WriteFile32(Command.len,UARTBUF);
    	break; 
    case 0x06:	//Remove File
    	ThisFile.bFileOpen=0;	
    	Response.Result=RemoveFile32(Command.Parameter);
    	break; 	
	case 0x07:	//Get Space    	
    	Response.Result=GetCapacity32();
    	break;     
	case 0x08:  //DetectDisk
		if(bFlags.bits.SLAVE_IS_ATTACHED)
			Response.Result=1;
		break;
	case 0x09:  //Great Dir
		Response.Result=DownDir32(Command.Parameter);
		if(!Response.Result)
			Response.Result=CreateDir32(Command.len,Command.Parameter,UARTBUF);    	
    	break; 
	case 0x0a:	//Down Dir
		Response.Result=DownDir32(Command.Parameter);
		break;
	case 0x0b:	//Up Dir
		Response.Result=UpDir32();
		break;	
	case 0x0c:	//Up RootDir
		Response.Result=UpRootDir32();
		break;	
  }

  UartSendRsp();
  ///////////////////////////////
  return TRUE;  
}

unsigned char List32(void)
{
	unsigned int item,i;
	unsigned char k,bstop,sector;
	unsigned char Lcount,Ncount,base;
	
	if(!bFlags.bits.SLAVE_IS_ATTACHED)
		return FALSE;			
	item=0;
	bstop=0;
	////////////////////////////////////
	Lcount=0;
	for(i=0;i<MaxLFNum;i++)
		{
		ShowFileName[i].LongName[0]=0x00;
		ShowFileName[i].LongName[1]=0x00;
		}
//////////////////////////////////////////////////////////////////   			
	NowCluster32=DirStartCluster32;		
		do
		{
			NowSector=FirstSectorofCluster32(NowCluster32);
			for(sector=0;sector<DeviceInfo.BPB_SecPerClus;sector++)
	    	{   
				if(!RBC_Read(NowSector+sector,1,DBUF))
					return FALSE;				
				for(i=0;i<DeviceInfo.BPB_BytesPerSec;i=i+32)
				{
					if(DBUF[i]==0x00)
						{bstop=1;break;}
					else if(DBUF[i]==0xE5)
						continue;			
					else
					{
						for(k=0;k<32;k++)
							UARTBUF[item*32+k]=DBUF[i+k];
						item=item+1;
						/////////////////////////////////
						if(DBUF[i+11]==0x0F)
						{
							base=((DBUF[i]&0x1F)-1)*26;
							if(base<=224)
							{
								Ncount=0;
								for(k=1;k<11;k++)
								{
									ShowFileName[Lcount].LongName[base+Ncount]=DBUF[i+k];
									Ncount++;
								}
								for(k=14;k<26;k++)
								{
									ShowFileName[Lcount].LongName[base+Ncount]=DBUF[i+k];
									Ncount++;
								}
								for(k=28;k<32;k++)
								{
									ShowFileName[Lcount].LongName[base+Ncount]=DBUF[i+k];
									Ncount++;
								}
							}
						}
						else
						{
							for(k=0;k<32;k++)
								ShowFileName[Lcount].item[k]=DBUF[i+k];
				 		   Lcount++;							
						}			
				/////////////////////////////////
					}
				}
				if(bstop==1)break;		
	    	}
			if(bstop==1)break;
	
			NowCluster32=GetNextClusterNum32(NowCluster32); 
			
		}while(NowCluster32<=DeviceInfo.TotCluster);

	Response.len=item*32;
	return TRUE;	
}

unsigned char OpenFile32(unsigned char *pBuffer)
{
	unsigned int i;
	unsigned char j,bstop,sector;
		
	if(!bFlags.bits.SLAVE_IS_ATTACHED)
		return FALSE;			
	ThisFile.bFileOpen=0;
	NowCluster32=DirStartCluster32;		
		do
		{
			NowSector=FirstSectorofCluster32(NowCluster32);
			for(sector=0;sector<DeviceInfo.BPB_SecPerClus;sector++)
	    	{   
				if(!RBC_Read(NowSector+sector,1,DBUF))
					return FALSE;				
				for(i=0;i<DeviceInfo.BPB_BytesPerSec;i=i+32)
				{
					if(DBUF[i]==0x00)
						return FALSE;
					j=0;
					while(DBUF[i+j]==*(pBuffer+j))
					{
						 j=j+1;
						 if(j>10)
						 	break;
					}
					if(j>10&&(DBUF[i+11]&0x10)!=0x10)
				    	{ 
						for(j=0;j<32;j++)
			    			UARTBUF[j]=DBUF[i+j];			    
			    		bstop=1;
			    		break;
						}
				}
				if(bstop==1)break;		
	    	}
			if(bstop==1)break;	
			NowCluster32=GetNextClusterNum32(NowCluster32);			
		}while(NowCluster32<=DeviceInfo.TotCluster);
		
	if(NowCluster32>DeviceInfo.TotCluster)
	   	return FALSE;

	ThisFile.bFileOpen=1;
	ThisFile.StartCluster=LSwapINT32(UARTBUF[26],UARTBUF[27],UARTBUF[20],UARTBUF[21]);
	ThisFile.LengthInByte=LSwapINT32(UARTBUF[28],UARTBUF[29],UARTBUF[30],UARTBUF[31]);
	ThisFile.ClusterPointer=ThisFile.StartCluster;	
	ThisFile.SectorPointer=FirstSectorofCluster32(ThisFile.StartCluster);
	ThisFile.OffsetofSector=0;
	ThisFile.SectorofCluster=0;	
	ThisFile.FatSectorPointer=0;	
	ThisFile.pointer=0;
	
	Response.len=32;
	return TRUE;	
}


unsigned char ReadFile32(unsigned long readLength,unsigned char *pBuffer)
{

	unsigned int len,i;
	unsigned int tlen;	
	unsigned long blen;

	if(!bFlags.bits.SLAVE_IS_ATTACHED)
		return FALSE;		
	if(!ThisFile.bFileOpen)
		return FALSE;

	blen=readLength;
	tlen=0;
	if(readLength>MAX_READ_LENGTH)
		return FALSE;	
	
	if(readLength+ThisFile.pointer>ThisFile.LengthInByte)
		return FALSE;	
		
	////////////////////////////////////////////		
		while(readLength>0)
		{
		   if(readLength+ThisFile.OffsetofSector>DeviceInfo.BPB_BytesPerSec)
		   	len=DeviceInfo.BPB_BytesPerSec;
		   else
		   	len=readLength+ThisFile.OffsetofSector;
		   
		   //////////////////////////////////////////////////////
		   if(ThisFile.OffsetofSector>0)
		   	{
		   	if(RBC_Read(ThisFile.SectorPointer,1,DBUF))
		   		{
		   		
		   		len=len-ThisFile.OffsetofSector;
		   		for(i=0;i<len;i++)
		   			
		   			*(pBuffer+i)=DBUF[ThisFile.OffsetofSector+i];
		   		ThisFile.OffsetofSector=ThisFile.OffsetofSector+len;
		   		}
		   	else
		   		return FALSE;		   		
		   	}
		   else
		   	{
		   		if(!RBC_Read(ThisFile.SectorPointer,1,pBuffer+tlen))
		   				return FALSE;	
		   		ThisFile.OffsetofSector=len;
		   	}
		   ////////////////////////////////////////////////////////////
		   readLength-=len;
		   tlen+=len;
		  
		   /////////////////////////////////////////////////////////
		   if((ThisFile.OffsetofSector>DeviceInfo.BPB_BytesPerSec-1)&&(tlen+ThisFile.pointer<ThisFile.LengthInByte))
		   {	
		   	ThisFile.OffsetofSector-=DeviceInfo.BPB_BytesPerSec;
		   	ThisFile.SectorofCluster+=1;
		   	if(ThisFile.SectorofCluster>DeviceInfo.BPB_SecPerClus-1)
		   	{
		   		ThisFile.SectorofCluster=0;
		 		 ThisFile.ClusterPointer=GetNextClusterNum32(ThisFile.ClusterPointer);
		 		 if(ThisFile.ClusterPointer>DeviceInfo.TotCluster)
		 		 	   return FALSE;			 		 	
		 		 ThisFile.SectorPointer=FirstSectorofCluster32(ThisFile.ClusterPointer); 	
		   	}
		   	else
		   		ThisFile.SectorPointer=ThisFile.SectorPointer+1;
		    }
		   //////////////////////////////////////////////////////////////////
		}//end while
		
	ThisFile.bFileOpen=1;
	ThisFile.pointer+=tlen;
	//////////////////////////////////////////////
	Response.len=blen;

	return TRUE;
}

unsigned char SetFilePointer32(unsigned long pointer)
{
	if(!bFlags.bits.SLAVE_IS_ATTACHED)
		return FALSE;		
	if(!ThisFile.bFileOpen)
		return FALSE;		
	///////////////////////////////////////////////////////////
	ThisFile.pointer=pointer;
	if(ThisFile.pointer>ThisFile.LengthInByte)
		return FALSE;	

	if(!GoToPointer32(ThisFile.pointer))
	{
	ThisFile.bFileOpen=0;
	return FALSE;	
	}
	//////////////////////////////////////////////
	return TRUE;
}

unsigned char CreateFile32(unsigned long len,unsigned char *pBuffer,unsigned char *pName)
{
	unsigned int sector,i,j,DirCount;
	unsigned long cnum;
	unsigned char xdata bstop,InByte,bwrite;
	unsigned long ClusterPointer;
	
	if(!bFlags.bits.SLAVE_IS_ATTACHED)
		return FALSE;
	if((len%32)!=0)
		return FALSE;
	if((len+32)>DeviceInfo.BPB_BytesPerSec)
		return FALSE;

	ThisFile.bFileOpen=0;	

	cnum=GetFreeCusterNum32();
	if(cnum<0x02)
		return FALSE;	

	pBuffer[21]=(unsigned char)(cnum>>24);
	pBuffer[20]=(unsigned char)(cnum>>16);
	pBuffer[27]=(unsigned char)(cnum>>8);
	pBuffer[26]=(unsigned char)(cnum);

	pBuffer[28]=0;pBuffer[29]=0;pBuffer[30]=0;pBuffer[31]=0;
	bstop=0;

	NowCluster32=DirStartCluster32;		
		do
		{
			NowSector=FirstSectorofCluster32(NowCluster32);
			ClusterPointer=NowCluster32;
			for(sector=0;sector<DeviceInfo.BPB_SecPerClus;sector++)
	    	{   
				if(!RBC_Read(NowSector+sector,1,DBUF))
					return FALSE;
				DirCount=0;bwrite=0;

				for(i=0;i<DeviceInfo.BPB_BytesPerSec;i=i+32)
				{
				if(len==0)
					{
					if((DBUF[i]==0x00)||(DBUF[i]==0xE5))
					{
					for(j=0;j<32;j++)
						DBUF[i+j]=*(pBuffer+j);
					if(!RBC_Write(NowSector+sector,1,DBUF))
		  	 			return FALSE;		  	 		
					bstop=1;
					break;
					}		
					}
				else
				{
				if(DirCount==0)
					InByte=i;
				if(DBUF[i]==0xE5)				
					DirCount++;				
				else if(DBUF[i]==0x00)
					{	
					DirCount++;	
					DBUF[i]=0xE5;	
					bwrite=1;				
					}
				else
					DirCount=0;

				if((DirCount*32)>=(len+32))
					{
					for(j=0;j<len;j++)
						DBUF[InByte+j]=*(pName+j);
					for(j=0;j<32;j++)
						DBUF[InByte+len+j]=*(pBuffer+j);
					if(!RBC_Write(NowSector+sector,1,DBUF))
		  		 		return FALSE;		  	 		
					bstop=1;
					break;
					}
				 }
				}
				if(bstop==1)break;
				
				if((len!=0)&&(bwrite==1))
				{
				if(!RBC_Write(NowSector+sector,1,DBUF))
		  			return FALSE;
	    		}
	    	}
			if(bstop==1)break;
	
			NowCluster32=GetNextClusterNum32(NowCluster32);
			if(NowCluster32>DeviceInfo.TotCluster)
	    	{
			NowCluster32=CreateClusterLink32(ClusterPointer);
		 	if(NowCluster32==0x00)
		 		 return FALSE;
			NowSector=FirstSectorofCluster32(NowCluster32);
			for(i=0;i<DeviceInfo.BPB_BytesPerSec;i++) DBUF[i]=0x00;
			for(sector=0;sector<DeviceInfo.BPB_SecPerClus;sector++)
				{
				if(!RBC_Write(NowSector+sector,1,DBUF))
		  	 		return FALSE;
				}
			}
		}while(NowCluster32<=DeviceInfo.TotCluster);	
////////////////////////////////////////////////////////////////
	
	ThisFile.StartCluster=cnum;
	ThisFile.LengthInByte=0;
	ThisFile.ClusterPointer=ThisFile.StartCluster;
	ThisFile.SectorPointer=FirstSectorofCluster32(ThisFile.StartCluster);
	ThisFile.OffsetofSector=0;
	ThisFile.SectorofCluster=0;
	ThisFile.bFileOpen=1;
	ThisFile.pointer=0;
	ThisFile.FatSectorPointer=0;
	
	return TRUE;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
九九久久精品视频| 亚洲综合男人的天堂| 91黄色激情网站| 美女www一区二区| 亚洲欧美区自拍先锋| 欧美成人一级视频| 欧美日韩一级二级三级| 91精品福利在线| 久久精品国产第一区二区三区| 亚洲欧美另类图片小说| 久久精品一级爱片| 欧美日韩黄色一区二区| 91在线观看美女| 国产69精品久久99不卡| 久久国产剧场电影| 亚洲.国产.中文慕字在线| 国产精品无人区| 国产午夜精品一区二区三区视频 | 国产毛片一区二区| 亚洲国产视频在线| 亚洲色图都市小说| 国产精品欧美久久久久无广告 | 狠狠色综合日日| 在线不卡免费av| 亚洲高清一区二区三区| 国产精品久久久久久久久快鸭| 6080亚洲精品一区二区| 色丁香久综合在线久综合在线观看| 国产亚洲人成网站| 欧美午夜精品一区二区蜜桃| 午夜精品久久久久久久99樱桃| 日韩精品一区二区三区中文不卡| 欧美一级生活片| 欧美一级二级在线观看| 亚洲三级免费电影| 日韩综合小视频| 视频一区二区欧美| 中文字幕日韩精品一区| 五月天欧美精品| 精品亚洲欧美一区| 色婷婷久久综合| 久久精品国产精品青草| 亚洲精品一区二区在线观看| 91蜜桃免费观看视频| 亚洲精品你懂的| 在线观看三级视频欧美| 欧美精品色综合| 精品一区二区三区影院在线午夜| 国产视频一区在线观看| 欧美日韩精品一区二区在线播放| 狠狠色狠狠色综合日日91app| 中文字幕av一区 二区| 国产精品狼人久久影院观看方式| 欧美午夜精品一区| 色综合久久久网| a在线播放不卡| 久久av中文字幕片| 亚洲午夜精品在线| 亚洲午夜一区二区三区| 亚洲一区二区三区美女| 亚洲综合色成人| 一区二区在线观看视频在线观看| 亚洲最快最全在线视频| 亚洲精品高清视频在线观看| 一区二区三区日韩精品| 日本免费新一区视频| 黄页网站大全一区二区| 国产呦萝稀缺另类资源| 国产高清不卡一区| 99久久99久久精品免费观看| 99久久免费精品高清特色大片| 一本一道久久a久久精品综合蜜臀| 99久久精品一区二区| 精品视频在线免费看| 日本在线不卡视频一二三区| 精品日韩一区二区| 有码一区二区三区| 成人一区二区三区视频| 亚洲综合一区二区| 蜜臂av日日欢夜夜爽一区| 成人av在线看| 国产精品一区二区久久不卡| 成人美女在线观看| 国产成人在线影院| 欧洲av一区二区嗯嗯嗯啊| 色婷婷综合久色| 欧美一区二区三区四区在线观看 | 国产一区二区三区观看| 99久久免费国产| 在线精品视频免费播放| 在线成人高清不卡| 国产蜜臀97一区二区三区 | 成人av电影观看| 欧美精品一级二级| 亚洲国产精品精华液2区45| 五月婷婷激情综合网| 国产精品一区二区久久不卡 | 天天影视涩香欲综合网| 成人免费av资源| 日韩视频永久免费| 亚洲自拍都市欧美小说| 色综合视频在线观看| 91精品国产综合久久久久久久久久 | 亚洲第一在线综合网站| 国产剧情在线观看一区二区| 欧美日韩和欧美的一区二区| 国产精品国产三级国产aⅴ中文| 日韩有码一区二区三区| 在线亚洲一区二区| 中文字幕在线免费不卡| 韩国女主播一区二区三区| 欧美日韩国产另类一区| 亚洲高清免费在线| 欧美亚洲动漫精品| 亚洲美女精品一区| 91久久精品一区二区二区| 亚洲人成伊人成综合网小说| 成人午夜免费av| 亚洲视频一区二区在线| 国产成人亚洲综合a∨婷婷 | 一个色综合av| 日韩三级免费观看| 自拍偷拍亚洲欧美日韩| 粉嫩高潮美女一区二区三区| 欧美变态tickling挠脚心| 久久激情综合网| 精品剧情在线观看| 国产精品91xxx| 亚洲青青青在线视频| 欧美精品丝袜久久久中文字幕| 免费观看日韩av| 1024精品合集| 欧美喷潮久久久xxxxx| 极品少妇xxxx精品少妇| 亚洲素人一区二区| 欧美一区二区视频网站| 国产精品影视在线| 亚洲国产欧美在线人成| 精品免费日韩av| 91激情在线视频| 国产精品一级片在线观看| 亚洲v日本v欧美v久久精品| 久久尤物电影视频在线观看| 99精品久久久久久| 国产一区高清在线| 国产在线麻豆精品观看| 国产精品久久久爽爽爽麻豆色哟哟| 91欧美一区二区| 国产成人高清视频| 久久丁香综合五月国产三级网站| 国产精品网站在线观看| 欧美一区二区免费观在线| 欧美在线一区二区| 色国产综合视频| 成人福利视频网站| 国产成人在线视频网址| 日本亚洲天堂网| 午夜视频在线观看一区| 亚洲国产aⅴ成人精品无吗| 国产精品久久久久毛片软件| 精品三级在线观看| 精品处破学生在线二十三| 91精品国产91久久久久久一区二区 | 欧美国产日韩亚洲一区| 日本一区二区三区国色天香 | 欧美另类高清zo欧美| 精品视频1区2区| 欧美精品久久久久久久多人混战 | 久久影院视频免费| www日韩大片| 精品剧情在线观看| 精品久久人人做人人爰| 国产日韩欧美高清在线| 久久综合九色综合97婷婷| 国产精品青草久久| 亚洲成人激情自拍| 国产一区二区三区综合| 高清国产一区二区| 欧美在线999| ww亚洲ww在线观看国产| 亚洲男人天堂一区| 亚洲高清视频中文字幕| 捆绑调教美女网站视频一区| 国产jizzjizz一区二区| 色综合久久中文字幕综合网 | 国产精品自产自拍| 精品污污网站免费看| 精品国内片67194| 亚洲精品在线免费播放| 日韩理论片中文av| 午夜av区久久| 菠萝蜜视频在线观看一区| 欧美欧美欧美欧美| 亚洲精品日日夜夜| 国内精品久久久久影院一蜜桃| 成人动漫一区二区| 欧美国产日韩a欧美在线观看 | 555夜色666亚洲国产免| **网站欧美大片在线观看| 黑人巨大精品欧美一区|