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

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

?? hpi.c

?? ls811的USB FAT文件系統
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*******************************Copyright (c)***************************************

                              桑海為實業發展有限公司
                         自  動  化  鋼  琴  研  究  所
                           http://www.pianoshw.com
                           E-mail:shw@pianoshw.com

----------------------------------文件信息-------------------------------------------

文  件  名 : HPI.C
創  建  人 : 吳應斌
創 建 日 期: 2004-6-7 9:30
功 能 描 述: SL811人機接口文件

************************************************************************************/
#include <COMMON.H>
#include <TPBULK.H>
#include <HPI.H>
#include <HAL.H>
#include <FAT.H>

extern XXGFLAGS bdata bXXGFlags;
extern unsigned char xdata DBUF[BUFFER_LENGTH];

unsigned char xdata UARTBUF[UARTBUF_LENGTH];
SYS_INFO_BLOCK xdata DeviceInfo;
UART_CMD_BLOCK xdata UartCmdBlock;
UART_RSP_BLOCK xdata UartRspBlock;
FILE_INFO xdata ThisFile;
extern FREE_FAT_INFO xdata FreeFat;

void UartSendRsp(void)
{
	unsigned int i;
	unsigned char *pBuf=(unsigned char *)&UartRspBlock;
	
	for(i=0;i<64;i++)
		ComSendByte(*(pBuf+i));
		
	if(UartRspBlock.len!=0)
	{
		for(i=0;i<UartRspBlock.len;i++)
			ComSendByte(*(UartRspBlock.pbuffer+i));
	}
}

/*-----------------------------------------------------------------------------------
名稱: void UartHandler(void)
功能: Uart命令管理.
-----------------------------------------------------------------------------------*/
void UartHandler(void)		
{
  	unsigned char retStatus;
  	unsigned int  len;
  	unsigned long pointer;

  	UartRspBlock.errcode=ERC_OK;
	UartRspBlock.len=0;

  	switch(UartCmdBlock.cmd)
  	{
    	case CMD_RESET:
    
    		break;
    		
    	case CMD_DETECT_DEVICE:
    			ThisFile.bFileOpen=0;	
    			retStatus=DetectDevice();
    			UartRspBlock.cmd=CMD_DETECT_DEVICE_RSP;
    		break;
    		
    	case CMD_OPEN_FILE:
    			retStatus=OpenFile(UartCmdBlock.CmdBlock.Cmd_OpenFile.filename);
    			UartRspBlock.cmd=CMD_OPEN_FILE_RSP;
    		break;
    		
    	case CMD_CREATE_FILE:
    			retStatus=OpenFile(UartCmdBlock.CmdBlock.Cmd_OpenFile.filename);
    			if(UartRspBlock.errcode==ERC_FILENOTFOUND)
    			{	
	    			retStatus=CreateFile(UartCmdBlock.CmdBlock.Cmd_CreateFile.item);
    			}
    			UartRspBlock.cmd=CMD_CREATE_FILE_RSP;
    		break;
    		
    	case CMD_READ_FILE:
    			len=SwapINT16(UartCmdBlock.CmdBlock.Cmd_ReadFile.readLength);
				retStatus=ReadFile(len,UARTBUF);
    			UartRspBlock.cmd=CMD_READ_FILE_RSP;
    		break;
    		
    	case CMD_WRITE_FILE:
    			len=SwapINT16(UartCmdBlock.CmdBlock.Cmd_WriteFile.writeLength);
    			retStatus=WriteFile(len,UARTBUF);
    			UartRspBlock.cmd=CMD_WRITE_FILE_RSP;
    		break;
    
    	case CMD_LIST:
    			ThisFile.bFileOpen=0;	
    			retStatus=List();
    			UartRspBlock.cmd=CMD_LIST_RSP;
    		break;
    		
    	case CMD_REMOVE_FILE:
    			ThisFile.bFileOpen=0;	
    			retStatus=RemoveFile(UartCmdBlock.CmdBlock.Cmd_RemoveFile.filename);
    			UartRspBlock.cmd=CMD_REMOVE_FILE_RSP;
    		break;
    		
    	case CMD_GET_CAPACITY:
    			ThisFile.bFileOpen=0;	
    			retStatus=GetCapacity();
    			UartRspBlock.cmd=CMD_GET_CAPACITY_RSP;
    		break;
    		
    	case CMD_GET_FREE_CAPACITY:
    			ThisFile.bFileOpen=0;	
    			retStatus=GetFreeCapacity();
    			UartRspBlock.cmd=CMD_GET_FREE_CAPACITY_RSP;
    		break;
    		
    	case CMD_SET_FILE_POINTER:
				pointer=SwapINT32(UartCmdBlock.CmdBlock.Cmd_SetFilePointer.pointer);
				retStatus=SetFilePointer(pointer);  
				UartRspBlock.cmd=CMD_SET_FILE_POINTER_RSP;  	
    		break;
    		
    	case CMD_GET_VERSION:
				ThisFile.bFileOpen=0;
				retStatus=GetFirmwareVersion();   
				UartRspBlock.cmd=CMD_GET_VERSION_RSP; 
    		break;
    		
   	 	default:
    		bXXGFlags.bits.bCOM_ERR=1;
    		break;
	}
	
  	UartRspBlock.result=retStatus;
  	UartRspBlock.pbuffer=UARTBUF;
  	UartSendRsp();
}

