diff --git a/cores/arduino/stm32/usb_host/hid/usb_host_hid.c b/cores/arduino/stm32/usb_host/hid/usb_host_hid.c new file mode 100644 index 0000000000..b7f96c169b --- /dev/null +++ b/cores/arduino/stm32/usb_host/hid/usb_host_hid.c @@ -0,0 +1,5 @@ +#ifdef USBHOST + +#include "usbh_hid.c" + +#endif /* USBHOST */ diff --git a/cores/arduino/stm32/usb_host/hid/usb_host_hid_keybd.c b/cores/arduino/stm32/usb_host/hid/usb_host_hid_keybd.c new file mode 100644 index 0000000000..f849d98b4b --- /dev/null +++ b/cores/arduino/stm32/usb_host/hid/usb_host_hid_keybd.c @@ -0,0 +1,5 @@ +#ifdef USBHOST + +#include "usbh_hid_keybd.c" + +#endif /* USBHOST */ diff --git a/cores/arduino/stm32/usb_host/hid/usb_host_hid_mouse.c b/cores/arduino/stm32/usb_host/hid/usb_host_hid_mouse.c new file mode 100644 index 0000000000..aeced61c8e --- /dev/null +++ b/cores/arduino/stm32/usb_host/hid/usb_host_hid_mouse.c @@ -0,0 +1,5 @@ +#ifdef USBHOST + +#include "usbh_hid_mouse.c" + +#endif /* USBHOST */ diff --git a/cores/arduino/stm32/usb_host/hid/usb_host_hid_parser.c b/cores/arduino/stm32/usb_host/hid/usb_host_hid_parser.c new file mode 100644 index 0000000000..d6c261ec10 --- /dev/null +++ b/cores/arduino/stm32/usb_host/hid/usb_host_hid_parser.c @@ -0,0 +1,5 @@ +#ifdef USBHOST + +#include "usbh_hid_parser.c" + +#endif /* USBHOST */ diff --git a/cores/arduino/stm32/usb_host/msc/usb_host_msc.c b/cores/arduino/stm32/usb_host/msc/usb_host_msc.c new file mode 100644 index 0000000000..bb0ce9bb74 --- /dev/null +++ b/cores/arduino/stm32/usb_host/msc/usb_host_msc.c @@ -0,0 +1,5 @@ +#ifdef USBHOST + +#include "usbh_msc.c" + +#endif /* USBHOST */ diff --git a/cores/arduino/stm32/usb_host/msc/usb_host_msc_bot.c b/cores/arduino/stm32/usb_host/msc/usb_host_msc_bot.c new file mode 100644 index 0000000000..8f0eccd59a --- /dev/null +++ b/cores/arduino/stm32/usb_host/msc/usb_host_msc_bot.c @@ -0,0 +1,5 @@ +#ifdef USBHOST + +#include "usbh_msc_bot.c" + +#endif /* USBHOST */ diff --git a/cores/arduino/stm32/usb_host/msc/usb_host_msc_scsi.c b/cores/arduino/stm32/usb_host/msc/usb_host_msc_scsi.c new file mode 100644 index 0000000000..ec810c1528 --- /dev/null +++ b/cores/arduino/stm32/usb_host/msc/usb_host_msc_scsi.c @@ -0,0 +1,5 @@ +#ifdef USBHOST + +#include "usbh_msc_scsi.c" + +#endif /* USBHOST */ diff --git a/cores/arduino/stm32/usb_host/usb_host_core.c b/cores/arduino/stm32/usb_host/usb_host_core.c new file mode 100644 index 0000000000..279333e3a8 --- /dev/null +++ b/cores/arduino/stm32/usb_host/usb_host_core.c @@ -0,0 +1,5 @@ +#ifdef USBHOST + +#include "usbh_core.c" + +#endif /* USBHOST */ diff --git a/cores/arduino/stm32/usb_host/usb_host_ctlreq.c b/cores/arduino/stm32/usb_host/usb_host_ctlreq.c new file mode 100644 index 0000000000..88af2efad5 --- /dev/null +++ b/cores/arduino/stm32/usb_host/usb_host_ctlreq.c @@ -0,0 +1,5 @@ +#ifdef USBHOST + +#include "usbh_ctlreq.c" + +#endif /* USBHOST */ diff --git a/cores/arduino/stm32/usb_host/usb_host_ioreq.c b/cores/arduino/stm32/usb_host/usb_host_ioreq.c new file mode 100644 index 0000000000..f1b2c54042 --- /dev/null +++ b/cores/arduino/stm32/usb_host/usb_host_ioreq.c @@ -0,0 +1,5 @@ +#ifdef USBHOST + +#include "usbh_ioreq.c" + +#endif /* USBHOST */ diff --git a/cores/arduino/stm32/usb_host/usb_host_pipes.c b/cores/arduino/stm32/usb_host/usb_host_pipes.c new file mode 100644 index 0000000000..45052806ff --- /dev/null +++ b/cores/arduino/stm32/usb_host/usb_host_pipes.c @@ -0,0 +1,5 @@ +#ifdef USBHOST + +#include "usbh_pipes.c" + +#endif /* USBHOST */ diff --git a/cores/arduino/stm32/usb_host/usbh_conf.c b/cores/arduino/stm32/usb_host/usbh_conf.c new file mode 100644 index 0000000000..0681ded4d1 --- /dev/null +++ b/cores/arduino/stm32/usb_host/usbh_conf.c @@ -0,0 +1,651 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : Target/usbh_conf.c + * @version : v1.0_Cube + * @brief : This file implements the board support package for the USB host library + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2020 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under Ultimate Liberty license + * SLA0044, the "License"; You may not use this file except in compliance with + * the License. You may obtain a copy of the License at: + * www.st.com/SLA0044 + * + ****************************************************************************** + */ +#ifdef USBHOST +/* USER CODE END Header */ + +/* Includes ------------------------------------------------------------------*/ +#include "usbh_core.h" +#include "Arduino.h" + +#ifndef HAL_HCD_MODULE_ENABLED + #error "HAL_HCD_MODULE_ENABLED is required" +#endif + +/* USER CODE BEGIN Includes */ + +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ + +/* USER CODE BEGIN PV */ +/* Private variables ---------------------------------------------------------*/ + +/* USER CODE END PV */ + +HCD_HandleTypeDef g_hhcd; + +/* USER CODE BEGIN 0 */ + +/* USER CODE END 0 */ + +/* USER CODE BEGIN PFP */ +/* Private function prototypes -----------------------------------------------*/ +USBH_StatusTypeDef USBH_Get_USB_Status(HAL_StatusTypeDef hal_status); + +/* USER CODE END PFP */ + +/* Private functions ---------------------------------------------------------*/ + +/* USER CODE BEGIN 1 */ + +/* USER CODE END 1 */ + +/******************************************************************************* + LL Driver Callbacks (HCD -> USB Host Library) +*******************************************************************************/ +/* MSP Init */ + +void HAL_HCD_MspInit(HCD_HandleTypeDef *hhcd) +{ + const PinMap *map = NULL; +#if defined (USB_OTG_FS) + if (hhcd->Instance == USB_OTG_FS) { + /* Configure USB FS GPIOs */ + map = PinMap_USB_OTG_FS; + while (map->pin != NC) { + pin_function(map->pin, map->function); + map++; + } + + /* Peripheral clock enable */ + __HAL_RCC_USB_OTG_FS_CLK_ENABLE(); + + /* Set USB FS Interrupt priority */ + HAL_NVIC_SetPriority(OTG_FS_IRQn, USBH_IRQ_PRIO, USBH_IRQ_SUBPRIO); + + /* Enable USB FS Interrupt */ + HAL_NVIC_EnableIRQ(OTG_FS_IRQn); + + if (hhcd->Init.low_power_enable == 1) { + /* Enable EXTI Line 18 for USB wakeup */ +#ifdef __HAL_USB_OTG_FS_WAKEUP_EXTI_CLEAR_FLAG + __HAL_USB_OTG_FS_WAKEUP_EXTI_CLEAR_FLAG(); +#endif +#ifdef __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_RISING_EDGE + __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_RISING_EDGE(); +#endif + __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_IT(); +#if !defined(STM32L4xx) + /* Set EXTI Wakeup Interrupt priority */ + HAL_NVIC_SetPriority(OTG_FS_WKUP_IRQn, USBH_IRQ_PRIO, USBH_IRQ_SUBPRIO); + + /* Enable EXTI Interrupt */ + HAL_NVIC_EnableIRQ(OTG_FS_WKUP_IRQn); +#endif + } + } +#endif +#if defined(USB_OTG_HS) + if (hhcd->Instance == USB_OTG_HS) { + __HAL_RCC_GPIOB_CLK_ENABLE(); + map = PinMap_USB_OTG_HS; + while (map->pin != NC) { + pin_function(map->pin, map->function); + map++; + } + + /* Peripheral clock enable */ + __HAL_RCC_USB_OTG_HS_CLK_ENABLE(); + + /* Set USB HS Interrupt priority */ + HAL_NVIC_SetPriority(OTG_HS_IRQn, USBH_IRQ_PRIO, USBH_IRQ_SUBPRIO); + + /* Enable USB HS Interrupt */ + HAL_NVIC_EnableIRQ(OTG_HS_IRQn); + + if (hhcd->Init.low_power_enable == 1) { + /* Enable EXTI Line 18 for USB wakeup */ +#ifdef __HAL_USB_OTG_HS_WAKEUP_EXTI_CLEAR_FLAG + __HAL_USB_OTG_HS_WAKEUP_EXTI_CLEAR_FLAG(); +#endif +#ifdef __HAL_USB_OTG_HS_WAKEUP_EXTI_ENABLE_RISING_EDGE + __HAL_USB_OTG_HS_WAKEUP_EXTI_ENABLE_RISING_EDGE(); +#endif + __HAL_USB_OTG_HS_WAKEUP_EXTI_ENABLE_IT(); +#if !defined(STM32L4xx) + /* Set EXTI Wakeup Interrupt priority */ + HAL_NVIC_SetPriority(OTG_HS_WKUP_IRQn, USBH_IRQ_PRIO, USBH_IRQ_SUBPRIO); + + /* Enable EXTI Interrupt */ + HAL_NVIC_EnableIRQ(OTG_HS_WKUP_IRQn); +#endif + } + } +#endif +} + +void HAL_HCD_MspDeInit(HCD_HandleTypeDef *hhcd) +{ +#if defined (USB_OTG_FS) + if (hhcd->Instance == USB_OTG_FS) { + /* Disable USB FS Clock */ + __HAL_RCC_USB_OTG_FS_CLK_DISABLE(); + HAL_NVIC_DisableIRQ(OTG_FS_IRQn); + } +#endif +#if defined (USB_OTG_HS) + if (hhcd->Instance == USB_OTG_HS) { + /* Disable USB HS Clocks */ + __HAL_RCC_USB_OTG_HS_CLK_DISABLE(); + HAL_NVIC_DisableIRQ(OTG_HS_IRQn); + } +#endif /* USB_OTG_HS */ +} + +/** + * @brief SOF callback. + * @param hhcd: HCD handle + * @retval None + */ +void HAL_HCD_SOF_Callback(HCD_HandleTypeDef *hhcd) +{ + USBH_LL_IncTimer(hhcd->pData); +} + +/** + * @brief SOF callback. + * @param hhcd: HCD handle + * @retval None + */ +void HAL_HCD_Connect_Callback(HCD_HandleTypeDef *hhcd) +{ + USBH_LL_Connect(hhcd->pData); +} + +/** + * @brief SOF callback. + * @param hhcd: HCD handle + * @retval None + */ +void HAL_HCD_Disconnect_Callback(HCD_HandleTypeDef *hhcd) +{ + USBH_LL_Disconnect(hhcd->pData); +} + +/** + * @brief Notify URB state change callback. + * @param hhcd: HCD handle + * @param chnum: channel number + * @param urb_state: state + * @retval None + */ +void HAL_HCD_HC_NotifyURBChange_Callback(HCD_HandleTypeDef *hhcd, uint8_t chnum, HCD_URBStateTypeDef urb_state) +{ + /* To be used with OS to sync URB state with the global state machine */ +#if (USBH_USE_OS == 1) + USBH_LL_NotifyURBChange(hhcd->pData); +#endif +} +/** +* @brief Port Port Enabled callback. + * @param hhcd: HCD handle + * @retval None + */ +void HAL_HCD_PortEnabled_Callback(HCD_HandleTypeDef *hhcd) +{ + USBH_LL_PortEnabled(hhcd->pData); +} + +/** + * @brief Port Port Disabled callback. + * @param hhcd: HCD handle + * @retval None + */ +void HAL_HCD_PortDisabled_Callback(HCD_HandleTypeDef *hhcd) +{ + USBH_LL_PortDisabled(hhcd->pData); +} + +/******************************************************************************* + LL Driver Interface (USB Host Library --> HCD) +*******************************************************************************/ + +/** + * @brief Initialize the low level portion of the host driver. + * @param phost: Host handle + * @retval USBH status + */ +USBH_StatusTypeDef USBH_LL_Init(USBH_HandleTypeDef *phost) +{ + /* Init USB_IP */ + if (phost->id == HOST_FS) { + /* Link the driver to the stack. */ + g_hhcd.pData = phost; + phost->pData = &g_hhcd; + + g_hhcd.Instance = USB_OTG_FS; + g_hhcd.Init.Host_channels = 8; + g_hhcd.Init.speed = HCD_SPEED_FULL; + g_hhcd.Init.dma_enable = DISABLE; + g_hhcd.Init.phy_itface = HCD_PHY_EMBEDDED; + g_hhcd.Init.Sof_enable = DISABLE; + if (HAL_HCD_Init(&g_hhcd) != HAL_OK) { + // Error_Handler( ); + return USBH_FAIL; + } + + USBH_LL_SetTimer(phost, HAL_HCD_GetCurrentFrame(&g_hhcd)); + } else if (phost->id == HOST_HS) { + /* Link the driver to the stack. */ + g_hhcd.pData = phost; + phost->pData = &g_hhcd; + + g_hhcd.Instance = USB_OTG_HS; + g_hhcd.Init.Host_channels = 12; + g_hhcd.Init.speed = HCD_SPEED_FULL; + g_hhcd.Init.dma_enable = DISABLE; +#ifdef USE_USB_HS_IN_FS + g_hhcd.Init.phy_itface = USB_OTG_EMBEDDED_PHY; +#else + g_hhcd.Init.phy_itface = USB_OTG_ULPI_PHY; +#endif + g_hhcd.Init.Sof_enable = DISABLE; + g_hhcd.Init.low_power_enable = DISABLE; + g_hhcd.Init.vbus_sensing_enable = DISABLE; + g_hhcd.Init.use_external_vbus = DISABLE; + + if (HAL_HCD_Init(&g_hhcd) != HAL_OK) { + Error_Handler(); + } + + USBH_LL_SetTimer(phost, HAL_HCD_GetCurrentFrame(&g_hhcd)); + } + return USBH_OK; +} + +/** + * @brief De-Initialize the low level portion of the host driver. + * @param phost: Host handle + * @retval USBH status + */ +USBH_StatusTypeDef USBH_LL_DeInit(USBH_HandleTypeDef *phost) +{ + HAL_StatusTypeDef hal_status = HAL_OK; + USBH_StatusTypeDef usb_status = USBH_OK; + hal_status = HAL_HCD_DeInit(phost->pData); + usb_status = USBH_Get_USB_Status(hal_status); + return usb_status; +} + +/** + * @brief Start the low level portion of the host driver. + * @param phost: Host handle + * @retval USBH status + */ +USBH_StatusTypeDef USBH_LL_Start(USBH_HandleTypeDef *phost) +{ + HAL_StatusTypeDef hal_status = HAL_OK; + USBH_StatusTypeDef usb_status = USBH_OK; + hal_status = HAL_HCD_Start(phost->pData); + usb_status = USBH_Get_USB_Status(hal_status); + return usb_status; +} + +/** + * @brief Stop the low level portion of the host driver. + * @param phost: Host handle + * @retval USBH status + */ +USBH_StatusTypeDef USBH_LL_Stop(USBH_HandleTypeDef *phost) +{ + HAL_StatusTypeDef hal_status = HAL_OK; + USBH_StatusTypeDef usb_status = USBH_OK; + hal_status = HAL_HCD_Stop(phost->pData); + usb_status = USBH_Get_USB_Status(hal_status); + return usb_status; +} + +/** + * @brief Return the USB host speed from the low level driver. + * @param phost: Host handle + * @retval USBH speeds + */ +USBH_SpeedTypeDef USBH_LL_GetSpeed(USBH_HandleTypeDef *phost) +{ + USBH_SpeedTypeDef speed = USBH_SPEED_FULL; + + switch (HAL_HCD_GetCurrentSpeed(phost->pData)) { + case 0 : + speed = USBH_SPEED_HIGH; + break; + + case 1 : + speed = USBH_SPEED_FULL; + break; + + case 2 : + speed = USBH_SPEED_LOW; + break; + + default: + speed = USBH_SPEED_FULL; + break; + } + return speed; +} + +/** + * @brief Reset the Host port of the low level driver. + * @param phost: Host handle + * @retval USBH status + */ +USBH_StatusTypeDef USBH_LL_ResetPort(USBH_HandleTypeDef *phost) +{ + HAL_StatusTypeDef hal_status = HAL_OK; + USBH_StatusTypeDef usb_status = USBH_OK; + hal_status = HAL_HCD_ResetPort(phost->pData); + usb_status = USBH_Get_USB_Status(hal_status); + return usb_status; +} + +/** + * @brief Return the last transfered packet size. + * @param phost: Host handle + * @param pipe: Pipe index + * @retval Packet size + */ +uint32_t USBH_LL_GetLastXferSize(USBH_HandleTypeDef *phost, uint8_t pipe) +{ + return HAL_HCD_HC_GetXferCount(phost->pData, pipe); +} + +/** + * @brief Open a pipe of the low level driver. + * @param phost: Host handle + * @param pipe_num: Pipe index + * @param epnum: Endpoint number + * @param dev_address: Device USB address + * @param speed: Device Speed + * @param ep_type: Endpoint type + * @param mps: Endpoint max packet size + * @retval USBH status + */ +USBH_StatusTypeDef USBH_LL_OpenPipe(USBH_HandleTypeDef *phost, uint8_t pipe_num, uint8_t epnum, + uint8_t dev_address, uint8_t speed, uint8_t ep_type, uint16_t mps) +{ + HAL_StatusTypeDef hal_status = HAL_OK; + USBH_StatusTypeDef usb_status = USBH_OK; + + hal_status = HAL_HCD_HC_Init(phost->pData, pipe_num, epnum, + dev_address, speed, ep_type, mps); + + usb_status = USBH_Get_USB_Status(hal_status); + + return usb_status; +} + +/** + * @brief Close a pipe of the low level driver. + * @param phost: Host handle + * @param pipe: Pipe index + * @retval USBH status + */ +USBH_StatusTypeDef USBH_LL_ClosePipe(USBH_HandleTypeDef *phost, uint8_t pipe) +{ + HAL_StatusTypeDef hal_status = HAL_OK; + USBH_StatusTypeDef usb_status = USBH_OK; + + hal_status = HAL_HCD_HC_Halt(phost->pData, pipe); + + usb_status = USBH_Get_USB_Status(hal_status); + + return usb_status; +} + +/** + * @brief Submit a new URB to the low level driver. + * @param phost: Host handle + * @param pipe: Pipe index + * This parameter can be a value from 1 to 15 + * @param direction : Channel number + * This parameter can be one of the these values: + * 0 : Output + * 1 : Input + * @param ep_type : Endpoint Type + * This parameter can be one of the these values: + * @arg EP_TYPE_CTRL: Control type + * @arg EP_TYPE_ISOC: Isochrounous type + * @arg EP_TYPE_BULK: Bulk type + * @arg EP_TYPE_INTR: Interrupt type + * @param token : Endpoint Type + * This parameter can be one of the these values: + * @arg 0: PID_SETUP + * @arg 1: PID_DATA + * @param pbuff : pointer to URB data + * @param length : Length of URB data + * @param do_ping : activate do ping protocol (for high speed only) + * This parameter can be one of the these values: + * 0 : do ping inactive + * 1 : do ping active + * @retval Status + */ +USBH_StatusTypeDef USBH_LL_SubmitURB(USBH_HandleTypeDef *phost, uint8_t pipe, uint8_t direction, + uint8_t ep_type, uint8_t token, uint8_t *pbuff, uint16_t length, + uint8_t do_ping) +{ + HAL_StatusTypeDef hal_status = HAL_OK; + USBH_StatusTypeDef usb_status = USBH_OK; + + hal_status = HAL_HCD_HC_SubmitRequest(phost->pData, pipe, direction, + ep_type, token, pbuff, length, + do_ping); + usb_status = USBH_Get_USB_Status(hal_status); + + return usb_status; +} + +/** + * @brief Get a URB state from the low level driver. + * @param phost: Host handle + * @param pipe: Pipe index + * This parameter can be a value from 1 to 15 + * @retval URB state + * This parameter can be one of the these values: + * @arg URB_IDLE + * @arg URB_DONE + * @arg URB_NOTREADY + * @arg URB_NYET + * @arg URB_ERROR + * @arg URB_STALL + */ +USBH_URBStateTypeDef USBH_LL_GetURBState(USBH_HandleTypeDef *phost, uint8_t pipe) +{ + return (USBH_URBStateTypeDef)HAL_HCD_HC_GetURBState(phost->pData, pipe); +} + +/** + * @brief Drive VBUS. + * @param phost: Host handle + * @param state : VBUS state + * This parameter can be one of the these values: + * 0 : VBUS Inactive + * 1 : VBUS Active + * @retval Status + */ +USBH_StatusTypeDef USBH_LL_DriverVBUS(USBH_HandleTypeDef *phost, uint8_t state) +{ + + /* USER CODE BEGIN 0 */ + + /* USER CODE END 0*/ + + if (phost->id == HOST_FS) { + if (state == 0) { + /* Drive high Charge pump */ + /* ToDo: Add IOE driver control */ + /* USER CODE BEGIN DRIVE_HIGH_CHARGE_FOR_FS */ + + /* USER CODE END DRIVE_HIGH_CHARGE_FOR_FS */ + } else { + /* Drive low Charge pump */ + /* ToDo: Add IOE driver control */ + /* USER CODE BEGIN DRIVE_LOW_CHARGE_FOR_FS */ + + /* USER CODE END DRIVE_LOW_CHARGE_FOR_FS */ + } + } + HAL_Delay(200); + return USBH_OK; +} + +/** + * @brief Set toggle for a pipe. + * @param phost: Host handle + * @param pipe: Pipe index + * @param toggle: toggle (0/1) + * @retval Status + */ +USBH_StatusTypeDef USBH_LL_SetToggle(USBH_HandleTypeDef *phost, uint8_t pipe, uint8_t toggle) +{ + HCD_HandleTypeDef *pHandle; + pHandle = phost->pData; + + if (pHandle->hc[pipe].ep_is_in) { + pHandle->hc[pipe].toggle_in = toggle; + } else { + pHandle->hc[pipe].toggle_out = toggle; + } + + return USBH_OK; +} + +/** + * @brief Return the current toggle of a pipe. + * @param phost: Host handle + * @param pipe: Pipe index + * @retval toggle (0/1) + */ +uint8_t USBH_LL_GetToggle(USBH_HandleTypeDef *phost, uint8_t pipe) +{ + uint8_t toggle = 0; + HCD_HandleTypeDef *pHandle; + pHandle = phost->pData; + + if (pHandle->hc[pipe].ep_is_in) { + toggle = pHandle->hc[pipe].toggle_in; + } else { + toggle = pHandle->hc[pipe].toggle_out; + } + return toggle; +} + +/** + * @brief Delay routine for the USB Host Library + * @param Delay: Delay in ms + * @retval None + */ +void USBH_Delay(uint32_t Delay) +{ + HAL_Delay(Delay); +} + +/** + * @brief Retuns the USB status depending on the HAL status: + * @param hal_status: HAL status + * @retval USB status + */ +USBH_StatusTypeDef USBH_Get_USB_Status(HAL_StatusTypeDef hal_status) +{ + USBH_StatusTypeDef usb_status = USBH_OK; + + switch (hal_status) { + case HAL_OK : + usb_status = USBH_OK; + break; + case HAL_ERROR : + usb_status = USBH_FAIL; + break; + case HAL_BUSY : + usb_status = USBH_BUSY; + break; + case HAL_TIMEOUT : + usb_status = USBH_FAIL; + break; + default : + usb_status = USBH_FAIL; + break; + } + return usb_status; +} + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ + + +/** + * @brief This function handles USB-On-The-Go FS/HS global interrupt request. + * @param None + * @retval None + */ +#ifdef USE_USBHOST_HS + void OTG_HS_IRQHandler(void) +#elif defined(USB_OTG_FS) + void OTG_FS_IRQHandler(void) +#else /* USB */ + void USB_IRQHandler(void) +#endif +{ + HAL_HCD_IRQHandler(&g_hhcd); +} + +/** + * @brief This function handles USB OTG HCD Wakeup IRQ Handler. + * @param None + * @retval None + */ +#ifdef USE_USBHOST_HS + void OTG_HS_WKUP_IRQHandler(void) +#elif defined(USB_OTG_FS) + void OTG_FS_WKUP_IRQHandler(void) +#else + void USBWakeUp_IRQHandler(void) +#endif +{ + if ((&g_hhcd)->Init.low_power_enable) { + /* Reset SLEEPDEEP bit of Cortex System Control Register */ + SCB->SCR &= (uint32_t)~((uint32_t)(SCB_SCR_SLEEPDEEP_Msk | SCB_SCR_SLEEPONEXIT_Msk)); + + /* Configures system clock after wake-up from STOP: enable HSE, PLL and select + PLL as system clock source (HSE and PLL are disabled in STOP mode) */ + SystemClock_Config(); + } +#if defined(USE_USBHOST_HS) && defined(__HAL_USB_OTG_HS_WAKEUP_EXTI_CLEAR_FLAG) + /* Clear EXTI pending Bit*/ + __HAL_USB_OTG_HS_WAKEUP_EXTI_CLEAR_FLAG(); +#elif defined(USB_OTG_FS) && defined(__HAL_USB_OTG_FS_WAKEUP_EXTI_CLEAR_FLAG) + /* Clear EXTI pending Bit*/ + __HAL_USB_OTG_FS_WAKEUP_EXTI_CLEAR_FLAG(); +#elif defined(__HAL_USB_WAKEUP_EXTI_CLEAR_FLAG) + __HAL_USB_WAKEUP_EXTI_CLEAR_FLAG(); +#endif +} + +#endif /* USBHOST */ diff --git a/cores/arduino/stm32/usb_host/usbh_conf.h b/cores/arduino/stm32/usb_host/usbh_conf.h new file mode 100644 index 0000000000..af1c1c5a2a --- /dev/null +++ b/cores/arduino/stm32/usb_host/usbh_conf.h @@ -0,0 +1,213 @@ +/* USER CODE BEGIN Header */ +/** + ****************************************************************************** + * @file : Target/usbh_conf.h + * @version : v1.0_Cube + * @brief : Header for usbh_conf.c file. + ****************************************************************************** + * @attention + * + *

© Copyright (c) 2020 STMicroelectronics. + * All rights reserved.

+ * + * This software component is licensed by ST under Ultimate Liberty license + * SLA0044, the "License"; You may not use this file except in compliance with + * the License. You may obtain a copy of the License at: + * www.st.com/SLA0044 + * + ****************************************************************************** + */ +/* USER CODE END Header */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __USBH_CONF__H__ +#define __USBH_CONF__H__ +#ifdef __cplusplus +extern "C" { +#endif + +// #define USBHOST + +#ifdef USBHOST +/* Includes ------------------------------------------------------------------*/ +#include "stm32_def.h" + +/* Includes ------------------------------------------------------------------*/ + +#include +#include +#include +// #include "main.h" + +// #include "stm32f4xx.h" +// #include "stm32f4xx_hal.h" + +/* USER CODE BEGIN INCLUDE */ + +/* USER CODE END INCLUDE */ + +/** @addtogroup STM32_USB_HOST_LIBRARY + * @{ + */ + +/** @defgroup USBH_CONF + * @brief usb host low level driver configuration file + * @{ + */ + +/** @defgroup USBH_CONF_Exported_Variables USBH_CONF_Exported_Variables + * @brief Public variables. + * @{ + */ + +/** + * @} + */ + +/** @defgroup USBH_CONF_Exported_Defines USBH_CONF_Exported_Defines + * @brief Defines for configuration of the Usb host. + * @{ + */ + +/*---------- -----------*/ +#define USBH_MAX_NUM_ENDPOINTS 2U + +/*---------- -----------*/ +#define USBH_MAX_NUM_INTERFACES 2U + +/*---------- -----------*/ +#define USBH_MAX_NUM_CONFIGURATION 2U + +/*---------- -----------*/ +#define USBH_KEEP_CFG_DESCRIPTOR 2U + +/*---------- -----------*/ +#define USBH_MAX_NUM_SUPPORTED_CLASS 2U + +/*---------- -----------*/ +#define USBH_MAX_SIZE_CONFIGURATION 256U + +/*---------- -----------*/ +#define USBH_MAX_DATA_BUFFER 512U + +/*---------- -----------*/ +#define USBH_DEBUG_LEVEL 0U + +/*---------- -----------*/ +#define USBH_USE_OS 0U + +/****************************************/ +/* #define for FS and HS identification */ +#define HOST_HS 0 +#define HOST_FS 1 + +/* Interrupt priority */ +#ifndef USBH_IRQ_PRIO +#define USBH_IRQ_PRIO 0 +#endif /* USBH_IRQ_PRIO */ +#ifndef USBH_IRQ_SUBPRIO +#define USBH_IRQ_SUBPRIO 0 +#endif /* USBH_IRQ_SUBPRIO */ + +#if (USBH_USE_OS == 1) +#include "cmsis_os.h" +#define USBH_PROCESS_PRIO osPriorityNormal +#define USBH_PROCESS_STACK_SIZE ((uint16_t)0) +#endif /* (USBH_USE_OS == 1) */ + +/** + * @} + */ + +/** @defgroup USBH_CONF_Exported_Macros USBH_CONF_Exported_Macros + * @brief Aliases. + * @{ + */ + +/* Memory management macros */ + +/** Alias for memory allocation. */ +#define USBH_malloc malloc + +/** Alias for memory release. */ +#define USBH_free free + +/** Alias for memory set. */ +#define USBH_memset memset + +/** Alias for memory copy. */ +#define USBH_memcpy memcpy + +/* DEBUG macros */ + +#if (USBH_DEBUG_LEVEL > 0U) +#define USBH_UsrLog(...) do { \ + printf(__VA_ARGS__); \ + printf("\n"); \ +} while (0) +#else +#define USBH_UsrLog(MSG, ...) do {} while (0) +#endif + +#if (USBH_DEBUG_LEVEL > 1U) + +#define USBH_ErrLog(...) do { \ + printf("ERROR: ") ; \ + printf(__VA_ARGS__); \ + printf("\n"); \ +} while (0) +#else +#define USBH_ErrLog(MSG, ...) do {} while (0) +#endif + +#if (USBH_DEBUG_LEVEL > 2U) +#define USBH_DbgLog(...) do { \ + printf("DEBUG : ") ; \ + printf(__VA_ARGS__); \ + printf("\n"); \ +} while (0) +#else +#define USBH_DbgLog(MSG, ...) do {} while (0) +#endif + +/** + * @} + */ + +/** @defgroup USBH_CONF_Exported_Types USBH_CONF_Exported_Types + * @brief Types. + * @{ + */ + +/** + * @} + */ + +/** @defgroup USBH_CONF_Exported_FunctionsPrototype USBH_CONF_Exported_FunctionsPrototype + * @brief Declaration of public functions for Usb host. + * @{ + */ + +/* Exported functions -------------------------------------------------------*/ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +#endif /* USBHOST */ + +#ifdef __cplusplus +} +#endif + +#endif /* __USBH_CONF__H__ */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/tools/platformio-build.py b/tools/platformio-build.py index c9102f2290..fecdac1fc2 100644 --- a/tools/platformio-build.py +++ b/tools/platformio-build.py @@ -187,6 +187,7 @@ def configure_application_offset(mcu, upload_protocol): join(FRAMEWORK_DIR, "cores", "arduino", "stm32", "OpenAMP"), join(FRAMEWORK_DIR, "cores", "arduino", "stm32", "usb", "hid"), join(FRAMEWORK_DIR, "cores", "arduino", "stm32", "usb", "cdc"), + join(FRAMEWORK_DIR, "cores", "arduino", "stm32", "usb_host"), join(FRAMEWORK_DIR, "system", "Drivers", series + "_HAL_Driver", "Inc"), join(FRAMEWORK_DIR, "system", "Drivers", series + "_HAL_Driver", "Src"), join(FRAMEWORK_DIR, "system", series), @@ -208,6 +209,64 @@ def configure_application_offset(mcu, upload_protocol): "Core", "Src", ), + join( + FRAMEWORK_DIR, + "system", + "Middlewares", + "ST", + "STM32_USB_Host_Library", + "Core", + "Inc", + ), + join( + FRAMEWORK_DIR, + "system", + "Middlewares", + "ST", + "STM32_USB_Host_Library", + "Core", + "Src", + ), + join( + FRAMEWORK_DIR, + "system", + "Middlewares", + "ST", + "STM32_USB_Host_Library", + "Class", + "MSC", + "Inc", + ), + join( + FRAMEWORK_DIR, + "system", + "Middlewares", + "ST", + "STM32_USB_Host_Library", + "Class", + "MSC", + "Src", + ), + join( + FRAMEWORK_DIR, + "system", + "Middlewares", + "ST", + "STM32_USB_Host_Library", + "Class", + "HID", + "Inc", + ), + join( + FRAMEWORK_DIR, + "system", + "Middlewares", + "ST", + "STM32_USB_Host_Library", + "Class", + "HID", + "Src", + ), join( FRAMEWORK_DIR, "system", pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy