5#include "TinyGPU/Drivers/DisplayDriver.h"
6#include "TinyGPU/Color/RGB565.h"
7#include "TinyGPU/Emulation.h"
8#include "TinyGPU/Abstractions/IDSIBus.h"
9#include "TinyGPU/Abstractions/DSIBusESP32.h"
10#include "TinyGPU/Abstractions/DSIBusSTM32.h"
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30template <
typename RGB_T =
RGB565>
49 bool writeData(ISurface<RGB_T>& surface, size_t x, size_t y)
override {
50 static_assert(
sizeof(RGB_T) == 2,
51 "DisplayDriverDSI assumes a 16bpp RGB_T (RGB565)");
52 if (
bus_ ==
nullptr)
return false;
60 const size_t n = surface.size();
61 if (scratchCapacity_ < n) {
63 scratch_ =
new uint8_t[n];
66 const uint16_t* src =
reinterpret_cast<
const uint16_t*>(surface.data());
67 uint16_t* dst =
reinterpret_cast<uint16_t*>(scratch_);
68 const size_t pixelCount = n /
sizeof(RGB_T);
69 for (size_t i = 0; i < pixelCount; ++i) {
70 dst[i] = RGB565::swapBytes(src[i]);
73 return bus_->drawBitmap(x, y, x + surface.width(), y + surface.height(),
88 return bus_ !=
nullptr && bus_->writeCommand(cmd, param, len);
97 pinMode(backlight_, OUTPUT);
98 digitalWrite(backlight_, on ? HIGH : LOW);
113 uint8_t* scratch_ =
nullptr;
114 size_t scratchCapacity_ = 0;
117#ifdef TINYGPU_HAS_ESP_LCD_DSI
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
159 static_assert(
sizeof(
RGB_T) == 2,
"ST7701Driver assumes a 16bpp RGB_T (RGB565)");
186 static constexpr uint8_t kFf13[] = {0x77, 0x01, 0x00, 0x00, 0x13};
188 static constexpr uint8_t kFf10[] = {0x77, 0x01, 0x00, 0x00, 0x10};
189 static constexpr uint8_t kC0[] = {0x63, 0x00};
190 static constexpr uint8_t kC1[] = {0x0D, 0x02};
191 static constexpr uint8_t kC2[] = {0x10, 0x08};
193 static constexpr uint8_t kB0Gamma[] = {0x80, 0x09, 0x53, 0x0C, 0xD0, 0x07,
194 0x0C, 0x09, 0x09, 0x28, 0x06, 0xD4,
195 0x13, 0x69, 0x2B, 0x71};
196 static constexpr uint8_t kB1Gamma[] = {0x80, 0x94, 0x5A, 0x10, 0xD3, 0x06,
197 0x0A, 0x08, 0x08, 0x25, 0x03, 0xD3,
198 0x12, 0x66, 0x6A, 0x0D};
199 static constexpr uint8_t kFf11[] = {0x77, 0x01, 0x00, 0x00, 0x11};
207 static constexpr uint8_t kB9[] = {0x10, 0x1F};
213 static constexpr uint8_t kE0[] = {0x00, 0x3A, 0x02};
214 static constexpr uint8_t kE1[] = {0x04, 0xA0, 0x00, 0xA0, 0x05, 0xA0,
215 0x00, 0xA0, 0x00, 0x40, 0x40};
216 static constexpr uint8_t kE2[] = {0x30, 0x00, 0x40, 0x40, 0x32, 0xA0,
217 0x00, 0xA0, 0x00, 0xA0, 0x00, 0xA0, 0x00};
218 static constexpr uint8_t kE3[] = {0x00, 0x00, 0x33, 0x33};
219 static constexpr uint8_t kE4[] = {0x44, 0x44};
220 static constexpr uint8_t kE5[] = {0x09, 0x2E, 0xA0, 0xA0, 0x0B, 0x30,
221 0xA0, 0xA0, 0x05, 0x2A, 0xA0, 0xA0,
222 0x07, 0x2C, 0xA0, 0xA0};
223 static constexpr uint8_t kE6[] = {0x00, 0x00, 0x33, 0x33};
224 static constexpr uint8_t kE7[] = {0x44, 0x44};
225 static constexpr uint8_t kE8[] = {0x08, 0x2D, 0xA0, 0xA0, 0x0A, 0x2F,
226 0xA0, 0xA0, 0x04, 0x29, 0xA0, 0xA0,
227 0x06, 0x2B, 0xA0, 0xA0};
228 static constexpr uint8_t kEb[] = {0x00, 0x00, 0x4E, 0x4E, 0x00, 0x00, 0x00};
229 static constexpr uint8_t kEc[] = {0x08, 0x01};
230 static constexpr uint8_t kEd[] = {0xB0, 0x2B, 0x98, 0xA4, 0x56, 0x7F,
231 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0x65,
232 0x4A, 0x89, 0xB2, 0x0B};
233 static constexpr uint8_t kEf[] = {0x08, 0x08, 0x08, 0x45, 0x3F, 0x54};
234 static constexpr uint8_t kFf00[] = {0x77, 0x01, 0x00, 0x00, 0x00};
241 {0xC0,
kC0,
sizeof(
kC0), 0},
242 {0xC1,
kC1,
sizeof(
kC1), 0},
243 {0xC2,
kC2,
sizeof(
kC2), 0},
244 {0xCC,
kCc,
sizeof(
kCc), 0},
248 {0xB0,
kB0,
sizeof(
kB0), 0},
249 {0xB1,
kB1,
sizeof(
kB1), 0},
250 {0xB2,
kB2,
sizeof(
kB2), 0},
251 {0xB3,
kB3,
sizeof(
kB3), 0},
252 {0xB5,
kB5,
sizeof(
kB5), 0},
253 {0xB7,
kB7,
sizeof(
kB7), 0},
254 {0xB8,
kB8,
sizeof(
kB8), 0},
255 {0xB9,
kB9,
sizeof(
kB9), 0},
256 {0xBB,
kBb,
sizeof(
kBb), 0},
257 {0xBC,
kBc,
sizeof(
kBc), 0},
260 {0xD0,
kD0,
sizeof(
kD0), 0},
261 {0xE0,
kE0,
sizeof(
kE0), 0},
262 {0xE1,
kE1,
sizeof(
kE1), 0},
263 {0xE2,
kE2,
sizeof(
kE2), 0},
264 {0xE3,
kE3,
sizeof(
kE3), 0},
265 {0xE4,
kE4,
sizeof(
kE4), 0},
266 {0xE5,
kE5,
sizeof(
kE5), 0},
267 {0xE6,
kE6,
sizeof(
kE6), 0},
268 {0xE7,
kE7,
sizeof(
kE7), 0},
269 {0xE8,
kE8,
sizeof(
kE8), 0},
270 {0xEB,
kEb,
sizeof(
kEb), 0},
271 {0xEC,
kEc,
sizeof(
kEc), 0},
272 {0xED,
kEd,
sizeof(
kEd), 0},
273 {0xEF,
kEf,
sizeof(
kEf), 0},
Base driver for MIPI-DSI panels. All of the DSI PHY/lane bring-up, command-channel writes and video-t...
Definition: DisplayDriverDSI.h:31
bool writeCommand(uint8_t cmd, const uint8_t *param=nullptr, size_t len=0)
Sends one command + parameter bytes over the DSI command channel.
Definition: DisplayDriverDSI.h:86
IDSIBus * bus_
Definition: DisplayDriverDSI.h:108
bool setAddressWindow(size_t, size_t, size_t, size_t) override
Definition: DisplayDriverDSI.h:103
bool beginBus()
Definition: DisplayDriverDSI.h:83
size_t width_
Definition: DisplayDriverDSI.h:109
void setBacklightPin(int8_t backlight)
Definition: DisplayDriverDSI.h:101
void end() override
Definition: DisplayDriverDSI.h:39
size_t height_
Definition: DisplayDriverDSI.h:109
size_t height() const override
Definition: DisplayDriverDSI.h:37
~DisplayDriverDSI() override
Definition: DisplayDriverDSI.h:43
bool writeData(ISurface< RGB_T > &surface, size_t x, size_t y) override
Definition: DisplayDriverDSI.h:49
bool finishInit()
Definition: DisplayDriverDSI.h:93
size_t width() const override
Definition: DisplayDriverDSI.h:36
DisplayDriverDSI(IDSIBus &bus, size_t width, size_t height)
Definition: DisplayDriverDSI.h:33
void setBacklight(bool on)
Definition: DisplayDriverDSI.h:95
int8_t backlight_
Definition: DisplayDriverDSI.h:110
bool writeData(ISurface< RGB_T > &surface) override
Definition: DisplayDriverDSI.h:45
Definition: DisplayDriver.h:49
Abstraction over the transport used by DisplayDriverDSI (see TinyGPU/Drivers/DisplayDriverDSI....
Definition: IDSIBus.h:26
virtual bool finishInit()=0
RGB color stored in 16-bit RGB565 format, byte-swapped from the conventional bit layout.
Definition: RGB565.h:24
Definition: DSIBusESP32.h:19