Most of today's communication devices are based on microcontroller units (MCUs) and transceiver ICs. The functionality of the devices are defined in their firmware, which makes the development to our core discipline. For this, we have implemented a full firmware engineering process, which is based on, but is not limited to the following elements:
Over time, we have been collecting a good number of basic library elements and design patterns, that speed up development of common functionality and increasing code quality in parallel.
As we are used to work with very many different microcontrollers and transceiver platforms, a clean hardware abstraction is a must. Over the years we gained the experience to handle and abstract a lot of different semiconductors and do know the requirements in order to build a flexible but full featured interface design to the hardware.
The management of complex projects is of key importance. Internally we do agile development, partly based on SCRUM, partly based on other agile approaches, in combination with test driven development whenever reasonable. Furthermore, well proven and established tools, like e.g. GIT-based version control and Redmine based issue tracking, do help us to combine clean processes with efficiency.
Test & Verification
Most of our software is jointly developed with unit tests of the smallest units, but also unit tests in a logical scope. In addition, we make extensive use of automated test benches on the system level to ensure reliable regression testing. These systems tests are done in simulated, emulated and real environments.