From cd9bab823fee0675451a76c787fd3a72e12bd67d Mon Sep 17 00:00:00 2001 From: Trail Mate Dev Date: Sat, 30 May 2026 17:13:51 +0800 Subject: [PATCH] Add T-LoRa Pager LR1121 support --- .github/workflows/ci.yml | 3 +- README.md | 5 +- README_CN.md | 5 +- boards/tlora_pager/BOARD.md | 1 + boards/tlora_pager/board_facts.h | 3 +- boards/tlora_pager/src/tlora_pager_board.cpp | 46 +++++++++++++++++++ docs/boards/t-lora-pager.board.yaml | 11 +++-- docs/devices/lilygo-t-lora-pager.md | 5 +- .../esp-t-lora-pager-lvgl.capabilities.yaml | 5 +- .../src/ui/runtime/memory_profile.cpp | 5 +- .../esp/arduino_common/src/battery_guard.cpp | 4 +- .../arduino_common/src/ble/meshcore_ble.cpp | 3 +- .../chat/infra/meshcore/meshcore_adapter.cpp | 6 ++- .../src/chat/infra/meshtastic/mt_adapter.cpp | 12 +++-- .../mesh/esp_meshtastic_adapter_bridge.cpp | 3 +- .../platform_ui_firmware_update_runtime.cpp | 2 + .../arduino_common/src/sstv/sstv_service.cpp | 4 +- .../src/walkie/walkie_service.cpp | 4 +- .../esp/arduino_common/src/walkie_runtime.cpp | 3 +- scripts/webflash_targets.py | 13 +++++- .../lilygo_tlora_pager/envs/tlora_pager.ini | 26 +++++++++++ 21 files changed, 138 insertions(+), 31 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 86d31923..83e8b600 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -47,6 +47,7 @@ jobs: matrix: env: - tlora_pager_sx1262 + - tlora_pager_lr1121 - tdeck - lilygo_twatch_s3 - gat562_mesh_evb_pro @@ -108,7 +109,7 @@ jobs: fi - name: Prepare web flasher image - if: matrix.env == 'tlora_pager_sx1262' || matrix.env == 'tdeck' || matrix.env == 'lilygo_twatch_s3' + if: matrix.env == 'tlora_pager_sx1262' || matrix.env == 'tlora_pager_lr1121' || matrix.env == 'tdeck' || matrix.env == 'lilygo_twatch_s3' run: | python scripts/prepare_webflash_release.py \ --env ${{ matrix.env }} \ diff --git a/README.md b/README.md index f8aa96cd..5235fd77 100644 --- a/README.md +++ b/README.md @@ -214,9 +214,9 @@ The table below describes the **real build targets that exist in the repository | Device / Target | Build Target | Stack | Current Status | | --- | --- | --- | --- | | **LILYGO T-LoRa-Pager (SX1262)** | `tlora_pager_sx1262` | PlatformIO / Arduino | Current default environment and still the most complete day-to-day validation target | +| **LILYGO T-LoRa-Pager (LR1121)** | `tlora_pager_lr1121` | PlatformIO / Arduino | Supported Pager RF variant with LR1121 RF switch and TCXO bring-up | | **LILYGO T-Deck** | `tdeck` | PlatformIO / Arduino | Primary validation target; keyboard, chat, maps, and shared UI paths are actively used | | **GAT562 Mesh EVB Pro** | `gat562_mesh_evb_pro` | PlatformIO / Arduino (nRF52) | Resource-constrained target focused on monochrome UI, Meshtastic, BLE, and persistence paths; some features are intentionally trimmed to fit RAM limits | -| **LILYGO T-LoRa-Pager (SX1280)** | `tlora_pager_sx1280` | PlatformIO / Arduino | Integrated Pager RF variant for alternate hardware versions | | **LILYGO T-Deck Pro** | `tdeck_pro_a7682e` / `tdeck_pro_pcm512a` | PlatformIO / Arduino | Separate environments exist, but this line is still in active bring-up / adaptation work | | **LILYGO T-Watch S3** | `lilygo_twatch_s3` | PlatformIO / Arduino | Experimental target used more for system and UI validation than for full feature coverage | | **M5Stack Tab5** | `TRAIL_MATE_IDF_TARGET=tab5` | ESP-IDF | Main large-screen IDF bring-up target; the shared shell runs and hardware-specific work is still being filled in | @@ -248,13 +248,13 @@ Common build commands: ```bash # Primary targets platformio run -e tlora_pager_sx1262 +platformio run -e tlora_pager_lr1121 platformio run -e tdeck # nRF52 / resource-constrained target platformio run -e gat562_mesh_evb_pro # Other integrated targets -platformio run -e tlora_pager_sx1280 platformio run -e tdeck_pro_a7682e platformio run -e tdeck_pro_pcm512a platformio run -e lilygo_twatch_s3 @@ -264,7 +264,6 @@ If you want more verbose diagnostics, the repository also provides these debug e ```bash platformio run -e tlora_pager_sx1262_debug -platformio run -e tlora_pager_sx1280_debug platformio run -e tdeck_debug platformio run -e lilygo_twatch_s3_debug ``` diff --git a/README_CN.md b/README_CN.md index 89d4909e..5cb716d9 100644 --- a/README_CN.md +++ b/README_CN.md @@ -215,7 +215,7 @@ Trail Mate 的长期目标不是“尽可能支持更多板子”,而是优先 | **LILYGO T-LoRa-Pager (SX1262)** | `tlora_pager_sx1262` | PlatformIO / Arduino | 当前默认环境,也是最完整、最适合日常开发验证的目标 | | **LILYGO T-Deck** | `tdeck` | PlatformIO / Arduino | 当前主力验证目标,键盘、聊天、地图与共享 UI 路径已稳定接入 | | **GAT562 Mesh EVB Pro** | `gat562_mesh_evb_pro` | PlatformIO / Arduino(nRF52) | 资源受限目标,当前重点在单色 UI、Meshtastic、BLE 与持久化链路,部分功能会按 RAM 裁剪 | -| **LILYGO T-LoRa-Pager (SX1280)** | `tlora_pager_sx1280` | PlatformIO / Arduino | 已接入的 Pager 射频变体,用于兼容不同硬件版本 | +| **LILYGO T-LoRa-Pager (LR1121)** | `tlora_pager_lr1121` | PlatformIO / Arduino | 已接入的 Pager 射频变体,包含 LR1121 RF switch 与 TCXO 初始化 | | **LILYGO T-Deck Pro** | `tdeck_pro_a7682e` / `tdeck_pro_pcm512a` | PlatformIO / Arduino | 已有独立环境,仍处于 bring-up / 适配推进阶段 | | **LILYGO T-Watch S3** | `lilygo_twatch_s3` | PlatformIO / Arduino | 实验性目标,偏系统与 UI 验证,不是当前完整功能验证主路径 | | **M5Stack Tab5** | `TRAIL_MATE_IDF_TARGET=tab5` | ESP-IDF | 当前主要的大屏 IDF bring-up 目标,共享 shell 已跑通,硬件细节仍在补齐 | @@ -246,13 +246,13 @@ PlatformIO 覆盖了 ESP32 Arduino 目标,也覆盖了当前的 nRF52 Arduino ```bash # 主力目标 platformio run -e tlora_pager_sx1262 +platformio run -e tlora_pager_lr1121 platformio run -e tdeck # nRF52 / 资源受限目标 platformio run -e gat562_mesh_evb_pro # 其他已接入目标 -platformio run -e tlora_pager_sx1280 platformio run -e tdeck_pro_a7682e platformio run -e tdeck_pro_pcm512a platformio run -e lilygo_twatch_s3 @@ -262,7 +262,6 @@ platformio run -e lilygo_twatch_s3 ```bash platformio run -e tlora_pager_sx1262_debug -platformio run -e tlora_pager_sx1280_debug platformio run -e tdeck_debug platformio run -e lilygo_twatch_s3_debug ``` diff --git a/boards/tlora_pager/BOARD.md b/boards/tlora_pager/BOARD.md index 2902b2a3..089e8b3a 100644 --- a/boards/tlora_pager/BOARD.md +++ b/boards/tlora_pager/BOARD.md @@ -25,6 +25,7 @@ This record describes hardware facts only. - rotary encoder present: yes - trackball present: no - LoRa present: yes +- LoRa variants: SX1262, LR1121 - GPS present: yes - SD card present: yes - audio codec present: yes diff --git a/boards/tlora_pager/board_facts.h b/boards/tlora_pager/board_facts.h index e5d3416b..600d8c9c 100644 --- a/boards/tlora_pager/board_facts.h +++ b/boards/tlora_pager/board_facts.h @@ -22,7 +22,8 @@ struct TLoRaPagerBoardFacts bool rotary_encoder_present = true; bool trackball_present = false; bool lora_present = true; - const char* lora_chip = "sx1262"; + const char* default_lora_chip = "sx1262"; + const char* lora_chip_variants = "sx1262,lr1121"; bool gps_present = true; bool sd_card_present = true; bool audio_codec_present = true; diff --git a/boards/tlora_pager/src/tlora_pager_board.cpp b/boards/tlora_pager/src/tlora_pager_board.cpp index 80526aa4..be28d5fa 100644 --- a/boards/tlora_pager/src/tlora_pager_board.cpp +++ b/boards/tlora_pager/src/tlora_pager_board.cpp @@ -722,6 +722,32 @@ bool TLoRaPagerBoard::initLoRa() } devices_probe |= HW_RADIO_ONLINE; +#if defined(ARDUINO_LILYGO_LORA_LR1121) + static const uint32_t rfswitch_dio_pins[] = { + RADIOLIB_LR11X0_DIO5, + RADIOLIB_LR11X0_DIO6, + RADIOLIB_NC, + RADIOLIB_NC, + RADIOLIB_NC, + }; + static const Module::RfSwitchMode_t rfswitch_table[] = { + {LR11x0::MODE_STBY, {LOW, LOW}}, + {LR11x0::MODE_RX, {LOW, HIGH}}, + {LR11x0::MODE_TX, {HIGH, LOW}}, + {LR11x0::MODE_TX_HP, {HIGH, LOW}}, + {LR11x0::MODE_TX_HF, {LOW, LOW}}, + {LR11x0::MODE_GNSS, {LOW, LOW}}, + {LR11x0::MODE_WIFI, {LOW, LOW}}, + END_OF_MODE_TABLE, + }; + + radio_.setRfSwitchTable(rfswitch_dio_pins, rfswitch_table); + state = radio_.setTCXO(3.0f); + if (state != RADIOLIB_ERR_NONE) + { + log_w("LR1121 TCXO config returned code: %d", state); + } +#endif log_i("✅Radio init succeeded"); return true; } @@ -1364,7 +1390,11 @@ float TLoRaPagerBoard::getRadioInstantRSSI() { if (LilyGoDispArduinoSPI::lock(pdMS_TO_TICKS(20))) { +#if defined(ARDUINO_LILYGO_LORA_SX1262) const float rssi = radio_.getRSSI(false); +#else + const float rssi = radio_.getRSSI(); +#endif LilyGoDispArduinoSPI::unlock(); return rssi; } @@ -1396,8 +1426,13 @@ int TLoRaPagerBoard::configureFskRadio(float freq_mhz, float bit_rate_kbps, floa int rc = radio_.standby(); if (rc == RADIOLIB_ERR_NONE) { +#if defined(ARDUINO_LILYGO_LORA_LR1121) + rc = radio_.beginGFSK(freq_mhz, bit_rate_kbps, freq_dev_khz, rx_bw_khz, + tx_power, preamble_len, 3.0f); +#else rc = radio_.beginFSK(freq_mhz, bit_rate_kbps, freq_dev_khz, rx_bw_khz, tx_power, preamble_len, tcxo_voltage); +#endif } if (rc == RADIOLIB_ERR_NONE) { @@ -1423,7 +1458,18 @@ int TLoRaPagerBoard::restoreLoRaRadio() if (LilyGoDispArduinoSPI::lock(pdMS_TO_TICKS(200))) { +#if defined(ARDUINO_LILYGO_LORA_LR1121) + int rc = radio_.begin(cached.valid ? cached.freq_mhz : 434.0f, + cached.valid ? cached.bw_khz : 125.0f, + cached.valid ? cached.sf : 9, + cached.valid ? cached.cr_denom : 7, + cached.valid ? cached.sync_word : RADIOLIB_LR11X0_LORA_SYNC_WORD_PRIVATE, + cached.valid ? cached.tx_power : 10, + cached.valid ? cached.preamble_len : 8, + 3.0f); +#else int rc = radio_.begin(); +#endif LilyGoDispArduinoSPI::unlock(); if (rc != RADIOLIB_ERR_NONE) { diff --git a/docs/boards/t-lora-pager.board.yaml b/docs/boards/t-lora-pager.board.yaml index f4004088..b5802454 100644 --- a/docs/boards/t-lora-pager.board.yaml +++ b/docs/boards/t-lora-pager.board.yaml @@ -34,7 +34,8 @@ facts: lora: present: true - chip: "sx1262" + chips: ["sx1262", "lr1121"] + default_chip: "sx1262" spi_bus: "shared_spi" sck_pin: 35 miso_pin: 33 @@ -44,8 +45,12 @@ facts: busy_pin: 48 dio1_pin: 14 power_enable_pin: "xl9555:3" - dio2_as_rf_switch: true - dio3_tcxo_voltage: 1.8 + sx1262: + dio2_as_rf_switch: true + dio3_tcxo_voltage: 1.8 + lr1121: + rf_switch_dio_pins: ["DIO5", "DIO6"] + tcxo_voltage: 3.0 gps: present: true diff --git a/docs/devices/lilygo-t-lora-pager.md b/docs/devices/lilygo-t-lora-pager.md index fd609b1e..f359acb8 100644 --- a/docs/devices/lilygo-t-lora-pager.md +++ b/docs/devices/lilygo-t-lora-pager.md @@ -15,7 +15,7 @@ It exists to prevent drift between: - Flash / PSRAM: `16MB QSPI flash + 8MB QSPI PSRAM` - Display: `ST7796` SPI TFT - UI resolution used by this repo: `480x222` -- Radio: `SX1262` +- Radio: `SX1262` or `LR1121` - GNSS: `u-blox MIA-M10Q` - Input: `rotary encoder + center key + I2C keyboard` - Power / battery: `BQ25896 + BQ27220` @@ -96,12 +96,15 @@ board runtime unless real hardware verification proves otherwise. Defined in [tlora_pager.ini](../../variants/lilygo_tlora_pager/envs/tlora_pager.ini): - `tlora_pager_sx1262` +- `tlora_pager_lr1121` - `tlora_pager_sx1262_debug` Current build-time facts: - all Pager environments define `ARDUINO_T_LORA_PAGER` - `SX1262` builds define `ARDUINO_LILYGO_LORA_SX1262` +- `LR1121` builds define `ARDUINO_LILYGO_LORA_LR1121` +- `LR1121` runtime configures DIO5/DIO6 RF switch control and a 3.0 V TCXO, matching the LilyGo reference bring-up - the display driver is built as `ST7796` - this repo currently builds the Pager UI with `SCREEN_WIDTH=480` and `SCREEN_HEIGHT=222` diff --git a/docs/targets/esp-t-lora-pager-lvgl.capabilities.yaml b/docs/targets/esp-t-lora-pager-lvgl.capabilities.yaml index 73413d3e..f64fb318 100644 --- a/docs/targets/esp-t-lora-pager-lvgl.capabilities.yaml +++ b/docs/targets/esp-t-lora-pager-lvgl.capabilities.yaml @@ -85,7 +85,7 @@ capabilities: capability_bindings: lora: board_provider: "t_lora_pager.radio" - platform_driver: "esp_radiolib_sx1262_packet_radio" + platform_driver: "esp_radiolib_pager_packet_radio" runtime_owner: "radio_task" protocol_consumers: ["core_mesh.meshtastic", "core_mesh.meshcore"] gps: @@ -132,7 +132,6 @@ race_policy: build: app: "apps/esp32_lvgl" board_package: "boards/tlora_pager" - platformio_envs: ["tlora_pager_sx1262"] + platformio_envs: ["tlora_pager_sx1262", "tlora_pager_lr1121"] enabled_modules: ["core_chat", "core_device", "core_gps", "core_hostlink", "core_phone", "core_mesh", "ui_presentation", "core_sys", "core_team", "ui_shared"] disabled_modules: [] - diff --git a/modules/ui_shared/src/ui/runtime/memory_profile.cpp b/modules/ui_shared/src/ui/runtime/memory_profile.cpp index 9ddefbff..598fb070 100644 --- a/modules/ui_shared/src/ui/runtime/memory_profile.cpp +++ b/modules/ui_shared/src/ui/runtime/memory_profile.cpp @@ -52,8 +52,9 @@ const MemoryProfile& current_memory_profile() { #if defined(TRAIL_MATE_ESP_BOARD_TAB5) || defined(TRAIL_MATE_ESP_BOARD_T_DISPLAY_P4) return make_extended_profile(); -#elif defined(ARDUINO_T_DECK) || defined(ARDUINO_T_DECK_PRO) || \ - defined(ARDUINO_LILYGO_LORA_SX1262) || defined(ARDUINO_LILYGO_T_WATCH_S3) || \ +#elif defined(ARDUINO_T_DECK) || defined(ARDUINO_T_DECK_PRO) || \ + defined(ARDUINO_LILYGO_LORA_SX1262) || defined(ARDUINO_LILYGO_LORA_LR1121) || \ + defined(ARDUINO_LILYGO_T_WATCH_S3) || \ defined(BOARD_HAS_PSRAM) || defined(HAS_PSRAM) return make_standard_profile(); #else diff --git a/platform/esp/arduino_common/src/battery_guard.cpp b/platform/esp/arduino_common/src/battery_guard.cpp index e0c98853..a532927a 100644 --- a/platform/esp/arduino_common/src/battery_guard.cpp +++ b/platform/esp/arduino_common/src/battery_guard.cpp @@ -10,7 +10,7 @@ namespace { -#if defined(ARDUINO_LILYGO_LORA_SX1262) +#if defined(ARDUINO_LILYGO_LORA_SX1262) || defined(ARDUINO_LILYGO_LORA_LR1121) constexpr int kLowBatteryWarnPercent = 15; constexpr int kCriticalBatteryPercent = 5; constexpr uint8_t kCriticalStreakToShutdown = 2; @@ -47,7 +47,7 @@ namespace platform::esp::arduino_common void handleLowBattery(int level, bool charging) { -#if defined(ARDUINO_LILYGO_LORA_SX1262) +#if defined(ARDUINO_LILYGO_LORA_SX1262) || defined(ARDUINO_LILYGO_LORA_LR1121) if (level < 0) { return; diff --git a/platform/esp/arduino_common/src/ble/meshcore_ble.cpp b/platform/esp/arduino_common/src/ble/meshcore_ble.cpp index ef273760..48e54a9a 100644 --- a/platform/esp/arduino_common/src/ble/meshcore_ble.cpp +++ b/platform/esp/arduino_common/src/ble/meshcore_ble.cpp @@ -209,7 +209,8 @@ const char* meshCoreCompatManufacturerName() return "LilyGo T-Deck"; #elif defined(ARDUINO_LILYGO_TWATCH_S3) return "LilyGo T-Watch S3"; -#elif defined(ARDUINO_LILYGO_LORA_SX1262) || defined(ARDUINO_LILYGO_LORA_SX1280) +#elif defined(ARDUINO_LILYGO_LORA_SX1262) || defined(ARDUINO_LILYGO_LORA_SX1280) || \ + defined(ARDUINO_LILYGO_LORA_LR1121) return "LilyGo T-LoRa-Pager"; #else return "TrailMate"; diff --git a/platform/esp/arduino_common/src/chat/infra/meshcore/meshcore_adapter.cpp b/platform/esp/arduino_common/src/chat/infra/meshcore/meshcore_adapter.cpp index 64e56578..1ef5f881 100644 --- a/platform/esp/arduino_common/src/chat/infra/meshcore/meshcore_adapter.cpp +++ b/platform/esp/arduino_common/src/chat/infra/meshcore/meshcore_adapter.cpp @@ -1648,7 +1648,8 @@ bool MeshCoreAdapter::transmitFrameNow(const uint8_t* data, size_t len, uint32_t : 0U; int state = RADIOLIB_ERR_UNSUPPORTED; -#if defined(ARDUINO_LILYGO_LORA_SX1262) || defined(ARDUINO_LILYGO_LORA_SX1280) +#if defined(ARDUINO_LILYGO_LORA_SX1262) || defined(ARDUINO_LILYGO_LORA_SX1280) || \ + defined(ARDUINO_LILYGO_LORA_LR1121) state = board_.transmitRadio(data, len); #endif if (state == RADIOLIB_ERR_NONE) @@ -3147,7 +3148,8 @@ void MeshCoreAdapter::applyConfig(const MeshConfig& config) last_auto_discover_hash_ = 0; loadPeerPubKeysFromPrefs(); -#if defined(ARDUINO_LILYGO_LORA_SX1262) || defined(ARDUINO_LILYGO_LORA_SX1280) +#if defined(ARDUINO_LILYGO_LORA_SX1262) || defined(ARDUINO_LILYGO_LORA_SX1280) || \ + defined(ARDUINO_LILYGO_LORA_LR1121) if (board_.isRadioOnline()) { board_.configureLoraRadio(config_.meshcore_freq_mhz, diff --git a/platform/esp/arduino_common/src/chat/infra/meshtastic/mt_adapter.cpp b/platform/esp/arduino_common/src/chat/infra/meshtastic/mt_adapter.cpp index ad28d21d..df8c9d5c 100644 --- a/platform/esp/arduino_common/src/chat/infra/meshtastic/mt_adapter.cpp +++ b/platform/esp/arduino_common/src/chat/infra/meshtastic/mt_adapter.cpp @@ -2621,7 +2621,8 @@ bool MtAdapter::sendNodeInfoTo(uint32_t dest, bool want_response, ChannelId chan hw_model = meshtastic_HardwareModel_T_DECK; #elif defined(ARDUINO_LILYGO_TWATCH_S3) hw_model = meshtastic_HardwareModel_T_WATCH_S3; -#elif defined(ARDUINO_LILYGO_LORA_SX1262) || defined(ARDUINO_LILYGO_LORA_SX1280) +#elif defined(ARDUINO_LILYGO_LORA_SX1262) || defined(ARDUINO_LILYGO_LORA_SX1280) || \ + defined(ARDUINO_LILYGO_LORA_LR1121) hw_model = meshtastic_HardwareModel_T_LORA_PAGER; #endif @@ -2878,7 +2879,8 @@ void MtAdapter::configureRadio() radio_sf_ = radio.sf; radio_cr_ = radio.cr_denom; -#if defined(ARDUINO_LILYGO_LORA_SX1262) || defined(ARDUINO_LILYGO_LORA_SX1280) +#if defined(ARDUINO_LILYGO_LORA_SX1262) || defined(ARDUINO_LILYGO_LORA_SX1280) || \ + defined(ARDUINO_LILYGO_LORA_LR1121) board_.configureLoraRadio(radio.freq_mhz, radio.bw_khz, radio.sf, @@ -3001,7 +3003,8 @@ void MtAdapter::startRadioReceive() app::AppTasks::requestRadioReceiveRestart(); return; } -#if defined(ARDUINO_LILYGO_LORA_SX1262) || defined(ARDUINO_LILYGO_LORA_SX1280) +#if defined(ARDUINO_LILYGO_LORA_SX1262) || defined(ARDUINO_LILYGO_LORA_SX1280) || \ + defined(ARDUINO_LILYGO_LORA_LR1121) app::AppTasks::requestRadioReceiveRestart(); int state = board_.startRadioReceive(); if (state == RADIOLIB_ERR_NONE) @@ -3025,7 +3028,8 @@ bool MtAdapter::transmitWirePacket(const uint8_t* wire_data, size_t wire_size) app::AppTasks::requestRadioReceiveRestart(); -#if defined(ARDUINO_LILYGO_LORA_SX1262) || defined(ARDUINO_LILYGO_LORA_SX1280) +#if defined(ARDUINO_LILYGO_LORA_SX1262) || defined(ARDUINO_LILYGO_LORA_SX1280) || \ + defined(ARDUINO_LILYGO_LORA_LR1121) const int state = board_.transmitRadio(wire_data, wire_size); #else const int state = RADIOLIB_ERR_UNSUPPORTED; diff --git a/platform/esp/arduino_common/src/mesh/esp_meshtastic_adapter_bridge.cpp b/platform/esp/arduino_common/src/mesh/esp_meshtastic_adapter_bridge.cpp index a3ec740a..43286cab 100644 --- a/platform/esp/arduino_common/src/mesh/esp_meshtastic_adapter_bridge.cpp +++ b/platform/esp/arduino_common/src/mesh/esp_meshtastic_adapter_bridge.cpp @@ -99,7 +99,8 @@ EspMeshtasticPacketRadio::EspMeshtasticPacketRadio(LoraBoard& board) } app::AppTasks::requestRadioReceiveRestart(); -#if defined(ARDUINO_LILYGO_LORA_SX1262) || defined(ARDUINO_LILYGO_LORA_SX1280) +#if defined(ARDUINO_LILYGO_LORA_SX1262) || defined(ARDUINO_LILYGO_LORA_SX1280) || \ + defined(ARDUINO_LILYGO_LORA_LR1121) const int state = board_.transmitRadio(packet.data, packet.size); #else const int state = RADIOLIB_ERR_UNSUPPORTED; diff --git a/platform/esp/arduino_common/src/platform_ui_firmware_update_runtime.cpp b/platform/esp/arduino_common/src/platform_ui_firmware_update_runtime.cpp index 541b6568..dd6d87ef 100644 --- a/platform/esp/arduino_common/src/platform_ui_firmware_update_runtime.cpp +++ b/platform/esp/arduino_common/src/platform_ui_firmware_update_runtime.cpp @@ -336,6 +336,8 @@ const char* firmware_target_id() return "tdeck"; #elif defined(ARDUINO_T_LORA_PAGER) && defined(ARDUINO_LILYGO_LORA_SX1262) return "tlora-pager-sx1262"; +#elif defined(ARDUINO_T_LORA_PAGER) && defined(ARDUINO_LILYGO_LORA_LR1121) + return "tlora-pager-lr1121"; #elif defined(ARDUINO_T_WATCH_S3) return "lilygo-twatch-s3"; #else diff --git a/platform/esp/arduino_common/src/sstv/sstv_service.cpp b/platform/esp/arduino_common/src/sstv/sstv_service.cpp index 1cb23608..66cbb3c0 100644 --- a/platform/esp/arduino_common/src/sstv/sstv_service.cpp +++ b/platform/esp/arduino_common/src/sstv/sstv_service.cpp @@ -4,7 +4,9 @@ #include #endif -#if (defined(ARDUINO_T_LORA_PAGER) && defined(ARDUINO_LILYGO_LORA_SX1262)) || defined(TRAIL_MATE_ESP_BOARD_TAB5) +#if (defined(ARDUINO_T_LORA_PAGER) && \ + (defined(ARDUINO_LILYGO_LORA_SX1262) || defined(ARDUINO_LILYGO_LORA_LR1121))) || \ + defined(TRAIL_MATE_ESP_BOARD_TAB5) #if defined(TRAIL_MATE_ESP_BOARD_TAB5) #include diff --git a/platform/esp/arduino_common/src/walkie/walkie_service.cpp b/platform/esp/arduino_common/src/walkie/walkie_service.cpp index c5698097..4811801e 100644 --- a/platform/esp/arduino_common/src/walkie/walkie_service.cpp +++ b/platform/esp/arduino_common/src/walkie/walkie_service.cpp @@ -8,7 +8,9 @@ #include "esp_efuse.h" #endif -#if (defined(ARDUINO_T_LORA_PAGER) && defined(ARDUINO_LILYGO_LORA_SX1262)) || defined(TRAIL_MATE_ESP_BOARD_TAB5) +#if (defined(ARDUINO_T_LORA_PAGER) && \ + (defined(ARDUINO_LILYGO_LORA_SX1262) || defined(ARDUINO_LILYGO_LORA_LR1121))) || \ + defined(TRAIL_MATE_ESP_BOARD_TAB5) #include "app/app_config.h" #include "app/app_facade_access.h" diff --git a/platform/esp/arduino_common/src/walkie_runtime.cpp b/platform/esp/arduino_common/src/walkie_runtime.cpp index 03ff0905..dfc46d84 100644 --- a/platform/esp/arduino_common/src/walkie_runtime.cpp +++ b/platform/esp/arduino_common/src/walkie_runtime.cpp @@ -1,6 +1,7 @@ #include "platform/esp/common/walkie_runtime.h" -#if defined(ARDUINO_T_LORA_PAGER) && defined(ARDUINO_LILYGO_LORA_SX1262) +#if defined(ARDUINO_T_LORA_PAGER) && \ + (defined(ARDUINO_LILYGO_LORA_SX1262) || defined(ARDUINO_LILYGO_LORA_LR1121)) #include #include diff --git a/scripts/webflash_targets.py b/scripts/webflash_targets.py index a769bfba..45b580a7 100644 --- a/scripts/webflash_targets.py +++ b/scripts/webflash_targets.py @@ -6,7 +6,7 @@ WEBFLASH_TARGETS: Final = ( { "id": "tlora-pager-sx1262", "env": "tlora_pager_sx1262", - "name": "LilyGo T-LoRa Pager", + "name": "LilyGo T-LoRa Pager SX1262", "subtitle": "SX1262 build for the 480x222 keyboard pager", "chip_family": "ESP32-S3", "flash_mode": "dio", @@ -14,6 +14,17 @@ WEBFLASH_TARGETS: Final = ( "flash_size": "16MB", "merged_asset_name": "trail-mate-tlora-pager-sx1262-webflash.bin", }, + { + "id": "tlora-pager-lr1121", + "env": "tlora_pager_lr1121", + "name": "LilyGo T-LoRa Pager LR1121", + "subtitle": "LR1121 build for the Sub-GHz + 2.4 GHz keyboard pager", + "chip_family": "ESP32-S3", + "flash_mode": "dio", + "flash_freq": "80m", + "flash_size": "16MB", + "merged_asset_name": "trail-mate-tlora-pager-lr1121-webflash.bin", + }, { "id": "tdeck", "env": "tdeck", diff --git a/variants/lilygo_tlora_pager/envs/tlora_pager.ini b/variants/lilygo_tlora_pager/envs/tlora_pager.ini index ef9be5f7..2401a8fd 100644 --- a/variants/lilygo_tlora_pager/envs/tlora_pager.ini +++ b/variants/lilygo_tlora_pager/envs/tlora_pager.ini @@ -22,6 +22,32 @@ lib_deps = https://github.com/stm32duino/ST25R3916.git#2.0.2 https://github.com/vicliu624/NFC-RFAL.git +[env:tlora_pager_lr1121] +extends = arduino_base +board = lilygo-t-lora-pager +build_src_filter = + +<*> + - + - + - +build_flags = + ${arduino_base.build_flags} + -D DISPLAY_DRIVER_ST7796 + -D SCREEN_WIDTH=480 + -D SCREEN_HEIGHT=222 + -D ARDUINO_T_LORA_PAGER + -D ARDUINO_LILYGO_LORA_LR1121 + -D RADIOLIB_EXCLUDE_SX126X + -D RADIOLIB_EXCLUDE_SX128X + -DTRAIL_MATE_LORA_TX_POWER_MAX_DBM=22 + -I variants/lilygo_tlora_pager +lib_deps = + ${arduino_base.lib_deps} + adafruit/Adafruit TCA8418 @ 1.0.2 + adafruit/Adafruit BusIO @ 1.17.0 + https://github.com/stm32duino/ST25R3916.git#2.0.2 + https://github.com/vicliu624/NFC-RFAL.git + [env:tlora_pager_sx1262_debug] extends = arduino_base board = lilygo-t-lora-pager