📄 usb_hid_ad_usb_lib.c
字号:
M_NOP; return; } else if(IAC0 == hub_endpoint80) {//. ClearHEndpointStall80 M_BS1(HEP0TXCSR); M_NOP; return; } else if(IAC0 == hub_endpoint81) { M_BC1(HEP1TXCSR); M_NOP; return; } } else { temp = IAC0; IAP0--; switch(temp) { case 0: //. ClearFEndpointStall00 M_BC1(EP0RXCSR); M_NOP; return; case 1: //. ClearFEndpointStall01 if(_USB_EP1) { if(_USB_EP1_DIR != _IN_DIR) { M_BC1(EP1CSR); M_NOP; return; } } break; case 2: //. ClearFEndpointStall02 if(_USB_EP2) { if(_USB_EP2_DIR != _IN_DIR) { M_BC1(EP2CSR); M_NOP; return; } } break; case 3: //. ClearFEndpointStall03 if(_USB_EP3) { if(_USB_EP3_DIR != _IN_DIR) { M_BC1(EP3CSR); M_NOP; return; } } break; case 80: //. ClearFEndpointStall80 M_BC1(EP0TXCSR); M_NOP; return; case 81: //. ClearFEndpointStall81 if(_USB_EP1 ) { 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 { temp = IAC0; IAP0--; switch(temp) { 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 _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; 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((_USB_HID)&&(wIndexL==0)) {// 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)&&(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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -