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

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

?? hpi.c

?? 讀寫U盤C代碼,基于CH375FAT芯片,實用的一個代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
#include "common.h"

extern XXGFLAGS bdata bXXGFlags;
extern unsigned char xdata DBUF[BUFFER_LENGTH];
//////////////////////////////////////////
//CH_CMD_BLOCK xdata inblock;
unsigned char xdata CHBUF[CHBUF_LENGTH];
SYS_INFO_BLOCK xdata DeviceInfo;
CH_CMD_BLOCK xdata CHCmdBlock;
CH_RSP_BLOCK xdata CHRspBlock;
FILE_INFO xdata ThisFile;
extern FREE_FAT_INFO xdata FreeFat;


unsigned char EnumMassDev(void)
{
	PMBR_BLOCK pMBR;
	PBPB_BLOCK pBPB;
	if(mInitDisk( )!=USB_INT_SUCCESS)return 0  ;  /* 初始化USB存儲器 */
	pMBR=(PMBR_BLOCK)DBUF;
	DeviceInfo.BPB_BytesPerSec=512; //暫假設為512
	//if(!SPC_RequestSense())
	//	return FALSE;
	if(!SPC_TestUnit())
		return FALSE;
	if(!SPC_LockMedia())
		return FALSE;
	if(!ReadCapacity())
		return FALSE;
	if(!RBC_Read(0x0,1,DBUF))
		return FALSE;
	//////////////////////////////////
	if(DBUF[0]==0xeb||DBUF[0]==0xe9){    //判斷是否是BS_jmpBoot
		DeviceInfo.StartSector=0;
		//DeviceInfo.TotalSector=SwapINT32(pMBR->TotalSector);
		}
	else	{
	//////////////////////////////////
		DeviceInfo.StartSector=SwapINT32(pMBR->StartSector);
		//DeviceInfo.TotalSector=SwapINT32(pMBR->TotalSector);
		}
	///////////////////////////////////////////////////////
	pBPB=(PBPB_BLOCK)DBUF;
	if(!RBC_Read(DeviceInfo.StartSector,1,DBUF))
		return FALSE;
	DeviceInfo.BPB_BytesPerSec=SwapINT16(pBPB->BPB_BytesPerSec);
	DeviceInfo.BPB_SecPerClus=pBPB->BPB_SecPerClus;
	DeviceInfo.BPB_NumFATs=pBPB->BPB_NumFATs;
	DeviceInfo.BPB_RootEntCnt=SwapINT16(pBPB->BPB_RootEntCnt);
	DeviceInfo.BPB_TotSec16=SwapINT16(pBPB->BPB_TotSec16);
	DeviceInfo.BPB_FATSz16=SwapINT16(pBPB->BPB_FATSz16);
	DeviceInfo.BPB_TotSec32=SwapINT32(pBPB->BPB_TotSec32);
	DeviceInfo.FatStartSector=DeviceInfo.StartSector+pBPB->BPB_RsvdSecCn[0];
	DeviceInfo.RootStartSector=DeviceInfo.StartSector+2*DeviceInfo.BPB_FATSz16+pBPB->BPB_RsvdSecCn[0];
	DeviceInfo.FirstDataSector=DeviceInfo.FatStartSector+2*DeviceInfo.BPB_FATSz16+32;
	///////////////////////////////////////////////////////
	ThisFile.bFileOpen=0;
	bXXGFlags.bits.SLAVE_IS_ATTACHED=1;
	///////////////////////////////////////////////////////
	return TRUE;
}

//***********************************************
unsigned char DetectDevice(void)      //檢測設備
{
#define RspBlockDetectDevice CHRspBlock.RspBlock.Rsp_DetectDevice
	return bXXGFlags.bits.SLAVE_IS_ATTACHED;

#undef RspBlockDetectDevice
}

