📄 usb_hid_ad_usb_lib.c
字号:
MOV A,#Low(_Descriptor_type_22_index_0_0_table<<1) MOV _LTBL,A _endasm; TBLL = ET_USB_HID_wDescriptorLength_0_0; fTransmitTable(); return; } #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; 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 temp = wIndexL; switch(temp) { 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; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -