Skip to content
This repository was archived by the owner on Jul 1, 2025. It is now read-only.
This repository was archived by the owner on Jul 1, 2025. It is now read-only.

[request] Embedded GUI #13

@puzrin

Description

@puzrin

No GUI, suitable for embedded use on small SOC-s

Currently there are no complete solutions, suitable to create modern interfaces on "small" devices (like 8-16K RAM + 64-128K Flash).

Targeting

I'd suggest to focus on "small" systems like stm32f0-stm32f4 with colour displays up to 320*200.

Reasons:

  • "Big" embedded systems, where linux available, can run restricted versions of QT and other "desktop" libs.
  • Hardware should be simple enough, to order via EasyEDA and assemble manually. I mean, primary focus on chips like TQFP64 and below, without external DRAM.
  • Displays 320*200 is almost maximal size to have 25FPS with SPI. Bigger displays usually have more powerful hardware => shift to linux-based solutions.

That's only examples, to explain range of devices, where hardware already CAN run modern GUI, but no appropriate software available. Of cause, you can find lot of exclusions, but reason of GUI request is to fill gap, not to compete with existing libs.

Specifics of hardware restrictions

  1. No memory space for full display buffer (320*240*16bpp). This is solved by multi-pass rendering, when buffer size is 1/20 of screen area.
  2. No resources (primary - RAM) for TTF (vector) fonts. Bitmap fonts used.
    • Related: there are some solutions to convert font from TTF, but those do not support good compression. Appropriate tools required.
  3. No GPU. As a result - no need to have abstraction layer for appropriate draw commands. It's enough for driver to support region copy only.

UX/look

Most of existing GUI-s try to invent own look instead of following one of existing guideline. Result is very poor. IMHO something like Material Design is "minimal possible quality requirement".

PC emulator

When you do simple device, it's not difficult to code "meat". The most time-consuming task become interface polishing. It's not convenient to do such things on bare metal. Having PC emulator of display/touch will speed up development significantly.

Success criteria

Ideally, it would be nice to have GUI, able to create Material Design interfaces on SOCs with 8-16K RAM and 64-128K flash.

  1. GUI core. To not fall into technical details - something like LittlevGL.
  2. Tool to convert TTF fonts to bitmap fonts, with subsetting and RLE-like compression.
  3. Demo with "Settings menu". A lot of small devices can be described as "Main screen + settings". Having demo with good design will help a lot to quick-start.
  4. PC emulator (driver), easy to install on major platforms.

References

This chapter replaces "Work in Progress" because referred things are not for rust. But those have a lot of reusable things, and should save a lot of time.

  • LittlevGL - example of nice GUI for C. It's not ideal due C restrictions, but worth to check instead of reinvent all from scratch.
  • lv_font_conv - WIP, see dev branches & issues. Fonts convertor + area to experiment with compressions. It's written in JavaScript for LVGL, but with keeping in mind to be reusable for Rust.
  • Settings menu screenshots - how modern settings could look.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions