mirror of
https://github.com/STMicroelectronics/stm32-mw-usb-device.git
synced 2026-02-08 20:18:07 -05:00
192 lines
4.8 KiB
C
192 lines
4.8 KiB
C
/**
|
|
******************************************************************************
|
|
* @file usbd_msc_storage_template.c
|
|
* @author MCD Application Team
|
|
* @brief Memory management layer
|
|
******************************************************************************
|
|
* @attention
|
|
*
|
|
* Copyright (c) 2015 STMicroelectronics.
|
|
* All rights reserved.
|
|
*
|
|
* This software is licensed under terms that can be found in the LICENSE file
|
|
* in the root directory of this software component.
|
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
|
*
|
|
******************************************************************************
|
|
*/
|
|
|
|
/* BSPDependencies
|
|
- "stm32xxxxx_{eval}{discovery}{nucleo_144}.c"
|
|
- "stm32xxxxx_{eval}{discovery}_io.c"
|
|
- "stm32xxxxx_{eval}{discovery}{adafruit}_sd.c"
|
|
EndBSPDependencies */
|
|
|
|
/* Includes ------------------------------------------------------------------*/
|
|
#include "usbd_msc_storage_template.h"
|
|
|
|
|
|
/* Private typedef -----------------------------------------------------------*/
|
|
/* Private define ------------------------------------------------------------*/
|
|
/* Private macro -------------------------------------------------------------*/
|
|
/* Private variables ---------------------------------------------------------*/
|
|
/* Private function prototypes -----------------------------------------------*/
|
|
/* Extern function prototypes ------------------------------------------------*/
|
|
/* Private functions ---------------------------------------------------------*/
|
|
|
|
#define STORAGE_LUN_NBR 1U
|
|
#define STORAGE_BLK_NBR 0x10000U
|
|
#define STORAGE_BLK_SIZ 0x200U
|
|
|
|
int8_t STORAGE_Init(uint8_t lun);
|
|
|
|
int8_t STORAGE_GetCapacity(uint8_t lun, uint32_t *block_num,
|
|
uint16_t *block_size);
|
|
|
|
int8_t STORAGE_IsReady(uint8_t lun);
|
|
|
|
int8_t STORAGE_IsWriteProtected(uint8_t lun);
|
|
|
|
int8_t STORAGE_Read(uint8_t lun, uint8_t *buf, uint32_t blk_addr,
|
|
uint16_t blk_len);
|
|
|
|
int8_t STORAGE_Write(uint8_t lun, uint8_t *buf, uint32_t blk_addr,
|
|
uint16_t blk_len);
|
|
|
|
int8_t STORAGE_GetMaxLun(void);
|
|
|
|
/* USB Mass storage Standard Inquiry Data */
|
|
int8_t STORAGE_Inquirydata[] = /* 36 */
|
|
{
|
|
|
|
/* LUN 0 */
|
|
0x00,
|
|
0x80,
|
|
0x02,
|
|
0x02,
|
|
(STANDARD_INQUIRY_DATA_LEN - 5),
|
|
0x00,
|
|
0x00,
|
|
0x00,
|
|
'S', 'T', 'M', ' ', ' ', ' ', ' ', ' ', /* Manufacturer : 8 bytes */
|
|
'P', 'r', 'o', 'd', 'u', 'c', 't', ' ', /* Product : 16 Bytes */
|
|
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
|
|
'0', '.', '0', '1', /* Version : 4 Bytes */
|
|
};
|
|
|
|
USBD_StorageTypeDef USBD_MSC_Template_fops =
|
|
{
|
|
STORAGE_Init,
|
|
STORAGE_GetCapacity,
|
|
STORAGE_IsReady,
|
|
STORAGE_IsWriteProtected,
|
|
STORAGE_Read,
|
|
STORAGE_Write,
|
|
STORAGE_GetMaxLun,
|
|
STORAGE_Inquirydata,
|
|
|
|
};
|
|
|
|
/**
|
|
* @brief Initializes the storage unit (medium)
|
|
* @param lun: Logical unit number
|
|
* @retval Status (0 : OK / -1 : Error)
|
|
*/
|
|
int8_t STORAGE_Init(uint8_t lun)
|
|
{
|
|
UNUSED(lun);
|
|
|
|
return (0);
|
|
}
|
|
|
|
/**
|
|
* @brief Returns the medium capacity.
|
|
* @param lun: Logical unit number
|
|
* @param block_num: Number of total block number
|
|
* @param block_size: Block size
|
|
* @retval Status (0: OK / -1: Error)
|
|
*/
|
|
int8_t STORAGE_GetCapacity(uint8_t lun, uint32_t *block_num, uint16_t *block_size)
|
|
{
|
|
UNUSED(lun);
|
|
|
|
*block_num = STORAGE_BLK_NBR;
|
|
*block_size = STORAGE_BLK_SIZ;
|
|
return (0);
|
|
}
|
|
|
|
|
|
/**
|
|
* @brief Checks whether the medium is ready.
|
|
* @param lun: Logical unit number
|
|
* @retval Status (0: OK / -1: Error)
|
|
*/
|
|
int8_t STORAGE_IsReady(uint8_t lun)
|
|
{
|
|
UNUSED(lun);
|
|
|
|
return (0);
|
|
}
|
|
|
|
/**
|
|
* @brief Checks whether the medium is write protected.
|
|
* @param lun: Logical unit number
|
|
* @retval Status (0: write enabled / -1: otherwise)
|
|
*/
|
|
int8_t STORAGE_IsWriteProtected(uint8_t lun)
|
|
{
|
|
UNUSED(lun);
|
|
|
|
return 0;
|
|
}
|
|
|
|
/**
|
|
* @brief Reads data from the medium.
|
|
* @param lun: Logical unit number
|
|
* @param buf: data buffer
|
|
* @param blk_addr: Logical block address
|
|
* @param blk_len: Blocks number
|
|
* @retval Status (0: OK / -1: Error)
|
|
*/
|
|
int8_t STORAGE_Read(uint8_t lun, uint8_t *buf,
|
|
uint32_t blk_addr, uint16_t blk_len)
|
|
{
|
|
UNUSED(lun);
|
|
UNUSED(buf);
|
|
UNUSED(blk_addr);
|
|
UNUSED(blk_len);
|
|
|
|
return 0;
|
|
}
|
|
|
|
/**
|
|
* @brief Writes data into the medium.
|
|
* @param lun: Logical unit number
|
|
* @param buf: data buffer
|
|
* @param blk_addr: Logical block address
|
|
* @param blk_len: Blocks number
|
|
* @retval Status (0 : OK / -1 : Error)
|
|
*/
|
|
int8_t STORAGE_Write(uint8_t lun, uint8_t *buf,
|
|
uint32_t blk_addr, uint16_t blk_len)
|
|
{
|
|
UNUSED(lun);
|
|
UNUSED(buf);
|
|
UNUSED(blk_addr);
|
|
UNUSED(blk_len);
|
|
|
|
return (0);
|
|
}
|
|
|
|
/**
|
|
* @brief Returns the Max Supported LUNs.
|
|
* @param None
|
|
* @retval Lun(s) number
|
|
*/
|
|
int8_t STORAGE_GetMaxLun(void)
|
|
{
|
|
return (STORAGE_LUN_NBR - 1);
|
|
}
|
|
|
|
|