unsigned char List(void)     //列表文件
{
#define RspBlockList CHRspBlock.RspBlock.Rsp_List
	unsigned int item,i;
	unsigned char j,k,bstop,sector;
	//RspBlockList.errcode=ERC_NODEVICE;
	if(!bXXGFlags.bits.SLAVE_IS_ATTACHED)
	{
	CHRspBlock.errcode=ERC_NODEVICE;
	return FALSE;
	}
	///////////////////////////////////////////////////////////
	item=0;
	bstop=0;
	//RspBlockList.result=0x1;
	for(sector=0;sector<DeviceInfo.BPB_RootEntCnt;sector++)
	    {
		//////////////////////////////////////////////////
		if(!RBC_Read(DeviceInfo.RootStartSector+sector,1,DBUF))
			{
			//item=0;
			CHRspBlock.errcode=ERC_DEVICEERR;
			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 if((DBUF[i]&0x40==0x40)&&(DBUF[i+11]==0xff))
				{
				j=DBUF[i]&0x0F;
				j=j+1;
				for(k=0;k<j*32;k++)
					CHBUF[item*32+k]=DBUF[i+k];
				i=i+(j-1)*32;
				item=item+j;
				}
			else
				{
				for(k=0;k<32;k++)
					CHBUF[item*32+k]=DBUF[i+k];
				item=item+1;
				}
			}
		///////////////////////////////////////////////////////
		if(bstop==1)break;

	    }

	//pBuf=(PREAD_CAPACITY_RSP)DBUF;
	///////////////////////////////////////////
	RspBlockList.len=SwapINT16(item*32);
	CHRspBlock.len=item*32;
	return TRUE;

#undef RspBlockList

}
unsigned char OpenFile(unsigned char *pBuffer)
{
#define RspBlockOpenFile CHRspBlock.RspBlock.Rsp_OpenFile
	unsigned int i;
	unsigned char j,bstop,sector;
	PDIR_INFO pDirInfo;

	if(!bXXGFlags.bits.SLAVE_IS_ATTACHED)
	{
	CHRspBlock.errcode=ERC_NODEVICE;
	return FALSE;
	}
	///////////////////////////////////////////////////////////

	ThisFile.bFileOpen=0;
	//RspBlockOpenFile.result=0x0;
	//RspBlockOpenFile.errcode=ERC_OK;
	for(sector=0;sector<DeviceInfo.BPB_RootEntCnt;sector++)
	    {
		//////////////////////////////////////////////////
		if(!RBC_Read(DeviceInfo.RootStartSector+sector,1,DBUF))
			{
			CHRspBlock.errcode=ERC_DEVICEERR;
			return FALSE;

			}
		///////////////////////////////////////////////////
		for(i=0;i<DeviceInfo.BPB_BytesPerSec;i=i+32)
			{
			if(DBUF[i]==0x00)
				{
				CHRspBlock.errcode=ERC_FILENOTFOUND;
				//CHRspBlock.errcode=ERC_DEVICEERR;
				return FALSE;
				}
			///////////////////////////////////////////
			j=0;
			while(DBUF[i+j]==*(pBuffer+j))
				{
				 j=j+1;
				 if(j>10)
				 	break;
				}

			if(j>10)
			    {
			    for(j=0;j<32;j++)
			    	RspBlockOpenFile.item[j]=DBUF[i+j];
			    //RspBlockOpenFile.result=0x1;
			    ThisFile.bFileOpen=1;
			    bstop=1;
			     break;}

			}
		///////////////////////////////////////////////////////
		if(bstop==1)break;
		///////////////////////////////////////////////////////
		//if(DeviceInfo.BPB_RootEntCnt)

	    }

	    if(sector>=DeviceInfo.BPB_RootEntCnt)
	    	{
	    	CHRspBlock.errcode=ERC_FILENOTFOUND;
	    	//CHRspBlock.errcode=ERC_DEVICEERR;
		return FALSE;
	    	}
	////////////////////////////////////////////
	pDirInfo=(PDIR_INFO)RspBlockOpenFile.item;
	ThisFile.StartCluster=SwapINT16(pDirInfo->startCluster);
	ThisFile.LengthInByte=SwapINT32(pDirInfo->length);
	ThisFile.ClusterPointer=ThisFile.StartCluster;
	ThisFile.SectorPointer=FirstSectorofCluster(ThisFile.StartCluster);
	ThisFile.OffsetofSector=0;
	ThisFile.SectorofCluster=0;
	//=ThisFatSecNum(clusterNum);
	//xxgFatEntOffset=ThisFatEntOffset(clusterNum);
	ThisFile.FatSectorPointer=0;
	//ThisFile.bFileOpen=1;
	ThisFile.pointer=0;
	///////////////////////////////////////////
	FreeFat.SectorNum=DeviceInfo.FatStartSector;
	FreeFat.OldSectorNum=DeviceInfo.FatStartSector;
	FreeFat.OffsetofSector=2;

	return TRUE;
#undef RspBlockOpenFile
}

