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

📄 usbkeyboard.lst

📁 EDN USB学习板之实战第一个USB程序: USB键盘
💻 LST
📖 第 1 页 / 共 5 页
字号:
 764   3               set_endpoint_status(0,0);
 765   3               set_endpoint_status(1,0);
 766   3               return;
 767   3              }
 768   2        Control_Data.DeviceRequest.wValue=SWAP16(Control_Data.DeviceRequest.wValue);
 769   2        Control_Data.DeviceRequest.wIndex=SWAP16(Control_Data.DeviceRequest.wIndex);
 770   2        Control_Data.DeviceRequest.wLength=SWAP16(Control_Data.DeviceRequest.wLength);
 771   2      
 772   2        ack_setup(0);
 773   2        ack_setup(1);
 774   2        select_endpoint(0);
 775   2        clear_buffer();  
 776   2        
 777   2        Control_Data.wLength=Control_Data.DeviceRequest.wLength;
 778   2        usb_flags.flags.not_end=0;
 779   2        usb_flags.flags.usb_endp0_in=1;
 780   2        if(Control_Data.DeviceRequest.bmRequestType&0x80)
 781   2        {
 782   3         usb_flags.flags.setup_packet_in=1;
 783   3         usb_flags.flags.setup_packet_out=0;
 784   3         return;
 785   3        }
 786   2        else 
 787   2        {
 788   3         usb_flags.flags.setup_packet_in=0;
 789   3         usb_flags.flags.setup_packet_out=1;
 790   3         if(Control_Data.wLength!=0)
 791   3         {
 792   4          usb_flags.flags.usb_endp0_in=0;
 793   4         }
 794   3         return;
 795   3        }
 796   2       }
 797   1       else
