forked from stm/stm32-mw-usb-device
348 lines
8.9 KiB
C
348 lines
8.9 KiB
C
/**
|
|
******************************************************************************
|
|
* @file usbd_mtp_if.c
|
|
* @author MCD Application Team
|
|
* @brief Source file for USBD MTP file list_files.
|
|
******************************************************************************
|
|
* @attention
|
|
*
|
|
* Copyright (c) 2021 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.
|
|
*
|
|
******************************************************************************
|
|
*/
|
|
|
|
/* Includes ------------------------------------------------------------------*/
|
|
#include "usbd_mtp_if_template.h"
|
|
|
|
/* Private typedef -----------------------------------------------------------*/
|
|
/* Private variables ---------------------------------------------------------*/
|
|
/*
|
|
static FILE MyFile;
|
|
static FATFS SDFatFs;
|
|
static char SDPath[4];
|
|
static FolderLevel Fold_Lvl;
|
|
static FOLD_INFTypeDef FoldStruct;
|
|
static FILE_INFTypeDef FileStruct;
|
|
static SD_Object_TypeDef sd_object;
|
|
*/
|
|
extern USBD_HandleTypeDef USBD_Device;
|
|
|
|
uint32_t idx[200];
|
|
uint32_t parent;
|
|
/* static char path[255]; */
|
|
uint32_t sc_buff[MTP_IF_SCRATCH_BUFF_SZE / 4U];
|
|
uint32_t sc_len = 0U;
|
|
uint32_t pckt_cnt = 1U;
|
|
uint32_t foldsize;
|
|
|
|
/* Private define ------------------------------------------------------------*/
|
|
/* Private macro -------------------------------------------------------------*/
|
|
/* Private function prototypes -----------------------------------------------*/
|
|
static uint8_t USBD_MTP_Itf_Init(void);
|
|
static uint8_t USBD_MTP_Itf_DeInit(void);
|
|
static uint32_t USBD_MTP_Itf_ReadData(uint32_t Param1, uint8_t *buff, MTP_DataLengthTypeDef *data_length);
|
|
static uint16_t USBD_MTP_Itf_Create_NewObject(MTP_ObjectInfoTypeDef ObjectInfo, uint32_t objhandle);
|
|
|
|
static uint32_t USBD_MTP_Itf_GetIdx(uint32_t Param3, uint32_t *obj_handle);
|
|
static uint32_t USBD_MTP_Itf_GetParentObject(uint32_t Param);
|
|
static uint16_t USBD_MTP_Itf_GetObjectFormat(uint32_t Param);
|
|
static uint8_t USBD_MTP_Itf_GetObjectName_len(uint32_t Param);
|
|
static void USBD_MTP_Itf_GetObjectName(uint32_t Param, uint8_t obj_len, uint16_t *buf);
|
|
static uint32_t USBD_MTP_Itf_GetObjectSize(uint32_t Param);
|
|
static uint64_t USBD_MTP_Itf_GetMaxCapability(void);
|
|
static uint64_t USBD_MTP_Itf_GetFreeSpaceInBytes(void);
|
|
static uint32_t USBD_MTP_Itf_GetNewIndex(uint16_t objformat);
|
|
static void USBD_MTP_Itf_WriteData(uint16_t len, uint8_t *buff);
|
|
static uint32_t USBD_MTP_Itf_GetContainerLength(uint32_t Param1);
|
|
static uint16_t USBD_MTP_Itf_DeleteObject(uint32_t Param1);
|
|
|
|
static void USBD_MTP_Itf_Cancel(uint32_t Phase);
|
|
/* static uint32_t USBD_MTP_Get_idx_to_delete(uint32_t Param, uint8_t *tab); */
|
|
|
|
USBD_MTP_ItfTypeDef USBD_MTP_fops =
|
|
{
|
|
USBD_MTP_Itf_Init,
|
|
USBD_MTP_Itf_DeInit,
|
|
USBD_MTP_Itf_ReadData,
|
|
USBD_MTP_Itf_Create_NewObject,
|
|
USBD_MTP_Itf_GetIdx,
|
|
USBD_MTP_Itf_GetParentObject,
|
|
USBD_MTP_Itf_GetObjectFormat,
|
|
USBD_MTP_Itf_GetObjectName_len,
|
|
USBD_MTP_Itf_GetObjectName,
|
|
USBD_MTP_Itf_GetObjectSize,
|
|
USBD_MTP_Itf_GetMaxCapability,
|
|
USBD_MTP_Itf_GetFreeSpaceInBytes,
|
|
USBD_MTP_Itf_GetNewIndex,
|
|
USBD_MTP_Itf_WriteData,
|
|
USBD_MTP_Itf_GetContainerLength,
|
|
USBD_MTP_Itf_DeleteObject,
|
|
USBD_MTP_Itf_Cancel,
|
|
sc_buff,
|
|
MTP_IF_SCRATCH_BUFF_SZE,
|
|
};
|
|
|
|
/* Private functions ---------------------------------------------------------*/
|
|
|
|
/**
|
|
* @brief USBD_MTP_Itf_Init
|
|
* Initialize the file system Layer
|
|
* @param None
|
|
* @retval status value
|
|
*/
|
|
static uint8_t USBD_MTP_Itf_Init(void)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
/**
|
|
* @brief USBD_MTP_Itf_DeInit
|
|
* Uninitialize the file system Layer
|
|
* @param None
|
|
* @retval status value
|
|
*/
|
|
static uint8_t USBD_MTP_Itf_DeInit(void)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
/**
|
|
* @brief USBD_MTP_Itf_GetIdx
|
|
* Get all object handle
|
|
* @param Param3: current object handle
|
|
* @param obj_handle: all objects handle (subfolders/files) in current object
|
|
* @retval number of object handle in current object
|
|
*/
|
|
static uint32_t USBD_MTP_Itf_GetIdx(uint32_t Param3, uint32_t *obj_handle)
|
|
{
|
|
uint32_t count = 0U;
|
|
UNUSED(Param3);
|
|
UNUSED(obj_handle);
|
|
|
|
return count;
|
|
}
|
|
|
|
/**
|
|
* @brief USBD_MTP_Itf_GetParentObject
|
|
* Get parent object
|
|
* @param Param: object handle (object index)
|
|
* @retval parent object
|
|
*/
|
|
static uint32_t USBD_MTP_Itf_GetParentObject(uint32_t Param)
|
|
{
|
|
uint32_t parentobj = 0U;
|
|
UNUSED(Param);
|
|
|
|
return parentobj;
|
|
}
|
|
|
|
/**
|
|
* @brief USBD_MTP_Itf_GetObjectFormat
|
|
* Get object format
|
|
* @param Param: object handle (object index)
|
|
* @retval object format
|
|
*/
|
|
static uint16_t USBD_MTP_Itf_GetObjectFormat(uint32_t Param)
|
|
{
|
|
uint16_t objformat = 0U;
|
|
UNUSED(Param);
|
|
|
|
return objformat;
|
|
}
|
|
|
|
/**
|
|
* @brief USBD_MTP_Itf_GetObjectName_len
|
|
* Get object name length
|
|
* @param Param: object handle (object index)
|
|
* @retval object name length
|
|
*/
|
|
static uint8_t USBD_MTP_Itf_GetObjectName_len(uint32_t Param)
|
|
{
|
|
uint8_t obj_len = 0U;
|
|
UNUSED(Param);
|
|
|
|
return obj_len;
|
|
}
|
|
|
|
/**
|
|
* @brief USBD_MTP_Itf_GetObjectName
|
|
* Get object name
|
|
* @param Param: object handle (object index)
|
|
* @param obj_len: length of object name
|
|
* @param buf: pointer to object name
|
|
* @retval object size in SD card
|
|
*/
|
|
static void USBD_MTP_Itf_GetObjectName(uint32_t Param, uint8_t obj_len, uint16_t *buf)
|
|
{
|
|
UNUSED(Param);
|
|
UNUSED(obj_len);
|
|
UNUSED(buf);
|
|
|
|
return;
|
|
}
|
|
|
|
/**
|
|
* @brief USBD_MTP_Itf_GetObjectSize
|
|
* Get size of current object
|
|
* @param Param: object handle (object index)
|
|
* @retval object size in SD card
|
|
*/
|
|
static uint32_t USBD_MTP_Itf_GetObjectSize(uint32_t Param)
|
|
{
|
|
uint32_t ObjCompSize = 0U;
|
|
UNUSED(Param);
|
|
|
|
return ObjCompSize;
|
|
}
|
|
|
|
/**
|
|
* @brief USBD_MTP_Itf_Create_NewObject
|
|
* Create new object in SD card and store necessary information for future use
|
|
* @param ObjectInfo: object information to use
|
|
* @param objhandle: object handle (object index)
|
|
* @retval None
|
|
*/
|
|
static uint16_t USBD_MTP_Itf_Create_NewObject(MTP_ObjectInfoTypeDef ObjectInfo, uint32_t objhandle)
|
|
{
|
|
uint16_t rep_code = 0U;
|
|
UNUSED(ObjectInfo);
|
|
UNUSED(objhandle);
|
|
|
|
return rep_code;
|
|
}
|
|
|
|
/**
|
|
* @brief USBD_MTP_Itf_GetMaxCapability
|
|
* Get max capability in SD card
|
|
* @param None
|
|
* @retval max capability
|
|
*/
|
|
static uint64_t USBD_MTP_Itf_GetMaxCapability(void)
|
|
{
|
|
uint64_t max_cap = 0U;
|
|
|
|
return max_cap;
|
|
}
|
|
|
|
/**
|
|
* @brief USBD_MTP_Itf_GetFreeSpaceInBytes
|
|
* Get free space in bytes in SD card
|
|
* @param None
|
|
* @retval free space in bytes
|
|
*/
|
|
static uint64_t USBD_MTP_Itf_GetFreeSpaceInBytes(void)
|
|
{
|
|
uint64_t f_space_inbytes = 0U;
|
|
|
|
return f_space_inbytes;
|
|
}
|
|
|
|
/**
|
|
* @brief USBD_MTP_Itf_GetNewIndex
|
|
* Create new object handle
|
|
* @param objformat: object format
|
|
* @retval object handle
|
|
*/
|
|
static uint32_t USBD_MTP_Itf_GetNewIndex(uint16_t objformat)
|
|
{
|
|
uint32_t n_index = 0U;
|
|
UNUSED(objformat);
|
|
|
|
return n_index;
|
|
}
|
|
|
|
/**
|
|
* @brief USBD_MTP_Itf_WriteData
|
|
* Write file data to SD card
|
|
* @param len: size of data to write
|
|
* @param buff: data to write in SD card
|
|
* @retval None
|
|
*/
|
|
static void USBD_MTP_Itf_WriteData(uint16_t len, uint8_t *buff)
|
|
{
|
|
UNUSED(len);
|
|
UNUSED(buff);
|
|
|
|
return;
|
|
}
|
|
|
|
/**
|
|
* @brief USBD_MTP_Itf_GetContainerLength
|
|
* Get length of generic container
|
|
* @param Param1: object handle
|
|
* @retval length of generic container
|
|
*/
|
|
static uint32_t USBD_MTP_Itf_GetContainerLength(uint32_t Param1)
|
|
{
|
|
uint32_t length = 0U;
|
|
UNUSED(Param1);
|
|
|
|
return length;
|
|
}
|
|
|
|
/**
|
|
* @brief USBD_MTP_Itf_DeleteObject
|
|
* delete object from SD card
|
|
* @param Param1: object handle (file/folder index)
|
|
* @retval response code
|
|
*/
|
|
static uint16_t USBD_MTP_Itf_DeleteObject(uint32_t Param1)
|
|
{
|
|
uint16_t rep_code = 0U;
|
|
UNUSED(Param1);
|
|
|
|
return rep_code;
|
|
}
|
|
|
|
/**
|
|
* @brief USBD_MTP_Get_idx_to_delete
|
|
* Get all files/foldres index to delete with descending order ( max depth)
|
|
* @param Param: object handle (file/folder index)
|
|
* @param tab: pointer to list of files/folders to delete
|
|
* @retval Number of files/folders to delete
|
|
*/
|
|
/* static uint32_t USBD_MTP_Get_idx_to_delete(uint32_t Param, uint8_t *tab)
|
|
{
|
|
uint32_t cnt = 0U;
|
|
|
|
return cnt;
|
|
}
|
|
*/
|
|
|
|
/**
|
|
* @brief USBD_MTP_Itf_ReadData
|
|
* Read data from SD card
|
|
* @param Param1: object handle
|
|
* @param buff: pointer to data to be read
|
|
* @param temp_length: current data size read
|
|
* @retval necessary information for next read/finish reading
|
|
*/
|
|
static uint32_t USBD_MTP_Itf_ReadData(uint32_t Param1, uint8_t *buff, MTP_DataLengthTypeDef *data_length)
|
|
{
|
|
UNUSED(Param1);
|
|
UNUSED(buff);
|
|
UNUSED(data_length);
|
|
|
|
return 0U;
|
|
}
|
|
|
|
/**
|
|
* @brief USBD_MTP_Itf_Cancel
|
|
* Close opened folder/file while cancelling transaction
|
|
* @param MTP_ResponsePhase: MTP current state
|
|
* @retval None
|
|
*/
|
|
static void USBD_MTP_Itf_Cancel(uint32_t Phase)
|
|
{
|
|
UNUSED(Phase);
|
|
|
|
/* Make sure to close open file while canceling transaction */
|
|
|
|
return;
|
|
}
|