#ifndef STA_CORE_ARDUINO_SPI_HPP #define STA_CORE_ARDUINO_SPI_HPP #include #ifdef STA_PLATFORM_ARDUINO #include #include #include #include namespace sta { #ifdef STA_PLATFORM_ARDUINO_DEVICE_ESP32 enum SPIBus { BUS_HSPI = HSPI, BUS_FSPI = FSPI # ifndef STA_MCU_ESP32_S3 , BUS_VSPI = VSPI # endif // STA_MCU_ESP32_S3 }; #endif // STA_PLATFORM_ARDUINO_DEVICE_ESP32 class ArduinoSPI : public SPI { public: #ifdef STA_PLATFORM_ARDUINO_DEVICE_ESP32 /** * @brief * * @param settings * @param mutex * @param mosi * @param miso * @param clk * @return ArduinoSPI */ static ArduinoSPI getHSPI( const SPISettings & settings, Mutex * mutex = sta::Mutex::ALWAYS_FREE, uint8_t mosi = STA_ESP32_HSPI_MOSI_DEFAULT, uint8_t miso = STA_ESP32_HSPI_MISO_DEFAULT, uint8_t clk = STA_ESP32_HSPI_CLK_DEFAULT); /** * @brief * * @param settings * @param mutex * @param mosi * @param miso * @param clk * @return ArduinoSPI */ static ArduinoSPI getFSPI( const SPISettings & settings, Mutex * mutex = sta::Mutex::ALWAYS_FREE, uint8_t mosi = STA_ESP32_HSPI_MOSI_DEFAULT, uint8_t miso = STA_ESP32_HSPI_MISO_DEFAULT, uint8_t clk = STA_ESP32_HSPI_CLK_DEFAULT); private: /** * @brief Construct an SPI bus interface using the Arduino framework. This constructor is used for ESP32. * * @param settings The settings for the spi bus. s * @param mosi The master-out-slave-in pin. * @param miso The master-in-slave-out pin. * @param clk The clock used for synchronizing the bus communication. * @param bus The bus to use. One of HSPI or FSPI. * @param mutex A mutex for managing bus access in multithreaded applications. Default is a dummy mutex that is always free. */ ArduinoSPI(const SPISettings & settings, SPIBus bus, uint8_t mosi, uint8_t miso, uint8_t clk, Mutex * mutex = sta::Mutex::ALWAYS_FREE); #else /** * @brief Construct an SPI bus interface using the Arduino framework. * * @param settings The settings for the spi bus. * @param mutex A mutex for managing bus access in multithreaded applications. Default is a dummy mutex that is always free. */ ArduinoSPI(const SPISettings & settings, Mutex * mutex = sta::Mutex::ALWAYS_FREE); #endif // !STA_PLATFORM_ARDUINO_DEVICE_ESP32 public: void transfer(uint8_t value) override; void transfer16(uint16_t value) override; void transfer(const uint8_t * buffer, size_t size) override; void transfer(const uint8_t * txBuffer, uint8_t * rxBuffer, size_t size) override; void receive(uint8_t * buffer, size_t size) override; void fill(uint8_t value, size_t count) override; void acquire() override; void release() override; private: SPIClass spi_; }; class ArduinoSPIDevice : public SPIDevice { public: ArduinoSPIDevice(ArduinoSPI * intf, ArduinoGpioPin * csPin); }; } // namespace sta #endif // STA_PLATFORM_ARDUINO #endif // STA_CORE_ARDUINO_SPI_HPP