Implement the SPI driver using DMA.
This commit is contained in:
@@ -11,11 +11,21 @@ void Gfx::Init() {
|
||||
}
|
||||
|
||||
void Gfx::ClearScreen() {
|
||||
lcd.FillRectangle(0, 0, width, height, 0x0000);
|
||||
SetBackgroundColor(0x0000);
|
||||
lcd.BeginDrawBuffer(0, 0, width, height);
|
||||
for(int i = 0; i < height; i++) {
|
||||
lcd.NextDrawBuffer(reinterpret_cast<const uint8_t *>(buffer), width * 2);
|
||||
}
|
||||
lcd.EndDrawBuffer();
|
||||
}
|
||||
|
||||
void Gfx::FillRectangle(uint8_t x, uint8_t y, uint8_t width, uint8_t height, uint16_t color) {
|
||||
lcd.FillRectangle(x, y, width, height, color);
|
||||
SetBackgroundColor(color);
|
||||
lcd.BeginDrawBuffer(0, 0, width, height);
|
||||
for(int i = 0; i < height; i++) {
|
||||
lcd.NextDrawBuffer(reinterpret_cast<const uint8_t *>(buffer), width * 2);
|
||||
}
|
||||
lcd.EndDrawBuffer();
|
||||
}
|
||||
|
||||
void Gfx::DrawString(uint8_t x, uint8_t y, uint16_t color, const char *text, const FONT_INFO *p_font, bool wrap) {
|
||||
@@ -70,15 +80,15 @@ void Gfx::DrawChar(const FONT_INFO *font, uint8_t c, uint8_t *x, uint8_t y, uint
|
||||
for (uint16_t i = 0; i < font->height; i++) {
|
||||
for (uint16_t j = 0; j < bytes_in_line; j++) {
|
||||
for (uint8_t k = 0; k < 8; k++) {
|
||||
if ((1 << (7 - k)) &
|
||||
font->data[font->charInfo[char_idx].offset + i * bytes_in_line + j]) {
|
||||
lcd.NextDrawBuffer(reinterpret_cast<uint8_t *>(&color), 2);
|
||||
if ((1 << (7 - k)) & font->data[font->charInfo[char_idx].offset + i * bytes_in_line + j]) {
|
||||
buffer[(j*8)+k] = color;
|
||||
}
|
||||
else {
|
||||
lcd.NextDrawBuffer(reinterpret_cast<uint8_t *>(&bg), 2);
|
||||
buffer[(j*8)+k] = bg;
|
||||
}
|
||||
}
|
||||
}
|
||||
lcd.NextDrawBuffer(reinterpret_cast<uint8_t *>(&buffer), bytes_in_line*8*2);
|
||||
}
|
||||
lcd.EndDrawBuffer();
|
||||
*x += font->charInfo[char_idx].widthBits + font->spacePixels;
|
||||
@@ -96,4 +106,10 @@ void Gfx::Wakeup() {
|
||||
lcd.Wakeup();
|
||||
}
|
||||
|
||||
void Gfx::SetBackgroundColor(uint16_t color) {
|
||||
for(int i = 0; i < width; i++) {
|
||||
buffer[i] = color;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@@ -21,10 +21,14 @@ namespace Pinetime {
|
||||
void Wakeup();
|
||||
|
||||
private:
|
||||
static constexpr uint8_t width = 240;
|
||||
static constexpr uint8_t height = 240;
|
||||
|
||||
uint16_t buffer[width]; // 1 line buffer
|
||||
Drivers::St7789& lcd;
|
||||
const uint8_t width = 240;
|
||||
const uint8_t height = 240;
|
||||
|
||||
void pixel_draw(uint8_t x, uint8_t y, uint16_t color);
|
||||
void SetBackgroundColor(uint16_t color);
|
||||
};
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user