diff --git a/USER_GUIDE.md b/USER_GUIDE.md index 0c85269..d670abb 100644 --- a/USER_GUIDE.md +++ b/USER_GUIDE.md @@ -2,6 +2,27 @@ Welcome to the **CrossPoint** firmware. This guide outlines the hardware controls, navigation, and reading features of the device. +- [CrossPoint User Guide](#crosspoint-user-guide) + - [1. Hardware Overview](#1-hardware-overview) + - [Button Layout](#button-layout) + - [2. Power \& Startup](#2-power--startup) + - [Power On / Off](#power-on--off) + - [First Launch](#first-launch) + - [3. Screens](#3-screens) + - [3.1 Home Screen](#31-home-screen) + - [3.2 Book Selection](#32-book-selection) + - [3.3 Reading Mode](#33-reading-mode) + - [3.4 File Upload Screen](#34-file-upload-screen) + - [3.5 Settings](#35-settings) + - [3.6 Sleep Screen](#36-sleep-screen) + - [4. Reading Mode](#4-reading-mode) + - [Page Turning](#page-turning) + - [Chapter Navigation](#chapter-navigation) + - [System Navigation](#system-navigation) + - [5. Chapter Selection Screen](#5-chapter-selection-screen) + - [6. Current Limitations \& Roadmap](#6-current-limitations--roadmap) + + ## 1. Hardware Overview The device utilises the standard buttons on the Xtink X4 (in the same layout as the manufacturer firmware, by default): diff --git a/docs/troubleshooting.md b/docs/troubleshooting.md new file mode 100644 index 0000000..7c50a30 --- /dev/null +++ b/docs/troubleshooting.md @@ -0,0 +1,57 @@ +# Troubleshooting + +This document show most common issues and possible solutions while using the device features. + +- [Troubleshooting](#troubleshooting) + - [Cannot See the Device on the Network](#cannot-see-the-device-on-the-network) + - [Connection Drops or Times Out](#connection-drops-or-times-out) + - [Upload Fails](#upload-fails) + - [Saved Password Not Working](#saved-password-not-working) + +### Cannot See the Device on the Network + +**Problem:** Browser shows "Cannot connect" or "Site can't be reached" + +**Solutions:** + +1. Verify both devices are on the **same WiFi network** + - Check your computer/phone WiFi settings + - Confirm the CrossPoint Reader shows "Connected" status +2. Double-check the IP address + - Make sure you typed it correctly + - Include `http://` at the beginning +3. Try disabling VPN if you're using one +4. Some networks have "client isolation" enabled - check with your network administrator + +### Connection Drops or Times Out + +**Problem:** WiFi connection is unstable + +**Solutions:** + +1. Move closer to the WiFi router +2. Check signal strength on the device (should be at least `||` or better) +3. Avoid interference from other devices +4. Try a different WiFi network if available + +### Upload Fails + +**Problem:** File upload doesn't complete or shows an error + +**Solutions:** + +1. Ensure the file is a valid `.epub` file +2. Check that the SD card has enough free space +3. Try uploading a smaller file first to test +4. Refresh the browser page and try again + +### Saved Password Not Working + +**Problem:** Device fails to connect with saved credentials + +**Solutions:** + +1. When connection fails, you'll be prompted to "Forget Network" +2. Select **Yes** to remove the saved password +3. Reconnect and enter the password again +4. Choose to save the new password diff --git a/docs/webserver-endpoints.md b/docs/webserver-endpoints.md new file mode 100644 index 0000000..0abe9df --- /dev/null +++ b/docs/webserver-endpoints.md @@ -0,0 +1,331 @@ +# Webserver Endpoints + +This document describes all HTTP and WebSocket endpoints available on the CrossPoint Reader webserver. + +- [Webserver Endpoints](#webserver-endpoints) + - [Overview](#overview) + - [HTTP Endpoints](#http-endpoints) + - [GET `/` - Home Page](#get----home-page) + - [GET `/files` - File Browser Page](#get-files---file-browser-page) + - [GET `/api/status` - Device Status](#get-apistatus---device-status) + - [GET `/api/files` - List Files](#get-apifiles---list-files) + - [POST `/upload` - Upload File](#post-upload---upload-file) + - [POST `/mkdir` - Create Folder](#post-mkdir---create-folder) + - [POST `/delete` - Delete File or Folder](#post-delete---delete-file-or-folder) + - [WebSocket Endpoint](#websocket-endpoint) + - [Port 81 - Fast Binary Upload](#port-81---fast-binary-upload) + - [Network Modes](#network-modes) + - [Station Mode (STA)](#station-mode-sta) + - [Access Point Mode (AP)](#access-point-mode-ap) + - [Notes](#notes) + + +## Overview + +The CrossPoint Reader exposes a webserver for file management and device monitoring: + +- **HTTP Server**: Port 80 +- **WebSocket Server**: Port 81 (for fast binary uploads) + +--- + +## HTTP Endpoints + +### GET `/` - Home Page + +Serves the home page HTML interface. + +**Request:** +```bash +curl http://crosspoint.local/ +``` + +**Response:** HTML page (200 OK) + +--- + +### GET `/files` - File Browser Page + +Serves the file browser HTML interface. + +**Request:** +```bash +curl http://crosspoint.local/files +``` + +**Response:** HTML page (200 OK) + +--- + +### GET `/api/status` - Device Status + +Returns JSON with device status information. + +**Request:** +```bash +curl http://crosspoint.local/api/status +``` + +**Response (200 OK):** +```json +{ + "version": "1.0.0", + "ip": "192.168.1.100", + "mode": "STA", + "rssi": -45, + "freeHeap": 123456, + "uptime": 3600 +} +``` + +| Field | Type | Description | +| ---------- | ------ | --------------------------------------------------------- | +| `version` | string | CrossPoint firmware version | +| `ip` | string | Device IP address | +| `mode` | string | `"STA"` (connected to WiFi) or `"AP"` (access point mode) | +| `rssi` | number | WiFi signal strength in dBm (0 in AP mode) | +| `freeHeap` | number | Free heap memory in bytes | +| `uptime` | number | Seconds since device boot | + +--- + +### GET `/api/files` - List Files + +Returns a JSON array of files and folders in the specified directory. + +**Request:** +```bash +# List root directory +curl http://crosspoint.local/api/files + +# List specific directory +curl "http://crosspoint.local/api/files?path=/Books" +``` + +**Query Parameters:** + +| Parameter | Required | Default | Description | +| --------- | -------- | ------- | ---------------------- | +| `path` | No | `/` | Directory path to list | + +**Response (200 OK):** +```json +[ + {"name": "MyBook.epub", "size": 1234567, "isDirectory": false, "isEpub": true}, + {"name": "Notes", "size": 0, "isDirectory": true, "isEpub": false}, + {"name": "document.pdf", "size": 54321, "isDirectory": false, "isEpub": false} +] +``` + +| Field | Type | Description | +| ------------- | ------- | ---------------------------------------- | +| `name` | string | File or folder name | +| `size` | number | Size in bytes (0 for directories) | +| `isDirectory` | boolean | `true` if the item is a folder | +| `isEpub` | boolean | `true` if the file has `.epub` extension | + +**Notes:** +- Hidden files (starting with `.`) are automatically filtered out +- System folders (`System Volume Information`, `XTCache`) are hidden + +--- + +### POST `/upload` - Upload File + +Uploads a file to the SD card via multipart form data. + +**Request:** +```bash +# Upload to root directory +curl -X POST -F "file=@mybook.epub" http://crosspoint.local/upload + +# Upload to specific directory +curl -X POST -F "file=@mybook.epub" "http://crosspoint.local/upload?path=/Books" +``` + +**Query Parameters:** + +| Parameter | Required | Default | Description | +| --------- | -------- | ------- | ------------------------------- | +| `path` | No | `/` | Target directory for the upload | + +**Response (200 OK):** +``` +File uploaded successfully: mybook.epub +``` + +**Error Responses:** + +| Status | Body | Cause | +| ------ | ----------------------------------------------- | --------------------------- | +| 400 | `Failed to create file on SD card` | Cannot create file | +| 400 | `Failed to write to SD card - disk may be full` | Write error during upload | +| 400 | `Failed to write final data to SD card` | Error flushing final buffer | +| 400 | `Upload aborted` | Client aborted the upload | +| 400 | `Unknown error during upload` | Unspecified error | + +**Notes:** +- Existing files with the same name will be overwritten +- Uses a 4KB buffer for efficient SD card writes + +--- + +### POST `/mkdir` - Create Folder + +Creates a new folder on the SD card. + +**Request:** +```bash +curl -X POST -d "name=NewFolder&path=/" http://crosspoint.local/mkdir +``` + +**Form Parameters:** + +| Parameter | Required | Default | Description | +| --------- | -------- | ------- | ---------------------------- | +| `name` | Yes | - | Name of the folder to create | +| `path` | No | `/` | Parent directory path | + +**Response (200 OK):** +``` +Folder created: NewFolder +``` + +**Error Responses:** + +| Status | Body | Cause | +| ------ | ----------------------------- | ----------------------------- | +| 400 | `Missing folder name` | `name` parameter not provided | +| 400 | `Folder name cannot be empty` | Empty folder name | +| 400 | `Folder already exists` | Folder with same name exists | +| 500 | `Failed to create folder` | SD card error | + +--- + +### POST `/delete` - Delete File or Folder + +Deletes a file or folder from the SD card. + +**Request:** +```bash +# Delete a file +curl -X POST -d "path=/Books/mybook.epub&type=file" http://crosspoint.local/delete + +# Delete an empty folder +curl -X POST -d "path=/OldFolder&type=folder" http://crosspoint.local/delete +``` + +**Form Parameters:** + +| Parameter | Required | Default | Description | +| --------- | -------- | ------- | -------------------------------- | +| `path` | Yes | - | Path to the item to delete | +| `type` | No | `file` | Type of item: `file` or `folder` | + +**Response (200 OK):** +``` +Deleted successfully +``` + +**Error Responses:** + +| Status | Body | Cause | +| ------ | --------------------------------------------- | ----------------------------- | +| 400 | `Missing path` | `path` parameter not provided | +| 400 | `Cannot delete root directory` | Attempted to delete `/` | +| 400 | `Folder is not empty. Delete contents first.` | Non-empty folder | +| 403 | `Cannot delete system files` | Hidden file (starts with `.`) | +| 403 | `Cannot delete protected items` | Protected system folder | +| 404 | `Item not found` | Path does not exist | +| 500 | `Failed to delete item` | SD card error | + +**Protected Items:** +- Files/folders starting with `.` +- `System Volume Information` +- `XTCache` + +--- + +## WebSocket Endpoint + +### Port 81 - Fast Binary Upload + +A WebSocket endpoint for high-speed binary file uploads. More efficient than HTTP multipart for large files. + +**Connection:** +``` +ws://crosspoint.local:81/ +``` + +**Protocol:** + +1. **Client** sends TEXT message: `START:::` +2. **Server** responds with TEXT: `READY` +3. **Client** sends BINARY messages with file data chunks +4. **Server** sends TEXT progress updates: `PROGRESS::` +5. **Server** sends TEXT when complete: `DONE` or `ERROR:` + +**Example Session:** + +``` +Client -> "START:mybook.epub:1234567:/Books" +Server -> "READY" +Client -> [binary chunk 1] +Client -> [binary chunk 2] +Server -> "PROGRESS:65536:1234567" +Client -> [binary chunk 3] +... +Server -> "PROGRESS:1234567:1234567" +Server -> "DONE" +``` + +**Error Messages:** + +| Message | Cause | +| --------------------------------- | ---------------------------------- | +| `ERROR:Failed to create file` | Cannot create file on SD card | +| `ERROR:Invalid START format` | Malformed START message | +| `ERROR:No upload in progress` | Binary data received without START | +| `ERROR:Write failed - disk full?` | SD card write error | + +**Example with `websocat`:** +```bash +# Interactive session +websocat ws://crosspoint.local:81 + +# Then type: +START:mybook.epub:1234567:/Books +# Wait for READY, then send binary data +``` + +**Notes:** +- Progress updates are sent every 64KB or at completion +- Disconnection during upload will delete the incomplete file +- Existing files with the same name will be overwritten + +--- + +## Network Modes + +The device can operate in two network modes: + +### Station Mode (STA) +- Device connects to an existing WiFi network +- IP address assigned by router/DHCP +- `mode` field in `/api/status` returns `"STA"` +- `rssi` field shows signal strength + +### Access Point Mode (AP) +- Device creates its own WiFi hotspot +- Default IP is typically `192.168.4.1` +- `mode` field in `/api/status` returns `"AP"` +- `rssi` field returns `0` + +--- + +## Notes + +- These examples use `crosspoint.local`. If your network does not support mDNS or the address does not resolve, replace it with the specific **IP Address** displayed on your device screen (e.g., `http://192.168.1.102/`). +- All paths on the SD card start with `/` +- Trailing slashes are automatically stripped (except for root `/`) +- The webserver uses chunked transfer encoding for file listings diff --git a/docs/webserver.md b/docs/webserver.md index 2285a92..355bac4 100644 --- a/docs/webserver.md +++ b/docs/webserver.md @@ -172,89 +172,7 @@ This is useful for organizing your ebooks by genre, author, or series. ## Command Line File Management -For power users, you can manage files directly from your terminal using `curl` while the device is in File Upload mode. - -### Uploading a File -To upload a file to the root directory, use the following command: -```bash -curl -F "file=@book.epub" "http://crosspoint.local/upload?path=/" -``` - -* **`-F "file=@filename"`**: Points to the local file on your computer. -* **`path=/`**: The destination folder on the device SD card. - -### Deleting a File - -To delete a specific file, provide the full path on the SD card: - -```bash -curl -F "path=/folder/file.epub" "http://crosspoint.local/delete" -``` - -### Advanced Flags - -For more reliable transfers of large EPUB files, consider adding these flags: - -* `-#`: Shows a simple progress bar. -* `--connect-timeout 30`: Limits how long curl waits to establish a connection (in seconds). -* `--max-time 300`: Sets a maximum duration for the entire transfer (5 minutes). - -> [!NOTE] -> These examples use `crosspoint.local`. If your network does not support mDNS or the address does not resolve, replace it with the specific **IP Address** displayed on your device screen (e.g., `http://192.168.1.102/`). - ---- - -## Troubleshooting - -### Cannot See the Device on the Network - -**Problem:** Browser shows "Cannot connect" or "Site can't be reached" - -**Solutions:** - -1. Verify both devices are on the **same WiFi network** - - Check your computer/phone WiFi settings - - Confirm the CrossPoint Reader shows "Connected" status -2. Double-check the IP address - - Make sure you typed it correctly - - Include `http://` at the beginning -3. Try disabling VPN if you're using one -4. Some networks have "client isolation" enabled - check with your network administrator - -### Connection Drops or Times Out - -**Problem:** WiFi connection is unstable - -**Solutions:** - -1. Move closer to the WiFi router -2. Check signal strength on the device (should be at least `||` or better) -3. Avoid interference from other devices -4. Try a different WiFi network if available - -### Upload Fails - -**Problem:** File upload doesn't complete or shows an error - -**Solutions:** - -1. Ensure the file is a valid `.epub` file -2. Check that the SD card has enough free space -3. Try uploading a smaller file first to test -4. Refresh the browser page and try again - -### Saved Password Not Working - -**Problem:** Device fails to connect with saved credentials - -**Solutions:** - -1. When connection fails, you'll be prompted to "Forget Network" -2. Select **Yes** to remove the saved password -3. Reconnect and enter the password again -4. Choose to save the new password - ---- +For power users, you can manage files directly from your terminal using `curl` while the device is in File Upload mode a detailed documentation can be found [here](./webserver-endpoints.md). ## Security Notes @@ -303,4 +221,5 @@ Your uploaded files will be immediately available in the file browser! ## Related Documentation - [User Guide](../USER_GUIDE.md) - General device operation +- [Troubleshooting](./troubleshooting.md) - Troubleshooting - [README](../README.md) - Project overview and features