Skip to content

[Feature Request] Comprehensive Cyrillic Character Support (UTF-8) for LilyGO T-Deck and T-LoRa Pager (Model K257) + Cyrillic input #1229

@vasilpetrov

Description

@vasilpetrov

1. Context & Motivation

The current firmware for both the LilyGO T-Deck and the LilyGO T-LoRa Pager (Model K257) targets critically lacks adequate font support for the Cyrillic Unicode block ($\text{U+0400}$–$\text{U+045F}$).

This limitation renders both devices unusable as standalone communication terminals for users in regions utilizing Cyrillic scripts. When messages are received in languages like Bulgarian, Russian, Ukrainian, Serbian, etc., the display renders unreadable replacement characters (e.g., ? or ).

For Meshcore to achieve reliable utility and adoption across Eastern Europe and Central Asia, supporting this character set is a functional necessity.

2. Affected Hardware

Both devices share a similar high-performance architecture, simplifying the proposed fix:

Device Model MCU Display Type Key Feature
LilyGO T-Deck T-Deck ESP32-S3 IPS LCD (ST7789) Large Screen, Full Keyboard
LilyGO T-LoRa Pager K257 ESP32-S3 IPS LCD (ST7796) Compact Pager Form, QWERTY Keyboard

3. Technical Constraints & Analysis

Both devices run on the ESP32-S3, which offers ample Flash (16MB) and PSRAM (8MB). Therefore, the primary constraint is integrating the font gracefully, not memory size.

The core requirement is to successfully parse and render 2-byte UTF-8 sequences corresponding to the necessary Cyrillic characters.

Target Character Range (Essential for Bulgarian + Broad Coverage):
The solution must include the full range necessary for common Cyrillic languages:

  • Basic Cyrillic: $\text{U+0410}$–$\text{U+044F}$ (Covers Russian, Bulgarian, etc.)
  • Cyrillic Supplements: $\text{U+0450}$–$\text{U+045F}$ (Critical for Ukrainian, Serbian, Macedonian variations).

4. Proposed Solution (Two Phases)

Phase 1: Rendering (High Priority)

The display assets must be updated to include the necessary glyphs.

  1. Font Generation: Generate a custom font file (e.g., C-array header, .vlw) that combines the existing Basic Latin characters with the full Cyrillic range ($\text{U+0400}$–$\text{U+045F}$).
  2. Integration: Integrate this new font into the display logic for both T-Deck and T-LoRa Pager targets, as they share similar ESP32-S3 architectures.
  3. UTF-8 Handling: Verify that the display function correctly interprets and maps the incoming two-byte UTF-8 sequences (starting with 0xD0 and 0xD1) to the correct glyph indices.

Phase 2: QWERTY Input Mapping (T-Deck & T-LoRa Pager)

Once rendering is resolved, a separate issue will be needed to address input functionality on the physical keyboards:

  • Implement a software keymap layer triggered by a modifier key (e.g., Alt or Sym).
  • The layer should support common phonetic layouts (e.g., Bulgarian/Russian standard phonetic mapping).

5. Acceptance Criteria

  • Incoming $\text{UTF-8}$ messages in Bulgarian (e.g., "Здравей", "Тест") render correctly and legibly on the T-Deck display.
  • Incoming $\text{UTF-8}$ messages in Bulgarian (e.g., "Здравей", "Тест") render correctly and legibly on the T-LoRa Pager (K257) display.
  • The added font asset does not cause significant performance degradation or excessive flash memory usage.
  • Users can toggle the keyboard into Cyrillic mode.
  • Typing on the physical keyboard in Cyrillic mode correctly generates Bulgarian (and other basic Cyrillic) characters.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions