From ece452068754f72dbb857ef69cb4309439dccbcc Mon Sep 17 00:00:00 2001 From: LennartF22 <18723691+LennartF22@users.noreply.github.com> Date: Sat, 21 Sep 2024 21:19:06 +0200 Subject: [PATCH] Add Arduino SPI translation --- lib/SpiManager/src/SpiManager.cpp | 42 +++++++++++++++++++++++++++++++ lib/SpiManager/src/SpiManager.h | 7 ++++++ 2 files changed, 49 insertions(+) diff --git a/lib/SpiManager/src/SpiManager.cpp b/lib/SpiManager/src/SpiManager.cpp index f4dc967a6..efbd5e0a2 100644 --- a/lib/SpiManager/src/SpiManager.cpp +++ b/lib/SpiManager/src/SpiManager.cpp @@ -1,8 +1,39 @@ #include "SpiManager.h" +#ifdef ARDUINO +#include +#endif + SpiManager::SpiManager() { } +#ifdef ARDUINO + +std::optional SpiManager::to_arduino(spi_host_device_t host_device) { + switch (host_device) { +#if CONFIG_IDF_TARGET_ESP32 + case SPI1_HOST: + return FSPI; + case SPI2_HOST: + return HSPI; + case SPI3_HOST: + return VSPI; +#elif CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 + case SPI2_HOST: + return FSPI; + case SPI3_HOST: + return HSPI; +#elif CONFIG_IDF_TARGET_ESP32C3 + case SPI2_HOST: + return FSPI; +#endif + default: + return std::nullopt; + } +} + +#endif + bool SpiManager::register_bus(spi_host_device_t host_device) { for (int i = 0; i < SPI_MANAGER_NUM_BUSES; ++i) { if (available_buses[i]) @@ -28,6 +59,17 @@ bool SpiManager::claim_bus(spi_host_device_t &host_device) { return false; } +#ifdef ARDUINO + +std::optional SpiManager::claim_bus_arduino() { + spi_host_device_t host_device; + if (!claim_bus(host_device)) + return std::nullopt; + return to_arduino(host_device); +} + +#endif + spi_device_handle_t SpiManager::alloc_device(const std::string &bus_id, const std::shared_ptr &bus_config, spi_device_interface_config_t &device_config) { std::shared_ptr shared_bus = get_shared_bus(bus_id); if (!shared_bus) diff --git a/lib/SpiManager/src/SpiManager.h b/lib/SpiManager/src/SpiManager.h index 92923d5b0..ee3b56a50 100644 --- a/lib/SpiManager/src/SpiManager.h +++ b/lib/SpiManager/src/SpiManager.h @@ -18,8 +18,15 @@ class SpiManager { SpiManager(const SpiManager&) = delete; SpiManager &operator=(const SpiManager&) = delete; +#ifdef ARDUINO + static std::optional to_arduino(spi_host_device_t host_device); +#endif + bool register_bus(spi_host_device_t host_device); bool claim_bus(spi_host_device_t &host_device); +#ifdef ARDUINO + std::optional claim_bus_arduino(); +#endif spi_device_handle_t alloc_device(const std::string &bus_id, const std::shared_ptr &bus_config, spi_device_interface_config_t &device_config);