components/tft/tftspi.h

changeset 0
b74b0e4902c3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/tft/tftspi.h	Sat Oct 20 13:23:15 2018 +0200
@@ -0,0 +1,674 @@
+/*
+ * 
+ * HIGH SPEED LOW LEVEL DISPLAY FUNCTIONS USING DIRECT TRANSFER MODE
+ *
+*/
+
+#ifndef _TFTSPI_H_
+#define _TFTSPI_H_
+
+#include "tftspi.h"
+#include "spi_master_lobo.h"
+#include "sdkconfig.h"
+#include "stmpe610.h"
+
+#define TOUCH_TYPE_NONE		0
+#define TOUCH_TYPE_XPT2046	1
+#define TOUCH_TYPE_STMPE610	2
+
+//#define TP_CALX_STMPE610	21368532
+//#define TP_CALY_STMPE610	11800144
+
+// === Screen orientation constants ===
+#define PORTRAIT	0
+#define LANDSCAPE	1
+#define PORTRAIT_FLIP	2
+#define LANDSCAPE_FLIP	3
+
+#define DISP_TYPE_ILI9341	0
+#define DISP_TYPE_ILI9488	1
+#define DISP_TYPE_ST7789V	2
+#define DISP_TYPE_ST7735	3
+#define DISP_TYPE_ST7735R	4
+#define DISP_TYPE_ST7735B	5
+#define DISP_TYPE_MAX		6
+
+#if CONFIG_EXAMPLE_DISPLAY_TYPE == 1
+
+// ** Set the correct configuration for ESP32-WROVER-KIT v3
+// --------------------------------------------------------
+#define DEFAULT_DISP_TYPE           DISP_TYPE_ST7789V
+#define DEFAULT_TFT_DISPLAY_WIDTH   240
+#define DEFAULT_TFT_DISPLAY_HEIGHT  320
+#define DISP_COLOR_BITS_24          0x66
+#define DEFAULT_GAMMA_CURVE         0
+#define DEFAULT_SPI_CLOCK           26000000
+#define TFT_INVERT_ROTATION         0
+#define TFT_INVERT_ROTATION1        1
+#define TFT_RGB_BGR                 0x00
+
+#define USE_TOUCH	TOUCH_TYPE_NONE
+
+#define PIN_NUM_MISO 25		// SPI MISO
+#define PIN_NUM_MOSI 23		// SPI MOSI
+#define PIN_NUM_CLK  19		// SPI CLOCK pin
+#define PIN_NUM_CS   22		// Display CS pin
+#define PIN_NUM_DC   21		// Display command/data pin
+#define PIN_NUM_TCS   0		// Touch screen CS pin
+
+#define PIN_NUM_RST  18  	// GPIO used for RESET control
+#define PIN_NUM_BCKL  5     // GPIO used for backlight control
+#define PIN_BCKL_ON   0     // GPIO value for backlight ON
+#define PIN_BCKL_OFF  1     // GPIO value for backlight OFF
+// --------------------------------------------------------
+
+#elif CONFIG_EXAMPLE_DISPLAY_TYPE == 2
+
+// ** Set the correct configuration for Adafruit TFT Feather
+// ---------------------------------------------------------
+#define DEFAULT_DISP_TYPE   DISP_TYPE_ILI9341
+#define DEFAULT_TFT_DISPLAY_WIDTH   240
+#define DEFAULT_TFT_DISPLAY_HEIGHT  320
+#define DISP_COLOR_BITS_24          0x66
+#define DEFAULT_GAMMA_CURVE         0
+#define DEFAULT_SPI_CLOCK           26000000
+#define TFT_INVERT_ROTATION         0
+#define TFT_INVERT_ROTATION1        0
+#define TFT_RGB_BGR                 0x08
+
+#define USE_TOUCH                   TOUCH_TYPE_STMPE610
+
+#define PIN_NUM_MISO 19		// SPI MISO
+#define PIN_NUM_MOSI 18		// SPI MOSI
+#define PIN_NUM_CLK  5		// SPI CLOCK pin
+#define PIN_NUM_CS   15		// Display CS pin
+#define PIN_NUM_DC   33		// Display command/data pin
+#define PIN_NUM_TCS  32		// Touch screen CS pin (NOT used if USE_TOUCH=0)
+
+#define PIN_NUM_RST  0  	// GPIO used for RESET control (#16)
+#define PIN_NUM_BCKL 0  	// GPIO used for backlight control
+#define PIN_BCKL_ON  0  	// GPIO value for backlight ON
+#define PIN_BCKL_OFF 1  	// GPIO value for backlight OFF
+// ---------------------------------------------------------
+
+#elif CONFIG_EXAMPLE_DISPLAY_TYPE == 3
+
+// ** Set the correct configuration for M5Stack TFT
+// ---------------------------------------------------------
+#define DEFAULT_DISP_TYPE   DISP_TYPE_ILI9341
+#define DEFAULT_TFT_DISPLAY_WIDTH   320
+#define DEFAULT_TFT_DISPLAY_HEIGHT  240
+#define DISP_COLOR_BITS_24          0x66
+#define DEFAULT_GAMMA_CURVE         0
+#define DEFAULT_SPI_CLOCK           26000000
+#define TFT_INVERT_ROTATION         0
+#define TFT_INVERT_ROTATION1        0
+#define TFT_INVERT_ROTATION2        1   // Adapte M5Stack TFT
+#define TFT_RGB_BGR                 0x08
+
+#define USE_TOUCH                   TOUCH_TYPE_NONE
+
+#define PIN_NUM_MISO 19		// SPI MISO
+#define PIN_NUM_MOSI 23		// SPI MOSI
+#define PIN_NUM_CLK  18		// SPI CLOCK pin
+#define PIN_NUM_CS   14		// Display CS pin
+#define PIN_NUM_DC   27		// Display command/data pin
+#define PIN_NUM_TCS  0		// Touch screen CS pin (NOT used if USE_TOUCH=0)
+
+#define PIN_NUM_RST  33  	// GPIO used for RESET control (#16)
+#define PIN_NUM_BCKL 32  	// GPIO used for backlight control
+#define PIN_BCKL_ON  1  	// GPIO value for backlight ON
+#define PIN_BCKL_OFF 0  	// GPIO value for backlight OFF
+// ---------------------------------------------------------
+
+#else
+
+// Configuration for other boards, set the correct values for the display used
+//----------------------------------------------------------------------------
+#define DISP_COLOR_BITS_24	0x66
+//#define DISP_COLOR_BITS_16	0x55  // Do not use!
+
+// #############################################
+// ### Set to 1 for some displays,           ###
+//     for example the one on ESP-WROWER-KIT ###
+// #############################################
+#define TFT_INVERT_ROTATION 0
+#define TFT_INVERT_ROTATION1 0
+
+// ################################################
+// ### SET TO 0X00 FOR DISPLAYS WITH RGB MATRIX ###
+// ### SET TO 0X08 FOR DISPLAYS WITH BGR MATRIX ###
+// ### For ESP-WROWER-KIT set to 0x00           ###
+// ################################################
+#define TFT_RGB_BGR 0x08
+
+// ##############################################################
+// ### Define ESP32 SPI pins to which the display is attached ###
+// ##############################################################
+
+// The pins configured here are the native spi pins for HSPI interface
+// Any other valid pin combination can be used
+#define PIN_NUM_MISO 19		// SPI MISO
+#define PIN_NUM_MOSI 23		// SPI MOSI
+#define PIN_NUM_CLK  18		// SPI CLOCK pin
+#define PIN_NUM_CS   5		// Display CS pin
+#define PIN_NUM_DC   4		// Display command/data pin
+#define PIN_NUM_TCS  22		// Touch screen CS pin (NOT used if USE_TOUCH=0)
+
+// --------------------------------------------------------------
+// ** Set Reset and Backlight pins to 0 if not used !
+// ** If you want to use them, set them to some valid GPIO number
+#define PIN_NUM_RST  0  	// GPIO used for RESET control
+
+#define PIN_NUM_BCKL 21  	// GPIO used for backlight control
+#define PIN_BCKL_ON  1  	// GPIO value for backlight ON
+#define PIN_BCKL_OFF 0  	// GPIO value for backlight OFF
+// --------------------------------------------------------------
+
+// #######################################################
+// Set this to 1 if you want to use touch screen functions
+// #######################################################
+#define USE_TOUCH	TOUCH_TYPE_XPT2046
+// #######################################################
+
+// #######################################################################
+// Default display width (smaller dimension) and height (larger dimension)
+// #######################################################################
+#define DEFAULT_TFT_DISPLAY_WIDTH  240
+#define DEFAULT_TFT_DISPLAY_HEIGHT 320
+// #######################################################################
+
+#define DEFAULT_GAMMA_CURVE 0
+#define DEFAULT_SPI_CLOCK   26000000
+#define DEFAULT_DISP_TYPE   DISP_TYPE_ILI9341
+//----------------------------------------------------------------------------
+
+#endif  // CONFIG_EXAMPLE_ESP_WROVER_KIT
+
+
+// ##############################################################
+// #### Global variables                                     ####
+// ##############################################################
+
+// ==== Converts colors to grayscale if 1 =======================
+extern uint8_t gray_scale;
+
+// ==== Spi clock for reading data from display memory in Hz ====
+extern uint32_t max_rdclock;
+
+// ==== Display dimensions in pixels ============================
+extern int _width;
+extern int _height;
+
+// ==== Display type, DISP_TYPE_ILI9488 or DISP_TYPE_ILI9341 ====
+extern uint8_t tft_disp_type;
+
+// ==== Spi device handles for display and touch screen =========
+extern spi_lobo_device_handle_t disp_spi;
+extern spi_lobo_device_handle_t ts_spi;
+
+// ##############################################################
+
+// 24-bit color type structure
+typedef struct __attribute__((__packed__)) {
+//typedef struct {
+	uint8_t r;
+	uint8_t g;
+	uint8_t b;
+} color_t ;
+
+// ==== Display commands constants ====
+#define TFT_INVOFF     0x20
+#define TFT_INVONN     0x21
+#define TFT_DISPOFF    0x28
+#define TFT_DISPON     0x29
+#define TFT_MADCTL	   0x36
+#define TFT_PTLAR 	   0x30
+#define TFT_ENTRYM 	   0xB7
+
+#define TFT_CMD_NOP			0x00
+#define TFT_CMD_SWRESET		0x01
+#define TFT_CMD_RDDID		0x04
+#define TFT_CMD_RDDST		0x09
+
+#define TFT_CMD_SLPIN		0x10
+#define TFT_CMD_SLPOUT		0x11
+#define TFT_CMD_PTLON		0x12
+#define TFT_CMD_NORON		0x13
+
+#define TFT_CMD_RDMODE		0x0A
+#define TFT_CMD_RDMADCTL	0x0B
+#define TFT_CMD_RDPIXFMT	0x0C
+#define TFT_CMD_RDIMGFMT	0x0D
+#define TFT_CMD_RDSELFDIAG  0x0F
+
+#define TFT_CMD_GAMMASET	0x26
+
+#define TFT_CMD_FRMCTR1		0xB1
+#define TFT_CMD_FRMCTR2		0xB2
+#define TFT_CMD_FRMCTR3		0xB3
+#define TFT_CMD_INVCTR		0xB4
+#define TFT_CMD_DFUNCTR		0xB6
+
+#define TFT_CMD_PWCTR1		0xC0
+#define TFT_CMD_PWCTR2		0xC1
+#define TFT_CMD_PWCTR3		0xC2
+#define TFT_CMD_PWCTR4		0xC3
+#define TFT_CMD_PWCTR5		0xC4
+#define TFT_CMD_VMCTR1		0xC5
+#define TFT_CMD_VMCTR2		0xC7
+
+#define TFT_CMD_RDID1		0xDA
+#define TFT_CMD_RDID2		0xDB
+#define TFT_CMD_RDID3		0xDC
+#define TFT_CMD_RDID4		0xDD
+
+#define TFT_CMD_GMCTRP1		0xE0
+#define TFT_CMD_GMCTRN1		0xE1
+
+#define TFT_CMD_POWERA		0xCB
+#define TFT_CMD_POWERB		0xCF
+#define TFT_CMD_POWER_SEQ	0xED
+#define TFT_CMD_DTCA		0xE8
+#define TFT_CMD_DTCB		0xEA
+#define TFT_CMD_PRC			0xF7
+#define TFT_CMD_3GAMMA_EN	0xF2
+
+#define ST_CMD_VCOMS       0xBB
+#define ST_CMD_FRCTRL2      0xC6
+#define ST_CMD_PWCTR1		0xD0
+
+#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_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_PWCTR6  0xFC
+#define ST7735_GMCTRP1 0xE0
+#define ST7735_GMCTRN1 0xE1
+
+#define MADCTL_MY  0x80
+#define MADCTL_MX  0x40
+#define MADCTL_MV  0x20
+#define MADCTL_ML  0x10
+#define MADCTL_MH  0x04
+
+#define TFT_CASET		0x2A
+#define TFT_PASET		0x2B
+#define TFT_RAMWR		0x2C
+#define TFT_RAMRD		0x2E
+#define TFT_CMD_PIXFMT	0x3A
+
+#define TFT_CMD_DELAY	0x80
+
+
+// Initialization sequence for ILI7749
+// ====================================
+static const uint8_t ST7789V_init[] = {
+#if PIN_NUM_RST
+  15,                   					        // 15 commands in list
+#else
+  16,                   					        // 16 commands in list
+  TFT_CMD_SWRESET, TFT_CMD_DELAY,					//  1: Software reset, no args, w/delay
+  200,												//     200 ms delay
+#endif
+  TFT_CMD_FRMCTR2, 5, 0x0c, 0x0c, 0x00, 0x33, 0x33,
+  TFT_ENTRYM, 1, 0x45,
+  ST_CMD_VCOMS, 1, 0x2B,
+  TFT_CMD_PWCTR1, 1, 0x2C,
+  TFT_CMD_PWCTR3, 2, 0x01, 0xff,
+  TFT_CMD_PWCTR4, 1, 0x11,
+  TFT_CMD_PWCTR5, 1, 0x20,
+  ST_CMD_FRCTRL2, 1, 0x0f,
+  ST_CMD_PWCTR1, 2, 0xA4, 0xA1,
+  TFT_CMD_GMCTRP1, 14, 0xD0, 0x00, 0x05, 0x0E, 0x15, 0x0D, 0x37, 0x43, 0x47, 0x09, 0x15, 0x12, 0x16, 0x19,
+  TFT_CMD_GMCTRN1, 14, 0xD0, 0x00, 0x05, 0x0D, 0x0C, 0x06, 0x2D, 0x44, 0x40, 0x0E, 0x1C, 0x18, 0x16, 0x19,
+  TFT_MADCTL, 1, (MADCTL_MX | TFT_RGB_BGR),			// Memory Access Control (orientation)
+  TFT_CMD_PIXFMT, 1, DISP_COLOR_BITS_24,            // *** INTERFACE PIXEL FORMAT: 0x66 -> 18 bit; 0x55 -> 16 bit
+  TFT_CMD_SLPOUT, TFT_CMD_DELAY, 120,				//  Sleep out,	//  120 ms delay
+  TFT_DISPON, TFT_CMD_DELAY, 120,
+};
+
+// Initialization sequence for ILI7341
+// ====================================
+static const uint8_t ILI9341_init[] = {
+#if PIN_NUM_RST
+  23,                   					        // 24 commands in list
+#else
+  24,                   					        // 24 commands in list
+  TFT_CMD_SWRESET, TFT_CMD_DELAY,					//  1: Software reset, no args, w/delay
+  250,												//     200 ms delay
+#endif
+  TFT_CMD_POWERA, 5, 0x39, 0x2C, 0x00, 0x34, 0x02,
+  TFT_CMD_POWERB, 3, 0x00, 0XC1, 0X30,
+  0xEF, 3, 0x03, 0x80, 0x02,
+  TFT_CMD_DTCA, 3, 0x85, 0x00, 0x78,
+  TFT_CMD_DTCB, 2, 0x00, 0x00,
+  TFT_CMD_POWER_SEQ, 4, 0x64, 0x03, 0X12, 0X81,
+  TFT_CMD_PRC, 1, 0x20,
+  TFT_CMD_PWCTR1, 1, 0x23,							//Power control VRH[5:0]
+  TFT_CMD_PWCTR2, 1, 0x10,							//Power control SAP[2:0];BT[3:0]
+  TFT_CMD_VMCTR1, 2, 0x3e, 0x28,					//VCM control
+  TFT_CMD_VMCTR2, 1, 0x86,							//VCM control2
+  TFT_MADCTL, 1,									// Memory Access Control (orientation)
+  (MADCTL_MX | TFT_RGB_BGR),
+  // *** INTERFACE PIXEL FORMAT: 0x66 -> 18 bit; 0x55 -> 16 bit
+  TFT_CMD_PIXFMT, 1, DISP_COLOR_BITS_24,
+  TFT_INVOFF, 0,
+  TFT_CMD_FRMCTR1, 2, 0x00, 0x18,
+  TFT_CMD_DFUNCTR, 4, 0x08, 0x82, 0x27, 0x00,		// Display Function Control
+  TFT_PTLAR, 4, 0x00, 0x00, 0x01, 0x3F,
+  TFT_CMD_3GAMMA_EN, 1, 0x00,						// 3Gamma Function: Disable (0x02), Enable (0x03)
+  TFT_CMD_GAMMASET, 1, 0x01,						//Gamma curve selected (0x01, 0x02, 0x04, 0x08)
+  TFT_CMD_GMCTRP1, 15,   							//Positive Gamma Correction
+  0x0F, 0x31, 0x2B, 0x0C, 0x0E, 0x08, 0x4E, 0xF1, 0x37, 0x07, 0x10, 0x03, 0x0E, 0x09, 0x00,
+  TFT_CMD_GMCTRN1, 15,   							//Negative Gamma Correction
+  0x00, 0x0E, 0x14, 0x03, 0x11, 0x07, 0x31, 0xC1, 0x48, 0x08, 0x0F, 0x0C, 0x31, 0x36, 0x0F,
+  TFT_CMD_SLPOUT, TFT_CMD_DELAY,					//  Sleep out
+  200,			 									//  120 ms delay
+  TFT_DISPON, TFT_CMD_DELAY, 200,
+};
+
+// Initialization sequence for ILI9488
+// ====================================
+static const uint8_t ILI9488_init[] = {
+#if PIN_NUM_RST
+  17,                   					        // 17 commands in list
+#else
+  18,                   					        // 18 commands in list
+  TFT_CMD_SWRESET, TFT_CMD_DELAY,					//  1: Software reset, no args, w/delay
+  200,												//     200 ms delay
+#endif
+  0xE0, 15, 0x00, 0x03, 0x09, 0x08, 0x16, 0x0A, 0x3F, 0x78, 0x4C, 0x09, 0x0A, 0x08, 0x16, 0x1A, 0x0F,
+  0xE1, 15,	0x00, 0x16, 0x19, 0x03, 0x0F, 0x05, 0x32, 0x45, 0x46, 0x04, 0x0E, 0x0D, 0x35, 0x37, 0x0F,
+  0xC0, 2,   //Power Control 1
+	0x17,    //Vreg1out
+	0x15,    //Verg2out
+
+  0xC1, 1,   //Power Control 2
+	0x41,    //VGH,VGL
+
+  0xC5, 3,   //Power Control 3
+	0x00,
+	0x12,    //Vcom
+	0x80,
+
+#if TFT_INVERT_ROTATION
+  TFT_MADCTL, 1, (MADCTL_MV | TFT_RGB_BGR),			// Memory Access Control (orientation), set to portrait
+#else
+  TFT_MADCTL, 1, (MADCTL_MX | TFT_RGB_BGR),			// Memory Access Control (orientation), set to portrait
+#endif
+
+  // *** INTERFACE PIXEL FORMAT: 0x66 -> 18 bit;
+  TFT_CMD_PIXFMT, 1, DISP_COLOR_BITS_24,
+
+  0xB0, 1,   // Interface Mode Control
+	0x00,    // 0x80: SDO NOT USE; 0x00 USE SDO
+
+  0xB1, 1,   //Frame rate
+	0xA0,    //60Hz
+
+  0xB4, 1,   //Display Inversion Control
+	0x02,    //2-dot
+
+  0xB6, 2,   //Display Function Control  RGB/MCU Interface Control
+	0x02,    //MCU
+	0x02,    //Source,Gate scan direction
+
+  0xE9, 1,   // Set Image Function
+	0x00,    // Disable 24 bit data
+
+  0x53, 1,   // Write CTRL Display Value
+	0x28,    // BCTRL && DD on
+
+  0x51, 1,   // Write Display Brightness Value
+	0x7F,    //
+
+  0xF7, 4,   // Adjust Control
+	0xA9,
+	0x51,
+	0x2C,
+	0x02,    // D7 stream, loose
+
+
+  0x11, TFT_CMD_DELAY,  //Exit Sleep
+    120,
+  0x29, 0,      //Display on
+
+};
+
+
+// Initialization commands for 7735B screens
+// ------------------------------------
+static const uint8_t STP7735_init[] = {
+#if PIN_NUM_RST
+  16,                       // 17 commands in list
+#else
+  17,						// 18 commands in list:
+  ST7735_SLPOUT,   TFT_CMD_DELAY,	//  2: Out of sleep mode, no args, w/delay
+  255,			           			//     255 = 500 ms delay
+#endif
+  TFT_CMD_PIXFMT, 1+TFT_CMD_DELAY,	//  3: Set color mode, 1 arg + delay:
+  0x06, 							//     18-bit color 6-6-6 color format
+  10,	          					//     10 ms delay
+  ST7735_FRMCTR1, 3+TFT_CMD_DELAY,	//  4: Frame rate control, 3 args + delay:
+  0x00,						//     fastest refresh
+  0x06,						//     6 lines front porch
+  0x03,						//     3 lines back porch
+  10,						//     10 ms delay
+  TFT_MADCTL , 1      ,		//  5: Memory access ctrl (directions), 1 arg:
+  0x08,						//     Row addr/col addr, bottom to top refresh
+  ST7735_DISSET5, 2      ,	//  6: Display settings #5, 2 args, no delay:
+  0x15,						//     1 clk cycle nonoverlap, 2 cycle gate
+  // rise, 3 cycle osc equalize
+  0x02,						//     Fix on VTL
+  ST7735_INVCTR , 1      ,	//  7: Display inversion control, 1 arg:
+  0x0,						//     Line inversion
+  ST7735_PWCTR1 , 2+TFT_CMD_DELAY,	//  8: Power control, 2 args + delay:
+  0x02,						//     GVDD = 4.7V
+  0x70,						//     1.0uA
+  10,						//     10 ms delay
+  ST7735_PWCTR2 , 1      ,	//  9: Power control, 1 arg, no delay:
+  0x05,						//     VGH = 14.7V, VGL = -7.35V
+  ST7735_PWCTR3 , 2      ,	// 10: Power control, 2 args, no delay:
+  0x01,						//     Opamp current small
+  0x02,						//     Boost frequency
+  ST7735_VMCTR1 , 2+TFT_CMD_DELAY,	// 11: Power control, 2 args + delay:
+  0x3C,						//     VCOMH = 4V
+  0x38,						//     VCOML = -1.1V
+  10,						//     10 ms delay
+  ST7735_PWCTR6 , 2      ,	// 12: Power control, 2 args, no delay:
+  0x11, 0x15,
+  ST7735_GMCTRP1,16      ,	// 13: Magical unicorn dust, 16 args, no delay:
+  0x09, 0x16, 0x09, 0x20,	//     (seriously though, not sure what
+  0x21, 0x1B, 0x13, 0x19,	//      these config values represent)
+  0x17, 0x15, 0x1E, 0x2B,
+  0x04, 0x05, 0x02, 0x0E,
+  ST7735_GMCTRN1,16+TFT_CMD_DELAY,	// 14: Sparkles and rainbows, 16 args + delay:
+  0x0B, 0x14, 0x08, 0x1E,	//     (ditto)
+  0x22, 0x1D, 0x18, 0x1E,
+  0x1B, 0x1A, 0x24, 0x2B,
+  0x06, 0x06, 0x02, 0x0F,
+  10,						//     10 ms delay
+  TFT_CASET  , 4      , 	// 15: Column addr set, 4 args, no delay:
+  0x00, 0x02,				//     XSTART = 2
+  0x00, 0x81,				//     XEND = 129
+  TFT_PASET  , 4      , 	// 16: Row addr set, 4 args, no delay:
+  0x00, 0x02,				//     XSTART = 1
+  0x00, 0x81,				//     XEND = 160
+  ST7735_NORON  ,   TFT_CMD_DELAY,	// 17: Normal display on, no args, w/delay
+  10,						//     10 ms delay
+  TFT_DISPON ,   TFT_CMD_DELAY,  	// 18: Main screen turn on, no args, w/delay
+  255						//     255 = 500 ms delay
+};
+
+// Init for 7735R, part 1 (red or green tab)
+// --------------------------------------
+static const uint8_t  STP7735R_init[] = {
+#if PIN_NUM_RST
+  14,                       // 14 commands in list
+#else
+  15,						// 15 commands in list:
+  ST7735_SWRESET,   TFT_CMD_DELAY,	//  1: Software reset, 0 args, w/delay
+  150,						//     150 ms delay
+#endif
+  ST7735_SLPOUT ,   TFT_CMD_DELAY,	//  2: Out of sleep mode, 0 args, w/delay
+  255,						//     500 ms delay
+  ST7735_FRMCTR1, 3      ,	//  3: Frame rate ctrl - normal mode, 3 args:
+  0x01, 0x2C, 0x2D,			//     Rate = fosc/(1x2+40) * (LINE+2C+2D)
+  ST7735_FRMCTR2, 3      ,	//  4: Frame rate control - idle mode, 3 args:
+  0x01, 0x2C, 0x2D,			//     Rate = fosc/(1x2+40) * (LINE+2C+2D)
+  ST7735_FRMCTR3, 6      ,	//  5: Frame rate ctrl - partial mode, 6 args:
+  0x01, 0x2C, 0x2D,			//     Dot inversion mode
+  0x01, 0x2C, 0x2D,			//     Line inversion mode
+  ST7735_INVCTR , 1      ,	//  6: Display inversion ctrl, 1 arg, no delay:
+  0x07,						//     No inversion
+  ST7735_PWCTR1 , 3      ,	//  7: Power control, 3 args, no delay:
+  0xA2,
+  0x02,						//     -4.6V
+  0x84,						//     AUTO mode
+  ST7735_PWCTR2 , 1      ,	//  8: Power control, 1 arg, no delay:
+  0xC5,						//     VGH25 = 2.4C VGSEL = -10 VGH = 3 * AVDD
+  ST7735_PWCTR3 , 2      ,	//  9: Power control, 2 args, no delay:
+  0x0A,						//     Opamp current small
+  0x00,						//     Boost frequency
+  ST7735_PWCTR4 , 2      ,	// 10: Power control, 2 args, no delay:
+  0x8A,						//     BCLK/2, Opamp current small & Medium low
+  0x2A,
+  ST7735_PWCTR5 , 2      ,	// 11: Power control, 2 args, no delay:
+  0x8A, 0xEE,
+  ST7735_VMCTR1 , 1      ,	// 12: Power control, 1 arg, no delay:
+  0x0E,
+  TFT_INVOFF , 0      ,		// 13: Don't invert display, no args, no delay
+  TFT_MADCTL , 1      ,		// 14: Memory access control (directions), 1 arg:
+  0xC0,						//     row addr/col addr, bottom to top refresh, RGB order
+  TFT_CMD_PIXFMT , 1+TFT_CMD_DELAY,	//  15: Set color mode, 1 arg + delay:
+  0x06,								//      18-bit color 6-6-6 color format
+  10						//     10 ms delay
+};
+
+// Init for 7735R, part 2 (green tab only)
+// ---------------------------------------
+static const uint8_t Rcmd2green[] = {
+  2,						//  2 commands in list:
+  TFT_CASET  , 4      ,		//  1: Column addr set, 4 args, no delay:
+  0x00, 0x02,				//     XSTART = 0
+  0x00, 0x7F+0x02,			//     XEND = 129
+  TFT_PASET  , 4      ,	    //  2: Row addr set, 4 args, no delay:
+  0x00, 0x01,				//     XSTART = 0
+  0x00, 0x9F+0x01			//     XEND = 160
+};
+
+// Init for 7735R, part 2 (red tab only)
+// -------------------------------------
+static const uint8_t Rcmd2red[] = {
+  2,						//  2 commands in list:
+  TFT_CASET  , 4      ,	    //  1: Column addr set, 4 args, no delay:
+  0x00, 0x00,				//     XSTART = 0
+  0x00, 0x7F,				//     XEND = 127
+  TFT_PASET  , 4      ,	    //  2: Row addr set, 4 args, no delay:
+  0x00, 0x00,				//     XSTART = 0
+  0x00, 0x9F				//     XEND = 159
+};
+
+// Init for 7735R, part 3 (red or green tab)
+// -----------------------------------------
+static const uint8_t Rcmd3[] = {
+  4,						//  4 commands in list:
+  ST7735_GMCTRP1, 16      ,	//  1: Magical unicorn dust, 16 args, no delay:
+  0x02, 0x1c, 0x07, 0x12,
+  0x37, 0x32, 0x29, 0x2d,
+  0x29, 0x25, 0x2B, 0x39,
+  0x00, 0x01, 0x03, 0x10,
+  ST7735_GMCTRN1, 16      ,	//  2: Sparkles and rainbows, 16 args, no delay:
+  0x03, 0x1d, 0x07, 0x06,
+  0x2E, 0x2C, 0x29, 0x2D,
+  0x2E, 0x2E, 0x37, 0x3F,
+  0x00, 0x00, 0x02, 0x10,
+  ST7735_NORON  ,    TFT_CMD_DELAY,	//  3: Normal display on, no args, w/delay
+  10,						//     10 ms delay
+  TFT_DISPON ,    TFT_CMD_DELAY,	//  4: Main screen turn on, no args w/delay
+  100						//     100 ms delay
+};
+
+
+// ==== Public functions =========================================================
+
+// == Low level functions; usually not used directly ==
+esp_err_t wait_trans_finish(uint8_t free_line);
+void disp_spi_transfer_cmd(int8_t cmd);
+void disp_spi_transfer_cmd_data(int8_t cmd, uint8_t *data, uint32_t len);
+void drawPixel(int16_t x, int16_t y, color_t color, uint8_t sel);
+void send_data(int x1, int y1, int x2, int y2, uint32_t len, color_t *buf);
+void TFT_pushColorRep(int x1, int y1, int x2, int y2, color_t data, uint32_t len);
+int read_data(int x1, int y1, int x2, int y2, int len, uint8_t *buf, uint8_t set_sp);
+color_t readPixel(int16_t x, int16_t y);
+int touch_get_data(uint8_t type);
+
+
+// Deactivate display's CS line
+//========================
+esp_err_t disp_deselect();
+
+// Activate display's CS line and configure SPI interface if necessary
+//======================
+esp_err_t disp_select();
+
+
+// Find maximum spi clock for successful read from display RAM
+// ** Must be used AFTER the display is initialized **
+//======================
+uint32_t find_rd_speed();
+
+
+// Change the screen rotation.
+// Input: m new rotation value (0 to 3)
+//=================================
+void _tft_setRotation(uint8_t rot);
+
+// Initialize all pins used by display driver
+// ** MUST be executed before SPI interface initialization
+//=================
+void TFT_PinsInit();
+
+// Perform display initialization sequence
+// Sets orientation to landscape; clears the screen
+// * All pins must be configured
+// * SPI interface must already be setup
+// * 'tft_disp_type', 'COLOR_BITS', '_width', '_height' variables must be set
+//======================
+void TFT_display_init();
+
+//===================
+void stmpe610_Init();
+
+//============================================================
+int stmpe610_get_touch(uint16_t *x, uint16_t *y, uint16_t *z);
+
+//========================
+uint32_t stmpe610_getID();
+
+// ===============================================================================
+
+#endif

mercurial