M5UnitUnified 0.3.0 git rev:6b3818b
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#endif
18
19namespace m5 {
20namespace unit {
21
26class AdapterSPI : public Adapter {
27public:
28 class SPIImpl : public Adapter::Impl {
29 public:
30 explicit SPIImpl(const uint8_t cs = 0xFF) : _cs{cs}
31 {
32 }
33 virtual ~SPIImpl() = default;
34
35 inline virtual SPIClass* getSPI()
36 {
37 return nullptr;
38 }
39 inline uint8_t cs_pin() const
40 {
41 return _cs;
42 }
43
44 virtual void beginTransaction()
45 {
46 }
47 virtual void endTransaction()
48 {
49 }
50
51 protected:
52 uint8_t _cs{};
53 };
54
55#if defined(ARDUINO)
56 class SPIClassImpl : public SPIImpl {
57 public:
58 SPIClassImpl(SPIClass& serial, const SPISettings& settings, const uint8_t cs);
59 inline virtual SPIClass* getSPI() override
60 {
61 return _spi;
62 }
63 virtual void beginTransaction() override;
64 virtual void endTransaction() override;
65 virtual m5::hal::error::error_t readWithTransaction(uint8_t* data, const size_t len) override;
66 virtual m5::hal::error::error_t writeWithTransaction(const uint8_t* data, const size_t len,
67 const uint32_t stop) override;
68 virtual m5::hal::error::error_t writeWithTransaction(const uint8_t reg, const uint8_t* data, const size_t len,
69 const uint32_t stop) override;
70 virtual m5::hal::error::error_t writeWithTransaction(const uint16_t reg, const uint8_t* data, const size_t len,
71 const uint32_t stop) override;
72
73 protected:
74 SPIClass* _spi{};
75 SPISettings _settings{};
76 static uint32_t transaction_count;
77 };
78#endif
79
80#if defined(ARDUINO)
81 AdapterSPI(SPIClass& spi, const SPISettings& settings, const uint8_t cs);
82#endif
83
84 inline SPIImpl* impl()
85 {
86 return static_cast<SPIImpl*>(_impl.get());
87 }
88 inline const SPIImpl* impl() const
89 {
90 return static_cast<SPIImpl*>(_impl.get());
91 }
92
93 inline uint8_t cs_pin() const
94 {
95 return impl()->cs_pin();
96 }
97
98 inline virtual void beginTransaction() override
99 {
100 impl()->beginTransaction();
101 }
102 inline virtual void endTransaction() override
103 {
104 impl()->endTransaction();
105 }
106
107protected:
108 AdapterSPI() : Adapter(Adapter::Type::SPI, new SPIImpl())
109 {
110 }
111
112protected:
113 uint8_t _cs{};
114};
115
116} // namespace unit
117} // namespace m5
118#endif
Adapter base.
Definition adapter_base.hpp:35
Definition adapter_spi.hpp:28
Top level namespace of M5stack.
Definition test_helper.hpp:18
Unit-related namespace.