📄 et21x130c_usb_lib.c
字号:
MOV A,#_EP2CSR
_endasm;
}
else
break;
}
case 3: //. check_fc_ep03
break;
case 80: //. check_fc_ep80
{
_asm
MOV A,#_EP0RXCSR
_endasm;
}
case 81: //. check_fc_ep81
{
if(_USB_EP1 && (_USB_EP1_DIR == _IN_DIR))
{
_asm
MOV A,#_EP1CSR
_endasm;
}
else
break;
}
case 82: //. check_fc_ep82
{
if(_USB_EP2 && (_USB_EP2_DIR == _IN_DIR))
{
_asm
MOV A,#_EP2CSR
_endasm;
}
else
break;
}
case 83: //. check_fc_ep83
{
break;
}
default:
//. check_fc_end
_asm
MOV _IAP0,A
_endasm;
EP0TXCTR = 1;
USB_Lib_Delay();
nwLength = 0;
if(M_ISBS1(IAC0))
EP0TXDAR = 1;
else
EP0TXDAR = 0;
return;
}
}
//. call macro _ADD_USB_RT0X82_Request
AddUsbRt0x82Request();
//goto UNKNOWN_bRequest;
}
else if(_RequestType_0X20 && (TEMP_UREG == 0x20))
{//. RequestType20
TEMP_UREG = IAC0;
if(_RT0X20_Request_0X01 && (TEMP_UREG == request_clear_feature) && _USB_HUB)
{//. ClearHubFeature
if(HwValueL == c_hub_local_power)
{//. ClearLocalPowerChange
M_BC2(HSR);
}
else if(HwValueL == c_hub_over_current)
{//. ClearOverCurrentChange
M_BC3(HSR);
}
M_BC0(STATUS_BUF);
USB_Lib_Delay();
return;
}
else if(_RT0X20_Request_0X03 && (TEMP_UREG == request_set_feature) &&_USB_HUB )
{//. SetHubFeature
return;
}
else if(_RT0X20_Request_0X06 && (TEMP_UREG == request_set_descriptor))
{//. SetHubDescriptor
}
//. call macro _ADD_USB_RT0X20_Request
AddUsbRt0x20Request();
}
else if(_RequestType_0X21 && (TEMP_UREG == 0x21))
{//. RequestType21
TEMP_UREG = IAC0;
if(_RT0X21_Request_0X09 && (TEMP_UREG == request_set_report))
{//. SetReport
M_BS2(FC_STATUS);
return;
}
if(_RT0X21_Request_0X0A && (TEMP_UREG == request_set_idle))
{//. SetIdleReport
IDLE_TIMER = wValueH;
EP0TXCTR = 0;
USB_Lib_Delay();
return;
}
if(_RT0X21_Request_0X0B && (TEMP_UREG == request_set_protocol))
{//. SetProtocolReport
PROTOCOL = wValueL;
EP0TXCTR = 0;
USB_Lib_Delay();
return;
}
//. call macro _ADD_USB_RT0X21_Request
AddUsbRt0x21Request();
}
else if(_RequestType_0X23 && (TEMP_UREG == 0x23))
{//. RequestType23
TEMP_UREG = IAC0;
if(_RT0X23_Request_0X01 &&(TEMP_UREG==request_clear_feature))
{//. ClearPortFeature
if(_USB_HUB)
{
unsigned char usb_byTemp=HwIndexL;
usb_byTemp--;
// check port number = 1~4 ?
if((252 & usb_byTemp))
{
M_BS0(USB_STATUS);
return;
}
else if(HwValueL == port_enable)
{//. ClearPort_ENABLE
HPCONR = HwIndexL + 152;// 0b10011000
USB_Lib_Delay();
return;
}
else if(HwValueL == port_suspend)
{//. ClearPortSuspend
HPCONR = HwIndexL + 160;// 0b10100000
USB_Lib_Delay();
return;
}
else if(HwValueL == port_power)
{//. ClearPortPower
HPCONR = HwIndexL + 168;// 0b10101000
USB_Lib_Delay();
return;
}
if(HwIndexL ==1 )
M_BC1(STATUS_BUF);
else if(HwIndexL ==2 )
M_BC2(STATUS_BUF);
else if(HwIndexL ==3 )
M_BC3(STATUS_BUF);
else if(HwIndexL ==4 )
M_BC4(STATUS_BUF);
if(!(30 & STATUS_BUF))
M_BS3(HUB_STATUS);
//. ClearPortFeature_change
if(HwValueL == c_port_connection)
{//. ClearPortConnectionChange
//. CALL SEARCH_CHANGE_PORT
SearchChangePort();
M_BC0(IAC0);
USB_Lib_Delay();
return;
}
else if(HwValueL == c_port_enable)
{//. ClearPort_ENABLEChange
//. CALL SEARCH_CHANGE_PORT
SearchChangePort();
M_BC1(IAC0);
USB_Lib_Delay();
return;
}
else if(HwValueL == c_port_suspend)
{//. ClearPortSuspendChange
//. CALL SEARCH_CHANGE_PORT
SearchChangePort();
M_BC2(IAC0);
USB_Lib_Delay();
return;
}
else if(HwValueL == c_port_over_current)
{//. ClearPortOverCurrentChange
//. CALL SEARCH_CHANGE_PORT
SearchChangePort();
M_BC3(IAC0);
USB_Lib_Delay();
return;
}
else if(HwValueL == c_port_reset)
{//. ClearPortResetChange
//. CALL SEARCH_CHANGE_PORT
SearchChangePort();
M_BC4(IAC0);
USB_Lib_Delay();
return;
}
}
}
else if(_RT0X23_Request_0X03 &&(TEMP_UREG==request_set_feature))
{//. SetPortFeature
if(_USB_HUB)
{
unsigned char usb_byTemp=HwIndexL;
usb_byTemp--;
// check port number = 1~4 ?
if((252 & usb_byTemp))
{
M_BS0(USB_STATUS);
return;
}
if(HwValueL == port_reset)
{//. SetPortReset
HPCONR = HwIndexL + 136;//0b10001000
USB_Lib_Delay();
//.//Embedded port?
if(usb_byTemp==1)
{
M_BS4(GCNTR);
USB_Lib_Delay();
FAR = 0;
USB_Lib_Delay();
ADDRESS_BUFf = 0;
}
return;
}
if(HwValueL == port_power)
{//. SetPortPower
HPCONR = HwIndexL + 144;//0b10010000
USB_Lib_Delay();
return;
}
if(HwValueL == port_suspend)
{//. SetPortSuspend
if(usb_byTemp==1)
{
USB_Lib_Delay();
}
HPCONR = HwIndexL + 128;//0b10010000
USB_Lib_Delay();
return;
}
return;
}
}
//. call macro _ADD_USB_RT0X23_Request
AddUsbRt0x23Request();
}
else if(_RequestType_0XA0 && (TEMP_UREG == 0xA0))
{//. RequestTypeA0
TEMP_UREG = IAC0;
if(_RT0XA0_Request_0X00 &&(TEMP_UREG==request_get_status) && _USB_HUB)
{//. GetHubStatus
HEP0TXCTR = 4;
nHwLength = 0;
HEP0TXDAR = HSR + 3;
USB_Lib_Delay();
_asm
MOV A,#0x00
MOV _HEP0TXDAR,A
_endasm;
USB_Lib_Delay();
_asm
MOV A,_HSR
SHRA _HSR,2
AND A,#0b00000011
MOV _HEP0TXDAR,A
_endasm;
USB_Lib_Delay();
_asm
MOV A,#0x00
MOV _HEP0TXDAR,A
_endasm;
USB_Lib_Delay();
return;
}
else if(_RT0XA0_Request_0X06 &&(TEMP_UREG==request_get_descriptor) && _USB_HUB)
{//. GetHubDescriptor
// psz = &Hub_class_desc_table;
HTBLL = *psz;
HubTransmitTable();
return;
}
//. call macro _ADD_USB_RT0XA0_Request
AddUsbRt0xA0Request();
}
else if(_RequestType_0XA1 && (TEMP_UREG == 0xA1))
{//. RequestTypeA1
TEMP_UREG = IAC0;
if(_RT0XA1_Request_0X01 &&(TEMP_UREG==request_get_report))
{//. GetReport
M_BS5(FC_STATUS);
//. call macro _ADD_USB_GET_REPORT_SUB
AddUsbGetReportSub();
return;
}
else if(_RT0XA1_Request_0X02 &&(TEMP_UREG==request_get_idle))
{//. GetIdleReport
EP0TXCTR = 1;
USB_Lib_Delay();
EP0TXDAR = IDLE_TIMER;
USB_Lib_Delay();
return;
}
else if(_RT0XA1_Request_0X03 &&(TEMP_UREG==request_get_protocol))
{//. GetProtocolReport
EP0TXCTR = 1;
USB_Lib_Delay();
EP0TXDAR = PROTOCOL;
USB_Lib_Delay();
return;
}
//. call macro _ADD_USB_RT0XA1_Request
AddUsbRt0xA1Request();
}
else if(_RequestType_0XA3 && (TEMP_UREG == 0xA3))
{//. RequestTypeA3
TEMP_UREG = IAC0;
if(_RT0XA3_Request_0X00 &&(TEMP_UREG==request_get_status) && _USB_HUB)
{//. GetPortStatus
unsigned char usb_byTemp=HwIndexL;
usb_byTemp--;
if((252 & usb_byTemp))
{
M_BS0(USB_STATUS);
return;
}
HEP0TXCTR = 4;
USB_Lib_Delay();
nHwLength = 0;
_asm
MOV A,#_HSR
ADD A,_HwIndexL
MOV _IAP0,A
NOP
MOV A,_IAC0
DEC _IAP0
AND A,#0b00011111
MOV _HEP0TXDAR,A
_endasm;
USB_Lib_Delay();
_asm
RLCA _IAC0,4
AND A,#0b00000011
MOV _HEP0TXDAR,A
_endasm;
USB_Lib_Delay();
_asm
MOV A,#_HPSR4-_HSR-1
ADD _IAP0,A
NOP
MOV A,_IAC0
AND A,#0b00011111
MOV _HEP0TXDAR,A
_endasm;
USB_Lib_Delay();
_asm
MOV A,#0b00000000
MOV _HEP0TXDAR,A
_endasm;
USB_Lib_Delay();
return;
}
else if(_RT0XA3_Request_0X02 &&(TEMP_UREG==request_get_state) && _USB_HUB)
{//. GetBusState
unsigned char usb_byTemp;
HEP0TXCTR = 1;
USB_Lib_Delay();
nHwLength = 0;
usb_byTemp=HwIndexL;
usb_byTemp--;
if((252 & usb_byTemp))
{
M_BS0(USB_STATUS);
return;
}
if(HwIndexL == 1)
{//. Port1State
_asm
MOV A,_HPSTAR1
_endasm;
}
else if(HwIndexL == 2)
{//. Port2State
_asm
SHRA _HPSTAR1,2
_endasm;
}
else if(HwIndexL == 3)
{//. Port3State
_asm
SHRA _HPSTAR1,4
_endasm;
}
else if(HwIndexL == 4)
{//. Port3State
_asm
RLCA _HPSTAR1,3
_endasm;
}
//. put_data
_asm
AND A,#0b00000011
_endasm;
if(M_ISBC2(STATUS))
{
_asm
XOR A,#0b00000011
_endasm;
}
_asm
MOV _HEP0TXDAR,A
_endasm;
USB_Lib_Delay();
return;
}
//. call macro _ADD_USB_RT0XA3_Request
AddUsbRt0xA3Request();
return;
}
else
{
//. call macro _ADD_USB_bmRequestType
AddUsbBmRequestType();
return;
}
/*
UNKNOWN_bRequest:
UNKNOWN_wValueL:
UNKNOWN_wIndex:
UNKNOWN_wLength:
UNDEFINE_COMMAND:
*/
M_BS0(USB_STATUS);
return;
}
void USB_Lib_Delay() using USBBANK
{
#ifndef ET_MCU_HI_SPEED
_asm NOP _endasm;
#else
_asm NOP \r\n NOP \r\n NOP \r\n NOP _endasm;
#endif
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -