1.4.1
72
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
0d4c9ab91b | Bump version to 1.4.1 | ||
|
|
6e8dbd7f23 |
chore: Update version to 1.4.0 (#2283)
Compile Release / build-release (push) Canceled after 0s
|
||
|
|
34e923d722 | chore: Pin PNGdec lib_dep to 1.1.6 (#2154) | ||
|
|
6dbfc29c7e | test: Migrate unit tests to gtest, integrate with CI (#2144) | ||
|
|
c44555007b |
feat(settings): modify "Page as Sleep Screen" to "Quick Resume" options (#2089)
## Summary **What is the goal of this PR?** Adds a clearer Quick Resume sleep-screen flow. The previous “Page as Sleep Screen” behavior is now exposed as a dedicated `Sleep Screen > Quick Resume `option, with the timeout-only behavior controlled by a renamed `Quick Resume on Timeout `setting. **What changes are included?** - Adds `Quick Resume` as a new `Sleep Screen` option. - Renames the old `Page as Sleep Screen` setting to `Quick Resume on Timeout`. - Changes that setting’s choices from `Never / After Timeout / Always` to `OFF / ON`. - Makes `Quick Resume on Timeout = ON` equivalent to the old `After Timeout` behavior. - Makes `Sleep Screen > Quick Resume` equivalent to the old `Always` behavior. - Automatically forces `Quick Resume on Timeout` to `ON` when `Sleep Screen` is set to `Quick Resume`. - Renames internal setting references from `seamlessSleepScreen` to `quickResumeSleepScreen`. - Updates translations for the renamed setting label. **Additional Context** - This is mostly a settings/labeling restructure around existing behavior, not a new rendering path. - The runtime quick-resume behavior still uses the existing saved framebuffer / last-screen sleep flow. - Review focus areas: - Sleep entry behavior from manual sleep vs timeout sleep. - The automatic dependency where selecting `Sleep Screen > Quick Resume` sets `Quick Resume on Timeout` to `ON`. --- ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? _**< YES >**_ --- **New `Quick Resume` option for `Sleep Screen` will automatically set `Quick Resume on Timeout` to `ON`**: <img width="480" height="800" alt="quick resume" src="https://github.com/user-attachments/assets/94c553fd-a122-47a8-add9-f29694f55566" /> **Example where a different sleep screen setting like `Cover` can be used in combination with the `Quick Resume on Timeout` setting**: <img width="480" height="800" alt="cover + quick resume" src="https://github.com/user-attachments/assets/dd18ce18-230b-4b78-808b-ac85f5e7d5d8" /> |
||
|
|
938ca3fac1 |
chore: Update version to 1.3.0 (#1827)
## Summary This release adds SD card fonts — the most-requested feature since launch — brings the X3 to first-class status, redesigns the on-screen keyboard, overhauls OPDS, and ships SD-card firmware updates. 144 changes from 53 contributors, 32 of whom are new to the project. **🔠 SD Card Fonts** Custom fonts are here. A complete font subsystem lets you install and use fonts beyond the three built-in families. A new `.cpfont` binary format packs multiple styles (regular, bold, italic, bold-italic) into a single file per size, with on-demand glyph loading from the SD card. A two-pass prewarm renderer bulk-reads glyphs per page, achieving near-flash performance for Latin text and viable CJK rendering. Fonts can be downloaded over WiFi directly from the device, uploaded via the web interface, or copied manually to the SD card. The build pipeline ships a 17-family font library (serif, sans, mono, accessibility) with CI distribution via a dedicated crosspoint-fonts repository. As a bonus, CJK characters no longer get spurious hyphens at line breaks, and an advance-table cache eliminates 30+ second stalls during CJK section indexing. **📱 X3 Comes of Age** The X3 graduates from initial bring-up to a proper target. Grayscale antialiasing is sharper, EPUB images render correctly, OTA updates work, and sleep screen dimensions are dialed in. The headline addition: gyroscope-based tilt page turning via the QMI8658 IMU — tilt the device to turn pages hands-free. SD-card firmware update support and X3 bootloader compatibility mean users can update without a USB connection. **⌨️ Redesigned On-Screen Keyboard** The keyboard has been completely redesigned with improved layout, better key feedback, and a fix for the space key barely moving the cursor. Text entry across WiFi setup, OPDS search, and KOSync login is noticeably smoother. **👁️ Focus Reading** A new reading mode bolds the initial characters of each word (similar to Bionic Reading) to create artificial fixation points, helping improve reading speed and focus. The bolding ratio is 45%, with a minimum of 1 character and a maximum of 9, applied dynamically during indexing. **📚 OPDS Overhaul** OPDS gains in-catalog search with next/prev page navigation, support for multiple servers, correct handling of relative paths and query parameters (fixing CopyParty compatibility), and KOReader-compatible download filenames. **🔤 Text Rendering Refinements** Combining marks (diacritics) now use font metrics for positioning instead of heuristics, proportional numeral spacing is supported, and differential rounding eliminates uneven inter-glyph gaps. Hyphenation now recognizes ISO 639-2 language codes, nested block-level CSS styles are tracked correctly, and horizontal CSS insets are capped at 2em to prevent runaway margins. Bookerly has been replaced with Noto Serif for licensing reasons. **🎨 New Theme: RoundedRaff** A new rounded theme joins the theme picker, with fixes for sleep cover crop grid artifacts. **🔋 Battery & Power** Battery percentage smoothing on the X4 eliminates jittery readings. A short press on the power button can be set to trigger a manual screen refresh — handy for clearing ghosting. **📶 WiFi & Networking** WiFi connections now self-heal from transient drops without manual intervention, and a dBm signal strength indicator appears during web server sessions. WiFi networks can be edited directly from the web UI. **🔄 KOSync** Reading position sync is significantly more accurate. The old character-offset approach frequently landed on the wrong paragraph after syncing between devices — the new xpath-based mapping syncs at the paragraph level, matching KOReader's own behavior. A separate fix switches the HTTP layer to `esp_http_client`, and the reader now releases ~65KB of EPUB heap before the TLS handshake — together these eliminate the out-of-memory crashes that plagued KOSync on large books. **🛡️ Stability** Two memory leaks patched, a wild pointer crash in JPEGDEC MCU_SKIP handling fixed, boot loops with large XTC files eliminated, legacy XTC headers supported, the OTA updater now streams GitHub release JSON instead of buffering it in RAM, and a JPEG downscaler y-axis scale factor bug is corrected. **🌐 Languages** Slovenian is new. Russian, Ukrainian, Swedish, Italian, and Spanish translations received significant updates. --- Also in this release: **SD-card firmware updates without USB**, **file extensions in the file browser**, **full path bar navigation**, **end-of-book navigation improvements**, **XTC status bar**, **smarter "Cover + Custom" sleep screens**, **set sleep cover from the BMP viewer**, **orientation-aware popups**, **page turn buttons that follow orientation**, **long-press delete for directories**, **context-aware screenshot filenames with book title**, **crash reason displayed on boot**, **empty line rendering in the TXT reader**, **wallpaper recency buffer to prevent clustering**, **font family deletion from the device**, **next/prev labels in the BMP viewer**, **non-breaking space justification fix**, **README guidance for USB-locked third-party Xteink units**, and a long tail of web UI polish, i18n memory optimizations, and code quality improvements. ## What's Changed ### Features * feat: add SD card font support with on-device download and web management by @adriancaruana, @znelson, @itsthisjustin, @jpirnay, and @mcrosson * feat: Initial support for the x3 by @itsthisjustin in https://github.com/crosspoint-reader/crosspoint-reader/pull/875 * feat: X3 grayscale antialiasing improvements by @juicecultus in https://github.com/crosspoint-reader/crosspoint-reader/pull/1607 * feat: X3 gyroscope-based tilt page turning via QMI8658 IMU by @juicecultus in https://github.com/crosspoint-reader/crosspoint-reader/pull/1636 * feat(update): SD-card firmware update + X3 bootloader compatibility by @eunchurn in https://github.com/crosspoint-reader/crosspoint-reader/pull/1786 * feat: self-heal from transient WiFi loss, add dBm indicator during WebServerActivity by @jeremydk in https://github.com/crosspoint-reader/crosspoint-reader/pull/1780 * feat: edit wifi networks in webui by @osteotek in https://github.com/crosspoint-reader/crosspoint-reader/pull/1743 * feat: add OPDS search support & next/prev page navigation by @rxmmah in https://github.com/crosspoint-reader/crosspoint-reader/pull/1462 * feat: Support for multiple OPDS servers by @osteotek in https://github.com/crosspoint-reader/crosspoint-reader/pull/1209 * feat: Adjust Navigation at End of Book by @nscheung in https://github.com/crosspoint-reader/crosspoint-reader/pull/1425 * feat: Display file extensions in File Browser by @CaptainFrito in https://github.com/crosspoint-reader/crosspoint-reader/pull/1019 * feat: show full path bar in file browser by @zgredex in https://github.com/crosspoint-reader/crosspoint-reader/pull/1411 * feat: enable manual screen refresh on power button short press by @bdeshi in https://github.com/crosspoint-reader/crosspoint-reader/pull/1626 * feat: Rework "Cover + Custom" sleep screens to show covers only when currently reading by @iandchasse in https://github.com/crosspoint-reader/crosspoint-reader/pull/1256 * feat: Set sleep cover from BMP viewer by @el in https://github.com/crosspoint-reader/crosspoint-reader/pull/1104 * feat: show crash reason on boot by @ngxson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1453 * feat: Support for proportional numeral spacing by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1414 * feat: add orientation-aware popups for reader activities by @mrtnvgr in https://github.com/crosspoint-reader/crosspoint-reader/pull/1428 * feat: smooth battery percentage for x4 by @jonvex in https://github.com/crosspoint-reader/crosspoint-reader/pull/1635 * feat: context-aware screenshot filenames with book title by @jonstieglitz in https://github.com/crosspoint-reader/crosspoint-reader/pull/1589 * feat(theme): add roundedraff theme and fix sleep cover crop grid artifacts by @bunsoootchi in https://github.com/crosspoint-reader/crosspoint-reader/pull/918 * feat: Page turn button orientation change by @mchuck in https://github.com/crosspoint-reader/crosspoint-reader/pull/1069 * feat: Status bar for XTC files by @leecming82 in https://github.com/crosspoint-reader/crosspoint-reader/pull/1849 * feat: enhance long press action to delete both files and directories by @WuTofu in https://github.com/crosspoint-reader/crosspoint-reader/pull/1803 * feat: Added Slovenian translation by @thehijacker in https://github.com/crosspoint-reader/crosspoint-reader/pull/1551 * feat: focus reading by @vjapolitzer in https://github.com/crosspoint-reader/crosspoint-reader/pull/1670 * feat: add next / prev labels to bmp viewer by @Telemaniaka in https://github.com/crosspoint-reader/crosspoint-reader/pull/1852 * feat: add font family deletion functionality by @WuTofu in https://github.com/crosspoint-reader/crosspoint-reader/pull/1919 * feat: separate into "Download All" and "Update All" in font manager by @WuTofu in https://github.com/crosspoint-reader/crosspoint-reader/pull/1955 * feat: verify CRC32 checksum for font files by @WuTofu in https://github.com/crosspoint-reader/crosspoint-reader/pull/1904 * feat: increase default weight of Bitter font for improved rendering by @uxjulia in https://github.com/crosspoint-reader/crosspoint-reader/pull/1922 * feat: allow unnamed intervals by @steka in https://github.com/crosspoint-reader/crosspoint-reader/pull/1903 ### Fixes * fix: epub images not rendering correctly on x3 by @itsthisjustin in https://github.com/crosspoint-reader/crosspoint-reader/pull/1572 * fix: OTA update on x3 and progress bar on x4 and x3 by @itsthisjustin in https://github.com/crosspoint-reader/crosspoint-reader/pull/1805 * fix: boot looping when opening large XTC files by @itsthisjustin in https://github.com/crosspoint-reader/crosspoint-reader/pull/1648 * fix: Wild pointer crash in JPEGDEC MCU_SKIP handling by @itsthisjustin in https://github.com/crosspoint-reader/crosspoint-reader/pull/1627 * fix: two small memory leaks by @Uri-Tauber in https://github.com/crosspoint-reader/crosspoint-reader/pull/1628 * fix: use esp_http_client for KOSync to prevent TLS OOM on ESP32-C3 by @trilwu in https://github.com/crosspoint-reader/crosspoint-reader/pull/1381 * fix: Read GH release JSON as stream in OTA updater by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1810 * fix: support legacy XTC file headers where pageTableOffset=48 by @uxjulia in https://github.com/crosspoint-reader/crosspoint-reader/pull/1816 * fix: Use font metrics for combining mark positioning by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1310 * fix: Use differential rounding for consistent inter-glyph spacing by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1413 * fix: Support hyphenation for EPUBs using ISO 639-2 language codes by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1461 * fix: Track block style stack for nested styles by @daveallie in https://github.com/crosspoint-reader/crosspoint-reader/pull/1582 * fix: cap per-side horizontal CSS inset at 2em by @rhoopr in https://github.com/crosspoint-reader/crosspoint-reader/pull/1694 * fix: increase loadable epub size by @CSCMe in https://github.com/crosspoint-reader/crosspoint-reader/pull/1638 * fix: Switch to xpath map for paragraph level syncing in KOSync by @itsthisjustin in https://github.com/crosspoint-reader/crosspoint-reader/pull/1686 * fix: free Epub RAM and simplify KOSync navigation via ActivityManager by @wylanswets in https://github.com/crosspoint-reader/crosspoint-reader/pull/1860 * fix: improve KOSync bidirectional position matching accuracy by @wylanswets in https://github.com/crosspoint-reader/crosspoint-reader/pull/1897 * fix: Fix failing very first wifi connection attempt by @jpirnay in https://github.com/crosspoint-reader/crosspoint-reader/pull/1521 * fix: avoid skipping chapter after screenshot by @Mraulio in https://github.com/crosspoint-reader/crosspoint-reader/pull/1625 * fix: back navigation from BMPViewer by @Telemaniaka in https://github.com/crosspoint-reader/crosspoint-reader/pull/1597 * fix: Fix ghosting on exit of BMPViewer by @jpirnay in https://github.com/crosspoint-reader/crosspoint-reader/pull/1432 * fix: make footnotes consider orientation for gutters by @Telemaniaka in https://github.com/crosspoint-reader/crosspoint-reader/pull/1665 * fix: footnote link text by @steka in https://github.com/crosspoint-reader/crosspoint-reader/pull/1666 * fix: Erroneous navigation with long filenames in footnote links by @CSCMe in https://github.com/crosspoint-reader/crosspoint-reader/pull/1723 * fix: prevent wallpaper clustering with 16-entry recency buffer by @zgredex in https://github.com/crosspoint-reader/crosspoint-reader/pull/1606 * fix: webserver /delete API backward compatibility by @DianaNites in https://github.com/crosspoint-reader/crosspoint-reader/pull/1475 * fix: relative opds paths and query param with copyparty by @philips in https://github.com/crosspoint-reader/crosspoint-reader/pull/1535 * fix: use same file name as KOReader for OPDS downloads by @spfenwick in https://github.com/crosspoint-reader/crosspoint-reader/pull/1286 * fix: pressing space barely moves input cursor (#1729) by @pablohc in https://github.com/crosspoint-reader/crosspoint-reader/pull/1733 * fix: keyboard feedback #1644 by @pablohc in https://github.com/crosspoint-reader/crosspoint-reader/pull/1697 * fix: pluralize folder/file counts correctly in file list summary by @fain182 in https://github.com/crosspoint-reader/crosspoint-reader/pull/1701 * fix: rendering bug of scrollbar in RoundedRaff theme by @Uri-Tauber in https://github.com/crosspoint-reader/crosspoint-reader/pull/1814 * fix: two roundedraff bugs by @Uri-Tauber in https://github.com/crosspoint-reader/crosspoint-reader/pull/1851 * fix: overlap in download font list layout by @pablohc in https://github.com/crosspoint-reader/crosspoint-reader/pull/1900 * fix: remove duplicate 'Download Fonts' menu entry and improve navigation by @zgredex in https://github.com/crosspoint-reader/crosspoint-reader/pull/1893 * fix: Add common ligatures to SD font conversion ranges by @znelson * fix: capture instantiateVariableFont return value by @jpirnay in https://github.com/crosspoint-reader/crosspoint-reader/pull/1911 * fix: Roundraff theme home menu offset with no recent books by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1845 * fix: Missing navigation button labels in Roundedraff theme by @Uri-Tauber in https://github.com/crosspoint-reader/crosspoint-reader/pull/1905 * fix: gracefully resolve fonts missing variants by @Uri-Tauber in https://github.com/crosspoint-reader/crosspoint-reader/pull/1921 * fix: distribute justifyExtra to non-breaking space tokens by @prawnwhoyawns in https://github.com/crosspoint-reader/crosspoint-reader/pull/1783 * fix: remove percent rendering from activities by @mcrosson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1901 * fix: Restore performance in fontconvert_sdcard.py by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1924 * fix: Prepare SD card font caches from txt reader by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1973 * fix: make script help paths lightweight by @sabraman in https://github.com/crosspoint-reader/crosspoint-reader/pull/1937 * fix: Replaced Bookerly with Noto Serif for licensing reasons by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1736 * fix: incorrect y-axis scale factor in jpeg nearest-neighbor downscaler by @WuTofu in https://github.com/crosspoint-reader/crosspoint-reader/pull/1807 * fix: display empty lines in txt reader by @Uri-Tauber in https://github.com/crosspoint-reader/crosspoint-reader/pull/1841 * fix: short-press power action triggered after screenshot combo release by @pablohc in https://github.com/crosspoint-reader/crosspoint-reader/pull/1853 * fix: correct Russian auto-turn translations by @a-ignatev in https://github.com/crosspoint-reader/crosspoint-reader/pull/1566 * fix: Update Ukrainian translations for footnotes (issue 1409) by @mirus-ua in https://github.com/crosspoint-reader/crosspoint-reader/pull/1585 * fix: missing swedish translations by @steka in https://github.com/crosspoint-reader/crosspoint-reader/pull/1667 * fix: Add swedish keyboard translations by @steka in https://github.com/crosspoint-reader/crosspoint-reader/pull/1726 * fix: swedish translations by @steka in https://github.com/crosspoint-reader/crosspoint-reader/pull/1762 * fix: swedish translation by @steka in https://github.com/crosspoint-reader/crosspoint-reader/pull/1829 * fix: swedish translation by @steka in https://github.com/crosspoint-reader/crosspoint-reader/pull/1888 * fix: Polish translation by @th0m4sek in https://github.com/crosspoint-reader/crosspoint-reader/pull/1909 * fix: Ukrainian-translation by @KymAndriy in https://github.com/crosspoint-reader/crosspoint-reader/pull/1946 * fix: Ukrainian translation by @KymAndriy in https://github.com/crosspoint-reader/crosspoint-reader/pull/1939 * fix: python requirements files by @steka in https://github.com/crosspoint-reader/crosspoint-reader/pull/1768 * fix: missing requirement by @steka in https://github.com/crosspoint-reader/crosspoint-reader/pull/1896 * fix: Use LOG_ macros in loc functions by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1794 ### Internal * refactor: redesign on-screen keyboard by @pablohc in https://github.com/crosspoint-reader/crosspoint-reader/pull/1644 * refactor: replace picojpeg with JPEGDEC for cover art conversion by @jpirnay in https://github.com/crosspoint-reader/crosspoint-reader/pull/1517 * refactor: Refactor drawArc / fillArc for faster execution by @jpirnay in https://github.com/crosspoint-reader/crosspoint-reader/pull/1540 * perf: replace i18n pointer tables with offset tables, strip unused strings by @jpirnay in https://github.com/crosspoint-reader/crosspoint-reader/pull/1408 * refactor: Store only unique localization strings in offset buffers by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1802 * refactor: Move language setting into JSON settings by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1796 * refactor: Use C++20 'requires' in ActivityResult constructor by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1420 * refactor: Use default member initializers for JpegContext and PngContext by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1435 * refactor: logPrintf and predefined log level strings by @CSCMe in https://github.com/crosspoint-reader/crosspoint-reader/pull/1546 * refactor: RAII scoped open/close for ZipFile by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1433 * refactor: Deduplicated BMP header writing in Xtc by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1439 * refactor: Added shared XML parser teardown helper by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1438 * refactor: Removed redundant FsFile close() calls by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1434 * refactor: Deduplicate battery drawing code and fix Lyra charging indicator by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1437 * refactor: Deduplicate Roundraff battery drawing by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1847 * refactor: Simplify sort in GfxRenderer::fillPolygon by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1817 * refactor: Avoid vector for page turn rates list by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1818 * refactor: Use std::size instead of sizeof/sizeof by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1819 * refactor: Use fixed-size integers for BookMetadataCache data by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1844 * refactor: Simplify isReaderActivity bookkeeping by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1838 * refactor: Simplify XtcReaderActivity with detectPageTurn by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1837 * refactor: change ukrainian translation to adaptation and add missing lines by @KymAndriy in https://github.com/crosspoint-reader/crosspoint-reader/pull/1828 * chore: drop JPEGDEC patch in favour of upstream fix by @martinbrook in https://github.com/crosspoint-reader/crosspoint-reader/pull/1465 * chore: clang-format.fix.ps1 script: Add .venv to list of path exclusions by @jpirnay in https://github.com/crosspoint-reader/crosspoint-reader/pull/1515 * chore: Updating sleep screen dimensions for X3 by @jensechu in https://github.com/crosspoint-reader/crosspoint-reader/pull/1688 * chore: Clarify X3 RTC in SCOPE.md by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1687 * chore: Improved Italian translations by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1685 * chore: change ukrainian translation to adaptation by @KymAndriy in https://github.com/crosspoint-reader/crosspoint-reader/pull/1684 * chore: Update spanish.yaml by @mvidelatraduc in https://github.com/crosspoint-reader/crosspoint-reader/pull/1717 * chore: One Italian translation tweak by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1718 * chore: git pre-commit hook for format fix by @osteotek in https://github.com/crosspoint-reader/crosspoint-reader/pull/1730 * chore: Update SDK to fork in CrossPoint org by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1836 * chore: Added RAM to firmware_size_history.py script by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1830 * chore: Updated docs to reflect DESTRUCTOR_CLOSES_FILE=1 by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1878 * feat: cap compressed group size at 64 KB by @jpirnay in https://github.com/crosspoint-reader/crosspoint-reader/pull/1913 * fix: build-script bug fixes for fontconvert{,_sdcard}.py by @jpirnay in https://github.com/crosspoint-reader/crosspoint-reader/pull/1910 * feat: include short SHA in CROSSPOINT_VERSION by @osteotek in https://github.com/crosspoint-reader/crosspoint-reader/pull/1728 * feat: show long branch names by @steka in https://github.com/crosspoint-reader/crosspoint-reader/pull/1727 * feat: enable pio build cache by @Uri-Tauber in https://github.com/crosspoint-reader/crosspoint-reader/pull/1769 * style: put page name first in browser titles by @fain182 in https://github.com/crosspoint-reader/crosspoint-reader/pull/1703 * style: unify page headers across web UI by @fain182 in https://github.com/crosspoint-reader/crosspoint-reader/pull/1702 * style: move file type badges into Type column by @fain182 in https://github.com/crosspoint-reader/crosspoint-reader/pull/1793 * style: align action buttons vertically with page title by @fain182 in https://github.com/crosspoint-reader/crosspoint-reader/pull/1795 * docs: Update README with firmware flashing instructions by @ryneches in https://github.com/crosspoint-reader/crosspoint-reader/pull/1654 * docs: fix typos by @kianmeng in https://github.com/crosspoint-reader/crosspoint-reader/pull/1705 * docs: update README.md to reflect the current state of crosspoint by @Uri-Tauber in https://github.com/crosspoint-reader/crosspoint-reader/pull/1812 * docs: Add documentation for USB-locked Xteink devices by @itsthisjustin in https://github.com/crosspoint-reader/crosspoint-reader/pull/1990 * docs: expand first use of OPDS acronym and provide a wikipedia link by @sizezero in https://github.com/crosspoint-reader/crosspoint-reader/pull/1824 * docs: fix KOReader sync guide link by @sabraman in https://github.com/crosspoint-reader/crosspoint-reader/pull/1930 * docs: fix hyphenation updater script name by @sabraman in https://github.com/crosspoint-reader/crosspoint-reader/pull/1931 * fix: sd font download urls in docs by @mcrosson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1945 * fix: sd font folder paths in documentation by @mcrosson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1944 * chore: Add verbose mode to build-sd-fonts.py by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1923 ## New Contributors * @a-ignatev made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/1566 * @CSCMe made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/1546 * @thehijacker made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/1551 * @Telemaniaka made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/1597 * @Mraulio made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/1625 * @rxmmah made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/1462 * @bdeshi made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/1626 * @DianaNites made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/1475 * @ryneches made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/1654 * @zgredex made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/1411 * @jonvex made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/1635 * @KymAndriy made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/1684 * @jensechu made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/1688 * @kianmeng made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/1705 * @philips made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/1535 * @fain182 made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/1701 * @mvidelatraduc made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/1717 * @bunsoootchi made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/918 * @rhoopr made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/1694 * @spfenwick made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/1286 * @trilwu made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/1381 * @jonstieglitz made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/1589 * @uxjulia made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/1816 * @mchuck made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/1069 * @sizezero made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/1824 * @leecming82 made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/1849 * @jeremydk made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/1780 * @WuTofu made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/1803 * @wylanswets made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/1860 * @sabraman made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/1930 * @prawnwhoyawns made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/1783 * @mcrosson made their first contribution as co-author on SD card font support **Full Changelog**: https://github.com/crosspoint-reader/crosspoint-reader/compare/1.2.0...release/1.3.0 --------- Co-authored-by: Justin Mitchell <justin@jmitch.com> Co-authored-by: Chun Ming Lee <95391408+leecming82@users.noreply.github.com> Co-authored-by: Uri Tauber <uritaube@gmail.com> |
||
|
|
ba4a361d64 |
fix: OTA update on x3 and progress bar on x4 and x3 (#1805)
Co-authored-by: Justin Mitchell <1875695+itsthisjustin@users.noreply.github.com> |
||
|
|
33386953d9 |
feat: enable pio build cache (#1769)
## Summary * **What is the goal of this PR?** Enables the PlatformIO build cache to speed up compilation. ## Additional Context Significant improvement when switching branches, as unchanged files won't need re-compilation. See [Docs](https://docs.platformio.org/en/latest/projectconf/sections/platformio/options/directory/build_cache_dir.html). Note: May need to manually delete .cache folder if updating toolchain or framework. --- ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? _**< NO >**_ |
||
|
|
02822e01b3 |
feat: include short SHA in CROSSPOINT_VERSION (#1728)
## Summary * Includes short SHA in version string for better version tracking, so it looks like `1.1.0-dev-feat-kosync-xpath-05c6cf8` * Closes https://github.com/crosspoint-reader/crosspoint-reader/issues/1247 --- ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? _**< YES >**_ |
||
|
|
83cd96bc2f |
fix: Wild pointer crash in JPEGDEC MCU_SKIP handling (#1627)
Adds a PlatformIO pre-build script to patch JPEGDEC library. When decoding progressive JPEGs with AC coefficients, MCU_SKIP (-8) causes array index 0xFFFFF8, creating a wild pointer ~33MB past the sMCUs array. The patch redirects pMCU to sMCUs[0] when MCU_SKIP is active, preventing store-access faults while maintaining correct behavior for JPEG_SCALE_EIGHTH decoding. Devices with larger framebuffers (like the x3) (792×528 = 52,272 bytes vs 800×480 = 48,000 bytes) have less free heap, shifting the allocation and changing where the wild pointer lands. Commit 8628297 guarded the DC coefficient write (pMCU[0]) with if (iMCU >= 0), which prevents crashes for progressive JPEGs whose first scan is DC-only (iScanEnd == 0). However, if the first scan includes AC coefficients (iScanEnd > 0), the AC decode loop still writes through the wild pointer and crashes. |
||
|
|
b898d53f7b |
chore: drop JPEGDEC patch in favour of upstream fix (#1465)
## Summary The progressive JPEG fixes (AC table skip, MCU_SKIP guard) from PR #1136 have been fixed upstream in bitbank2/JPEGDEC@8628297. Pin to that commit and remove the pre-build patch script. ## Additional Context Tested on Strange Pictures epub --- ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? _**< PARTIALLY >**_ |
||
|
+7 |
e6c6e72a24 |
chore(release): 1.2.0 Release Candidate (#1483)
Compile Release / build-release (push) Canceled after 0s
## Summary It's been a little while since the last release, but the community has been incredibly busy. With 155 changes from 48 contributors (30 of which were new!), there was a lot to cover. Here are some of the highlights: **🔤 Kerning, Ligatures, and Font Improvements** Text rendering gets a significant upgrade with proper kerning and ligature support, fixed-point fractional x-advance for more accurate character placement, and font compression improvements that reduce flash usage. **📝 Footnotes** Footnote anchor navigation lets you select a footnote reference and jump to the footnote text, then jump back. Slim footnotes support is also available for books that use inline footnotes. **📖 EPUB Optimizer** A new integrated EPUB optimizer can clean up and reprocess books for better compatibility with the reader, directly from the device. **🔋 Battery Charging Indicator** You can now see when your device is actively charging, with a visual indicator on the battery icon. **💾 Crash Diagnostics** When something goes wrong, the firmware now dumps a crash report to the SD card — even without USB plugged in. This makes it much easier to report and diagnose issues. **🌐 New Languages** The community continues to expand language support. New in this release: Turkish, Danish, Finnish, Polish, Dutch, Belarusian, Italian, Ukrainian, Romanian, Catalan, Vietnamese, and Kazakh — along with significant improvements to existing translations. **📂 File Management** Multi-select file deletion, BMP image viewer in the file browser, hidden directory browsing, and long-click file deletion from the file browser. **⚡ Performance** Under the hood, text layout switched from `std::list` to `std::vector`, HTML entity lookups are now O(log(n)), font rendering is faster, image decode is 5-20% faster with per-pixel overhead eliminated, and multiple string allocation hot paths were eliminated. Pre-indexing of the next chapter also reduces page-turn latency at chapter boundaries. --- Along with all of the above, there are many other additions including **WebDAV support**, **auto page turn**, **QR code for current page**, **split status bar settings**, **screenshot capture**, **JSON-based settings migration**, **light/dark theme groundwork**, and a long list of stability fixes and translation improvements. ## What's Changed ### Features * feat: Support for kerning and ligatures by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/873 * feat: footnote anchor navigation by @Uri-Tauber in https://github.com/crosspoint-reader/crosspoint-reader/pull/1245 * feat: slim footnotes support by @Uri-Tauber in https://github.com/crosspoint-reader/crosspoint-reader/pull/1031 * feat: integrated epub optimizer by @zgredex and @pablohc in https://github.com/crosspoint-reader/crosspoint-reader/pull/1224 * feat: battery charging indicator (mirroring PR #537) by @jpirnay in https://github.com/crosspoint-reader/crosspoint-reader/pull/1427 * feat: dump crash report to sdcard by @ngxson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1145 * feat: Implement silent pre-indexing for the next chapter in EpubReaderActivity by @LSTAR1900 in https://github.com/crosspoint-reader/crosspoint-reader/pull/979 * feat: upgrade platform and support webdav by @dexif in https://github.com/crosspoint-reader/crosspoint-reader/pull/1047 * feat: Auto Page Turn for Epub Reader by @GenesiaW in https://github.com/crosspoint-reader/crosspoint-reader/pull/1219 * feat: enhance file deletion functionality with multi-select by @Jessica765 in https://github.com/crosspoint-reader/crosspoint-reader/pull/682 * feat: Long Click for File Deletion through File Browser by @Levrk in https://github.com/crosspoint-reader/crosspoint-reader/pull/909 * feat: Take screenshots by @el in https://github.com/crosspoint-reader/crosspoint-reader/pull/759 * feat: Current page as QR by @el in https://github.com/crosspoint-reader/crosspoint-reader/pull/1099 * feat: Download links for web server by @el in https://github.com/crosspoint-reader/crosspoint-reader/pull/1039 * feat: Added BmpViewer activity for viewing .bmp images in file browser by @Levrk in https://github.com/crosspoint-reader/crosspoint-reader/pull/887 * feat: User setting for image display by @jpirnay in https://github.com/crosspoint-reader/crosspoint-reader/pull/1291 * feat: Show hidden directories in browser by @jpirnay in https://github.com/crosspoint-reader/crosspoint-reader/pull/1288 * feat: Prefer ".sleep" over "sleep" for custom image directory by @jpirnay in https://github.com/crosspoint-reader/crosspoint-reader/pull/948 * feat: Allow a local configuration file for custom compiles by @jpirnay in https://github.com/crosspoint-reader/crosspoint-reader/pull/879 * feat: Migrate binary settings to json by @jpirnay in https://github.com/crosspoint-reader/crosspoint-reader/pull/920 * feat: split status bar setting by @whyte-j in https://github.com/crosspoint-reader/crosspoint-reader/pull/733 * feat: wrapped text in GfxRender, implemented in themes so far by @iandchasse in https://github.com/crosspoint-reader/crosspoint-reader/pull/1141 * feat: Themed language screen by @CaptainFrito in https://github.com/crosspoint-reader/crosspoint-reader/pull/1020 * feat: set WiFi hostname to CrossPoint-Reader-XXXXXXXXXXXX by @dexif in https://github.com/crosspoint-reader/crosspoint-reader/pull/1107 * feat: Add maxAlloc to memory information by @jpirnay in https://github.com/crosspoint-reader/crosspoint-reader/pull/1152 * feat: replace picojpeg with JPEGDEC for JPEG image decoding by @martinbrook in https://github.com/crosspoint-reader/crosspoint-reader/pull/1136 * feat: Add git branch to version information on settings screen by @jpirnay in https://github.com/crosspoint-reader/crosspoint-reader/pull/1225 * feat: sort languages in selection menu by @ariel-lindemann in https://github.com/crosspoint-reader/crosspoint-reader/pull/1071 * feat: Latin Extended-B European glyphs by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1157 * feat: Latin Extended-B European glyphs by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1167 * feat: Vietnamese glyphs support by @danoooob in https://github.com/crosspoint-reader/crosspoint-reader/pull/1147 * feat: add Turkish translation by @barbarhan in https://github.com/crosspoint-reader/crosspoint-reader/pull/1192 * feat: add full Danish translation by @hajisan in https://github.com/crosspoint-reader/crosspoint-reader/pull/1146 * feat: Add Finnish translations by @plahteenlahti in https://github.com/crosspoint-reader/crosspoint-reader/pull/1133 * feat: Add Polish Language by @th0m4sek in https://github.com/crosspoint-reader/crosspoint-reader/pull/1155 * feat: add Dutch translation by @basvdploeg in https://github.com/crosspoint-reader/crosspoint-reader/pull/1204 * feat: add Belarusian translation by @dexif in https://github.com/crosspoint-reader/crosspoint-reader/pull/1120 * feat: Add full Italian translations by @andreaturchet in https://github.com/crosspoint-reader/crosspoint-reader/pull/1144 * feat: add Ukrainian translation by @mirus-ua in https://github.com/crosspoint-reader/crosspoint-reader/pull/1065 * feat: Add Kazakh (kk) language support by @fsocietyipa in https://github.com/crosspoint-reader/crosspoint-reader/pull/1377 * feat: added Romanian strings by @ariel-lindemann in https://github.com/crosspoint-reader/crosspoint-reader/pull/987 * feat: add Catalan strings by @angeldenom in https://github.com/crosspoint-reader/crosspoint-reader/pull/1049 * feat: Make directories stand out more in local file browser: "[dir]" instead of "dir" by @jpirnay in https://github.com/crosspoint-reader/crosspoint-reader/pull/1339 * feat: Add Polish strings for commits #1219,#1169,#1031 +tweaks by @th0m4sek in https://github.com/crosspoint-reader/crosspoint-reader/pull/1227 * feat: Polish translation tweaks by @th0m4sek in https://github.com/crosspoint-reader/crosspoint-reader/pull/1193 ### Fixes * fix: Fix img layout issue / support CSS display:none for elements and images by @jpirnay in https://github.com/crosspoint-reader/crosspoint-reader/pull/1443 * fix: Overlapping battery percentage on image pages with anti-aliasing by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1452 * fix: Fix prewarm perf when a page contains many styles by @adriancaruana in https://github.com/crosspoint-reader/crosspoint-reader/pull/1451 * fix: use sleep routine from the original firmware by @ngxson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1298 * fix: Prevent line breaks on common English contractions by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1405 * fix: Build with -fno-exceptions by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1412 * fix: Reduce flash usage by cleaning up I18n translations by @steka in https://github.com/crosspoint-reader/crosspoint-reader/pull/1401 * fix: jpeg resource cleanup by @jpirnay in https://github.com/crosspoint-reader/crosspoint-reader/pull/1320 * fix: back button in settings returns to tab bar first by @Cache8063 in https://github.com/crosspoint-reader/crosspoint-reader/pull/1354 * fix: Init lastSleepImage (edge case) by @jpirnay in https://github.com/crosspoint-reader/crosspoint-reader/pull/1360 * fix: Add special handling for apostrophe hyphenation by @jpirnay in https://github.com/crosspoint-reader/crosspoint-reader/pull/1318 * fix: Fix inter-word spacing rounding error in text layout by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1311 * fix: load access fault crash by @Uri-Tauber in https://github.com/crosspoint-reader/crosspoint-reader/pull/1370 * fix: Fix bootloop logging crash by @jpirnay in https://github.com/crosspoint-reader/crosspoint-reader/pull/1357 * fix: dump crash log without usb plugged, bump release log to INFO by @ngxson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1332 * fix: avoid zip filename overflow by @jpirnay in https://github.com/crosspoint-reader/crosspoint-reader/pull/1321 * fix: Hanging indent (negative text-indent) and em-unit sizing by @jpirnay in https://github.com/crosspoint-reader/crosspoint-reader/pull/1229 * fix: Use fixed-point fractional x-advance and kerning for better text layout by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1168 * fix: use HTTPClient::writeToStream for downloading files from OPDS by @osteotek in https://github.com/crosspoint-reader/crosspoint-reader/pull/1207 * fix: make file system operations thread-safe (HalFile) by @ngxson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1212 * fix: properly implement requestUpdateAndWait() by @ngxson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1218 * fix: prevent infinite render loop in Calibre Wireless after file transfer by @pablohc in https://github.com/crosspoint-reader/crosspoint-reader/pull/1070 * fix: WiFi lifecycle and hyphenation heap defragmentation for KOReader sync by @jpirnay in https://github.com/crosspoint-reader/crosspoint-reader/pull/1151 * fix: Fix coverRendered flag by @jpirnay in https://github.com/crosspoint-reader/crosspoint-reader/pull/1154 * fix: Handle non-ASCII characters in sanitizeFilename by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1132 * fix: Update activity was missing "Back" button label by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1128 * fix: force auto-hinting for Bookerly to fix inconsistent stem widths by @adriancaruana in https://github.com/crosspoint-reader/crosspoint-reader/pull/1098 * fix: image centering bleed by @martinbrook in https://github.com/crosspoint-reader/crosspoint-reader/pull/1096 * fix: double free WebDAVHandler by @ngxson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1093 * fix: Consider extra quotation styles when hyphenating quoted words by @cbix in https://github.com/crosspoint-reader/crosspoint-reader/pull/1077 * fix: acquire power lock before sleeping by @ngxson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1125 * fix: Unify inconsistent Wi-Fi/WiFi in Czech translation by @pepastach in https://github.com/crosspoint-reader/crosspoint-reader/pull/1138 * fix: sdfat warning about redefinition of macro by @ngxson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1135 * fix: Close leaked file descriptors in SleepActivity and web server by @brbla in https://github.com/crosspoint-reader/crosspoint-reader/pull/869 * fix: Enable DESTRUCTOR_CLOSES_FILE flag by @daveallie in https://github.com/crosspoint-reader/crosspoint-reader/pull/1075 * fix: Change "UI Font Size" to "Reader Font Size" by @divinitycove in https://github.com/crosspoint-reader/crosspoint-reader/pull/1171 * fix: Hide unusable button hints when viewing empty directory by @Levrk in https://github.com/crosspoint-reader/crosspoint-reader/pull/1253 * fix: broken translations in status bar settings by @ariel-lindemann in https://github.com/crosspoint-reader/crosspoint-reader/pull/1188 * fix: clarity issue with ambiguous string `SET` by @ariel-lindemann in https://github.com/crosspoint-reader/crosspoint-reader/pull/1169 * fix: Crash (Load access fault) when indexing chapters containing characters unsupported by bold/italic font variants by @Uri-Tauber in https://github.com/crosspoint-reader/crosspoint-reader/pull/997 * fix: Increase PNGdec buffer size to support wide images by @osteotek in https://github.com/crosspoint-reader/crosspoint-reader/pull/995 * fix: Use HalPowerManager for battery percentage by @vjapolitzer in https://github.com/crosspoint-reader/crosspoint-reader/pull/1005 * fix: Fix dangling pointer by @Uri-Tauber in https://github.com/crosspoint-reader/crosspoint-reader/pull/1010 * fix: re-implementing Cover Outlines for the new Lyra Themes by @Levrk in https://github.com/crosspoint-reader/crosspoint-reader/pull/1017 * fix: use double FAST_REFRESH to prevent washout on large grey images by @martinbrook in https://github.com/crosspoint-reader/crosspoint-reader/pull/957 * fix: Fixed Image Sizing When No Width is Set by @DestinySpeaker in https://github.com/crosspoint-reader/crosspoint-reader/pull/1002 * fix: Strip unused CSS rules by @daveallie in https://github.com/crosspoint-reader/crosspoint-reader/pull/1014 * fix: continue reading card classic theme by @pablohc in https://github.com/crosspoint-reader/crosspoint-reader/pull/990 * fix: Destroy CSS Cache file when invalid by @daveallie in https://github.com/crosspoint-reader/crosspoint-reader/pull/1018 * fix: Shorten "Forget Wifi" button labels to fit on button by @lukestein in https://github.com/crosspoint-reader/crosspoint-reader/pull/1045 * fix: improve Spanish translations by @pablohc in https://github.com/crosspoint-reader/crosspoint-reader/pull/1054 * fix: Fixed book title in home screen by @DestinySpeaker in https://github.com/crosspoint-reader/crosspoint-reader/pull/1013 * fix: Fix hyphenation and rendering of decomposed characters by @jpirnay in https://github.com/crosspoint-reader/crosspoint-reader/pull/1037 * fix: Improve and add Spanish translations by @DaniPhii in https://github.com/crosspoint-reader/crosspoint-reader/pull/1338 * fix: improve and add Spanish translations by @DaniPhii in https://github.com/crosspoint-reader/crosspoint-reader/pull/1254 * fix: improve and add Swedish translations by @steka in https://github.com/crosspoint-reader/crosspoint-reader/pull/1317 * fix: Extend missing / amend existing German translations by @jpirnay in https://github.com/crosspoint-reader/crosspoint-reader/pull/1226 * fix: update french.yaml file to have a better French translation of the CFW by @Spigaw in https://github.com/crosspoint-reader/crosspoint-reader/pull/1130 * fix: added romanian translation to new strings by @ariel-lindemann in https://github.com/crosspoint-reader/crosspoint-reader/pull/1105 * fix: add missing romanian strings by @ariel-lindemann in https://github.com/crosspoint-reader/crosspoint-reader/pull/1187 * fix: add new Ukrainian translation line for STR_SCREENSHOT_BUTTON by @mirus-ua in https://github.com/crosspoint-reader/crosspoint-reader/pull/1149 * fix: Dutch translation prefix correction by @basvdploeg in https://github.com/crosspoint-reader/crosspoint-reader/pull/1223 * fix: Small typo in i18n.md regarding C++ identifiers by @victordomingos in https://github.com/crosspoint-reader/crosspoint-reader/pull/1210 * fix: typo in USER_GUIDE.md by @arnaugamez in https://github.com/crosspoint-reader/crosspoint-reader/pull/1036 * fix: add missing keyboard metrics to Lyra3CoversTheme by @dexif in https://github.com/crosspoint-reader/crosspoint-reader/pull/1101 ### Internal * perf: font-compression improvements by @adriancaruana in https://github.com/crosspoint-reader/crosspoint-reader/pull/1056 * perf: Improve font drawing performance by @jpirnay in https://github.com/crosspoint-reader/crosspoint-reader/pull/978 * perf: Replace std::list with std::vector in text layout by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1038 * perf: Optimize HTML entities lookup to O(log(n)) by @Uri-Tauber in https://github.com/crosspoint-reader/crosspoint-reader/pull/1194 * perf: UITheme::getMetrics const and const-ref usage by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1094 * perf: Avoid creating strings for file extension checks by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1303 * perf: Eliminate per-pixel overheads in image rendering by @martinbrook in https://github.com/crosspoint-reader/crosspoint-reader/pull/1293 * perf: Update github actions for optimal performance with pioarduino by @Jason2866 in https://github.com/crosspoint-reader/crosspoint-reader/pull/1080 * style: Phase 1 - Simple light dark themes by @cdmoro in https://github.com/crosspoint-reader/crosspoint-reader/pull/1006 * refactor: implement ActivityManager by @ngxson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1016 * refactor: Simplify REPLACEMENT_GLYPH fallback by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1119 * refactor: Simplify new setting introduction by @jpirnay in https://github.com/crosspoint-reader/crosspoint-reader/pull/1086 * refactor: Use std binary search algorithms for font lookups by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1202 * refactor: rename MyLibrary to FileBrowser by @osteotek in https://github.com/crosspoint-reader/crosspoint-reader/pull/1260 * refactor: Avoid rebuilding cache path strings by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1300 * refactor: reader utils by @Uri-Tauber in https://github.com/crosspoint-reader/crosspoint-reader/pull/1329 * chore: Remove miniz and modularise inflation logic by @daveallie in https://github.com/crosspoint-reader/crosspoint-reader/pull/1073 * chore: Resolve several build warnings by @daveallie in https://github.com/crosspoint-reader/crosspoint-reader/pull/1076 * chore: Removed generated language headers by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1156 * chore: Added generated lang headers to .gitignore by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1158 * chore: remove redundant xTaskCreate by @ngxson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1264 * chore: Removed unused PlatformIO include directory placeholder by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1417 * chore: micro-optimisation: early exit on fillUncompressedSizes by @jpirnay in https://github.com/crosspoint-reader/crosspoint-reader/pull/1322 * chore: change label while on settings tab actions by @jpirnay in https://github.com/crosspoint-reader/crosspoint-reader/pull/1325 * chore: add firmware size history script by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1235 * chore: Add powershell script for clang-formatting by @jpirnay in https://github.com/crosspoint-reader/crosspoint-reader/pull/1472 * chore: Removed unused ConfirmationActivity member by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1234 * chore: Update russian.yaml by @madebyKir in https://github.com/crosspoint-reader/crosspoint-reader/pull/1198 * chore: new Ukrainian translation lines by @mirus-ua in https://github.com/crosspoint-reader/crosspoint-reader/pull/1199 * chore: new Ukrainian localization strings by @mirus-ua in https://github.com/crosspoint-reader/crosspoint-reader/pull/1270 * chore: Polish localization for STR_DELETE by @JonaszPotoniec in https://github.com/crosspoint-reader/crosspoint-reader/pull/1323 * chore: Image settings Polish localization by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1299 * chore: add missing Catalan strings by @angeldenom in https://github.com/crosspoint-reader/crosspoint-reader/pull/1302 * chore: add missing translations for Romanian by @ariel-lindemann in https://github.com/crosspoint-reader/crosspoint-reader/pull/1265 * chore: Add Portuguese (Portugal) translator to the list by @victordomingos in https://github.com/crosspoint-reader/crosspoint-reader/pull/1211 * chore: Reduce flash usage by cleaning up I18n translations by @steka in https://github.com/crosspoint-reader/crosspoint-reader/pull/1401 * docs: Add lightweight contributor onboarding documentation by @bilalix in https://github.com/crosspoint-reader/crosspoint-reader/pull/894 * docs: ActivityManager migration guide by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1222 * docs: USER_GUIDE.md update for 1.1.0 by @divinitycove in https://github.com/crosspoint-reader/crosspoint-reader/pull/1108 * docs: add quick KOReader sync setup guide by @wjhrdy in https://github.com/crosspoint-reader/crosspoint-reader/pull/1181 * docs: image support marked as completed by @ariel-lindemann in https://github.com/crosspoint-reader/crosspoint-reader/pull/1008 * feat: aiagent context definition by @jpirnay in https://github.com/crosspoint-reader/crosspoint-reader/pull/922 * chore: Update SKILL.md to reflect generated i18n files are gitignored by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1423 * fix: ActivityManager tweaks by @znelson in https://github.com/crosspoint-reader/crosspoint-reader/pull/1220 * fix: Correct relative file paths in SKILL.md documentation by @pablohc in https://github.com/crosspoint-reader/crosspoint-reader/pull/1304 * fix: add Technically Unsupported section to SCOPE.md by @Uri-Tauber in https://github.com/crosspoint-reader/crosspoint-reader/pull/1295 ## New Contributors * @DestinySpeaker made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/1002 * @arnaugamez made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/1036 * @angeldenom made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/1049 * @cdmoro made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/1006 * @bilalix made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/894 * @Jessica765 made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/682 * @brbla made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/869 * @dexif made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/1047 * @mirus-ua made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/1065 * @cbix made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/1077 * @divinitycove made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/1108 * @pepastach made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/1138 * @Jason2866 made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/1080 * @andreaturchet made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/1144 * @Spigaw made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/1130 * @iandchasse made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/1141 * @th0m4sek made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/1155 * @plahteenlahti made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/1133 * @hajisan made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/1146 * @madebyKir made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/1198 * @victordomingos made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/1210 * @basvdploeg made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/1204 * @wjhrdy made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/1181 * @DaniPhii made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/1254 * @steka made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/1317 * @barbarhan made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/1192 * @JonaszPotoniec made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/1323 * @Cache8063 made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/1354 * @fsocietyipa made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/1377 * @LSTAR1900 made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/979 * @zgredex made their first contribution in https://github.com/crosspoint-reader/crosspoint-reader/pull/1224 **Full Changelog**: https://github.com/crosspoint-reader/crosspoint-reader/compare/1.1.1...release/1.2.0 --------- Co-authored-by: jpirnay <jens@pirnay.com> Co-authored-by: Dani Poveda <daniphii@outlook.com> Co-authored-by: Baris Albayrak <80099286+barbarhan@users.noreply.github.com> Co-authored-by: Barış Albayrak <barisa@pop-os.lan> Co-authored-by: Stefan Blixten Karlsson <sbkarlsson@gmail.com> Co-authored-by: Àngel <153315454+angeldenom@users.noreply.github.com> Co-authored-by: Jonasz Potoniec <jonasz@potoniec.eu> Co-authored-by: Егор Мартынов <martynovegorOF@yandex.ru> Co-authored-by: Mirus <mirusim@gmail.com> Co-authored-by: Spigaw <73850535+Spigaw@users.noreply.github.com> Co-authored-by: ariel-lindemann <41641978+ariel-lindemann@users.noreply.github.com> Co-authored-by: Nima Salami <54304457+hajisan@users.noreply.github.com> Co-authored-by: Arthur Tazhitdinov <lisnake@gmail.com> Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> Co-authored-by: Bas van der Ploeg <bas@basvanderploeg.nl> Co-authored-by: martin brook <martin.brook100@googlemail.com> |
||
|
|
d6951f81b7 |
fix: Build with -fno-exceptions (#1412)
## Summary **What is the goal of this PR?** Until today, I sincerely thought we were building without exception support. The codebase is not set up with any exception handling infrastructure. The SKILL.md file specifies no exceptions. I just learned that we actually were building with exceptions enabled, with `-fexceptions` coming from ~/.platformio/packages/framework-arduinoespressif32-libs/esp32c3/pioarduino-build.py. This change removes the `-fexceptions` flag and adds `-fno-exceptions`. The result is **53,670 bytes in flash savings**. --- ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? _**NO**_ |
||
|
|
c40e92e4d1 |
fix: dump crash log without usb plugged, bump release log to INFO (#1332)
## Summary Follow-up https://github.com/crosspoint-reader/crosspoint-reader/pull/1145 - Fix log not being record without USB connected - Bump release log to INFO for more logging details --- ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? **NO** --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> |
||
|
|
18b36efbae |
feat: dump crash report to sdcard (#1145)
## Summary This allow dumping crash message (i.e. assertion fail) and stack trace to `crash_report.txt` file on sdcard. The stack trace can then be decoded using https://esphome.github.io/esp-stacktrace-decoder/ Could be useful to debug things like https://github.com/crosspoint-reader/crosspoint-reader/issues/1137 where error doesn't always happen. May also be useful to show a screen to tell what happen (show on next boot after crash), similar to [flipper zero crash message](https://www.reddit.com/r/flipperzero/comments/10f8m3f/anyone_who_can_tell_me_why_this_message_pops_up/) , but this is better to be a dedicated PR (I'm missing the `drawTextWrapped` function, too lazy to code it ; update: exactly what I need in https://github.com/crosspoint-reader/crosspoint-reader/pull/1141) To test this: - Option 1: add an `assert(false)` somewhere in the code - Option 2: try dereferencing a nullptr - Option 3: try `throw` an exception Example of a crash report: ``` CrossPoint version: 1.1.0-dev Panic reason: abort() was called at PC 0x4214585b on core 0 Recent logs: [196] [DBG] [GFX] Time = 2 ms from clearScreen to displayBuffer [1831] [DBG] [RBS] Recent books loaded from file (7 entries) [1832] [DBG] [ACT] Exiting activity: Boot [1832] [DBG] [ACT] Entering activity: Home [1891] [DBG] [GFX] Time = 54 ms from clearScreen to displayBuffer [2521] [DBG] [GFX] Time = 46 ms from clearScreen to displayBuffer [4839] [DBG] [PWR] Going to low-power mode [10048] [INF] [MEM] Free: 134164 bytes, Total: 232372 bytes, Min Free: 133664 bytes [20060] [INF] [MEM] Free: 134164 bytes, Total: 232372 bytes, Min Free: 133664 bytes [30072] [INF] [MEM] Free: 134164 bytes, Total: 232372 bytes, Min Free: 133664 bytes [34453] [DBG] [PWR] Restoring normal CPU frequency [34485] [DBG] [GFX] Time = 30 ms from clearScreen to displayBuffer [35182] [DBG] [GFX] Time = 31 ms from clearScreen to displayBuffer [36675] [DBG] [GFX] Time = 30 ms from clearScreen to displayBuffer [38800] [DBG] [GFX] Time = 30 ms from clearScreen to displayBuffer [40079] [INF] [MEM] Free: 134164 bytes, Total: 232372 bytes, Min Free: 133664 bytes Stack memory: 0x3FCB0650: 0x00000000 0x00000000 0x3FCB0668 0x4038DBB6 0x00000000 0x00000000 0x3FCA0030 0x3FC936D0 0x3FCB0670: 0x3FCB067C 0x3FC936EC 0x3FCB0668 0x34313234 0x62353835 0x00000000 0x726F6261 0x20292874 0x3FCB0690: 0x20736177 0x6C6C6163 0x61206465 0x43502074 0x34783020 0x35343132 0x20623538 0x63206E6F 0x3FCB06B0: 0x2065726F 0x00000030 0x3FCA0000 0xB37A603F 0x00000001 0x3FCA7000 0x3FCABCDC 0x4214585E 0x3FCB06D0: 0x3FCA7000 0x3FCA7000 0x3FCABCDC 0x421458AA 0x3FCABCDC 0x3FCA7000 0x3FCABCDC 0x421459CC 0x3FCB06F0: 0x3FCA7000 0x3FCA7000 0x42145D5A 0x3C205624 0x40388560 0x3FCA7000 0x3FCABCFC 0x42079866 0x3FCB0710: 0x3FCA7000 0x3FCA7000 0x00009C9A 0x4207B7F6 0x3FCA7000 0x42090000 0x001B7740 0x00000001 0x3FCB0730: 0x3FCA7000 0x3FCA7000 0x00000001 0x600C0028 0x00000001 0x3FCA1000 0x00000000 0x00000000 0x3FCB0750: 0x00000000 0x00000000 0x00000000 0xB37A603F 0x00000000 0x00000000 0x00000000 0x00000000 0x3FCB0770: 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x42090000 0x3FCA7000 0x4208F9C4 0x3FCB0790: 0x00000000 0x00000000 0x00000000 0x40388368 0x00000000 0x00000000 0x00000000 0x00000000 0x3FCB07B0: 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0xA5A5A5A5 0xA5A5A5A5 0xA5A5A5A5 0x3FCB07D0: 0xA5A5A5A5 0xA5A5A5A5 0xA5A5A5A5 0xA5A5A5A5 0xBAAD5678 0xDA6D3601 0x5EB5B9C5 0x2602E480 0x3FCB07F0: 0x2BCDD33F 0x15556D4A 0x1F2140A0 0x5D59BEE3 0x8E76449F 0x6FB2D0CE 0xF5F46FAC 0x0112946A 0x3FCB0810: 0x3B0B32E0 0x7A52B537 0x46801DB4 0xDA85DF9F 0x37E83D20 0x12861028 0x47A702BB 0x287A3C8A 0x3FCB0830: 0x03632209 0xD44C5489 0x5E258453 0xFDA77529 0xE6748E23 0xADCF1394 0x67AD6778 0x2C208663 0x3FCB0850: 0xC7985786 0xD4AA3AB2 0x312E1760 0xEC7AEAAE 0x1857020E 0x48003E7E 0xD6CB8763 0x9B4A3F66 0x3FCB0870: 0x4B79E9F6 0xCBF739F0 0x3794C641 0xD0DBA3CB 0x95B9BE15 0x581C9983 0xDE62EFB6 0x20C67C5B 0x3FCB0890: 0x1E4A3DF3 0xFB317C74 0xC0D86103 0x1D79ED56 0x72FE0862 0x3D38B0C8 0xD27EB587 0x0E0A4C40 0x3FCB08B0: 0xF643ADC0 0x56D114D7 0x703AF879 0xAC7F3075 0x89C78C23 0xEDA86814 0xF767B3E3 0x0528838F 0x3FCB08D0: 0x50ED4662 0x11FD38E7 0x8A5A83BB 0x658159BD 0x781AF696 0x8A700F79 0x526DDE23 0xC8472505 0x3FCB08F0: 0x21AACC02 0xCB89369E 0xB82E5BE2 0x4C6C9D7D 0x9E724D9B 0xDC1067F7 0x84478FBC 0x4E89C444 0x3FCB0910: 0x973F4229 0x49F93DA8 0xE30200F6 0xD1B5C391 0x8363A89F 0x2409E74C 0x3AFF7B52 0xCBEC2349 0x3FCB0930: 0xD38F6695 0xBC3EA980 0xF067EBB1 0x7F87D167 0x92B3823B 0x9F0617D7 0xA7537C57 0x12CAB3D4 0x3FCB0950: 0xC82EEE37 0x84D4B4BC 0xE1E2261C 0x488F0ADA 0x96EAF2FF 0x0BC493A0 0xCE614467 0x3829053D 0x3FCB0970: 0xA41156BE 0x2747B77D 0x64DEA90B 0xE704AB0A 0xE4B01006 0x8D51903C 0x56CD3CF2 0x07E0A8E8 0x3FCB0990: 0xD1DE05CE 0x33368522 0xD1889988 0x3A3097F4 0xB0796D09 0xC78948AA 0x6DEFC56E 0xD5C2E1D9 0x3FCB09B0: 0xFD6DD8FA 0xA957B675 0xC202D80D 0x733FF8F4 0xA1484913 0x0B9AFBA6 0x330C07EA 0x2C09AD4C 0x3FCB09D0: 0x3B1E08F7 0x3FCAE7D0 0x00000170 0xABBA1234 0x0000015C 0x3FCB00E0 0x00009C93 0x3FCA13C4 0x3FCB09F0: 0x3FCA13C4 0x3FCB09E4 0x3FCA13BC 0x00000018 0x00000000 0x00000000 0x3FCB09E4 0x00000000 0x3FCB0A10: 0x00000001 0x3FCAE7E0 0x706F6F6C 0x6B736154 0x00000000 0x00000000 0x3FCB07D0 0x00000005 0x3FCB0A30: 0x00000000 0x00000001 0x00000000 0x3FCAB444 0x4209AFF0 0x0017E38F 0x00000000 0x3FCA7BD0 ``` --- ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? **NO** --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> |
||
|
|
4388bf8cc7 |
fix: Enable DESTRUCTOR_CLOSES_FILE flag (#1075)
## Summary * Enable `DESTRUCTOR_CLOSES_FILE` flag * We're never intending to not close files, so if we accidentally leave them open as they're destructured, this will help close them. ## Additional Context * As spotted in https://github.com/crosspoint-reader/crosspoint-reader/pull/869, there are cases where we were accidentally not closing files Looks to use about 5K of flash. ``` RAM: [=== ] 31.5% (used 103100 bytes from 327680 bytes) Flash: [======= ] 68.9% (used 4513220 bytes from 6553600 bytes) ``` ``` RAM: [=== ] 31.5% (used 103100 bytes from 327680 bytes) Flash: [======= ] 68.9% (used 4518498 bytes from 6553600 bytes) ``` --- ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? No |
||
|
|
2b25f4d168 |
feat: replace picojpeg with JPEGDEC for JPEG image decoding (#1136)
## Summary Replaces the picojpeg library with bitbank2/JPEGDEC for JPEG decoding in the EPUB image pipeline. JPEGDEC provides built-in coarse scaling (1/2, 1/4, 1/8), 8-bit grayscale output, and streaming block-based decoding via callbacks. Includes a pre-build patch script for two JPEGDEC changes affecting progressive JPEG support and EIGHT_BIT_GRAYSCALE mode. Closes #912 ## Additional Context # Example progressive jpeg <img src="https://github.com/user-attachments/assets/e63bb4f8-f862-4aa0-a01f-d1ef43a4b27a" width="400" height="800" /> Good performance increase from JPEGDEC over picojpeg cc @bitbank2 thanks ## Baseline JPEG Decode Performance: picojpeg vs JPEGDEC (float in callback) vs JPEGDEC (fixed-point in callback) Tested with `test_jpeg_images.epub` on device (ESP32-C3), first decode (no cache). | Image | Source | Output | picojpeg | JPEGDEC float | JPEGDEC fixed-point | vs picojpeg | vs float | |-------|--------|--------|----------|---------------|---------------------|-------------|----------| | jpeg_format.jpg | 350x250 | 350x250 | 313 ms | 256 ms | **104 ms** | **3.0x** | **2.5x** | | grayscale_test.jpg | 400x600 | 400x600 | 768 ms | 661 ms | **246 ms** | **3.1x** | **2.7x** | | gradient_test.jpg | 400x500 | 400x500 | 707 ms | 597 ms | **247 ms** | **2.9x** | **2.4x** | | centering_test.jpg | 350x400 | 350x400 | 502 ms | 412 ms | **169 ms** | **3.0x** | **2.4x** | | scaling_test.jpg | 1200x1500 | 464x580 | 5487 ms | 1114 ms | **668 ms** | **8.2x** | **1.7x** | | wide_scaling_test.jpg | 1807x736 | 464x188 | 4237 ms | 642 ms | **497 ms** | **8.5x** | **1.3x** | | cache_test_1.jpg | 400x300 | 400x300 | 422 ms | 348 ms | **141 ms** | **3.0x** | **2.5x** | | cache_test_2.jpg | 400x300 | 400x300 | 424 ms | 349 ms | **142 ms** | **3.0x** | **2.5x** | ### Summary - **1:1 scale (fixed-point vs float)**: ~2.5x faster — eliminating software float on the FPU-less ESP32-C3 is the dominant win - **1:1 scale (fixed-point vs picojpeg)**: ~3.0x faster overall - **Downscaled images (vs picojpeg)**: 8-9x faster — JPEGDEC's coarse scaling + fixed-point draw callback - **Downscaled images (fixed-point vs float)**: 1.3-1.7x — less dramatic since JPEG library decode dominates over the draw callback for fewer output pixels - The fixed-point optimization alone (vs float JPEGDEC) saved **~60% of render time** on 1:1 images, confirming that software float emulation was the primary bottleneck in the draw callback - See thread for discussions on quality of progressive images, https://github.com/crosspoint-reader/crosspoint-reader/pull/1136#issuecomment-3952952315 - and the conclusion https://github.com/crosspoint-reader/crosspoint-reader/pull/1136#issuecomment-3959379386 - Proposal to improve quality added at https://github.com/crosspoint-reader/crosspoint-reader/discussions/1179 --- ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? _**< PARTIALLY >**_ --------- Co-authored-by: Dave Allie <dave@daveallie.com> |
||
|
|
3da2cd3cf8 |
feat: Add git branch to version information on settings screen (#1225)
## Summary * **What is the goal of this PR?** During my development I am frequently jumping from branch to branch flashing test versions on my device. It becomes sometimes quite difficult to figure out which version of the software I am currently looking at. * **What changes are included?** - Dev builds now display the current git branch in the version string shown on the Settings screen (e.g. 1.1.0-dev+feat-my-feature), making it easier to identify which firmware is running on the device when switching between branches frequently. - Release, RC, and slim builds are unaffected — they continue to set their version string statically in platformio.ini. <img width="480" height="800" alt="after" src="https://github.com/user-attachments/assets/d2ab3d69-ab6b-47a1-8eb7-1b40b1d3b106" /> ## Additional Context A new PlatformIO pre-build script (scripts/git_branch.py) runs automatically before every dev build. It reads the base version from the [crosspoint] section of platformio.ini, queries git rev-parse --abbrev-ref HEAD for the current branch, and injects the combined string as the CROSSPOINT_VERSION preprocessor define. In a detached HEAD state it falls back to the short commit SHA. If git is unavailable it warns and falls back to unknown. The script can also be run directly with python scripts/git_branch.py for validation without triggering a full build. --- ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? _**< YES | PARTIALLY | NO >**_ |
||
|
|
88c49b8bed | Merge branch 'release/1.1.1' | ||
|
|
fa4c8a4e33 | chore: Bump version to 1.1.1 | ||
|
|
63002d464b | Merge branch 'release/1.1.0-rc' | ||
|
|
ecb5b1b4e5 |
chore: Remove miniz and modularise inflation logic (#1073)
## Summary * Remove miniz and move completely to uzlib * Move uzlib interfacing to InflateReader to better modularise inflation code --- ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? Yes, Claude helped with the extraction and refactor |
||
|
|
f28623dacd |
chore: Resolve several build warnings (#1076)
## Summary * Resolve several build warnings --- ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? No |
||
|
|
a610568f8c |
feat: upgrade platform and support webdav (#1047)
## Summary - Upgrade platform from espressif32 6.12.0 (Arduino Core 2.0.17) to pioarduino 55.03.37 (Arduino Core 3.3.7, ESP-IDF 5.5.2) - Add WebDAV Class 1 server (RFC 4918) - SD card can be mounted as a network drive - I also slightly fixed the SDK and also made a [pull request ](https://github.com/open-x4-epaper/community-sdk/pull/21) First PR #1030 (was closed because the implementation was based on an old version of the libraries) Issue #439 --------- Co-authored-by: Dave Allie <dave@daveallie.com> |
||
|
|
d9f114b652 |
feat: Allow a local configuration file for custom compiles (#879)
## Summary
* platformio.ini is a repository based config for platformio and cannot
be modified without constant nagging of git to include it into you
commits
* PlatformIO allows you to split your configuration into multiple files
using the extra_configs option in the [platformio] block. This
effectively merges other .ini files into your main one. This will be
silently ignored if such a file does not exist
## Additional Context
* Modifiy platformio.ini and add a .gitignore entry to ignore your local
config
* eg my own ``platformio.local.ini``:
```
[env:custom]
extends = base
build_flags =
${base.build_flags}
-DCROSSPOINT_VERSION=\"${crosspoint.version}-custom\"
; inclusion of additional fonts is disabled in custom builds to save space
-DOMIT_FONTS
```
---
### AI Usage
While CrossPoint doesn't have restrictions on AI tools in contributing,
please be transparent about their usage as it
helps set the right context for reviewers.
Did you use AI tools to help write this code? _NO_
---------
Co-authored-by: Dave Allie <dave@daveallie.com>
|
||
|
|
b8e743ef80 |
fix: Increase PNGdec buffer size to support wide images (#995)
## Summary * Increased `PNG_MAX_BUFFERED_PIXELS` from 6402 to 16416 in `platformio.ini` to support up to 2048px wide RGBA images * adds a check to abort decoding and log an error if the required PNG scanline buffer exceeds the configured `PNG_MAX_BUFFERED_PIXELS`, preventing possible buffer overruns. * fixes https://github.com/crosspoint-reader/crosspoint-reader/issues/993 --- ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? _**< YES >**_ |
||
|
|
d461d93e76 |
fix: Increase PNGdec buffer size to support wide images (#995)
## Summary * Increased `PNG_MAX_BUFFERED_PIXELS` from 6402 to 16416 in `platformio.ini` to support up to 2048px wide RGBA images * adds a check to abort decoding and log an error if the required PNG scanline buffer exceeds the configured `PNG_MAX_BUFFERED_PIXELS`, preventing possible buffer overruns. * fixes https://github.com/crosspoint-reader/crosspoint-reader/issues/993 --- ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? _**< YES >**_ |
||
|
|
402e887f73 | chore: Bump version to 1.1.0 | ||
|
|
7ba5978848 |
feat: User-Interface I18n System (#728)
## Summary **What is the goal of this PR?** This PR introduces Internationalization (i18n) support, enabling users to switch the UI language dynamically. **What changes are included?** - Core Logic: Added I18n class (`lib/I18n/I18n.h/cpp`) to manage language state and string retrieval. - Data Structures: - `lib/I18n/I18nStrings.h/cpp`: Static string arrays for each supported language. - `lib/I18n/I18nKeys.h`: Enum definitions for type-safe string access. - `lib/I18n/translations.csv`: single source of truth. - Documentation: Added `docs/i18n.md` detailing the workflow for developers and translators. - New Settings activity: `src/activities/settings/LanguageSelectActivity.h/cpp` ## Additional Context This implementation (building on concepts from #505) prioritizes performance and memory efficiency. The core approach is to store all localized strings for each language in dedicated arrays and access them via enums. This provides O(1) access with zero runtime overhead, and avoids the heap allocations, hashing, and collision handling required by `std::map` or `std::unordered_map`. The main trade-off is that enums and string arrays must remain perfectly synchronized—any mismatch would result in incorrect strings being displayed in the UI. To eliminate this risk, I added a Python script that automatically generates `I18nStrings.h/.cpp` and `I18nKeys.h` from a CSV file, which will serve as the single source of truth for all translations. The full design and workflow are documented in `docs/i18n.md`. ### Next Steps - [x] Python script `generate_i18n.py` to auto-generate C++ files from CSV - [x] Populate translations.csv with initial translations. Currently available translations: English, Español, Français, Deutsch, Čeština, Português (Brasil), Русский, Svenska. Thanks, community! **Status:** EDIT: ready to be merged. As a proof of concept, the SPANISH strings currently mirror the English ones, but are fully uppercased. --- ### AI Usage Did you use AI tools to help write this code? _**< PARTIALLY >**_ I used AI for the black work of replacing strings with I18n references across the project, and for generating the documentation. EDIT: also some help with merging changes from master. --------- Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> Co-authored-by: yeyeto2788 <juanernestobiondi@gmail.com> |
||
|
|
00666377de |
fix: Add miniz directive to get rid of compilation warning (#858)
## Summary * I am getting miniz warning during compilation: "Using fopen, ftello, fseeko, stat() etc. path for file I/O - this path may not support large files." * Disable the io module from miniz as it is not used and get rid of the warning ## Additional Context * the ZipFile.cpp implementation only uses tinfl_decompressor, tinfl_init(), and tinfl_decompress() (low-level API) and does all ZIP file parsing manually using SD card file I/O * it never uses miniz's high-level file functions like mz_zip_reader_init_file() * so we can disable Miniz io-stack be setting MINIZ_NO_STDIO to 1 ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? partially, let claude inspect the codebase |
||
|
|
6c3a615fac |
feat: add png jpeg support (#556)
## Summary
- Add embedded image support to EPUB rendering with JPEG and PNG
decoders
- Implement pixel caching system to cache decoded/dithered images to SD
card for faster re-rendering
- Add 4-level grayscale support for display
## Changes
### New Image Rendering System
- Add `ImageBlock` class to represent an image with its cached path and
display dimensions
- Add `PageImage` class as a new `PageElement` type for images on pages
- Add `ImageToFramebufferDecoder` interface for format-specific image
decoders
- Add `JpegToFramebufferConverter` - JPEG decoder with Bayer dithering
and scaling
- Add `PngToFramebufferConverter` - PNG decoder with Bayer dithering and
scaling
- Add `ImageDecoderFactory` to select appropriate decoder based on file
extension
- Add `getRenderMode()` to GfxRenderer for grayscale render mode queries
### Dithering and Grayscale
- Implement 4x4 Bayer ordered dithering for 4-level grayscale output
- Stateless algorithm works correctly with MCU block decoding
- Handles scaling without artifacts
- Add grayscale render mode support (BW, GRAYSCALE_LSB, GRAYSCALE_MSB)
- Image decoders and cache renderer respect current render mode
- Enables proper 4-level e-ink grayscale when anti-aliasing is enabled
### Pixel Caching
- Cache decoded/dithered images to `.pxc` files on SD card
- Cache format: 2-bit packed pixels (4 pixels per byte) with
width/height header
- On subsequent renders, load directly from cache instead of re-decoding
- Cache renderer supports grayscale render modes for multi-pass
rendering
- Significantly improves page navigation speed for image-heavy EPUBs
### HTML Parser Integration
- Update `ChapterHtmlSlimParser` to process `<img>` tags and extract
images from EPUB
- Resolve relative image paths within EPUB ZIP structure
- Extract images to cache directory before decoding
- Create `PageImage` elements with proper scaling to fit viewport
- Fall back to alt text display if image processing fails
### Build Configuration
- Add `PNG_MAX_BUFFERED_PIXELS=6402` to support up to 800px wide images
### Test Script
- Generate test EPUBs with annotated JPEG and PNG images
- Test cases cover: grayscale (4 levels), centering, scaling, cache
performance
## Test plan
- [x] Open EPUB with JPEG images - verify images display with proper
grayscale
- [x] Open EPUB with PNG images - verify images display correctly and no
crash
- [x] Navigate away from image page and back - verify faster load from
cache
- [x] Verify grayscale tones render correctly (not just black/white
dithering)
- [x] Verify large images are scaled down to fit screen
- [x] Verify images are centered horizontally
- [x] Verify page serialization/deserialization works with images
- [x] Verify images rendered in landscape mode
## Test Results
[png](https://photos.app.goo.gl/5zFUb8xA8db3dPd19)
[jpeg](https://photos.app.goo.gl/SwtwaL2DSQwKybhw7)








---
### AI Usage
Did you use AI tools to help write this code? _**< YES >**_
---------
Co-authored-by: Matthías Páll Gissurarson <mpg@mpg.is>
Co-authored-by: Dave Allie <dave@daveallie.com>
|
||
|
|
46c2109f1f |
perf: Improve large CSS files handling (#779)
## Summary Closes #766. Thank you for the help @bramschulting! **What is the goal of this PR?** - First and foremost, fix issue #766. - Through working on that, I realized the current CSS parsing/loading code can be improved dramatically for large files and still had additional performance improvements to be made, even with EPUBs with small CSS. **What changes are included?** - Stream CSS parsing and reuse normalization buffers to cut allocations - Add rule limits and selector validation to release rules and free up memory when needed - Skip CSS parsing/loading entirely when "Book's Embedded Style" is off ## Additional Context - My test EPUB has been updated [here](https://github.com/jdk2pq/css-test-epub) to include a very large CSS file to test this out --- ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? _**YES**_, Codex |
||
|
|
cb24947477 |
feat: Add central logging pragma (#843)
## Summary
* Definition and use of a central LOG function, that can later be
extended or completely be removed (for public use where debugging
information may not be required) to save flash by suppressing the
-DENABLE_SERIAL_LOG like in the slim branch
* **What changes are included?**
## Additional Context
* By using the central logger the usual:
```
#include <HardwareSerial.h>
...
Serial.printf("[%lu] [WCS] Obfuscating/deobfuscating %zu bytes\n", millis(), data.size());
```
would then become
```
#include <Logging.h>
...
LOG_DBG("WCS", "Obfuscating/deobfuscating %zu bytes", data.size());
```
You do have ``LOG_DBG`` for debug messages, ``LOG_ERR`` for error
messages and ``LOG_INF`` for informational messages. Depending on the
verbosity level defined (see below) soe of these message types will be
suppressed/not-compiled.
* The normal compilation (default) will create a firmware.elf file of
42.194.356 bytes, the same code via slim will create 42.024.048 bytes -
170.308 bytes less
* Firmware.bin : 6.469.984 bytes for default, 6.418.672 bytes for slim -
51.312 bytes less
### AI Usage
While CrossPoint doesn't have restrictions on AI tools in contributing,
please be transparent about their usage as it
helps set the right context for reviewers.
Did you use AI tools to help write this code? _NO_
---------
Co-authored-by: Xuan Son Nguyen <son@huggingface.co>
|
||
|
|
211153fcd5 | Use GITHUB_HEAD_REF | ||
|
|
91777a9023 | release: 1.0.0 | ||
|
|
ebcd813ff6 |
chore: Cut release 0.16.0
Compile Release / build-release (push) Canceled after 0s
|
||
|
|
3ce11f14ce |
chore: Cut release 0.15.0
Compile Release / build-release (push) Canceled after 0s
|
||
|
|
eb84bcee7c | chore: Pin links2004/WebSockets version | ||
|
|
56ec3dfb6d |
chore: Cut release 0.14.0
Compile Release / build-release (push) Canceled after 0s
|
||
|
|
a946c83a07 |
Turbocharge WiFi uploads with WebSocket + watchdog stability (#364)
## Summary
* **What is the goal of this PR?** Fix WiFi file transfer stability
issues (especially crashes during uploads) and improve upload speed via
WebSocket binary protocol. File transfers now don't really crash as
much, if they do it recovers and speed has gone form 50KB/s to 300+KB/s.
* **What changes are included?**
- **WebSocket upload support** - Adds WebSocket binary protocol for file
uploads, achieving faster speeds 335 KB/s vs HTTP multipart)
- **Watchdog stability fixes** - Adds `esp_task_wdt_reset()` calls
throughout upload path to prevent watchdog timeouts during:
- File creation (FAT allocation can be slow)
- SD card write operations
- HTTP header parsing
- WebSocket chunk processing
- **4KB write buffering** - Batches SD card writes to reduce I/O
overhead
- **WiFi health monitoring** - Detects WiFi disconnection in STA mode
and exits gracefully
- **Improved handleClient loop** - 500 iterations with periodic watchdog
resets and button checks for responsiveness
- **Progress bar improvements** - Fixed jumping/inaccurate progress by
capping local progress at 95% until server confirms completion
- **Exit button responsiveness** - Button now checked inside the
handleClient loop every 64 iterations
- **Reduced exit delays** - Decreased shutdown delays from ~850ms to
~140ms
**Files changed:**
- `platformio.ini` - Added WebSockets library dependency
- `CrossPointWebServer.cpp/h` - WebSocket server, upload buffering,
watchdog resets
- `CrossPointWebServerActivity.cpp` - WiFi monitoring, improved loop,
button handling
- `FilesPage.html` - WebSocket upload JavaScript with HTTP fallback
## Additional Context
- WebSocket uses 4KB chunks with backpressure management to prevent
ESP32 buffer overflow
- Falls back to HTTP automatically if WebSocket connection fails
- The main bottleneck now is SD card write speed (~44% of transfer
time), not WiFi
- STA mode was more prone to crashes than AP mode due to external
network factors; WiFi health monitoring helps detect and handle
disconnections gracefully
---
### AI Usage
Did you use AI tools to help write this code? _**YES**_ Claude did it
ALL, I have no idea what I am doing, but my books transfer fast now.
---------
Co-authored-by: Claude <noreply@anthropic.com>
|
||
|
|
52995fa722 |
chore: Cut release 0.13.1
Compile Release / build-release (push) Canceled after 0s
|
||
|
|
33b8fa0e19 |
chore: Cut release 0.13.0
Compile Release / build-release (push) Canceled after 0s
|
||
|
|
5fdf23f1d2 |
Cut release 0.12.0
Compile Release / build-release (push) Canceled after 0s
|
||
|
|
b82e044ac3 |
Cut release 0.11.2
Compile Release / build-release (push) Canceled after 0s
|
||
|
|
93226c9fbb |
Fix file browser navigation for non-ASCII folder names (#178)
## Summary * **What is the goal of this PR?** Fix file browser failing to navigate into subdirectories with non-ASCII (Korean/Unicode) folder names. * **What changes are included?** - Enable UTF-8 long file names in SdFat (`USE_UTF8_LONG_NAMES=1`) - Add directory validation before iterating files - Add `rewindDirectory()` call for stability ## Additional Context |
||
|
|
941643cf97 |
Cut release 0.11.1
Compile Release / build-release (push) Canceled after 0s
|
||
|
|
6a8971fc20 |
Cut release 0.11.0
Compile Release / build-release (push) Canceled after 0s
|
||
|
|
fb5fc32c5d |
Add exFAT support (#150)
## Summary * Swap to updated SDCardManager which uses SdFat * Add exFAT support * Swap to using FsFile everywhere * Use newly exposed `SdMan` macro to get to static instance of SDCardManager * Move a bunch of FsHelpers up to SDCardManager |
||
|
|
b1763821b5 |
Cut release 0.10.0
Compile Release / build-release (push) Canceled after 0s
|
||
|
|
e8c0fb42d4 |
Network details QR code (#113)
Using QRCode library from pio to generate the QR code. Done: - Display QR code for URL in network mode - minor fixes of layout - Display QR for URL in AP mode - Display QR for AP in AP mode --------- Co-authored-by: Dave Allie <dave@daveallie.com> |