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

📄 usbcore.lst

📁 将LPC2148通过自带的USB口配置为USB存储设备.
💻 LST
📖 第 1 页 / 共 5 页
字号:
                           return (FALSE);    /* Only Single HID Interface is supported */
                         }
                         EP0Data.pData = (BYTE *)HID_ReportDescriptor;
                         len = HID_ReportDescSize;
                         break;
                       case HID_PHYSICAL_DESCRIPTOR_TYPE:
                         return (FALSE);      /* HID Physical Descriptor is not supported */
               #endif
  285   3              default:
  286   3                return (FALSE);
  287   3            }
  288   2            break;
  289   2          default:
  290   2            return (FALSE);
  291   2        }
  292   1      
  293   1        if (EP0Data.Count > len) {
  294   2          EP0Data.Count = len;
  295   2        }
  296   1        USB_DataInStage();
  297   1      
  298   1        return (TRUE);
  299   1      }
  300          
  301          
  302          /*
  303           *  Set Configuration USB Request
  304           *    Parameters:      None (global SetupPacket)
  305           *    Return Value:    TRUE - Success, FALSE - Error
  306           */
  307          
  308          __inline BOOL USB_SetConfiguration (void) {
  309   1        USB_COMMON_DESCRIPTOR *pD;
  310   1        DWORD                  alt, n, m;
  311   1      
  312   1        if (SetupPacket.wValue.WB.L) {
  313   2          pD = (USB_COMMON_DESCRIPTOR *)USB_ConfigDescriptor;
  314   2          while (pD->bLength) {
  315   3            switch (pD->bDescriptorType) {
  316   4              case USB_CONFIGURATION_DESCRIPTOR_TYPE:
  317   4                if (((USB_CONFIGURATION_DESCRIPTOR *)pD)->bConfigurationValue == SetupPacket.wValue.WB.L) {
  318   5                  USB_Configuration = SetupPacket.wValue.WB.L;
  319   5                  USB_NumInterfaces = ((USB_CONFIGURATION_DESCRIPTOR *)pD)->bNumInterfaces;
  320   5                  for (n = 0; n < USB_IF_NUM; n++) {
  321   6                    USB_AltSetting[n] = 0;
  322   6                  }
ARM COMPILER V2.50a,  usbcore                                                              04/04/06  11:13:56  PAGE 6   

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

  389          
  390          __inline BOOL USB_SetInterface (void) {
  391   1        USB_COMMON_DESCRIPTOR *pD;
  392   1        DWORD                  ifn, alt, old, msk, n, m;
  393   1        BOOL                   set;
  394   1      
  395   1        if (USB_Configuration == 0) return (FALSE);
  396   1      
  397   1        set = FALSE;
  398   1        pD  = (USB_COMMON_DESCRIPTOR *)USB_ConfigDescriptor;
  399   1        while (pD->bLength) {
  400   2          switch (pD->bDescriptorType) {
  401   3            case USB_CONFIGURATION_DESCRIPTOR_TYPE:
  402   3              if (((USB_CONFIGURATION_DESCRIPTOR *)pD)->bConfigurationValue != USB_Configuration) {
  403   4                (BYTE *)pD += ((USB_CONFIGURATION_DESCRIPTOR *)pD)->wTotalLength;
  404   4                continue;
  405   4              }
  406   3              break;
  407   3            case USB_INTERFACE_DESCRIPTOR_TYPE:
  408   3              ifn = ((USB_INTERFACE_DESCRIPTOR *)pD)->bInterfaceNumber;
  409   3              alt = ((USB_INTERFACE_DESCRIPTOR *)pD)->bAlternateSetting;
  410   3              msk = 0;
  411   3              if ((ifn == SetupPacket.wIndex.WB.L) && (alt == SetupPacket.wValue.WB.L)) {
  412   4                set = TRUE;
  413   4                old = USB_AltSetting[ifn];
  414   4                USB_AltSetting[ifn] = (BYTE)alt;
  415   4              }
  416   3              break;
  417   3            case USB_ENDPOINT_DESCRIPTOR_TYPE:
  418   3              if (ifn == SetupPacket.wIndex.WB.L) {
  419   4                n = ((USB_ENDPOINT_DESCRIPTOR *)pD)->bEndpointAddress & 0x8F;
  420   4                m = (n & 0x80) ? ((1 << 16) << n) : (1 << n);
  421   4                if (alt == SetupPacket.wValue.WB.L) {
  422   5                  USB_EndPointMask |=  m;
  423   5                  USB_EndPointHalt &= ~m;
  424   5                  USB_ConfigEP((USB_ENDPOINT_DESCRIPTOR *)pD);
  425   5                  USB_EnableEP(n);
  426   5                  USB_ResetEP(n);
  427   5                  msk |= m;
  428   5                }
  429   4                else if ((alt == old) && ((msk & m) == 0)) {
  430   5                  USB_EndPointMask &= ~m;
  431   5                  USB_EndPointHalt &= ~m;
  432   5                  USB_DisableEP(n);
  433   5                }
  434   4              }
  435   3              break;
  436   3          }
  437   2          (BYTE *)pD += pD->bLength;
  438   2        }
  439   1        return (set);
  440   1      }
  441          
  442          
  443          /*
  444           *  USB Endpoint 0 Event Callback
  445           *    Parameter:       event
  446           */
  447          
  448          void USB_EndPoint0 (DWORD event) {
  449   1      
  450   1        switch (event) {
  451   2      
  452   2          case USB_EVT_SETUP:
  453   2            USB_SetupStage();
  454   2            USB_DirCtrlEP(SetupPacket.bmRequestType.BM.Dir);
ARM COMPILER V2.50a,  usbcore                                                              04/04/06  11:13:56  PAGE 8   

  455   2            EP0Data.Count = SetupPacket.wLength;
  456   2            switch (SetupPacket.bmRequestType.BM.Type) {
  457   3      
  458   3              case REQUEST_STANDARD:
  459   3                switch (SetupPacket.bRequest) {
  460   4      
  461   4                  case USB_REQUEST_GET_STATUS:
  462   4                    if (!USB_GetStatus()) {
  463   5                      goto stall_i;
  464   5                    }
  465   4                    break;
  466   4      
  467   4                  case USB_REQUEST_CLEAR_FEATURE:
  468   4                    if (!USB_SetClrFeature(0)) {
  469   5                      goto stall_i;
  470   5                    }
  471   4                    USB_StatusInStage();
  472   4      #if USB_FEATURE_EVENT
                             USB_Feature_Event();
               #endif
  475   4                    break;
  476   4      
  477   4                  case USB_REQUEST_SET_FEATURE:
  478   4                    if (!USB_SetClrFeature(1)) {
  479   5                      goto stall_i;
  480   5                    }
  481   4                    USB_StatusInStage();
  482   4      #if USB_FEATURE_EVENT
                             USB_Feature_Event();
               #endif
  485   4                    break;
  486   4      
  487   4                  case USB_REQUEST_SET_ADDRESS:
  488   4                    switch (SetupPacket.bmRequestType.BM.Recipient) {
  489   5                      case REQUEST_TO_DEVICE:
  490   5                        USB_DeviceAddress = 0x80 | SetupPacket.wValue.WB.L;
  491   5                        USB_StatusInStage();
  492   5                        break;
  493   5                      default:
  494   5                        goto stall_i;
  495   5                    }
  496   4                    break;
  497   4      
  498   4                  case USB_REQUEST_GET_DESCRIPTOR:
  499   4                    if (!USB_GetDescriptor()) {
  500   5                      goto stall_i;
  501   5                    }
  502   4                    break;
  503   4      
  504   4                  case USB_REQUEST_SET_DESCRIPTOR:
  505   4      /*stall_o:*/  USB_SetStallEP(0x00);
  506   4                    EP0Data.Count = 0;
  507   4                    break;
  508   4      
  509   4                  case USB_REQUEST_GET_CONFIGURATION:
  510   4                    switch (SetupPacket.bmRequestType.BM.Recipient) {
  511   5                      case REQUEST_TO_DEVICE:
  512   5                        EP0Data.pData = &USB_Configuration;
  513   5                        USB_DataInStage();
  514   5                        break;
  515   5                      default:
  516   5                        goto stall_i;
  517   5                    }
  518   4                    break;
  519   4      
  520   4                  case USB_REQUEST_SET_CONFIGURATION:
ARM COMPILER V2.50a,  usbcore                                                              04/04/06  11:13:56  PAGE 9   

  521   4                    switch (SetupPacket.bmRequestType.BM.Recipient) {
  522   5                      case REQUEST_TO_DEVICE:
  523   5                        if (!USB_SetConfiguration()) {
  524   6                          goto stall_i;
  525   6                        }
  526   5                        USB_StatusInStage();
  527   5      #if USB_CONFIGURE_EVENT
  528   5                        USB_Configure_Event();
  529   5      #endif
  530   5                        break;
  531   5                      default:
  532   5                        goto stall_i;
  533   5                    }
  534   4                    break;
  535   4      
  536   4                  case USB_REQUEST_GET_INTERFACE:
  537   4                    switch (SetupPacket.bmRequestType.BM.Recipient) {
  538   5                      case REQUEST_TO_INTERFACE:
  539   5                        if ((USB_Configuration != 0) &&
  540   5                            (SetupPacket.wIndex.WB.L < USB_NumInterfaces)) {
  541   6                          EP0Data.pData = USB_AltSetting + SetupPacket.wIndex.WB.L;
  542   6                          USB_DataInStage();
  543   6                        } else {
  544   6                          goto stall_i;
  545   6                        }
  546   5                        break;
  547   5                      default:
  548   5                        goto stall_i;
  549   5                    }
  550   4                    break;
  551   4      
  552   4                  case USB_REQUEST_SET_INTERFACE:
  553   4                    switch (SetupPacket.bmRequestType.BM.Recipient) {
  554   5                      case REQUEST_TO_INTERFACE:
  555   5                        if (!USB_SetInterface()) {
  556   6                          goto stall_i;
  557   6                        }
  558   5                        USB_StatusInStage();
  559   5      #if USB_INTERFACE_EVENT
                                 USB_Interface_Event();
               #endif
  562   5                        break;

⌨️ 快捷键说明

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