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

📄 udc_ahb.c.orig

📁 Spearhead2000的bootloader
💻 ORIG
📖 第 1 页 / 共 5 页
字号:
                                   /* Copy Bulk-IN Descriptor 1. */                                   if (destp) memcpy(destp, (char *)&BulkInDescrFS, sizeof(BulkInDescrFS));                                   destp += sizeof(BulkInDescrFS);                                }                                 USB_PutDescrIntoEpt(IN_EP0, HEADBlkinDPtr);                             }                             else                             {                                /* return STALL */                                *VUINTP (Endp_Cntl + Out_Endp0) |= Endp_Cntl_STALL;                             }#else                           // Packet size is 8 bytes.                           // UsbPutPckToFIFO(0, (char *)&DevDescr, sizeof(DevDescr));#endif                            DmaUsbDescrType            = USB_CONFIGURATION;                           USBCtrlTransftateMachine   = USB_CTRLIN_STATUS_OUT_STAGE;                           break;                   /*                    * GetDescriptor --> STRING n                    */                   case USB_STRING:                            if (UsbSetupBuf.wValue_lo == USB_DEV_DESC_LANGID)                           {                             // Request is for LanguageID string                             // Print("\r\n(AV) -- GetDescriptor (L_STR)");                              //PrintMessInLastKB("GD l_str"); #if defined (_USB_DMA)                             BulkDescrPtr = (DmaUsbBulkDescr *)USB_GetDescrFromFreeList(1);                             if (BulkDescrPtr)                             {                                char *destp = BulkDescrPtr->DmaUsb_Addr;                                unsigned short dlen = min(length,                                                          gaubLanguageIds[0] );                                 BulkDescrPtr->DmaUsb_Status = DmaUsb_LastDescr | (dlen & DmaUsb_Len_Mask);                                 /* Copy Device Descriptor . */                                if (destp) memcpy(destp, (char *)&gaubLanguageIds, dlen);                                 USB_PutDescrIntoEpt(IN_EP0, BulkDescrPtr);                             }                             else /* no descriptor */                             {                                /* return STALL */                                *VUINTP (Endp_Cntl + Out_Endp0) |= Endp_Cntl_STALL;                             } #else                           // Packet size is 8 bytes.                           // UsbPutPckToFIFO(0, (char *)&DevDescr, sizeof(DevDescr));#endif                           }                           else                           if (UsbSetupBuf.wValue_lo == USB_DEV_DESC_MANUFACTURER)                           {                             // Request is for Manufacturer string                             // Print("\r\n(AV) -- GetDescriptor (M_STR)");                           //PrintMessInLastKB("GD m_str"); #if defined (_USB_DMA)                             BulkDescrPtr = (DmaUsbBulkDescr *)USB_GetDescrFromFreeList(1);                             if (BulkDescrPtr)                             {                                char *destp = BulkDescrPtr->DmaUsb_Addr;                                unsigned short dlen = min(length,                                                          gaubManufacturerString[0] );                                 BulkDescrPtr->DmaUsb_Status = DmaUsb_LastDescr | (dlen & DmaUsb_Len_Mask);                                 /* Copy Device Descriptor . */                                if (destp) memcpy(destp, (char *)&gaubManufacturerString, dlen);                                 USB_PutDescrIntoEpt(IN_EP0, BulkDescrPtr);                             }                             else /* no descriptor */                             {                                /* return STALL */                                *VUINTP (Endp_Cntl + Out_Endp0) |= Endp_Cntl_STALL;                             } #else                           // Packet size is 8 bytes.                           // UsbPutPckToFIFO(0, (char *)&DevDescr, sizeof(DevDescr));#endif                           }                           else                           if (UsbSetupBuf.wValue_lo == USB_DEV_DESC_SERIAL)                           {                             // Request is for Serial string                             // Print("\r\n(AV) -- GetDescriptor (S_STR)");                           //PrintMessInLastKB("GD s_str"); #if defined (_USB_DMA)                             BulkDescrPtr = (DmaUsbBulkDescr *)USB_GetDescrFromFreeList(1);                             if (BulkDescrPtr)                             {                                char *destp = BulkDescrPtr->DmaUsb_Addr;                                unsigned short dlen = min(length,                                                          gaubSerialString[0] );                                 BulkDescrPtr->DmaUsb_Status = DmaUsb_LastDescr | (dlen & DmaUsb_Len_Mask);                                 /* Copy Device Descriptor . */                                if (destp) memcpy(destp, (char *)&gaubSerialString, dlen);                                 USB_PutDescrIntoEpt(IN_EP0, BulkDescrPtr);                             }                             else /* no descriptor */                             {                                /* return STALL */                                *VUINTP (Endp_Cntl + Out_Endp0) |= Endp_Cntl_STALL;                             } #else                           // Packet size is 8 bytes.                           // UsbPutPckToFIFO(0, (char *)&DevDescr, sizeof(DevDescr));#endif                           }                           else if (UsbSetupBuf.wValue_lo == USB_DEV_DESC_PRODUCT)                           {                             // Request is for Product string                           //PrintMessInLastKB("GD p_str");#if defined (_USB_DMA)                             BulkDescrPtr = (DmaUsbBulkDescr *)USB_GetDescrFromFreeList(1);                             if (BulkDescrPtr)                             {                                char *destp = BulkDescrPtr->DmaUsb_Addr;                                unsigned short dlen = min(length,                                                          gaubProductString[0] );                                 BulkDescrPtr->DmaUsb_Status = DmaUsb_LastDescr | (dlen & DmaUsb_Len_Mask);                                 /* Copy Device Descriptor . */                                if (destp)                                   memcpy(destp, (char *)&gaubProductString, dlen);                                        USB_PutDescrIntoEpt(0, BulkDescrPtr);                             }                             else /* no descriptor */                             {                                /* return STALL */                                *VUINTP (Endp_Cntl + Out_Endp0) |= Endp_Cntl_STALL;                             } #else                           // Packet size is 8 bytes.                           // UsbPutPckToFIFO(0, (char *)&DevDescr, sizeof(DevDescr));#endif                           }                           else /* BAD string descriptor request */                           {                             /* return STALL */                             *VUINTP (Endp_Cntl + Out_Endp0) |= Endp_Cntl_STALL;                           }                                                                             DmaUsbDescrType            = USB_STRING;                           USBCtrlTransftateMachine   = USB_CTRLIN_STATUS_OUT_STAGE;                           break;                    case USB_DEVICE_QUALIFIER :                          #ifdef DBG_USB                          Print("\r\n(AV) --QUALIFIER");                          #endif#if defined (_USB_DMA) 	                  BulkDescrPtr = HEADBlkinDPtr = (DmaUsbBulkDescr *)USB_GetDescrFromFreeList(1);   	                  if (BulkDescrPtr)   	                  {   	                    char *destp = BulkDescrPtr->DmaUsb_Addr;   	                    unsigned short dlen = min(length,sizeof(QualifierDescr)); 	                    BulkDescrPtr->DmaUsb_Status = DmaUsb_LastDescr | (dlen & DmaUsb_Len_Mask);    	                     /* Copy Configuration Descriptor 1. */   	                     if (destp)                               memcpy((unsigned char *)destp, &QualifierDescr, dlen);  	                     else	                     {                               #ifdef DBG_USB                               Print("\r\nThere is no free desctor111");                               #endif                             }	                     USB_PutDescrIntoEpt(IN_EP0, HEADBlkinDPtr);   	                  }   	                  else   	                  {    	                     #ifdef DBG_USB                             Print("\r\nStall Config");                             #endif                             /* return STALL */                             *VUINTP (Endp_Cntl + Out_Endp0) |= Endp_Cntl_STALL;   	                  }		     #else                           // Packet size is 8 bytes.                           // UsbPutPckToFIFO(0, (char *)&DevDescr, sizeof(DevDescr));#endif	                 DmaUsbDescrType            = USB_DEVICE_QUALIFIER;   	                 USBCtrlTransftateMachine   = USB_CTRLIN_STATUS_OUT_STAGE;   	                 break;                      case USB_OTHER_SPEED_CONFIGURATION :                        #ifdef DBG_USB                        Print("\r\n(AV) --SPEED");                        #endif#if defined (_USB_DMA)                        BulkDescrPtr = HEADBlkinDPtr = (DmaUsbBulkDescr *)USB_GetDescrFromFreeList(1);                        if (BulkDescrPtr)                        {                           char *destp = BulkDescrPtr->DmaUsb_Addr;                           unsigned short dlen = min(length,                                                       (sizeof(OtherCfgDescr) +                                                        sizeof(IfDescr) +                                                        sizeof(BulkInDescrHS) +                                                        sizeof(BulkOutDescrHS)));                             BulkDescrPtr->DmaUsb_Status = DmaUsb_LastDescr |                                                         ( dlen & DmaUsb_Len_Mask);                            /* Copy Configuration Descriptor 1. */                           if (destp) memcpy(destp, (char *)&OtherCfgDescr, sizeof(OtherCfgDescr));                           destp += sizeof(OtherCfgDescr);                            /* Copy Interface Descriptor 0. */                           if (destp) memcpy(destp, (char *)&IfDescr, sizeof(IfDescr));                           destp += sizeof(IfDescr);                            if ((*VUINTP Dev_Stat & Dev_Stat_ENUM) == Dev_Stat_ENUM_SPEED_HS)                           {                               /* Copy Bulk-OUT Descriptor . */                               if (destp) memcpy(destp, (char *)&BulkOutDescrHS, sizeof(BulkOutDescrHS));                               destp += sizeof(BulkOutDescrHS);                                /* Copy Bulk-IN Descriptor 1. */                               if (destp) memcpy(destp, (char *)&BulkInDescrHS, sizeof(BulkInDescrHS));                               destp += sizeof(BulkInDescrHS);                           }                           else                           {                               /* Copy Bulk-OUT Descriptor . */                              if (destp) memcpy(destp, (char *)&BulkOutDescrFS, sizeof(BulkOutDescrFS));                              destp += sizeof(BulkOutDescrFS);                               /* Copy Bulk-IN Descriptor 1. */                              if (destp) memcpy(destp, (char *)&BulkInDescrFS, sizeof(BulkInDescrFS));                              destp += sizeof(BulkInDescrFS);                           }                            USB_PutDescrIntoEpt(IN_EP0, HEADBlkinDPtr);                        }                        else                        {                           /* return STALL */                           *VUINTP (Endp_Cntl + Out_Endp0) |= Endp_Cntl_STALL;                        }#else   	   // Packet size is 8 bytes.   	   // UsbPutPckToFIFO(0, (char *)&DevDescr, sizeof(DevDescr));#endif	              DmaUsbDescrType            = USB_OTHER_SPEED_CONFIGURATION;   	              USBCtrlTransftateMachine   = USB_CTRLIN_STATUS_OUT_STAGE;   	              break;                              default:                           // Print("\r\n(AV) -- GetDescriptor (UNKNOWN descriptor type)");                           /* return STALL */                           *VUINTP (Endp_Cntl + Out_Endp0) |= Endp_Cntl_STALL;                           USBCtrlTransftateMachine   = USB_CTRLIN_STATUS_OUT_STAGE;                           break; // STALL (??) -- TODO                   }                   break;           case USB_SET_DESCRIPTOR:                   /*                    * Check bmReqType (should be 10000000)                   if (UsbSetupBuf.bmReqType != (  USB_DIR_TO_HOST |                                           USB_TYPE_STANDARD |                                           USB_DEST_DEV))                   {                           return; // STALL (??) -- TODO                   }                    */                  //val = ntohs(UsbSetupBuf.wValue);                    /*                    * Switch on Descriptor Type.                    *                    * According to the USB Specification, SetDescriptor() supports                    * three kinds of Descriptors: DEVICE, CONFIGURATION and STRING.                    */                   switch (UsbSetupBuf.wValue_hi)                   {                   case USB_DEVICE:                           /*                            * SetDescriptor --> DEVICE                            */                           DmaUsbDescrType            = USB_DEVICE;                           USBCtrlTransftateMachine   = USB_CTRLOUT_DATA_OUT_STAGE;                           break;                   case USB_CONFIGURATION:                           /*                            * SetDescriptor --> CONFIGURATION 1                            *      Returns: Configuration Descriptor 1 +                            *               Interface 0 +                            *               Endpt 1 (Bulk-OUT) +                            *               Endpt 2 (Bulk-IN)                            */                           DmaUsbDescrType            = USB_CONFIGURATION;                           USBCtrlTransftateMachine   = USB_CTRLOUT_DATA_OUT_STAGE;                           break;                   /*                    * SetDescriptor --> STRING n                    *      Returns: Not Supported.                    */                   case USB_STRING:                           /* return STALL */                           // *VUINTP (Endp_Cntl + Out_Endp0) |= Endp_Cntl_STALL;                           USBCtrlTransftateMachine   = USB_CTRLOUT_DATA_OUT_STAGE;                           return;                   default:

⌨️ 快捷键说明

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