// SPDX-License-Identifier: GPL-2.0-or-later #pragma once #include "SpiBus.h" #include "SpiBusConfig.h" #include #include #include #include #include #define SPI_MANAGER_NUM_BUSES SOC_SPI_PERIPH_NUM class SpiManager { public: explicit 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); private: std::shared_ptr get_shared_bus(const std::string& bus_id); std::array, SPI_MANAGER_NUM_BUSES> available_buses; std::array, SPI_MANAGER_NUM_BUSES> shared_buses; }; extern SpiManager SpiManagerInst;