unsigned char ReadFile(unsigned int readLength,unsigned char *pBuffer)
{
#define RspBlockReadFile CHRspBlock.RspBlock.Rsp_ReadFile
	unsigned int idata len,i;
	unsigned char bSuccess;
	//unsigned char sector;
	//unsigned long lba;

	if(!bXXGFlags.bits.SLAVE_IS_ATTACHED)
	{
	CHRspBlock.errcode=ERC_NODEVICE;
	return FALSE;
	}
	if(!ThisFile.bFileOpen)
	{
	CHRspBlock.errcode=ERC_FILENOTOPENED;
	return FALSE;
	}
	///////////////////////////////////////////////////////////
	ThisFile.bFileOpen=0;
	bSuccess=1;
	CHRspBlock.len=0;
	//lba=GetSecNumFromPointer();
	//cluster=GetClusterNumFromSectorNum(lba);
	//cluster=ThisFile.StartCluster;
	//lba=FirstSectorofCluster(ThisFile.StartCluster);
	//readLength=SwapINT16(CHCmdBlock.CmdBlock.Cmd_ReadFile.readLength);
	if(readLength>MAX_READ_LENGTH)
		{
		CHRspBlock.errcode=ERC_LENGTHEXCEED;
		return FALSE;
		}
	if(readLength+ThisFile.pointer>ThisFile.LengthInByte)
		{
		CHRspBlock.errcode=ERC_LENGTHEXCEED;
		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))
		   		{
		   		//ThisFile.OffsetofSector=len;
		   		len=len-ThisFile.OffsetofSector;
		   		for(i=0;i<len;i++)
		   			//CHBUF[i]=DBUF[ThisFile.OffsetofSector+i];
		   			*(pBuffer+i)=DBUF[ThisFile.OffsetofSector+i];
		   		ThisFile.OffsetofSector=ThisFile.OffsetofSector+len;
		   		}
		   	else
		   		{
		   		CHRspBlock.errcode=ERC_DEVICEERR;
				return FALSE;
		   		}
		   	}
		   else
		   	{
		   		if(!RBC_Read(ThisFile.SectorPointer,1,pBuffer+CHRspBlock.len))
		   		{
		   		CHRspBlock.errcode=ERC_DEVICEERR;
				return FALSE;
		   		}
		   		ThisFile.OffsetofSector=len;
		   	}
		   ////////////////////////////////////////////////////////////
		  // if(ThisFile.OffsetofSector>DeviceInfo.BPB_BytesPerSec-1)
		  // 	ThisFile.OffsetofSector-=DeviceInfo.BPB_BytesPerSec;
		   readLength-=len;
		   CHRspBlock.len+=len;
		  // ThisFile.OffsetofSector=;
		   /////////////////////////////////////////////////////////
		   if(ThisFile.OffsetofSector>DeviceInfo.BPB_BytesPerSec-1)
		   {
		   	ThisFile.OffsetofSector-=DeviceInfo.BPB_BytesPerSec;
		   	ThisFile.SectorofCluster+=1;
		   	if(ThisFile.SectorofCluster>DeviceInfo.BPB_SecPerClus-1)
		   	{
		   		ThisFile.SectorofCluster=0;
		 		 ThisFile.ClusterPointer=GetNextClusterNum(ThisFile.ClusterPointer);
		 		 if(ThisFile.ClusterPointer>0xffef)
		 		 	{
		 		 	   //RspBlockReadFile.errcode=ERC_REACHEND;
		   			   //RspBlockReadFile.result=0x0;
		   			   CHRspBlock.errcode=ERC_REACHEND;
					   return FALSE;
		 		 	}
		 		 ThisFile.SectorPointer=FirstSectorofCluster(ThisFile.ClusterPointer);
		   	}
		   	else
		   		ThisFile.SectorPointer=ThisFile.SectorPointer+1;
		    }
		   //////////////////////////////////////////////////////////////////
		}//end while


	ThisFile.bFileOpen=1;
	ThisFile.pointer+=CHRspBlock.len;
	//////////////////////////////////////////////
	RspBlockReadFile.readLength=SwapINT16(CHRspBlock.len);
	return TRUE;
#undef RspBlockReadFile
}

