/** * @brief DCD_EP_PrepareRx * @param pdev: device instance * @param ep_addr: endpoint address * @param pbuf: pointer to Rx buffer * @param buf_len: data length * @retval : status */ uint32_t DCD_EP_PrepareRx( USB_OTG_CORE_HANDLE *pdev, uint8_t ep_addr, uint8_t *pbuf, uint16_t buf_len) { USB_OTG_EP *ep; ep = &pdev->dev.out_ep[ep_addr & 0x7F]; /*setup and start the Xfer */ ep->xfer_buff = pbuf; ep->xfer_len = buf_len; ep->xfer_count = 0; ep->is_in = 0; ep->num = ep_addr & 0x7F; if (pdev->cfg.dma_enable == 1) { ep->dma_addr = (uint32_t)pbuf; } if ( ep->num == 0 ) { USB_OTG_EP0StartXfer(pdev , ep); } else { USB_OTG_EPStartXfer(pdev, ep ); } return 0; }
/** * @brief Transmit data over USB * @param pdev: device instance * @param ep_addr: endpoint address * @param pbuf: pointer to Tx buffer * @param buf_len: data length * @retval : status */ uint32_t DCD_EP_Tx ( USB_OTG_CORE_HANDLE *pdev, uint8_t ep_addr, uint8_t *pbuf, uint32_t buf_len) { USB_OTG_EP *ep; ep = &pdev->dev.in_ep[ep_addr & 0x7F]; /* Setup and start the Transfer */ ep->is_in = 1; ep->num = ep_addr & 0x7F; ep->xfer_buff = pbuf; ep->dma_addr = (uint32_t)pbuf; ep->xfer_count = 0; ep->xfer_len = buf_len; if ( ep->num == 0 ) { USB_OTG_EP0StartXfer(pdev , ep); } else { USB_OTG_EPStartXfer(pdev, ep ); } return 0; }
/** * @brief Transmit data over USB * @param pdev: device instance * @param ep_addr: endpoint address * @param pbuf: pointer to Tx buffer * @param buf_len: data length * @retval : status */ uint32_t DCD_EP_Tx ( USB_OTG_CORE_HANDLE *pdev, uint8_t ep_addr, const uint8_t *pbuf, uint32_t buf_len) { USB_OTG_EP *ep; ep = &pdev->dev.in_ep[ep_addr & 0x7F]; /* Setup and start the Transfer */ ep->is_in = 1; ep->num = ep_addr & 0x7F; ep->xfer_buff = (uint8_t*)pbuf; //remove const qualifier, safe to do because we are sending ep->dma_addr = (uint32_t)pbuf; ep->xfer_count = 0; ep->xfer_len = buf_len; if ( ep->num == 0 ) { USB_OTG_EP0StartXfer(pdev , ep); } else { USB_OTG_EPStartXfer(pdev, ep ); } return 0; }