summaryrefslogtreecommitdiffstats
path: root/_log/e-reader.md
diff options
context:
space:
mode:
Diffstat (limited to '_log/e-reader.md')
-rw-r--r--_log/e-reader.md36
1 files changed, 20 insertions, 16 deletions
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.
<source src="ereader.mp4" type="video/mp4">
</video>
-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)