Hi everyone! The Librem 5 team has been hard at work again, and we want to update you all on our software progress.

Calls

We have been diligently working to finish the phone call audio quality for production. While the USB audio works just fine (with some tweaks), the PCM audio coming out of the dev kit was noisy and distorted, due to the most-significant bit in the PCM stream – from the i.MX8 to the modem – being incorrect.

In the meantime, we have started work on a daemon, Wys, that loads and unloads PulseAudio loopback modules according to the state of ModemManager voice calls; and investigating and testing a different modem, in order to evaluate its potential alongside the Gemalto PLS8 one.

All of this effort brings us closer and closer to having phone calls that work wonderfully.

Messaging

The SMS plugin of Chatty has been reworked to use libmm-glib, simplifying the handling of the ModemManager interface, and making the adding of further SMS functionality less cumbersome.

The new Lurch plugin changes (used for E2EE in XMPP) needed to be tested, since the upstream maintainer has done a lot of recent work on the plugin (specifically for integration with Chatty) – and this support gets us even closer to delivering good E2EE XMPP functionality!

We are happy to say we found, and promptly fixed, a couple of issues related to Chatty: crashes due to multi-instances or when loading the Matrix plugin, and Chatty not recognizing outgoing messages after a restart. It’s all working fine now.

Oh, and the message bubble width was reduced to no more than 70% of the conversation view, and it looks so much better now. Thanks to Leland Carlye for the improvement!

Web Browsing

A new adaptive view switcher widget (HdyViewSwitcher) has been added to libhandy, which is needed by Web’s preferences dialog in order for it to be adaptive and to, well, look nice on the phone; we will use it in other apps such as Software, Clocks, and Photos. It was such a big effort, and it’s so wonderful to see it completed – and a success! To make sure that HdyViewSwitcher looks just perfect, we have added a best fit container (HdySqueezer).

We also want to make the header bars more flexible to matching the display needs of the phone, and we are working on adding a HdyHeaderBar. Doing it led us to discover, and fix, a memory leak in GTK+3 and GTK+4.

See below for a preview of the HdyHeaderBar:

We are almost done adding a HdyPreferencesWindow, so we can make it easy for apps to have a featureful preferences window that is also adaptive.

Below, a preview of the HdyPreferencesWindow:

Email

We have made some excellent improvements on the design of Geary! The outcome can be seen in several mockups that design how the conversation actions, conversations list, composer and selection mode should all look. Some of these mockups may require further changes upstream, but they get us ever closer to having a nicely complete mail client design.

System

The dev kit image is getting closer to using a 5.2 kernel instead of the 4.18 kernel – which means our team has been tireless in their effort of upstreaming the librem5-devkit device tree, flash-kernel changes, and sending various other patches upstream. Be sure to check out a nice post on Purism’s upstream kernel contributions.

We are also continuing to work on a compositor replacement for rootston, and getting closer to be able to switch from rootston to phoc (replacement compositor) independently.

Another awesome change in the image is that the WiFi status is now displayed in the panel and lock screen!

We are trying to separate the bootloader from the OS, and to get us closer to this goal, a uuu script that flashes the full-boot-image has been added to the librem5-devkit-tools package. There is also support for generating an additional boot image alongside the main one, needed to flash U-boot and the M4 firmware into one of the eMMC boot hwparts. Thanks to Hugo Grostabussiat for the contributions!

We are continuing to work on the graphics stack; recently, v11 of the Mixel MIPI DPHY driver was submitted upstream.

Our awesome community has pointed out some issues over time… and we have fixed them: fix screen blank -> unblank cycle, improve GPU performance by using the correct clock parents, and unbreak clock enable/disable in our NWL driver, so we can turn off clocks when blanking the display.

Some other changes to the system include us taking a look at using mainline atf to control power saving and suspend/resume; improving phosh to make the output locking more dynamic, and adjusting the VINDPM of the charge controller.

Documentation

We have added a new guide on working with UI files, and have a cool weather example coming to the documentation soon, to help all the GTK+ app developers out there.

See below for a preview of the weather app:

Some helpful How-To guides on the inertial module and proximity and light sensors were also added.

We have improved the Matrix room mentions for readability, the API documentation with better linking to external APIs and resources. The dev kit setup instructions are being improved as well, to be more of a step-by-step guide, and a page on troubleshooting dev kit power issues is coming soon.

That’s all for now, folks – stay tuned for more exciting updates to come!

A big “Thanks!” to everyone that has helped review and merge changes into upstream projects; you are awesome, and your time and contribution are much appreciated!