The development of embedded systems is one of the most challenging software development disciplines, especially when it comes to the development of operating systems and devices. This form of software development is crucial as it acts as a gatekeeper for all other software development activities. A network application cannot be developed if your Ethernet driver does not yet exist. You can’t worry about whether Arial black is the right font for your graphical user interface if the graphical driver causes a deadlock. And sometimes you can’t demonstrate your new hardware to an important customer if their organisation doesn’t have a bootable operating system yet.

A challenging request

Strypes’ relationship with one of our clients started with a challenging request: a relatively new product, a single chip modem for the automotive domain, had to be demonstrated within two weeks to an important customer in another part of the world. A nice evaluation single board computer had already been built around the modem, which worked well with a Linux-based operating system. For this specific customer, however, a system based on a real-time operating system called QNX had to be demonstrated. Critical was that this new wireless modem was connected to the host processor via a data bus called SDIO, but there was no SDIO driver available in QNX.

A seemingly impossible task

Our client had been trying to build an SDIO driver for QNX for a few months. Now that the deadline was rapidly approaching, action was needed to prevent the deal-no-deal meeting with their client from turning into a failure. They decided to call on Strypes.

At the time, the Strypes team had little experience with SDIO and QNX and the client asked for a seemingly impossible task: to develop a driver for unknown hardware in less than two weeks. A task they hadn’t been able to accomplish themselves in a much longer period of time. However, one of Strypes’ mottoes is ‘if Strypes can’t do it, then no one can’. Complex and challenging projects are therefore embraced by us as they give us the best opportunities to add value for our customers and to distinguish ourselves. This challenge was an excellent example of this.

The approach

Two colleagues from our Strypes Development Center in Lisbon flew to the Netherlands for a final all-hands-on-deck effort at our client’s location. Although they had already developed a non-working prototype driver, the team decided to follow a two-pronged approach: on the one hand they tried to repair the existing driver and on the other hand they decided to develop a new driver from scratch. The reason for this is that it is often difficult to delve into someone else’s undocumented code in such a short period of time. After a few days, the team already had a first success when it was able to bring both SDIO drivers into working condition, albeit with another limited set of functions. The team decided to go ahead and concentrate on the new driver.

Milestone reached

Working through the weekend was necessary to have the system ready in time for the start of the trip to the demonstration meeting at our client’s premises. However, the client’s location was not available during the weekend and the development setup was moved to the hotel room of one of the Stryperts. An important milestone was reached before the end of the weekend: the SDIO driver was now stable enough to successfully load the firmware of the modem.

After a week of hard work, the system was ready to be tested with some basic modem functionality. However, the team soon discovered that due to a configuration management error, the API version of the firmware did not match that of the modem driver on the host side (which is on top of the SDIO driver). Because the development system had to be packed the next morning before the flight, there was no time for a good solution. Fortunately, the changes in the API were small enough for some code hacking to set up a demonstration of the basic functionality.

The result

In one week the Strypes team was able to develop an interrupt and a DMA enabled idiomatic SDIO driver for QNX, which allowed our client to successfully do his QNX based modem demonstration. During this process, the Strypes team discovered that the modem device did not meet the SDIO standard, which hampered the driver’s previous development efforts. In addition, there were several inconsistencies with the available documentation. Due to internal communication errors, these peculiarities and non-conformities had not been reported to the relevant stakeholders, who were not aware of them until Strypes intervened. In the end, in addition to a working SDIO driver, Strypes’ client also received a number of non-SDIO-related improvements, which ultimately led to a new, improved revision of the hardware.

With this challenge, Strypes took on a seemingly impossible task and exceeded our client’s expectations.