/*-----------------------------------------------------------------------------------
名稱: unsigned char DetectDevice(void)
功能: 磁盤有無檢測.
-----------------------------------------------------------------------------------*/
unsigned char DetectDevice(void)
{
#define RspBlockDetectDevice UartRspBlock.RspBlock.Rsp_DetectDevice

	return bXXGFlags.bits.SLAVE_IS_ATTACHED;
	
#undef RspBlockDetectDevice
}

/*-----------------------------------------------------------------------------------
名稱: unsigned char List(void)
功能: 列出目錄中所有文件.
-----------------------------------------------------------------------------------*/
unsigned char List(void)
{
#define RspBlockList UartRspBlock.RspBlock.Rsp_List

	unsigned int item,i;
	unsigned char j,k,bstop,sector;
	
	if(!bXXGFlags.bits.SLAVE_IS_ATTACHED)
	{
		UartRspBlock.errcode=ERC_NODEVICE;
		return FALSE;		
	}

	item=0;
	bstop=0;
	
	for(sector=0;sector<DeviceInfo.BPB_RootEntCnt;sector++)
	{   
		if(!RBC_Read(DeviceInfo.RootStartSector+sector,1,DBUF))
		{
			UartRspBlock.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++)
					UARTBUF[item*32+k]=DBUF[i+k];
				i=i+(j-1)*32;
				item=item+j;
			}
			else
			{
				for(k=0;k<32;k++)
					UARTBUF[item*32+k]=DBUF[i+k];
				item=item+1;
			}
		}

		if(bstop==1)	break;
	}
		
	RspBlockList.len=SwapINT16(item*32);
	UartRspBlock.len=item*32;
	return TRUE;
	
#undef RspBlockList
}

/*-----------------------------------------------------------------------------------
名稱: unsigned char OpenFile(unsigned char *pBuffer)
功能: 打開文件.
-----------------------------------------------------------------------------------*/
unsigned char OpenFile(unsigned char *pBuffer)
{
#define RspBlockOpenFile UartRspBlock.RspBlock.Rsp_OpenFile

	unsigned int i;
	unsigned char j,bstop,sector;
	PDIR_INFO pDirInfo;
	
	if(!bXXGFlags.bits.SLAVE_IS_ATTACHED)
	{
		UartRspBlock.errcode=ERC_NODEVICE;
		return FALSE;		
	}
	
	ThisFile.bFileOpen=0;
	for(sector=0;sector<DeviceInfo.BPB_RootEntCnt;sector++)
	{   
		if(!RBC_Read(DeviceInfo.RootStartSector+sector,1,DBUF))
		{
			UartRspBlock.errcode=ERC_DEVICEERR;
			return FALSE;	
		}

		for(i=0;i<DeviceInfo.BPB_BytesPerSec;i=i+32)
		{
			if(DBUF[i]==0x00)
			{
				UartRspBlock.errcode=ERC_FILENOTFOUND;
					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];
			    	
			    ThisFile.bFileOpen=1;
			    bstop=1;
			    break;
			 }
		}
		if(bstop==1)	break;
    }
	    
	if(sector>=DeviceInfo.BPB_RootEntCnt)
	{
		UartRspBlock.errcode=ERC_FILENOTFOUND;
		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;
	ThisFile.FatSectorPointer=0;
	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)
