usbh_core.h
295 lines
| 7.4 KiB
| text/x-c
|
CLexer
r71 | /** | |||
****************************************************************************** | ||||
* @file usbh_core.h | ||||
* @author MCD Application Team | ||||
* @version V2.1.0 | ||||
* @date 19-March-2012 | ||||
* @brief Header file for usbh_core.c | ||||
****************************************************************************** | ||||
* @attention | ||||
* | ||||
* <h2><center>© COPYRIGHT 2012 STMicroelectronics</center></h2> | ||||
* | ||||
* 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****/ | ||||