From 75aa500d7644f15f4a45fe2f64de1c526b87cf95 Mon Sep 17 00:00:00 2001 From: Sadeep Madurange Date: Sun, 4 Jan 2026 18:17:43 +0800 Subject: Neo4J post update. --- _log/e-reader.md | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) (limited to '_log/e-reader.md') diff --git a/_log/e-reader.md b/_log/e-reader.md index 2edd5dd..fbc7b94 100644 --- a/_log/e-reader.md +++ b/_log/e-reader.md @@ -12,25 +12,26 @@ First project with e-paper displays and ESP32. -ESP-WROOM-32, 7.5" Waveshare e-paper display, three buttons (prev/next/sleep). +System: ESP-WROOM-32, 7.5" Waveshare e-paper display, three buttons +(prev/next/sleep). -No local storage—streams books over HTTP. RTC memory tracks reading progress -between sessions. +2023-09-23: 512KB SRAM, 4MB flash (shared with FreeRTOS and ESP-IDF). Not +enough storage for books. Using ESP32's built-in WiFi to stream them over HTTP. +Recording the reading progress in RTC memory. -ESP32: 512KB SRAM, 4MB flash (shared with FreeRTOS, ESP-IDF). Not enough to -store books. Stream from webserver instead. +Rasterized pages encoded as tightly packed bitmaps (1 byte => 8 pixels), no +headers, arranged along 48 KB (480x800) boundaries; Reader can stream pages +using HTTP Range requests with zero server-side logic. Keeps both ends lean. -Custom EBM file format. Rasterized monochrome bitmaps, one per page (480x800). -One byte = 8 pixels. Pages on 48KB boundaries—HTTP Range requests work without -server logic. pdftoebm.py converts PDFs. +Page table stores 3 pages (prev/current/next) in a circular buffer. When the +user requests a page, program cycles through the table, updates the screen, and +downloads the next page. -Circular buffer holds 3 pages (prev/current/next)--page table. Single-threaded -approach too slow—user input, SPI, and HTTP on one core causes lag. +Responsiveness is inadequate. Scheduling GPIO (user input), SPI, and HTTP on +one core causes input lag. Pinned the GPIO and SPI tasks to one core, the HTTP +task to the other core. -Optimizations: pin the GPIO task (responding to user input and updating -display) to one core, pin the HTTP task to the other core. - -Better, but system unresponsive during screen updates. Made SPI transfer async: +Better, but screen updates are blocking user input; Made SPI transfer async: ``` void epd_draw_async(const uint8_t *buf, size_t n) @@ -59,11 +60,14 @@ void epd_draw_async(const uint8_t *buf, size_t n) } ``` -Much better. Squeeze a few more cycles by moving SPI buffer to DMA. +Much better. + +2023-10-06: Moved the page table to DMA-capable memory; Reclaimed a few more +CPU cycles from the SPI transfers. Can't think of anything else. -Outcome: Works but limited. Led to [Etlas](../etlas/). +Verdict: Works but limited. Led to [Etlas](../etlas/). Commit: [7f691c4](https://git.asciimx.com/esp32-e-reader/commit/?id=7f691c46093933b67aab466c0ca582ace8ab73d4) -- cgit v1.2.3