功能: 讀取文件.
-----------------------------------------------------------------------------------*/
unsigned char ReadFile(unsigned int readLength,unsigned char *pBuffer)
{
#define RspBlockReadFile UartRspBlock.RspBlock.Rsp_ReadFile
	unsigned int idata len,i;
	unsigned char bSuccess;
	
	if(!bXXGFlags.bits.SLAVE_IS_ATTACHED)
	{
		UartRspBlock.errcode=ERC_NODEVICE;
		return FALSE;		
	}
	if(!ThisFile.bFileOpen)
	{
		UartRspBlock.errcode=ERC_FILENOTOPENED;
		return FALSE;		
	}

	ThisFile.bFileOpen=0;
	bSuccess=1;
	UartRspBlock.len=0;
	
	if(readLength>MAX_READ_LENGTH)
	{
		UartRspBlock.errcode=ERC_LENGTHEXCEED;
		return FALSE;	
	}
	if(readLength+ThisFile.pointer>ThisFile.LengthInByte)
	{
		UartRspBlock.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))
		   	{
		   		len=len-ThisFile.OffsetofSector;
		   		for(i=0;i<len;i++)
		   			*(pBuffer+i)=DBUF[ThisFile.OffsetofSector+i];
		   			
		   		ThisFile.OffsetofSector=ThisFile.OffsetofSector+len;
		   	}
		   	else
		   	{
		   		UartRspBlock.errcode=ERC_DEVICEERR;
				return FALSE;	
		   	}
		}
		else
		{
			if(!RBC_Read(ThisFile.SectorPointer,1,pBuffer+UartRspBlock.len))
		   	{
		   		UartRspBlock.errcode=ERC_DEVICEERR;
				return FALSE;	
		   	}
		   	ThisFile.OffsetofSector=len;
		}
		  
		readLength-=len;
		UartRspBlock.len+=len;
		
		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)
		 		{
		   			UartRspBlock.errcode=ERC_REACHEND;
					return FALSE;	
		 		}
		 		ThisFile.SectorPointer=FirstSectorofCluster(ThisFile.ClusterPointer); 	
		   	}
		   	else
		   		ThisFile.SectorPointer=ThisFile.SectorPointer+1;
		}
	}//end while
	
	ThisFile.bFileOpen=1;
	ThisFile.pointer+=UartRspBlock.len;

	RspBlockReadFile.readLength=SwapINT16(UartRspBlock.len);
	return TRUE;
#undef RspBlockReadFile
}

