3.5 KiB
Extensions (Apps)
CrossPoint supports extensions implemented as standalone firmware images installed from the SD card.
This is intended to keep non-core features (games/tools/experiments) out of the main reader firmware.
SD layout
An extension is a firmware binary plus a small manifest:
/.crosspoint/apps/<appId>/
app.bin # ESP32-C3 firmware image (starts with magic byte 0xE9)
app.json # manifest (name, version, ...)
CrossPoint discovers extensions by scanning /.crosspoint/apps/*/app.json.
How it boots (high level)
SD app.bin -> CrossPoint flashes to the other OTA slot -> reboot into extension
Note: CrossPoint OTA updates may overwrite the currently-installed extension slot (two-slot OTA). The extension remains on SD and can be reinstalled.
Installing an app (on device)
- Home → Apps
- Select the app
- Press Launch/Install
CrossPoint will flash app.bin to the OTA partition and reboot.
Fast iteration: upload apps over WiFi (no SD card removal)
Use the File Transfer feature:
- On device: Home → File Transfer
- Connect to WiFi (STA) or create a hotspot (AP)
- From your computer/phone browser, open the URL shown on the device
- Open Apps (Developer)
- Fill in:
- App ID (e.g.
chess-puzzlesororg.example.myapp) - Name
- Version
- Optional: author, description, minFirmware
- App ID (e.g.
- Upload your app binary (
app.bin) - On device: Home → Apps → select app → Install
Notes:
- This page is upload-only. Installing always happens on device.
- The Apps (Developer) page writes to
/.crosspoint/apps/<appId>/and generatesapp.json.
Building apps with the community SDK
Recommended SDK: https://github.com/open-x4-epaper/community-sdk
Typical setup (in your app repo):
- Add the SDK as a submodule:
git submodule add https://github.com/open-x4-epaper/community-sdk.git open-x4-sdk - In
platformio.ini, add SDK libs aslib_deps(symlink form), for example:lib_deps = BatteryMonitor=symlink://open-x4-sdk/libs/hardware/BatteryMonitor EInkDisplay=symlink://open-x4-sdk/libs/display/EInkDisplay SDCardManager=symlink://open-x4-sdk/libs/hardware/SDCardManager InputManager=symlink://open-x4-sdk/libs/hardware/InputManager - Build with PlatformIO:
pio run - The firmware binary will usually be:
.pio/build/<env>/firmware.bin
For CrossPoint app uploads:
- Rename/copy your output to
app.bin, then upload via the Apps (Developer) page.
Example: Hello World app
This repo includes a minimal Hello World app that can be built as a standalone firmware image and installed via the Apps menu.
Build:
.venv/bin/pio run -e hello-world
Upload the output:
- File:
.pio/build/hello-world/firmware.bin - Upload via: File Transfer → Apps (Developer)
- Suggested App ID:
hello-world
Then install on device:
Home → Apps → Hello World → Install
Distribution (proposed)
Apps should live in their own repositories and publish binaries via GitHub Releases.
For safety/auditability, registry listings should reference a public source repository (e.g. GitHub URL) so maintainers and users can review the code that produced the release.
Release assets:
- Required:
app.bin - Optional:
app.json
Registry location (maintainer choice):
- Separate repo (recommended):
crosspoint-reader/app-registrycontainingapps.json - Or keep
apps.jsonin the main firmware repo
The on-device store UI can be built later on top of this ecosystem.