Support reMarkable OS 3.28: swapBuffers dropped EPContentType - #1
Open
joaodelapace wants to merge 1 commit into
Open
joaodelapace wants to merge 1 commit into
joaodelapace wants to merge 1 commit into
Conversation
OS 3.28 removed the EPContentType parameter from EPFramebuffer::swapBuffers,
so the single hard-coded mangled symbol no longer resolves and the panel
never updates ("EPFramebuffer::swapBuffers unavailable"). Dumping the device
libqsgepaper.so:
<=3.27 swapBuffers(QRect, EPContentType, EPScreenMode, QFlags<UpdateFlag>)
>=3.28 swapBuffers(QRect, EPScreenMode, QFlags<UpdateFlag>)
(3.28 also adds setBuffers(std::tuple<QImage,QImage>); the content axis moved
to the buffers.) Resolve whichever overload the firmware exports and call it
with the matching argument layout. The <=3.27 path is byte-for-byte unchanged;
the 3.28 path drops content_type and places mode/flags in the correct
registers. Hardware-verified for mono live ink on a Paper Pro (reMarkable
Ferrari) running OS 3.28.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Support reMarkable OS 3.28:
swapBuffersdroppedEPContentTypeSymptom
On a Paper Pro running OS 3.28, takeover apps start and connect but the
e-ink panel never updates. The log shows:
Everything initializes (
EPFramebuffer::instanceresolves, the framebuffer isfound, pen/power grab, oracle works) — only the frame swap fails, so pixels are
written but never flushed to the display.
Root cause
quill_vendor::swapresolves a single hard-coded mangled symbol. On OS 3.28reMarkable removed the
EPContentTypeparameter fromswapBuffers.Dumping the device's own
libqsgepaper.so:_ZN13EPFramebuffer11swapBuffersE5QRect13EPContentType12EPScreenMode6QFlagsINS_10UpdateFlagEEswapBuffers(QRect, EPContentType, EPScreenMode, QFlags<UpdateFlag>)_ZN13EPFramebuffer11swapBuffersE5QRect12EPScreenMode6QFlagsINS_10UpdateFlagEEswapBuffers(QRect, EPScreenMode, QFlags<UpdateFlag>)3.28 also adds
EPFramebuffer::setBuffers(std::tuple<QImage, QImage>), i.e.the content type is now carried by the registered buffers instead of by the
swap call.
EPFramebuffer::instanceis unchanged on both, which is why onlythe swap failed.
Fix
Resolve whichever overload the running firmware exports and call it with the
matching argument layout. The ≤3.27 path is byte-for-byte the old behavior; the
3.28 path drops
content_typeand passesmode/flagsin the correctpositions. Enums and
QFlagsare 4-byte trivially-copyable and travel asintin their AArch64 registers, exactly as the existing typedef already assumed.
Testing
reMarkable Ferrari).Mono live ink renders and a full round-trip works (riddle "The Diary" draws
and replies).
args, same guard/return).
Caveat (please review)
Color rendering on 3.28 is not yet hardware-verified. This diff passes the
correct
EPScreenModeto the 3.28 overload but does not (yet) call the newsetBuffers(tuple<QImage,QImage>). If 3.28 requires a second buffer to beregistered for color, a follow-up wiring
setBuffersmay be needed. Mono — thepath riddle uses for live ink — is confirmed working.