180 lines
7.6 KiB
C
180 lines
7.6 KiB
C
/*
|
|
*********************************************************************************************************
|
|
* uC/USB-Host
|
|
* The Embedded USB Host Stack
|
|
*
|
|
* Copyright 2004-2021 Silicon Laboratories Inc. www.silabs.com
|
|
*
|
|
* SPDX-License-Identifier: APACHE-2.0
|
|
*
|
|
* This software is subject to an open source license and is distributed by
|
|
* Silicon Laboratories Inc. pursuant to the terms of the Apache License,
|
|
* Version 2.0 available at www.apache.org/licenses/LICENSE-2.0.
|
|
*
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
*
|
|
* MASS STORAGE CLASS (MSC)
|
|
*
|
|
* Filename : usbh_msc.h
|
|
* Version : V3.42.01
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* MODULE
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
#ifndef USBH_MSC_MODULE_PRESENT
|
|
#define USBH_MSC_MODULE_PRESENT
|
|
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* INCLUDE FILES
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
#include "../../Source/usbh_os.h"
|
|
#include "../../Source/usbh_class.h"
|
|
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* EXTERNS
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
#ifdef USBH_MSC_MODULE
|
|
#define USBH_MSC_EXT
|
|
#else
|
|
#define USBH_MSC_EXT extern
|
|
#endif
|
|
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* DEFINES
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
#define USBH_MSC_TIMEOUT 10000u
|
|
|
|
#define USBH_MSC_DEV_NOT_IN_USE 0u
|
|
#define USBH_MSC_DEV_IN_USE 1u
|
|
|
|
#define USBH_MSC_DATA_DIR_IN 0x80u
|
|
#define USBH_MSC_DATA_DIR_OUT 0x00u
|
|
#define USBH_MSC_DATA_DIR_NONE 0x01u
|
|
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* DATA TYPES
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
typedef CPU_INT08U USBH_MSC_DATA_DIR;
|
|
|
|
/* -------------------- MSC DEVICE -------------------- */
|
|
typedef struct usbh_msc_dev {
|
|
USBH_EP BulkInEP; /* Bulk IN endpoint. */
|
|
USBH_EP BulkOutEP; /* Bulk OUT endpoint. */
|
|
USBH_DEV *DevPtr; /* Pointer to USB device. */
|
|
USBH_IF *IF_Ptr; /* Pointer to interface. */
|
|
CPU_INT08U State; /* State of MSC device. */
|
|
CPU_INT08U RefCnt; /* Cnt of app ref on this dev. */
|
|
USBH_HMUTEX HMutex;
|
|
} USBH_MSC_DEV;
|
|
|
|
typedef struct msc_inquiry_info {
|
|
CPU_INT08U DevType;
|
|
CPU_INT08U IsRemovable;
|
|
CPU_INT08U Vendor_ID[8];
|
|
CPU_INT08U Product_ID[16];
|
|
CPU_INT32U ProductRevisionLevel;
|
|
} USBH_MSC_INQUIRY_INFO;
|
|
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* GLOBAL VARIABLES
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
USBH_MSC_EXT USBH_CLASS_DRV USBH_MSC_ClassDrv;
|
|
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* MACROS
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* FUNCTION PROTOTYPES
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
USBH_ERR USBH_MSC_Init (USBH_MSC_DEV *p_msc_dev,
|
|
CPU_INT08U lun);
|
|
|
|
CPU_INT08U USBH_MSC_MaxLUN_Get (USBH_MSC_DEV *p_msc_dev,
|
|
USBH_ERR *p_err);
|
|
|
|
CPU_BOOLEAN USBH_MSC_UnitRdyTest(USBH_MSC_DEV *p_msc_dev,
|
|
CPU_INT08U lun,
|
|
USBH_ERR *p_err);
|
|
|
|
USBH_ERR USBH_MSC_CapacityRd (USBH_MSC_DEV *p_msc_dev,
|
|
CPU_INT08U lun,
|
|
CPU_INT32U *p_nbr_blks,
|
|
CPU_INT32U *p_blk_size);
|
|
|
|
USBH_ERR USBH_MSC_StdInquiry (USBH_MSC_DEV *p_msc_dev,
|
|
USBH_MSC_INQUIRY_INFO *p_msc_inquiry_info,
|
|
CPU_INT08U lun);
|
|
|
|
USBH_ERR USBH_MSC_RefAdd (USBH_MSC_DEV *p_msc_dev);
|
|
|
|
USBH_ERR USBH_MSC_RefRel (USBH_MSC_DEV *p_msc_dev);
|
|
|
|
CPU_INT32U USBH_MSC_Rd (USBH_MSC_DEV *p_msc_dev,
|
|
CPU_INT08U lun,
|
|
CPU_INT32U blk_addr,
|
|
CPU_INT16U nbr_blks,
|
|
CPU_INT32U blk_size,
|
|
void *p_arg,
|
|
USBH_ERR *p_err);
|
|
|
|
CPU_INT32U USBH_MSC_Wr (USBH_MSC_DEV *p_msc_dev,
|
|
CPU_INT08U lun,
|
|
CPU_INT32U blk_addr,
|
|
CPU_INT16U nbr_blks,
|
|
CPU_INT32U blk_size,
|
|
const void *p_arg,
|
|
USBH_ERR *p_err);
|
|
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* CONFIGURATION ERRORS
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* MODULE END
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
#endif
|