WWAN modem integration and support

Being the main developer of ModemManager, libmbim and libqmi, I have extensive experience in WWAN modems (e.g. GSM, UMTS, LTE, 5GNR…) and protocols (e.g. AT, QMI, MBIM…), how they work, how they’re integrated in the Linux kernel (option, qmi_wwan, cdc-mbim, mhi-wwan….), how userspace services interact with them, and how to best use them from client applications.

Since I started freelancing, I have helped multiple companies all over the world integrating WWAN modems in their custom systems, either using the standard tools I have helped create, or writing completely new tools when needed.

During this kind of work, I have also been able to work closely with the WWAN modem manufacturers themselves to solve problems, usually with email or public forum discussions, but also with teleconferences or on-site discussions in the manufacturer’s offices. I have direct contact to key developers of major WWAN modem manufacturers, which sometimes is extremely useful to quickly resolve issues without involving the (usually) slower local field application engineers or Tier 1 support.

New WWAN modem enablement (for manufacturers)

I have worked for several WWAN manufacturers that approached me to give support to their new devices in ModemManager and libqmi/libmbim before they are even released in production. By starting the module integration early in the manufacturing process, we also ensure the support is available in the major GNU/Linux distributions by the time the product reaches the market.

The kind of work involved would include making sure they work properly in the whole software stack (from kernel to user interface), adding support for new features, integrating firmware upgrade support in the Linux Vendor Firmware Service, and maintaining them through a long period of time (several stable release cycles).

In order to fully test the different features and behaviors that the WWAN modems have, I maintain my own office test LTE network, powered by srsLTE, Open5GS, a USRP B210 and sysmoUSIM-SJS1 SIM cards. I use this fully functional network to periodically run a collection of black-box tests on the specific modules I’ve been hired to support.

Custom Linux-based system setups

The use of tools that allow creating full customized Linux-based systems from scratch is everyday more common. I have helped create a dozen of different custom setups using OpenWRT, buildroot and the Yocto Project, usually also involving custom WWAN management needs, custom kernel updates (e.g. backported drivers) or new non-standard applications integrated.

OpenWRT SDK improvements

This kind of work usually starts with a SDK provided by the hardware manufacturer itself. I have seen multiple different SDKs from multiple different manufacturers, and they are usually random OpenWRT checkouts slightly modified to adjust to the hardware details (e.g. minor device tree updates, custom GPIOs defined, and similar things).

The SDKs provided by the manufacturers are far from perfect, and the first task usually involves aligning the hardware support with officially released OpenWRT stable versions, applying in very clear commits the specific changes required by the specific hardware. Whenever possible, the changes are also suggested to the upstream OpenWRT tree.

Generic hardware integration

I am an expert in writing low level system libraries and tools to communicate with hardware of any kind, using a lot of different protocols and buses. Although my main expertise is still WWAN modems, I have also been contracted to write software to integrate with very different types of devices.

These are some of the systems and hardware devices I have been able to successfully integrate with:

  • Airbus RSA/NSS/CIDS and Boeing CSS/RDC2/RDC5.
  • Generic ARINC429 streams with RTX429 or AIM429 adapters.
  • Multiple types of airplane seat controllers (e.g. Zodiac and Crane actuators, Gentherm heating, Lantal cushion pumps…).
  • MagTek credit card readers.
  • 3M touchscreen controllers.
  • 2D barcode scanners.
  • Custom hardware crypto blocks.

The hardware integration is obviously simpler and better with proper protocol documentation, but when that is not available, reverse-engineering the communication e.g. capturing USB or network traffic is sometimes also possible.

Generic consultancy and support

I am a Telecommunications Engineer with more than 15 years of experience developing software for Linux-based platforms. I have the strong background that contributing to open source software gives, plus the extensive knowledge that engineering studies provide in a broad range of areas.

I can help with any task in the life-cycle of a product, from getting the hands dirty and developing the software myself, to managing the team of developers that will do it:

  • Feature planning.
  • Software and architecture design.
  • Development of new capabilities.
  • Development of testing infrastructure.
  • Overall maintenance and bug fixing.

I am also able to provide generic or customized training courses for independent professionals or companies about multiple subjects, including software maintenance, release management procedures, version control systems (e.g. git), development with general purpose libraries (e.g. Glib/GIO,…), or any other topic in my area of expertise that you may find interesting.