Firmware and Software Architecture for smartglasses
In this project, we assisted our customer in making innovative smartglasses, leading the design and development of the software stack. We designed an Application Programming Interface (API) for third-party developers and implemented functionality in an Android service that communicates with the smartglasses through USB. On the device side, we developed the microcontroller firmware providing the USB interface, as well as parts of the FPGA firmware. We were also involved in early design choices, component selection and validation, hardware schematics reviewing, patent writing and image processing research.
|OS: Android, ThreadX RTOS|
|Languages: C, C++, Python, Java, VHDL|
|Libraries: libusb, Swig|
|Hardware: Cypress FX3 (ARM-based microcontroller), Xilinx FPGA|
DSL Linux kernel / System integration for Internet Gateways
On this project, we integrated a DSL linux kernel for a company that makes DSL/FTTH/Cable internet gateways. Our consultant was the primary interface for the interaction with Broadcom, which is the principal CPU SoC and Wifi chip provider for these products. We took care of the integration of the Broadcom board support package and patch deliveries into the custom build system of the gateway software stack. Furthermore, we analysed bugs reported by testers or field users and either propagated them to Broadcom support or fixed them internally. Finally, we were also responsible for the development of low-level system scripts and hardware abstraction layer (e.g. upgrade, flash formatting, board configuration) and architecting of development and integration flows, both internally and towards external partners.
|Languages: C, Shell scripts|
|Libraries/Tools: git, gerrit, perforce|
|Hardware: ARM- and MIPS-based CPUs, PCIe|
Update system of LTE to Wifi transceiver for trains
In this project we were responsible for the integration of a safe software update solution for a product that converts LTE network access to Wifi in trains. This product uses the ptxdist build system for an off-the-shelf NXP i.MX28 module. We implemented an update solution based on swupdate, wrapped in a C language executable that starts the update procedure and changes the U-boot environment to the boot new system. In case of error during or after the update, the system falls back to the previous version, which makes the update safe.
|OS: Linux (ptxdist)|
|Libraries: U-boot, swupdate|
|Hardware: NXP i.MX28|
Linux integration of payment terminal
On this project, Mind was responsible for the BSP integration on a payment terminal using a Yocto build system powered by an iMX7d processor. The user space application was developed with Qt 5 and C++ technologies, and communicated with the trusted environment and NFC device. We made some multimedia features available for demonstration purposes (PDF reading or video playing). Source code hosted on Git server.
|OS: Linux (OpenEmbedded minimal)|
|Libraries: Qt 5, poppler, GStreamer|
|Hardware: iMX7d from NXP|
GIS Android Application
The goal of this project was to provide a user oriented software to remotely access professional GPS receivers. This was done through a remote serial communication interface. The software allowed to record, collect, display on map and transfer locations according to the user’s needs. Several recording sessions could exist at the same time with each one managed as a seperate view to allow for a parallel workload over shared devices.
|Languages: Qt, QML, C++, GIS, OSM|
|Libraries: Qt5.7, Qt5.8, ArcGIS, OSM online API|
|Hardware: Android tablets and smartphones|
Porting GPS receiver firmware to a Linux-based platform
The new platform developed by our customer in this project used a more powerful processor than the previous one. To reduce the support cost for this new platform, Mind was asked to replace the RTEMS operating system which was used before with a Linux-based system. This project involved setting up a cross-compilation and build system (based on buildroot), giving input on the hardware choices, customizing drivers for FPGA peripherals, porting various RTEMS-specific parts of the firmware code, debugging USB drivers, reducing boot time, taking care of real-time constraints, optimizing memory footprint, developing an upgrade system, etc. A secondary important goal in this project was to train a junior employee of the customer so that he could take over support and development.
|OS: Linux (RT patch), U-Boot|
|Languages: C, Make, Python, Shell scripts|
|Hardware: TI AM37xx, parallel NAND, memory-mapped FPGA|
BSP integration of compressor controller
On this project, Mind was responsible for the BSP integration of a universal compressor controller using a Yocto build system powered by an iMX7d processor. The system was managed through a user space application developed with Qt 5 and C++. Linux drivers were provided to send orders to the M4 co-processor and FreeRTOS system over shared memory and Netlink protocol. The purpose of the M4 was to manage the equipment in real time. The Linux system was designed and chosen to display the interface, update the system and allow for user control. Project managed with SVN and Git solutions.
|OS: Linux (OpenEmbedded - Angstrom)|
|Languages: C++, C|
|Libraries: Qt 5, Linux kernel, U-boot|
|Hardware: iMX7d from ToradexP|
Optimization of GStreamer pipeline for a video capturing application
In this project we helped a customer optimizing the performance of a GStreamer application running on a TI OMAP3 processor. The application captures video from a camera, encodes it to H.264 and sends it out on the network. The OMAP3 processor has a camera interface for capturing the video and a DSP for the encoding. TI provides the open-source DMAI library for accessing these from application code, and even a GStreamer plugin for easier integration. For this project, the customer's application required access to the raw video frames coming from the camera and resizing these before encoding. This broke the assumptions made by the GStreamer plugin and caused it to copy the video frames three times before it reached the encoder. By modifying the source code of the GStreamer plugin and of the Linux kernel, we managed to reduce this to zero copies. These modifications were contributed to the gstreamer-ti and video4linux projects and have partly been included in them.
|OS: Linux (OpenEmbedded - Angstrom)|
|Libraries: Linux kernel, DMAI, GStreamer|
|Hardware: TI OMAP350|
Advice and implementation of a secure HTTP connexion for an embedded device
In this project we gave some security advice to one of our customers regarding the implementation of a secure HTTP connexion for one of their embedded devices.
We wrote a document to describe the “SSL/TLS” approach, including Authentication, Confidentiality and Integrity. We described some security essentials,
the impact in terms of infrastructure, as well as different ways to create and manage certificates (Self-Signed Certificates, User Managed Certificate,
and Let's Encrypt) and also topics like wrappers and libraries to use the certificates once they've been created.
We discussed these different approaches with the customer, each with their pros and cons, and finally we implemented the chosen solution for our customer.