📄 udc_ahb.c.orig
字号:
/* 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 + -