📄 endpointfun.c
字号:
#include <iom16v.h>
#include <macros.h>
#include "define.h"
#include "initial.h"
#include "pdiusbd12.h"
#include "endpointfun.h"
#include "descriptor.h"
#include "chap9.h"
void Control_In()
{
uchar i;
uint temp;
temp = ControlData.wLength - ControlData.wCount;
i=D12_ReadLastStatus(1);
if(bEPPflags.bits.control_state != USB_TRANSMIT)
{
single_transmit(0, 0);
return ;
}
if( temp >= 16) {
const_WriteEndpoint(1, 16, ControlData.pData + ControlData.wCount);
ControlData.wCount += 16;
bEPPflags.bits.control_state = USB_TRANSMIT;
}
else if( temp != 0) {
const_WriteEndpoint(1,temp, ControlData.pData + ControlData.wCount);
ControlData.wCount += temp;
bEPPflags.bits.control_state = USB_IDLE;
}
else if (temp== 0){
const_WriteEndpoint(1, 0, 0);
bEPPflags.bits.control_state = USB_IDLE;
}
}
void Control_Out()
{
uchar req[8];
uchar last,i;
last=D12_ReadLastStatus(0);
if(last & 0x20)
{
ControlData.wLength=0;
ControlData.wCount =0;
if(D12_ReadEndpoint(0,8,req) != 8)
{
D12_SetEndpointStatus(0,1);
D12_SetEndpointStatus(1,1);
bEPPflags.bits.control_state = USB_IDLE;
return;
}
ControlData.DeviceRequest.bmRequestType = req[0];
ControlData.DeviceRequest.bRequest = req[1];
ControlData.DeviceRequest.wValue = req[3] * 256 + req[2];
ControlData.DeviceRequest.wIndex = req[5] * 256 + req[4];
ControlData.DeviceRequest.wLength = req[7] * 256 + req[6];
D12_Ackonwledge(0);
D12_Ackonwledge(1);
ControlData.wLength = ControlData.DeviceRequest.wLength;
if(ControlData.DeviceRequest.bmRequestType & (uchar)0x80)
{
bEPPflags.bits.setup_packet = 1;
bEPPflags.bits.control_state = USB_TRANSMIT;
}
else
{
if(ControlData.DeviceRequest.wLength == 0)
{
bEPPflags.bits.setup_packet = 1;
bEPPflags.bits.control_state = USB_IDLE;
}
else
{ if (ControlData.DeviceRequest.wLength > 8)
{
bEPPflags.bits.control_state = USB_IDLE;
D12_SetEndpointStatus(0,1); /
D12_SetEndpointStatus(1,1);
}
else
bEPPflags.bits.control_state = USB_RECEIVE;
}
}
}
else if(bEPPflags.bits.control_state == USB_RECEIVE)
{
i = D12_ReadEndpoint(0, 16,ControlData.dataBuffer + ControlData.wCount);
ControlData.wCount += i;
if( i != 16 || ControlData.wCount >= ControlData.wLength)
{
bEPPflags.bits.setup_packet = 1;
bEPPflags.bits.control_state = USB_IDLE;
}
}else
bEPPflags.bits.control_state = USB_IDLE;
}
void Endpoint_1_In()
{
uchar temp;
temp= D12_ReadLastStatus(3);
}
void Endpoint_1_Out()
{
uchar temp,full;
temp = D12_ReadLastStatus(2);
full=D12_ReadEndpoint(2,16,GenEpBuf);
if(full !=0)
bEPPflags.bits.ep1_rxdone=1;
}
void MainInEndpoint()
{
uchar temp;
temp=D12_ReadLastStatus(5);
}
void MainOutEndpoint()
{
uchar temp;
temp=D12_ReadLastStatus(4);
temp=D12_ReadEndpoint(4,64,EpBuf);
if(temp !=0)
bEPPflags.bits.ep2_rxdone=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -