HardFOC Core
API reference
Loading...
Searching...
No Matches
Isf15acp4Handler.h
Go to the documentation of this file.
1
11#ifndef COMPONENT_HANDLER_ISF15ACP4_HANDLER_H_
12#define COMPONENT_HANDLER_ISF15ACP4_HANDLER_H_
13
14#include <cstdint>
15#include <memory>
16
17#include "base/BaseGpio.h"
18#include "base/BaseSpi.h"
19#include "core/hf-core-drivers/external/hf-isf15acp4-driver/inc/isf15acp4.hpp"
20#include "RtosMutex.h"
21
33class HalIsf15acp4SpiAdapter : public isf15acp4::SpiInterface<HalIsf15acp4SpiAdapter> {
34public:
35 HalIsf15acp4SpiAdapter(BaseSpi& spi, BaseGpio& cs, BaseGpio& dc, BaseGpio& reset,
36 BaseGpio* vcc_enable = nullptr, BaseGpio* switch_in = nullptr,
37 bool switch_active_low = true) noexcept;
38
39 bool EnsureInitialized() noexcept;
40 bool BeginCommand() noexcept;
41 bool BeginData() noexcept;
42 void EndTransaction() noexcept;
43 bool WriteBytes(const uint8_t* data, std::size_t len) noexcept;
44 void GpioSet(isf15acp4::CtrlPin pin, isf15acp4::GpioSignal signal) noexcept;
45 bool GpioRead(isf15acp4::CtrlPin pin) noexcept;
46 void DelayUs(uint32_t us) noexcept;
47
48private:
49 BaseSpi& spi_;
50 BaseGpio& cs_;
51 BaseGpio& dc_;
52 BaseGpio& reset_;
53 BaseGpio* vcc_enable_;
54 BaseGpio* switch_in_;
56 bool ready_{false};
57
58 static void setGpio(BaseGpio& gpio, bool electrical_high) noexcept;
59 static bool readGpio(BaseGpio& gpio, bool active_low) noexcept;
60};
61
64 isf15acp4::ProductVariant variant{isf15acp4::ProductVariant::Isf15acp4};
65 isf15acp4::GraphicsBackend graphics{isf15acp4::GraphicsBackend::BuiltinCanvas};
67};
68
82public:
83 Isf15acp4Handler(BaseSpi& spi, BaseGpio& cs, BaseGpio& dc, BaseGpio& reset,
84 const Isf15acp4HandlerConfig& config = {},
85 BaseGpio* vcc_enable = nullptr, BaseGpio* switch_in = nullptr,
86 bool switch_active_low = true) noexcept;
87
92
93 bool EnsureInitialized() noexcept;
94 bool EnsureDeinitialized() noexcept;
95 bool Deinitialize() noexcept;
97 [[nodiscard]] bool IsInitialized() const noexcept { return initialized_; }
98
99 bool DisplayOn() noexcept;
100 bool DisplayOff() noexcept;
105 bool FillScreen(isf15acp4::Color565 color) noexcept;
110 bool Present(const isf15acp4::GraphicsContext& gfx) noexcept;
118 [[nodiscard]] isf15acp4::GraphicsContext CreateGraphicsContext() const noexcept;
119 [[nodiscard]] bool IsPressed() const noexcept;
120
121 template <typename Fn>
122 bool visitDriver(Fn&& fn) noexcept {
123 MutexLockGuard lock(handler_mutex_);
125 return false;
126 }
127 return fn(*display_);
128 }
129
130 [[nodiscard]] isf15acp4::SmartDisplay<HalIsf15acp4SpiAdapter>* GetDriver() noexcept {
131 return display_.get();
132 }
133 [[nodiscard]] const isf15acp4::SmartDisplay<HalIsf15acp4SpiAdapter>* GetDriver() const noexcept {
134 return display_.get();
135 }
136 [[nodiscard]] isf15acp4::SmartDisplay<HalIsf15acp4SpiAdapter>* GetDisplay() noexcept {
137 return GetDriver();
138 }
139
140 [[nodiscard]] uint16_t GetErrorFlags() const noexcept;
141 void ClearErrorFlags(uint16_t mask = 0xFFFF) noexcept;
142 void DumpDiagnostics() const noexcept;
143
144private:
145 bool ensureInitializedUnlocked() noexcept;
146 void deinitializeUnlocked() noexcept;
147
148 BaseSpi& spi_ref_;
149 BaseGpio& cs_ref_;
150 BaseGpio& dc_ref_;
151 BaseGpio& reset_ref_;
152 BaseGpio* vcc_enable_;
153 BaseGpio* switch_in_;
156
158 std::unique_ptr<isf15acp4::SmartDisplay<HalIsf15acp4SpiAdapter>> display_;
159 mutable RtosMutex handler_mutex_;
160 bool initialized_{false};
161};
162
163#endif // COMPONENT_HANDLER_ISF15ACP4_HANDLER_H_
CRTP SPI/GPIO adapter bridging BaseSpi + BaseGpio to isf15acp4::SpiInterface.
Definition Isf15acp4Handler.h:33
static bool readGpio(BaseGpio &gpio, bool active_low) noexcept
Definition Isf15acp4Handler.cpp:21
void EndTransaction() noexcept
Definition Isf15acp4Handler.cpp:70
static void setGpio(BaseGpio &gpio, bool electrical_high) noexcept
Definition Isf15acp4Handler.cpp:11
BaseSpi & spi_
Definition Isf15acp4Handler.h:49
bool EnsureInitialized() noexcept
Definition Isf15acp4Handler.cpp:42
void GpioSet(isf15acp4::CtrlPin pin, isf15acp4::GpioSignal signal) noexcept
Definition Isf15acp4Handler.cpp:80
bool WriteBytes(const uint8_t *data, std::size_t len) noexcept
Definition Isf15acp4Handler.cpp:72
bool GpioRead(isf15acp4::CtrlPin pin) noexcept
Definition Isf15acp4Handler.cpp:105
bool ready_
Definition Isf15acp4Handler.h:56
BaseGpio & dc_
Definition Isf15acp4Handler.h:51
void DelayUs(uint32_t us) noexcept
Definition Isf15acp4Handler.cpp:112
BaseGpio & reset_
Definition Isf15acp4Handler.h:52
bool switch_active_low_
Definition Isf15acp4Handler.h:55
BaseGpio & cs_
Definition Isf15acp4Handler.h:50
BaseGpio * vcc_enable_
Definition Isf15acp4Handler.h:53
bool BeginCommand() noexcept
Definition Isf15acp4Handler.cpp:58
BaseGpio * switch_in_
Definition Isf15acp4Handler.h:54
bool BeginData() noexcept
Definition Isf15acp4Handler.cpp:64
Unified handler for ISF15ACP4 SmartDisplay modules.
Definition Isf15acp4Handler.h:81
void ClearErrorFlags(uint16_t mask=0xFFFF) noexcept
Definition Isf15acp4Handler.cpp:219
Isf15acp4Handler & operator=(const Isf15acp4Handler &)=delete
std::unique_ptr< isf15acp4::SmartDisplay< HalIsf15acp4SpiAdapter > > display_
Definition Isf15acp4Handler.h:158
Isf15acp4HandlerConfig config_
Definition Isf15acp4Handler.h:155
BaseGpio * switch_in_
Definition Isf15acp4Handler.h:153
bool visitDriver(Fn &&fn) noexcept
Definition Isf15acp4Handler.h:122
BaseSpi & spi_ref_
Definition Isf15acp4Handler.h:148
std::unique_ptr< HalIsf15acp4SpiAdapter > adapter_
Definition Isf15acp4Handler.h:157
BaseGpio * vcc_enable_
Definition Isf15acp4Handler.h:152
Isf15acp4Handler(const Isf15acp4Handler &)=delete
uint16_t GetErrorFlags() const noexcept
Definition Isf15acp4Handler.cpp:214
bool switch_active_low_
Definition Isf15acp4Handler.h:154
const isf15acp4::SmartDisplay< HalIsf15acp4SpiAdapter > * GetDriver() const noexcept
Definition Isf15acp4Handler.h:133
isf15acp4::SmartDisplay< HalIsf15acp4SpiAdapter > * GetDriver() noexcept
Definition Isf15acp4Handler.h:130
BaseGpio & cs_ref_
Definition Isf15acp4Handler.h:149
void DumpDiagnostics() const noexcept
Definition Isf15acp4Handler.cpp:226
Isf15acp4Handler & operator=(Isf15acp4Handler &&)=delete
bool DisplayOn() noexcept
Definition Isf15acp4Handler.cpp:179
void deinitializeUnlocked() noexcept
Definition Isf15acp4Handler.cpp:126
bool ensureInitializedUnlocked() noexcept
Definition Isf15acp4Handler.cpp:136
Isf15acp4Handler(Isf15acp4Handler &&)=delete
bool EnsureInitialized() noexcept
Definition Isf15acp4Handler.cpp:166
bool IsPressed() const noexcept
Definition Isf15acp4Handler.cpp:209
bool EnsureDeinitialized() noexcept
Definition Isf15acp4Handler.cpp:177
RtosMutex handler_mutex_
Definition Isf15acp4Handler.h:159
BaseGpio & dc_ref_
Definition Isf15acp4Handler.h:150
bool DisplayOff() noexcept
Definition Isf15acp4Handler.cpp:184
bool initialized_
Definition Isf15acp4Handler.h:160
bool Deinitialize() noexcept
Definition Isf15acp4Handler.cpp:171
bool Present(const isf15acp4::GraphicsContext &gfx) noexcept
Blit the graphics context to the panel.
Definition Isf15acp4Handler.cpp:194
isf15acp4::SmartDisplay< HalIsf15acp4SpiAdapter > * GetDisplay() noexcept
Definition Isf15acp4Handler.h:136
bool FillScreen(isf15acp4::Color565 color) noexcept
Fill the panel with a packed RGB565 color.
Definition Isf15acp4Handler.cpp:189
bool IsInitialized() const noexcept
Definition Isf15acp4Handler.h:97
isf15acp4::GraphicsContext CreateGraphicsContext() const noexcept
Canvas matching the configured variant and graphics backend.
Definition Isf15acp4Handler.cpp:199
BaseGpio & reset_ref_
Definition Isf15acp4Handler.h:151
Handler configuration mirroring driver SmartDisplayConfig.
Definition Isf15acp4Handler.h:63
isf15acp4::ProductVariant variant
Definition Isf15acp4Handler.h:64
bool enable_vcc_on_init
Definition Isf15acp4Handler.h:66
isf15acp4::GraphicsBackend graphics
Definition Isf15acp4Handler.h:65