- // --------------------------------------------------------------------------
 
- // ST7735-library (declaration)
 
- //
 
- // Author: Bernhard Bablok
 
- //
 
- // The code is based on work from Gavin Lyons, see
 
- // https://github.com/gavinlyonsrepo/pic_16F18346_projects
 
- //
 
- // https://github.com/bablokb/pic-st7735
 
- // --------------------------------------------------------------------------
 
 
- #ifndef ST7735_TFT_H
 
- #define ST7735_TFT_H
 
 
- #include <stdbool.h>
 
- #include <stdint.h>
 
- #include <string.h>
 
 
- #if defined _PTC
 
-   #include "picconfig.h"
 
- #endif
 
 
- #if defined TFT_ENABLE_FONTS
 
-   #if !defined TFT_ENABLE_TEXT
 
-     #define TFT_ENABLE_TEXT
 
-   #endif
 
-   #if !defined PROGMEM
 
-     #define PROGMEM
 
-   #endif
 
- #endif
 
 
- #if defined TFT_ENABLE_ALL
 
-   #if !defined TFT_ENABLE_SHAPES
 
-     #define TFT_ENABLE_SHAPES
 
-   #endif
 
-   #if !defined TFT_ENABLE_SCROLL
 
-     #define TFT_ENABLE_SCROLL
 
-   #endif
 
-   #if !defined TFT_ENABLE_TEXT
 
-     #define TFT_ENABLE_TEXT
 
-   #endif
 
-   #if !defined TFT_ENABLE_ROTATE
 
-     #define TFT_ENABLE_ROTATE
 
-   #endif
 
- #endif
 
 
- extern uint8_t tft_width, tft_height;
 
 
- #define _swap(a, b) { int16_t t; t = a; a = b; b = t;}
 
- #define ST7735_NOP     0x00
 
- #define ST7735_SWRESET 0x01
 
- #define ST7735_RDDID   0x04
 
- #define ST7735_RDDST   0x09
 
- #define ST7735_SLPIN   0x10
 
- #define ST7735_SLPOUT  0x11
 
- #define ST7735_PTLON   0x12
 
- #define ST7735_NORON   0x13
 
- #define ST7735_INVOFF  0x20
 
- #define ST7735_INVON   0x21
 
- #define ST7735_DISPOFF 0x28
 
- #define ST7735_DISPON  0x29
 
- #define ST7735_CASET   0x2A
 
- #define ST7735_RASET   0x2B
 
- #define ST7735_RAMWR   0x2C
 
- #define ST7735_RAMRD   0x2E
 
- #define ST7735_PTLAR   0x30
 
- #define ST7735_VSCRDEF 0x33
 
- #define ST7735_COLMOD  0x3A
 
- #define ST7735_MADCTL  0x36
 
- #define ST7735_MADCTL_MY 0x80
 
- #define ST7735_MADCTL_MX 0x40
 
- #define ST7735_MADCTL_MV 0x20
 
- #define ST7735_MADCTL_ML 0x10
 
- #define ST7735_MADCTL_RGB 0x00
 
- #define ST7735_VSCRSADD 0x37
 
- #define ST7735_FRMCTR1 0xB1
 
- #define ST7735_FRMCTR2 0xB2
 
- #define ST7735_FRMCTR3 0xB3
 
- #define ST7735_INVCTR  0xB4
 
- #define ST7735_DISSET5 0xB6
 
- #define ST7735_PWCTR1  0xC0
 
- #define ST7735_PWCTR2  0xC1
 
- #define ST7735_PWCTR3  0xC2
 
- #define ST7735_PWCTR4  0xC3
 
- #define ST7735_PWCTR5  0xC4
 
- #define ST7735_VMCTR1  0xC5
 
- #define ST7735_RDID1   0xDA
 
- #define ST7735_RDID2   0xDB
 
- #define ST7735_RDID3   0xDC
 
- #define ST7735_RDID4   0xDD
 
- #define ST7735_PWCTR6  0xFC
 
- #define ST7735_GMCTRP1 0xE0
 
- #define ST7735_GMCTRN1 0xE1
 
 
- // Color definitions
 
- #define   ST7735_BLACK   0x0000
 
- #define   ST7735_BLUE    0x001F
 
- #define   ST7735_RED     0xF800
 
- #define   ST7735_GREEN   0x07E0
 
- #define   ST7735_CYAN    0x07FF
 
- #define   ST7735_MAGENTA 0xF81F
 
- #define   ST7735_YELLOW  0xFFE0
 
- #define   ST7735_WHITE   0xFFFF
 
 
- #define LCD_ASCII_OFFSET 0x20 //0x20, ASCII character for Space, The font table starts with this character
 
 
 
- // ******** FUNCTION  PROTOTYPES ************ 
 
 
- // SPI 
 
- void write_command(uint8_t );
 
- void write_data(uint8_t );
 
 
- // Init
 
- #if defined TFT_ENABLE_GREEN
 
- void TFT_GreenTab_Initialize(void);
 
