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

📄 usbmouse.lst

📁 USB Mouse
💻 LST
📖 第 1 页 / 共 5 页
字号:
 515          void set_usb_address(void)
 516          {
 517   1       usb_flags.flags.set_addr=1; 
 518   1       set_usb_addr(Control_Data.DeviceRequest.wValue); 
 519   1       while(select_endpoint(1)&0x01);
 520   1       write_endpoint_buff(1,0,0);
 521   1       while(select_endpoint(1)&0x01);
 522   1       usb_flags.flags.usb_endp0_in=0;
 523   1       usb_flags.flags.setup_packet_out=0;
 524   1      }
 525          /******************************************************************************/
 526          
 527          /**************************获取状态响应*****************************************/
 528          void get_status(uint8 receiver)
 529          {
 530   1       uint8 status[2];
 531   1       switch (receiver)
 532   1        {
 533   2         case 0:                        //获取设备状态
 534   2          status[0]=0x00;
 535   2          status[1]=0x00;
 536   2          break;
 537   2         case 1:                        //获取接口状态
 538   2          status[0]=0x00;
 539   2          status[0]=0x00;
 540   2          break;
 541   2         case 2:                        //获取端点状态
 542   2          status[0]=0x00;
 543   2          status[1]=0x00;
 544   2          break;
 545   2         }
 546   1        write_endpoint_buff(1,2,status);
 547   1        usb_flags.flags.usb_endp0_in=0;
 548   1      }
 549          /******************************************************************************/
 550          
C51 COMPILER V7.06   USBMOUSE                                                              12/10/2007 14:20:43 PAGE 10  

 551          /*********************清除特性*******************************************/
 552          void clear_feature(uint8 receiver)    
 553          {
 554   1       Prints("    清除特性.\r\n");
 555   1       receiver=0;
 556   1       write_endpoint_buff(1,0,0);
 557   1       usb_flags.flags.usb_endp0_in=0;
 558   1       usb_flags.flags.setup_packet_out=0;
 559   1      }
 560          /******************************************************************************/
 561          
 562          /*******************设置特性**************************************************/
 563          void set_feature(uint8 receiver)
 564          {
 565   1       Prints("    设置特性.\r\n");
 566   1       receiver=0;
 567   1       write_endpoint_buff(1,0,0);
 568   1       usb_flags.flags.usb_endp0_in=0;
 569   1       usb_flags.flags.setup_packet_out=0;
 570   1      }
 571          /******************************************************************************/
 572          
 573          /*****************************设置描述*****************************************/
 574          void set_descriptor(void)
 575          {
 576   1       Prints("    设置描述符.\r\n");
 577   1       usb_flags.flags.usb_endp0_in=0;
 578   1       usb_flags.flags.setup_packet_out=0;
 579   1      }
 580          /******************************************************************************/
 581          
 582          /***************************设置配置*******************************************/
 583          void set_configuration(void)
 584          {
 585   1       Prints("    设置配置.\r\n");
 586   1       write_endpoint_buff(1,0,0);
 587   1       usb_flags.flags.usb_endp0_in=0;
 588   1       usb_flags.flags.setup_packet_out=0;
 589   1      }
 590          /******************************************************************************/
 591          
 592          /************************获取配置状态******************************************/
 593          void get_configuration(void)
 594          { 
 595   1       uint8 value=0x01;
 596   1       Prints("    获取配置.\r\n");
 597   1       write_endpoint_buff(1,1,&value);
 598   1       usb_flags.flags.usb_endp0_in=0;
 599   1      }
 600          /******************************************************************************/
 601          
 602          /****************************设置接口************************************/
 603          void set_interface(void)
 604          {
 605   1       Prints("    设置接口.\r\n");
 606   1       write_endpoint_buff(1,0,0);
 607   1       usb_flags.flags.usb_endp0_in=0;
 608   1       usb_flags.flags.setup_packet_out=0;
 609   1      }
 610          /******************************************************************************/
 611          
 612          /***************************获取接口状态***************************************/
