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

📄 usbcore.lst

📁 在ATMEL芯片下的USB底层程序的开发
💻 LST
📖 第 1 页 / 共 5 页
字号:
  276   3                return (FALSE);
  277   3            }
  278   2            break;
  279   2          default:
  280   2            return (FALSE);
  281   2        }
  282   1      
  283   1        if (EP0Data.Count > len) {
  284   2          EP0Data.Count = len;
  285   2        }
  286   1        USB_DataInStage();
  287   1      
  288   1        return (TRUE);
  289   1      }
  290          
  291          
  292          /*
  293           *  Set Configuration USB Request
  294           *    Parameters:      None (global SetupPacket)
  295           *    Return Value:    TRUE - Success, FALSE - Error
  296           */
  297          
  298          __inline BOOL USB_SetConfiguration (void) {
  299   1        USB_COMMON_DESCRIPTOR *pD;
  300   1        DWORD                  alt, n, m;
  301   1      
  302   1        if (SetupPacket.wValue.WB.L) {
  303   2          pD = (USB_COMMON_DESCRIPTOR *)USB_ConfigDescriptor;
  304   2          while (pD->bLength) {
  305   3            switch (pD->bDescriptorType) {
  306   4              case USB_CONFIGURATION_DESCRIPTOR_TYPE:
  307   4                if (((USB_CONFIGURATION_DESCRIPTOR *)pD)->bConfigurationValue == SetupPacket.wValue.WB.L) {
  308   5                  USB_Configuration = SetupPacket.wValue.WB.L;
  309   5                  USB_NumInterfaces = ((USB_CONFIGURATION_DESCRIPTOR *)pD)->bNumInterfaces;
  310   5                  for (n = 0; n < USB_IF_NUM; n++) {
  311   6                    USB_AltSetting[n] = 0;
  312   6                  }
  313   5                  for (n = 1; n < 16; n++) {
  314   6                    if (USB_EndPointMask & (1 << n)) {
  315   7                      USB_DisableEP(n);
  316   7                    }
  317   6                    if (USB_EndPointMask & ((1 << 16) << n)) {
  318   7                      USB_DisableEP(n | 0x80);
  319   7                    }
  320   6                  }
  321   5                  USB_EndPointMask = 0x00010001;
  322   5                  USB_EndPointHalt = 0x00000000;
  323   5                  USB_Configure(TRUE);
ARM COMPILER V2.53,  usbcore                                                               31/10/07  09:22:44  PAGE 6   

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

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

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

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

⌨️ 快捷键说明

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