📄 et21x130c_usb_lib.c
字号:
MOV A,#0b00000000
MOV _HEP0TXDAR,A
NOP
NOP
NOP
_endasm;
return;
}
else
{
EP0TXCTR = 2;
USB_Lib_Delay();
nwLength = 0;
//wLengthL = 0;
//wLengthH = 0;
EP0TXDAR = 0;
USB_Lib_Delay();
EP0TXDAR = 0;
USB_Lib_Delay();
return;
}
}
// Get Descriptor
else if(_RT0X80_Request_0X06 && (TEMP_UREG == request_get_descriptor))
{//. GetDescriptor
IAP0++;
USB_Lib_Delay();
TEMP_UREG = IAC0;
if(_RT0X80_R0X06_Value0100 && (TEMP_UREG == descriptor_types_device))
{//. GetDeviceDescriptor
if(_USB_HUB && M_ISBS1(USB_STATUS))
{//. HGetConfigDesc_1
_asm
MOV A,#High(_Hub_device_desc_table<<1)
MOV _HTBL,A
MOV A,#LOW(_Hub_device_desc_table<<1)
MOV _LTBL,A
NOP
NOP
TBRD _HTBLL
_endasm;
//. call hTransmitTable
HubTransmitTable();
return;
}
else
{//. FcConfigDescriptor
_asm
MOV A,#High(_Fc_device_desc_table<<1)
MOV _HTBL,A
MOV A,#LOW(_Fc_device_desc_table<<1)
MOV _LTBL,A
NOP
NOP
TBRD _TBLL
_endasm;
fTransmitTable();
return;
}
}
else if(_RT0X80_R0X06_Value0200 && (TEMP_UREG == descriptor_types_configuration))
{//. GetConfigDescriptor
if(_USB_HUB && M_ISBC1(USB_STATUS))
{
// psz = &Hub_config_desc_table;
HTBLL = *(psz+2);
LTBL -=2;
HubTransmitTable();
return;
}
else
{//. FcConfigDescriptor
_asm
MOV A,#High(_Fc_config_desc_table<<1)
MOV _HTBL,A
MOV A,#LOW(_Fc_config_desc_table<<1)
MOV _LTBL,A
MOV A,#0x02
ADD _LTBL,A
NOP
NOP
TBRD _TBLL
SUB _LTBL,A
_endasm;
fTransmitTable();
return;
}
}
else if(_RT0X80_R0X06_Value0300 && (TEMP_UREG == descriptor_types_string))
{ //. STRING_COMMAND
if(wValueL==0)
{//. String_langid
_asm
MOV A,#High(_String_langid_table<<1)
MOV _HTBL,A
MOV A,#LOW(_String_langid_table<<1)
MOV _LTBL,A
NOP
NOP
TBRD _TBLL
_endasm;
fTransmitTable();
return;
}
if(ET_USB_HD_iManufacture && (wValueL ==ET_USB_HD_iManufacture))
{//. String_index_HManufacture
//. call macro _ADD_USB_STRING_INDEX_HM
_asm
MOV A,#High(_String_index_HManufacture_table<<1)
MOV _HTBL,A
MOV A,#LOW(_String_index_HManufacture_table<<1)
MOV _LTBL,A
NOP
NOP
TBRD _TBLL
_endasm;
fTransmitTable();
return;
}
if(ET_USB_HD_iProduct && (wValueL == ET_USB_HD_iProduct))
{//. String_index_HProduct
//. call macro _ADD_USB_STRING_INDEX_HP
_asm
MOV A,#High(_String_index_HManufacture_table<<1)
MOV _HTBL,A
MOV A,#LOW(_String_index_HManufacture_table<<1)
MOV _LTBL,A
NOP
NOP
TBRD _TBLL
_endasm;
fTransmitTable();
return;
}
if(ET_USB_HD_iSerialNumber && (wValueL == ET_USB_HD_iSerialNumber))
{//. String_index_HSerialNumber
//. call macro _ADD_USB_STRING_INDEX_HS
// null function
}
if(ET_USB_HC_iConfiguration && (wValueL == ET_USB_HC_iConfiguration))
{//. String_index_HConfiguration
//. call macro _ADD_USB_STRING_INDEX_HC
// null function
}
if(ET_USB_HI_iInterface && (wValueL == ET_USB_HI_iInterface))
{//. String_index_HInterface
//. call macro _ADD_USB_STRING_INDEX_HI
// null function
}
if(ET_USB_DD_iManufacture && (wValueL == ET_USB_DD_iManufacture))
{//. String_index_DManufacture
//. call macro _ADD_USB_STRING_INDEX_HM
// null function
/*
psz = &String_index_HManufacture_table;
TBLL = *psz;
*/
_asm
MOV A,#High(_String_index_DManufacture_table<<1)
MOV _HTBL,A
MOV A,#LOW(_String_index_DManufacture_table<<1)
MOV _LTBL,A
NOP
NOP
TBRD _TBLL
_endasm;
fTransmitTable();
return;
}
if(ET_USB_DD_iProduct && (wValueL == ET_USB_DD_iProduct))
{//. String_index_DProduct
//. call macro _ADD_USB_STRING_INDEX_HP
// null function
/*
psz = &String_index_HProduct_table;
TBLL = *psz;
*/
_asm
MOV A,#High(_String_index_DProduct_table<<1)
MOV _HTBL,A
MOV A,#LOW(_String_index_DProduct_table<<1)
MOV _LTBL,A
NOP
NOP
TBRD _TBLL
_endasm;
fTransmitTable();
return;
}
if(ET_USB_DD_iSerialNumber && (wValueL == ET_USB_DD_iSerialNumber))
{//. String_index_DSerialNumber
//. call macro _ADD_USB_STRING_INDEX_HS
_asm
MOV A,#High(_String_index_DSerial_table<<1)
MOV _HTBL,A
MOV A,#LOW(_String_index_DSerial_table<<1)
MOV _LTBL,A
NOP
NOP
TBRD _TBLL
_endasm;
fTransmitTable();
return;
// null function
}
if(ET_USB_CD_iConfiguration && (wValueL == ET_USB_CD_iConfiguration))
{//. String_index_DConfiguration
//. call macro _ADD_USB_STRING_INDEX_HC
// null function
}
}
}
// Get Configuration
else if(_RT0X80_Request_0X08 && (TEMP_UREG ==request_get_configuration))
{//. GetConfiguration
if(_USB_HUB && M_ISBC1(USB_STATUS))
{//. GetFcConfig
HEP0TXCTR = 1;
USB_Lib_Delay();
nHwLength = 0;
if(M_ISBS5(HGSR))
{
HEP0TXDAR = 1;
}
else
{
HEP0TXDAR = 0;
}
USB_Lib_Delay();
return;
}
else
{
EP0TXCTR = 1;
USB_Lib_Delay();
nwLength = 0;
if(M_ISBS4(FC_STATUS))
{
EP0TXDAR = 1;
}
else
{
EP0TXDAR = 0;
}
USB_Lib_Delay();
return;
}
}
//. call macro _ADD_USB_RT0X80_Request
AddUsbRt0x80Request();
}// end of RequestType80
//. RequestType81
else if(_RequestType_0X81 && (TEMP_UREG == 0x81))
{//. RequestType81
TEMP_UREG = IAC0;
if(_RT0X81_Request_0X00 && (TEMP_UREG ==request_get_status))
{//. GetInterfaceStatus
if(_USB_HUB && M_ISBC1(USB_STATUS))
{
HEP0TXCTR = 1;
USB_Lib_Delay();
nHwLength = 0;
HEP0TXDAR = 0;
USB_Lib_Delay();
return;
}
EP0TXCTR = 1;
USB_Lib_Delay();
nwLength = 0;
EP0TXDAR = 0;
USB_Lib_Delay();
return;
}
else if(_RT0X81_Request_0X06 && (TEMP_UREG == request_get_descriptor))
{//. HID_report_descriptor
if(_RT0X81_R0X06_Value2100 && (wValueH == descriptor_types_HID))
{//. Descriptor_type_21
if((wIndexL==0) && (_USB_HID))
{// call macro _ADD_USB_HID_DESCRIPTION_SUB
/*
psz = &Descriptor_type_21_index00_table;
TBLL = *psz;
*/
_asm
MOV A,#High(_Descriptor_type_21_index_0_0_table<<1)
MOV _HTBL,A
MOV A,#LOW(_Descriptor_type_21_index_0_0_table<<1)
MOV _LTBL,A
NOP
NOP
TBRD _TBLL
_endasm;
fTransmitTable();
return;
}
// use #if to reduce code
#if(ET_USB_CD_bNumInterface==2)
if(wIndexL==1)
{//. call macro _ADD_USB_HID_DESCRIPTION_SUB1
_asm
MOV A,#High(_Descriptor_type_21_index_1_0_table<<1)
MOV _HTBL,A
MOV A,#LOW(_Descriptor_type_21_index_1_0_table<<1)
MOV _LTBL,A
NOP
NOP
TBRD _TBLL
_endasm;
fTransmitTable();
return;
}
#endif
}
if(_RT0X81_R0X06_Value2200 && (wValueH == descriptor_types_Report))
{//. Descriptor_type_22
#if(_USB_HID)
if((wIndexL==0))
{//. call macro _ADD_USB_HID_REPORT_SUB1
//psz = &Descriptor_type_22_index00_table;
_asm
MOV A,#High(_Descriptor_type_22_index_0_0_table<<1)
MOV _HTBL,A
MOV A,#Low(_Descriptor_type_22_index_0_0_table<<1)
MOV _LTBL,A
_endasm;
TBLL = ET_USB_HID_wDescriptorLength_0_0;
fTransmitTable();
return;
}
#endif
#if(ET_USB_CD_bNumInterface==2)
if(wIndexL ==1)
{//. call macro _ADD_USB_HID_REPORT_SUB2
/*
psz = &Descriptor_type_22_index01_table;
TBLL = ET_USB_HID_wDescriptorLength1;
*/
_asm
MOV A,#High(_Descriptor_type_22_index_1_0_table<<1)
MOV _HTBL,A
MOV A,#Low(_Descriptor_type_22_index_1_0_table<<1)
MOV _LTBL,A
_endasm;
TBLL = ET_USB_HID_wDescriptorLength_1_0;
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;
USB_Lib_Delay();
nHwLength = 0;
_asm
MOV A,#0x00
MOV _HEP0TXDAR,A
_endasm;
USB_Lib_Delay();
return;
}
//. GetFcInterfaceStatus
EP0TXCTR = 1;
USB_Lib_Delay();
nwLength = 0;
_asm
MOV A,#0x00
MOV _EP0TXDAR,A
_endasm;
USB_Lib_Delay();
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;
}
USB_Lib_Delay();
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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -