/**************************************************************************//* *//* Copyright (c) Microsoft Corporation. All rights reserved. *//* *//* This software is licensed under the Microsoft Software License *//* Terms for Microsoft Azure RTOS. Full text of the license can be *//* found in the LICENSE file at https://aka.ms/AzureRTOS_EULA *//* and in the root directory of this software. *//* */.../**************************************************************************//* Define to prevent recursive inclusion -------------------------------------*/#ifndefFX_STM32_SD_DRIVER_H#defineFX_STM32_SD_DRIVER_H#ifdef__cplusplusextern"C"{#endif/* Includes ------------------------------------------------------------------*/#include"fx_api.h"#include"stm32f4xx_hal.h"/* USER CODE BEGIN Includes *//* USER CODE END Includes */Includes/* Exported types ------------------------------------------------------------*//* USER CODE BEGIN ET *//* USER CODE END ET */externTX_SEMAPHOREtransfer_semaphore;Exported types/* Exported constants --------------------------------------------------------*//* Default timeout used to wait for fx operations */#defineFX_STM32_SD_DEFAULT_TIMEOUT(10*TX_TIMER_TICKS_PER_SECOND)/* Let the filex low-level driver initialize the SD driver */#defineFX_STM32_SD_INIT1/* Use the SD DMA API */#defineFX_STM32_SD_DMA_API1/* SDIO instance to be used by FileX */#defineFX_STM32_SD_INSTANCE0/* Default sector size, used by the driver */#defineFX_STM32_SD_DEFAULT_SECTOR_SIZE512/* USER CODE BEGIN EC *//* USER CODE END EC *//* Exported macro ------------------------------------------------------------*//* USER CODE BEGIN EM *//* USER CODE END EM *//* Get the current time in ticks *//* USER CODE BEGIN FX_STM32_SD_CURRENT_TIME_TX */#defineFX_STM32_SD_CURRENT_TIME()tx_time_get()/* USER CODE END FX_STM32_SD_CURRENT_TIME_TX *//* Macro called before initializing the SD driver * e.g. create a semaphore used for transfer notification *//* ... *//* USER CODE BEGIN FX_STM32_SD_PRE_INIT_TX */#defineFX_STM32_SD_PRE_INIT(_media_ptr)do{\if(tx_semaphore_create(&transfer_semaphore,"sd transfer semaphore",1)!=TX_SUCCESS)\{\_media_ptr->fx_media_driver_status=FX_IO_ERROR;\...}\...}while(0).../* USER CODE END FX_STM32_SD_PRE_INIT_TX *//* Macro called after initializing the SD driver *//* USER CODE BEGIN FX_STM32_SD_POST_INIT */#defineFX_STM32_SD_POST_INIT(_media_ptr)/* USER CODE END FX_STM32_SD_POST_INIT *//* Macro called after the SD deinit *//* USER CODE BEGIN FX_STM32_SD_POST_DEINIT_TX */#defineFX_STM32_SD_POST_DEINIT(_media_ptr)do{\tx_semaphore_delete(&transfer_semaphore);\...}while(0).../* USER CODE END FX_STM32_SD_POST_DEINIT_TX *//* Macro called after the abort request *//* USER CODE BEGIN FX_STM32_SD_POST_ABORT */#defineFX_STM32_SD_POST_ABORT(_media_ptr)/* USER CODE END FX_STM32_SD_POST_ABORT *//* Macro called before performing read operation *//* USER CODE BEGIN FX_STM32_SD_PRE_READ_TRANSFER_DMA */#defineFX_STM32_SD_PRE_READ_TRANSFER(_media_ptr)do{\if(tx_semaphore_get(&transfer_semaphore,FX_STM32_SD_DEFAULT_TIMEOUT)!=TX_SUCCESS)\{\returnFX_IO_ERROR;\...}\...}while(0).../* USER CODE END FX_STM32_SD_PRE_READ_TRANSFER_DMA *//* Macro called after performing read operation *//* USER CODE BEGIN FX_STM32_SD_POST_READ_TRANSFER_TX */#defineFX_STM32_SD_POST_READ_TRANSFER(_media_ptr)do{\if(tx_semaphore_put(&transfer_semaphore)!=TX_SUCCESS)\{\returnFX_IO_ERROR;\...}\...}while(0).../* USER CODE END FX_STM32_SD_POST_READ_TRANSFER_TX *//* Macro for read error handling *//* USER CODE BEGIN FX_STM32_SD_READ_TRANSFER_ERROR_TX */#defineFX_STM32_SD_READ_TRANSFER_ERROR(_status_)do{\tx_semaphore_put(&transfer_semaphore);\_status_=FX_IO_ERROR;\...}while(0).../* USER CODE END FX_STM32_SD_READ_TRANSFER_ERROR_TX *//* Define how to notify about Read completion operation *//* USER CODE BEGIN FX_STM32_SD_READ_CPLT_NOTIFY_TX */#defineFX_STM32_SD_READ_CPLT_NOTIFY()do{\if(tx_semaphore_get(&transfer_semaphore,FX_STM32_SD_DEFAULT_TIMEOUT)!=TX_SUCCESS)\{\returnFX_IO_ERROR;\...}\...}while(0).../* USER CODE END FX_STM32_SD_READ_CPLT_NOTIFY_TX *//* Define how to notify about write completion operation *//* USER CODE BEGIN FX_STM32_SD_WRITE_CPLT_NOTIFY_TX */#defineFX_STM32_SD_WRITE_CPLT_NOTIFYFX_STM32_SD_READ_CPLT_NOTIFY/* USER CODE END FX_STM32_SD_WRITE_CPLT_NOTIFY_TX *//* Macro called before performing write operation *//* USER CODE BEGIN FX_STM32_SD_PRE_WRITE_TRANSFER_TX */#defineFX_STM32_SD_PRE_WRITE_TRANSFERFX_STM32_SD_PRE_READ_TRANSFER/* USER CODE END FX_STM32_SD_PRE_WRITE_TRANSFER_TX *//* Macro called after performing write operation *//* USER CODE BEGIN FX_STM32_SD_POST_WRITE_TRANSFER */#defineFX_STM32_SD_POST_WRITE_TRANSFERFX_STM32_SD_POST_READ_TRANSFER/* USER CODE END FX_STM32_SD_POST_WRITE_TRANSFER *//* Macro for write error handling *//* USER CODE BEGIN FX_STM32_SD_WRITE_TRANSFER_ERROR */#defineFX_STM32_SD_WRITE_TRANSFER_ERRORFX_STM32_SD_READ_TRANSFER_ERROR18 defines/* USER CODE END FX_STM32_SD_WRITE_TRANFSER_ERROR *//* Exported functions prototypes ---------------------------------------------*/INTfx_stm32_sd_init(UINTinstance);INTfx_stm32_sd_deinit(UINTinstance);INTfx_stm32_sd_get_status(UINTinstance);INTfx_stm32_sd_read_blocks(UINTinstance,UINT*buffer,UINTstart_block,UINTtotal_blocks);INTfx_stm32_sd_write_blocks(UINTinstance,UINT*buffer,UINTstart_block,UINTtotal_blocks);VOIDfx_stm32_sd_driver(FX_MEDIA*media_ptr);/* USER CODE BEGIN EFP *//* USER CODE END EFP */Exported functions prototypes/* Private defines -----------------------------------------------------------*//* USER CODE BEGIN PD *//* USER CODE END PD *//* USER CODE BEGIN 1 *//* USER CODE END 1 */#ifdef__cplusplus}extern "C" { ... }#endif/* ... */...#endif/* FX_STM32_SD_DRIVER_H */