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

📄 usbcore.lst

📁 USB高性能读卡器源码。可灵活增删功能。
💻 LST
📖 第 1 页 / 共 5 页
字号:
                         }
                         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
  291   3              default:
  292   3                return (FALSE);
  293   3            }
  294   2            break;
  295   2          default:
  296   2            return (FALSE);
  297   2        }
  298   1      
  299   1        if (EP0Data.Count > len) {
  300   2          EP0Data.Count = len;
  301   2        }
  302   1        USB_DataInStage();
  303   1      
  304   1        return (TRUE);
  305   1      }
  306          
  307          
  308          /*
  309           *  Set Configuration USB Request
  310           *    Parameters:      None (global SetupPacket)
  311           *    Return Value:    TRUE - Success, FALSE - Error
  312           */
  313          
  314          __inline BOOL USB_SetConfiguration (void) {
  315   1        USB_COMMON_DESCRIPTOR *pD;
  316   1        DWORD                  alt, n, m;
  317   1      
  318   1        if (SetupPacket.wValue.WB.L) {
  319   2          pD = (USB_COMMON_DESCRIPTOR *)USB_ConfigDescriptor;
  320   2          while (pD->bLength) {
  321   3            switch (pD->bDescriptorType) {
  322   4              case USB_CONFIGURATION_DESCRIPTOR_TYPE:
  323   4                if (((USB_CONFIGURATION_DESCRIPTOR *)pD)->bConfigurationValue == SetupPacket.wValue.WB.L) {
ARM COMPILER V2.51a,  usbcore                                                              16/08/06  09:38:30  PAGE 6   

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

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

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

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

⌨️ 快捷键说明

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