unsigned char CreateFile(unsigned char *pBuffer)		//創建文件
{
#define RspBlockCreateFile CHRspBlock.RspBlock.Rsp_CreateFile
	//unsigned long sectorNum;
	unsigned int sector,i,j;
	unsigned char bstop;
	PDIR_INFO pDirInfo;

	if(!bXXGFlags.bits.SLAVE_IS_ATTACHED)      //檢測設備是否連入
	{
	CHRspBlock.errcode=ERC_NODEVICE;			//否則返回錯誤
	return FALSE;
	}
	///////////////////////////////////////////////////////////
	if(OpenFile( pBuffer))RemoveFile(pBuffer);
		
	//RspBlockCreateFile.result=0x1;
	//RspBlockCreateFile.errcode=ERC_OK;
	pDirInfo=(PDIR_INFO)pBuffer;
	///////// Search the file of the same name  ///////////
	//CHCmdBlock.CmdBlock.Cmd_CreateFile.filename[j]
	//if(!SPC_TestUnit())
	//	return FALSE;
	//////// Search the fat for a free cluster  ////////////
	pDirInfo->startCluster=SwapINT16(GetFreeCusterNum());

	if(pDirInfo->startCluster<0x2)
	{
	CHRspBlock.errcode=ERC_NODEVICE;
	return FALSE;
	}
	pDirInfo->length=0;
	/////// Search a free space in the root dir space and build the item ///
	ThisFile.bFileOpen=0;
	bstop=0;
	for(sector=0;sector<DeviceInfo.BPB_RootEntCnt;sector++)
	    {
		//////////////////////////////////////////////////
		if(!RBC_Read(DeviceInfo.RootStartSector+sector,1,DBUF))
			{

			CHRspBlock.errcode=ERC_DEVICEERR;
				return FALSE;
			}
		///////////////////////////////////////////////////
		for(i=0;i<DeviceInfo.BPB_BytesPerSec;i=i+32)
			{
			if((DBUF[i]==0x00)||(DBUF[i]==0xE5))
				{
				for(j=0;j<32;j++)
					//DBUF[i+j]=CHCmdBlock.CmdBlock.Cmd_CreateFile.item[j];
					DBUF[i+j]=*(pBuffer+j);
				if(!RBC_Write(DeviceInfo.RootStartSector+sector,1,DBUF))
		  	 		{
		  	 		CHRspBlock.errcode=ERC_DEVICEERR;
					return FALSE;
		  	 		}
				bstop=1;
				break;
				}
			}
		///////////////////////////////////////////////////////
		if(bstop==1)break;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久综合九色综合97_久久久| 在线观看日韩电影| 中文字幕在线视频一区| 欧美日韩一级大片网址| 亚洲精品国产高清久久伦理二区| 91精品国产综合久久蜜臀| 国产九九视频一区二区三区| 成人欧美一区二区三区1314| 91精品综合久久久久久| 国产不卡在线视频| 亚洲激情在线播放| 精品成人私密视频| 欧美在线你懂得| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 国产精品久久久爽爽爽麻豆色哟哟 | 欧美伊人久久久久久久久影院| 久久精品国产一区二区三 | 久久久噜噜噜久噜久久综合| 色综合久久综合网| 亚洲va国产va欧美va观看| 精品日韩在线观看| 欧美体内she精高潮| 成人app下载| 久久精品理论片| 亚洲国产日日夜夜| 欧美国产精品中文字幕| 欧美va天堂va视频va在线| 欧美在线视频全部完| 成人伦理片在线| 精品一区二区三区免费毛片爱| 国产精品初高中害羞小美女文| 亚洲精品一区二区三区在线观看 | 日韩一区二区三区视频| 色美美综合视频| 国产成人日日夜夜| 久久机这里只有精品| 亚洲一区二区高清| 亚洲色欲色欲www| 国产亚洲一区二区三区四区| 欧美私模裸体表演在线观看| 94-欧美-setu| 丁香婷婷深情五月亚洲| 国产在线麻豆精品观看| 蜜臀av国产精品久久久久| 亚洲午夜电影在线| 亚洲精品国产a久久久久久| 中文字幕精品—区二区四季| 国产午夜精品在线观看| 日韩午夜激情视频| 欧美一级免费观看| 欧美一区二区三区电影| 97久久久精品综合88久久| 成人国产一区二区三区精品| 国产xxx精品视频大全| 欧美激情一区在线| 日本福利一区二区| 国内不卡的二区三区中文字幕 | 亚洲在线视频一区| 国产视频不卡一区| 国产日韩欧美制服另类| 国产精品免费av| 中文无字幕一区二区三区| 国产精品水嫩水嫩| 综合分类小说区另类春色亚洲小说欧美| 精品国产乱码久久久久久闺蜜| 久久综合久久99| 国产精品久久午夜夜伦鲁鲁| 亚洲女女做受ⅹxx高潮| 亚洲国产成人porn| 国产在线精品一区二区不卡了 | 91理论电影在线观看| 欧美猛男超大videosgay| 8x福利精品第一导航| 久久夜色精品国产欧美乱极品| 最新日韩av在线| 蜜臀av性久久久久蜜臀aⅴ流畅 | 日韩精品最新网址| 国产精品人妖ts系列视频| 亚洲aⅴ怡春院| 国产成人亚洲综合a∨猫咪| 国产成人免费视频网站高清观看视频 | 欧美日韩成人一区二区| 中文字幕在线一区免费| 岛国精品在线观看| 中文字幕中文字幕在线一区| 91老师片黄在线观看| 久久精品视频在线免费观看| 国产精品久久777777| 蜜桃视频一区二区三区 | 成人免费看片app下载| 日韩视频国产视频| 亚洲一区视频在线| 99精品久久免费看蜜臀剧情介绍| 久久综合色之久久综合| 免费欧美日韩国产三级电影| 欧美亚洲尤物久久| 一区二区三区中文在线观看| 在线视频国内一区二区| 亚洲精品亚洲人成人网| 在线免费观看不卡av| 亚洲五月六月丁香激情| 日本韩国精品一区二区在线观看| 亚洲精品亚洲人成人网在线播放| av一区二区三区| 亚洲香肠在线观看| 国产精品免费久久| 91丨九色丨尤物| 日本韩国一区二区三区视频| 精品国产乱码久久久久久免费 | 亚洲午夜日本在线观看| 国产精品资源网| 久久午夜国产精品| 日韩国产欧美一区二区三区| 在线成人免费视频| 另类调教123区| 中文字幕视频一区| 欧美午夜精品久久久久久孕妇| 一区二区三区精品在线| 日韩欧美123| 成人精品国产福利| 日韩精品免费专区| 久久九九国产精品| 欧美军同video69gay| 国产乱对白刺激视频不卡| 亚洲免费在线观看视频| 4438x亚洲最大成人网| 高清不卡一区二区| 午夜精品久久久久久久99樱桃| 精品国产一区二区三区不卡| 色综合久久综合网97色综合| 激情综合网最新| 亚洲精品一二三区| 国产欧美日韩精品a在线观看| 91国偷自产一区二区使用方法| 国产乱码字幕精品高清av| 亚洲国产视频一区| 亚洲视频在线一区观看| 欧美精品一区二区三区视频| 欧美亚洲精品一区| 国产jizzjizz一区二区| 麻豆精品精品国产自在97香蕉| 亚洲欧美成人一区二区三区| 国产精品女人毛片| 国产亚洲成av人在线观看导航| 日韩免费一区二区| 6080亚洲精品一区二区| 欧美日韩免费视频| 精品视频一区二区不卡| 欧美系列一区二区| 欧美伊人精品成人久久综合97 | 99久久国产综合色|国产精品| 国产成人av电影在线观看| 精品亚洲成a人在线观看| 国模无码大尺度一区二区三区| 蜜桃精品视频在线观看| 精品一区二区影视| 国产在线视频一区二区三区| 精品一区精品二区高清| 精一区二区三区| 国产成人在线色| 在线视频国内自拍亚洲视频| 欧美日韩免费一区二区三区视频| 337p亚洲精品色噜噜狠狠| 欧美一区二区三区免费大片| 久久中文娱乐网| 亚洲另类在线一区| 日韩精品一二三四| 国产资源在线一区| 91玉足脚交白嫩脚丫在线播放| 欧美日韩不卡一区二区| 精品黑人一区二区三区久久| 亚洲美女在线一区| 狠狠色综合色综合网络| 91国在线观看| 中文字幕不卡的av| 亚洲一区二区三区中文字幕在线| 美女视频第一区二区三区免费观看网站| 欧美亚州韩日在线看免费版国语版| 日韩一级高清毛片| 久久国产生活片100| 日韩一级完整毛片| 国产最新精品精品你懂的| 精品日韩一区二区三区免费视频| 麻豆视频观看网址久久| 久久久久久久久伊人| 成人免费视频app| 亚洲天堂精品视频| 欧美亚洲国产一区在线观看网站 | 蜜桃精品在线观看| 久久精品一区二区三区不卡牛牛| 懂色av一区二区三区免费观看| 中文字幕在线不卡一区 | 亚洲国产美女搞黄色| 日韩一二三区视频| 高清日韩电视剧大全免费| 一区二区三区在线观看视频| 91精品国产一区二区| www.激情成人| 蜜桃av一区二区| 中文字幕一区二区三区蜜月|