YAHAL
Yet Another Hardware Abstraction Library
Loading...
Searching...
No Matches
st7735s_drv.h
1// ---------------------------------------------
2// This file is part of
3// _ _ __ _ _ __ __
4// ( \/ ) /__\ ( )_( ) /__\ ( )
5// \ / /(__)\ ) _ ( /(__)\ )(__
6// (__)(__)(__)(_) (_)(__)(__)(____)
7//
8// Yet Another HW Abstraction Library
9// Copyright (C) Andreas Terstegge
10// BSD Licensed (see file LICENSE)
11//
12// ---------------------------------------------
13//
14// Driver for ST7735S-based LCD displays
15
16#ifndef _ST7735S_H_
17#define _ST7735S_H_
18
19#include "spi_interface.h"
20#include "gpio_interface.h"
21#include "lcd_interface.h"
22#include "mutex_interface.h"
23
24const int BUF_LEN = 256;
25
26class st7735s_drv : public lcd_interface {
27public:
28 // Flags and struct to define the HW details
29 // of the display
31 static const uint8_t RGB_COLOR_FILTER = 0x00;
32 static const uint8_t BGR_COLOR_FILTER = 0x01;
33
34 struct config {
35 config(uint16_t sX, uint16_t sY, uint16_t sRX, uint16_t sRY,
36 uint8_t oX, uint8_t oY, uint8_t f)
37 : sizeX(sX), sizeY(sY), sizeRamX(sRX), sizeRamY(sRY),
38 offsetX(oX), offsetY(oY), flags(f) { }
39 uint16_t sizeX;
40 uint16_t sizeY;
41 uint16_t sizeRamX;
42 uint16_t sizeRamY;
43 uint8_t offsetX;
44 uint8_t offsetY;
45 uint8_t flags;
46 };
47
48 // Display configurations
49 static config Crystalfontz_128x128;
50
51 enum Orientation { UP, DOWN, LEFT, RIGHT };
52
53public:
54 // User interface
57 gpio_interface & rst_pin,
58 gpio_interface & dc_pin,
59 config & lcd,
60 mutex_interface * mutex = nullptr);
61
62 virtual ~st7735s_drv();
63
64 uint16_t getSizeX() override;
65 uint16_t getSizeY() override;
66
67 // x and y range from 0 to getX/YSize() - 1
68 void drawPixel(uint16_t x, uint16_t y, color_t color) override;
69 void drawHLine(uint16_t xs, uint16_t ys, uint16_t xe, color_t c) override;
70 void drawVLine(uint16_t xs, uint16_t ys, uint16_t ye, color_t c) override;
71
72 void drawArea (uint16_t xs, uint16_t ys, uint16_t xe, uint16_t ye,
73 pixel_stream & ps) override;
74
75 void fillArea (uint16_t xs, uint16_t ys, uint16_t xe, uint16_t ye,
76 color_t c) override;
77
78 // Specific methods for ST7735s
79 void scroll(int16_t lines);
80 void clearScreen(color_t c);
81 void inverseColors(bool b);
82 void setOrientation(Orientation o);
83
84private:
85
86 void change (uint16_t & x, uint16_t & y);
87 void setFrame(uint16_t xs, uint16_t ys, uint16_t xe, uint16_t ye);
88
89 void writeData(uint8_t data);
90 void writeDataBuffer(int len);
91 void writeCommand(uint8_t cmd);
92
93 uint8_t _tx_buffer[BUF_LEN];
94// uint8_t _rx_buffer[BUF_LEN];
95 spi_interface & _spi;
96 gpio_interface & _rst_pin;
97 gpio_interface & _dc_pin;
98 config & _lcd;
99
100 Orientation _orientation;
101 int8_t _first_row; // Vertical scroll start address
102
103 mutex_interface * _mutex;
104};
105
106#endif // _ST7735S_H_
Definition mutex.h:27