⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 et21x130c_usb_lib.c

📁 在台湾义统公司
💻 C
📖 第 1 页 / 共 5 页
字号:
              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 + -