M5UnitUnified 0.5.5 git rev:bf711f3
Loading...
Searching...
No Matches
adapter_spi.hpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2025 M5Stack Technology CO LTD
3 *
4 * SPDX-License-Identifier: MIT
5 */
11#ifndef M5_UNIT_COMPONENT_ADAPTER_SPI_HPP
12#define M5_UNIT_COMPONENT_ADAPTER_SPI_HPP
13
14#include "adapter_base.hpp"
15#if defined(ARDUINO)
16#include <SPI.h>
17#else
18class SPIClass;
19#endif
20#if defined(ESP_PLATFORM)
21#include <driver/spi_master.h>
22#endif
23
24namespace m5 {
25namespace unit {
26
31class AdapterSPI : public Adapter {
32public:
33 class SPIImpl : public Adapter::Impl {
34 public:
35 explicit SPIImpl(const gpio_num_t cs = GPIO_NUM_NC) : _cs{cs}
36 {
37 }
38 virtual ~SPIImpl() = default;
39
40 inline virtual SPIClass* getSPI()
41 {
42 return nullptr;
43 }
44 inline gpio_num_t cs_pin() const
45 {
46 return _cs;
47 }
48
49 virtual void beginTransaction()
50 {
51 }
52 virtual void endTransaction()
53 {
54 }
55
56 protected:
57 gpio_num_t _cs{GPIO_NUM_NC};
58 };
59
60#if defined(ARDUINO)
61 class SPIClassImpl : public SPIImpl {
62 public:
63 SPIClassImpl(SPIClass& serial, const SPISettings& settings, const gpio_num_t cs);
64 inline virtual SPIClass* getSPI() override
65 {
66 return _spi;
67 }
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;
77
78 protected:
79 SPIClass* _spi{};
80 SPISettings _settings{};
81 static uint32_t transaction_count;
82 };
83#endif
84
85#if defined(ESP_PLATFORM)
86 class ESPIDFImpl : public SPIImpl {
87 public:
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;
98
99 protected:
100 m5::hal::error::error_t do_transmit(const uint8_t* tx, uint8_t* rx, const size_t len);
101
102 private:
103 spi_device_handle_t _handle{};
104 gpio_num_t _cs{GPIO_NUM_NC};
105 bool _in_transaction{false};
106 };
107#endif
108
109#if defined(ARDUINO)
110 AdapterSPI(SPIClass& spi, const SPISettings& settings, const gpio_num_t cs);
111#endif
112#if defined(ESP_PLATFORM)
113 AdapterSPI(spi_device_handle_t handle, const gpio_num_t cs);
114#endif
115
116 inline SPIImpl* impl()
117 {
118 return static_cast<SPIImpl*>(_impl.get());
119 }
120 inline const SPIImpl* impl() const
121 {
122 return static_cast<SPIImpl*>(_impl.get());
123 }
124
125 inline gpio_num_t cs_pin() const
126 {
127 return impl()->cs_pin();
128 }
129
130 inline virtual void beginTransaction() override
131 {
132 impl()->beginTransaction();
133 }
134 inline virtual void endTransaction() override
135 {
136 impl()->endTransaction();
137 }
138
139protected:
140 AdapterSPI() : Adapter(Adapter::Type::SPI, new SPIImpl())
141 {
142 }
143
144protected:
145 gpio_num_t _cs{GPIO_NUM_NC};
146};
147
148} // namespace unit
149} // namespace m5
150#endif
Adapter base.
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
SPI access adapter.
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
Unit-related namespace.