- void Rcmd2green();
 
- #endif
 
 
- #if defined TFT_ENABLE_RED
 
- void TFT_RedTab_Initialize(void);
 
- #endif
 
 
- #if defined TFT_ENABLE_BLACK
 
- void TFT_BlackTab_Initialize(void);
 
- #endif
 
 
- #if defined(TFT_ENABLE_RED) || defined(TFT_ENABLE_BLACK)
 
- void Rcmd2red();
 
- #endif
 
 
- #if defined TFT_ENABLE_GENERIC
 
- void TFT_ST7735B_Initialize(void);
 
- void Bcmd();
 
- #endif
 
 
- #if defined TFT_ENABLE_RESET
 
- void TFT_ResetPIN(void);
 
- #endif
 
 
- void Rcmd1();
 
- void Rcmd3();
 
 
- // Misc + Screen related
 
- void setAddrWindow(uint8_t , uint8_t , uint8_t , uint8_t );
 
- void fillScreen(uint16_t color); 
 
- void drawFastVLine(uint8_t x, uint8_t y, uint8_t h, uint16_t color);
 
- void drawFastHLine(uint8_t x, uint8_t y, uint8_t w, uint16_t color);
 
- void drawPixel(uint8_t , uint8_t , uint16_t );
 
- void fillRectangle(uint8_t , uint8_t , uint8_t , uint8_t , uint16_t );
 
- void fillRect(uint8_t x, uint8_t y, uint8_t w, uint8_t h, uint16_t color);
 
 
- void invertDisplay(bool i); 
 
- void NormalDisplay(void);
 
- void pushColor(uint16_t color);
 
 
- //Scroll 
 
- #if defined TFT_ENABLE_SCROLL
 
- void setScrollDefinition(uint8_t top_fix_height, uint8_t bottom_fix_height, bool _scroll_direction);
 
- void VerticalScroll(uint8_t _vsp); 
 
- #endif
 
 
- // Shapes
 
- #if defined TFT_ENABLE_SHAPES
 
- void drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color);
 
- void drawRectWH(uint8_t x, uint8_t y, uint8_t w, uint8_t h, uint16_t color);
 
- void drawRoundRect(uint8_t x, uint8_t y, uint8_t w, uint8_t h, uint8_t r, uint16_t color); 
 
- void fillRoundRect(uint8_t x, uint8_t y, uint8_t w, uint8_t h, uint8_t r, uint16_t color);
 
- void drawCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color); 
 
- void drawCircleHelper(int16_t x0, int16_t y0, int16_t r, uint8_t cornername, uint16_t color); 
 
- void fillCircleHelper(int16_t x0, int16_t y0, int16_t r, uint8_t cornername, int16_t delta, uint16_t color); 
 
- void fillCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color); 
 
- void drawTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color); 
 
- void fillTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color); 
 
- #endif
 
 
- // Text
 
- #if defined(TFT_ENABLE_TEXT)
 
- void drawChar(uint8_t x, uint8_t y, uint8_t c, uint16_t color, uint16_t bg,  uint8_t size);
 
- void setTextWrap(bool w);
 
- void drawText(uint8_t x, uint8_t y, const char *_text, uint16_t color, uint16_t bg, uint8_t size);
 
- #endif
 
 
- #if defined TFT_ENABLE_ROTATE
 
- void setRotation(uint8_t m);
 
- #endif
 
 
- #if defined TFT_ENABLE_FONTS
 
- /// Font data stored PER GLYPH
 
- typedef struct {
 
-   uint16_t bitmapOffset; ///< Pointer into GFXfont->bitmap
 
-   uint8_t width;         ///< Bitmap dimensions in pixels
 
-   uint8_t height;        ///< Bitmap dimensions in pixels
 
-   uint8_t xAdvance;      ///< Distance to advance cursor (x axis)
 
-   int8_t xOffset;        ///< X dist from cursor pos to UL corner
 
-   int8_t yOffset;        ///< Y dist from cursor pos to UL corner
 
- } GFXglyph;
 
 
- /// Data stored for FONT AS A WHOLE
 
- typedef struct {
 
-   uint8_t *bitmap;     ///< Glyph bitmaps, concatenated
 
-   GFXglyph *glyph;     ///< Glyph array
 
-   uint16_t first;      ///< ASCII extents (first char)
 
-   uint16_t last;       ///< ASCII extents (last char)
 
-   uint8_t yAdvance;    ///< Newline distance (y axis)
 
-   const char *subset;  ///< subset of chars in the font
 
- } GFXfont;
 
 
- extern GFXfont *_gfxFont;
 
- void setFont(const GFXfont *f);
 
- #endif
 
 
- // ------ not functional yet ----------------------------------------------
 
- // needs fat-library
 
 
- // BMP processing from SD-card
 
- #if defined TFT_ENABLE_BMP
 
- bool bmpDraw(int8_t x, int8_t y, int8_t *bmpname);
 
- #endif
 
 
- #endif