C51 COMPILER V7.06   USBMOUSE                                                              12/10/2007 14:20:43 PAGE 11  

 613          void get_interface(void)
 614          {
 615   1       uint8 value=0x01;
 616   1       Prints("    获取接口.\r\n");
 617   1       write_endpoint_buff(1,1,&value);
 618   1       usb_flags.flags.usb_endp0_in=0;
 619   1      }
 620          /******************************************************************************/
 621          
 622          /***********************获取描述符*********************************************/
 623          void get_descriptor(void)
 624          {
 625   1       Prints("    获取描述符.\r\n");
 626   1        if(!usb_flags.flags.not_end)
 627   1           {
 628   2            switch(MSB(Control_Data.DeviceRequest.wValue))
 629   2                 {
 630   3              case DEVICE_DESCRIPTOR:
 631   3                           Prints("        获取设备描述符.\r\n");
 632   3                       Control_Data.wCount=sizeof(DEVICE_DESCRIPTOR_STRUCT);
 633   3                       Control_Data.pData=(uint8 *)(&device_descriptor);
 634   3                   break;
 635   3              case CONFIGURATION_DESCRIPTOR:
 636   3                               Prints("        获取配置描述符.\r\n");
 637   3                   Control_Data.wCount=SWAP16(con_int_endp_descriptor.configuration_descriptor.wTotalLength);
 638   3                               Control_Data.pData=(uint8 *)(&con_int_endp_descriptor);
 639   3                   if(Control_Data.wLength<Control_Data.wCount)Control_Data.wCount=Control_Data.wLength;
 640   3                   break;
 641   3                      case STRING_DESCRIPTOR:
 642   3                           Prints("        获取字符串描述符.\r\n");
 643   3                               switch(LSB(Control_Data.DeviceRequest.wValue))
 644   3                                {
 645   4                                 case 0:
 646   4                                  Prints("            获取语言ID.\r\n");
 647   4                                  Control_Data.wCount=LANGUAGE_ID[0];
 648   4                      Control_Data.pData=LANGUAGE_ID;
 649   4                                  break;
 650   4      
 651   4                                 case 1:
 652   4                                  Prints("            获取厂商字符串.\r\n");
 653   4                                  Control_Data.wCount=ManufacturerString[0];
 654   4                      Control_Data.pData=ManufacturerString;
 655   4                                  break;
 656   4      
 657   4                                 case 2:
 658   4                                  Prints("            获取产品字符串.\r\n");
 659   4                                  Control_Data.wCount=ProducterString[0];
 660   4                      Control_Data.pData=ProducterString;
 661   4                                  break;
 662   4      
 663   4                                 case 3:
 664   4                       Prints("            获取设备序列号.\r\n");
 665   4                                   Control_Data.wCount=device_serial_number[0];
 666   4                                   Control_Data.pData=device_serial_number;
 667   4                                 break;
 668   4      
 669   4                                 default: break;
 670   4                                }
 671   3                               break;
 672   3                       default:
 673   3                           Prints("       获取其它描述符..................描述符索引为:");
 674   3                               PrintLongInt(MSB(Control_Data.DeviceRequest.wValue));
C51 COMPILER V7.06   USBMOUSE                                                              12/10/2007 14:20:43 PAGE 12  

 675   3                               Prints("\r\n"); 
 676   3                        break;
 677   3                      }
 678   2            if(Control_Data.wLength<Control_Data.wCount)Control_Data.wCount=Control_Data.wLength;
 679   2               }
 680   1              //写数据到D12输入端点
 681   1          if(Control_Data.wCount>=MAX_CONTROL_DATA_SIZE)
 682   1           {
 683   2                write_endpoint_buff(1,MAX_CONTROL_DATA_SIZE,Control_Data.pData);
 684   2                Control_Data.pData+=MAX_CONTROL_DATA_SIZE;
 685   2            Control_Data.wCount-=MAX_CONTROL_DATA_SIZE;
 686   2                if(usb_flags.flags.set_addr)usb_flags.flags.not_end=1;
 687   2                 else usb_flags.flags.usb_endp0_in=0;
 688   2                return;
 689   2               }
 690   1          else
 691   1           {
 692   2                write_endpoint_buff(1,Control_Data.wCount,Control_Data.pData);
 693   2            usb_flags.flags.setup_packet_in=0;
 694   2                usb_flags.flags.usb_endp0_in=0;
 695   2                return;
 696   2               }      
 697   1      }
 698          /******************************************************************************/
 699          
 700          /*********************发到接口的获取描述符**************************************/
 701          void get_descriptor_interface(void)
 702          {
 703   1       Prints("    获取描述符(从接口).\r\n");
 704   1        if(!usb_flags.flags.not_end)
 705   1           {
 706   2            switch(MSB(Control_Data.DeviceRequest.wValue))
 707   2                 {
 708   3              case HID_DESCRIPTOR:
 709   3                           Prints("        获取HID描述符.\r\n");
 710   3                       Control_Data.wCount=sizeof(HID_DESCRIPTOR_STRUCT);
 711   3                       //Control_Data.pData=(uint8 *)(&hid_descriptor);
 712   3                   break;
 713   3              case REPORT_DESCRIPTOR:
 714   3                               Prints("        获取报告描述符.\r\n");
 715   3                   Control_Data.wCount=SWAP16(sizeof(MouseReportDescriptor));
 716   3                               Control_Data.pData=(uint8 *)(MouseReportDescriptor);
 717   3                   if(Control_Data.wLength<Control_Data.wCount)Control_Data.wCount=Control_Data.wLength;
 718   3                   break;
 719   3                      case PHYSICAL_DESCRIPTOR:
 720   3                           Prints("        获取物理描述符.\r\n");
 721   3                               break;
 722   3                       default:
 723   3                           Prints("       获取其它描述符..................描述符索引为:");
 724   3                               PrintLongInt(MSB(Control_Data.DeviceRequest.wValue));
 725   3                               Prints("\r\n"); 
 726   3                        break;
 727   3                      }
 728   2            if(Control_Data.wLength<Control_Data.wCount)Control_Data.wCount=Control_Data.wLength;
 729   2               }
 730   1              //写数据到D12输入端点
 731   1          if(Control_Data.wCount>=MAX_CONTROL_DATA_SIZE)
 732   1           {
 733   2                write_endpoint_buff(1,MAX_CONTROL_DATA_SIZE,Control_Data.pData);
 734   2                Control_Data.pData+=MAX_CONTROL_DATA_SIZE;
 735   2            Control_Data.wCount-=MAX_CONTROL_DATA_SIZE;
 736   2                if(usb_flags.flags.set_addr)usb_flags.flags.not_end=1;
C51 COMPILER V7.06   USBMOUSE                                                              12/10/2007 14:20:43 PAGE 13  

 737   2                 else usb_flags.flags.usb_endp0_in=0;
 738   2                return;
 739   2               }
 740   1          else
 741   1           {
 742   2                write_endpoint_buff(1,Control_Data.wCount,Control_Data.pData);
 743   2            usb_flags.flags.setup_packet_in=0;
 744   2                usb_flags.flags.usb_endp0_in=0;
 745   2                return;
 746   2               }      
 747   1      }
 748          /******************************************************************************/
 749          
 750          /************************终端点0输出中断处理************************************/
 751          void endp0_out(void)
 752          {
 753   1       Last_Status.Register=read_last_status(0);
 754   1       if(Last_Status.Status.setup_packet)
 755   1        {
 756   2         Control_Data.wLength=0;
 757   2         Control_Data.wCount=0;
 758   2         if(read_endpoint_buff(0,sizeof(Control_Data.DeviceRequest),(uint8 *)(&(Control_Data.DeviceRequest)))!=s
             -izeof(REQUESTCMD))
 759   2          {
 760   3               set_endpoint_status(0,0);
 761   3               set_endpoint_status(1,0);
 762   3               return;
 763   3              }
 764   2        Control_Data.DeviceRequest.wValue=SWAP16(Control_Data.DeviceRequest.wValue);
 765   2        Control_Data.DeviceRequest.wIndex=SWAP16(Control_Data.DeviceRequest.wIndex);
 766   2        Control_Data.DeviceRequest.wLength=SWAP16(Control_Data.DeviceRequest.wLength);
 767   2      
 768   2        ack_setup(0);
 769   2        ack_setup(1);
 770   2        select_endpoint(0);
 771   2        clear_buffer(); 
 772   2        
 773   2        Control_Data.wLength=Control_Data.DeviceRequest.wLength;
 774   2        usb_flags.flags.not_end=0;
 775   2        usb_flags.flags.usb_endp0_in=1;

⌨️ 快捷键说明

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