C51 COMPILER V8.02   USBKEYBOARD                                                           12/12/2007 21:37:17 PAGE 14  

 798   1       {
 799   2        if(usb_flags.flags.setup_packet_out) 
 800   2        {
 801   3         usb_flags.flags.usb_endp0_in=1;
 802   3        }
 803   2        else
 804   2        {
 805   3         select_endpoint(0);
 806   3         clear_buffer();
 807   3        }
 808   2       }
 809   1      }
 810          /******************************************************************************/
 811          
 812          /***********************获取报告*********************************************/
 813          void get_report(void)
 814          {
 815   1       Prints("        获取报告.\r\n");
 816   1      }
 817          /******************************************************************************/
 818          
 819          /**********************获取空闲状态*********************************************/
 820          void get_idle(void)
 821          {
 822   1       Prints("    获取空闲.\r\n");
 823   1       write_endpoint_buff(1,1,&idle);
 824   1       usb_flags.flags.usb_endp0_in=0;
 825   1      }
 826          /******************************************************************************/
 827          
 828          /*************************获取协议**********************************************/
 829          void get_protocol(void)
 830          {
 831   1       Prints("    获取协议.\r\n");
 832   1       write_endpoint_buff(1,1,&protocol);
 833   1       usb_flags.flags.usb_endp0_in=0;
 834   1      }
 835          /******************************************************************************/
 836          
 837          /***********************设置报告***********************************************/
 838          void set_report(void)
 839          {
 840   1       Prints("    设置报告.\r\n");
 841   1      }
 842          /******************************************************************************/
 843          
 844          /***********************设置空闲***********************************************/
 845          void set_idle(void)
 846          {
 847   1       Prints("    设置空闲.\r\n");
 848   1       while(select_endpoint(1)&0x01);
 849   1       write_endpoint_buff(1,0,0);
 850   1       idle=Control_Data.DeviceRequest.wValue;
 851   1       usb_flags.flags.usb_endp0_in=0;
 852   1       usb_flags.flags.setup_packet_out=0;
 853   1      }
 854          /******************************************************************************/
 855          
 856          /**********************设置协议**************************************************/
 857          void set_protocol(void)
 858          {
 859   1       Prints("    设置协议.\r\n");
C51 COMPILER V8.02   USBKEYBOARD                                                           12/12/2007 21:37:17 PAGE 15  

 860   1       while(select_endpoint(1)&0x01);
 861   1       write_endpoint_buff(1,0,0);
 862   1       protocol=Control_Data.DeviceRequest.wValue;
 863   1       usb_flags.flags.usb_endp0_in=0;
 864   1       usb_flags.flags.setup_packet_out=0;
 865   1      }
 866          /******************************************************************************/
 867          
 868          /****************************终端点0输入处理**************************************/
 869          void endp0_in(void)
 870          {
 871   1       read_last_status(1);
 872   1       //如果是输入请求包
 873   1       if(usb_flags.flags.setup_packet_in||usb_flags.flags.not_end)
 874   1        {
 875   2          switch(Control_Data.DeviceRequest.bmRequestType&0x60)
 876   2               {
 877   3                 case 0x00:  //标准请求
 878   3                 Prints("USB标准请求.\r\n");
 879   3                 switch(Control_Data.DeviceRequest.bmRequestType&0x1F)
 880   3                  {
 881   4                       case 0: //到设备
 882   4                         switch (Control_Data.DeviceRequest.bRequest)
 883   4                          {
 884   5                           case 0: get_status(0);break;
 885   5                           case 6: get_descriptor();break;
 886   5                           case 8: get_configuration();break;
 887   5                               default:break;
 888   5                          }
 889   4                       break;
 890   4      
 891   4                       case 1:  //到接口
 892   4                         switch (Control_Data.DeviceRequest.bRequest)
 893   4                          {
 894   5                       case  0: get_status(1);break;
 895   5                                case 6: get_descriptor_interface();break;
 896   5                           case 10: get_interface();break;
 897   5                       default: break;
 898   5                              }
 899   4                       break;
 900   4      
 901   4                       case 2:  //到端点
 902   4                        {
 903   5                     if(Control_Data.DeviceRequest.bRequest==0)get_status(2);  
 904   5                        }
 905   4                       default: break;
 906   4                  }
 907   3                 break;
 908   3      
 909   3                 case 0x20:  //类请求
 910   3             Prints("USB类请求.\r\n");
 911   3                 switch(Control_Data.DeviceRequest.bmRequestType&0x1F)
 912   3                  {
 913   4                       case 0:  //到设备
 914   4                         switch (Control_Data.DeviceRequest.bRequest)
 915   4                          {
 916   5                               default:break;
 917   5                          }
 918   4                       break;
 919   4      
 920   4                       case 1:  //到接口
 921   4                         switch (Control_Data.DeviceRequest.bRequest)
C51 COMPILER V8.02   USBKEYBOARD                                                           12/12/2007 21:37:17 PAGE 16  

 922   4                          {
 923   5      
 924   5                               case   GET_REPORT: get_report();   break; //获取报告
 925   5                   case     GET_IDLE: get_idle();     break; //获取空闲状态
 926   5                   case GET_PROTOCOL: get_protocol(); break; //获取协议
 927   5                       default: break;
 928   5                              }
 929   4                       break;
 930   4      
 931   4                       case 2:  //到端点
 932   4                        {
 933   5                         switch (Control_Data.DeviceRequest.bRequest)
 934   5                          {
 935   6                       default: break;
 936   6                              }  
 937   5                        }
 938   4                       default: break;
 939   4                  }
 940   3                 break;
 941   3      
 942   3                 case 0x40:  //用户请求
 943   3             Prints("USB用户请求.\r\n");
 944   3                 switch(Control_Data.DeviceRequest.bmRequestType&0x1F)
 945   3                  {
 946   4                       case 0:  //到设备
 947   4                         switch (Control_Data.DeviceRequest.bRequest)
 948   4                          {
 949   5                               default: break;
 950   5                          }
 951   4                   break;
 952   4      
 953   4                       case 1:   //到接口
 954   4                         switch (Control_Data.DeviceRequest.bRequest)
 955   4                          {
 956   5                       default: break;
 957   5                              }
 958   4               break;
 959   4      
 960   4                       case 2:  //到端点
 961   4                        {
 962   5                         switch (Control_Data.DeviceRequest.bRequest)
 963   5                          {
 964   6                       default: break;
 965   6                              }  
 966   5                        }
 967   4                       default: break;
 968   4                  }
 969   3              }
 970   2          return;
 971   2        }
 972   1      
 973   1        //如果是输出请求包
 974   1       if(usb_flags.flags.setup_packet_out) 
 975   1        {
 976   2          switch(Control_Data.DeviceRequest.bmRequestType&0x60)
 977   2               {
 978   3                 case 0x00:  //标准请求
 979   3                 Prints("USB标准请求.\r\n");
 980   3                 switch(Control_Data.DeviceRequest.bmRequestType&0x1F)
 981   3                  {
 982   4                       case 0:   //到设备
 983   4                   switch (Control_Data.DeviceRequest.bRequest)
C51 COMPILER V8.02   USBKEYBOARD                                                           12/12/2007 21:37:17 PAGE 17  

 984   4                    {
 985   5                         case     CLEAR_FEATURE: clear_feature(0);break;
 986   5                         case       SET_FEATURE: set_feature(0);break;
 987   5                         case       SET_ADDRESS: set_usb_address();break;          //set_address                 
 988   5                         case    SET_DESCRIPTOR: set_descriptor();break;           //set_descriptor
 989   5                         case SET_CONFIGURATION: set_configuration(); break;       //set_configurat                             
 990   5                         default: break;
 991   5                        }
 992   4                       break;
 993   4                       
 994   4                       case 1:   //到接口
 995   4                    switch (Control_Data.DeviceRequest.bRequest)
 996   4                         {
 997   5                          case CLEAR_FEATURE:  clear_feature(1);break;
 998   5                          case   SET_FEATURE:  set_feature(1); break;
 999   5                      case SET_INTERFACE: set_interface();break;
1000   5                          default: break;
1001   5                      }
1002   4                       break;
1003   4                       
1004   4                       case 2:   //到端点
1005   4                        switch (Control_Data.DeviceRequest.bRequest)
1006   4                         {
1007   5                          case CLEAR_FEATURE: clear_feature(2);break;
1008   5                          case   SET_FEATURE: set_feature(2);break;
1009   5                      default: break;      
1010   5                         }
1011   4                       break;
1012   4      
1013   4                       default: break;
1014   4                  }
1015   3            break;
1016   3      
1017   3                case 0x20:  //类请求
1018   3            Prints("USB类请求.\r\n");
1019   3                 switch(Control_Data.DeviceRequest.bmRequestType&0x1F)
1020   3                  {
1021   4                       case 0:    //接收者为设备

⌨️ 快捷键说明

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