| assets | ||
| helpers | ||
| imports | ||
| compile.sh | ||
| kscribe.c | ||
| kscribe.h | ||
| penpad_fb2.c | ||
| README.md | ||
Kscribe (penpad) — Native Kindle Scribe Notepad
simplenotes is a fully native drawing and note-taking application for the Kindle Scribe, written in C and built directly on top of:
/dev/input/stylus/dev/input/touch/dev/fb0(8-bit grayscale framebuffer)- direct eInk refresh via
eips - custom PBM + PNG export (LodePNG)
It runs without the Kindle framework interfering by exclusively grabbing stylus and touch events. The code is optimized for real-time drawing, fast refresh, and full-screen handwriting.
Features
Drawing
- Smooth line drawing using Bresenham.
- Adjustable stroke thickness (
STROKE_PX). - Fast thick-point rasterization optimized for eInk.
- Top-bar protected region to prevent accidental strokes.
Input Mapping
- Fully calibrated raw stylus → pixel mapping.
- Reversed X and inverted Y axes (matching Scribe hardware).
- Touch and stylus suppressed from the framework using
EVIOCGRAB.
Saving & Loading
- PBM Save: 1-bit
P1PBM file (latest.fb) stored at:/mnt/us/extensions/simplenotes/bin/latest.fb - PNG Export: full-resolution PNG saved with timestamp to:
/mnt/us/simplenotes/note-YYYYmmdd-HHMMSS.png - Load on startup: pass a PBM file as
argv[1]to restore a page on launch.
Gesture Controls
Gestures are based on double-tap with the stylus:
| Region | Gesture | Action |
|---|---|---|
| Top-left | double-tap | Save PBM + PNG |
| Top-right | double-tap | Exit the program |
| Bottom-right | double-tap | Reset page (no save) |
Gesture detection uses a 2-second timing window.
UI
- Title bar drawn using
eips. - PNG icons (
exit.png,reset.png,save.png) shown viaeips -g. - Automatic refresh throttling (
REFRESH_INTERVAL_MS).
Directory Layout
/mnt/us/extensions/simplenotes/
│
├── bin/
│ ├── simplenotes (compiled binary)
│ └── latest.fb # always overwritten on save
│
├── assets/
│ ├── exit.png
│ ├── reset.png
│ └── save.png
│
└── (other KUAL metadata)
User-visible notebooks (PNG exports):
/mnt/us/simplenotes/note-YYYYmmdd-HHMMSS.png
Build Instructions
Requirements
-
GCC for ARM (Kindle cross-compile) or KindleToolchain.
-
LodePNG included in source tree.
-
A jailbroken Kindle Scribe with:
- KUAL
- USBNet / SSH
Compile (on device or cross-compiled)
gcc -O2 -std=c99 penpad_fb2.c lodepng.c -o simplenotes
Copy into the extension directory:
scp simplenotes root@kindle:/mnt/us/extensions/simplenotes/bin/
Ensure executable bit:
chmod +x /mnt/us/extensions/simplenotes/bin/simplenotes
Running
Launch normally (clean page)
./simplenotes
Launch with a PBM document restored
./simplenotes page.pbm
Controls
Drawing
Just use the stylus. Drawing stops in:
- the top gesture bar (
TOPBAR_H) - the UI icon region
Gestures
All gestures require two quick pen-down events in the target zone.
| Gesture | Behavior |
|---|---|
| Top-left double-tap | Save PBM + PNG, clear screen, redraw UI |
| Top-right double-tap | Exit program |
| Bottom-right double-tap | Reset page without saving |
File Formats
PBM Export
- 1-bit P1 format
- Always stored as
/mnt/us/extensions/simplenotes/bin/latest.fb - Useful for restoring a session exactly
PNG Export
- Real 8-bit grayscale → 32-bit RGBA PNG conversion via LodePNG
- Timestamped filename
- Stored in
/mnt/us/simplenotes/
Technical Overview
Framebuffer
-
Reads framebuffer geometry via
FBIOGET_FSCREENINFO+FBIOGET_VSCREENINFO -
Maps
/dev/fb0usingmmap -
Writes raw grayscale values directly:
0x00= black0xFF= white
Internal Bitmap
- Maintains a full-screen 1-bit buffer
g_bitmap - Used for PBM and PNG export
- Updated simultaneously with framebuffer writes
Refresh Model
-
Partial refresh every
REFRESH_INTERVAL_MS -
Full refresh on demand:
system("eips -r");
Known Limitations
- No undo/redo (possible future enhancement).
- No multi-page notebook support.
- PNG rendering limited by Kindle CPU; PBM much faster.
eips -gsometimes logs a harmless “barcode missing” warning.
Future Extensions
These are explicitly listed in the project notes and remain possible next steps:
- Undo / Redo system
- Multi-page notebook (page stack)
- Layer support
- Pressure sensitivity
- PNG import
- fbink integration for faster partial refresh
- UI overlay mode
- Eraser tool
License
MIT License (recommended, adjust if needed).
Credits
Developed by maru21 Testing, calibration, and optimization performed directly on Kindle Scribe hardware.