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

📄 usbcore.lst

📁 针对飞利浦LPC214x的虚拟串口程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
  265   3                  }
  266   2                  break;
  267   2                  default:
  268   2                      return (FALSE);
  269   2          }
  270   1          
  271   1          if (EP0Data.Count > len) {
  272   2              EP0Data.Count = len;
  273   2          }
  274   1          USB_DataInStage();
  275   1          
  276   1          return (TRUE);
  277   1      }
  278          
  279          
  280          /*
  281          *  Set Configuration USB Request
  282          *    Parameters:      None (global SetupPacket)
  283          *    Return Value:    TRUE - Success, FALSE - Error
  284          */
  285          
  286          __inline BOOL USB_SetConfiguration (void) {
  287   1          USB_COMMON_DESCRIPTOR *pD;
  288   1          DWORD                  alt, n, m;
  289   1          
  290   1          if (SetupPacket.wValue.WB.L) {
  291   2              pD = (USB_COMMON_DESCRIPTOR *)USB_ConfigDescriptor;
  292   2              while (pD->bLength) {
  293   3                  switch (pD->bDescriptorType) {
  294   4                  case USB_CONFIGURATION_DESCRIPTOR_TYPE:
  295   4                      if (((USB_CONFIGURATION_DESCRIPTOR *)pD)->bConfigurationValue == SetupPacket.wValue.WB.L) {
  296   5                          USB_Configuration = SetupPacket.wValue.WB.L;
  297   5                          USB_NumInterfaces = ((USB_CONFIGURATION_DESCRIPTOR *)pD)->bNumInterfaces;
  298   5                          for (n = 0; n < USB_IF_NUM; n++) {
  299   6                              USB_AltSetting[n] = 0;
  300   6                          }
  301   5                          for (n = 1; n < 16; n++) {
  302   6                              if (USB_EndPointMask & (1 << n)) {
  303   7                                  USB_DisableEP(n);
  304   7                              }
  305   6                              if (USB_EndPointMask & ((1 << 16) << n)) {
  306   7                                  USB_DisableEP(n | 0x80);
  307   7                              }
  308   6                          }
  309   5                          USB_EndPointMask = 0x00010001;
  310   5                          USB_EndPointHalt = 0x00000000;
  311   5                          USB_Configure(TRUE);
  312   5                          if (((USB_CONFIGURATION_DESCRIPTOR *)pD)->bmAttributes & USB_CONFIG_SELF_POWERED) {
  313   6                              USB_DeviceStatus |=  USB_GETSTATUS_SELF_POWERED;
  314   6                          } else {
  315   6                              USB_DeviceStatus &= ~USB_GETSTATUS_SELF_POWERED;
  316   6                          }
  317   5                      } else {
  318   5                          (BYTE *)pD += ((USB_CONFIGURATION_DESCRIPTOR *)pD)->wTotalLength;
  319   5                          continue;
  320   5                      }
  321   4                      break;
  322   4                  case USB_INTERFACE_DESCRIPTOR_TYPE:
ARM COMPILER V2.53,  usbcore                                                               09/06/07  15:42:24  PAGE 6   

  323   4                      alt = ((USB_INTERFACE_DESCRIPTOR *)pD)->bAlternateSetting;
  324   4                      break;
  325   4                  case USB_ENDPOINT_DESCRIPTOR_TYPE:
  326   4                      if (alt == 0) {
  327   5                          n = ((USB_ENDPOINT_DESCRIPTOR *)pD)->bEndpointAddress & 0x8F;
  328   5                          m = (n & 0x80) ? ((1 << 16) << n) : (1 << n);
  329   5                          USB_EndPointMask |= m;
  330   5                          USB_ConfigEP((USB_ENDPOINT_DESCRIPTOR *)pD);
  331   5                          USB_EnableEP(n);
  332   5                          USB_ResetEP(n);
  333   5                      }
  334   4                      break;
  335   4                  }
  336   3                  (BYTE *)pD += pD->bLength;
  337   3              }
  338   2          }
  339   1          else {
  340   2              USB_Configuration = 0;
  341   2              for (n = 1; n < 16; n++) {
  342   3                  if (USB_EndPointMask & (1 << n)) {
  343   4                      USB_DisableEP(n);
  344   4                  }
  345   3                  if (USB_EndPointMask & ((1 << 16) << n)) {
  346   4                      USB_DisableEP(n | 0x80);
  347   4                  }
  348   3              }
  349   2              USB_EndPointMask  = 0x00010001;
  350   2              USB_EndPointHalt  = 0x00000000;
  351   2              USB_Configure(FALSE);
  352   2          }
  353   1          
  354   1          if (USB_Configuration == SetupPacket.wValue.WB.L) {
  355   2              return (TRUE);
  356   2          } else {
  357   2              return (FALSE);
  358   2          }
  359   1      }
  360          
  361          
  362          /*
  363          *  Set Interface USB Request
  364          *    Parameters:      None (global SetupPacket)
  365          *    Return Value:    TRUE - Success, FALSE - Error
  366          */
  367          
  368          __inline BOOL USB_SetInterface (void) {
  369   1          USB_COMMON_DESCRIPTOR *pD;
  370   1          DWORD                  ifn, alt, old, msk, n, m;
  371   1          BOOL                   set;
  372   1          
  373   1          if (USB_Configuration == 0) return (FALSE);
  374   1          
  375   1          set = FALSE;
  376   1          pD  = (USB_COMMON_DESCRIPTOR *)USB_ConfigDescriptor;
  377   1          while (pD->bLength) {
  378   2              switch (pD->bDescriptorType) {
  379   3              case USB_CONFIGURATION_DESCRIPTOR_TYPE:
  380   3                  if (((USB_CONFIGURATION_DESCRIPTOR *)pD)->bConfigurationValue != USB_Configuration) {
  381   4                      (BYTE *)pD += ((USB_CONFIGURATION_DESCRIPTOR *)pD)->wTotalLength;
  382   4                      continue;
  383   4                  }
  384   3                  break;
  385   3              case USB_INTERFACE_DESCRIPTOR_TYPE:
  386   3                  ifn = ((USB_INTERFACE_DESCRIPTOR *)pD)->bInterfaceNumber;
  387   3                  alt = ((USB_INTERFACE_DESCRIPTOR *)pD)->bAlternateSetting;
  388   3                  msk = 0;
ARM COMPILER V2.53,  usbcore                                                               09/06/07  15:42:24  PAGE 7   

  389   3                  if ((ifn == SetupPacket.wIndex.WB.L) && (alt == SetupPacket.wValue.WB.L)) {
  390   4                      set = TRUE;
  391   4                      old = USB_AltSetting[ifn];
  392   4                      USB_AltSetting[ifn] = (BYTE)alt;
  393   4                  }
  394   3                  break;
  395   3              case USB_ENDPOINT_DESCRIPTOR_TYPE:
  396   3                  if (ifn == SetupPacket.wIndex.WB.L) {
  397   4                      n = ((USB_ENDPOINT_DESCRIPTOR *)pD)->bEndpointAddress & 0x8F;
  398   4                      m = (n & 0x80) ? ((1 << 16) << n) : (1 << n);
  399   4                      if (alt == SetupPacket.wValue.WB.L) {
  400   5                          USB_EndPointMask |=  m;
  401   5                          USB_EndPointHalt &= ~m;
  402   5                          USB_ConfigEP((USB_ENDPOINT_DESCRIPTOR *)pD);
  403   5                          USB_EnableEP(n);
  404   5                          USB_ResetEP(n);
  405   5                          msk |= m;
  406   5                      }
  407   4                      else if ((alt == old) && ((msk & m) == 0)) {
  408   5                          USB_EndPointMask &= ~m;
  409   5                          USB_EndPointHalt &= ~m;
  410   5                          USB_DisableEP(n);
  411   5                      }
  412   4                  }
  413   3                  break;
  414   3              }
  415   2              (BYTE *)pD += pD->bLength;
  416   2          }
  417   1          return (set);
  418   1      }
  419          
  420          
  421          /*
  422          *  USB Endpoint 0 Event Callback
  423          *    Parameter:       event
  424          */
  425          
  426          void USB_EndPoint0 (DWORD event) {
  427   1          
  428   1          BYTE UARTSettingCmd, UARTSettingData;
  429   1          
  430   1          switch (event) {
  431   2          case USB_EVT_SETUP:
  432   2              USB_SetupStage();
  433   2              USB_DirCtrlEP(SetupPacket.bmRequestType.BM.Dir);
  434   2              EP0Data.Count = SetupPacket.wLength;
  435   2              switch (SetupPacket.bmRequestType.BM.Type) {
  436   3                  
  437   3              case REQUEST_STANDARD:
  438   3                  switch (SetupPacket.bRequest) {
  439   4                      
  440   4                  case USB_REQUEST_GET_STATUS:
  441   4                      if (!USB_GetStatus()) {
  442   5                          goto stall_i;
  443   5                      }
  444   4                      break;
  445   4                      
  446   4                  case USB_REQUEST_CLEAR_FEATURE:
  447   4                      if (!USB_SetClrFeature(0)) {
  448   5                          goto stall_i;
  449   5                      }
  450   4                      USB_StatusInStage();
  451   4      #if USB_FEATURE_EVENT
                               USB_Feature_Event();
               #endif
  454   4                      break;              
ARM COMPILER V2.53,  usbcore                                                               09/06/07  15:42:24  PAGE 8   

  455   4                      
  456   4                  case USB_REQUEST_SET_FEATURE:
  457   4                      if (!USB_SetClrFeature(1)) {
  458   5                          goto stall_i;
  459   5                      }
  460   4                      USB_StatusInStage();
  461   4      #if USB_FEATURE_EVENT
                               USB_Feature_Event();
               #endif
  464   4                      break;              
  465   4                      
  466   4                  case USB_REQUEST_SET_ADDRESS:
  467   4                      switch (SetupPacket.bmRequestType.BM.Recipient) {
  468   5                      case REQUEST_TO_DEVICE:
  469   5                          USB_DeviceAddress = 0x80 | SetupPacket.wValue.WB.L;
  470   5                          USB_StatusInStage();
  471   5                          break;
  472   5                      default:
  473   5                          goto stall_i;
  474   5                      }
  475   4                      break;
  476   4                      
  477   4                      case USB_REQUEST_GET_DESCRIPTOR:
  478   4                          if (!USB_GetDescriptor()) {
  479   5                              goto stall_i;
  480   5                          }                  
  481   4                          break;              
  482   4                          
  483   4                      case USB_REQUEST_SET_DESCRIPTOR:
  484   4                          /*stall_o:*/  USB_SetStallEP(0x00);
  485   4                          EP0Data.Count = 0;
  486   4                          break;
  487   4                          
  488   4                      case USB_REQUEST_GET_CONFIGURATION:
  489   4                          switch (SetupPacket.bmRequestType.BM.Recipient) {
  490   5                          case REQUEST_TO_DEVICE:
  491   5                              EP0Data.pData = &USB_Configuration;
  492   5                              USB_DataInStage();
  493   5                              break;
  494   5                          default:
  495   5                              goto stall_i;
  496   5                          }
  497   4                          break;
  498   4                          
  499   4                          case USB_REQUEST_SET_CONFIGURATION:
  500   4                              switch (SetupPacket.bmRequestType.BM.Recipient) {
  501   5                              case REQUEST_TO_DEVICE:
  502   5                                  if (!USB_SetConfiguration()) {
  503   6                                      goto stall_i;
  504   6                                  }
  505   5                                  USB_StatusInStage();
  506   5      #if USB_CONFIGURE_EVENT
  507   5                                  USB_Configure_Event();
  508   5      #endif
  509   5                                  break;
  510   5                              default:
  511   5                                  goto stall_i;
  512   5                              }
  513   4                              break;              
  514   4                              
  515   4                              case USB_REQUEST_GET_INTERFACE:
  516   4                                  switch (SetupPacket.bmRequestType.BM.Recipient) {
  517   5                                  case REQUEST_TO_INTERFACE:
  518   5                                      if ((USB_Configuration != 0) && 
  519   5                                          (SetupPacket.wIndex.WB.L < USB_NumInterfaces)) {
  520   6                                          EP0Data.pData = USB_AltSetting + SetupPacket.wIndex.WB.L;
ARM COMPILER V2.53,  usbcore                                                               09/06/07  15:42:24  PAGE 9   

  521   6                                          USB_DataInStage();
  522   6                                      } else {
  523   6                                          goto stall_i;
  524   6                                      }
  525   5                                      break;
  526   5                                  default:
  527   5                                      goto stall_i;
  528   5                                  }
  529   4                                  break;              
  530   4                                  
  531   4                                  case USB_REQUEST_SET_INTERFACE:
  532   4                                      switch (SetupPacket.bmRequestType.BM.Recipient) {
  533   5                                      case REQUEST_TO_INTERFACE:
  534   5                                          if (!USB_SetInterface()) {
  535   6                                              goto stall_i;
  536   6                                          }
  537   5                                          USB_StatusInStage();
  538   5      #if USB_INTERFACE_EVENT

⌨️ 快捷键说明

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