#ifndef FSFW_HAL_STM32H7_SPI_SPICORE_H_ #define FSFW_HAL_STM32H7_SPI_SPICORE_H_ #include "stm32h7xx_hal.h" #include "stm32h7xx_hal_dma.h" #ifdef __cplusplus extern "C" { #endif using msp_func_t = void (*) (void* args); using spi_transfer_cb_t = void (*) (SPI_HandleTypeDef *hspi, void* userArgs); namespace spi { /** * Assign MSP init functions. Important for SPI configuration * @param init_func * @param init_args * @param deinit_func * @param deinit_args */ void setSpiMspFunctions(msp_func_t init_func, void* init_args, msp_func_t deinit_func, void* deinit_args); /** * Assign DMA handles. Required to use DMA for SPI transfers. * @param txHandle * @param rxHandle */ void setDmaHandles(DMA_HandleTypeDef* txHandle, DMA_HandleTypeDef* rxHandle); void getDmaHandles(DMA_HandleTypeDef** txHandle, DMA_HandleTypeDef** rxHandle); void getMspInitFunction(msp_func_t* init_func, void **args); void getMspDeinitFunction(msp_func_t* deinit_func, void **args); /** * Assign SPI handle. Needs to be done before using the SPI * @param spiHandle */ void setSpiHandle(SPI_HandleTypeDef *spiHandle); void assignTransferRxTxCompleteCallback(spi_transfer_cb_t callback, void* userArgs); void assignTransferRxCompleteCallback(spi_transfer_cb_t callback, void* userArgs); void assignTransferTxCompleteCallback(spi_transfer_cb_t callback, void* userArgs); void assignTransferErrorCallback(spi_transfer_cb_t callback, void* userArgs); /** * Get the assigned SPI handle. * @return */ SPI_HandleTypeDef* getSpiHandle(); } #ifdef __cplusplus } #endif #endif /* FSFW_HAL_STM32H7_SPI_SPICORE_H_ */