Currently, CFB only supports monochrome displays.
I will add support for color display.
We usually utilize LVGL for this purpose in Zephyr, which is the ideal solution in many cases.
However, it may not work by the reasons that memory or footprint size for highly resource-constrained devices.
CFB has only minimal drawing functionality. We can operate relatively well in such environments.
In other words, this feature addition attempts to provide a minimum level of graphics support that we can use universally in the environment in which Zephyr operates.
The changes have become a long series of patches, so I divided them into several PRs.
I have divided the commits into four PRs and ordered based on importance and fundamentalness.
Supporting multi-display. This change affects APIs widely.
I also make some API improvements.
(Removal of font size restrictions, Function argument signedness changes, Remove needless arguments from font APIs)
Add support for color display.
This makes CFB no longer a "(Monochrome) Character" Framebuffer, but the API remains essentially unchanged. Therefore, we will rename it "Compact" Framebuffer to use the same abbreviation.
CFB is an implementation that allocates a buffer that can store the entire screen, but this uses a lot of memory. Works with less memory by splitting the screen and rendering and transmitting multiple times when memory is low.
To achieve this, we introduce a mechanism that expresses drawing operations as a command data structure and executes them as a type of lazy evaluation. For this, we add a buffer for the command.
I propose enhancing CFB.
Currently, CFB only supports monochrome displays. I will add support for color display. We usually utilize LVGL for this purpose in Zephyr, which is the ideal solution in many cases. However, it may not work by the reasons that memory or footprint size for highly resource-constrained devices. CFB has only minimal drawing functionality. We can operate relatively well in such environments. In other words, this feature addition attempts to provide a minimum level of graphics support that we can use universally in the environment in which Zephyr operates.
The changes have become a long series of patches, so I divided them into several PRs. I have divided the commits into four PRs and ordered based on importance and fundamentalness.
[ ] Bug fixes, Add tests. https://github.com/zephyrproject-rtos/zephyr/pull/67881
I fixed a bug that I found, and I added tests to prevent future trouble.
[ ] Multiple display support https://github.com/zephyrproject-rtos/zephyr/pull/68260
Supporting multi-display. This change affects APIs widely. I also make some API improvements. (Removal of font size restrictions, Function argument signedness changes, Remove needless arguments from font APIs)
[ ] Color display support https://github.com/zephyrproject-rtos/zephyr/pull/58817
Add support for color display. This makes CFB no longer a "(Monochrome) Character" Framebuffer, but the API remains essentially unchanged. Therefore, we will rename it "Compact" Framebuffer to use the same abbreviation.
[ ] Reduce memory consumption by partial frame transferring https://github.com/zephyrproject-rtos/zephyr/pull/72204
CFB is an implementation that allocates a buffer that can store the entire screen, but this uses a lot of memory. Works with less memory by splitting the screen and rendering and transmitting multiple times when memory is low. To achieve this, we introduce a mechanism that expresses drawing operations as a command data structure and executes them as a type of lazy evaluation. For this, we add a buffer for the command.