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

📄 usbcore.lst

📁 USB存储器
💻 LST
📖 第 1 页 / 共 5 页
字号:
                         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
  288   3              default:
  289   3                return (FALSE);
  290   3            }
  291   2            break;
  292   2          default:
  293   2            return (FALSE);
  294   2        }
  295   1      
  296   1        if (EP0Data.Count > len) {
  297   2          EP0Data.Count = len;
  298   2        }
  299   1        USB_DataInStage();
  300   1      
  301   1        return (TRUE);
  302   1      }
  303          
  304          
  305          /*
  306           *  Set Configuration USB Request
  307           *    Parameters:      None (global SetupPacket)
  308           *    Return Value:    TRUE - Success, FALSE - Error
  309           */
  310          
  311          __inline BOOL USB_SetConfiguration (void) {
  312   1        USB_COMMON_DESCRIPTOR *pD;
  313   1        DWORD                  alt, n, m;
  314   1      
  315   1        if (SetupPacket.wValue.WB.L) {
  316   2          pD = (USB_COMMON_DESCRIPTOR *)USB_ConfigDescriptor;
  317   2          while (pD->bLength) {
  318   3            switch (pD->bDescriptorType) {
  319   4              case USB_CONFIGURATION_DESCRIPTOR_TYPE:
  320   4                if (((USB_CONFIGURATION_DESCRIPTOR *)pD)->bConfigurationValue == SetupPacket.wValue.WB.L) {
  321   5                  USB_Configuration = SetupPacket.wValue.WB.L;
  322   5                  USB_NumInterfaces = ((USB_CONFIGURATION_DESCRIPTOR *)pD)->bNumInterfaces;
ARM COMPILER V2.42b,  usbcore                                                              02/01/06  23:45:15  PAGE 6   

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

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

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

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

⌨️ 快捷键说明

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