Marlin_Firmware/Marlin/src/lcd/tft_io/st7735.h
Victor Oliveira c0920bbf6a
TFT Refactoring (#19192)
* split tft folder in two: tft for color ui; tft_io for shared tft code

* after the files got moved, now the code was moved to the right place

* classic ui using TFT IO init lcd codes

* feature to compile tft_io when enabled

* compiling fix

* lvgl spi tft working with tft io init codes

* there is no need for separeted fsmc and spi class in lvgl anymore, as tft io handle everything

* remove debug

* base for TFT rotation and mirroring API, and ILI9488 support

* ST7796S rotate and mirror support

* ST7789V rotate and mirror support

* ST7735 rotate and mirror support

* ILI9341 rotate and mirror support

* ILI9328 rotate and mirror support

* R61505 rotate and mirror support

* MKS TFT definitions

* more configs for mks tfts

* update config

* naming typo

* to configure the user interface

* ANYCUBIC_TFT35

* tft configs

* support for SSD1963

* tft display types

* updated conditionals lcd; first board fully working with the new code - all 3 ui!

* compatiblity

* changed name

* move classic ui file name

* rename TURN -> ROTATE

* GRAPHICAL_TFT_ROTATE_180 deprecated

* first fsmc board fully working - chitu v5

* mks robin nano v1.2 + tft 35 ok!

* right pin name

* anycubic tft tested in a TRIGORILLA_PRO

* chitu v6

* nano 32 tft orientation

* mks tft43

* mks tft43 rotation

* fixed LONGER LK tft setup

* GRAPHICAL_TFT_UPSCALE defined by the display type

* better offsets defaults

* Update Configuration.h

* Update tft_fsmc.cpp

* Update Conditionals_LCD.h

* Tweak comments

* update nano tests

* Revert "update nano tests"

This reverts commit a071ebbfad30e28855a4a5695ec8a726542a1a65.

* default tft

* outdated comments

* to not break non-vscode builds

* upscale tft 35

* support tft 180 rotation for color ui

* Each TFT Driver is responsible for its default color mode.

* use auto detect in mks displays, because some of them could be shipped with diferent drivers

* extra s

* unused code

* wrong -1

* missing mirror options

* Smaller regex pattern

* Comment updates

* Clean up old defines

* Apply pins formatting

* GRAPHICAL_TFT_ROTATE_180 => TFT_ROTATE_180

* MKS_ROBIN_TFT_V1_1R

* merge fix

* correct resolution

* auto is default, dont need be there, and it will allow the user to configure it even for named displays

* to not use rotation with MKS_ROBIN_TFT_V1_1R

* i like () in macros

* avoid sleepy commits

* default for st7789 is rgb

* nano follow up

* to allow ili9328 rotation

* default is rgb

* boards merge follow up

* to match bootloader orientation

* HAS_TOUCH_XPT2046 is not hal specific anymore

* lets not forget LPC

* 180 rotation for ili9328 and R61505

* Clean up whitespace

Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
Co-authored-by: Scott Lahteine <github@thinkyhead.com>
2020-10-12 16:38:07 -05:00

137 lines
6.9 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
#include "tft_io.h"
#include "../../inc/MarlinConfig.h"
#define ST7735_MADCTL_MY 0x80 // Row Address Order
#define ST7735_MADCTL_MX 0x40 // Column Address Order
#define ST7735_MADCTL_MV 0x20 // Row/Column Exchange
#define ST7735_MADCTL_ML 0x10 // Vertical Refresh Order
#define ST7735_MADCTL_BGR 0x08 // RGB-BGR ORDER
#define ST7735_MADCTL_RGB 0x00
#define ST7735_MADCTL_MH 0x04 // Horizontal Refresh Order
#define ST7735_ORIENTATION_UP 0x00 // 128x160 ; Cable on the upper side
#define ST7735_ORIENTATION_RIGHT ST7735_MADCTL_MV | ST7735_MADCTL_MY // 160x128 ; Cable on the right side
#define ST7735_ORIENTATION_LEFT ST7735_MADCTL_MV | ST7735_MADCTL_MX // 160x128 ; Cable on the left side
#define ST7735_ORIENTATION_DOWN ST7735_MADCTL_MX | ST7735_MADCTL_MY // 128x160 ; Cable on the lower side
#define ST7735_ORIENTATION IF_0((TFT_ORIENTATION) & TFT_EXCHANGE_XY, ST7735_MADCTL_MV) | \
IF_0((TFT_ORIENTATION) & TFT_INVERT_X, ST7735_MADCTL_MX) | \
IF_0((TFT_ORIENTATION) & TFT_INVERT_Y, ST7735_MADCTL_MY)
#if !defined(TFT_COLOR) || TFT_COLOR == TFT_COLOR_RGB
#define ST7735_COLOR ST7735_MADCTL_RGB
#elif TFT_COLOR == TFT_COLOR_BGR
#define ST7735_COLOR ST7735_MADCTL_BGR
#endif
#define ST7735_MADCTL_DATA (ST7735_ORIENTATION) | (ST7735_COLOR)
#define ST7735_NOP 0x00 // No Operation
#define ST7735_SWRESET 0x01 // Software reset
#define ST7735_RDDID 0x04 // Read Display ID
#define ST7735_RDDST 0x09 // Read Display Status
#define ST7735_RDDPM 0x0A // Read Display Power Mode
#define ST7735_RDDMADCTL 0x0B // Read Display MADCTL
#define ST7735_RDDCOLMOD 0x0C // Read Display Pixel Format
#define ST7735_RDDIM 0x0D // Read Display Image Mode
#define ST7735_RDDSM 0x0E // Read Display Signal Mode
#define ST7735_SLPIN 0x10 // Sleep In
#define ST7735_SLPOUT 0x11 // Sleep Out
#define ST7735_PTLON 0x12 // Partial Display Mode On
#define ST7735_NORON 0x13 // Normal Display Mode On
#define ST7735_INVOFF 0x20 // Display Inversion Off
#define ST7735_INVON 0x21 // Display Inversion On
#define ST7735_GAMSET 0x26 // Gamma Set
#define ST7735_DISPOFF 0x28 // Display Off // The delay time between DISPON and DISPOFF needs 120ms at least.
#define ST7735_DISPON 0x29 // Display On
#define ST7735_CASET 0x2A // Column Address Set
#define ST7735_RASET 0x2B // Row Address Set
#define ST7735_RAMWR 0x2C // Memory Write
#define ST7735_RAMRD 0x2E // Memory Read
#define ST7735_PTLAR 0x30 // Partial Area
#define ST7735_TEOFF 0x34 // Tearing Effect Line OFF
#define ST7735_TEON 0x35 // Tearing Effect Line ON
#define ST7735_MADCTL 0x36 // Memory Data Access Control
#define ST7735_IDMOFF 0x38 // Idle Mode Off
#define ST7735_IDMON 0x39 // Idle Mode On
#define ST7735_COLMOD 0x3A // Interface Pixel Format
#define ST7735_RDID1 0xDA // Read ID1 Value
#define ST7735_RDID2 0xDB // Read ID2 Value
#define ST7735_RDID3 0xDC // Read ID3 Value
#define ST7735_FRMCTR1 0xB1 // Frame Rate Control (In normal mode/ Full colors)
#define ST7735_FRMCTR2 0xB2 // Frame Rate Control (In Idle mode/ 8-colors)
#define ST7735_FRMCTR3 0xB3 // Frame Rate Control (In Partial mode/ full colors)
#define ST7735_INVCTR 0xB4 // Display Inversion Control
#define ST7735_DISSET5 0xB6 // Display Function set 5
#define ST7735_PWCTR1 0xC0 // Power Control 1
#define ST7735_PWCTR2 0xC1 // Power Control 2
#define ST7735_PWCTR3 0xC2 // Power Control 3 (in Normal mode/ Full colors)
#define ST7735_PWCTR4 0xC3 // Power Control 4 (in Idle mode/ 8-colors)
#define ST7735_PWCTR5 0xC4 // Power Control 5 (in Partial mode/ full-colors)
#define ST7735_VMCTR1 0xC5 // VCOM Control 1
#define ST7735_VMOFCTR 0xC7 // VCOM Offset Control
#define ST7735_WRID2 0xD1 // Write ID2 Value
#define ST7735_WRID3 0xD2 // Write ID3 Value
#define ST7735_PWCTR6 0xFC // Power Control 5 (in Partial mode + Idle mode)
#define ST7735_NVFCTR1 0xD9 // EEPROM Control Status
#define ST7735_NVFCTR2 0xDE // EEPROM Read Command
#define ST7735_NVFCTR3 0xDF // EEPROM Write Command
#define ST7735_GMCTRP1 0xE0 // Gamma (+polarity) Correction Characteristics Setting
#define ST7735_GMCTRN1 0xE1 // GMCTRN1 (E1h): Gamma -polarity Correction Characteristics Setting
#define ST7735_EXTCTRL 0xF0 // Extension Command Control
#define ST7735_VCOM4L 0xFF // Vcom 4 Level Control
static const uint16_t st7735_init[] = {
DATASIZE_8BIT,
ESC_REG(ST7735_SWRESET), ESC_DELAY(100),
ESC_REG(ST7735_SLPOUT), ESC_DELAY(20),
/*
ESC_REG(ST7735_FRMCTR1), 0x0001, 0x002C, 0x002D,
ESC_REG(ST7735_FRMCTR2), 0x0001, 0x002C, 0x002D,
ESC_REG(ST7735_FRMCTR3), 0x0001, 0x002C, 0x002D, 0x0001, 0x002C, 0x002D,
ESC_REG(ST7735_INVCTR), 0x0007,
ESC_REG(ST7735_PWCTR1), 0x00A2, 0x0002, 0x0084,
ESC_REG(ST7735_PWCTR2), 0x00C5,
ESC_REG(ST7735_PWCTR3), 0x000A, 0x0000,
ESC_REG(ST7735_PWCTR4), 0x008A, 0x002A,
ESC_REG(ST7735_PWCTR5), 0x008A, 0x00EE,
ESC_REG(ST7735_VMCTR1), 0x000E,
ESC_REG(ST7735_INVOFF),
*/
ESC_REG(ST7735_MADCTL), ST7735_MADCTL_DATA,
ESC_REG(ST7735_COLMOD), 0x0005,
/* Gamma Correction. Colors with 'after-reset' settings are bleak */
ESC_REG(ST7735_GMCTRP1), 0x0002, 0x001C, 0x0007, 0x0012, 0x0037, 0x0032, 0x0029, 0x002D, 0x0029, 0x0025, 0x002B, 0x0039, 0x0000, 0x0001, 0x0003, 0x0010,
ESC_REG(ST7735_GMCTRN1), 0x0003, 0x001D, 0x0007, 0x0006, 0x002E, 0x002C, 0x0029, 0x002D, 0x002E, 0x002E, 0x0037, 0x003F, 0x0000, 0x0000, 0x0002, 0x0010,
ESC_REG(ST7735_NORON),
ESC_REG(ST7735_DISPON),
ESC_END
};