/** * @brief HCD_Init * Initialize the HOST portion of the driver. * @param pdev: Selected device * @param base_address: OTG base address * @retval Status */ uint32_t HCD_Init(USB_OTG_CORE_HANDLE *pdev , USB_OTG_CORE_ID_TypeDef coreID) { uint8_t i = 0; pdev->host.ConnSts = 0; for (i= 0; i< USB_OTG_MAX_TX_FIFOS; i++) { pdev->host.ErrCnt[i] = 0; pdev->host.XferCnt[i] = 0; pdev->host.HC_Status[i] = HC_IDLE; } pdev->host.hc[0].max_packet = 8; USB_OTG_SelectCore(pdev, coreID); #ifndef DUAL_ROLE_MODE_ENABLED USB_OTG_DisableGlobalInt(pdev); USB_OTG_CoreInit(pdev); /* Force Host Mode*/ USB_OTG_SetCurrentMode(pdev , HOST_MODE); USB_OTG_CoreInitHost(pdev); USB_OTG_EnableGlobalInt(pdev); #endif return 0; }
/** * @brief USBD_Init * Initailizes the device stack and load the class driver * @param pdev: device instance * @param core_address: USB OTG core ID * @param class_cb: Class callback structure address * @param usr_cb: User callback structure address * @retval None */ void USBD_Init(USB_OTG_CORE_HANDLE *pdev, USB_OTG_CORE_ID_TypeDef coreID, USBD_DEVICE *pDevice, USBD_Class_cb_TypeDef *class_cb, USBD_Usr_cb_TypeDef *usr_cb) { /* Hardware Init */ USB_OTG_BSP_Init(pdev); USBD_DeInit(pdev); /*Register class and user callbacks */ pdev->dev.class_cb = class_cb; pdev->dev.usr_cb = usr_cb; pdev->dev.usr_device = pDevice; /* set USB OTG core params */ DCD_Init(pdev , coreID); /* Upon Init call usr callback */ pdev->dev.usr_cb->Init(); /* Force Device Mode*/ USB_OTG_SetCurrentMode(pdev, DEVICE_MODE); /* Enable Interrupts */ USB_OTG_BSP_EnableInterrupt(pdev); }
void DCD_Init(USB_OTG_CORE_HANDLE *pdev , USB_OTG_CORE_ID_TypeDef coreID) { uint32_t i; USB_OTG_EP *ep; USB_OTG_SelectCore (pdev , coreID); pdev->dev.device_status = USB_OTG_DEFAULT; pdev->dev.device_address = 0; /* Init ep structure */ for (i = 0; i < pdev->cfg.dev_endpoints ; i++) { ep = &pdev->dev.in_ep[i]; /* Init ep structure */ ep->is_in = 1; ep->num = i; ep->tx_fifo_num = i; /* Control until ep is actvated */ ep->type = EP_TYPE_CTRL; ep->maxpacket = USB_OTG_MAX_EP0_SIZE; ep->xfer_buff = 0; ep->xfer_len = 0; } for (i = 0; i < pdev->cfg.dev_endpoints; i++) { ep = &pdev->dev.out_ep[i]; /* Init ep structure */ ep->is_in = 0; ep->num = i; ep->tx_fifo_num = i; /* Control until ep is activated */ ep->type = EP_TYPE_CTRL; ep->maxpacket = USB_OTG_MAX_EP0_SIZE; ep->xfer_buff = 0; ep->xfer_len = 0; } USB_OTG_DisableGlobalInt(pdev); /*Init the Core (common init.) */ USB_OTG_CoreInit(pdev); /* Force Device Mode*/ USB_OTG_SetCurrentMode(pdev, DEVICE_MODE); /* Init Device */ USB_OTG_CoreInitDev(pdev); /* Enable USB Global interrupt */ USB_OTG_EnableGlobalInt(pdev); }