diff options
Diffstat (limited to 'firmware/targets/furi-hal-include/furi-hal-spi.h')
-rw-r--r-- | firmware/targets/furi-hal-include/furi-hal-spi.h | 132 |
1 files changed, 57 insertions, 75 deletions
diff --git a/firmware/targets/furi-hal-include/furi-hal-spi.h b/firmware/targets/furi-hal-include/furi-hal-spi.h index e42dcdc4..97913f63 100644 --- a/firmware/targets/furi-hal-include/furi-hal-spi.h +++ b/firmware/targets/furi-hal-include/furi-hal-spi.h @@ -1,106 +1,88 @@ #pragma once -#include "main.h" -#include "furi-hal-spi-config.h" -#include <furi-hal-gpio.h> + +#include <furi-hal-spi-config.h> #include <stdbool.h> #ifdef __cplusplus extern "C" { #endif -/** - * Init SPI API - */ +/** Initialize SPI HAL */ void furi_hal_spi_init(); -/* Bus Level API */ - -/** Lock SPI bus - * Takes bus mutex, if used +/** Initialize SPI Bus + * + * @param handle pointer to FuriHalSpiBus instance */ -void furi_hal_spi_bus_lock(const FuriHalSpiBus* bus); +void furi_hal_spi_bus_init(FuriHalSpiBus* bus); -/** Unlock SPI bus - * Releases BUS mutex, if used +/** Deinitialize SPI Bus + * + * @param handle pointer to FuriHalSpiBus instance */ -void furi_hal_spi_bus_unlock(const FuriHalSpiBus* bus); +void furi_hal_spi_bus_deinit(FuriHalSpiBus* bus); -/** Configure SPI bus - * @param bus - spi bus handler - * @param config - spi configuration structure +/** Initialize SPI Bus Handle + * + * @param handle pointer to FuriHalSpiBusHandle instance */ -void furi_hal_spi_bus_configure(const FuriHalSpiBus* bus, const LL_SPI_InitTypeDef* config); +void furi_hal_spi_bus_handle_init(FuriHalSpiBusHandle* handle); -/** SPI Receive - * @param bus - spi bus handler - * @param buffer - receive buffer - * @param size - transaction size - * @param timeout - bus operation timeout in ms +/** Deinitialize SPI Bus Handle + * + * @param handle pointer to FuriHalSpiBusHandle instance */ -bool furi_hal_spi_bus_rx(const FuriHalSpiBus* bus, uint8_t* buffer, size_t size, uint32_t timeout); +void furi_hal_spi_bus_handle_deinit(FuriHalSpiBusHandle* handle); -/** SPI Transmit - * @param bus - spi bus handler - * @param buffer - transmit buffer - * @param size - transaction size - * @param timeout - bus operation timeout in ms +/** Acquire SPI bus + * + * @warning blocking, calls `furi_crash` on programming error, CS transition is up to handler event routine + * + * @param handle pointer to FuriHalSpiBusHandle instance */ -bool furi_hal_spi_bus_tx(const FuriHalSpiBus* bus, uint8_t* buffer, size_t size, uint32_t timeout); +void furi_hal_spi_acquire(FuriHalSpiBusHandle* handle); -/** SPI Transmit and Receive - * @param bus - spi bus handlere - * @param tx_buffer - device handle - * @param rx_buffer - device handle - * @param size - transaction size - * @param timeout - bus operation timeout in ms +/** Release SPI bus + * + * @warning calls `furi_crash` on programming error, CS transition is up to handler event routine + * + * @param handle pointer to FuriHalSpiBusHandle instance */ -bool furi_hal_spi_bus_trx(const FuriHalSpiBus* bus, uint8_t* tx_buffer, uint8_t* rx_buffer, size_t size, uint32_t timeout); +void furi_hal_spi_release(FuriHalSpiBusHandle* handle); -/* Device Level API */ - -/** Reconfigure SPI bus for device - * @param device - device description - */ -void furi_hal_spi_device_configure(const FuriHalSpiDevice* device); - -/** Get Device handle - * And lock access to the corresponding SPI BUS - * @param device_id - device identifier - * @return device handle - */ -const FuriHalSpiDevice* furi_hal_spi_device_get(FuriHalSpiDeviceId device_id); - -/** Return Device handle - * And unlock access to the corresponding SPI BUS - * @param device - device handle - */ -void furi_hal_spi_device_return(const FuriHalSpiDevice* device); - -/** SPI Recieve - * @param device - device handle - * @param buffer - receive buffer - * @param size - transaction size - * @param timeout - bus operation timeout in ms +/** SPI Receive + * + * @param handle pointer to FuriHalSpiBusHandle instance + * @param buffer receive buffer + * @param size transaction size (buffer size) + * @param timeout operation timeout in ms + * + * @return true on sucess */ -bool furi_hal_spi_device_rx(const FuriHalSpiDevice* device, uint8_t* buffer, size_t size, uint32_t timeout); +bool furi_hal_spi_bus_rx(FuriHalSpiBusHandle* handle, uint8_t* buffer, size_t size, uint32_t timeout); /** SPI Transmit - * @param device - device handle - * @param buffer - transmit buffer - * @param size - transaction size - * @param timeout - bus operation timeout in ms + * + * @param handle pointer to FuriHalSpiBusHandle instance + * @param buffer transmit buffer + * @param size transaction size (buffer size) + * @param timeout operation timeout in ms + * + * @return true on success */ -bool furi_hal_spi_device_tx(const FuriHalSpiDevice* device, uint8_t* buffer, size_t size, uint32_t timeout); +bool furi_hal_spi_bus_tx(FuriHalSpiBusHandle* handle, uint8_t* buffer, size_t size, uint32_t timeout); /** SPI Transmit and Receive - * @param device - device handle - * @param tx_buffer - device handle - * @param rx_buffer - device handle - * @param size - transaction size - * @param timeout - bus operation timeout in ms + * + * @param handle pointer to FuriHalSpiBusHandle instance + * @param tx_buffer pointer to tx buffer + * @param rx_buffer pointer to rx buffer + * @param size transaction size (buffer size) + * @param timeout operation timeout in ms + * + * @return true on success */ -bool furi_hal_spi_device_trx(const FuriHalSpiDevice* device, uint8_t* tx_buffer, uint8_t* rx_buffer, size_t size, uint32_t timeout); - +bool furi_hal_spi_bus_trx(FuriHalSpiBusHandle* handle, uint8_t* tx_buffer, uint8_t* rx_buffer, size_t size, uint32_t timeout); #ifdef __cplusplus } |