/*-----------------------------------------------------------------------------------
名稱: unsigned char CreateFile(unsigned char *pBuffer)
功能: 創建文件.
-----------------------------------------------------------------------------------*/
unsigned char CreateFile(unsigned char *pBuffer)
{
#define RspBlockCreateFile UartRspBlock.RspBlock.Rsp_CreateFile
	unsigned int sector,i,j;
	unsigned char bstop;
	PDIR_INFO pDirInfo;
	
	if(!bXXGFlags.bits.SLAVE_IS_ATTACHED)
	{
		UartRspBlock.errcode=ERC_NODEVICE;
		return FALSE;		
	}
	pDirInfo=(PDIR_INFO)pBuffer;
	
	pDirInfo->startCluster=SwapINT16(GetFreeCusterNum());

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕一区免费在线观看| 这里只有精品电影| 国产麻豆午夜三级精品| 日本伊人色综合网| 午夜视黄欧洲亚洲| 三级欧美韩日大片在线看| 亚洲va国产天堂va久久en| 亚洲成人自拍偷拍| 婷婷夜色潮精品综合在线| 五月天亚洲婷婷| 日韩一区精品视频| 国产麻豆91精品| 成人avav影音| 欧美性色综合网| 欧美一区二区免费视频| 久久精品在线免费观看| 国产精品久久久久久户外露出| 国产精品每日更新| 亚洲午夜久久久久久久久久久| 日韩专区中文字幕一区二区| 久久国产成人午夜av影院| 国产一区免费电影| 99久久er热在这里只有精品66| 在线观看日产精品| 日韩免费一区二区三区在线播放| 久久久久国产精品麻豆ai换脸| 国产精品久久久久精k8| 亚洲香蕉伊在人在线观| 美女性感视频久久| 99在线热播精品免费| 欧美中文字幕一二三区视频| 欧美一区二区三区免费观看视频| 337p日本欧洲亚洲大胆色噜噜| 国产精品免费av| 日本视频一区二区| 成人做爰69片免费看网站| 欧美美女黄视频| 中文一区一区三区高中清不卡| 一区二区三区自拍| 国产剧情一区二区三区| 欧美在线色视频| 久久精品视频免费观看| 午夜不卡av免费| 不卡一区在线观看| 精品电影一区二区三区 | 麻豆精品视频在线| 成人免费看视频| 欧美一区二区三区啪啪| 亚洲精品国产一区二区三区四区在线| 免费看欧美女人艹b| 色天天综合久久久久综合片| 国产日韩欧美综合在线| 日韩成人一级片| 欧美在线观看禁18| 欧美激情在线免费观看| 国模无码大尺度一区二区三区| 色婷婷av一区二区三区之一色屋| 国产欧美综合色| 国产九色精品成人porny| 欧美一区二区三区在| 亚洲综合一二三区| 色综合一个色综合亚洲| 欧美国产乱子伦 | 欧美国产禁国产网站cc| 美女免费视频一区二区| 欧美精品久久久久久久多人混战| 亚洲欧洲中文日韩久久av乱码| 国产精品一区二区黑丝| 337p日本欧洲亚洲大胆色噜噜| 蜜臀av一区二区在线观看| 色网站国产精品| 最新国产成人在线观看| av亚洲精华国产精华精华 | 色天使色偷偷av一区二区| 国产精品卡一卡二| 99久久婷婷国产| 亚洲婷婷综合色高清在线| 99久久免费视频.com| 国产精品久久久久影院亚瑟| 懂色一区二区三区免费观看| 久久精品日产第一区二区三区高清版 | 欧美aaaaa成人免费观看视频| 欧美卡1卡2卡| 久久99国产精品久久99果冻传媒 | 日韩国产在线一| 欧美日韩国产高清一区二区三区 | 亚洲视频一区在线| 91美女在线观看| 亚洲一卡二卡三卡四卡五卡| 欧美午夜电影在线播放| 日韩vs国产vs欧美| 精品久久国产字幕高潮| 成人综合在线网站| 亚洲在线视频网站| 欧美一区二区精品久久911| 国内精品免费**视频| 中文字幕的久久| 欧美人与z0zoxxxx视频| 国产曰批免费观看久久久| 欧美极品美女视频| 欧美视频中文一区二区三区在线观看| 天天综合色天天| 亚洲国产精品成人综合 | 成人av在线资源网| 亚洲福中文字幕伊人影院| 欧美日韩国产乱码电影| 国产黄色精品视频| 亚洲国产一区二区视频| 欧美变态tickling挠脚心| caoporn国产一区二区| 亚洲午夜免费视频| 久久久av毛片精品| 日本高清不卡在线观看| 美女国产一区二区三区| 中文字幕免费不卡| 51久久夜色精品国产麻豆| 国产a精品视频| 日本aⅴ精品一区二区三区 | 亚洲永久免费av| 精品99999| 欧美三日本三级三级在线播放| 国精品**一区二区三区在线蜜桃| 亚洲一区二区三区视频在线 | 日韩一本二本av| 99久久精品国产毛片| 激情综合网av| 图片区小说区区亚洲影院| 日本一区二区三区高清不卡| 欧美日韩国产高清一区二区三区| 成人午夜视频免费看| 九九九久久久精品| 亚洲va欧美va天堂v国产综合| 国产精品美日韩| 欧美精品一区二区三区在线| 欧美日韩精品综合在线| www.日本不卡| 国产成人精品亚洲777人妖| 青青草精品视频| 日韩va欧美va亚洲va久久| 亚洲国产人成综合网站| 亚洲少妇屁股交4| 成人欧美一区二区三区小说| 亚洲国产精品高清| 中文字幕久久午夜不卡| 久久久久九九视频| 久久久国产精品麻豆| 精品盗摄一区二区三区| 精品国产免费人成在线观看| 91精品国产综合久久香蕉麻豆| 欧洲亚洲精品在线| 欧美色窝79yyyycom| 欧美丝袜第三区| 5858s免费视频成人| 日韩一区二区在线看片| 日韩一区二区麻豆国产| 日韩一区二区三区视频在线 | 亚洲人成精品久久久久久| 久久精品人人爽人人爽| 中文字幕av一区二区三区高| 欧美国产成人精品| 亚洲色图欧美在线| 洋洋av久久久久久久一区| 一区二区成人在线| 婷婷中文字幕一区三区| 另类人妖一区二区av| 国产激情视频一区二区在线观看| 成人综合在线视频| 在线亚洲一区二区| 欧美精品日韩一区| 久久久夜色精品亚洲| 国产精品久久久久久妇女6080| 亚洲另类在线一区| 日本亚洲一区二区| 成人免费看黄yyy456| 欧美在线小视频| 久久综合久久综合九色| 国产精品久久久久久久第一福利| 亚洲麻豆国产自偷在线| 日日摸夜夜添夜夜添精品视频 | 不卡的电影网站| 欧美影视一区在线| 欧美白人最猛性xxxxx69交| 国产亚洲人成网站| 亚洲狠狠爱一区二区三区| 激情综合色播激情啊| 色婷婷香蕉在线一区二区| 欧美电影免费观看高清完整版在| 国产午夜亚洲精品午夜鲁丝片| 一级女性全黄久久生活片免费| 免费观看成人鲁鲁鲁鲁鲁视频| 不卡av免费在线观看| 欧美一二区视频| 亚洲女人****多毛耸耸8| 蜜桃av一区二区在线观看| 91在线国产观看| 日韩免费看网站| 亚洲综合一区二区三区| 丁香五精品蜜臀久久久久99网站| 欧美日韩国产一二三| 自拍偷拍亚洲综合|