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>
31class AdapterSPI :
public Adapter {
35 explicit SPIImpl(
const gpio_num_t cs = GPIO_NUM_NC) : _cs{cs}
40 inline virtual SPIClass* getSPI()
44 inline gpio_num_t cs_pin()
const
49 virtual void beginTransaction()
52 virtual void endTransaction()
57 gpio_num_t _cs{GPIO_NUM_NC};
61 class SPIClassImpl :
public SPIImpl {
63 SPIClassImpl(SPIClass& serial,
const SPISettings& settings,
const gpio_num_t cs);
64 inline virtual SPIClass* getSPI()
override
68 virtual void beginTransaction()
override;
69 virtual void endTransaction()
override;
70 virtual m5::hal::error::error_t readWithTransaction(uint8_t* data,
const size_t len)
override;
71 virtual m5::hal::error::error_t writeWithTransaction(
const uint8_t* data,
const size_t len,
72 const uint32_t stop)
override;
73 virtual m5::hal::error::error_t writeWithTransaction(
const uint8_t reg,
const uint8_t* data,
const size_t len,
74 const uint32_t stop)
override;
75 virtual m5::hal::error::error_t writeWithTransaction(
const uint16_t reg,
const uint8_t* data,
const size_t len,
76 const uint32_t stop)
override;
80 SPISettings _settings{};
81 static uint32_t transaction_count;
85#if defined(ESP_PLATFORM)
86 class ESPIDFImpl :
public SPIImpl {
88 ESPIDFImpl(spi_device_handle_t handle,
const gpio_num_t cs);
89 virtual void beginTransaction()
override;
90 virtual void endTransaction()
override;
91 virtual m5::hal::error::error_t readWithTransaction(uint8_t* data,
const size_t len)
override;
92 virtual m5::hal::error::error_t writeWithTransaction(
const uint8_t* data,
const size_t len,
93 const uint32_t stop)
override;
94 virtual m5::hal::error::error_t writeWithTransaction(
const uint8_t reg,
const uint8_t* data,
const size_t len,
95 const uint32_t stop)
override;
96 virtual m5::hal::error::error_t writeWithTransaction(
const uint16_t reg,
const uint8_t* data,
const size_t len,
97 const uint32_t stop)
override;
100 m5::hal::error::error_t do_transmit(
const uint8_t* tx, uint8_t* rx,
const size_t len);
103 spi_device_handle_t _handle{};
104 gpio_num_t _cs{GPIO_NUM_NC};
105 bool _in_transaction{
false};
110 AdapterSPI(SPIClass& spi,
const SPISettings& settings,
const gpio_num_t cs);
112#if defined(ESP_PLATFORM)
113 AdapterSPI(spi_device_handle_t handle,
const gpio_num_t cs);
116 inline SPIImpl* impl()
118 return static_cast<SPIImpl*
>(_impl.get());
120 inline const SPIImpl* impl()
const
122 return static_cast<SPIImpl*
>(_impl.get());
125 inline gpio_num_t cs_pin()
const
127 return impl()->cs_pin();
132 impl()->beginTransaction();
136 impl()->endTransaction();
145 gpio_num_t _cs{GPIO_NUM_NC};
Implementation base class (Pimpl pattern)
Definition adapter_base.hpp:37
Adapter base class to treat M5HAL and TwoWire,GPIO,Serial,SPI... in the same way.
Type
Adapter type.
Definition adapter_base.hpp:28
Definition adapter_spi.hpp:33
virtual void endTransaction() override
End a bus transaction.
Definition adapter_spi.hpp:134
virtual void beginTransaction() override
Begin a bus transaction.
Definition adapter_spi.hpp:130
Top level namespace of M5Stack.
Definition test_helper.hpp:20