Jun 2021 - Present
# Context
Consultant for SMILE Embedded & IOT, which is an consulting company reputed for its know-how in embedded and open source software.
Developed products:
• Embedded application layer of connected speakers, for Devialet, which designs and markets audio systems. (During 1 year)
• Embedded application layer of a new generation of electric vehicle charge station, for Total Charging Services, which designs, markets and installs an infrastructure for electric vehicle charging. (During 1 year)
# Technical leader of a junior team
◦ Implementation of C++ conventions and best practices.
◦ Ensure code consistency, documentation and testing.
◦ Work process implementation: code reviews, commit rules, management of branches and versions, incremental development, beta and RC releases.
◦ Organization of the repositories, the source files and the C++ components.
◦ Set up and configuration of helping tools: pre-commit, clang-format, clang-tidy, cmake-format.
# Design
◦ Detailed analysis of the OCPP2 and IEC 61851-1 protocols for implementation.
◦ Software architecture definition, following both Layered and Entity-control-boundary patterns
◦ Detailed UML design of application and messaging layers according to the OCPP2 protocol, behavior and communication between charge stations and the supervision server.
◦ Detailed UML design of drivers monitoring layer of a charge station according to the IEC 61851-1 protocol, behavior and communication between charge stations and the electric car.
◦ Selection of third-party libraries and tools.
# Application development
◦ Speaker : audio equalizer on multiple frequency bands.
◦ Speaker : audio balance of a stereo pair of devices.
◦ Speaker : Networked Standby (energy saving while keeping network connectivity). Distinction between standby and awake behavioral states, events that triggers state changes, control of wifi, Ethernet and audio components.
◦ Charge station : the IEC 61851-1 protocol layer, behavioral and communication with the electric car.
◦ Charge station : the OCPP2 protocol layers, business data model and communication with the supervision server.
# Connectivity development
◦ Runtime validation of json structures on REST requests. Json validation schema writing.
◦ Subscription system to notifications about a REST API. Websocket server, multiple client management, independent subscription to each REST API endpoint.
◦ Protobuf networkink API modification and extension.
◦ OCPP2 client messaging module: construction and validation of messages, dispatch and reception management.
# Third party Integration
Integration of many libraries as third party:
◦ Classic integration in a C++ project with CMake’s FetchContent and ExternalProject_Add.
◦ On difficulties, third party’s build system improvement to allow integration.
◦ Integration to Buildroot or Yocto build systems as package.
# Tests
◦ Unit test writing with googletest.
◦ Integration test writing on a Pytest (python) framework.
◦ Development of executables for manual hardware testing.
# Bug fix
◦ Bug investigation and fixing in beta / stabilization stage.
# Technical environment
◦ ARM architecture :
- Qualcomm QCS 405, 4x 64-bit Arm Cortex-A53,
- Broadcom BCM 58305B3, ARM Cortex-A9.
- STM32MP15, Arm Cortex-A7 600Mhz, Cortex-M4, GPU, DRAM 512Mb.
◦ Connectivity : Ethernet, wifi, bluetooth.
◦ Platform : Linux Buildroot et Linux Yocto (glibc, glibstdc++, Busybox, systemd, dbus, wpa-suplicant, avahi, bluez, netlink).
◦ Application third parties : protobuf, googletest, gstreamer, kvasir, rapidjson, magic-enum, WebSocket++, Qt core (Main loop, QSignals, QSettings, QStateMachine, QNetworkInterface, QSocket, QPlugin, Qdbus).
◦ C++ : C++17, C++23, Event oriented.
◦ Work organization : Camban, ClickUp, incremental development