- Add crosspoint-ef fork notice to README with links to upstream - Include feature overview, user guide, and technical comparison docs
This commit is contained in:
parent
c052512b1b
commit
2a31559747
11
README.md
11
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.
|
||||
|
||||
422
docs/branch-comparison-summary.md
Normal file
422
docs/branch-comparison-summary.md
Normal file
@ -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.
|
||||
603
docs/crosspoint-ef-features.md
Normal file
603
docs/crosspoint-ef-features.md
Normal file
@ -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_}<hash>/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:<filename>:<size>:<path>` → `READY` → binary chunks → `DONE`
|
||||
- Progress updates: `PROGRESS:<received>:<total>`
|
||||
|
||||
**mDNS Discovery:**
|
||||
- Hostname: `crosspoint.local`
|
||||
- Service: `_http._tcp` on port 80
|
||||
- UDP discovery on port 8134
|
||||
|
||||
**Deep Link Support:**
|
||||
- URL scheme: `crosspoint://<path>?host=<ip>&port=<port>&wsPort=<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 `<br/>`)
|
||||
- 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+
|
||||
555
docs/crosspoint-ef-user-guide.md
Normal file
555
docs/crosspoint-ef-user-guide.md
Normal file
@ -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://<device-ip>/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 |
|
||||
Loading…
x
Reference in New Issue
Block a user