void HAL_PCD_ResetCallback(PCD_HandleTypeDef *hpcd) { LTRACE_ENTRY; /* fail all the outstanding transactions */ for (uint i = 0; i < NUM_EP; i++) { if (usbc.ep_in[i].transfer) { usbc_transfer_t *t = usbc.ep_in[i].transfer; usbc.ep_in[i].transfer = NULL; t->result = ERR_CANCELLED; t->callback(i, t); } if (usbc.ep_out[i].transfer) { usbc_transfer_t *t = usbc.ep_out[i].transfer; usbc.ep_out[i].transfer = NULL; t->result = ERR_CANCELLED; t->callback(i, t); } } HAL_PCD_EP_Open(&usbc.handle, 0, 0x40, PCD_EP_TYPE_CTRL); HAL_PCD_EP_Open(&usbc.handle, 0x80, 0x40, PCD_EP_TYPE_CTRL); usbc_callback(USB_CB_RESET, NULL); usbc.do_resched = true; }
bool USBHAL::realiseEndpoint(uint8_t endpoint, uint32_t maxPacket, uint32_t flags) { uint32_t epIndex = EP_ADDR(endpoint); uint32_t type; uint32_t len; HAL_StatusTypeDef ret; switch (endpoint) { case EP0IN: case EP0OUT: type = 0; break; case EPISO_IN: case EPISO_OUT: type = 1; break; case EPBULK_IN: case EPBULK_OUT: type = 2; break; case EPINT_IN: case EPINT_OUT: type = 3; break; } if (maxPacket > MAXTRANSFER_SIZE) return false; if (epIndex & 0x80) { len = HAL_PCDEx_GetTxFiFo(&hpcd,epIndex & 0x7f); MBED_ASSERT(len >= maxPacket); } ret = HAL_PCD_EP_Open(&hpcd, epIndex, maxPacket, type); MBED_ASSERT(ret!=HAL_BUSY); return (ret == HAL_OK) ? true:false; }
/** * @brief Opens an endpoint of the Low Level Driver. * @param pdev: Device handle * @param ep_addr: Endpoint Number * @param ep_type: Endpoint Type * @param ep_mps: Endpoint Max Packet Size * @retval USBD Status */ USBD_StatusTypeDef USBD_LL_OpenEP (USBD_HandleTypeDef *pdev, uint8_t ep_addr, uint8_t ep_type, uint16_t ep_mps) { HAL_StatusTypeDef hal_status = HAL_OK; USBD_StatusTypeDef usb_status = USBD_OK; hal_status = HAL_PCD_EP_Open(pdev->pData, ep_addr, ep_mps, ep_type); switch (hal_status) { case HAL_OK : usb_status = USBD_OK; break; case HAL_ERROR : usb_status = USBD_FAIL; break; case HAL_BUSY : usb_status = USBD_BUSY; break; case HAL_TIMEOUT : usb_status = USBD_FAIL; break; default : usb_status = USBD_FAIL; break; } return usb_status; }
int usb_dc_ep_enable(const u8_t ep) { struct usb_dc_stm32_ep_state *ep_state = usb_dc_stm32_get_ep_state(ep); HAL_StatusTypeDef status; LOG_DBG("ep 0x%02x", ep); if (!ep_state) { return -EINVAL; } LOG_DBG("HAL_PCD_EP_Open(0x%02x, %u, %u)", ep, ep_state->ep_mps, ep_state->ep_type); status = HAL_PCD_EP_Open(&usb_dc_stm32_state.pcd, ep, ep_state->ep_mps, ep_state->ep_type); if (status != HAL_OK) { LOG_ERR("HAL_PCD_EP_Open failed(0x%02x), %d", ep, (int)status); return -EIO; } if (EP_IS_OUT(ep) && ep != EP0_OUT) { return usb_dc_ep_start_read(ep, usb_dc_stm32_state.ep_buf[EP_IDX(ep)], EP_MPS); } return 0; }
/** * @brief Opens an endpoint of the Low Level Driver. * @param pdev: Device handle * @param ep_addr: Endpoint Number * @param ep_type: Endpoint Type * @param ep_mps: Endpoint Max Packet Size * @retval USBD Status */ USBD_StatusTypeDef USBD_LL_OpenEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr, uint8_t ep_type, uint16_t ep_mps) { HAL_PCD_EP_Open(pdev->pData, ep_addr, ep_mps, ep_type); return USBD_OK; }
void HAL_PCD_ResetCallback(PCD_HandleTypeDef *hpcd) { int i; LOG_DBG(""); HAL_PCD_EP_Open(&usb_dc_stm32_state.pcd, EP0_IN, EP0_MPS, EP_TYPE_CTRL); HAL_PCD_EP_Open(&usb_dc_stm32_state.pcd, EP0_OUT, EP0_MPS, EP_TYPE_CTRL); /* The DataInCallback will never be called at this point for any pending * transactions. Reset the IN semaphores to prevent perpetual locked state. * */ for (i = 0; i < DT_USB_NUM_BIDIR_ENDPOINTS; i++) { k_sem_give(&usb_dc_stm32_state.in_ep_state[i].write_sem); } if (usb_dc_stm32_state.status_cb) { usb_dc_stm32_state.status_cb(USB_DC_RESET, NULL); } }
/** * @brief USBD_LL_OpenEP * Open an endpoint of the Low Level Driver. * @param pdev: device handle * @param ep_addr: Endpoint Number * @param ep_type: Endpoint Type * @param ep_mps: Endpoint Max Packet Size * @retval USBD Status */ USBD_StatusTypeDef USBD_LL_OpenEP (USBD_HandleTypeDef *pdev, uint8_t ep_addr, uint8_t ep_type, uint16_t ep_mps) { USBD_EndpointTypeDef * ep; if (ep_addr & 0x80 == 0x80) { ep = &pdev->ep_in[ep_addr & 0x7F]; } else { ep = &pdev->ep_out[ep_addr & 0x7F]; } ep->maxpacket = ep_mps; HAL_PCD_EP_Open(pdev->pData, ep_addr, ep_mps, ep_type); return USBD_OK; }
status_t usbc_setup_endpoint(ep_t ep, ep_dir_t dir, uint width, ep_type_t type) { LTRACEF("ep %u dir %u width %u\n", ep, dir, width); DEBUG_ASSERT(ep <= NUM_EP); // PCD_EP_TYPE* and USB_* have the same values. Let's make sure that // doesn't change. DEBUG_ASSERT(PCD_EP_TYPE_CTRL == USB_CTRL); DEBUG_ASSERT(PCD_EP_TYPE_ISOC == USB_ISOC); DEBUG_ASSERT(PCD_EP_TYPE_BULK == USB_BULK); DEBUG_ASSERT(PCD_EP_TYPE_INTR == USB_INTR); uint8_t ep_addr = ep | ((dir == USB_IN) ? 0x80 : 0); HAL_PCDEx_PMAConfig(&usbc.handle, ep_addr, PCD_SNG_BUF, stm32_usbc_pma_alloc(width)); HAL_StatusTypeDef ret = HAL_PCD_EP_Open(&usbc.handle, ep_addr, width, type); return (ret == HAL_OK) ? NO_ERROR : ERR_GENERIC; }