ci/woodpecker/pr/woodpecker Pipeline was successfulDetails
ci/woodpecker/push/woodpecker Pipeline was successfulDetails
the screen.sleep fn was actually called in concurrent-unsafe mode,
i.e without acquiring UI mutex. in conjuction with commThreadLoopCycle
this would have eventually led to LVGL primitives concurrent access.
so, screen.sleep now takes UI mutex to hold during LVGL calls.
a bit ugly but certainly better than relying on luck.
the bitcoin tab has now some basic status and stats: parts of blockchain
info, network info and mempool. this is far from complete but makes a
good start for an initial version.
the gui playground is also updated to sent some stub info via comms
periodically.
this adds a very simple bitcoind RPC client able to make a few queries
like the blockchain and network status. the daemon uses the client
to get the bitcoind status and sends a report through comms periodically.
there's also a little playground program which simply dumps a query
result to stderr. built on demand with "zig build btcrpc".
ci/woodpecker/push/woodpecker Pipeline was successfulDetails
a previous commit 7d1ab5cb rewrote toplayer objects creation as
Container.newTop except the new code was using the top layer object
obtained from lv_disp_get_layer_top as is. this obviously led to all
sorts of UB and illegal memory access when screen.sleep'ing.
ci/woodpecker/push/woodpecker Pipeline was successfulDetails
this commit improves on the LVGL API wrapping interface in zig by
defining different types where each is associated with either a
particular lv_xxx_t object in C or a logically different UI element.
this makes programming much more pleasant, allows compartmentalizing
different UI concepts and elements, and reduces chances of making a
thanks to stricter type enforcement.
no visual changes in the UI.
ci/woodpecker/push/woodpecker Pipeline was successfulDetails
ci/woodpecker/tag/woodpecker Pipeline was successfulDetails
fullscreen modal dialog was added in 4297c139. the callback function to
that modal *must* be aligned according to the target architecture.
failing to do so may result in "incorrect alignment" panic.
this somehow worked in 4297c139 but sometimes panic. i suspect this may
be due to PIE-enabled build, possibly in conjuction with some zig v0.10
compiler bugs.
ref #20
ref #5
ci/woodpecker/pr/woodpecker Pipeline was successfulDetails
ci/woodpecker/push/woodpecker Pipeline was successfulDetails
most troubles were due to blocking nature of child process pipe
descriptions which made comm.read loops hang in various places
under certain conditions.
this commit moves all read/writes in separate threads to be able to
always watch for sig TERM and INT, and ensures child process pipes
are closed early allowing comm.read loops to terminate.
ci/woodpecker/pr/woodpecker Pipeline was successfulDetails
ci/woodpecker/push/woodpecker Pipeline was successfulDetails
this greatly improves UX during shutdown: no need to guess at which
point it's ok to unplug the power cord.
the commit also includes a GUI playground. a sort of a fake daemon which
sends hardcoded messages to ngui. useful for manual debugging and trying
different UX scenarious.
the daemon now sends info about the system shutdown progress: a list of
important services which may require up to several minutes to stop such
as lnd lightning daemon and bitcoin core.
see next commit for how this info is displayed and used by the GUI.
ci/woodpecker/push/woodpecker Pipeline was successfulDetails
this hides all LVGL info messages about UI interactions like events,
making the log output more useful during development.
it is still possible to increase verbosity to the original level using
the lvgl_loglevel build flag.
both nd and ngui now acquire semantic versioning recorded at the build
time. they also report the version at startup and -v flag.
this is useful for a release process and to avoid potential
compatibility issues in the future.
in a regular build flow, the version is taken from a git tag using the
following command:
git -C . describe --match 'v*.*.*' --tags --abbrev=8
in a non-standard scenario where git isn't available, the version can
be provided on the command line during build like so:
zig build -Dversion=1.2.3
if both git and command line supplied versions are available, they must
match.
ci/woodpecker/push/woodpecker Pipeline was successfulDetails
ci/woodpecker/pr/woodpecker Pipeline was successfulDetails
this commit includes lots of new code in ui/lvgl.zig and ui/widget.zig
to work with LVGL directly from zig. in fact, some C code is moved from
ui/c/ui.c to ui/xxx.zig.
in addition, a new module ui/widget.zig is where all custom UI elements
will reside. at the moment it comprises of the ported topdrop and a new
modal func. the latter is an alternative to LVGL's lv_msgbox popup.
as a practical example, the commit replaces the power off confirmation
popup with the new modal window.
functions declared in ui.h were actually used by ui.c, the opposite of
what such a header is expected to contain. these functions are defined
in zig code and declarations are better off in the same ui.c file.
this is just a quick clean up before porting some C code to zig.
ci/woodpecker/push/woodpecker Pipeline was successfulDetails
ci/woodpecker/tag/woodpecker Pipeline was successfulDetails
this is an attempt at identifying the underlying problem.
unclear whether this normal behaviour on a linux kernel or something to
do with zig implementation.
either way, pinging the UI makes CommReadInvalidTag error disappear on startup.
updates #16
ci/woodpecker/push/woodpecker Pipeline was successfulDetails
when the screen turns off, the idle loop never gave a chance CPU to
do other work and pegged at 100%. adding a short sleep each cycle
yields CPU to the OS.
closes #15
ci/woodpecker/push/woodpecker Pipeline was successfulDetails
ci/woodpecker/tag/woodpecker Pipeline was successfulDetails
passed 60 sec of no touch screen activity, daemon turns off backlight
and gui places a black "topdrop", opposite of backdrop. simply touching
the screen reactivates it immediately.
there seem to be no way to turn screen power off, so backlight plus
black topdrop is the next best.
there's no user settings to change 60 sec timeout at the moment because it
is unclear whether it's worth adding UI elements. can always do so later.
the implementation also provides means to reactivate the screen in
an event of an alert from the daemon in the future.
closes #3
the idea is for all zig code to use C LVGL only via this
new module lvgl.zig, all display and input driver/devices is handled
by drv.zig.
this makes C/zig nicely compartmentalized in just a handful places.
the nd/ngui protocol is a simple TLV: message tag, length and
a json-encoded payload. the issue is with the (tag, length) header which
was written/read by using raw memory pointers, such as
Writer.writeStruct. in addition, tag ordinal values were auto-generated
by the compiler.
all those deficiencies may potentially lead to bugs hard to find or
serious data leaks.
serializing and deserializing the (tag, length) header manually
makes it more robust and eliminates the footgun.
10min looks quite excessive but based on conversations in
https://github.com/bitcoin/bitcoin/commit/7fb7acfc, better safe than
sorry. same for lnd. in any case, 30sec was indeed far too short to
begin with, especially for bitcoind.
services are now stopped in parallel, though. so, the poweroff sequence
goes faster.
16px looks easier to read but IPv6 addresses don't fit in the wifi
settings panel anymore. need to find a better way how to display them or
change font.