📄 bulkonly.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;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -