?? et_easy_usb_bulk_usb_lib.c
字號(hào):
MOV _HTBL,A
MOV A,#Low(_Descriptor_type_22_index01_table<<1)
MOV _LTBL,A
_endasm;
TBLL = ET_USB_HID_wDescriptorLength0;
fTransmitTable();
return;
}
#endif
}
else if(_RT0X81_R0X06_Value2300 && (wValueH == descriptor_types_Physical))
{//. Descriptor_type_23
//. call macro _ADD_USB_HID_PHYSCIAL_SUB
}
}
else if(_RT0X81_Request_0X0A && (TEMP_UREG == request_get_interface))
{//. GetInterface
if(_USB_HUB && M_ISBC1(USB_STATUS))
{
HEP0TXCTR = 1;
M_NOP;
nHwLength = 0;
_asm
MOV A,#0x00
MOV _HEP0TXDAR,A
_endasm;
M_NOP;
return;
}
//. GetFcInterfaceStatus
EP0TXCTR = 1;
M_NOP;
nwLength = 0;
_asm
MOV A,#0x00
MOV _EP0TXDAR,A
_endasm;
M_NOP;
return;
}
}// end of RequestType81
else if(_RequestType_0X82 && (TEMP_UREG == 0x82))
{//. RequestType82
if(_RT0X82_Request_0X00 && (IAC0 == request_get_status))
{//. GetEndpointStatus
if(_USB_HUB && M_ISBS1(USB_STATUS))
{
_asm
MOV A,#_HEP0RXCSR
MOV _IAP0,A
_endasm;
if(HwIndexL!=0)
IAP0++;
else if(HwIndexL!=hub_endpoint80)
IAP0++;
HEP0TXCTR = 2;
nHwLength = 0;
if(M_ISBS1(IAC0))
HEP0TXDAR = 1;
else
{
_asm
MOV A,#0x00
MOV _HEP0TXDAR,A
_endasm;
// HEP0TXDAR = 0;
}
M_NOP;
return;
}
//. GetFcEndpointStatus
usb_byTemp = wIndexL;
switch(usb_byTemp)
{
case 0: //. check_fc_ep00
{
_asm
MOV A,#_EP0TXCSR
_endasm;
}
case 1: //. check_fc_ep01
{
if(_USB_EP1 && (_USB_EP1_DIR == _OUT_DIR))
{
_asm
MOV A,#_EP1CSR
_endasm;
}
else
break;
}
case 2: //. check_fc_ep02
{
if(_USB_EP2 && (_USB_EP2_DIR == _OUT_DIR))
{
_asm
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;
M_NOP;
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);
M_NOP;
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;
M_NOP;
return;
}
if(_RT0X21_Request_0X0B && (TEMP_UREG == request_set_protocol))
{//. SetProtocolReport
PROTOCOL = wValueL;
EP0TXCTR = 0;
M_NOP;
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 temp=HwIndexL;
temp--;
// check port number = 1~4 ?
if((252 & temp))
{
M_BS0(USB_STATUS);
return;
}
else if(HwValueL == port_enable)
{//. ClearPort_ENABLE
HPCONR = HwIndexL + 152;// 0b10011000
M_NOP;
return;
}
else if(HwValueL == port_suspend)
{//. ClearPortSuspend
HPCONR = HwIndexL + 160;// 0b10100000
M_NOP;
return;
}
else if(HwValueL == port_power)
{//. ClearPortPower
HPCONR = HwIndexL + 168;// 0b10101000
M_NOP;
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);
M_NOP;
return;
}
else if(HwValueL == c_port_enable)
{//. ClearPort_ENABLEChange
//. CALL SEARCH_CHANGE_PORT
SearchChangePort();
M_BC1(IAC0);
M_NOP;
return;
}
else if(HwValueL == c_port_suspend)
{//. ClearPortSuspendChange
//. CALL SEARCH_CHANGE_PORT
SearchChangePort();
M_BC2(IAC0);
M_NOP;
return;
}
else if(HwValueL == c_port_over_current)
{//. ClearPortOverCurrentChange
//. CALL SEARCH_CHANGE_PORT
SearchChangePort();
M_BC3(IAC0);
M_NOP;
return;
}
else if(HwValueL == c_port_reset)
{//. ClearPortResetChange
//. CALL SEARCH_CHANGE_PORT
SearchChangePort();
M_BC4(IAC0);
M_NOP;
return;
}
}
}
else if(_RT0X23_Request_0X03 &&(TEMP_UREG==request_set_feature))
{//. SetPortFeature
if(_USB_HUB)
{
unsigned char temp=HwIndexL;
temp--;
// check port number = 1~4 ?
if((252 & temp))
{
M_BS0(USB_STATUS);
return;
}
if(HwValueL == port_reset)
{//. SetPortReset
HPCONR = HwIndexL + 136;//0b10001000
M_NOP;
//.//Embedded port?
if(temp==1)
{
M_BS4(GCNTR);
M_NOP;
FAR = 0;
M_NOP;
ADDRESS_BUFf = 0;
}
return;
}
if(HwValueL == port_power)
{//. SetPortPower
HPCONR = HwIndexL + 144;//0b10010000
M_NOP;
return;
}
if(HwValueL == port_suspend)
{//. SetPortSuspend
if(temp==1)
{
M_NOP;
}
HPCONR = HwIndexL + 128;//0b10010000
M_NOP;
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;
M_NOP;
_asm
MOV A,#0x00
MOV _HEP0TXDAR,A
_endasm;
M_NOP;
_asm
MOV A,_HSR
SHRA _HSR,2
AND A,#0b00000011
MOV _HEP0TXDAR,A
_endasm;
M_NOP;
_asm
MOV A,#0x00
MOV _HEP0TXDAR,A
_endasm;
M_NOP;
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;
M_NOP;
EP0TXDAR = IDLE_TIMER;
M_NOP;
return;
}
else if(_RT0XA1_Request_0X03 &&(TEMP_UREG==request_get_protocol))
{//. GetProtocolReport
EP0TXCTR = 1;
M_NOP;
EP0TXDAR = PROTOCOL;
M_NOP;
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 temp=HwIndexL;
temp--;
if((252 & temp))
{
M_BS0(USB_STATUS);
return;
}
HEP0TXCTR = 4;
M_NOP;
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;
M_NOP;
_asm
RLCA _IAC0,4
AND A,#0b00000011
MOV _HEP0TXDAR,A
_endasm;
M_NOP;
_asm
MOV A,#_HPSR4-_HSR-1
ADD _IAP0,A
NOP
MOV A,_IAC0
AND A,#0b00011111
MOV _HEP0TXDAR,A
_endasm;
M_NOP;
_asm
MOV A,#0b00000000
MOV _HEP0TXDAR,A
_endasm;
M_NOP;
return;
}
else if(_RT0XA3_Request_0X02 &&(TEMP_UREG==request_get_state) && _USB_HUB)
{//. GetBusState
unsigned char temp;
HEP0TXCTR = 1;
M_NOP;
nHwLength = 0;
temp=HwIndexL;
temp--;
if((252 & temp))
{
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;
M_NOP;
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;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -