[LilyGo_TDeck_Pro] extends = esp32_base extra_scripts = post:merge_firmware.py board = t-deck_pro board_build.flash_mode = qio board_build.f_flash = 80000000L board_build.arduino.memory_type = qio_qspi board_upload.flash_size = 16MB build_flags = ${esp32_base.build_flags} ${sensor_base.build_flags} -I variants/LilyGo_TDeck_Pro -D LilyGo_TDeck_Pro -D HAS_GPS=1 -D BOARD_HAS_PSRAM=1 -D CORE_DEBUG_LEVEL=1 -D FORMAT_SPIFFS_IF_FAILED=1 -D FORMAT_LITTLEFS_IF_FAILED=1 -D ARDUINO_USB_CDC_ON_BOOT=1 -D RADIO_CLASS=CustomSX1262 -D WRAPPER_CLASS=CustomSX1262Wrapper -D LORA_TX_POWER=22 -D SX126X_DIO2_AS_RF_SWITCH -D SX126X_CURRENT_LIMIT=140 -D SX126X_RX_BOOSTED_GAIN=1 -D SX126X_DIO3_TCXO_VOLTAGE=2.4f -D P_LORA_DIO_1=5 -D P_LORA_NSS=3 -D P_LORA_RESET=4 -D P_LORA_BUSY=6 -D P_LORA_SCLK=36 -D P_LORA_MISO=47 -D P_LORA_MOSI=33 -D P_LORA_EN=46 -D ENV_INCLUDE_GPS=1 -D ENV_SKIP_GPS_DETECT=1 -D PIN_GPS_RX=44 -D PIN_GPS_TX=43 -D GPS_BAUD_RATE=38400 -D ENV_INCLUDE_AHTX0=0 -D ENV_INCLUDE_BME280=0 -D ENV_INCLUDE_BMP280=0 -D ENV_INCLUDE_SHTC3=0 -D ENV_INCLUDE_SHT4X=0 -D ENV_INCLUDE_LPS22HB=0 -D ENV_INCLUDE_INA3221=0 -D ENV_INCLUDE_INA219=0 -D ENV_INCLUDE_INA226=0 -D ENV_INCLUDE_INA260=0 -D ENV_INCLUDE_MLX90614=0 -D ENV_INCLUDE_VL53L0X=0 -D ENV_INCLUDE_BME680=0 -D ENV_INCLUDE_BMP085=0 -D USE_EINK -D DISPLAY_CLASS=GxEPDDisplay -D EINK_DISPLAY_MODEL=GxEPD2_310_GDEQ031T10 -D EINK_WIDTH=240 -D EINK_HEIGHT=320 -D EINK_CS=34 -D EINK_DC=35 -D EINK_RST=16 -D EINK_BUSY=37 -D EINK_SCLK=36 -D EINK_MOSI=33 -D EINK_BL=45 -D EINK_NOT_HIBERNATE=1 -D HAS_BQ27220=1 -D AUTO_SHUTDOWN_MILLIVOLTS=2800 -D EINK_LIMIT_FASTREFRESH=10 -D EINK_LIMIT_GHOSTING_PX=2000 -D DISPLAY_ROTATION=0 -D EINK_ROTATION=0 -D EINK_SCALE_X=1.875f -D EINK_SCALE_Y=2.5f -D EINK_X_OFFSET=0 -D EINK_Y_OFFSET=5 -D PIN_DISPLAY_CS=34 -D PIN_DISPLAY_DC=35 -D PIN_DISPLAY_RST=16 -D PIN_DISPLAY_BUSY=37 -D PIN_DISPLAY_SCLK=36 -D PIN_DISPLAY_MISO=-1 -D PIN_DISPLAY_MOSI=33 -D PIN_DISPLAY_BL=45 -D PIN_USER_BTN=0 -D HAS_TOUCHSCREEN=1 -D CST328_PIN_INT=12 -D CST328_PIN_RST=38 -D ARDUINO_LOOP_STACK_SIZE=32768 build_src_filter = ${esp32_base.build_src_filter} +<../variants/LilyGo_TDeck_Pro> + lib_deps = ${esp32_base.lib_deps} ${sensor_base.lib_deps} zinggjm/GxEPD2@^1.5.9 adafruit/Adafruit GFX Library@^1.11.0 bitbank2/PNGdec@^1.0.1 WebServer Update ; --------------------------------------------------------------------------- ; Meck unified builds — one codebase, six variants via build flags ; --------------------------------------------------------------------------- ; Audio + BLE companion (audio-player hardware with BLE phone bridging) ; MAX_CONTACTS=500 is near BLE protocol ceiling (MAX_CONTACTS/2 sent as uint8_t, max 510) [env:meck_audio_ble] extends = LilyGo_TDeck_Pro build_flags = ${LilyGo_TDeck_Pro.build_flags} -I examples/companion_radio/ui-new -D MAX_CONTACTS=500 -D MAX_GROUP_CHANNELS=20 -D BLE_PIN_CODE=123456 -D OFFLINE_QUEUE_SIZE=256 -D MECK_AUDIO_VARIANT -D MECK_WEB_READER=1 -D MECK_OTA_UPDATE=1 build_src_filter = ${LilyGo_TDeck_Pro.build_src_filter} + + +<../examples/companion_radio/*.cpp> +<../examples/companion_radio/ui-new/*.cpp> + lib_deps = ${LilyGo_TDeck_Pro.lib_deps} densaugeo/base64 @ ~1.4.0 https://github.com/schreibfaul1/ESP32-audioI2S.git#2.0.6 bitbank2/JPEGDEC ; Audio + WiFi companion (audio-player hardware with WiFi app bridging) ; No BLE — WiFi companion uses SerialWifiInterface (TCP socket on port 5000). ; Connect via MeshCore web app, meshcore.js, or Python CLI over local network. ; No BLE protocol ceiling on contacts; bumped to 1500 (PSRAM-backed). ; WiFi always on from boot — web reader works without teardown, extra free heap. ; WiFi credentials loaded from SD card at runtime (/web/wifi.cfg). ; Configure via Settings > WiFi Setup, or through the web reader. [env:meck_audio_wifi] extends = LilyGo_TDeck_Pro build_flags = ${LilyGo_TDeck_Pro.build_flags} -I examples/companion_radio/ui-new -D MAX_CONTACTS=1500 -D MAX_GROUP_CHANNELS=20 -D MECK_WIFI_COMPANION=1 -D TCP_PORT=5000 -D WIFI_DEBUG_LOGGING=1 -D OFFLINE_QUEUE_SIZE=256 -D MECK_AUDIO_VARIANT -D MECK_WEB_READER=1 -D MECK_OTA_UPDATE=1 -D FIRMWARE_VERSION='"Meck v1.4.WiFi"' build_src_filter = ${LilyGo_TDeck_Pro.build_src_filter} + + +<../examples/companion_radio/*.cpp> +<../examples/companion_radio/ui-new/*.cpp> + lib_deps = ${LilyGo_TDeck_Pro.lib_deps} densaugeo/base64 @ ~1.4.0 https://github.com/schreibfaul1/ESP32-audioI2S.git#2.0.6 bitbank2/JPEGDEC ; Audio standalone (audio-player hardware, no BLE/WiFi — maximum battery life) ; No MECK_WEB_READER: WiFi power draw conflicts with zero-radio-power design. ; OTA enabled: WiFi AP activates only during user-initiated firmware updates. ; Contacts and sort arrays allocated in PSRAM — 1500 contacts uses ~290KB of 8MB. [env:meck_audio_standalone] extends = LilyGo_TDeck_Pro build_flags = ${LilyGo_TDeck_Pro.build_flags} -I examples/companion_radio/ui-new -D MAX_CONTACTS=1500 -D MAX_GROUP_CHANNELS=20 -D OFFLINE_QUEUE_SIZE=1 -D MECK_AUDIO_VARIANT -D MECK_OTA_UPDATE=1 build_src_filter = ${LilyGo_TDeck_Pro.build_src_filter} + + +<../examples/companion_radio/*.cpp> +<../examples/companion_radio/ui-new/*.cpp> + lib_deps = ${LilyGo_TDeck_Pro.lib_deps} densaugeo/base64 @ ~1.4.0 https://github.com/schreibfaul1/ESP32-audioI2S.git#2.0.6 bitbank2/JPEGDEC ; 4G + BLE companion (4G modem hardware, no audio — GPIO conflict with PCM5102A) ; MAX_CONTACTS=500 is near BLE protocol ceiling (MAX_CONTACTS/2 sent as uint8_t, max 510) [env:meck_4g_ble] extends = LilyGo_TDeck_Pro build_flags = ${LilyGo_TDeck_Pro.build_flags} -I examples/companion_radio/ui-new -D MAX_CONTACTS=500 -D MAX_GROUP_CHANNELS=20 -D BLE_PIN_CODE=123456 -D OFFLINE_QUEUE_SIZE=256 -D HAS_4G_MODEM=1 -D MECK_WEB_READER=1 -D MECK_OTA_UPDATE=1 -D FIRMWARE_VERSION='"Meck v1.4.4G"' build_src_filter = ${LilyGo_TDeck_Pro.build_src_filter} + + +<../examples/companion_radio/*.cpp> +<../examples/companion_radio/ui-new/*.cpp> + lib_deps = ${LilyGo_TDeck_Pro.lib_deps} densaugeo/base64 @ ~1.4.0 ; 4G + WiFi companion (4G modem hardware with WiFi app bridging, no audio) ; No BLE — WiFi companion uses SerialWifiInterface (TCP socket on port 5000). ; Connect via MeshCore web app, meshcore.js, or Python CLI over local network. ; WiFi credentials loaded from SD card at runtime (/web/wifi.cfg). ; Configure via Settings > WiFi Setup, or through the web reader. ; Contacts and sort arrays allocated in PSRAM — 1500 contacts uses ~290KB of 8MB. [env:meck_4g_wifi] extends = LilyGo_TDeck_Pro build_flags = ${LilyGo_TDeck_Pro.build_flags} -I examples/companion_radio/ui-new -D MAX_CONTACTS=1500 -D MAX_GROUP_CHANNELS=20 -D MECK_WIFI_COMPANION=1 -D TCP_PORT=5000 -D WIFI_DEBUG_LOGGING=1 -D OFFLINE_QUEUE_SIZE=256 -D HAS_4G_MODEM=1 -D MECK_WEB_READER=1 -D MECK_OTA_UPDATE=1 -D FIRMWARE_VERSION='"Meck v1.4.4G.WiFi"' build_src_filter = ${LilyGo_TDeck_Pro.build_src_filter} + + +<../examples/companion_radio/*.cpp> +<../examples/companion_radio/ui-new/*.cpp> + lib_deps = ${LilyGo_TDeck_Pro.lib_deps} densaugeo/base64 @ ~1.4.0 ; 4G standalone (4G modem hardware, no BLE — maximum battery + cellular features) ; No BLE_PIN_CODE: BLE never initializes, saving ~30KB heap + radio power. ; MECK_WEB_READER enabled: works better without BLE (no teardown dance needed, ; more free heap from boot). WiFi-first with cellular PPP fallback (future). ; Contacts and sort arrays allocated in PSRAM — 1500 contacts uses ~290KB of 8MB. [env:meck_4g_standalone] extends = LilyGo_TDeck_Pro build_flags = ${LilyGo_TDeck_Pro.build_flags} -I examples/companion_radio/ui-new -D MAX_CONTACTS=1500 -D MAX_GROUP_CHANNELS=20 -D OFFLINE_QUEUE_SIZE=1 -D HAS_4G_MODEM=1 -D MECK_WEB_READER=1 -D MECK_OTA_UPDATE=1 -D FIRMWARE_VERSION='"Meck v1.4.4G.SA"' build_src_filter = ${LilyGo_TDeck_Pro.build_src_filter} + + +<../examples/companion_radio/*.cpp> +<../examples/companion_radio/ui-new/*.cpp> + lib_deps = ${LilyGo_TDeck_Pro.lib_deps} densaugeo/base64 @ ~1.4.0