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

📄 usbmouse.lst

📁 STC89C52单片机平台上实现用外线通讯并能与PC实现USB的通讯
💻 LST
📖 第 1 页 / 共 4 页
字号:
 627   2      	   else usb_flags.flags.usb_endp0_in=0;
 628   2      	  return;
 629   2      	 }
 630   1          else
 631   1           {
 632   2      	  write_endpoint_buff(1,Control_Data.wCount,Control_Data.pData);
 633   2            usb_flags.flags.setup_packet_in=0;
 634   2      	  usb_flags.flags.usb_endp0_in=0;
 635   2      	  return;
 636   2      	 }      
 637   1      }
 638          /******************************************************************************/
 639          
 640          /*********************发到接口的获取描述符**************************************/
 641          void get_descriptor_interface(void)
 642          {
 643   1       Prints("    获取描述符(从接口)..............................",1);
 644   1        if(!usb_flags.flags.not_end)
 645   1           {
 646   2            switch(MSB(Control_Data.DeviceRequest.wValue))
 647   2      	   {
 648   3              case HID_DESCRIPTOR:
 649   3      		     Prints("        获取HID描述符................................",1);
 650   3      	         Control_Data.wCount=sizeof(HID_DESCRIPTOR_STRUCT);
 651   3       	         //Control_Data.pData=(uint8 *)(&hid_descriptor);
 652   3                   break;
 653   3              case REPORT_DESCRIPTOR:
 654   3      			 Prints("        获取报告描述符................................",1);
 655   3                   Control_Data.wCount=SWAP16(sizeof(MouseReportDescriptor));
 656   3      			 Control_Data.pData=(uint8 *)(MouseReportDescriptor);
 657   3                   if(Control_Data.wLength<Control_Data.wCount)Control_Data.wCount=Control_Data.wLength;
 658   3                   break;
 659   3      		case PHYSICAL_DESCRIPTOR:
 660   3      		     Prints("        获取物理描述符................................",1);
 661   3      			 break;
 662   3      		 default:
 663   3      		     Prints("       获取其它描述符..................描述符索引为:",0);
 664   3      			 PrintLongInt(MSB(Control_Data.DeviceRequest.wValue));
 665   3      			 Prints("",1); 
 666   3      		  break;
 667   3      	   	}
 668   2            if(Control_Data.wLength<Control_Data.wCount)Control_Data.wCount=Control_Data.wLength;
 669   2      	 }
 670   1      	//写数据到D12输入端点
 671   1          if(Control_Data.wCount>=MAX_CONTROL_DATA_SIZE)
 672   1           {
 673   2      	  write_endpoint_buff(1,MAX_CONTROL_DATA_SIZE,Control_Data.pData);
 674   2      	  Control_Data.pData+=MAX_CONTROL_DATA_SIZE;
C51 COMPILER V6.12  USBMOUSE                                                               09/21/2007 12:44:30 PAGE 12  

 675   2            Control_Data.wCount-=MAX_CONTROL_DATA_SIZE;
 676   2      	  if(usb_flags.flags.set_addr)usb_flags.flags.not_end=1;
 677   2      	   else usb_flags.flags.usb_endp0_in=0;
 678   2      	  return;
 679   2      	 }
 680   1          else
 681   1           {
 682   2      	  write_endpoint_buff(1,Control_Data.wCount,Control_Data.pData);
 683   2            usb_flags.flags.setup_packet_in=0;
 684   2      	  usb_flags.flags.usb_endp0_in=0;
 685   2      	  return;
 686   2      	 }      
 687   1      }
 688          /******************************************************************************/
 689          
 690          /************************终端点0输出中断处理************************************/
 691          void endp0_out(void)
 692          {
 693   1       Last_Status.Register=read_last_status(0);
 694   1       if(Last_Status.Status.setup_packet)
 695   1        {
 696   2         Control_Data.wLength=0;
 697   2         Control_Data.wCount=0;
 698   2         if(read_endpoint_buff(0,sizeof(Control_Data.DeviceRequest),(uint8 *)(&(Control_Data.DeviceRequest)))!=s
             -izeof(REQUESTCMD))
 699   2          {
 700   3      	 set_endpoint_status(0,0);
 701   3      	 set_endpoint_status(1,0);
 702   3      	 return;
 703   3      	}
 704   2        Control_Data.DeviceRequest.wValue=SWAP16(Control_Data.DeviceRequest.wValue);
 705   2        Control_Data.DeviceRequest.wIndex=SWAP16(Control_Data.DeviceRequest.wIndex);
 706   2        Control_Data.DeviceRequest.wLength=SWAP16(Control_Data.DeviceRequest.wLength);
 707   2      
 708   2        ack_setup(0);
 709   2        ack_setup(1);
 710   2        Control_Data.wLength=Control_Data.DeviceRequest.wLength;
 711   2        usb_flags.flags.not_end=0;
 712   2        usb_flags.flags.usb_endp0_in=1;
 713   2        usb_flags.flags.setup_packet_in=0;
 714   2        usb_flags.flags.setup_packet_out=0;
 715   2        if(Control_Data.DeviceRequest.bmRequestType&0x80){usb_flags.flags.setup_packet_in=1;return;}
 716   2        else {usb_flags.flags.setup_packet_out=1;return;}
 717   2       }
 718   1       else
 719   1        {
 720   2         select_endpoint(0);
 721   2         clear_buffer();
 722   2        }
 723   1      }
 724          /******************************************************************************/
 725          
 726          /***********************获取报告*********************************************/
 727          void get_report(void)
 728          {
 729   1       Prints("        获取报告................................",1);
 730   1      }
 731          /******************************************************************************/
 732          
 733          /**********************获取空闲状态*********************************************/
 734          void get_idle(void)
 735          {
C51 COMPILER V6.12  USBMOUSE                                                               09/21/2007 12:44:30 PAGE 13  

 736   1       Prints("    获取空闲................................",1);
 737   1       write_endpoint_buff(1,1,&idle);
 738   1       usb_flags.flags.usb_endp0_in=0;
 739   1      }
 740          /******************************************************************************/
 741          
 742          /*************************获取协议**********************************************/
 743          void get_protocol(void)
 744          {
 745   1       Prints("    获取协议................................",1);
 746   1       write_endpoint_buff(1,1,&protocol);
 747   1       usb_flags.flags.usb_endp0_in=0;
 748   1      }
 749          /******************************************************************************/
 750          
 751          /***********************设置报告***********************************************/
 752          void set_report(void)
 753          {
 754   1       Prints("    设置报告................................",1);
 755   1      }
 756          /******************************************************************************/
 757          
 758          /***********************设置空闲***********************************************/
 759          void set_idle(void)
 760          {
 761   1       Prints("    设置空闲................................",1);
 762   1       while(select_endpoint(1)&0x01);
 763   1       write_endpoint_buff(1,0,0);
 764   1       idle=Control_Data.DeviceRequest.wValue;
 765   1       usb_flags.flags.usb_endp0_in=0;
 766   1       usb_flags.flags.setup_packet_out=0;
 767   1      }
 768          /******************************************************************************/
 769          
 770          /**********************设置协议**************************************************/
 771          void set_protocol(void)
 772          {
 773   1       Prints("    设置协议................................",1);
 774   1       while(select_endpoint(1)&0x01);
 775   1       write_endpoint_buff(1,0,0);
 776   1       protocol=Control_Data.DeviceRequest.wValue;
 777   1       usb_flags.flags.usb_endp0_in=0;
 778   1       usb_flags.flags.setup_packet_out=0;
 779   1      }
 780          /******************************************************************************/
 781          
 782          /****************************终端点0输入处理**************************************/
 783          void endp0_in(void)
 784          {
 785   1       read_last_status(1);
 786   1       //如果是输入请求包
 787   1       if(usb_flags.flags.setup_packet_in||usb_flags.flags.not_end)
 788   1        {
 789   2          switch(Control_Data.DeviceRequest.bmRequestType&0x60)
 790   2      	 {
 791   3      	   case 0x00:  //标准请求
 792   3      	   Prints("USB标准请求................................",1);
 793   3      	   switch(Control_Data.DeviceRequest.bmRequestType&0x1F)
 794   3      	    {
 795   4      		 case 0: //到设备
 796   4      		   switch (Control_Data.DeviceRequest.bRequest)
 797   4      		    {
C51 COMPILER V6.12  USBMOUSE                                                               09/21/2007 12:44:30 PAGE 14  

 798   5      		     case 0: get_status(0);break;
 799   5      		     case 6: get_descriptor();break;
 800   5      		     case 8: get_configuration();break;
 801   5      			 default:break;
 802   5      		    }
 803   4      		 break;
 804   4      
 805   4      		 case 1:  //到接口
 806   4      		   switch (Control_Data.DeviceRequest.bRequest)
 807   4      		    {
 808   5      	         case  0: get_status(1);break;
 809   5      			  case 6: get_descriptor_interface();break;
 810   5      		     case 10: get_interface();break;
 811   5      	         default: break;
 812   5      			}
 813   4      		 break;
 814   4      
 815   4      		 case 2:  //到端点
 816   4      		  {
 817   5      	       if(Control_Data.DeviceRequest.bRequest==0)get_status(2);  
 818   5      		  }
 819   4      		 default: break;
 820   4      	    }
 821   3      	   break;
 822   3      
 823   3      	   case 0x20:  //类请求
 824   3             Prints("USB类请求................................",1);
 825   3      	   switch(Control_Data.DeviceRequest.bmRequestType&0x1F)
 826   3      	    {
 827   4      		 case 0:  //到设备
 828   4      		   switch (Control_Data.DeviceRequest.bRequest)
 829   4      		    {
 830   5      			 default:break;
 831   5      		    }
 832   4      		 break;
 833   4      
 834   4      		 case 1:  //到接口
 835   4      		   switch (Control_Data.DeviceRequest.bRequest)
 836   4      		    {
 837   5      
 838   5      	  		 case   GET_REPORT: get_report();   break; //获取报告
 839   5                   case     GET_IDLE: get_idle();     break; //获取空闲状态
 840   5                   case GET_PROTOCOL: get_protocol(); break; //获取协议
 841   5      	         default: break;
 842   5      			}
 843   4      		 break;
 844   4      
 845   4      		 case 2:  //到端点
 846   4      		  {
 847   5      		   switch (Control_Data.DeviceRequest.bRequest)
 848   5      		    {
 849   6      	         default: break;
 850   6      			}  
 851   5      		  }
 852   4      		 default: break;
 853   4      	    }
 854   3      	   break;
 855   3      
 856   3      	   case 0x40:  //用户请求
 857   3             Prints("USB用户请求................................",1);
 858   3      	   switch(Control_Data.DeviceRequest.bmRequestType&0x1F)
 859   3      	    {
C51 COMPILER V6.12  USBMOUSE                                                               09/21/2007 12:44:30 PAGE 15  

 860   4      		 case 0:  //到设备
 861   4      		   switch (Control_Data.DeviceRequest.bRequest)
 862   4      		    {
 863   5      			 default: break;
 864   5      		    }
 865   4      	     break;
 866   4      
 867   4      		 case 1:   //到接口
 868   4      		   switch (Control_Data.DeviceRequest.bRequest)
 869   4      		    {
 870   5      	         default: break;
 871   5      			}
 872   4               break;
 873   4      
 874   4      		 case 2:  //到端点
 875   4      		  {
 876   5      		   switch (Control_Data.DeviceRequest.bRequest)
 877   5      		    {
 878   6      	         default: break;
 879   6      			}  
 880   5      		  }
 881   4      		 default: break;
 882   4      	    }
 883   3      	}
 884   2          return;
 885   2        }
 886   1      
 887   1        //如果是输出请求包
 888   1       if(usb_flags.flags.setup_packet_out) 
 889   1        {
 890   2          switch(Control_Data.DeviceRequest.bmRequestType&0x60)
 891   2      	 {
 892   3      	   case 0x00:  //标准请求
 893   3      	   Prints("USB标准请求................................",1);
 894   3      	   switch(Control_Data.DeviceRequest.bmRequestType&0x1F)
 895   3      	    {
 896   4      		 case 0:   //到设备
 897   4      	     switch (Control_Data.DeviceRequest.bRequest)
 898   4      	      {
 899   5      		   case     CLEAR_FEATURE: clear_feature(0);break;
 900   5      		   case       SET_FEATURE: set_feature(0);break;
 901   5      		   case       SET_ADDRESS: set_usb_address();break;          //set_address	           
 902   5      		   case    SET_DESCRIPTOR: set_descriptor();break;           //set_descriptor
 903   5      		   case SET_CONFIGURATION: set_configuration(); break;       //set_configurat               	          
 904   5      	  	   default: break;
 905   5      		  }
 906   4      		 break;
 907   4      		 
 908   4      		 case 1:   //到接口
 909   4      	      switch (Control_Data.DeviceRequest.bRequest)
 910   4      		   {
 911   5      		    case CLEAR_FEATURE:  clear_feature(1);break;
 912   5      		    case   SET_FEATURE:  set_feature(1); break;
 913   5      	        case SET_INTERFACE: set_interface();break;
 914   5      		    default: break;
 915   5      	        }
 916   4      		 break;
 917   4      		 
 918   4      		 case 2:   //到端点
 919   4      		  switch (Control_Data.DeviceRequest.bRequest)
 920   4      		   {
 921   5      		    case CLEAR_FEATURE: clear_feature(2);break;
C51 COMPILER V6.12  USBMOUSE                                                               09/21/2007 12:44:30 PAGE 16  

 922   5      		    case   SET_FEATURE: set_feature(2);break;
 923   5      	        default: break;      
 924   5      		   }
 925   4      		 break;
 926   4      
 927   4      		 default: break;
 928   4      	    }
 929   3            break;
 930   3      
 931   3      	  case 0x20:  //类请求
 932   3            Prints("USB类请求................................",1);
 933   3      	   switch(Control_Data.DeviceRequest.bmRequestType&0x1F)
 934   3      	    {
 935   4      		 case 0:    //接收者为设备
 936   4      	     switch (Control_Data.DeviceRequest.bRequest)
 937   4      	      {             	          
 938   5      	  	   default: break;
 939   5      		  }
 940   4      		 break;
 941   4      
 942   4      		 case 1:   //接收者为接口
 943   4      	      switch (Control_Data.DeviceRequest.bRequest)

⌨️ 快捷键说明

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