diff --git a/src/configuration.h b/src/configuration.h
index d30280d8b..b4ab57053 100644
--- a/src/configuration.h
+++ b/src/configuration.h
@@ -36,6 +36,29 @@ along with this program. If not, see .
/* Offer chance for variant-specific defines */
#include "variant.h"
+// -----------------------------------------------------------------------------
+// Display feature overrides
+// -----------------------------------------------------------------------------
+
+// Allow build environments to opt-in explicitly to the E-Ink UI stack while
+// keeping headless targets slim by default. Existing variants that already
+// define USE_EINK continue to work without additional flags.
+#ifndef MESHTASTIC_USE_EINK_UI
+#ifdef USE_EINK
+#define MESHTASTIC_USE_EINK_UI 1
+#else
+#define MESHTASTIC_USE_EINK_UI 0
+#endif
+#endif
+
+#if MESHTASTIC_USE_EINK_UI
+#ifndef USE_EINK
+#define USE_EINK
+#endif
+#else
+#undef USE_EINK
+#endif
+
// -----------------------------------------------------------------------------
// Version
// -----------------------------------------------------------------------------
@@ -371,6 +394,9 @@ along with this program. If not, see .
#ifndef HAS_BLUETOOTH
#define HAS_BLUETOOTH 0
#endif
+#ifndef USE_TFTDISPLAY
+#define USE_TFTDISPLAY 0
+#endif
#ifndef HW_VENDOR
#error HW_VENDOR must be defined
diff --git a/src/graphics/Screen.cpp b/src/graphics/Screen.cpp
index 351419289..c6bbcc4b5 100644
--- a/src/graphics/Screen.cpp
+++ b/src/graphics/Screen.cpp
@@ -69,7 +69,11 @@ using graphics::Emote;
using graphics::emotes;
using graphics::numEmotes;
+#if USE_TFTDISPLAY
extern uint16_t TFT_MESH;
+#else
+uint16_t TFT_MESH = COLOR565(0x67, 0xEA, 0x94);
+#endif
#if HAS_WIFI && !defined(ARCH_PORTDUINO)
#include "mesh/wifi/WiFiAPClient.h"
diff --git a/src/graphics/TFTDisplay.cpp b/src/graphics/TFTDisplay.cpp
index 4445a7c5e..12fac4f34 100644
--- a/src/graphics/TFTDisplay.cpp
+++ b/src/graphics/TFTDisplay.cpp
@@ -1,5 +1,6 @@
#include "configuration.h"
#include "main.h"
+#if USE_TFTDISPLAY
#if ARCH_PORTDUINO
#include "platform/portduino/PortduinoGlue.h"
@@ -1138,9 +1139,6 @@ static LGFX *tft = nullptr;
#endif
-#if defined(ST7701_CS) || defined(ST7735_CS) || defined(ST7789_CS) || defined(ST7796_CS) || defined(ILI9341_DRIVER) || \
- defined(ILI9342_DRIVER) || defined(RAK14014) || defined(HX8357_CS) || defined(ILI9488_CS) || defined(ST72xx_DE) || \
- (ARCH_PORTDUINO && HAS_SCREEN != 0) || defined(HACKADAY_COMMUNICATOR)
#include "SPILock.h"
#include "TFTDisplay.h"
#include
@@ -1518,4 +1516,4 @@ bool TFTDisplay::connect()
return true;
}
-#endif
+#endif // USE_TFTDISPLAY
diff --git a/variants/esp32/chatter2/variant.h b/variants/esp32/chatter2/variant.h
index b3e06de48..0c1ef6967 100644
--- a/variants/esp32/chatter2/variant.h
+++ b/variants/esp32/chatter2/variant.h
@@ -67,6 +67,7 @@
#define SCREEN_TRANSITION_FRAMERATE 5 // fps
#define DISPLAY_FORCE_SMALL_FONTS
#define TFT_BACKLIGHT_ON LOW
+#define USE_TFTDISPLAY 1
// Battery
diff --git a/variants/esp32/m5stack_core/platformio.ini b/variants/esp32/m5stack_core/platformio.ini
index 469d93f94..a0443a918 100644
--- a/variants/esp32/m5stack_core/platformio.ini
+++ b/variants/esp32/m5stack_core/platformio.ini
@@ -7,7 +7,6 @@ build_src_filter =
build_flags =
${esp32_base.build_flags}
-I variants/esp32/m5stack_core
- -DILI9341_DRIVER
-DM5STACK
-DUSER_SETUP_LOADED
-DTFT_SDA_READ
diff --git a/variants/esp32/m5stack_core/variant.h b/variants/esp32/m5stack_core/variant.h
index 72aeb160e..cf741efe3 100644
--- a/variants/esp32/m5stack_core/variant.h
+++ b/variants/esp32/m5stack_core/variant.h
@@ -34,11 +34,13 @@
#define GPS_RX_PIN 16
#define GPS_TX_PIN 17
+#define ILI9341_DRIVER
#define TFT_HEIGHT 240
#define TFT_WIDTH 320
#define TFT_OFFSET_X 0
#define TFT_OFFSET_Y 0
#define TFT_BUSY -1
+#define USE_TFTDISPLAY 1
// LCD screens are slow, so slowdown the wipe so it looks better
#define SCREEN_TRANSITION_FRAMERATE 1 // fps
diff --git a/variants/esp32/wiphone/variant.h b/variants/esp32/wiphone/variant.h
index 70973db16..619ac622a 100644
--- a/variants/esp32/wiphone/variant.h
+++ b/variants/esp32/wiphone/variant.h
@@ -34,6 +34,7 @@
#define ST7789_SCK 18
#define ST7789_CS 5
#define ST7789_RS 26
+#define USE_TFTDISPLAY 1
// I don't have a 'wiphone' but this I think should not be defined this way (don't set TFT_BL if we don't have a hw way to control
// it)
// #define ST7789_BL -1 // EXTENDER_PIN(9)
diff --git a/variants/esp32s3/hackaday-communicator/variant.h b/variants/esp32s3/hackaday-communicator/variant.h
index ccd9d3edb..a127f548f 100644
--- a/variants/esp32s3/hackaday-communicator/variant.h
+++ b/variants/esp32s3/hackaday-communicator/variant.h
@@ -10,6 +10,7 @@
#define HAS_SCREEN 1
#define TFT_BLACK 0
#define BRIGHTNESS_DEFAULT 130 // Medium Low Brightness
+#define USE_TFTDISPLAY 1
#define USE_POWERSAVE
#define SLEEP_TIME 120
diff --git a/variants/esp32s3/heltec_v4/variant.h b/variants/esp32s3/heltec_v4/variant.h
index 72bbf14fc..6524bbc72 100644
--- a/variants/esp32s3/heltec_v4/variant.h
+++ b/variants/esp32s3/heltec_v4/variant.h
@@ -34,6 +34,9 @@
#define LORA_PA_EN 2
#define LORA_PA_TX_EN 46 // enable tx
+#if HAS_TFT
+#define USE_TFTDISPLAY 1
+#endif
/*
* GPS pins
*/
diff --git a/variants/esp32s3/heltec_wireless_tracker/variant.h b/variants/esp32s3/heltec_wireless_tracker/variant.h
index 79fa0e801..3b19f5afd 100644
--- a/variants/esp32s3/heltec_wireless_tracker/variant.h
+++ b/variants/esp32s3/heltec_wireless_tracker/variant.h
@@ -27,6 +27,7 @@
#define TFT_OFFSET_Y -1
#define SCREEN_TRANSITION_FRAMERATE 3 // fps
#define DISPLAY_FORCE_SMALL_FONTS
+#define USE_TFTDISPLAY 1
// pin 3 is Vext on v1.1 - HIGH enables LDO for Vext rail which goes to:
// GPS UC6580: GPS V_DET(8), VDD_IO(7), DCDC_IN(21), pulls up RESETN(17), D_SEL(33) and BOOT_MODE(34) through 10kR
diff --git a/variants/esp32s3/heltec_wireless_tracker_V1_0/variant.h b/variants/esp32s3/heltec_wireless_tracker_V1_0/variant.h
index cd76bb604..df5ab4716 100644
--- a/variants/esp32s3/heltec_wireless_tracker_V1_0/variant.h
+++ b/variants/esp32s3/heltec_wireless_tracker_V1_0/variant.h
@@ -28,6 +28,7 @@
#define SCREEN_TRANSITION_FRAMERATE 3 // fps
#define DISPLAY_FORCE_SMALL_FONTS
#define FORCE_LOW_RES 1
+#define USE_TFTDISPLAY 1
#define VEXT_ENABLE Vext // active low, powers the oled display and the lora antenna boost
#define VEXT_ON_VALUE LOW
diff --git a/variants/esp32s3/heltec_wireless_tracker_v2/variant.h b/variants/esp32s3/heltec_wireless_tracker_v2/variant.h
index 9ac064ea2..0ce6b3e00 100644
--- a/variants/esp32s3/heltec_wireless_tracker_v2/variant.h
+++ b/variants/esp32s3/heltec_wireless_tracker_v2/variant.h
@@ -27,6 +27,7 @@
#define TFT_INVERT false
#define SCREEN_TRANSITION_FRAMERATE 3 // fps
#define DISPLAY_FORCE_SMALL_FONTS
+#define USE_TFTDISPLAY 1
#define VEXT_ENABLE 3 // active HIGH - powers the GPS, GPS LNA and OLED
#define VEXT_ON_VALUE HIGH
diff --git a/variants/esp32s3/picomputer-s3/variant.h b/variants/esp32s3/picomputer-s3/variant.h
index 8252e841c..275da1b61 100644
--- a/variants/esp32s3/picomputer-s3/variant.h
+++ b/variants/esp32s3/picomputer-s3/variant.h
@@ -32,6 +32,7 @@
#define ST7789_CS 6
#define ST7789_RS 1
#define ST7789_BL 5
+#define USE_TFTDISPLAY 1
#define ST7789_RESET -1
#define ST7789_MISO -1
diff --git a/variants/esp32s3/seeed-sensecap-indicator/variant.h b/variants/esp32s3/seeed-sensecap-indicator/variant.h
index 8915395f3..f946528ae 100644
--- a/variants/esp32s3/seeed-sensecap-indicator/variant.h
+++ b/variants/esp32s3/seeed-sensecap-indicator/variant.h
@@ -37,6 +37,7 @@
#define TFT_BL 45
#define SCREEN_ROTATE
#define SCREEN_TRANSITION_FRAMERATE 5 // fps
+#define USE_TFTDISPLAY 1
#define HAS_TOUCHSCREEN 1
#define SCREEN_TOUCH_INT (6 | IO_EXPANDER)
diff --git a/variants/esp32s3/t-deck/variant.h b/variants/esp32s3/t-deck/variant.h
index 9b0de631a..ece0cdeaf 100644
--- a/variants/esp32s3/t-deck/variant.h
+++ b/variants/esp32s3/t-deck/variant.h
@@ -22,6 +22,7 @@
#define SCREEN_ROTATE
#define SCREEN_TRANSITION_FRAMERATE 5
#define BRIGHTNESS_DEFAULT 130 // Medium Low Brightness
+#define USE_TFTDISPLAY 1
#define HAS_TOUCHSCREEN 1
#define SCREEN_TOUCH_INT 16
diff --git a/variants/esp32s3/t-watch-s3/variant.h b/variants/esp32s3/t-watch-s3/variant.h
index 578c23c0a..86b0a03c8 100644
--- a/variants/esp32s3/t-watch-s3/variant.h
+++ b/variants/esp32s3/t-watch-s3/variant.h
@@ -18,6 +18,7 @@
#define TFT_OFFSET_ROTATION 2
#define SCREEN_ROTATE
#define SCREEN_TRANSITION_FRAMERATE 5 // fps
+#define USE_TFTDISPLAY 1
#define HAS_TOUCHSCREEN 1
#define SCREEN_TOUCH_INT 16
diff --git a/variants/esp32s3/tlora-pager/variant.h b/variants/esp32s3/tlora-pager/variant.h
index 2875f6804..fe563cded 100644
--- a/variants/esp32s3/tlora-pager/variant.h
+++ b/variants/esp32s3/tlora-pager/variant.h
@@ -20,6 +20,7 @@
#define SCREEN_ROTATE
#define SCREEN_TRANSITION_FRAMERATE 5
#define BRIGHTNESS_DEFAULT 130 // Medium Low Brightness
+#define USE_TFTDISPLAY 1
#define I2C_SDA SDA
#define I2C_SCL SCL
diff --git a/variants/esp32s3/tracksenger/internal/variant.h b/variants/esp32s3/tracksenger/internal/variant.h
index 6f75ad0e2..2287dfe0b 100644
--- a/variants/esp32s3/tracksenger/internal/variant.h
+++ b/variants/esp32s3/tracksenger/internal/variant.h
@@ -28,6 +28,7 @@
#define TFT_OFFSET_Y -1
#define SCREEN_TRANSITION_FRAMERATE 3 // fps
#define DISPLAY_FORCE_SMALL_FONTS
+#define USE_TFTDISPLAY 1
#define VEXT_ENABLE 3 // active HIGH, powers the lora antenna boost
#define VEXT_ON_VALUE HIGH
diff --git a/variants/esp32s3/tracksenger/lcd/variant.h b/variants/esp32s3/tracksenger/lcd/variant.h
index 843bf3924..f42a5b19f 100644
--- a/variants/esp32s3/tracksenger/lcd/variant.h
+++ b/variants/esp32s3/tracksenger/lcd/variant.h
@@ -16,6 +16,7 @@
#define ST7789_CS 38
#define ST7789_RS 40
#define ST7789_BL 21
+#define USE_TFTDISPLAY 1
// P#define TFT_BL 21 /* V1.1 PCB marking */
#define ST7789_RESET -1
diff --git a/variants/esp32s3/unphone/variant.h b/variants/esp32s3/unphone/variant.h
index 366b49233..6f0710d62 100644
--- a/variants/esp32s3/unphone/variant.h
+++ b/variants/esp32s3/unphone/variant.h
@@ -36,6 +36,7 @@
#define TFT_INVERT false
#define SCREEN_ROTATE true
#define SCREEN_TRANSITION_FRAMERATE 5
+#define USE_TFTDISPLAY 1
#define HAS_TOUCHSCREEN 1
#define USE_XPT2046 1
diff --git a/variants/native/portduino-buildroot/variant.h b/variants/native/portduino-buildroot/variant.h
index 3e91c6820..affd83051 100644
--- a/variants/native/portduino-buildroot/variant.h
+++ b/variants/native/portduino-buildroot/variant.h
@@ -1,4 +1,5 @@
#define HAS_SCREEN 1
+#define USE_TFTDISPLAY 1
#define CANNED_MESSAGE_MODULE_ENABLE 1
#define HAS_GPS 1
#define MAX_RX_TOPHONE portduino_config.maxtophone
diff --git a/variants/native/portduino/variant.h b/variants/native/portduino/variant.h
index af05fcf8d..972443450 100644
--- a/variants/native/portduino/variant.h
+++ b/variants/native/portduino/variant.h
@@ -1,6 +1,7 @@
#ifndef HAS_SCREEN
#define HAS_SCREEN 1
#endif
+#define USE_TFTDISPLAY 1
#define CANNED_MESSAGE_MODULE_ENABLE 1
#define HAS_GPS 1
#define MAX_RX_TOPHONE portduino_config.maxtophone
diff --git a/variants/nrf52840/rak4631/platformio.ini b/variants/nrf52840/rak4631/platformio.ini
index c95d477f9..868c17143 100644
--- a/variants/nrf52840/rak4631/platformio.ini
+++ b/variants/nrf52840/rak4631/platformio.ini
@@ -8,9 +8,7 @@ build_type = release
build_flags = ${nrf52840_base.build_flags}
-I variants/nrf52840/rak4631
-D RAK_4631
- -DEINK_DISPLAY_MODEL=GxEPD2_213_BN
- -DEINK_WIDTH=250
- -DEINK_HEIGHT=122
+ -DMESHTASTIC_USE_EINK_UI=0
-DRADIOLIB_EXCLUDE_SX128X=1
-DRADIOLIB_EXCLUDE_SX127X=1
-DRADIOLIB_EXCLUDE_LR11X0=1
@@ -30,7 +28,10 @@ build_src_filter = ${nrf52_base.build_src_filter} \
+<../variants/nrf52840/rak4631> \
+ \
+ \
- +
+ + \
+ - \
+ - \
+ -
lib_deps =
${nrf52840_base.lib_deps}
${nrf52_networking_base.lib_deps}
diff --git a/variants/nrf52840/rak_wismeshtap/variant.h b/variants/nrf52840/rak_wismeshtap/variant.h
index f961ddf6e..a7b9290a5 100644
--- a/variants/nrf52840/rak_wismeshtap/variant.h
+++ b/variants/nrf52840/rak_wismeshtap/variant.h
@@ -300,6 +300,7 @@ SO GPIO 39/TXEN MAY NOT BE DEFINED FOR SUCCESSFUL OPERATION OF THE SX1262 - TG
#define SPI_FREQUENCY 50000000
#define TFT_SPI_PORT SPI1
#define ST7789_CS WB_SPI_CS // Adds compatibility with the rest of the checking for a ST7789 TFT.
+#define USE_TFTDISPLAY 1
#define SCREEN_ROTATE
#define SCREEN_TRANSITION_FRAMERATE 5