Repository navigation
Releases: hthoene/paperpaw
Release list
PaperPaw 0.5.0-beta.12
Changed
- X4 (with an SSD1677 panel, as most have): a setting, Fast changes (Display), says how menus and a moved focus
are shown: the panel's own waveform (500 ms, the cleanest) or a quicker
one of 8, 6 or 4 frames (found in the waveform lab; about 160 ms with 4),
which leave more ghosting that the next full refresh clears. It is
The panel's own (the slowest, the cleanest) by default; page turns are as before.
Black-and-white refreshes (screens that ask forfastest, such as games)
take about 100 ms, with 1 frame. The frames and the kick of both are
settings of the developer group (x4.ssd1677.fast-frames,x4.ssd1677.fast-kick,
x4.ssd1677.mono-frames,x4.ssd1677.mono-kick, offered only where the panel's
controller is an SSD1677; the fast ones where Fast changes is
Own values), so a plugin without code can set them in itssettings.ini
or by an action; the firmware keeps them in the order of the modes (fast
at most 20 frames, black and white no more than fast).
Added
-
X4 Pro (a UC8179 controller): the fastest refresh (screens that ask for
fastest,
such as games) has numbers of its own, the developer settingsx4.uc8179.mono-frames
(12),x4.uc8179.mono-hold(0) andx4.uc8179.mono-rate(200 Hz): about 175 ms
by the formula (3 frames at 100 Hz were far too grey, 6 nearly clean: the drive
needs about 60 ms, whatever the rate). The frame rates go up to 200 Hz (110, 130,
150, 200 added); the log says how long the setup and the refresh waited for the
controller. It took the step of Fast changes (7 frames, hold 3,
about 330 ms, no ghosts) before. The numbers are a guess, to tune on a device. -
X4 Pro (a UC8179 controller): a developer setting,
x4.uc8179.transfer, says how much
of the picture goes to the controller for a fast change: the whole (what the
stock firmware sends), only the rows and columns that changed (into both
memories), or only into the new memory, leaving the controller's own copy to
make the old one (the default: about 50 ms less a fast change, 329 instead of
379 ms at 7 frames, judged right on a device). The refresh itself
still covers the whole display, so the hold keeps working. The whole picture
goes again after a start, a sleep, grays and the slow refreshes. -
X4 Pro (a UC8179 controller): Fast changes (Display) says how menus and a moved
focus are shown, as on the X4: the panel's own waveform (625 ms) or a quicker
one of the controller's registers, run at the voltages of the panel's own
waveform (read from its OTP at start, about 65 ms more): 6, 7 or 10 (the panel's own is the default)
frames with 3 held (about 360, 380 and 440 ms), or own values in the developer
settings (x4.uc8179.*). Found with the waveform lab on a device. -
The waveform lab's direct drive on the X4 Pro can hold the pixels that stay (0 to 3
frames driven to their own colour, as the controller's own fast waveform does
for one frame), which keeps the ghosts of earlier frames down. -
The waveform lab's direct drive on the X4 Pro runs at the voltages and VCOM of the
controller's own waveform (read from its OTP at start), not the reset values
of its registers (VDH and VDL 14.0 V, VCOM_DC next to nothing); and the lab can
show the panel's own waveform at a temperature (up to 120 degrees) on a UC8179
too. -
Developer firmware of the X4 Pro (
x4probuilds) reads the controller's OTP at start (a
UC8179, about 100 ms) and tells the log what its own waveforms are: the
temperature ranges, their frame rate, voltages and VCOM, and the states of the
ranges 25 and 90 degrees select (otp:lines). -
The waveform lab also runs on the X4 Pro (a UC8179 controller): a direct drive
made of the controller's waveform registers, with the frames, the kick, the
frame rate (20 to 100 Hz), the repeat and the levels of white and black to try,
at the controller's own voltages. Developer firmware (x4probuilds). -
tools/flash-x4.pybuilds the checked-out source and flashes it to an X4,
X4 Pro, X4 Classic or X3 over USB, with a check of the tools, an optional
backup of the reader's flash and a dry run. -
The developer firmware of the X4 has a Waveform lab under Tools, for
trying how the panel is driven: its own tables at a temperature, or a
direct drive with the frames and the kick chosen on the screen.
Changed
- X4 (with an SSD1677 panel, as most have): a setting, Fast changes (Display), says how menus and a moved focus
are shown: the panel's own waveform (500 ms, the cleanest) or a quicker
one of 8, 6 or 4 frames (found in the waveform lab; about 160 ms with 4),
which leave more ghosting that the next full refresh clears. It is
Quicker, some ghosting (6 frames) by default; page turns are as before.
Black-and-white refreshes (screens that ask forfastest, such as games)
take about 100 ms, with 1 frame. The frames and the kick of both are
settings of the developer group (x4.ssd1677.fast-frames,x4.ssd1677.fast-kick,
x4.ssd1677.mono-frames,x4.ssd1677.mono-kick, offered only where the panel's
controller is an SSD1677; the fast ones where Fast changes is
Own values), so a plugin without code can set them in itssettings.ini
or by an action; the firmware keeps them in the order of the modes (fast
at most 20 frames, black and white no more than fast). - EPUB chapters convert and pages read faster, books open with fewer file
lookups, and skimming to the next or previous chapter no longer converts
every chapter of the book first. - Folders on the SD card are read faster, and reading a large file at
scattered places no longer walks its clusters from the start each time. - Page turns finish sooner: the X4 Pro and X4 Classic no longer send each
frame a second time after its refresh, and released firmware no longer
checks every frame it sends. - Text, light separator lines and shaded highlights draw faster in black and
white and in grays, with the same pixels as before. - Menus, settings pages and the home screen spend less time on their texts
and settings, and a start reads the translations faster: a message is
looked for only in the catalogs that can hold it. - Large libraries open faster: the library's shelves and its index read
the catalog once, a shelf shown again after a book or its actions is not
read anew when nothing changed, home keeps its covers made small, and
the vocabulary list reads only the words of the page shown. - Book pages draw faster: lines outside the part of the screen being drawn
are skipped instead of measured word by word. Searching a book needs less
memory. - Turning a page waits less for the card: the reading position and
today's reading are written once the pages rest for a moment, the book
closes or the device sleeps, and the book's details are read only when
its shown percentage changes. - Pages are laid out faster: hyphenation stops looking for patterns that
cannot match, and characters are found in font packs with fewer lookups.
Lines break exactly as before. - Lists, menus and settings pages draw faster on readers that draw the
screen in bands, such as the X4: rows, headers and status lines outside
the band being drawn are skipped instead of laid out again for each band. - A page turns as soon as its button goes down: holding a page button
for the next or previous chapter is now off by default and can be
switched on in the settings under Controls ("Hold for next chapter",
an advanced setting). - Button response on the X4s has a third choice, Saving: the processor
sleeps up to 50 ms between readings of the buttons on battery (30 ms
as Normal, 10 ms as Faster), for a little less current; a tap
shorter than that may be missed. Normal stays as it was. - Rules: the list to choose an action, a switch or a number from comes by
plugin where it is longer than a page (some six pages of actions on the
X4): first the plugins, with how many each brings, then its own, and
back goes out of a plugin again. Every action stays on offer, also those
that work on the screen shown.
Fixed
- X4 and X4 Pro: a screen that runs at a pace (
ScreenMode::frame_every) showed its
frames with the waveform the last frame before it had left on the panel, not that of
its own refresh mode. A game withScreenMode::fastestandgrays(2)kept the panel's
own waveform (500 ms) until a frame that did not wait for the panel (a game-over
card, say) set the quick one, and so seemed to be fast only after the first restart.
Paced frames now set the waveform and the transfer as every other frame does. - X4 Pro: the sleep screen with a cover, a picture or the cat (shown in grays) is made
after a refresh of every pixel, as the others are (a page with pictures is not: it
keeps the quicker first stage, also at its periodic full refresh); before, the grays were put over a fast
refresh, which leaves a little ghosting of the screen shown before it. The fast
refresh before any grays also no longer takes a quicker waveform that a game or
a menu left set. - Moving the focus between two items far apart on the home screen (the edit pencil
and a Continue reading widget with a cover) no longer refreshes the whole panel
in full at every step. The kernel took the rectangle round the two items for a page
(half the screen or more) and, with a large picture on the screen, refreshed it in
full; it also counted every such step towards the full refresh every few pages. It
now goes by what was drawn (the areas added up), not by the rectangle round them;
a whole screen drawn anew, a page, is as before. A widget of half the screen or
more (the Continue reading widget with its cover) is a page by itself, and
every focus step still showed the screen in four grays (about 1.7 s): a focus step
in the widget grid now sets its refresh exactly (fast), as the kernel takes it for
a step and not...
PaperPaw 0.5.0-beta.9
Fixed
-
Every restart shows a translated restart notice before saving state
and resetting the reader, whichever menu requested it. -
The USB development helper reads current format 3 plugin digests when
trusting a local build, while still accepting format 2 files. -
Plugins selected in the web flasher keep their Store origin after
installation, so the plugin store can update them automatically.
Manually installed plugins keep their local origin. -
First startup shows plugin checking, installation progress and startup
preparation while the web flasher's bundle is copied to the SD card. -
Settings distinguish Manage plugins from Plugin settings, rather
than showing two entries named Plugins. -
Resetting settings changes only explicitly stored values, avoiding
repeated font and layout reloads for defaults that were never changed.
Book-specific resets leave global values intact. -
The plugin store shows when it refreshes a saved plugin list, while
keeping that list available until the request finishes. -
Crates.io releases use new versions for changed built-in plugins, so packaged applications compile against the matching plugin sources.
-
A text shortened to its room (
ui::fit, rows' titles and values)
counts kerning as it is drawn: pairs set apart (f\in the UI font)
could take it up to a few pixels past its room, into the value beside
it.
PaperPaw 0.5.0-beta.11
Added
- X4 Pro firmware includes Bluetooth LE for HID page-turners and
keyboards, pairing on the reader, and plugin GATT clients. Remotes
remain manual by default; active Bluetooth prevents processor light
sleep, and device sleep shuts the radio down. Other readers are
unchanged. Advertising and plugin GATT servers remain unavailable.
Fixed
- Bluetooth applies the requested remote connection parameters before HID
discovery, so setup no longer blocks that change. Idle power policy is unchanged. - Bluetooth reconnects known devices when the controller reports their resolved
identity or a new private address, while retaining the existing paired entry.
PaperPaw 0.5.0-beta.10
Fixed
- Justified text keeps bounded word spacing when font size or word
spacing changes, without abruptly switching whole lines to tight
spaces. Balanced line breaking considers the gaps it can distribute.
The settings preview and book pages use the same behavior. - X4 plugin-cache indexes are read with the current entry size, so a
restart reuses verified cached code instead of rewriting every plugin. - Xteink readers enter hardware sleep even when USB or charging is
detected, instead of keeping the processor awake behind the sleep
screen. Press the physical power button to wake them. - A sleep request survives redrawing the screen after a grayscale image.
- X4 light-sleep transitions cannot overlap the button ADC interrupt's
access to the internal analog bus. - The X4 Pro holds battery power before memory, diagnostics and OTA
startup work, so a short power press need not span that work. - Screens that hide button hints, including the sleep screen, cannot
retain a temporary hint row from the previous screen.
Changed
- Xteink readers show a startup message before loading plugins on normal
starts too. Its panel refresh overlaps plugin loading. - X4 Pro and X4 Classic verify native plugin digests with the chip's
SHA-256 engine. The same header, image and relocation bytes are checked
before any plugin code runs. - Kernel startup reads installed native-plugin digests once for the plugins
it will load, after recovering pending installs. The bounded snapshot is
discarded after loading; the plugin interface is unchanged.
Added
- Text layout callers can add a cost for the unused width and internal
spaces of a candidate balanced line with
wrap_lines_balanced_kerned_with_cost. Existing calls keep their layout.
Compatibility
- The native plugin interface remains i4, with the same pinned compilers.
Existing compatible plugins continue to run. Reader layout caches are
rebuilt for the updated justification behavior.
PaperPaw 0.5.0-beta.8
Changed
- Wi-Fi joins the saved network picked last on the Wi-Fi page first,
when it is in reach, instead of the strongest: after a restart the
reader stays in the network one chose. Join first (Last picked,
Strongest) sets it. - Code plugins must be built again for beta.8. The plugin interface
is now 4: what crosses changed for a book's formatting and kerning
(Block,TextStyle,Typesetter,layout::Style,FontHandle),
the settings' pages (SettingGroupSpec), screens that run in real
time, screens opened once, static registration (Actions::get,
Env::menus,Env::screens) and lists that draw only what a step
changes (ListChange), with room for what comes later (the developer
link,Command::Extended), and room between the lines for page
layers (Block::leading_above,PageLine::leading,
LineBox::leading,PageView::words,PageLayerSpec::words),
blocks filters insert (Block::inserted,PageLine::inserted),
input on layers (PageLayerSpec::items,LayerItem,
PageLayerTapped::item) and room for annotations
(Block::annotations,PageLine::annotations).
PaperPaw's own store plugins come as updates. - Moving through the settings with the buttons is quicker: a step draws
only the row left and the row reached, no longer the whole screen (on
the X4 a sixth to a third of it), in every list of the settings. - The firmware is leaner, so updates keep room: German hyphenation is a
plugin of the store (hyphenation-de), as the other languages are,
and the built-in one keeps English; Literata Bold Italic is no longer
built into the firmware (bold stands in for it; the emulator and the
app keep it), and its faces go up to 32 px there (about 10 pt). A data
plugin may bring faces of a family without its regular one, and a pack
that extends a face with larger sizes draws text that large (the font
size goes as far), so the font library brings both back
(tools/literata-packs.py). At the largest size, its help says where
larger ones are found. - The release keeps room for the updates to come:
paperpaw-sign check-imageprints the margin an image leaves in the smallest app
slot (its own or CrossPoint's), warns below 512 KB and fails below
256 KB. - A step with the buttons draws only what it changes, on every screen
with a list, a grid or buttons to move between: the item the focus
left and the one it came to, no longer the whole screen (on the X4 a
sixth to a third of a frame).ListChange::Focuscarries the two
items, soListChange::requestasks for them alone;ListView,
RowsandSectionsgivefocus_changefor a focus that only came
to show,ListChange::focusserves focuses of a screen's own and
ui::button_reachsays where a focused button draws. Theirrequest
methods are gone:change.request(cx)does it. A screen whose focus
changes more than its items asks for that part too. - The store finds its way in a library of thousands: its start shows
what the library picks (Recommended, New, Popular now, Recently
updated, Discover) between the search and the groups, and a group
lists its plugins in the library's fair mix of the day, so that every
plugin gets seen. A to Z stays a choice, sorted on the device a run at
a time, and long groups go to a letter (Go to letter, a grid of A to
Z for buttons and fingers). The list still streams to the card. A
library without picks shows the start and the order as before. - Plugins that work with another product say what they do with it:
KOReader highlights, Calibre connection, Readwise export, Wallabag
articles, Wikipedia lookup and Joplin notes (their ids stay, and so do their
settings and data). - Literata's sizes above 32 px and its Bold Italic, which the X4's
firmware leaves out, are plugins of the store: the release builds
PaperPaw's own data plugins (tools/plugin-files/data.toml) and
publishes them with the others, versions checked as theirs. - With buttons alone (the X4) the keyboard keeps a computer keyboard's
rows at every size (qwertyuiop above asdfghjkl); the size makes keys
higher and their letters larger, and a row is split only where its
letters would not fit. Up and down keep to the column one came along.
Typing takes about as many presses as before (627 against 633 for the
sample texts inplugins/keyboard/tests/presses.rs), capitals fewer. - Its keys are wider with buttons alone: the focus fills a key instead
of framing it, so two pixels between keys do (on the X4 a letter's key
is 39 pixels wide, was 25). On touch screens the room between keys
follows the screen's size (0.6 mm). The plain X4s start with the
keyboard at Small, the X4 Pro at Large; a size chosen stays. "Hold: ö"
in place of "Hold for ö" leaves the field's title whole. - Settings where readers look for them: Date and time (the clock, the
first day of the week, the time zone), Plugins (each plugin's
network) and Words are groups of their own; the auto sleep is under
Power, the device's name under Wi-Fi, the sleep screen's logo with
the sleep screen, the widgets' frame with the home screen. Reading's
settings have shorter names (Invert pictures, Paragraph spacing,
Top and bottom margins …).
Added
- Plugins write between a book's lines, an interlinear reading with a
translation above each line: a text filter asks for room above every
line of a block (Block::leading_above, hundredths of an em, at most
four), which the layout adds to the line's height so pages break with
it, and each line tells it (PageLine::leading,LineBox::leading);
a page layer that asks (PageLayerSpec::words) gets the page's words
with their boxes and places (PageView::words,reading::WordBox,
now without the featureunstable), measured once a page and only
where a layer asks. - Text filters insert blocks after the one they get
(Block::insert_after: a translation after each paragraph, a gloss,
a note), at most four with 4 KiB of text: shown after it, never apart
from its last line, with no place in the book (PageLine::inserted),
so positions, progress, bookmarks, highlights, search and the page's
words stay the book's. - Page layers take input on what they draw: a layer says where its items
are (PageLayerSpec::items,LayerItem); a tap on one, or Select on
one chosen with the buttons as links are, comes to its plugin
(PAGE_LAYER_TAPPEDwithitem), and every other tap and button
stays the reader's. The room above a line counts as the line's
(PageView::line_at). - Room for annotations over words (ruby, furigana, phonetics, glosses):
Block::annotationsandPageLine::annotations, empty until the
layout sets them (ADR 0032). - A sample plugin,
samples/interlinear: a translation above each line
that opens on a tap, or after each paragraph. - With buttons alone, holding Back finishes typing and keeps the text,
wherever the focus is (Back alone cancels); the field says so. Holding
Select still finishes on any key that is no letter. - The keyboard locks capitals with Shift pressed twice in a row (the
key filled until pressed again), and a long press on a letter offers
its capital first, chosen: with buttons a long press and Select type
it. Automatic capitals (off by default) starts a text and each
sentence with one, not in passwords, numbers and addresses. - SDK:
ask::TextQuestion::url()andemail()ask for a web or e-mail
address (modesurlandemail), typed as it is. The browser,
catalogs, news, KOReader sync, Joplin, Wallabag and the statistics'
sync ask for their addresses so. - Plugins can run in real time: games, emulators, animations
(ADR 0030). A screen says how
it runs in one place (Screen::mode,realtime::ScreenMode): full
screen, buttons pressed and released (Screen::on_key,
Env::keys_held; holding Back, or a finger in the top left corner,
two seconds always leaves), its own refreshes, the fastest refresh,
the grays enough, a pace, staying awake longer, and the memory it
needs. The device says what it can do and how the last frame went
(Env::panel,PanelInfo,FrameReport), so faster panels make
plugins faster without a new build.Canvas::blitdraws packed
bitmaps at a whole scale,memory::vec_inkeeps data in internal RAM
or PSRAM, and code plugins getApi::alloc_in. On the X4 the main
loop goes on while the panel refreshes for such a screen, and every
frame's times are measured.samples/frame-testshows it all. The
first time such a screen opens, a notice says how to leave it. - Room for a screen that needs memory: the kernel lets caches go, holds
background work back, switches Wi-Fi and Bluetooth off where the
screen does not need them, asks the screens below to let go of what
they make again (the reader its book, keeping its place;
Screen::on_squeeze,RoomSteps::SQUEEZED) and closes them where
that is not enough, until there is enough; everything comes back once
it closes (ScreenMode::memory,Env::room). - A screen opened again while it is open is gone back to, not stacked
(several Transfer over Wi-Fi screens one over another took as many
presses of Back): the screens above it close and it hears the
params (Screen::on_reopen). Each screen says how many of it may be
open (ScreenSpec::instances,Instances): one for each set of
params (the default), one at most (the transfer, Wi-Fi, Bluetooth,
store and diagnostics screens and other roots) or many (the
keyboard). Params are alike in any order. - Plugins see what the buttons are good for:
Capability::PAGE_KEYS
andCapability::BUTTONS(enough for every screen without touch),
from the buttons the shell lists. - Less memory at rest: actions, screens, menu entries and icons can be
staticlists that stay in flash (`FixedActio...
PaperPaw 0.5.0-beta.7
Added
- The notices of everything PaperPaw ships: the crates of the firmware
and of the apps, each under its licence with its copyright lines and
each licence's text once, and Mbed TLS, ESP-IDF's radio libraries and
bootloader, the FreeInk and OpenX4 display code and Papyrix. Made from
the lockfiles bytools/licences/build.pyinto NOTICE and About
PaperPaw, Licences (packed, written out to read part by part); CI
fails where a crate that ships is missing. The web, emulator,
handbook and core library archives carry LICENSE and NOTICE. - Weather names Open-Meteo, Wikipedia names each article below its
summary, with their licences. - The emulator starts online with
--wifi online(over--stdio,
"wifi": "online"instart): the X4s on USB, their radio on and in - The emulator starts online with
--wifi online(also given before
--stdio, for the devices it starts; or"wifi": "online"in
start): the X4s on USB, their radio on and in
a networkWorkshop Wi-Fijoined before, so plugins' requests go out
at once; Wi-Fi switches off and on in the settings as on a device.
Without it, nothing changes. - Plugins can be published from GitHub: tag a release in the plugin's
own repository (topicpaperpaw-plugin) and paperpaw.org lists it as
"Community, unreviewed".tools/dev/templateshas the release
workflow that zips the folder, builds and signs a code plugin and
makes the release; the handbook and the plugin skill explain it. paperpaw-dev check-publish(andpaperpaw-sign check-publish)
checks a plugin's repository and its release files by the plugin
store's rules, the site's own (tools/publish/store-rules.json, served
by paperpaw.org too), and says what to change; the release workflow
runs it before it builds and on the files it made, and releases
nothing where it fails.paperpaw-dev new --github <id>makes a
repository that passes it, the workflow included.- Community plugins: the store's new setting Community plugins
(Settings, System, off at first) also lists plugins that their authors
published on GitHub, which nobody reviewed. They are marked
Unreviewed, with the repository they come from; a code plugin's page
shows the key it is signed with.
Changed
- Keyboard size works on readers with buttons alone too: Large splits
the rows into short ones (few presses along each, as before and the
X4s' default), Medium splits the longest, Small keeps them whole as on
touch screens (a lower keyboard, more presses). - The on-screen keyboard: on readers with buttons alone (the X4s, the X3)
the focus starts on Phone, where the text can be typed on a phone
instead of a letter at a time; on the X4 Pro the keys are large by
default (a size chosen before stays). - On the Xteink readers the interface font, drawn from bitmap packs made
from Source Sans 3, is PaperPaw Sans: its licence reserves the name
for the unchanged font. A reading or status font chosen as Source Sans
3 is kept. The unchanged font keeps its name where it is drawn as it
is. - A code plugin's key is trusted from its first install: an update or a
new install after a removal signed by another key is refused with a
short warning, from any library; there is no Install anyway any
more. - Firmware is installed only with the battery at 20 % or more, or on
USB: below it the kernel refuses any install (the update, another
firmware), checked as the writing would begin, and Update says
"Charge to 20 % or plug in to install." Downloading goes on. SDK:
InstallFailure::LowBattery,firmware::INSTALL_BATTERY,
firmware::battery_allows_install. - No surprise restart after an update: while the new firmware runs on
trial, without its code plugins, the X4 shows "Finishing the
update…" with a bar that fills, takes no input meanwhile, and starts
again from there once the update is kept, with its code plugins. SDK:
builtin::screens::FINISHING_UPDATE. - Devices are counted without being known: the update search says
whether the reader asked (trigger:autoormanual) and of which
periods it is the device's first search (first:day,week,
month, in UTC; left out while the clock is not set). No id and no
request of its own; the device keeps only the date of its last search. - Back to CrossPoint without a computer: Update installs another
firmware's image from the card (not signed, only as chosen, with a
warning), checked whole for this device first. SDK:
FirmwareCommand::InstallForeign,firmware::ForeignImageand
firmware::ForeignCheck. - Bluetooth Low Energy for plugins (ADR 0027):
paperpaw_sdk::bluetooth
scans, connects and reads, writes and subscribes to a device's
characteristics, pairs (always confirmed by the reader in the kernel's
own question), advertises and serves GATT services, for plugins that
declareUses::BLUETOOTH. The kernel owns the radio, shares it
between plugins, lets each see only the devices it found or was given,
keeps bonds with the passwords and keys and switches the radio off
when nothing needs it. Cheap by default: scans and advertising end
after a while, passive and seldom unless asked, links at long
intervals, the radio at the cheapest power that serves every plugin,
and its time on counted (Usage::bluetooth_ms). A bonded remote's or keyboard's keys are
buttons of the key maps (button.hid.right,button.hid.page-down…,
pages turned by default). The emulator has made-up devices for the X4
Pro's profile: a page-turner (ble-key:rightin scripts) and a
heart-rate belt. - Bluetooth page (Settings, where there is Bluetooth): the devices bonded
with the reader, Add a device (a search, then pairing confirmed on the
reader), forgetting one (the menu button or a long press), which
plugins may use a sensor, and Remotes: when a remote's or a keyboard's
keys work (when switched on, while reading, or always). A remote that
falls asleep connects again by itself when it wakes, as long as its
keys are wanted. - Code plugins must be built again. The plugin interface is now 3
(Command,Env,Capabilities,MenuNeed,Usage,Workand
FirmwareCommandchanged, for Bluetooth and another firmware): a code
plugin built for an earlier release does not run on this one until it
is built again with this release's SDK, and the plugin manager says
so. PaperPaw's own store plugins come as updates.Work'snetwork
andchargingbecameneeds(Needs::NETWORK | Needs::CHARGING).
Fixed
- Uploads over Wi-Fi no longer stall when the card fails to take a part:
the X4s answer at once, while the file still comes (500 where the
card failed, 507 where it is full), instead of holding the upload
until it timed out. The X4 Pro tries a write to a card still busy
writing more often before it gives up, as some cards are while the
radio sends. - Status lines stand every item on one line: the battery, icons and bars
centred on the figures of the time, the page and the percentage, and
those in the middle of the line, to the pixel. The battery stood a
pixel higher than its percentage. - Customise menus names the menus of the font choosers (their way to
more fonts) as the settings are named, e.g. Status lines › Font,
instead of showingcore.status-fontandcore.reading-font. A test
walks the menu editor, every settings page and chooser and every
menu in each language shipped and fails on an id shown as a name. - Test builds for the X4 Pro and the X4 Classic (with remote control
over USB) took no updates over the air ("OTA: no partitions for
updates"): their image's two data segments hid which half of the
flash runs. The firmware now finds it either way. Released firmware
was not affected. The release now fails for an image that could not
take the next update (paperpaw-sign check-image: two app slots in
its table, one data segment, room in either slot and CrossPoint's),
and host tests run whole updates with every partition table shipped
and CrossPoint's.
PaperPaw 0.5.0-beta.6
Added
- The web flasher can put every store plugin on a reader at once: it
writes the plugins chosen into the reader's empty second app
partition, where all of them fit (about 4.8 MB on the X4), instead of
the room behind the firmware (about 1.9 MB). PaperPaw installs them
onto the card at its first start and only then frees the partition
for updates; a power cut in between installs them at the next start.
The room behind the firmware is still read, for older flashers.
PaperPaw 0.5.0-beta.5
Fixed
- After the Wi-Fi link is lost and joined again, the X4s count as
online only once the router gave their address again. Before, they
were online at once with the old one, which the router's answer then
took back, so a request made in between failed. - Touch lock: the way out it explains (tap twice, hold the second tap)
unlocks; it wanted a third touch held after two taps, which still
works too. - Choosing another Wi-Fi network while joined to one works on the X4s:
they leave the first network before joining, instead of failing with
"did not answer". Networks are joined with the security the scan found
(WPA and mixed WPA/WPA2 ones too), and a password that was not taken
for another reason than being wrong is offered again, not typed anew. - News: articles with a long body in a CDATA section (WordPress feeds, The
Verge) show their whole text; the reader dropped any section over 4 KiB
and fell back to the summary. The XML reader now passes a long CDATA
section on in pieces, in the same small memory. Dates, Atom
and RSS, show short as the language writes them (Sat 24 Oct 2026).
Added
- Switching from CrossPoint without a computer: each release has an
install file per device (paperpaw-<device>-<version>-install.bin)
for CrossPoint's SD firmware update, and CI fails a build that no
longer fits CrossPoint's app slot. PaperPaw runs in the partitions it
finds; where no room for code plugins is left there (the X4), the
store says so and refuses them. - The X4 Classic's firmware comes with each release, marked
experimental: built, not yet tried on a real device. It follows its
stock firmware where the FreeInk SDK and Papyrix agree: the panel at
10 MHz with its factory frame rate, its controller as the factory's
NVS names it (else as it answers, else a UC8279), the charging pin
high while charging, the card started up to four times, and its
power kept on through sleep. Its partitions keep the factory's NVS
whole. - The Xteink X3's firmware comes with each release too (
cargo x3),
experimental and not yet tried on one, without store plugins yet: the
X4's chip and buttons, its UC8253 panel at 792 x 528 in black and
white, a fuel gauge and a clock; an emulator profile too. What is not
known without a device is listed inshells/xteink. - The plugin store has five more groups, so every kind of plugin has a
place: notes, learning, news, tools and games, before system. Of
PaperPaw's own plugins, vocabulary moved to learning; news, wallabag
and the browser to news; readwise and joplin to notes. - paperpaw-dev checks the group in
store/store.ini(package.store-group).
PaperPaw 0.5.0-beta.4
A beta for updates over the air, from testing the update to beta.2 on
the X4 and X4 Pro, and for the largest interface text, which every
screen now takes. Code plugins built for earlier betas run unchanged:
the plugin interface stays 2.
Fixed
- After an update passed its first minute on trial, the X4s restart by
themselves, so that code plugins (store tools) are there again; before,
they were missing until the next start. - A download that got no answer at all (seen on the second connection
after the update check, until a restart) is tried once more with the
radio started anew. - After an update the device no longer asks to make Diagnostics the home
screen: it no longer binds the home slot, and the plugin manager offers
a new screen for a slot only when it is bound as high as the one in use.
Added
- SDK:
UiStyle::noted_row_formakes a list's rows as high as its
notes need, up toNOTE_LINES_MOST(4) lines, and
ListView::set_rowsizes them anew; a row's note shows as many lines
as its row holds.
Fixed
- After an update the device no longer asks whether to make Diagnostics
(or any screen bound only as a fallback) the home screen: Diagnostics
binds no slot, and a newly offered screen is asked about only where it
binds the slot as high as the one in use.Env::slot_screenslists
the highest priority first. - At the largest interface text on small screens the notes of About,
Keys, News, a catalog's fields, Plugins, Profiles, Cards and Wi-Fi
show whole. - After an update over the air the plugins installed from the store
(statistics, widgets, the syncs) work again by themselves: once the
update ran its 30 seconds of trial, which go without them, the X4s
start again, at once or once the book open is left. Before, an update
that kept the plugins' builds left them off until the next start. - A download that gets no answer at all (seen with updates on the X4
and the X4 Pro: connected, then nothing until a restart) is made once
more after the X4s start their radio anew, instead of failing with
"The update could not be downloaded". Its log line says where it was
connected and how much memory was free.
PaperPaw 0.5.0-beta.3
A beta with fixes from testing beta.2: a press made while a new screen
still refreshes is no longer lost, and more screens fit at the largest
interface text. Code plugins built for earlier betas run unchanged: the
plugin interface stays 2.
Fixed
- A press made while a new screen was still being refreshed (opening
Settings on the X4 takes a full refresh) was dropped, so the first
press after opening a screen sometimes did nothing. The X4s now count
a screen as shown when its refresh begins. - At the largest interface text more screens fit: the statistics'
calendar (its days no longer shrink to dots) and overview, the device
check, the store's plugin page and source, the Calibre hint, the file
finder and catalogs, the phone step of Wi-Fi, the statistics' sync
and the profiles. Store plugins changed so carry version 1.0.1. - Vocabulary 1.0.1: a card answered Again waits its ten minutes before
it comes back (also published on its own, between betas). - A store plugin released on its own is built for the X4 Classic too.