Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

2,760 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐ŸฆŠ Fennek

An alternative open-source firmware for the LilyGO T-Deck Pro

Music, audiobooks, eBooks and LoRa mesh chat โ€” in one handheld.

๐Ÿ‡ฌ๐Ÿ‡ง English ยท ๐Ÿ‡ฉ๐Ÿ‡ช Deutsch ยท ๐Ÿ‡ธ๐Ÿ‡ช Svenska

๐ŸŒ fennek.dumke.me

License: GPL v3+ Latest release Release date Changelog Platform: ESP32-S3 Board: T-Deck Pro Build: PlatformIO


Fennek turns the LilyGO T-Deck Pro (ESP32-S3, E-Ink, LoRa) into a real handheld: listen to music, resume audiobooks, read eBooks and chat over the LoRa mesh via MeshCore โ€” with a homescreen launcher, touch + physical keyboard, and background audio that keeps playing across app switches. Like the desert fox: small, frugal, big ears.

It is a standalone alternative to the factory firmware โ€” built around the hardware's defining quirk, that E-Ink, the SD card and LoRa all share one SPI bus, while still delivering stutter-free audio playback.

๐Ÿ“ธ Screenshots

Launcher
Launcher (app picker)
Music player
Music โ€“ playback
Tic-Tac-Toe
Games โ€“ Tic-Tac-Toe
Settings
Settings (radio & system)
Standby
Standby (sleeping fennec)
Maps
Maps โ€“ offline SD tiles + GPS

Rendered pixel-accurately from the real drawing code (240ร—320 E-Ink) via tools/screenshots.sh โ€” see tools/.

โœจ Apps

App Features
๐ŸŽต Music MP3/AAC/FLAC/WAV from SD (/music), artist/album/playlist browser, ID3 tags (with SD cache), shuffle/repeat, sleep timer, resume after reboot
๐ŸŽง Audiobook Books as folders under /audiobooks, chapters natural-sorted, per-book bookmark (NVS), ยฑ30 s jumps, sleep timer
๐Ÿ“– Reading .txt and .epub from /books, on-device EPUB conversion (ROM-tinfl), page-index cache, per-book reading position
๐Ÿ“ก Mesh Lean MeshCore client: public and hashtag channels (#test โ€ฆ), DMs with delivery status, contacts from adverts, message log on SD incl. history reload
๐ŸŽฎ Games 2048, Minesweeper, Chess (Negamax AI) and Tic-Tac-Toe โ€” logic host-tested
๐Ÿ“ Notes One note per day under /notes (YYYY-MM-DD.md); "+ Today" opens or appends to today's note, the list shows every day newest-first with a first-line preview, append-style editor with delete confirmation
๐ŸŽ™๏ธ Podcast RSS subscriptions in /podcasts/feeds.txt (Freakshow preset), syncs the latest episode over Wi-Fi and keeps only that one โ€” downloaded to SD, played via the audio queue with resume
โš™๏ธ Options Radio presets (EU Narrow = DE/NRW standard 869.618 MHz / 62.5 kHz / SF8), individual parameters, node name, battery info, firmware version

Plus: a status line (battery, playback), standby/key-lock via the button, and a serial debug console over USB (type help โ€” status, chan test hello, meshlog, ls /books โ€ฆ).

๐Ÿ”ง Hardware

LilyGO T-Deck Pro V1.1: ESP32-S3 (16 MB flash, 8 MB PSRAM), E-Ink GDEQ031T10 240ร—320, CST328 touch (I2C), TCA8418 keyboard, PCM5102A DAC (I2S, 3.5 mm jack), SX1262 LoRa, BQ27220 fuel gauge, microSD.

Defining quirk: E-Ink, the SD card and LoRa share one SPI bus. The entire architecture revolves around audio never stuttering despite that, and inputs responding instantly โ€” details in CLAUDE.md (anti-stutter invariants).

๐Ÿงญ Engineering around the hardware

The T-Deck Pro has four awkward constraints; Fennek is the story of working with them. (Full design notes and anti-stutter invariants in CLAUDE.md.)

  • ๐Ÿ• No real-time clock. There is no battery-backed RTC. The canonical clock is the ESP32 system time (it survives deep sleep, unlike a millis() clock), set in priority order from GPS โ†’ NTP โ†’ mesh adverts; drift is learned and a future-dated packet can't drag the clock forward unchecked.
  • ๐Ÿ”‹ Can't stay online. Always-on networking isn't possible on this power budget โ€” and Wi-Fi and audio can't run at once (the Wi-Fi task on core 0 evicts the audio task). So Fennek never holds a connection: scrobbles, note polishing and podcast downloads are batched into a short Wi-Fi window before standby, and unused peripherals (GPS, haptics) are powered down at boot.
  • ๐Ÿงฉ Only two cores. Two cores mean barely any true multitasking. Audio decoding is pinned to core 0, the UI + mesh pump to core 1; SD library scans pause during playback and the chess AI runs at low priority โ€” so playback stays smooth and the keyboard responsive.
  • ๐Ÿ–‹๏ธ E-Ink screen. E-Ink is beautiful but slow, and full refreshes flash the panel. Fennek redraws only on a real change, paints progress/status as narrow region strips instead of full repaints, and stretches the anti-ghosting full refresh out to keep the screen calm.

๐Ÿš€ Build & Flash

Prerequisite: PlatformIO. Connect the T-Deck Pro via USB-C, then:

pio run -e fennek              # build
pio run -e fennek -t upload    # flash (USB-C)
pio device monitor -b 115200   # log + debug console

The firmware also runs without an SD card (apps then show a hint). Radio parameters are configurable at runtime in the Options app; the default is the EU/UK Narrow preset commonly used in Germany.

โš ๏ธ Custom firmware replaces the factory software. You flash at your own risk โ€” a way back to the original firmware is available via the LilyGO resources.

๐Ÿ“ Project layout

  • src/ โ€” active firmware (core/ drivers & framework, services/ audio/ library/text, apps/ the apps)
  • lib/meshcore/, lib/ed25519/ โ€” vendored MeshCore stack (subset)
  • boards/t-deck_pro.json โ€” board definition (partition default_16MB.csv)
  • CHANGELOG.md โ€” release notes
  • CLAUDE.md โ€” architecture, invariants, verification status
  • LICENSE โ€” GPL-3.0-or-later

๐Ÿ“œ License

Fennek is licensed under the GNU General Public License v3.0 or later (GPL-3.0-or-later) โ€” see LICENSE.

Bundled components keep their own GPL-compatible licenses:

๐Ÿ™ Credits

Fennek started out inspired by the Meck fork (pelgraine/Meck, a MeshCore companion for the T-Deck), but was rebuilt from v1.0.0 as a standalone multi-app firmware and has been its own project ever since. The mesh stack is based on MeshCore by Scott Powell. The earlier Meck code (formerly under archive_legacy/) lives in the Git history and can be restored from there at any time.

About

๐ŸฆŠ Fennek โ€” alternative open-source firmware for the LilyGO T-Deck Pro: music, audiobooks, eBooks & LoRa mesh chat (MeshCore). GPL-3.0+

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages