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

📄 usbimpl.lst

📁 C8051F120与串口、并口、D12、USB、LCD应用
💻 LST
📖 第 1 页 / 共 3 页
字号:
 506   1              PRINT("set_address ");
 507   1      
 508   1              D12_SetAddressEnable((u8)(ControlData.DevRequest.wValue &
 509   1                      DEVICE_ADDRESS_MASK), 1);
 510   1              single_transmit(0, 0);
 511   1      }
 512          void get_descriptor(void)
 513          {
 514   1              u8 bDescriptor = ControlData.DevRequest.wValue>>8;
 515   1      
 516   1      //      PRINT("get_descriptor:");
 517   1              if (bDescriptor == USB_DEVICE_DESCRIPTOR_TYPE)
 518   1              {
 519   2                      PRINT("device ");
 520   2                      code_transmit((u8 code *)&DeviceDescr, sizeof(DEVICE_DESCRIPTOR));
 521   2              } 
 522   1              else if (bDescriptor == USB_CONFIGURATION_DESCRIPTOR_TYPE) 
 523   1              {
 524   2                      PRINT("Config ");
 525   2                      code_transmit((u8 code *)&ConfigDescr, CONFIG_DESCRIPTOR_LENGTH);
 526   2              } 
 527   1              else if (bDescriptor == USB_INTERFACE_DESCRIPTOR_TYPE)
 528   1              {
 529   2                      PRINT("interface ");
 530   2                      code_transmit((u8 code *)&InterfaceDescr, sizeof(INTERFACE_DESCRIPTOR));
 531   2              }
 532   1      #ifdef _HID_DEVICE
 533   1              else if (bDescriptor == USB_HID_DESCRIPTOR_TYPE)
 534   1              {
 535   2                      PRINT("hid ");
 536   2                      code_transmit((u8 code *)&HidDescr, sizeof(HID_DESCRIPTOR));
 537   2              }
 538   1              else if (bDescriptor == USB_REPORT_DESCRIPTOR_TYPE)
 539   1              {
 540   2                      PRINT("report ");
 541   2                      code_transmit((u8 code *)szHidReport, 0x34);
 542   2              }
 543   1      #endif //_HID_DEVICE
 544   1              else if(bDescriptor == USB_STRING_DESCRIPTOR_TYPE) //获取字符描述符
 545   1              {
 546   2                      PRINT("string");
 547   2                      switch(LSB(ControlData.DevRequest.wValue))  //获取描述符索引
 548   2                      {
 549   3                      case 0:
 550   3                              PRINT("0 ");
 551   3                              code_transmit((u8 code *)&StringLANGID, StringLANGID[0]);
C51 COMPILER V7.01  USBIMPL                                                                06/30/2007 11:42:51 PAGE 10  

 552   3                              break;
 553   3                      case 1:
 554   3                              PRINT("1 ");
 555   3                              code_transmit((u8 code *)&szManufacturer, szManufacturer[0]);
 556   3                              break;
 557   3                      case 2:
 558   3                              PRINT("2 ");
 559   3                              code_transmit((u8 code *)&szProduct, szProduct[0]);
 560   3                              break;
 561   3                      case 3:
 562   3                              PRINT("3 ");
 563   3                              code_transmit((u8 code *)&szSerialNumber, szSerialNumber[0]);
 564   3                              break;
 565   3                      case 4:
 566   3                              PRINT("4 ");
 567   3                              code_transmit((u8 code *)&szConfiguration, szConfiguration[0]);
 568   3                              break;
 569   3                      case 5:
 570   3                              PRINT("5 ");
 571   3                              code_transmit((u8 code *)&szInterface, szInterface[0]);
 572   3                              break;
 573   3                      case 6:
 574   3                              PRINT("6 ");
 575   3                              code_transmit((u8 code *)&szUserInfo, szUserInfo[0]);
 576   3                              break;
 577   3                      default:
 578   3                              PRINT("default ");
 579   3                              code_transmit((u8 code *)&StringLANGID, 4);
 580   3                              break;
 581   3                      }
 582   2              }
 583   1              else
 584   1              {
 585   2                      stall_ep0();
 586   2              }
 587   1      }
 588          void get_configuration(void)
 589          {
 590   1              u8 c = bEppflags.flags.config;
 591   1      //      PRINT("get_config ");
 592   1              single_transmit(&c, 1);
 593   1      }
 594          
 595          void set_configuration(void)
 596          {
 597   1              PRINT("set_config ");
 598   1              if (ControlData.DevRequest.wValue == 0) 
 599   1              {
 600   2                      /* put device in unconfigured state */
 601   2                      single_transmit(0, 0);
 602   2                      DISABLE_INTERRUPT;
 603   2                      bEppflags.flags.config = 0;
 604   2                      ENABLE_INTERRUPT;
 605   2                      init_unconfig();
 606   2              } 
 607   1              else if (ControlData.DevRequest.wValue == 1) 
 608   1              {
 609   2                      /* Configure device */
 610   2                      single_transmit(0, 0);
 611   2                      init_unconfig();
 612   2                      init_config();
 613   2                      DISABLE_INTERRUPT;
C51 COMPILER V7.01  USBIMPL                                                                06/30/2007 11:42:51 PAGE 11  

 614   2                      bEppflags.flags.config = 1;
 615   2                      ENABLE_INTERRUPT;
 616   2              } else
 617   1                      stall_ep0();
 618   1      }
 619          void get_interface(void)
 620          {
 621   1              u8 txdat = 0; /* Only/Current interface = 0 */
 622   1      //      PRINT("get_interface ");
 623   1      
 624   1              single_transmit(&txdat, 1);
 625   1      }
 626          
 627          void set_interface(void)
 628          {
 629   1              PRINT("set_interface ");
 630   1              if (ControlData.DevRequest.wValue == 0 
 631   1                      && ControlData.DevRequest.wIndex == 0)
 632   1                      single_transmit(0, 0);
 633   1              else
 634   1                      stall_ep0();
 635   1      }
 636          
 637          ///////////////////////////////////////////////////////////////
 638          //              follow is custom request, read_write_register commmand code is 0xC
 639          /*
 640          void get_firmware_version()
 641          {
 642                  u8 i = 0x1;
 643                  PRINT("get_firmware_version");
 644          
 645                  D12_WriteEndpointBuffer(1, &i, 1);
 646          }
 647          
 648          void get_buffer_size()
 649          {
 650                  u8 i[4] = {0, 0, 0, 0};
 651          
 652                  PRINT("get_buffer_size");
 653          
 654                  i[0] = EP1_PACKET_SIZE;
 655                  D12_WriteEndpointBuffer(1, i, 4);
 656          }
 657          
 658          void trans_data()
 659          {
 660                  u8 len, epstatus;
 661                  PRINT("trans_data");
 662          
 663                  if (ControlData.buffer[5] == 0x81)
 664                  {
 665                          //device to pc
 666                          D12_WriteEndpointBuffer(3, Ep1Buf, ControlData.buffer[3]);
 667                  }
 668                  if (ControlData.buffer[5] == 0x80)
 669                  {
 670                          epstatus = D12_ReadEndpointStatus(2);
 671                          epstatus &= 0x60;
 672                          if (epstatus == 0x60)
 673                                  len = D12_ReadEndpointBuffer(4, Ep1Buf, EP1_PACKET_SIZE);
 674                  }
 675                  single_transmit(0, 0);
C51 COMPILER V7.01  USBIMPL                                                                06/30/2007 11:42:51 PAGE 12  

 676          }
 677          */
 678          //custom request
 679          void read_write_register()
 680          {
 681   1      //      u8 i, len, epstatus;
 682   1      /*
 683   1              PRINT("read_write_register");
 684   1      
 685   1              if (ControlData.DevRequest.bmRequestType & (u8)USB_ENDPOINT_DIRECTION_MASK)
 686   1              {
 687   1                      if (ControlData.DevRequest.wIndex == GET_FIRMWARE_VERSION
 688   1                              && ControlData.DevRequest.wValue == 0
 689   1                              && ControlData.DevRequest.wLength == 1)
 690   1                              get_firmware_version(); //get firmware version, transform 1byte
 691   1                      else if (ControlData.DevRequest.wIndex == GET_BUFFER_SIZE
 692   1                                      && ControlData.DevRequest.wValue == 0
 693   1                                      && ControlData.DevRequest.wLength == 4)
 694   1                              get_buffer_size();      //get buffer size, transform 4 bytes
 695   1                      else
 696   1                              stall_ep0();
 697   1              }
 698   1              else
 699   1              {
 700   1                      if (ControlData.DevRequest.wIndex == TRANS_REQUEST 
 701   1                              && ControlData.DevRequest.wValue == 0
 702   1                              && ControlData.DevRequest.wLength == 6)
 703   1                              trans_data();   //transform data, 6 bytes
 704   1                      else
 705   1                              stall_ep0();
 706   1              }
 707   1              */
 708   1      }
 709          
 710          //////////////////////////////////////////////////////////
 711          //follow code is used for hid device
 712          #ifdef _HID_DEVICE
 713          void get_report()
 714          {
 715   1              PRINT("get_report ");
 716   1      
 717   1              code_transmit(szHidReport, 52);
 718   1      }
 719          
 720          void get_idle()
 721          {
 722   1              PRINT("get_idle ");
 723   1      }
 724          
 725          void get_protocol()
 726          {
 727   1              PRINT("get_idle ");
 728   1      }
 729          
 730          void set_report()
 731          {
 732   1              PRINT("set_report ");
 733   1      }
 734          
 735          void set_idle()
 736          {
 737   1              PRINT("set_idle ");
C51 COMPILER V7.01  USBIMPL                                                                06/30/2007 11:42:51 PAGE 13  

 738   1              stall_ep0();
 739   1      }
 740          
 741          void set_protocol()
 742          {
 743   1              PRINT("set_protocol ");
 744   1      }
 745          #endif //_HID_DEVICE


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1068    ----
   CONSTANT SIZE    =    535    ----
   XDATA SIZE       =      2      16
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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