As a lot of folks are wrapping up for the holiday season, the Zephyr community hasn’t slowed down all that much last week and there were quite a few noteworthy additions that this blog post will be covering, including a pretty cool (albeit short!) demo video.
Improved documentation search experience
One of the top complaints I’ve heard ever since I became the documentation manager for the Zephyr Project is how it can sometimes be hard to find information in the project’s documentation. It’s certainly true that the search engine historically available on docs.zephyrproject.org isn’t always giving the most helpful results.
As of last week, a new search experience is available with Google Programmable Search now being the default search engine when browsing the Zephyr documentation.
The new engine is faster, much more tolerant to typos, and allows you to write advanced search queries that are more than just a couple keywords (ex. you may use double-quotes to keep words together, exclude keywords by using the minus sign, etc.).
Meta-categories such as “Code Samples”, “API reference”, etc. are also available for you to narrow down the list of search results to only the category of results you care about (if you feel a category is missing, btw, let me know!). See for example the screenshot below, with top 3 results to the query “toggle a GPIO” — they are exactly what you’d expect them to be, but should you want more concrete examples of how to toggle a GPIO, clicking the “Samples” tab (or the green label in the search results) will give you just that!
💡 Pro Tip: Press /
to quickly focus on the search box while navigating the documentation.
Capacitive touch sensor for ESP32
Capacitive touch sensors are a kind of specialized GPIO with dedicated circuitry that detects an approaching finger by measuring a variation in the capacitance of the circuit.
Espressif devices typically include support for capacitive touch, and PR #64931 just made it possible to access this feature in Zephyr! The new driver is a standard input driver and as such fits nicely in the now pretty rich input subsystem.
The dedicated Devicetree binding, espressif,esp32-touch
exposes a variety of settings to adjust the sensitivity, configure the debouncing, etc.
Here is, for example, the full Devicetree overlay to enable touch detection on pin TCH8
of my M5Stack AtomS3:
#include <zephyr/dt-bindings/input/input-event-codes.h>
#include <zephyr/dt-bindings/input/esp32-touch-sensor-input.h>
&touch {
debounce-interval-ms = <30>;
href-microvolt = <2700000>;
lref-microvolt = <500000>;
href-atten-microvolt = <1000000>;
filter-mode = <ESP32_TOUCH_FILTER_MODE_IIR_16>;
filter-debounce-cnt = <1>;
filter-noise-thr = <ESP32_TOUCH_FILTER_NOISE_THR_4_8TH>;
filter-jitter-step = <4>;
filter-smooth-level = <ESP32_TOUCH_FILTER_SMOOTH_MODE_IIR_2>;
status = "okay";
touch_sensor_set: touch_sensor_0 {
channel-num = <8>;
channel-sens = <50>;
zephyr,code = <INPUT_KEY_0>;
};
};
And below is the code sample in action. If you’re not familiar with capacitive touch and a bit confused looking at the video, yes, this is indeed literally a single wire that’s being used as the input!
Funnily enough, it took me about 30 seconds to get the sample to work, and probably 10 times more to videotape it! 😝
Boards & SoCs
- Beagleboard BeagleV-Fire is a single board computer (SBC) built around Microchip’s PolarFire MPFS025T SoC FPGA. In addition to providing an FPGA with 23K logic elements, it features a 5-core RISC-V 64-bit processor. (PR #66389)
- nRF9151-DK, an upcoming developer kit from Nordic Semiconductor and targeting DECT NR+ and LTE-M/NB-IoT with GNSS, is already supported in Zephyr 🙃. (PR #66110)
- The PAN1783A Evaluation Board from Panasonic is now supported. (PR #64259)
- The Ambiq Apollo4P evaluation board is built around Ambiq’s ultra-low power Apollo4 Plus SoC, which is a Cortex M4F @ 192 MHz. (PR #66328)
- ST Nucleo F722ZE is now supported. (PR #66050)
Drivers
- Expanding on the recently added modem subsystem, a new API has been added to interact with cellular modems in a consistent way across all available technologies (GSM, GPRS, LTE, etc.). Think retrieving signal strength information, for example.
Check out the documentation here and how the new API is now used in the cellular modem code sample. (PR #65685) - Ultrachip UC8175 support has been added. (PR #61439)
- The Charger API now includes a
sbs_charger_charge_enable()
standard API that can be use to initiate/terminate a charging cycle. (PR #66128) - STM32 MCUs can now use SMBus thanks to the newly added driver. (PR #66260)
- New driver added for ST LIS2DU12 accelerometer. (PR #65734)
Miscellaneous
- The Bluetooth Gaming Audio Profile aims at enabling configuration of low-level audio services and profiles specifically for gaming use cases (ex. bidirectional voice for online chat, high bitrate for HQ game audio, etc.).
PR #57032 is the oldest pull request merged this week (dating back to April of this year) and it introduces support for the Bluetooth Gaming Audio Profile in Zephyr. - Initial support for USB Audio Class 2 has been added. The idea will be to allow developers to use the
zephyr,uac2
binding to describe an USB Audio Class 2 device by utilizing the Devicetree vs. manually written code. - A new API allows to configure CoAP retransmission settings. (PR #66025)
- Support for TCP Keep-Alive has been introduced and can be enabled using Kconfig option
NET_TCP_KEEPALIVE
. (PR #66316) - The unused and obsolete arm_core_tz.c Arm TrustZone driver has been removed. (PR #66224)
- Improvements have been made to the Device Power Management framework to not unnecessarily resume/suspend in some situations. (PR #66246)
- If you’ve started to look into the new keyboard matrix driver, you will likely find the new
input kbd_matrix_state_dump
shell command quite useful. As its name indicates, given the id of a keyboard matrix Devicetree node, it will dump the state of the keyboard matrix every time a key is pressed/released. - The documentation of the pytest plugin has been vastly improved, and so has the API reference for the Sockets API.
With the holiday season upon us, I will be back with the next update on January 5th. Hopefully I won’t be buried under thousands of pull requests to write about, but should that be the case I will do my best to highlight the most noteworthy ones!
A big thank you to the 12 individuals who had their first pull request accepted this week, 💙 🙌: @ryukoposting, @hellesvik-nordic, @sebastianschlupp, @kevinior, @aofrioWeifengLi, @VuDangBP, @BryanZhuAM, @AlessioLei94, @alelec13, @helen741, @Burt-Silverman, and @sateeshkotapati.
As always, I very much welcome your thoughts and feedback in the comments below!
If you enjoyed this article, don’t forget to subscribe to this blog to be notified of upcoming publications! And of course, you can also always find me on Twitter and Mastodon.
Catch up on all previous issues of the Zephyr Weekly Update: