aboutsummaryrefslogtreecommitdiff
path: root/stm/lib/usbd_storage_msd.c
diff options
context:
space:
mode:
authorDamien2013-10-13 00:42:20 +0100
committerDamien2013-10-13 00:42:20 +0100
commited65605edc5c1376947a34723b9c750400b5a028 (patch)
treed0317e867c4286ec7c889fc9ed18591a1d9990dd /stm/lib/usbd_storage_msd.c
parent3ef4abb446dfcbdbc426a0921a33e0883607e677 (diff)
Inital commit of stm32f4xx framework.
Diffstat (limited to 'stm/lib/usbd_storage_msd.c')
-rw-r--r--stm/lib/usbd_storage_msd.c350
1 files changed, 350 insertions, 0 deletions
diff --git a/stm/lib/usbd_storage_msd.c b/stm/lib/usbd_storage_msd.c
new file mode 100644
index 000000000..1844ef9ad
--- /dev/null
+++ b/stm/lib/usbd_storage_msd.c
@@ -0,0 +1,350 @@
+/**
+ ******************************************************************************
+ * @file usbd_storage_msd.c
+ * @author MCD application Team
+ * @version V1.1.0
+ * @date 19-March-2012
+ * @brief This file provides the disk operations functions.
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>&copy; 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.
+ *
+ ******************************************************************************
+ */
+
+/* Includes ------------------------------------------------------------------*/
+#include "usbd_msc_mem.h"
+#include "usb_conf.h"
+
+/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
+ * @{
+ */
+
+
+/** @defgroup STORAGE
+ * @brief media storage application module
+ * @{
+ */
+
+/** @defgroup STORAGE_Private_TypesDefinitions
+ * @{
+ */
+/**
+ * @}
+ */
+
+
+/** @defgroup STORAGE_Private_Defines
+ * @{
+ */
+
+#define STORAGE_LUN_NBR 1
+/**
+ * @}
+ */
+
+
+/** @defgroup STORAGE_Private_Macros
+ * @{
+ */
+/**
+ * @}
+ */
+
+
+/** @defgroup STORAGE_Private_Variables
+ * @{
+ */
+/* USB Mass storage Standard Inquiry Data */
+const int8_t STORAGE_Inquirydata[] = {//36
+
+ /* LUN 0 */
+ 0x00,
+ 0x00, // make it 0x80 for a removable drive
+ 0x02,
+ 0x02,
+ (USBD_STD_INQUIRY_LENGTH - 5),
+ 0x00,
+ 0x00,
+ 0x00,
+ 'S', 'T', 'M', ' ', ' ', ' ', ' ', ' ', /* Manufacturer : 8 bytes */
+ 'm', 'i', 'c', 'r', 'o', 'S', 'D', ' ', /* Product : 16 Bytes */
+ 'F', 'l', 'a', 's', 'h', ' ', ' ', ' ',
+ '1', '.', '0' ,'0', /* Version : 4 Bytes */
+};
+
+/**
+ * @}
+ */
+
+
+/** @defgroup STORAGE_Private_FunctionPrototypes
+ * @{
+ */
+int8_t STORAGE_Init (uint8_t lun);
+
+int8_t STORAGE_GetCapacity (uint8_t lun,
+ uint32_t *block_num,
+ uint32_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);
+
+
+USBD_STORAGE_cb_TypeDef USBD_MICRO_SDIO_fops =
+{
+ STORAGE_Init,
+ STORAGE_GetCapacity,
+ STORAGE_IsReady,
+ STORAGE_IsWriteProtected,
+ STORAGE_Read,
+ STORAGE_Write,
+ STORAGE_GetMaxLun,
+ (int8_t *)STORAGE_Inquirydata,
+};
+
+USBD_STORAGE_cb_TypeDef *USBD_STORAGE_fops = &USBD_MICRO_SDIO_fops;
+/*
+#ifndef USE_STM3210C_EVAL
+extern SD_CardInfo SDCardInfo;
+#endif
+*/
+
+/**
+ * @}
+ */
+
+
+/** @defgroup STORAGE_Private_Functions
+ * @{
+ */
+
+
+/**
+ * @brief Initialize the storage medium
+ * @param lun : logical unit number
+ * @retval Status
+ */
+
+int8_t STORAGE_Init (uint8_t lun)
+{
+ /*
+#ifndef USE_STM3210C_EVAL
+ NVIC_InitTypeDef NVIC_InitStructure;
+ NVIC_InitStructure.NVIC_IRQChannel = SDIO_IRQn;
+ NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =0;
+ NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
+ NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
+ NVIC_Init(&NVIC_InitStructure);
+#endif
+ if( SD_Init() != 0)
+ {
+ return (-1);
+ }
+ */
+
+ return (0);
+
+}
+
+/**
+ * @brief return medium capacity and block size
+ * @param lun : logical unit number
+ * @param block_num : number of physical block
+ * @param block_size : size of a physical block
+ * @retval Status
+ */
+int8_t STORAGE_GetCapacity (uint8_t lun, uint32_t *block_num, uint32_t *block_size)
+{
+/*
+#ifdef USE_STM3210C_EVAL
+ SD_CardInfo SDCardInfo;
+
+ SD_GetCardInfo(&SDCardInfo);
+
+#else
+ if(SD_GetStatus() != 0 )
+ {
+ return (-1);
+ }
+#endif
+ */
+
+
+ *block_size = 512;
+ //*block_num = SDCardInfo.CardCapacity / 512;
+ *block_num = 256 + 128;
+
+ return (0);
+
+}
+
+/**
+ * @brief check whether the medium is ready
+ * @param lun : logical unit number
+ * @retval Status
+ */
+int8_t STORAGE_IsReady (uint8_t lun)
+{
+
+ /*
+#ifndef USE_STM3210C_EVAL
+
+ static int8_t last_status = 0;
+
+ if(last_status < 0)
+ {
+ SD_Init();
+ last_status = 0;
+ }
+
+ if(SD_GetStatus() != 0)
+ {
+ last_status = -1;
+ return (-1);
+ }
+#else
+ if( SD_Init() != 0)
+ {
+ return (-1);
+ }
+#endif
+*/
+ return (0);
+}
+
+/**
+ * @brief check whether the medium is write-protected
+ * @param lun : logical unit number
+ * @retval Status
+ */
+int8_t STORAGE_IsWriteProtected (uint8_t lun)
+{
+ return 0;
+}
+
+/**
+ * @brief Read data from the medium
+ * @param lun : logical unit number
+ * @param buf : Pointer to the buffer to save data
+ * @param blk_addr : address of 1st block to be read
+ * @param blk_len : nmber of blocks to be read
+ * @retval Status
+ */
+int disk_read (
+ uint8_t pdrv, /* Physical drive nmuber (0..) */
+ uint8_t *buff, /* Data buffer to store read data */
+ uint32_t sector, /* Sector address (LBA) */
+ uint32_t count /* Number of sectors to read (1..128) */
+);
+int8_t STORAGE_Read (uint8_t lun,
+ uint8_t *buf,
+ uint32_t blk_addr,
+ uint16_t blk_len)
+{
+
+ /*
+ if( SD_ReadMultiBlocks (buf,
+ blk_addr * 512,
+ 512,
+ blk_len) != 0)
+ {
+ return -1;
+ }
+#ifndef USE_STM3210C_EVAL
+ SD_WaitReadOperation();
+ while (SD_GetStatus() != SD_TRANSFER_OK);
+#endif
+*/
+ disk_read(0, buf, blk_addr, blk_len);
+ return 0;
+}
+/**
+ * @brief Write data to the medium
+ * @param lun : logical unit number
+ * @param buf : Pointer to the buffer to write from
+ * @param blk_addr : address of 1st block to be written
+ * @param blk_len : nmber of blocks to be read
+ * @retval Status
+ */
+int disk_write (
+ uint8_t pdrv, /* Physical drive nmuber (0..) */
+ const uint8_t *buff, /* Data to be written */
+ uint32_t sector, /* Sector address (LBA) */
+ uint32_t count /* Number of sectors to write (1..128) */
+);
+int8_t STORAGE_Write (uint8_t lun,
+ uint8_t *buf,
+ uint32_t blk_addr,
+ uint16_t blk_len)
+{
+
+ /*
+ if( SD_WriteMultiBlocks (buf,
+ blk_addr * 512,
+ 512,
+ blk_len) != 0)
+ {
+ return -1;
+ }
+#ifndef USE_STM3210C_EVAL
+ SD_WaitWriteOperation();
+ while (SD_GetStatus() != SD_TRANSFER_OK);
+#endif
+*/
+ disk_write(0, buf, blk_addr, blk_len);
+ return (0);
+}
+
+/**
+ * @brief Return number of supported logical unit
+ * @param None
+ * @retval number of logical unit
+ */
+
+int8_t STORAGE_GetMaxLun (void)
+{
+ return (STORAGE_LUN_NBR - 1);
+}
+/**
+ * @}
+ */
+
+
+/**
+ * @}
+ */
+
+
+/**
+ * @}
+ */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
+