11#ifndef M5_UNIT_COMPONENT_ADAPTER_SPI_HPP
12#define M5_UNIT_COMPONENT_ADAPTER_SPI_HPP
20#if defined(ESP_PLATFORM)
21#include <driver/spi_master.h>
25#if defined(ESP_PLATFORM)
33class AdapterSPI :
public Adapter {
35 class SPIImpl :
public Adapter::Impl {
37 explicit SPIImpl(
const gpio_num_t cs = GPIO_NUM_NC) : _cs{cs}
40 virtual ~SPIImpl() =
default;
42 inline virtual SPIClass* getSPI()
46 inline gpio_num_t cs_pin()
const
51 virtual void beginTransaction()
54 virtual void endTransaction()
59 gpio_num_t _cs{GPIO_NUM_NC};
63 class SPIClassImpl :
public SPIImpl {
65 SPIClassImpl(SPIClass& serial,
const SPISettings& settings,
const gpio_num_t cs);
66 inline virtual SPIClass* getSPI()
override
70 virtual void beginTransaction()
override;
71 virtual void endTransaction()
override;
72 virtual m5::hal::error::error_t readWithTransaction(uint8_t* data,
const size_t len)
override;
73 virtual m5::hal::error::error_t writeWithTransaction(
const uint8_t* data,
const size_t len,
74 const uint32_t stop)
override;
75 virtual m5::hal::error::error_t writeWithTransaction(
const uint8_t reg,
const uint8_t* data,
const size_t len,
76 const uint32_t stop)
override;
77 virtual m5::hal::error::error_t writeWithTransaction(
const uint16_t reg,
const uint8_t* data,
const size_t len,
78 const uint32_t stop)
override;
82 SPISettings _settings{};
83 static uint32_t transaction_count;
87#if defined(ESP_PLATFORM)
88 class ESPIDFImpl :
public SPIImpl {
90 ESPIDFImpl(spi_device_handle_t handle,
const gpio_num_t cs);
91 virtual void beginTransaction()
override;
92 virtual void endTransaction()
override;
93 virtual m5::hal::error::error_t readWithTransaction(uint8_t* data,
const size_t len)
override;
94 virtual m5::hal::error::error_t writeWithTransaction(
const uint8_t* data,
const size_t len,
95 const uint32_t stop)
override;
96 virtual m5::hal::error::error_t writeWithTransaction(
const uint8_t reg,
const uint8_t* data,
const size_t len,
97 const uint32_t stop)
override;
98 virtual m5::hal::error::error_t writeWithTransaction(
const uint16_t reg,
const uint8_t* data,
const size_t len,
99 const uint32_t stop)
override;
102 m5::hal::error::error_t do_transmit(
const uint8_t* tx, uint8_t* rx,
const size_t len);
105 spi_device_handle_t _handle{};
106 gpio_num_t _cs{GPIO_NUM_NC};
107 bool _in_transaction{
false};
112 AdapterSPI(SPIClass& spi,
const SPISettings& settings,
const gpio_num_t cs);
114#if defined(ESP_PLATFORM)
115 AdapterSPI(spi_device_handle_t handle,
const gpio_num_t cs);
118 inline SPIImpl* impl()
120 return static_cast<SPIImpl*
>(_impl.get());
122 inline const SPIImpl* impl()
const
124 return static_cast<SPIImpl*
>(_impl.get());
127 inline gpio_num_t cs_pin()
const
129 return impl()->cs_pin();
132 inline virtual void beginTransaction()
override
134 impl()->beginTransaction();
136 inline virtual void endTransaction()
override
138 impl()->endTransaction();
142 AdapterSPI() : Adapter(Adapter::Type::SPI, new SPIImpl())
147 gpio_num_t _cs{GPIO_NUM_NC};
Top level namespace of M5Stack.
Definition test_helper.hpp:20