From 2a315597471084c35467b65553809ac6a928efc0 Mon Sep 17 00:00:00 2001 From: cottongin Date: Wed, 28 Jan 2026 10:03:45 -0500 Subject: [PATCH] docs: add fork notice and documentation - Add crosspoint-ef fork notice to README with links to upstream - Include feature overview, user guide, and technical comparison docs --- README.md | 11 +- docs/branch-comparison-summary.md | 422 +++++++++++++++++++++ docs/crosspoint-ef-features.md | 603 ++++++++++++++++++++++++++++++ docs/crosspoint-ef-user-guide.md | 555 +++++++++++++++++++++++++++ 4 files changed, 1590 insertions(+), 1 deletion(-) create mode 100644 docs/branch-comparison-summary.md create mode 100644 docs/crosspoint-ef-features.md create mode 100644 docs/crosspoint-ef-user-guide.md diff --git a/README.md b/README.md index 633ae3b..a1ddb66 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,13 @@ -# CrossPoint Reader +# CrossPoint Reader (ef fork) + +> **Note:** This is **crosspoint-ef**, a heavily customized fork of [CrossPoint Reader](https://github.com/crosspoint-reader/crosspoint-reader) with additional features, UI improvements, and bug fixes. It also uses a [forked community-sdk](https://code.cottongin.xyz/cottongin/community-sdk) with additional hardware support. +> +> **Documentation:** +> - [Feature Overview](./docs/crosspoint-ef-features.md) - What's new in this fork +> - [User Guide](./docs/crosspoint-ef-user-guide.md) - How to use the new features +> - [Technical Comparison](./docs/branch-comparison-summary.md) - Detailed diff from upstream + +--- Firmware for the **Xteink X4** e-paper display reader (unaffiliated with Xteink). Built using **PlatformIO** and targeting the **ESP32-C3** microcontroller. diff --git a/docs/branch-comparison-summary.md b/docs/branch-comparison-summary.md new file mode 100644 index 0000000..4f0e867 --- /dev/null +++ b/docs/branch-comparison-summary.md @@ -0,0 +1,422 @@ +# Branch Comparison Summary: crosspoint-ef vs 0.16.0 + +This document provides a comprehensive comparison between the `crosspoint-ef` branch and the upstream `0.16.0` release for merge planning and implementation decisions. + +## Branch History + +| Branch | Base | Commits Since Base | Status | +|--------|------|-------------------|--------| +| `crosspoint-ef` | 0.15.0 | 90+ | Active development | +| `0.16.0` | 0.15.0 | 30 | Released | + +Both branches diverged from `0.15.0` at commit `3ce11f14`. + +--- + +## Feature Comparison Matrix + +### Major Features + +| Feature | crosspoint-ef | 0.16.0 | Notes | +|---------|:-------------:|:------:|-------| +| Dictionary Support | Yes | No | StarDict format with word selection | +| Bookmark System | Yes | No | Per-book bookmarks with visual indicator | +| Quick Menu | Yes | No | Power button quick access | +| Library Search | Yes | No | Character picker with weighted search | +| CSS Parsing | Yes | No | Element, class, inline styles | +| Inline Images (PNG/JPEG) | Yes | No | With caching and dithering | +| Custom Fonts | Yes | No | Atkinson Hyperlegible, Fern Micro | +| Enhanced Web Server | Yes | Partial | File ops, MD5 API, mDNS | +| Companion App API | Yes | No | Deep links, WebSocket uploads | +| Reading Lists | Yes | No | With pinning support | +| Tab Bar Enhancements | Yes | No | Scrolling, overflow indicators | +| High Contrast Mode | Yes | No | System-wide | +| Bezel Compensation | Yes | No | Edge defect compensation | +| Sleep Screen Edge Detection | Yes | No | Dominant color fill | +| Recents Improvements | Yes | No | Badges, removal, clearing | +| Progress Bar Status Bar | Yes | Yes | Same feature | +| Spanish Hyphenation | No | Yes | Missing in crosspoint-ef | +| XTC/XTCH Author Extraction | No | Yes | Missing in crosspoint-ef | +| OTA Rework | No | Yes | Different implementation | +| KOReader MD5 Binary Matching | No | Yes | Missing in crosspoint-ef | +| Relative Position on Settings Change | No | Yes | Missing in crosspoint-ef | +| Multi-line Keyboard Entry | No | Yes | Missing in crosspoint-ef | +| Italics on Image Alt | No | Yes | Missing in crosspoint-ef | +| Page Turn on Button Press (UX) | No | Yes | When chapter skip disabled | + +### Bug Fixes + +| Fix | crosspoint-ef | 0.16.0 | Notes | +|-----|:-------------:|:------:|-------| +| Large EPUB indexing O(n²)→O(n) | Yes | Yes | Same fix | +| Settings validation on read | Yes | Yes | Same fix | +| Line break fixes | Yes | Yes | Similar fixes | +| Rotate origin in drawImage | Yes | Yes | Same fix | +| Short-press power wakeup | Yes | Yes | Same fix | +| TXT books in recent tab | Yes | Yes | Same fix | +| B&W filters for covers | Yes | Yes | Same fix | +| Cover fit artifacts | Yes | Yes | Same fix | +| Grayscale state corruption | Yes | No | Unique to crosspoint-ef | +| Memory graceful degradation | Yes | No | Unique to crosspoint-ef | +| Chapter Selection UI (KOReader) | No | Yes | Missing in crosspoint-ef | +| Front layout in mapLabels() | No | Yes | Missing in crosspoint-ef | + +--- + +## Files Changed Summary + +### crosspoint-ef Unique Files (New) + +| Category | Files | +|----------|-------| +| Dictionary | `src/activities/dictionary/` (8 files), `lib/StarDict/` (4 files) | +| Bookmarks | `src/BookmarkStore.cpp/.h`, `src/activities/home/BookmarkListActivity.cpp/.h` | +| Quick Menu | `src/activities/util/QuickMenuActivity.cpp/.h` | +| CSS | `lib/Epub/Epub/css/` (3 files) | +| Images | `lib/Epub/Epub/blocks/ImageBlock.cpp/.h`, `lib/Epub/Epub/converters/` (6 files) | +| Custom Fonts | `src/customFonts.cpp`, `src/fontIds.h`, `lib/EpdFont/builtinFonts/custom/` (50+ files) | +| Utils | `src/util/Md5Utils.cpp/.h`, `src/util/StringUtils.cpp/.h` | +| Lists | `src/BookListStore.cpp/.h` | +| Docs | `docs/webserver-api-reference.md`, `docs/companion-app-deep-link-API.md`, `docs/troubleshooting.md` | + +### crosspoint-ef Modified Files (Significant Changes) + +| File | Changes | +|------|---------| +| `src/network/CrossPointWebServer.cpp` | +1083 lines (file ops, API, WebSocket) | +| `src/activities/home/MyLibraryActivity.cpp` | +700 lines (tabs, search, badges) | +| `src/main.cpp` | +255 lines (feature integration) | +| `lib/GfxRenderer/GfxRenderer.cpp` | +439 lines (contrast, bezel) | +| `lib/Epub/Epub/parsers/ChapterHtmlSlimParser.cpp` | +596 lines (CSS integration) | +| `src/CrossPointSettings.cpp/.h` | New settings fields | +| `src/activities/boot_sleep/SleepActivity.cpp` | Edge detection, caching | +| `src/RecentBooksStore.cpp` | Badges, removal, metadata | +| `src/ScreenComponents.cpp` | Tab bar enhancements | + +### 0.16.0 Unique Files/Changes + +| File | Description | +|------|-------------| +| `lib/Epub/Epub/hyphenation/generated/hyph-es.trie.h` | Spanish hyphenation (removed in ef) | +| `lib/KOReaderSync/` | KOReader credential handling (removed in ef) | +| `src/network/OtaUpdater.cpp` | OTA rework | + +--- + +## Merge Strategy Recommendations + +### Phase 1: Cherry-pick 0.16.0 Fixes into crosspoint-ef + +**Low Risk - Recommended First:** + +1. **Spanish hyphenation support** (#558) + - Add `hyph-es.trie.h` back + - Update `LanguageRegistry.cpp` + +2. **Render keyboard entry over multiple lines** (#567) + - Update `KeyboardEntryActivity.cpp` + +3. **Correctly render italics on image alt** (#569) + - Minimal change to text rendering + +4. **Page turning on button pressed** (#451) + - UX improvement when chapter skip disabled + +5. **Missing front layout in mapLabels()** (#564) + - Bug fix for button mapping + +**Medium Risk:** + +6. **KOReader document MD5 binary matching** (#529) + - May conflict with MD5Utils changes + +7. **Chapter Selection UI bugs** (#501) + - Review for conflicts with tab bar changes + +8. **Relative position on settings change** (#486) + - Reader state management change + +**Higher Risk:** + +9. **OTA feature rework** (#509) + - Compare implementations, may need reconciliation + - crosspoint-ef has different OTA changes + +10. **Extract author from XTC/XTCH** (#563) + - XTC format was removed in crosspoint-ef + - Evaluate if needed + +### Phase 2: Potential Upstream Contributions from crosspoint-ef + +**High Value, Moderate Complexity:** + +1. **Dictionary Support** + - Self-contained feature + - New files, minimal integration points + - Requires shipping dictionary data + +2. **Bookmark System** + - Clean implementation + - New files with reader integration + +3. **Quick Menu** + - Simple overlay feature + - Depends on bookmark and dictionary + +4. **CSS Parsing** + - Significant EPUB improvement + - Well-isolated in `lib/Epub/Epub/css/` + +**High Value, Higher Complexity:** + +5. **Inline Image Support** + - Major EPUB enhancement + - Multiple new converters + - Memory management considerations + +6. **Library Search** + - Integrated into MyLibraryActivity + - Tab bar changes included + +7. **Enhanced Web Server** + - Large changes to CrossPointWebServer + - New API endpoints + - WebSocket uploads + +**Medium Value:** + +8. **Custom Fonts** + - Large binary additions (font headers) + - Clean integration + +9. **Display Enhancements** + - High contrast, bezel compensation + - Settings additions + +10. **Reading Lists** + - New feature with web API + +--- + +## Potential Conflicts + +### High Conflict Risk + +| Area | crosspoint-ef | 0.16.0 | Resolution | +|------|---------------|--------|------------| +| `MyLibraryActivity.cpp` | Major restructure | Minor fixes | Manual merge required | +| `CrossPointWebServer.cpp` | Extensive additions | Minimal changes | crosspoint-ef likely compatible | +| `CrossPointSettings.h` | Many new fields | Few changes | Additive, low conflict | +| `main.cpp` | Feature integration | Minor changes | Review integration points | +| `OtaUpdater.cpp` | Modified | Reworked (#509) | Compare implementations | + +### Low Conflict Risk + +| Area | Notes | +|------|-------| +| Dictionary files | All new, no conflicts | +| Bookmark files | All new, no conflicts | +| CSS parser files | All new, no conflicts | +| Image converter files | All new, no conflicts | +| Custom font files | All new, no conflicts | +| StarDict library | All new, no conflicts | + +--- + +## Testing Considerations + +### Regression Testing Required + +After any merge: + +1. **EPUB Reading** + - Page navigation + - Chapter selection + - CSS styling + - Image rendering + - Bookmark indicators + +2. **Library Functions** + - Tab navigation + - Search functionality + - Recent books display + - List management + +3. **Dictionary** + - Word selection + - Lookup accuracy + - Definition display + +4. **Web Server** + - File upload/download + - API endpoints + - WebSocket uploads + - mDNS discovery + +5. **Settings** + - All new settings persist correctly + - Settings migration from older versions + +6. **Display** + - High contrast mode + - Bezel compensation (all orientations) + - Sleep screen variations + +### Memory Testing + +crosspoint-ef includes memory optimization fixes. After merge: + +1. Test with large EPUBs (2000+ chapters) +2. Test opening multiple books in sequence +3. Test anti-aliasing under memory pressure +4. Monitor for ghosting/artifacts + +--- + +## Priority Recommendations + +### Immediate (For crosspoint-ef Stability) + +1. Cherry-pick Spanish hyphenation (#558) +2. Cherry-pick multi-line keyboard entry (#567) +3. Cherry-pick italics on image alt (#569) +4. Cherry-pick front layout fix (#564) + +### Short-term (Feature Completeness) + +5. Evaluate OTA rework (#509) - compare implementations +6. Cherry-pick page turn UX (#451) +7. Cherry-pick relative position fix (#486) + +### Long-term (Upstream Contribution) + +8. Prepare dictionary feature as PR +9. Prepare bookmark system as PR +10. Prepare CSS parsing as PR +11. Evaluate inline image support for upstream + +--- + +## File Inventory for Merge + +### Files to Add to 0.16.0 Base (for upstream contribution) + +``` +src/activities/dictionary/ + DictionaryMargins.h + DictionaryMenuActivity.cpp + DictionaryMenuActivity.h + DictionaryResultActivity.cpp + DictionaryResultActivity.h + DictionarySearchActivity.cpp + DictionarySearchActivity.h + EpubWordSelectionActivity.cpp + EpubWordSelectionActivity.h + +src/activities/util/ + QuickMenuActivity.cpp + QuickMenuActivity.h + +src/activities/home/ + BookmarkListActivity.cpp + BookmarkListActivity.h + +src/ + BookmarkStore.cpp + BookmarkStore.h + BookListStore.cpp + BookListStore.h + customFonts.cpp + fontIds.h + BadgeConfig.h + +src/util/ + Md5Utils.cpp + Md5Utils.h + StringUtils.cpp + StringUtils.h + +src/images/ + LockIcon.h + +lib/StarDict/ + StarDict.cpp + StarDict.h + DictHtmlParser.cpp + DictHtmlParser.h + DictPrefixIndex.generated.h + +lib/Epub/Epub/css/ + CssParser.cpp + CssParser.h + CssStyle.h + +lib/Epub/Epub/blocks/ + ImageBlock.cpp + ImageBlock.h + BlockStyle.h + +lib/Epub/Epub/converters/ + FramebufferWriter.cpp + FramebufferWriter.h + ImageDecoderFactory.cpp + ImageDecoderFactory.h + ImageToFramebufferDecoder.cpp + ImageToFramebufferDecoder.h + JpegToFramebufferConverter.cpp + JpegToFramebufferConverter.h + PngToFramebufferConverter.cpp + PngToFramebufferConverter.h + +lib/EpdFont/builtinFonts/custom/ + [All font header files] + +docs/ + webserver-api-reference.md + companion-app-deep-link-API.md + troubleshooting.md + crosspoint-ef-features.md + crosspoint-ef-user-guide.md +``` + +### Files to Merge Carefully + +``` +src/main.cpp +src/CrossPointSettings.cpp +src/CrossPointSettings.h +src/network/CrossPointWebServer.cpp +src/network/CrossPointWebServer.h +src/network/OtaUpdater.cpp +src/network/OtaUpdater.h +src/activities/home/MyLibraryActivity.cpp +src/activities/home/MyLibraryActivity.h +src/activities/reader/EpubReaderActivity.cpp +src/activities/settings/SettingsActivity.cpp +src/activities/settings/CategorySettingsActivity.cpp +src/ScreenComponents.cpp +src/ScreenComponents.h +src/RecentBooksStore.cpp +src/RecentBooksStore.h +lib/GfxRenderer/GfxRenderer.cpp +lib/GfxRenderer/GfxRenderer.h +lib/GfxRenderer/BitmapHelpers.cpp +lib/GfxRenderer/BitmapHelpers.h +lib/Epub/Epub/parsers/ChapterHtmlSlimParser.cpp +lib/Epub/Epub/parsers/ChapterHtmlSlimParser.h +lib/Epub/Epub/Section.cpp +lib/Epub/Epub/Section.h +``` + +--- + +## Conclusion + +The `crosspoint-ef` branch represents a significant enhancement over the `0.15.0` baseline with 14+ major features. Most features are cleanly isolated in new files, making selective upstream contribution feasible. + +**Recommended approach:** +1. First, bring crosspoint-ef up to date with 0.16.0 bug fixes +2. Then, evaluate individual features for upstream PR submission +3. Prioritize dictionary, bookmarks, and CSS parsing as highest-value contributions + +The grayscale state corruption fix in crosspoint-ef should also be submitted upstream as a critical bug fix, as it prevents display artifacts under memory pressure. diff --git a/docs/crosspoint-ef-features.md b/docs/crosspoint-ef-features.md new file mode 100644 index 0000000..df64d51 --- /dev/null +++ b/docs/crosspoint-ef-features.md @@ -0,0 +1,603 @@ +# CrossPoint-EF Branch Features + +This document describes the features and enhancements unique to the `crosspoint-ef` branch, which diverged from CrossPoint Reader at version `0.15.0`. + +## Overview + +The `crosspoint-ef` branch introduces significant new functionality including: + +- **Dictionary Support** - Offline StarDict dictionary with word selection from reader +- **Bookmark System** - Per-book bookmarks with visual indicators and management +- **Quick Menu** - Fast access to common actions via power button +- **Library Search** - Search across all books by title, author, or filename +- **CSS Support** - Parse and apply CSS styles from EPUB files +- **Inline Images** - PNG and Baseline JPEG image rendering within EPUBs +- **Custom Fonts** - Atkinson Hyperlegible Next and Fern Micro accessibility fonts +- **Enhanced Web Server** - File management, companion app API, mDNS discovery +- **Reading Lists** - Create, manage, and pin custom book lists +- **Display Enhancements** - High contrast mode, bezel compensation, sleep screen improvements + +--- + +## Major Features + +### 1. Dictionary Support + +Full offline dictionary lookup using the StarDict format with fast prefix-indexed search. + +**Features:** +- Word selection directly from EPUB pages +- Manual word entry via on-screen keyboard +- Rich HTML formatting in definitions (bold, italic, lists) +- Multi-page definitions with pagination +- Synonym support +- Case-insensitive search with prefix optimization + +**Access Methods:** +- **Quick Menu** → Dictionary +- **Power Button** (when configured to `Dictionary` action) + +**Dictionary Format:** +- StarDict format with dictzip compression +- Files located at `/dictionaries/dict-data` on SD card: + - `dict-data.ifo` - Metadata + - `dict-data.idx` - Word index + - `dict-data.dict.dz` - Compressed definitions + - `dict-data.syn` - Synonyms (optional) + +**Technical Implementation:** +- Files: `src/activities/dictionary/`, `lib/StarDict/` +- Prefix jump table for near-instant lookups +- On-demand chunk decompression using miniz +- HTML definition parsing with entity decoding + +--- + +### 2. Bookmark System + +Per-book bookmark storage with visual indicators and dedicated management interface. + +**Features:** +- Add/remove bookmarks from current page +- Visual folded-corner indicator on bookmarked pages +- Bookmarks tab in library showing all books with bookmarks +- Long-press to delete bookmarks +- Auto-generated bookmark names ("Chapter Title - Page X") +- Maximum 100 bookmarks per book + +**Storage:** +- Binary file per book: `/.crosspoint/{epub_|txt_}/bookmarks.bin` +- Stores: name, spine index, content offset, page number, timestamp + +**Technical Implementation:** +- Files: `src/BookmarkStore.cpp/.h`, `src/activities/home/BookmarkListActivity.cpp/.h` +- Bookmark identification by `spineIndex + contentOffset` (stable across re-renders) + +--- + +### 3. Quick Menu + +In-reader quick access menu for common actions, triggered by short power button press. + +**Menu Options:** +1. **Dictionary** - Look up a word +2. **Bookmark** - Add/Remove bookmark (state-aware text) +3. **Clear Cache** - Free up storage space +4. **Settings** - Open settings menu + +**Configuration:** +- Settings → Controls → Short Power Button Click → `Quick Menu` + +**Technical Implementation:** +- File: `src/activities/util/QuickMenuActivity.cpp/.h` +- Renders overlay with navigation and selection + +--- + +### 4. Library Search with Character Picker + +Search across all books using a dynamic character picker interface. + +**Features:** +- Character picker with dynamically generated character set from library content +- Weighted search scoring: + - Title match: 100 points (+50 if at start) + - Author match: 80 points (+40 if at start) + - Path match: 30 points +- Results sorted by relevance score +- Special controls: SPC (space), ← (backspace), CLR (clear) + +**Navigation:** +- Left/Right: Select character +- Confirm: Add character to query +- Up/Down: Switch between picker and results + +**Technical Implementation:** +- Integrated in `src/activities/home/MyLibraryActivity.cpp` +- Search tab accessible from library tab bar + +--- + +### 5. CSS Support for EPUBs + +Parse and apply CSS styles from EPUB stylesheets. + +**Supported Selectors:** +- Element selectors: `p`, `div`, `h1`, etc. +- Class selectors: `.classname` +- Combined selectors: `element.classname` +- Grouped selectors: `h1, h2, h3` +- Inline styles: `style="..."` + +**Supported Properties:** +- `text-align` (left, center, right, justify) +- `font-style` (normal, italic) +- `font-weight` (normal, bold) +- `text-decoration` (underline) +- `text-indent` +- `margin-top`, `margin-bottom` +- `padding-top`, `padding-bottom` + +**Cascade Order:** +1. Element styles +2. Class styles +3. Element.class styles +4. Inline styles + +**Technical Implementation:** +- Files: `lib/Epub/Epub/css/CssParser.cpp/.h`, `CssStyle.h` +- CSS files parsed during EPUB loading +- Styles applied during HTML parsing via `ChapterHtmlSlimParser` + +--- + +### 6. Inline Image Support (PNG/Baseline JPEG) + +Render embedded images within EPUB content. + +**Supported Formats:** +- Baseline JPEG (.jpg, .jpeg) +- PNG (.png) + +**Features:** +- Images decoded to 2-bit grayscale with dithering +- Image caching as `.pxc` files (2 bits per pixel, packed format) +- Row-by-row rendering to minimize memory usage +- Automatic scaling to fit page width + +**Technical Implementation:** +- Files: `lib/Epub/Epub/blocks/ImageBlock.cpp/.h` +- Converters: `JpegToFramebufferConverter`, `PngToFramebufferConverter` +- Factory: `ImageDecoderFactory` routes to appropriate decoder + +--- + +### 7. Custom Fonts + +Additional accessibility-focused fonts beyond the standard Bookerly and Noto Sans. + +**Available Fonts:** +1. **Atkinson Hyperlegible Next** - Designed for low-vision readers +2. **Fern Micro** - Optimized for small screens + +**Font Sizes:** +- 12pt, 14pt, 16pt, 18pt for each font +- Full style support: Regular, Italic, Bold, Bold Italic + +**Configuration:** +- Settings → Reader → Font Family → Custom +- Settings → Reader → Custom Font → [Select font] +- Settings → Reader → Fallback Font → [Bookerly/Noto Sans] + +**Technical Implementation:** +- Files: `src/customFonts.cpp`, `src/fontIds.h` +- Font headers: `lib/EpdFont/builtinFonts/custom/` +- Conversion scripts: `lib/EpdFont/scripts/convert-builtin-fonts.sh` + +--- + +### 8. Enhanced Web Server + +Extended web server with file management operations and companion app support. + +**File Operations:** +| Endpoint | Method | Description | +|----------|--------|-------------| +| `/api/files` | GET | List files with MD5 hashes for EPUBs | +| `/api/status` | GET | Device status (version, IP, heap, uptime) | +| `/api/archived` | GET | List archived books | +| `/api/hash` | GET | Compute/retrieve MD5 hash for sync | +| `/download` | GET | Download files | +| `/upload` | POST | Upload files (multipart) | +| `/delete` | POST | Delete files/folders | +| `/archive` | POST | Archive a book | +| `/unarchive` | POST | Restore archived book | +| `/rename` | POST | Rename files/folders | +| `/copy` | POST | Copy files/folders | +| `/move` | POST | Move files/folders | +| `/mkdir` | POST | Create folders | +| `/list` | GET/POST | Manage reading lists | + +**WebSocket Upload (Port 81):** +- Fast binary uploads for large files +- Protocol: `START:::` → `READY` → binary chunks → `DONE` +- Progress updates: `PROGRESS::` + +**mDNS Discovery:** +- Hostname: `crosspoint.local` +- Service: `_http._tcp` on port 80 +- UDP discovery on port 8134 + +**Deep Link Support:** +- URL scheme: `crosspoint://?host=&port=&wsPort=` +- Paths: `files`, `library`, `lists`, `settings` + +**Technical Implementation:** +- Files: `src/network/CrossPointWebServer.cpp/.h` +- MD5 Utils: `src/util/Md5Utils.cpp/.h` +- Docs: `docs/webserver-api-reference.md`, `docs/companion-app-deep-link-API.md` + +--- + +### 9. Reading Lists with Pinning + +Create and manage custom book lists with pinning support. + +**Features:** +- Create, load, delete lists +- Pin a list to show on home screen +- List contents displayed with book metadata +- Web API for list upload/download (CSV format) + +**Storage:** +- Lists stored in `/.lists/` as `.bin` files +- CSV format for API: `order,title,author,path` + +**Configuration:** +- Library → Lists tab → Long-press → Pin/Unpin +- Pinned list name shown on home screen Lists button + +**Technical Implementation:** +- Files: `src/BookListStore.cpp/.h` +- Pinned list stored in `SETTINGS.pinnedListName` + +--- + +### 10. Display Enhancements + +#### High Contrast Mode + +System-wide display contrast adjustment for improved readability. + +- **Normal mode:** Standard grayscale thresholds +- **High contrast mode:** Pushes mid-grays toward black/white + +**Configuration:** +- Settings → Display → High Contrast → On/Off + +#### Bezel Compensation + +Compensate for physical screen edge defects with configurable margin. + +- **Range:** 0-10 pixels +- **Edges:** Bottom, Top, Left, Right +- **Behavior:** Margin rotates with screen orientation + +**Configuration:** +- Settings → Display → Bezel Compensation → [0-10] +- Settings → Display → Bezel Edge → [Bottom/Top/Left/Right] + +#### Sleep Screen Improvements + +Enhanced sleep screen with edge-aware color filling. + +- **Edge luminance detection:** Samples edge pixels for dominant color +- **Letterbox fill:** Fills letterbox regions with edge colors for seamless appearance +- **Two-level caching:** + - Per-BMP cache: `.bmp.perim` files store edge luminance + - Book-level cache: `edge.bin` stores cover data + +--- + +### 11. Recents View Improvements + +Enhanced recent books display with metadata and management. + +**Features:** +- **Badges:** Extension and suffix tags (e.g., "epub", "X4") +- **Metadata display:** Title and author from EPUB +- **Remove from recents:** Long-press → Remove from Recents +- **Clear all:** Long-press → Clear All Recents + +**Badge Configuration:** +- Extension badges: `.epub` → "epub", `.txt` → "txt" +- Suffix badges: `-x4` → "X4", `-x4p` → "X4P" + +**Technical Implementation:** +- Files: `src/RecentBooksStore.cpp/.h` +- Badge config: `src/BadgeConfig.h` +- String utils: `src/util/StringUtils.cpp/.h` + +--- + +### 12. Enhanced Tab Bar + +Unified tab bar with scrolling and overflow indicators. + +**Features:** +- Horizontal scrolling when tabs exceed available width +- Overflow indicators (< >) when content extends beyond view +- Selected tab highlighting with underline +- Bullet cursors for focus mode + +**Tabs:** +- Recent, Lists, Bookmarks, Search, Files + +**Technical Implementation:** +- Files: `src/ScreenComponents.cpp/.h` +- Used in `MyLibraryActivity` for library navigation + +--- + +### 13. Progress Bar Status Bar + +Additional status bar option showing visual progress bar. + +**Options:** +- `Full w/ Progress Bar` - Full status bar with progress bar +- `Progress Bar` - Only progress bar, no other status info + +**Configuration:** +- Settings → Display → Status Bar + +--- + +### 14. Additional Settings + +New configuration options unique to crosspoint-ef: + +| Setting | Options | Description | +|---------|---------|-------------| +| Short Power Button Click | Ignore, Sleep, Page Turn, Dictionary, Quick Menu | Map power button to action | +| Bezel Compensation | 0-10 pixels | Edge defect compensation | +| Bezel Edge | Bottom, Top, Left, Right | Which edge to compensate | +| High Contrast | Off, On | System-wide contrast boost | +| Custom Font | [Font list] | Select custom font | +| Fallback Font | Bookerly, Noto Sans | Fallback for custom fonts | + +--- + +### 15. OPDS Browser Enhancements + +Improved OPDS catalog browsing experience. + +**Features:** +- **Navigation history stack** - Back button navigates through visited feeds +- **Page skipping** - Hold Up/Down for 700ms to skip 23 items at once +- **Error retry mechanism** - Retry button on error screens with WiFi status check +- **HTTP Basic Authentication** - Username/password support for protected OPDS servers + +**Configuration:** +- Settings → System → Calibre Settings → OPDS Server URL +- Settings → System → Calibre Settings → Username/Password + +**Technical Implementation:** +- Files: `src/activities/browser/OpdsBookBrowserActivity.cpp` +- Authentication: `src/network/HttpDownloader.cpp` + +--- + +### 16. Development Tools + +Scripts and utilities for firmware development. + +**Scripts:** +| Script | Purpose | +|--------|---------| +| `pre_flash.py` | Displays "Flashing firmware..." screen during upload | +| `debugging_monitor.py` | Enhanced serial monitor with memory graphs and color output | +| `pio_helper.py` | Interactive PlatformIO workflow helper with presets | +| `version_hash.py` | Embeds git commit hash in dev builds | +| `build_html.py` | Minifies HTML files for web server | + +**Firmware Flashing Screen:** +- Full-screen display during firmware upload +- Shows "Flashing firmware..." with version info +- Lock icon indicates USB port location +- Prevents accidental disconnection + +**Debug/Memory Monitoring:** +- `DEBUG_MEMORY` build mode for heap tracking at activity transitions +- Periodic memory logging every 10 seconds (when Serial connected) +- Loop duration warnings when exceeding 50ms +- Detailed heap fragmentation info + +**Technical Implementation:** +- Scripts: `scripts/pre_flash.py`, `scripts/debugging_monitor.py`, `scripts/pio_helper.py` +- Flash screen: `src/main.cpp` (lines 138-247) +- Memory monitoring: `src/main.cpp` (lines 549-562) +- Build config: `platformio.ini` (`debug_memory` environment) + +--- + +### 17. Power Management Enhancements + +Optimizations for battery life and responsiveness. + +**Features:** +- **Auto-sleep prevention** - Background tasks (web server, OTA, downloads) prevent auto-sleep +- **USB connection detection** - Serial only starts when USB is connected (saves power) +- **Skip loop delay** - Activities can request faster loop execution for responsive HTTP handling +- **Power button release wait** - Prevents immediate wake if button is still held + +**Technical Implementation:** +- Files: `src/main.cpp`, `src/activities/Activity.h` +- Methods: `preventAutoSleep()`, `skipLoopDelay()` + +--- + +## Bug Fixes + +### Unique to crosspoint-ef + +1. **Grayscale state corruption fix** - Prevents ghosting and gray filter artifacts when anti-aliasing is enabled under memory pressure +2. **Memory optimization** - Graceful degradation when memory is low (skip anti-aliasing instead of corrupting display) + +### Shared with 0.16.0 + +- Large EPUB indexing optimization (O(n²) → O(n)) +- Settings validation on read +- Line break fixes (flush word before `
`) +- Rotate origin in `drawImage()` +- Short-press power button to wakeup +- Add txt books to recent tab +- B&W filters for cover images + +--- + +## Missing or Removed Features from 0.16.0 + +The following features are present in the upstream `0.16.0` release but are missing or were removed in `crosspoint-ef`: + +### Removed Features + +#### 1. KOReader Sync Support (Removed) + +The entire KOReader sync functionality has been removed. + +**What was removed:** +- `lib/KOReaderSync/` library (8 files deleted) +- Progress sync with KOReader sync server (`sync.koreader.rocks`) +- Document MD5 binary matching for progress synchronization +- KOReader credential storage + +**Impact:** +- Cannot sync reading progress with KOReader app +- Chapter Selection UI fixes for KOReader sync (#501) not applicable + +**Files deleted:** +- `KOReaderSyncClient.cpp/.h` +- `KOReaderCredentialStore.cpp/.h` +- `KOReaderDocumentId.cpp/.h` +- `ProgressMapper.cpp/.h` + +--- + +#### 2. Non-English Hyphenation Patterns (Removed) + +Hyphenation pattern files for non-English languages have been removed. + +**What was removed:** +- `hyph-es.trie.h` - Spanish hyphenation +- `hyph-de.trie.h` - German hyphenation +- `hyph-fr.trie.h` - French hyphenation +- `hyph-ru.trie.h` - Russian hyphenation + +**Impact:** +- Only English hyphenation patterns remain +- Non-English books will not hyphenate correctly +- Spanish hyphenation support (#558) not available + +**Note:** These can be restored by copying the trie files from 0.16.0. + +--- + +#### 3. XTC/XTCH File Support (Removed) + +Support for the XTC/XTCH proprietary format has been removed. + +**What was removed:** +- Author extraction from XTC/XTCH files (#563) +- XTC format handling in file browsers + +**Impact:** +- XTC/XTCH files cannot be read +- Author metadata not extracted from these formats + +--- + +### Missing Bug Fixes + +The following bug fixes from 0.16.0 have not been applied to crosspoint-ef: + +| PR | Description | Impact | +|----|-------------|--------| +| #567 | Multi-line keyboard entry | Long text input truncated with "..." instead of wrapping | +| #569 | Italics on image alt text | Image alt placeholders don't render in italics | +| #564 | Front layout in mapLabels() | Button mapping may be incorrect in some layouts | +| #486 | Relative position on settings change | Reader may jump to different location when settings change | +| #501 | Chapter Selection UI (KOReader) | N/A - KOReader sync removed | +| #529 | KOReader MD5 binary matching | N/A - KOReader sync removed | + +--- + +### Missing UX Enhancements + +| PR | Description | Impact | +|----|-------------|--------| +| #451 | Page turn on button press | When long-press chapter skip is disabled, 0.16.0 allows page turn on button press; crosspoint-ef does not | + +--- + +### Different Implementation: OTA Updates + +The OTA update mechanism uses a different implementation: + +| Aspect | crosspoint-ef | 0.16.0 | +|--------|---------------|--------| +| HTTP Client | Arduino `HTTPClient` | ESP-IDF `esp_http_client` | +| OTA Library | Arduino `Update` | ESP-IDF `esp_https_ota` | +| Memory Management | Standard | Improved with custom buffer handling | + +**Impact:** +- Both implementations work, but 0.16.0's ESP-IDF approach may be more memory-efficient +- Consider evaluating 0.16.0's OTA rework (#509) for potential adoption + +--- + +### Recommendation for Missing Features + +**High Priority to Cherry-pick:** +1. Multi-line keyboard entry (#567) - Improves UX for long inputs +2. Front layout fix (#564) - Bug fix for button mapping +3. Relative position on settings change (#486) - Improves reader UX + +**Medium Priority:** +4. Restore hyphenation patterns for non-English languages +5. Italics on image alt (#569) - Minor visual improvement +6. Page turn on button press (#451) - UX enhancement + +**Evaluate:** +7. OTA rework (#509) - Compare implementations for memory benefits +8. KOReader sync - Restore if sync functionality is desired + +--- + +## File Summary + +| Feature | Primary Files | +|---------|---------------| +| Dictionary | `src/activities/dictionary/`, `lib/StarDict/` | +| Bookmarks | `src/BookmarkStore.*`, `src/activities/home/BookmarkListActivity.*` | +| Quick Menu | `src/activities/util/QuickMenuActivity.*` | +| Search | `src/activities/home/MyLibraryActivity.cpp` | +| CSS | `lib/Epub/Epub/css/` | +| Images | `lib/Epub/Epub/blocks/ImageBlock.*`, `lib/Epub/Epub/converters/` | +| Custom Fonts | `src/customFonts.cpp`, `lib/EpdFont/builtinFonts/custom/` | +| Web Server | `src/network/CrossPointWebServer.*`, `src/util/Md5Utils.*` | +| Lists | `src/BookListStore.*` | +| Settings | `src/CrossPointSettings.*` | +| Tab Bar | `src/ScreenComponents.*` | +| Recents | `src/RecentBooksStore.*`, `src/BadgeConfig.h` | +| OPDS Browser | `src/activities/browser/OpdsBookBrowserActivity.*` | +| Dev Tools | `scripts/pre_flash.py`, `scripts/debugging_monitor.py`, `scripts/pio_helper.py` | +| Power Management | `src/main.cpp`, `src/activities/Activity.h` | + +--- + +## Version Information + +- **Base version:** 0.15.0 +- **Branch:** crosspoint-ef +- **Commits since divergence:** 90+ +- **Files changed:** 250+ diff --git a/docs/crosspoint-ef-user-guide.md b/docs/crosspoint-ef-user-guide.md new file mode 100644 index 0000000..b56d13b --- /dev/null +++ b/docs/crosspoint-ef-user-guide.md @@ -0,0 +1,555 @@ +# CrossPoint-EF User Guide Supplement + +This guide covers the additional features available in the `crosspoint-ef` branch. For basic operation, refer to the main [User Guide](../USER_GUIDE.md). + +## Table of Contents + +- [Dictionary](#dictionary) +- [Bookmarks](#bookmarks) +- [Quick Menu](#quick-menu) +- [Library Search](#library-search) +- [Reading Lists](#reading-lists) +- [Display Settings](#display-settings) +- [Web Server Features](#web-server-features) +- [Custom Fonts](#custom-fonts) +- [Additional Settings](#additional-settings) + +--- + +## Dictionary + +The dictionary feature provides offline word lookup while reading. + +### Setup + +1. Download a StarDict dictionary (English-English dictionary provided as `dict-en-en.zip`) +2. Extract the dictionary files to `/dictionaries/dict-data/` on your SD card +3. You should have these files: + - `dict-data.ifo` + - `dict-data.idx` + - `dict-data.dict.dz` + - `dict-data.syn` (optional, for synonyms) + +### Using the Dictionary + +#### Method 1: Quick Menu + +1. While reading, press the **Power** button briefly (requires Quick Menu to be configured) +2. Select **Dictionary** from the menu +3. Choose **Select from Screen** or **Enter a Word** + +#### Method 2: Direct Power Button Access + +1. Go to **Settings → Controls → Short Power Button Click** +2. Set to **Dictionary** +3. While reading, press the **Power** button briefly to open the dictionary + +### Selecting a Word from the Page + +1. Choose **Select from Screen** from the dictionary menu +2. The current page will display with word selection enabled +3. Use **Left/Right** to move between words +4. Use **Up/Down** to jump between lines +5. Press **Confirm** to look up the selected word +6. Press **Back** to cancel + +### Viewing Definitions + +- Definitions display with rich formatting (bold, italic, lists) +- Use **Left/Right** or **Volume Up/Down** to navigate between pages if the definition is long +- Press **Confirm** to search for another word +- Press **Back** to return to your book + +--- + +## Bookmarks + +Create and manage bookmarks within your books. + +### Adding a Bookmark + +#### Method 1: Quick Menu + +1. Press the **Power** button briefly (requires Quick Menu to be configured) +2. Select **Add Bookmark** (or **Remove Bookmark** if already bookmarked) + +#### Method 2: Settings Configuration + +1. Go to **Settings → Controls → Short Power Button Click** +2. Set to **Quick Menu** +3. Use Quick Menu to toggle bookmarks + +### Bookmark Indicator + +When a page is bookmarked, a small folded corner triangle appears in the top-right corner of the page. + +### Viewing Bookmarks + +1. Go to **Home → Library** +2. Select the **Bookmarks** tab +3. You'll see a list of books that have bookmarks +4. Select a book to view its bookmarks +5. Select a bookmark to jump to that location + +### Deleting Bookmarks + +1. Open a book's bookmark list (from Bookmarks tab) +2. Navigate to the bookmark you want to delete +3. **Long-press Confirm** (hold for about 1 second) +4. Confirm deletion when prompted + +### Bookmark Naming + +Bookmarks are automatically named based on: +- Chapter title and page number (e.g., "Chapter 3 - Page 42") +- Just page number if no chapter title (e.g., "Page 15") + +--- + +## Quick Menu + +Fast access to common actions while reading. + +### Enabling Quick Menu + +1. Go to **Settings → Controls → Short Power Button Click** +2. Select **Quick Menu** + +### Using Quick Menu + +1. While reading, press the **Power** button briefly +2. Navigate with **Up/Down** or **Left/Right** +3. Press **Confirm** to select an option +4. Press **Back** to close the menu + +### Quick Menu Options + +| Option | Description | +|--------|-------------| +| **Dictionary** | Look up a word | +| **Add/Remove Bookmark** | Toggle bookmark on current page | +| **Clear Cache** | Free up storage space | +| **Settings** | Open settings menu | + +--- + +## Library Search + +Search your library by title, author, or filename. + +### Accessing Search + +1. Go to **Home → Library** +2. Select the **Search** tab +3. Or from any tab, scroll to the bottom and select **Search...** + +### Using the Character Picker + +The search uses a character picker interface: + +1. **Left/Right** - Move between characters +2. **Confirm** - Add character to search query +3. **SPC** - Add a space +4. **←** - Delete last character (backspace) +5. **CLR** - Clear entire query + +### Navigating Results + +1. After entering characters, results appear below +2. Press **Down** to move from character picker to results +3. **Left/Right** to navigate results +4. **Confirm** to open a book +5. **Up** to return to character picker + +### Search Scoring + +Results are ranked by relevance: +- Title matches rank highest +- Author matches rank second +- Filename matches rank lowest +- Matches at the start of a field rank higher + +--- + +## Reading Lists + +Create custom book lists for organizing your library. + +### Viewing Lists + +1. Go to **Home → Library** +2. Select the **Lists** tab +3. Available lists are displayed + +### Opening a List + +1. Navigate to a list name +2. Press **Confirm** to view the list contents +3. Select a book to start reading + +### Pinning a List + +Pin a list to quickly access it from the home screen: + +1. In the Lists tab, navigate to a list +2. **Long-press Confirm** to open the action menu +3. Select **Pin List** + +The pinned list name will appear on the Lists button on the home screen. + +### Unpinning a List + +1. Navigate to the pinned list +2. **Long-press Confirm** +3. Select **Unpin List** + +### Deleting a List + +1. Navigate to a list +2. **Long-press Confirm** +3. Select **Delete List** +4. Confirm deletion + +### Creating Lists via Web Server + +Lists can be created and uploaded via the web server API. See [Web Server Features](#web-server-features). + +--- + +## Display Settings + +### High Contrast Mode + +Increases contrast across the entire UI for better readability. + +1. Go to **Settings → Display → High Contrast** +2. Set to **On** or **Off** + +When enabled, mid-gray tones are pushed toward black or white. + +### Bezel Compensation + +Compensate for physical screen edge defects (common on some devices). + +1. Go to **Settings → Display → Bezel Compensation** +2. Set value from **0** (disabled) to **10** pixels +3. If compensation is enabled, select **Bezel Edge**: + - **Bottom** - Default, compensates bottom edge + - **Top** - Compensates top edge + - **Left** - Compensates left edge + - **Right** - Compensates right edge + +The compensation margin automatically rotates with screen orientation. + +### Status Bar Options + +Additional status bar display options: + +| Option | Description | +|--------|-------------| +| None | No status bar | +| No Progress | Status bar without reading progress | +| Full w/ Percentage | Status bar with percentage progress | +| Full w/ Progress Bar | Status bar with visual progress bar | +| Progress Bar | Only progress bar, no other info | + +Configure at **Settings → Display → Status Bar**. + +### Sleep Screen Cover Filter + +When using book cover as sleep screen: + +| Filter | Effect | +|--------|--------| +| None | Grayscale image as-is | +| Contrast | Black and white only (no grays) | +| Inverted | Inverted black and white | + +Configure at **Settings → Display → Sleep Screen Cover Filter**. + +--- + +## Web Server Features + +The web server provides extended file management and companion app support. + +### Starting the Web Server + +1. Go to **Home → File Transfer** +2. Select a WiFi network or create a hotspot +3. The web server URL will be displayed + +### File Management + +Access the file manager at `http:///files` + +**Available Operations:** +- **Upload** - Upload files via drag-and-drop or file picker +- **Download** - Download files to your computer +- **Delete** - Remove files and folders +- **Rename** - Rename files and folders +- **Create Folder** - Create new directories +- **Archive/Unarchive** - Archive books (preserves reading progress) +- **Copy/Move** - Copy or move files and folders + +### API Access + +The web server provides a JSON API for programmatic access: + +| Endpoint | Description | +|----------|-------------| +| `GET /api/status` | Device status | +| `GET /api/files?path=/` | List files | +| `GET /api/archived` | List archived books | +| `GET /api/hash?path=/book.epub` | Get MD5 hash | + +### mDNS Discovery + +The device advertises itself as `crosspoint.local` on your network. + +### Companion App Support + +The web server supports the CrossPoint Companion Android app: + +1. **QR Code** - Scan the QR code displayed on the web server screen +2. **Deep Links** - URLs like `crosspoint://files?host=192.168.1.100` open the app directly + +### Managing Reading Lists via API + +**Get all lists:** +``` +GET /list +``` + +**Get specific list:** +``` +GET /list?name=MyList +``` + +**Upload a list:** +``` +POST /list?action=upload&name=MyList +Content-Type: text/plain + +1,Book Title,Author Name,/path/to/book.epub +2,Another Book,Another Author,/path/to/another.epub +``` + +**Delete a list:** +``` +POST /list?action=delete&name=MyList +``` + +--- + +## Custom Fonts + +Two additional accessibility-focused fonts are available. + +### Available Custom Fonts + +1. **Atkinson Hyperlegible Next** - Designed for low-vision readers with high character differentiation +2. **Fern Micro** - Optimized for small screens + +### Enabling Custom Fonts + +1. Go to **Settings → Reader → Font Family** +2. Select **Custom** +3. Go to **Settings → Reader → Custom Font** +4. Select your preferred font + +### Fallback Font + +When using custom fonts, set a fallback for missing glyphs: + +1. Go to **Settings → Reader → Fallback Font** +2. Choose **Bookerly** or **Noto Sans** + +--- + +## Additional Settings + +### Short Power Button Actions + +Configure what happens when you briefly press the Power button: + +| Option | Action | +|--------|--------| +| Ignore | No action (default) | +| Sleep | Put device to sleep | +| Page Turn | Turn to next page | +| Dictionary | Open dictionary | +| Quick Menu | Open quick menu | + +Configure at **Settings → Controls → Short Power Button Click**. + +### Long-press Chapter Skip + +Control side button long-press behavior: + +- **On** (default) - Long-press Volume buttons to skip chapters +- **Off** - Long-press scrolls a page instead + +Configure at **Settings → Controls → Long-press Chapter Skip**. + +### Hyphenation + +Enable word hyphenation for justified text: + +1. Go to **Settings → Reader → Hyphenation** +2. Set to **On** + +Hyphenation patterns are available for multiple languages (English, German, French, Spanish, Russian, etc.). + +--- + +## Recents View Enhancements + +### Badges + +Books in the Recent tab display badges showing: +- **File extension** (epub, txt, md) +- **Suffix tags** (X4, X4P for files with `-x4` or `-x4p` suffixes) + +### Removing from Recents + +1. Navigate to a book in the Recent tab +2. **Long-press Confirm** +3. Select **Remove from Recents** + +### Clearing All Recents + +1. Navigate to any book in the Recent tab +2. **Long-press Confirm** +3. Select **Clear All Recents** +4. Confirm the action + +--- + +## Tab Navigation + +The library uses a unified tab bar for navigation. + +### Tabs Available + +| Tab | Contents | +|-----|----------| +| Recent | Recently opened books | +| Lists | Custom reading lists | +| Bookmarks | Books with bookmarks | +| Search | Search all books | +| Files | File browser | + +### Navigating Tabs + +When the tab bar is focused: +- **Left/Right** - Switch between tabs +- **Down** - Enter the selected tab's content +- **Confirm** - Same as Down + +### Tab Overflow + +When tabs don't fit on screen: +- **<** indicator appears on left when more tabs exist to the left +- **>** indicator appears on right when more tabs exist to the right +- Scroll continues automatically when navigating past visible tabs + +--- + +## Inline Images + +EPUBs with embedded images now display them inline with text. + +### Supported Formats + +- JPEG (.jpg, .jpeg) +- PNG (.png) + +### Image Display + +- Images are automatically scaled to fit the page width +- Images are converted to 4-level grayscale with dithering +- First load may be slower as images are processed +- Subsequent loads use cached versions + +### Image Cache + +Processed images are cached as `.pxc` files in the book's cache directory for faster loading. + +--- + +## Troubleshooting + +### Dictionary Not Working + +1. Verify dictionary files are in `/dictionaries/dict-data/` +2. Check that all required files exist (.ifo, .idx, .dict.dz) +3. File names must match exactly (case-sensitive) + +### Bookmarks Not Saving + +1. Ensure SD card is not write-protected +2. Check available storage space +3. Bookmarks are saved per-book in `/.crosspoint/` + +### Search Not Finding Books + +1. Search only indexes books in the library +2. Ensure books have proper EPUB metadata +3. Try searching by filename if metadata is missing + +### Images Not Displaying + +1. Only PNG and JPEG formats are supported +2. Very large images may fail to load due to memory constraints +3. Check for sufficient free memory (multiple large books open may exhaust memory) + +### Web Server Connection Issues + +1. Ensure device and computer are on the same network +2. Try accessing via IP address instead of `crosspoint.local` +3. Check that firewall isn't blocking port 80 + +--- + +## Keyboard Shortcuts Summary + +### In Reader + +| Button | Action | +|--------|--------| +| Left/Volume Up | Previous page | +| Right/Volume Down | Next page | +| Left (hold) | Previous chapter | +| Right (hold) | Next chapter | +| Back | Return to library | +| Back (hold) | Return to home | +| Confirm | Open chapter selection | +| Power (brief) | Configured action (Quick Menu/Dictionary/Sleep/Page Turn) | + +### In Quick Menu + +| Button | Action | +|--------|--------| +| Up/Down/Left/Right | Navigate options | +| Confirm | Select option | +| Back | Close menu | + +### In Word Selection + +| Button | Action | +|--------|--------| +| Left/Right | Move between words | +| Up/Down | Move between lines | +| Confirm | Look up word | +| Back | Cancel | + +### In Library Tabs + +| Button | Action | +|--------|--------| +| Left/Right | Switch tabs (when tab bar focused) | +| Up/Down | Navigate within tab | +| Confirm | Select item / Enter tab | +| Confirm (hold) | Action menu | +| Back | Go back / Exit to home |