#pragma once #include #include #ifdef __cplusplus extern "C" { #endif extern const SPI_InitTypeDef api_hal_spi_config_nfc; extern const SPI_InitTypeDef api_hal_spi_config_subghz; extern const SPI_InitTypeDef api_hal_spi_config_display; /** API HAL SPI BUS handler * Structure content may change at some point */ typedef struct { const SPI_HandleTypeDef* spi; const osMutexId_t* mutex; const GpioPin* miso; const GpioPin* mosi; const GpioPin* clk; } ApiHalSpiBus; /** API HAL SPI Device handler * Structure content may change at some point */ typedef struct { const ApiHalSpiBus* bus; const SPI_InitTypeDef* config; const GpioPin* chip_select; } ApiHalSpiDevice; /** API HAL SPI Standard Device IDs */ typedef enum { ApiHalSpiDeviceIdSubGhz, /** SubGhz: CC1101, non-standard SPI usage */ ApiHalSpiDeviceIdDisplay, /** Display: ERC12864, only have MOSI */ ApiHalSpiDeviceIdSdCard, /** SDCARD: no default bus config, bus must explicitly be configured */ ApiHalSpiDeviceIdNfc, /** NFC: ST25R3916, pretty standard, but RFAL makes it complex */ ApiHalSpiDeviceIdMax, /** Service Value, do not use */ } ApiHalSpiDeviceId; /** Api Hal Spi Bus R * CC1101, Nfc */ extern const ApiHalSpiBus spi_r; /** Api Hal Spi Bus D * Display, SdCard */ extern const ApiHalSpiBus spi_d; /** Api Hal Spi devices */ extern const ApiHalSpiDevice api_hal_spi_devices[ApiHalSpiDeviceIdMax]; typedef struct { const ApiHalSpiBus* bus; const SPI_InitTypeDef config; } SPIDevice; extern const SPIDevice sd_fast_spi; extern const SPIDevice sd_slow_spi; #ifdef __cplusplus } #endif