⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bulkonly._c

📁 基于D12
💻 _C
字号:
#include <iom162v.h>
#include <macros.h>

#include "BulkOnly.H"
#include "D12CI.H"
#include "MAIN.H" 


extern CONTROL_XFER ControlData;
extern EPPFLAGS bEPPflags;
BULK_STRUCT  Bulk_Block;

extern BULK_CONTROL  Bulk_Control_r;
extern BULK_CONTROL  Bulk_Control_w;
extern unsigned char PageBuf[512];

#define Bulk_CBW  Bulk_Block.cbw
#define Bulk_CSW  Bulk_Block.csw
#define CBW_bCBWCBLength Bulk_Block.cbw.dCBWDataTransferLength
#define CSW_dCSWDataResidue Bulk_Block.csw.dCSWDataResidue

void Bulk_CBWHandler( void )
{   
    if(sizeof(CBW)==D12_ReadEndpoint(4,EP2_PACKET_SIZE,(unsigned char*)&Bulk_CBW))
    {
	    if(IsCBWValid())
	    {		      
		    RBC_Hander();
			return;
	    }
	}
	Bulk_ErrorHandler(CSW_PHASE_ERROR,0);
	Bulk_CSWHandler();		
}
void Bulk_CSWHandler( void )
{
   D12_WriteEndpoint(5,sizeof(CSW),(unsigned char *)&Bulk_CSW);  
   bEPPflags.bits.bulk_state=BULK_IDLE;  
}
void Bulk_code_transmit(const unsigned char * pRomData,unsigned short len)
{
  ControlData.wCount=0; 
  ControlData.pCData=pRomData;
  ControlData.wLength=len;
  if(ControlData.wLength>=CBW_bCBWCBLength)
        ControlData.wLength=CBW_bCBWCBLength; 
  Bulk_ErrorHandler(CSW_GOOD,ControlData.wLength);		  
  if(ControlData.wLength>=EP2_PACKET_SIZE)
  {
     D12_CWriteEndpoint(5,EP2_PACKET_SIZE,ControlData.pCData);
     ControlData.wCount+=EP2_PACKET_SIZE;
     bEPPflags.bits.bulk_state=BULK_REQEST_TRANS;    
  }
  else
  {     
     D12_CWriteEndpoint(5,ControlData.wLength,pRomData);
     ControlData.wCount+=ControlData.wLength;
     bEPPflags.bits.bulk_state=BULK_DATA_END;
  }
}
BOOLEAN IsCBWValid(void)
{
  if((Bulk_CBW.dCBWSignature==CBW_SIGNATURE)&&
                       (Bulk_CBW.bCBWLUN<=1)&&
   	     (Bulk_CBW.bCBWCBLength<=MAX_CDBLEN))
		return TRUE;
	else
		return FALSE;
}
void Bulk_ErrorHandler(unsigned char CSWStatus,unsigned int wByteCount)
{
  Bulk_CSW.dCSWDataResidue=Bulk_CBW.dCBWDataTransferLength-wByteCount;
  Bulk_CSW.dCSWSignature=CSW_SIGNATURE;
  Bulk_CSW.bCSWStatus=CSWStatus;	
}
void Bulk_Reserve_Data()
{ 
      unsigned char i,len;
	  DISABLE;
 	/*  len=D12_ReadEndpoint(4,64,PageBuf+Bulk_Control_w.BufCount);
	  Bulk_Control_w.BufCount+=len;
	  CSW_dCSWDataResidue-=len;		 
	  if((bEPPflags.bits.mainbuf_full==1)&&(Bulk_Control_w.BufCount==448))
	  {
	     len=D12_ReadEndpoint(4,64,PageBuf+Bulk_Control_w.BufCount);
	     Bulk_Control_w.BufCount+=len;
	     CSW_dCSWDataResidue-=len;
	  }*/ 
	//  if(Bulk_Control_w.BufCount==512)	
	  {
	          if(Bulk_Control_w.CurrentBlock<16)
			     WritePage(CANCEL_BLOCK,Bulk_Control_w.CurrentPage,PageBuf);
			  else
			     WritePage(Bulk_Control_w.CurrentBlock,Bulk_Control_w.CurrentPage,PageBuf); 	 
			  Bulk_Control_w.CurrentPage++;
			  Bulk_Control_w.Transfer_Length--;
			  Bulk_Control_w.BufCount=0;			 
	  }	 
	  if((Bulk_Control_w.Transfer_Length>0)&&(Bulk_Control_w.CurrentPage==32))
	  {
		 if(Bulk_Control_w.CurrentBlock<16)
		 {
		    for(i=0;i<Bulk_Control_w.BeginPage;i++)
		    {
			  ReadPage(Bulk_Control_w.CurrentBlock,i,PageBuf);
			  WritePage(CANCEL_BLOCK,i,PageBuf);
		    }  
			Erase_Cluster(Bulk_Control_w.CurrentBlock);
			for(i=0;i<32;i++)
			{
			  ReadPage(CANCEL_BLOCK,i,PageBuf);
			  WritePage(Bulk_Control_w.CurrentBlock,i,PageBuf);
			}			
		 }
		 Bulk_Control_w.CurrentBlock++;
 		 Bulk_Control_w.CurrentPage=0;
		 Bulk_Control_w.BeginPage=0;
	     Bulk_Control_w.BufCount=0;
		 if(Bulk_Control_w.CurrentBlock<16)Erase_Cluster(CANCEL_BLOCK);
		 else Erase_Cluster(Bulk_Control_w.CurrentBlock);
		} 
		if(Bulk_Control_w.Transfer_Length==0)
		{
		    if(Bulk_Control_w.CurrentBlock<16)
			{
			   for(i=0;i<Bulk_Control_w.BeginPage;i++)
			   {
			      ReadPage(Bulk_Control_w.CurrentBlock,i,PageBuf);
			      WritePage(CANCEL_BLOCK,i,PageBuf);
			   }
			   for(i=Bulk_Control_w.CurrentPage;i<32;i++)
			   {
			      ReadPage(Bulk_Control_w.CurrentBlock,i,PageBuf);
			      WritePage(CANCEL_BLOCK,i,PageBuf);
			   }
			   Erase_Cluster(Bulk_Control_w.CurrentBlock);
			   for(i=0;i<32;i++)
			   {
			      ReadPage(CANCEL_BLOCK,i,PageBuf);
   			      WritePage(Bulk_Control_w.CurrentBlock,i,PageBuf);
			   }
			}
			Bulk_Control_w.BufCount=0;
			Bulk_CSWHandler();
		}
		ENABLE;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -