Keyboard for gamers

Team – 1x Embedded Software Developer
Tech stack – STM32F103, USB, Bootloader, GPIO expanders

What was the client’s initial situation? What challenges were they facing?

Our client inherited code base from previous firmware developer and wanted to port it to a new platform. The firmware was working on the old hardware but was in bad state, not easily portable and the documentation was lacking.

Initially, the firmware we received was incomplete, requiring detailed analysis and multiple follow-ups to obtain all necessary components.

An additional challenge was that they used an exotic MCU from not well-known producent with less extensive documentation.

How was the client handling the problem before we stepped in?

Before partnering with us, the client faced significant challenges with each new product due to firmware that lacked portability. The absence of a standardized version control system made bug fixes costly and the introduction of new features risky.

Additionally, many of the client’s existing tools were provided only as executables without source code, complicating integration and requiring repeated assistance from their previous firmware developer for custom tool adaptations.

How did GoodByte solve the problem?

  • The client experienced reduced uncertainty through close and transparent communication facilitated via Slack channels.
  • The customer code has been significantly refactored. Making it highly portable, and implemented a standardized version control system.
  • The client received comprehensive documentation covering both the firmware and the associated communication protocols.
  • Additionally, the client benefited from the introduction of a Continuous Integration (CI) setup, which streamlined their process and ensured reliable reproduction of firmware deployments.

How did the changes help the customer?

The client now benefits from thorough documentation and a streamlined release cycle, making bug fixes and the addition of new features straightforward.

Thanks to a clear separation between hardware support and business logic, porting the firmware to new products is simple and no longer requires extensive rewriting.

Rescue embedded project

  • Detailed analysis of existing firmware – Investigated and documented the current state, identified gaps, incomplete functionalities, and potential risks related to the existing code base.
  • Rapid MVP development for early hardware validation – Delivered quickly a minimal viable firmware solution to allow immediate hardware testing, while concurrently refactoring the firmware.
  • Complete firmware refactoring and documentation – Rebuilt the firmware architecture, clearly separating hardware-specific layers from business logic, significantly improving maintainability, portability, and scalability.
  • Recovery and completion of non-functional features – Identified and implemented previously incomplete or malfunctioning functionalities, restoring intended device performance and reliability.

Embedded Software Development

  • Core USB keyboard firmware – Developed robust USB HID communication, key-scanning logic, and comprehensive support for user-defined key actions, layers, macros, and advanced customization options.
  • RGB LED lighting management – Implemented runtime-configurable RGB LED effects, allowing end-users to dynamically adjust parameters such as color, speed, and brightness.
  • Non-volatile storage implementation – Integrated FLASH memory functionality for securely storing keyboard states and multiple user-defined configuration profiles.
  • Reliable USB bootloader implementation – Delivered a robust bootloader solution enabling dependable firmware updates via USB, maintaining essential keyboard functionalities during updates.
  • Firmware certification support – Prepared firmware to meet product certification requirements (ESD, EFT, USBCV tests), proactively resolving technical issues to ensure compliance and product reliability.

DevOps for Embedded Systems

  • IDE-independent build system migration – Transitioned the client’s firmware build system from an IDE- dependent environment to a standardized, IDE-agnostic Meson build system using the GCC toolchain.
  • Version control and cloud repository setup – Implemented Git-based version control along with cloud repository hosting, enabling full transparency and streamlined collaboration previously unavailable to the client.
  • Continuous Integration (CI) automation – Established automated CI pipelines for consistent builds and firmware releases, empowering the client to independently manage builds without ongoing developer support.
  • Containerized development environment (Docker + Devcontainers) – Provided a consistent, portable, and reproducible development environment across multiple platforms, simplifying firmware builds and development workflows.
  • Unified code style enforcement – Introduced automated code formatting using clang-format to ensure consistency, maintainability, and readability across the entire firmware codebase.