#ifndef __SPI_DRIVER_H__ #define __SPI_DRIVER_H__ #include #include "bus_core.h" enum class SpiPort : uint8_t { _0 = 0, _1, _2, _3, _4, _5, MAX }; struct SpiConfig { uint32_t speed_hz = 1000000; uint8_t data_width = 8; uint8_t mode = 0; }; class SpiBus; class SpiDevice { public: SpiDevice(uint32_t cs_port, uint32_t cs_pin); RetCode init(); private: friend class SpiBus; uint32_t cs_port_; uint32_t cs_pin_; bool initialized_ = false; }; class SpiBus { public: explicit SpiBus(SpiPort port); ~SpiBus(); SpiBus(const SpiBus &) = delete; SpiBus &operator=(const SpiBus &) = delete; RetCode init(const SpiConfig &config); RetCode deinit(); RetCode transfer(SpiDevice *device, BusTransfer *transfer); private: SpiPort port_; SpiConfig config_; bool initialized_ = false; }; #endif