/** ****************************************************************************** * @file usbh_msc_bot.h * @author MCD Application Team * @version V2.1.0 * @date 19-March-2012 * @brief Header file for usbh_msc_bot.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_MSC_BOT_H__ #define __USBH_MSC_BOT_H__ /* Includes ------------------------------------------------------------------*/ #include "usbh_stdreq.h" /** @addtogroup USBH_LIB * @{ */ /** @addtogroup USBH_CLASS * @{ */ /** @addtogroup USBH_MSC_CLASS * @{ */ /** @defgroup USBH_MSC_BOT * @brief This file is the Header file for usbh_msc_core.c * @{ */ /** @defgroup USBH_MSC_BOT_Exported_Types * @{ */ typedef union _USBH_CBW_Block { struct __CBW { uint32_t CBWSignature; uint32_t CBWTag; uint32_t CBWTransferLength; uint8_t CBWFlags; uint8_t CBWLUN; uint8_t CBWLength; uint8_t CBWCB[16]; }field; uint8_t CBWArray[31]; }HostCBWPkt_TypeDef; typedef enum { USBH_MSC_BOT_INIT_STATE = 0, USBH_MSC_BOT_RESET, USBH_MSC_GET_MAX_LUN, USBH_MSC_TEST_UNIT_READY, USBH_MSC_READ_CAPACITY10, USBH_MSC_MODE_SENSE6, USBH_MSC_REQUEST_SENSE, USBH_MSC_BOT_USB_TRANSFERS, USBH_MSC_DEFAULT_APPLI_STATE, USBH_MSC_CTRL_ERROR_STATE, USBH_MSC_UNRECOVERED_STATE } MSCState; typedef struct _BOTXfer { uint8_t MSCState; uint8_t MSCStateBkp; uint8_t MSCStateCurrent; uint8_t CmdStateMachine; uint8_t BOTState; uint8_t BOTStateBkp; uint8_t* pRxTxBuff; uint16_t DataLength; uint8_t BOTXferErrorCount; uint8_t BOTXferStatus; } USBH_BOTXfer_TypeDef; typedef union _USBH_CSW_Block { struct __CSW { uint32_t CSWSignature; uint32_t CSWTag; uint32_t CSWDataResidue; uint8_t CSWStatus; }field; uint8_t CSWArray[13]; }HostCSWPkt_TypeDef; /** * @} */ /** @defgroup USBH_MSC_BOT_Exported_Defines * @{ */ #define USBH_MSC_SEND_CBW 1 #define USBH_MSC_SENT_CBW 2 #define USBH_MSC_BOT_DATAIN_STATE 3 #define USBH_MSC_BOT_DATAOUT_STATE 4 #define USBH_MSC_RECEIVE_CSW_STATE 5 #define USBH_MSC_DECODE_CSW 6 #define USBH_MSC_BOT_ERROR_IN 7 #define USBH_MSC_BOT_ERROR_OUT 8 #define USBH_MSC_BOT_CBW_SIGNATURE 0x43425355 #define USBH_MSC_BOT_CBW_TAG 0x20304050 #define USBH_MSC_BOT_CSW_SIGNATURE 0x53425355 #define USBH_MSC_CSW_DATA_LENGTH 0x000D #define USBH_MSC_BOT_CBW_PACKET_LENGTH 31 #define USBH_MSC_CSW_LENGTH 13 #define USBH_MSC_CSW_MAX_LENGTH 63 /* CSW Status Definitions */ #define USBH_MSC_CSW_CMD_PASSED 0x00 #define USBH_MSC_CSW_CMD_FAILED 0x01 #define USBH_MSC_CSW_PHASE_ERROR 0x02 #define USBH_MSC_SEND_CSW_DISABLE 0 #define USBH_MSC_SEND_CSW_ENABLE 1 #define USBH_MSC_DIR_IN 0 #define USBH_MSC_DIR_OUT 1 #define USBH_MSC_BOTH_DIR 2 //#define USBH_MSC_PAGE_LENGTH 0x40 #define USBH_MSC_PAGE_LENGTH 512 #define CBW_CB_LENGTH 16 #define CBW_LENGTH 10 #define CBW_LENGTH_TEST_UNIT_READY 6 #define USB_REQ_BOT_RESET 0xFF #define USB_REQ_GET_MAX_LUN 0xFE #define MAX_BULK_STALL_COUNT_LIMIT 0x04 /* If STALL is seen on Bulk Endpoint continously, this means that device and Host has phase error Hence a Reset is needed */ /** * @} */ /** @defgroup USBH_MSC_BOT_Exported_Macros * @{ */ /** * @} */ /** @defgroup USBH_MSC_BOT_Exported_Variables * @{ */ extern USBH_BOTXfer_TypeDef USBH_MSC_BOTXferParam; extern HostCBWPkt_TypeDef USBH_MSC_CBWData; extern HostCSWPkt_TypeDef USBH_MSC_CSWData; /** * @} */ /** @defgroup USBH_MSC_BOT_Exported_FunctionsPrototype * @{ */ void USBH_MSC_HandleBOTXfer(USB_OTG_CORE_HANDLE *pdev, USBH_HOST *phost); uint8_t USBH_MSC_DecodeCSW(USB_OTG_CORE_HANDLE *pdev, USBH_HOST *phost); void USBH_MSC_Init(USB_OTG_CORE_HANDLE *pdev); USBH_Status USBH_MSC_BOT_Abort(USB_OTG_CORE_HANDLE *pdev, USBH_HOST *phost, uint8_t direction); /** * @} */ #endif //__USBH_MSC_BOT_H__ /** * @} */ /** * @} */ /** * @} */ /** * @} */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/