Releases: dito94/CrossDiTo
Release list
CrossDiTo 1.5.1
CrossDiTo 1.5.1 is an Xteink X4 Pro-only release based on CrossInk 1.5.0. It keeps CrossInk's existing /.crosspoint/ settings, reading progress, and cache compatibility while adding the X4 Pro fixes and optimizations listed below.
Verified firmware
- File:
CrossDiTo-x4-pro-v1.5.1.bin - Size: 6,137,264 bytes
- SHA-256:
be7afe4ea3e55bfbd46a7935715872b864a6df14ddc2f521918d2c69e3e65463 - OTA partition headroom: 416,336 bytes
- Hardware verification: flashed to an Xteink X4 Pro, read back in full, and matched byte-for-byte
- Source verification: a clean X4 Pro build reproduces the verified image's code layout, section sizes, and complete defined-symbol layout. Build timestamps and generated gzip timestamps make independently compiled binary hashes differ.
For an existing CrossDiTo installation, copy the .bin file to the SD card and select Settings > System > SD Card Firmware Update. See Installation for USB flashing and checksum verification.
Theoretical performance improvement over CrossInk 1.5.0
These are engineering estimates, not benchmark results. The actual change depends heavily on EPUB structure, whether caches are warm, font and antialiasing settings, SD-card latency, and the display waveform selected by the panel controller.
| Workload | Rough expected change | Main mechanism |
|---|---|---|
| Reopening a previously parsed EPUB or reflowing it after a layout change | About 10-35% less visible wait in favorable cached cases; roughly 20-50% less parser/tokenizer work | Versioned compiled chapter-event cache avoids repeating XHTML tokenization |
| Normal text page turn | About 10-30% less CPU-side preparation; usually about 5-15% faster as perceived by the reader | Retained next page, direct packed-framebuffer glyph path, and one-pass grayscale composition; the e-ink waveform still dominates total time |
| Returning to a warm Home carousel | Usually near-immediate apart from the e-ink refresh, instead of rebuilding a multi-second progress screen | Carousel cache no longer invalidates for reading-progress-only changes |
| Production boot | About 250 ms faster | USB file transfer starts asynchronously instead of blocking startup |
| Full-book page count after initial indexing | Large later savings when reopening or jumping through the same layout | Exact page offsets are cached; first full-book indexing remains intentionally expensive |
The estimates do not apply to a cold first parse of a new book, a changed cache format, an image-heavy page, a slow or failing SD card, or a mandatory clean e-ink refresh.
Theoretical battery improvement over CrossInk 1.5.0
No controlled current-versus-time battery test has been completed, so these ranges should be treated as hypotheses for hardware testing rather than promises.
| Usage pattern | Rough expected improvement | Why |
|---|---|---|
| Active reading, frontlight off, Wi-Fi off | About 10-25% longer reading time | The 240 MHz lock is released after activity, tickless light sleep fills idle gaps, and long display waits run at a lower CPU frequency |
| Active reading at 10% frontlight | About 5-15% longer reading time | MCU savings still help, but the LEDs become a larger share of total power; the perceptual curve also reduces low-level PWM duty |
| Reader left on a static page, frontlight off | MCU-side idle draw may fall roughly 20-50%; whole-device savings will be smaller | Deadline-driven input servicing replaces constant polling and permits automatic light sleep |
| Heavy Wi-Fi, first-time indexing, or repeated image decoding | About 0-10% | Radio, SD traffic, parsing, and display work dominate, leaving fewer idle intervals to optimize |
| Deep-sleep standby | About 0-5% | Most active-runtime changes do not affect an already sleeping device |
To measure the real result, compare the same device, battery, book, layout, page-turn pace, SD card, radio state, and frontlight setting over several full charge cycles. Battery percentage alone is too coarse for short tests; a USB power meter or inline current logger is preferable.
Complete CrossDiTo 1.5.1 changelog
Added
- Xteink X4 Pro now has production, debug, simulator, CI, and release-catalog targets.
- EPUB chapters now keep a versioned, layout-neutral compiled event cache so font, margin, orientation, and spacing changes can repaginate without tokenizing the same XHTML again.
- EPUB reader jumps now offer a one-shot Return to Previous Reading Position action without storing a history.
- X4 Pro can automatically switch its frontlight on and off in a user-set daily 15-minute schedule, including overnight windows.
- EPUB indexing can paginate an entire book for the active layout and cache exact whole-book page offsets.
- Reader status bars can show either chapter-relative pages or the current page within the fully paginated book.
Changed
- Firmware identity is now CrossDiTo 1.5.1 while retaining a visible reference to its CrossInk 1.5.0 upstream base.
- Lyra Carousel snapshots are keyed by book order, covers, and layout rather than reading progress, and the selected book is redrawn live so progress stays current without rebuilding every cached frame after leaving a book.
- Idle reading now releases the 240 MHz CPU lock after 300 ms, uses tickless automatic light sleep between input events, and powers down the ESP32-S3 CPU domain while idle; button and touch interrupts wake the main loop immediately.
- X4 Pro frontlight levels use a perceptual curve that reduces LED duty at low and medium settings.
- Reader resume no longer loads recent books, KOReader credentials, or validates a dictionary before showing the first page; each is loaded only when first used.
- EPUB reading retains one already-deserialized next page when memory permits, avoiding the next page's SD read and object reconstruction without adding another speculative page allocation.
- Fully visible 1-bit glyphs now write directly to the packed framebuffer, avoiding per-pixel clipping and rotation work while keeping the existing renderer as the fallback.
- Production startup no longer waits 250 ms for USB serial enumeration; file transfer starts after the same window without blocking the boot path, while crash logs remain in RTC memory.
- X4 Pro builds pin the matching DIO/Octal-PSRAM SDK, keep the e-ink bus at its controller's 20 MHz limit, and preserve usable internal heap instead of reserving 24 KB that the application cannot use.
- CrossDiTo now uses a minimal monochrome owl mark on its boot and sleep screens and across its web branding.
- Full Book EPUB pagination now runs cooperatively after the current page appears, yielding between pages for reader input and closing SD handles between background chunks.
- The firmware is now named CrossDiTo and ships only for Xteink X4 Pro. Existing
/.crosspoint/data and legacy build symbols remain compatible. - Build, CI, release, OTA, documentation, and web-optimizer device selection now expose only the X4 Pro target.
- Long e-ink refresh waits now yield a shared SPI bus and temporarily use the lower idle CPU frequency when Wi-Fi is off, reducing SD-card stalls and power use without slowing drawing work.
- Activity navigation uses fixed-capacity ownership and image dithering uses contiguous reusable workspaces, reducing heap fragmentation during long reading sessions.
- Startup and render-task diagnostics now report framebuffer memory and the lowest observed render-task stack headroom.
Fixed
- X4 Pro EPUB page turns now use the verified pre-roadmap row-band composition and original controller start/finish sequence; the experimental controller strip and rectangular-update paths were removed after hardware testing showed cumulative displaced-page fragments and ghosting.
- Returning Home from a grayscale reader now performs one clean refresh, clearing reader text residue without slowing later Home interactions.
- X4 Pro UI changes now stay on the controller-safe full-frame update path, with the unused regional hash table and native-window dispatch removed.
- Returning from a book no longer shows the Home carousel loading bar merely because reading progress or statistics changed. The first run after this cache-format change performs one expected rebuild.
- X4 Pro frontlight PWM now remains continuous through automatic light sleep, preventing the light from flashing after the reader becomes idle.
- Lyra Carousel swipes now advance exactly one book instead of sometimes selecting a side cover on touch-down and advancing again on release.
- X4 Pro diagnostic DIO builds now pin the matching Arduino/ESP-IDF library variant, preventing cached QIO and automatic power settings from leaking into an otherwise safe image.
- X4 Pro touch wake now follows the GT911's active-low interrupt and retains a slow recovery poll, avoiding constant idle I2C traffic without losing a tap if an edge is missed.
- Quick Resume now restores the current EPUB page in memory after silent chapter indexing, preventing a stale or blank page on the next partial refresh.
- EPUBs with unusually large manifests now build their item lookup in bounded chunks and verify full item IDs, avoiding arena exhaustion and hash-collision mix-ups.
- Touch-down actions no longer leak the same finger lift into the next screen; touch context menus, keyboard redraws, and the X4 Pro Home-key hold remain reliable across activity changes and reader touch settings.
- Long-press Power dark-mode shortcuts now toggle only once, dictionary word selection remains visible in dark mode, and theme changes are synchronized with rendering.
- KOReader Sync and OPDS use the reader-safe render stack, while Nearby Stats Sync now handles reconnect timing, duplicate packets, and mismatched acknowledgements safely.
- Full Book indexing no longer leaves a blank screen durin...