📄 et_easy_usb_bulk_usb_lib.c
字号:
if(_USB_EP1_DIR == _IN_DIR)
{
M_BC1(EP1CSR);
M_NOP;
return;
}
}
break;
case 82: //. ClearFEndpointStall82
if(_USB_EP2 )
{
if(_USB_EP2_DIR == _IN_DIR)
{
M_BC1(EP2CSR);
M_NOP;
return;
}
}
break;
case 83: //. ClearFEndpointStall83
if(_USB_EP3 )
{
if(_USB_EP3_DIR == _IN_DIR)
{
M_BC1(EP3CSR);
M_NOP;
return;
}
}
break;
}
}
}
}
}
if(_RT0X02_Request_0X03 &&(TEMP_UREG ==request_set_feature))
{//. SetEndpointStall
if(_RT0X02_R0X03_Value0000 && (IAC0 = endpoint_stalled))
{
IAP0++;
if(_USB_HUB && M_ISBC1(USB_STATUS))
{
if(IAC0==0)
{//. SetHEndpointStall00
M_BS1(HEP0RXCSR);
M_NOP;
return;
}
else if(IAC0 == hub_endpoint80)
{//. SetHEndpointStall80
M_BS1(HEP0TXCSR);
M_NOP;
return;
}
else if(IAC0 == hub_endpoint81)
{//. SetHEndpointStall81
M_BC1(HEP1TXCSR);
M_NOP;
return;
}
}
else
{
usb_byTemp = IAC0;
IAP0--;
switch(usb_byTemp)
{
case 0: //. SetFEndpointStall00
M_BS1(EP0RXCSR);
M_NOP;
return;
case 1: //. SetFEndpointStall01
if(_USB_EP1)
{
if(_USB_EP1_DIR != _IN_DIR)
{
M_BS1(EP1CSR);
M_NOP;
return;
}
}
break;
case 2: //. SetFEndpointStall02
if(_USB_EP2)
{
if(_USB_EP2_DIR != _IN_DIR)
{
M_BS1(EP2CSR);
M_NOP;
return;
}
}
break;
case 3: //. SetFEndpointStall03
if(_USB_EP3)
{
if(_USB_EP3_DIR != _IN_DIR)
{
M_BS1(EP3CSR);
M_NOP;
return;
}
}
break;
case 80: //. SetFEndpointStall80
M_BS1(EP0TXCSR);
M_NOP;
return;
case 81: //. SetFEndpointStall81
if(_USB_EP1 )
{
if(_USB_EP1_DIR == _IN_DIR)
{
M_BS1(EP1CSR);
M_NOP;
return;
}
}
break;
case 82: //. SetFEndpointStall82
if(_USB_EP2 )
{
if(_USB_EP2_DIR == _IN_DIR)
{
M_BS1(EP2CSR);
M_NOP;
return;
}
}
break;
case 83: //. ClearFEndpointStall83
if(_USB_EP3 )
{
if(_USB_EP3_DIR == _IN_DIR)
{
M_BS1(EP3CSR);
M_NOP;
return;
}
}
break;
}
}
}
}
//. call _ADD_USB_RT0X02_Request
AddUsbRt0x02Request();
}
//. RequestType80
else if(_RequestType_0X80 && (TEMP_UREG==0x80))
{//. Get Status
TEMP_UREG = IAC0;
if(_RT0X80_Request_0X00 && (TEMP_UREG == request_get_status))
{//. GetDeviceStatus
if(_USB_HUB && M_ISBC1(USB_STATUS))
{
HEP0TXCTR = 2;
M_NOP;
nHwLength = 0;
/*
HwLengthL = 0;
HwLengthH = 0;
*/
_asm
SHRA _HGSR,3
AND A,#0b00000011
MOV _HEP0TXDAR,A
NOP
NOP
NOP
MOV A,#0b00000000
MOV _HEP0TXDAR,A
NOP
NOP
NOP
_endasm;
return;
}
else
{
EP0TXCTR = 2;
M_NOP;
nwLength = 0;
//wLengthL = 0;
//wLengthH = 0;
EP0TXDAR = 0;
M_NOP;
EP0TXDAR = 0;
M_NOP;
return;
}
}
// Get Descriptor
else if(_RT0X80_Request_0X06 && (TEMP_UREG == request_get_descriptor))
{//. GetDescriptor
IAP0++;
M_NOP;
TEMP_UREG = IAC0;
if(_RT0X80_R0X06_Value0100 && (TEMP_UREG == descriptor_types_device))
{//. GetDeviceDescriptor
if(_USB_HUB && M_ISBS1(USB_STATUS))
{//. HGetConfigDesc_1
/*
psz = &Hub_device_desc_table;
HTBLL = *psz;
*/
_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
//psz = &Fc_device_desc_table;
//. JMP FGetConfigDesc_1
//TBLL = *psz;
//. CALL fTransmitTable
_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)
if( M_ISBC1(USB_STATUS))
{
psz = &Hub_config_desc_table;
HTBLL = *(psz+2);
LTBL -=2;
HubTransmitTable();
return;
}
#else
{//. FcConfigDescriptor
/*
psz = &Fc_config_desc_table;
TBLL = *(psz+2);
LTBL -=2;
*/
_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;
}
#endif
}
else if(_RT0X80_R0X06_Value0300 && (TEMP_UREG == descriptor_types_string))
{ //. STRING_COMMAND
if(wValueL==0)
{//. String_langid
/*
psz = &String_langid_table;
TBLL = *psz;
*/
_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
/*
psz = &String_index_HManufacture_table;
TBLL = *psz;
*/
_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
/*
psz = &String_index_HProduct_table;
TBLL = *psz;
*/
_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;
M_NOP;
nHwLength = 0;
if(M_ISBS5(HGSR))
{
HEP0TXDAR = 1;
}
else
{
HEP0TXDAR = 0;
}
M_NOP;
return;
}
else
{
EP0TXCTR = 1;
M_NOP;
nwLength = 0;
if(M_ISBS4(FC_STATUS))
{
EP0TXDAR = 1;
}
else
{
EP0TXDAR = 0;
}
M_NOP;
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;
M_NOP;
nHwLength = 0;
HEP0TXDAR = 0;
M_NOP;
return;
}
EP0TXCTR = 1;
M_NOP;
nwLength = 0;
EP0TXDAR = 0;
M_NOP;
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_index00_table<<1)
MOV _HTBL,A
MOV A,#LOW(_Descriptor_type_21_index00_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_index01_table<<1)
MOV _HTBL,A
MOV A,#LOW(_Descriptor_type_21_index01_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_index00_table<<1)
MOV _HTBL,A
MOV A,#Low(_Descriptor_type_22_index00_table<<1)
MOV _LTBL,A
_endasm;
TBLL = ET_USB_HID_wDescriptorLength0;
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_index01_table<<1)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -