The objective of this project is to replicate CSS Flexbox features in an embedded system using Ada, a programming language with a proven track record in mission-critical applications. We developed a library that enables developers to create GUIs with Flexbox-style widgets on microcontrollers without an operating system. The library supports dynamic widget manipulation, image resizing, and behavior commands similar to those found in CSS Flexbox, directly on the embedded device. Highlighting the open-source drivers from AdaCore and the capabilities of the Alire package manager, our initiative showcases Ada’s potential for advanced embedded systems design with high-quality, accessible programming tools.

Team Members

Dominick Carlucci | Kien Nguyen | John Shimer | Stuart Walters |

Project Poster

Click on any image to enlarge.


Watch the Project Video

Video Player Icon


Project Summary

Overview

AdaCore asked for the creation of a layout engine library for GUIs (graphical user interfaces) that would be similar to the CSS (Cascading Style Sheets) Flexbox architecture. AdaCore also requested the library to be deployable to a given microcontroller. This library was to be written in the Ada programming language to showcase the AdaCore package manager, Alire, and the various driver suites AdaCore provides.

Objectives

The objectives of this project is to:

  • Develop a library for GUI creation with Flexbox-style widgets on microcontrollers without an OS.
  • Support dynamic widget manipulation, image resizing, and behaviour commands similar to CSS Flexbox.
  • Use open-source drivers from AdaCore and Alire package manager.
  • Showcase Ada’s potential for advanced embedded systems design with high-quality, accessible programming tools.

Approach

  • Researched Ada programming language, and its many strengths.
  • Generated requirements for the project by researching CSS Flexbox.
  • Researched alternative GUI libraries to understand what they offer. 
  • Researched Ada Multiway Trees for a strong data structure.
  • Researched package manager Alire for building the project.
  • Built initial system for Linux Environment to practise Ada.
  • Researched AdaCore’s Ada Drivers Library to find firmware for the target system.
  • Researching tools to deploy code on embedded systems.
  • Ported initial native system to an embedded system build targeting STM32F746-Discovery board.
  • Implemented touch screen interface for GUI library.
  • Researched Ada Tasking.
  • Implemented Tasking into the system.
  • Implemented runtime resizing

Outcomes

The outcomes for this project were:

  • Taught people about Ada & AdaCore.
  • Showcased the capabilities of Ada on embedded systems.
  • Demonstrated the dynamics of Flexbox.
  • Demonstrated the capabilities of AdaCore’s package manager, Alire.
  • Demonstrated the various driver suites developed by AdaCore that are useful for embedded systems.