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

📄 usbofcompuer00.lst

📁 基于PHILIPS的D12芯片USB固件的源代码
💻 LST
📖 第 1 页 / 共 5 页
字号:
 763   2                return;
 764   2               }      
 765   1      }
 766          /******************************************************************************/
 767          
 768          /*********************发到接口的获取描述符**************************************/
 769          void get_descriptor_interface(void)
 770          {
 771   1      #ifdef debug
               Prints("    获取描述符(从接口).\r\n");
              #endif
 774   1        if(!usb_flags.flags.not_end)
 775   1           {
 776   2            switch(MSB(Control_Data.DeviceRequest.wValue))
 777   2                 {
 778   3              case HID_DESCRIPTOR:
 779   3                          #ifdef debug
                                   Prints("        获取HID描述符.\r\n");
                                      #endif
 782   3                       Control_Data.wCount=sizeof(HID_DESCRIPTOR_STRUCT);
 783   3                       //Control_Data.pData=(uint8 *)(&hid_descriptor);
 784   3                   break;
 785   3              case REPORT_DESCRIPTOR:
 786   3                          #ifdef debug
                                       Prints("        获取报告描述符.\r\n");
                                      #endif
 789   3                   break;
 790   3                      case PHYSICAL_DESCRIPTOR:
 791   3                          #ifdef debug
                                   Prints("        获取物理描述符.\r\n");
                                      #endif
 794   3                               break;
 795   3                       default:
 796   3                           Prints("       获取其它描述符..................描述符索引为:");
 797   3                               PrintLongInt(MSB(Control_Data.DeviceRequest.wValue));
 798   3                               Prints("\r\n");
 799   3                               DispLineInf();
C51 COMPILER V7.06   USBOFCOMPUER00                                                        03/13/2008 12:38:31 PAGE 14  

 800   3                        break;
 801   3                      }
 802   2            if(Control_Data.wLength<Control_Data.wCount)Control_Data.wCount=Control_Data.wLength;
 803   2               }
 804   1              //写数据到D12输入端点
 805   1          if(Control_Data.wCount>=MAX_CONTROL_DATA_SIZE)
 806   1           {
 807   2                write_endpoint_buff(1,MAX_CONTROL_DATA_SIZE,Control_Data.pData);
 808   2                Control_Data.pData+=MAX_CONTROL_DATA_SIZE;
 809   2            Control_Data.wCount-=MAX_CONTROL_DATA_SIZE;
 810   2                if(usb_flags.flags.set_addr)usb_flags.flags.not_end=1;
 811   2                 else usb_flags.flags.usb_endp0_in=0;
 812   2                return;
 813   2               }
 814   1          else
 815   1           {
 816   2                write_endpoint_buff(1,Control_Data.wCount,Control_Data.pData);
 817   2            usb_flags.flags.setup_packet_in=0;
 818   2                usb_flags.flags.usb_endp0_in=0;
 819   2                return;
 820   2               }      
 821   1      }
 822          /******************************************************************************/
 823          
 824          //#define debug1
 825          /************************终端点0输出中断处理************************************/
 826          void endp0_out(void)
 827          {
 828   1      #ifdef debug1
               Prints("ep0 out status,last-status,status: ");
               //PrintHex(read_endpoint_status(0));
              #endif
 832   1       Last_Status.Register=read_last_status(0);
 833   1      #ifdef debug1
              // PrintHex(Last_Status.Register);
              // PrintHex(read_endpoint_status(0));
               Prints("\r\n");
               Prints("端点0输出数据:");
               read_endpoint_buff(0,16,OutBuffer);    
              #endif
 840   1      
 841   1       if(Last_Status.Status.setup_packet) //setup包 
 842   1       {
 843   2        Control_Data.wLength=0;
 844   2        Control_Data.wCount=0;
 845   2        if(read_endpoint_buff(0,sizeof(Control_Data.DeviceRequest),(uint8 *)(&(Control_Data.DeviceRequest)))!=si
             -zeof(REQUESTCMD))
 846   2        {
 847   3         set_endpoint_status(0,0);
 848   3         set_endpoint_status(1,0);
 849   3         return;
 850   3        }
 851   2        Control_Data.DeviceRequest.wValue=SWAP16(Control_Data.DeviceRequest.wValue);
 852   2        Control_Data.DeviceRequest.wIndex=SWAP16(Control_Data.DeviceRequest.wIndex);
 853   2        Control_Data.DeviceRequest.wLength=SWAP16(Control_Data.DeviceRequest.wLength);
 854   2      
 855   2        ack_setup(0);
 856   2        ack_setup(1);
 857   2        select_endpoint(0);
 858   2        clear_buffer();
 859   2        
 860   2        Control_Data.wLength=Control_Data.DeviceRequest.wLength;
C51 COMPILER V7.06   USBOFCOMPUER00                                                        03/13/2008 12:38:31 PAGE 15  

 861   2        usb_flags.flags.not_end=0;
 862   2        usb_flags.flags.usb_endp0_in=1;
 863   2        if(Control_Data.DeviceRequest.bmRequestType&0x80)
 864   2        {
 865   3         usb_flags.flags.setup_packet_in=1;
 866   3         usb_flags.flags.setup_packet_out=0;
 867   3         return;
 868   3        }
 869   2        else 
 870   2        {
 871   3         usb_flags.flags.setup_packet_in=0;
 872   3         usb_flags.flags.setup_packet_out=1;
 873   3         if(Control_Data.wLength!=0)
 874   3         {
 875   4          usb_flags.flags.usb_endp0_in=0;
 876   4         }
 877   3         return;
 878   3        }
 879   2       }
 880   1       else
 881   1       {
 882   2        if(usb_flags.flags.setup_packet_out) 
 883   2        {
 884   3         usb_flags.flags.usb_endp0_in=1;
 885   3          switch(Control_Data.DeviceRequest.bmRequestType&0x60)
 886   3               {
 887   4                 case 0x00:  //标准请求
 888   4                 #ifdef debug
                         Prints("USB标准输出请求:数据阶段.\r\n");
                         #endif
 891   4                 switch(Control_Data.DeviceRequest.bmRequestType&0x1F)
 892   4                  {
 893   5                       case 0:   //到设备
 894   5                   switch (Control_Data.DeviceRequest.bRequest)
 895   5                    {
 896   6                         case     CLEAR_FEATURE: /*ClearFeatureD(0);*/break;
 897   6                         case       SET_FEATURE: /*SetFeatureD(0);*/break;
 898   6                         case       SET_ADDRESS: /*SetUsbAddressD();*/break;          //set_address              
 899   6                         case    SET_DESCRIPTOR: /*SetDescriptorD();*/break;           //set_descriptor
 900   6                         case SET_CONFIGURATION: /*SetConfigurationD();*/ break;       //set_configurat                              
             -   
 901   6                         default: break;
 902   6                        }
 903   5                       break;
 904   5                       
 905   5                       case 1:   //到接口
 906   5                    switch (Control_Data.DeviceRequest.bRequest)
 907   5                         {
 908   6                          case CLEAR_FEATURE:  /*ClearFeatureD(1);*/break;
 909   6                          case   SET_FEATURE:  /*SetFeatureD(1);*/break;
 910   6                      case SET_INTERFACE: /*SetInterfaceD();*/break;
 911   6                          default: break;
 912   6                      }
 913   5                       break;
 914   5                       
 915   5                       case 2:   //到端点
 916   5                        switch (Control_Data.DeviceRequest.bRequest)
 917   5                         {
 918   6                          case CLEAR_FEATURE: /*ClearFeature(2);*/break;
 919   6                          case   SET_FEATURE: /*SetFeature(2);*/break;
 920   6                      default: break;      
 921   6                         }
C51 COMPILER V7.06   USBOFCOMPUER00                                                        03/13/2008 12:38:31 PAGE 16  

 922   5                       break;
 923   5      
 924   5                       default: break;
 925   5                  }
 926   4            break;
 927   4      
 928   4                case 0x20:  //类请求
 929   4                #ifdef debug
                    Prints("USB类输出请求:数据阶段.\r\n");
                        #endif
 932   4                 switch(Control_Data.DeviceRequest.bmRequestType&0x1F)
 933   4                  {
 934   5                       case 0:    //接收者为设备
 935   5                   switch (Control_Data.DeviceRequest.bRequest)
 936   5                    {                           
 937   6                         default: break;
 938   6                        }
 939   5                       break;
 940   5      
 941   5                       case 1:   //接收者为接口
 942   5                    switch (Control_Data.DeviceRequest.bRequest)
 943   5                         {
 944   6                          default: break;
 945   6                      }
 946   5                       
 947   5                       break;
 948   5      
 949   5                       case 2:   //接收者为端点
 950   5                        switch (Control_Data.DeviceRequest.bRequest)
 951   5                         {
 952   6                      default: break;      
 953   6                         }
 954   5                       break;
 955   5                       
 956   5                       case 3: //其它接收者
 957   5                        switch (Control_Data.DeviceRequest.bRequest)
 958   5                         {
 959   6                      default: break;      
 960   6                         }break;
 961   5                                        
 962   5                       default: break;
 963   5                  }      
 964   4                 break;
 965   4      
 966   4             case 0x40:  //用户请求
 967   4                 #ifdef debug
                         Prints("USB用户输出请求:数据阶段.\r\n");
                         #endif
 970   4                 switch(Control_Data.DeviceRequest.bmRequestType&0x1F)
 971   4                  {
 972   5                       case 0:    //接收者为设备
 973   5                   switch (Control_Data.DeviceRequest.bRequest)
 974   5                    {                           
 975   6                         default: break;
 976   6                        }
 977   5                       break;
 978   5                       
 979   5                       case 1:   //接收者为接口
 980   5                    switch (Control_Data.DeviceRequest.bRequest)
 981   5                         {
 982   6                          default: break;
 983   6                      }
C51 COMPILER V7.06   USBOFCOMPUER00                                                        03/13/2008 12:38:31 PAGE 17  

 984   5                   break;
 985   5                       
 986   5                       case 2:   //接收者为端点
 987   5                        switch (Control_Data.DeviceRequest.bRequest)
 988   5                         {
 989   6                      default: break;      
 990   6                         }
 991   5                       break;
 992   5                       
 993   5                       case 3: //其它接收者
 994   5                        switch (Control_Data.DeviceRequest.bRequest)
 995   5                         {
 996   6                      default: break;      
 997   6                         }               
 998   5                       break;
 999   5                                        
1000   5                       default: break;
1001   5                  }
1002   4               }
1003   3         }
1004   2         else
1005   2         {
1006   3          select_endpoint(0);
1007   3          clear_buffer(); 
1008   3         }
1009   2       }
1010   1      }
1011          /******************************************************************************/
1012          
1013          /***********************获取报告*********************************************/
1014          void get_report(void)
1015          {
1016   1      #ifdef debug
               Prints("        获取报告.\r\n");

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -