/** ****************************************************************************** * @file usbh_core.h * @author MCD Application Team * @version V2.1.0 * @date 19-March-2012 * @brief Header file for usbh_core.c ****************************************************************************** * @attention * *

© COPYRIGHT 2012 STMicroelectronics

* * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); * You may not use this file except in compliance with the License. * You may obtain a copy of the License at: * * http://www.st.com/software_license_agreement_liberty_v2 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ****************************************************************************** */ /* Define to prevent recursive ----------------------------------------------*/ #ifndef __USBH_CORE_H #define __USBH_CORE_H /* Includes ------------------------------------------------------------------*/ #include "usb_hcd.h" #include "usbh_def.h" #include "usbh_conf.h" /** @addtogroup USBH_LIB * @{ */ /** @addtogroup USBH_LIB_CORE * @{ */ /** @defgroup USBH_CORE * @brief This file is the Header file for usbh_core.c * @{ */ /** @defgroup USBH_CORE_Exported_Defines * @{ */ #define MSC_CLASS 0x08 #define HID_CLASS 0x03 #define MSC_PROTOCOL 0x50 #define CBI_PROTOCOL 0x01 #define USBH_MAX_ERROR_COUNT 2 #define USBH_DEVICE_ADDRESS_DEFAULT 0 #define USBH_DEVICE_ADDRESS 1 /** * @} */ /** @defgroup USBH_CORE_Exported_Types * @{ */ typedef enum { USBH_OK = 0, USBH_BUSY, USBH_FAIL, USBH_NOT_SUPPORTED, USBH_UNRECOVERED_ERROR, USBH_ERROR_SPEED_UNKNOWN, USBH_APPLY_DEINIT }USBH_Status; /* Following states are used for gState */ typedef enum { HOST_IDLE =0, HOST_DEV_ATTACHED, HOST_DEV_DISCONNECTED, HOST_DETECT_DEVICE_SPEED, HOST_ENUMERATION, HOST_CLASS_REQUEST, HOST_CLASS, HOST_CTRL_XFER, HOST_USR_INPUT, HOST_SUSPENDED, HOST_ERROR_STATE }HOST_State; /* Following states are used for EnumerationState */ typedef enum { ENUM_IDLE = 0, ENUM_GET_FULL_DEV_DESC, ENUM_SET_ADDR, ENUM_GET_CFG_DESC, ENUM_GET_FULL_CFG_DESC, ENUM_GET_MFC_STRING_DESC, ENUM_GET_PRODUCT_STRING_DESC, ENUM_GET_SERIALNUM_STRING_DESC, ENUM_SET_CONFIGURATION, ENUM_DEV_CONFIGURED } ENUM_State; /* Following states are used for CtrlXferStateMachine */ typedef enum { CTRL_IDLE =0, CTRL_SETUP, CTRL_SETUP_WAIT, CTRL_DATA_IN, CTRL_DATA_IN_WAIT, CTRL_DATA_OUT, CTRL_DATA_OUT_WAIT, CTRL_STATUS_IN, CTRL_STATUS_IN_WAIT, CTRL_STATUS_OUT, CTRL_STATUS_OUT_WAIT, CTRL_ERROR, CTRL_STALLED, CTRL_COMPLETE } CTRL_State; typedef enum { USBH_USR_NO_RESP = 0, USBH_USR_RESP_OK = 1, } USBH_USR_Status; /* Following states are used for RequestState */ typedef enum { CMD_IDLE =0, CMD_SEND, CMD_WAIT } CMD_State; typedef struct _Ctrl { uint8_t hc_num_in; uint8_t hc_num_out; uint8_t ep0size; uint8_t *buff; uint16_t length; uint8_t errorcount; uint16_t timer; CTRL_STATUS status; USB_Setup_TypeDef setup; CTRL_State state; } USBH_Ctrl_TypeDef; typedef struct _DeviceProp { uint8_t address; uint8_t speed; USBH_DevDesc_TypeDef Dev_Desc; USBH_CfgDesc_TypeDef Cfg_Desc; USBH_InterfaceDesc_TypeDef Itf_Desc[USBH_MAX_NUM_INTERFACES]; USBH_EpDesc_TypeDef Ep_Desc[USBH_MAX_NUM_INTERFACES][USBH_MAX_NUM_ENDPOINTS]; USBH_HIDDesc_TypeDef HID_Desc; }USBH_Device_TypeDef; typedef struct _USBH_Class_cb { USBH_Status (*Init)\ (USB_OTG_CORE_HANDLE *pdev , void *phost); void (*DeInit)\ (USB_OTG_CORE_HANDLE *pdev , void *phost); USBH_Status (*Requests)\ (USB_OTG_CORE_HANDLE *pdev , void *phost); USBH_Status (*Machine)\ (USB_OTG_CORE_HANDLE *pdev , void *phost); } USBH_Class_cb_TypeDef; typedef struct _USBH_USR_PROP { void (*Init)(void); /* HostLibInitialized */ void (*DeInit)(void); /* HostLibInitialized */ void (*DeviceAttached)(void); /* DeviceAttached */ void (*ResetDevice)(void); void (*DeviceDisconnected)(void); void (*OverCurrentDetected)(void); void (*DeviceSpeedDetected)(uint8_t DeviceSpeed); /* DeviceSpeed */ void (*DeviceDescAvailable)(void *); /* DeviceDescriptor is available */ void (*DeviceAddressAssigned)(void); /* Address is assigned to USB Device */ void (*ConfigurationDescAvailable)(USBH_CfgDesc_TypeDef *, USBH_InterfaceDesc_TypeDef *, USBH_EpDesc_TypeDef *); /* Configuration Descriptor available */ void (*ManufacturerString)(void *); /* ManufacturerString*/ void (*ProductString)(void *); /* ProductString*/ void (*SerialNumString)(void *); /* SerialNubString*/ void (*EnumerationDone)(void); /* Enumeration finished */ USBH_USR_Status (*UserInput)(void); int (*UserApplication) (void); void (*DeviceNotSupported)(void); /* Device is not supported*/ void (*UnrecoveredError)(void); } USBH_Usr_cb_TypeDef; typedef struct _Host_TypeDef { HOST_State gState; /* Host State Machine Value */ HOST_State gStateBkp; /* backup of previous State machine value */ ENUM_State EnumState; /* Enumeration state Machine */ CMD_State RequestState; USBH_Ctrl_TypeDef Control; USBH_Device_TypeDef device_prop; USBH_Class_cb_TypeDef *class_cb; USBH_Usr_cb_TypeDef *usr_cb; } USBH_HOST, *pUSBH_HOST; /** * @} */ /** @defgroup USBH_CORE_Exported_Macros * @{ */ /** * @} */ /** @defgroup USBH_CORE_Exported_Variables * @{ */ /** * @} */ /** @defgroup USBH_CORE_Exported_FunctionsPrototype * @{ */ void USBH_Init(USB_OTG_CORE_HANDLE *pdev, USB_OTG_CORE_ID_TypeDef coreID, USBH_HOST *phost, USBH_Class_cb_TypeDef *class_cb, USBH_Usr_cb_TypeDef *usr_cb); USBH_Status USBH_DeInit(USB_OTG_CORE_HANDLE *pdev, USBH_HOST *phost); void USBH_Process(USB_OTG_CORE_HANDLE *pdev , USBH_HOST *phost); void USBH_ErrorHandle(USBH_HOST *phost, USBH_Status errType); /** * @} */ #endif /* __USBH_CORE_H */ /** * @} */ /** * @} */ /** * @} */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/