#ifndef STA_CORE_RASPI_SPI_HPP #define STA_CORE_RASPI_SPI_HPP #include #ifdef STA_PLATFORM_RASPI #include #include namespace sta { enum class SPINode { DEV_0_0, DEV_0_1 }; class RaspiSPI : public SPI { public: RaspiSPI(SPINode node, const SPISettings & settings, Mutex * mutex = nullptr, bool persistent_open = true); ~RaspiSPI(); 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: char * spidev_; int spifd_; bool open_; const bool persistent_open_; void update_setting(int setting, int value); int get_setting(int setting, void * rslt_ptr); void update_settings(); }; class RaspiSPIDevice : public SPIDevice { public: RaspiSPIDevice(RaspiSPI * intf); }; } // namespace sta #endif // STA_PLATFORM_RASPI #endif // STA_CORE_RASPI_HPP