Electronics software development
What is it?
Broadly speaking firmware is a type of software that is embedded into the electronics (the hardware) of a device. For this reason it is often referred to as embedded software. Firmware is written by an engineer that has knowledge of the underlying electronics and therefore usually has an electronics engineering background (as opposed to purely computer science background).
How we can help?
Firmware is one of our key strengths. We specialize in C/C++ and assembly programming languages for a range of micro-controllers and processors e.g. ARM Cortex (STM32 range), NXP, PIC, AVR, x86, 8051, MSP430 and more. All software is designed to very high standards using the latest software engineering techniques: code analysis tools (lint, MISRA, etc.); self documenting coding tools; version control system (full tractability); design for manufacture and self test. We use industrial strength real time operating systems where applicable so that code modules are re-usable and existing proven software modules can be "dropped in". Over the years we have built up a huge library of reusable code modules.
To communicate with a server on the Internet a communication protocol is used that defines how to exchange data and files between client and server. What protocol to use for each situation is a key choice in designing a system. We have vast experience in using all of the protocols below in commercial projects so we know what to use for each set of circumstances.
Where there is a Internet connection (e.g. cellular) our firmware will always support over the air (OTA) upgrades i.e. if there is a need to change the firmware then new firmware can be placed on the server/website and the remote device will collect and run the new firmware when it next connects (in a secure way). This is very useful feature as it allows new features to be added (potential income stream) and issues to be addressed after the device has been installed.
For some projects we develop the application software using a scripting language like Python (e.g. when running Linux) - this is where the distinction between firmware and software gets blurry. We can also develop software than runs on cellular modems e.g. python on Telit modules, Java on Gemalto modules, C on Open AT modules. There are pros and cons to having the application running on a modem compared to having an external micro-controller containing firmware. See our hardware section for more information on cellular modems we have designed for.
Already have some firmware?
We can also maintain/modify existing firmware so if you already have a device and you want the firmware maintained or updated then we can do that also. We often do this where it is required to connect an existing device to our servers by modifying the firmware.