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

📄 usbcore.lst

📁 usb声卡,采用phlips LPC2148控制器.
💻 LST
📖 第 1 页 / 共 5 页
字号:
  276   2            switch (SetupPacket.wValue.WB.H) {
  277   3      #if USB_HID
                       case HID_HID_DESCRIPTOR_TYPE:
                         if (SetupPacket.wIndex.WB.L != USB_HID_IF_NUM) {
                           return (FALSE);    /* Only Single HID Interface is supported */
                         }
                         EP0Data.pData = (BYTE *)USB_ConfigDescriptor + HID_DESC_OFFSET;
                         len = HID_DESC_SIZE;
                         break;
                       case HID_REPORT_DESCRIPTOR_TYPE:
                         if (SetupPacket.wIndex.WB.L != USB_HID_IF_NUM) {
                           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
  295   3              default:
  296   3                return (FALSE);
  297   3            }
  298   2            break;
  299   2          default:
  300   2            return (FALSE);
  301   2        }
  302   1      
  303   1        if (EP0Data.Count > len) {
  304   2          EP0Data.Count = len;
  305   2        }
  306   1        USB_DataInStage();
  307   1      
  308   1        return (TRUE);
  309   1      }
  310          
  311          
  312          /*
  313           *  Set Configuration USB Request
  314           *    Parameters:      None (global SetupPacket)
  315           *    Return Value:    TRUE - Success, FALSE - Error
  316           */
  317          
  318          __inline BOOL USB_SetConfiguration (void) {
  319   1        USB_COMMON_DESCRIPTOR *pD;
  320   1        DWORD                  alt, n, m;
  321   1      
  322   1        if (SetupPacket.wValue.WB.L) {
ARM COMPILER V2.50a,  usbcore                                                              27/03/06  17:22:53  PAGE 6   

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

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

  455           *    Parameter:       event
  456           */
  457          
  458          void USB_EndPoint0 (DWORD event) {
  459   1      
  460   1        switch (event) {
  461   2      
  462   2          case USB_EVT_SETUP:
  463   2            USB_SetupStage();
  464   2            USB_DirCtrlEP(SetupPacket.bmRequestType.BM.Dir);
  465   2            EP0Data.Count = SetupPacket.wLength;
  466   2            switch (SetupPacket.bmRequestType.BM.Type) {
  467   3      
  468   3              case REQUEST_STANDARD:
  469   3                switch (SetupPacket.bRequest) {
  470   4      
  471   4                  case USB_REQUEST_GET_STATUS:
  472   4                    if (!USB_GetStatus()) {
  473   5                      goto stall_i;
  474   5                    }
  475   4                    break;
  476   4      
  477   4                  case USB_REQUEST_CLEAR_FEATURE:
  478   4                    if (!USB_SetClrFeature(0)) {
  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_FEATURE:
  488   4                    if (!USB_SetClrFeature(1)) {
  489   5                      goto stall_i;
  490   5                    }
  491   4                    USB_StatusInStage();
  492   4      #if USB_FEATURE_EVENT
                             USB_Feature_Event();
               #endif
  495   4                    break;
  496   4      
  497   4                  case USB_REQUEST_SET_ADDRESS:
  498   4                    switch (SetupPacket.bmRequestType.BM.Recipient) {
  499   5                      case REQUEST_TO_DEVICE:
  500   5                        USB_DeviceAddress = 0x80 | SetupPacket.wValue.WB.L;
  501   5                        USB_StatusInStage();
  502   5                        break;
  503   5                      default:
  504   5                        goto stall_i;
  505   5                    }
  506   4                    break;
  507   4      
  508   4                  case USB_REQUEST_GET_DESCRIPTOR:
  509   4                    if (!USB_GetDescriptor()) {
  510   5                      goto stall_i;
  511   5                    }
  512   4                    break;
  513   4      
  514   4                  case USB_REQUEST_SET_DESCRIPTOR:
  515   4      /*stall_o:*/  USB_SetStallEP(0x00);
  516   4                    EP0Data.Count = 0;
  517   4                    break;
  518   4      
  519   4                  case USB_REQUEST_GET_CONFIGURATION:
  520   4                    switch (SetupPacket.bmRequestType.BM.Recipient) {
ARM COMPILER V2.50a,  usbcore                                                              27/03/06  17:22:53  PAGE 9   

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

⌨️ 快捷键说明

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