CPR-vCodex Steroids v1.5.0.9-dev1
🔀 Upstream vCodex 1.5.0.9 Alignment
This release integrates all improvements and fixes from upstream vCodex 1.5.0.6 through 1.5.0.9:
- WiFi fix: resolved crash when WiFi connection fails (back button on network selection screen)
- EPUB pagination: improved handling of decomposed characters and basic table support
- PNG sleep screen: increased PNG decoder buffer size to support wider images
- JsonSettingsIO: hardened serialization with load-time validation, prevents settings corruption
- CSS caching: stripping of unused CSS rules, cache destroyed when invalid
- Font performance: optimized glyph lookup, faster font rendering, Bookerly auto-hinting
- Image double refresh: double FAST_REFRESH technique with selective blanking for large grayscale images (pablohc)
- Dangling pointer fix in GfxRenderer and EPUB sections
⚡ Performance & Stability (Steroids)
Sleep screen: no more 30-second wake delays on X3 🚀
Some Reddit users with X3 reported 30+ second sleep/wake times (compared to 4-5 seconds on standard vCodex). The culprit was a duplicate framebuffer write to SD card during sleep entry. We removed the redundant write, saving 300-800ms on slow SD cards. When "Cycle screensaver on tap" is disabled, zero SD writes occur during sleep — performance now matches standard vCodex.
Screensaver: no more crashes when waking back to the reader 🎨
Fixed a crash (OOM) that occurred when the screensaver displayed a PNG and then returned to the reader. The heap would become so fragmented that deserializing the next page section failed with std::bad_alloc. The PNG decoder and font caches are now released before the reader resumes, keeping the heap clean.
PNG screensaver: no more random white screens 🖼️
Some PNG images showed a blank white screen even though the file existed on disk. The PNGdec library was returning SUCCESS even when file opening failed — we now explicitly validate image dimensions after open, with clear error logging.
Exiting books: clean, instant transitions 📖
When exiting any book (EPUB, XTC, TXT, KOReader sync), returning to Home now uses a silent restart that:
- ❌ Skips the "Loading..." popup
- ❌ Skips the display white flash
- ❌ Fully defragments the heap
- ✅ Takes you back to Home in an instant
This same mechanism is used for post-reading statistics screens. No more slow reboots with a loading bar.
🐛 Bug Fixes (Steroids)
File Transfer: Back button no longer reboots your device 🔌
Opening "File Transfer" and pressing Back without starting any WiFi operation used to display "Rebooting device" and force a restart. Now you simply return to Home. The reboot is kept only when WiFi and the web server have actually been active (to clean up fragmented memory).
Text clippings: navigation and highlighting now work correctly ✂️
Fixed an inherited upstream bug where clipping navigation and text selection highlighting didn't work properly. The text search algorithm is now unified between positioning and highlighting, with case-insensitive matching and punctuation skipping.
🛠️ Technical Improvements (Steroids)
- SleepScreenCache: removed unnecessary heap allocation in the cache path (uses stack buffer instead)
- PNG decoding: the decoder survives between image changes without re-allocating
- Removed incompatible upstream PNGdec patch that conflicted with the Steroids screensaver system
- Data type and heap allocation alignment to prevent memory corruption and
std::bad_alloccrashes - PngSleepRenderer: fixed
memsetandopen()failure handling in the SS→SLP retry path