I think I am satisfied that what I am seeing is a basic fault with the LVGL V9/NuttX framebuffer driver.

LVGL V8/NuttX had, as LVGL traditionally needs, 2 buffers (full frame, or partial, as required) and switches between them.

LVGL V9/NuttX directly uses the "/dev/fb0" framebuffer as best as I can tell.

I believe it needs a rework of the lvgl framebuffer driver - which is probably down to LVGL rather than NuttX people to sort; but I may see if I can create a custom driver using the LVGL guidelines for now.

On 14/06/2024 11:13, Tim Hardisty wrote:

Thank you Gregory. I will read all of this and, so far, have skim read the first you linked to and now understand it a little better already and it confirms that the SAMA5D2 does indeed have a frame buffer interface, that I register in my board bringup (so longer ago I'd forgotten LOL) - but it could be that I could "upgrade" this since the LCDC peripheral probably supports more than 1 layer with. various advance functionalities - but NuttX may not of course.

I would like to use LVGL rather than NX simply because of the good quality and flexible widgets that quickly allow a nice UI to be built.

Since the framebuffer example app works AOK, with no obvious image defects, I am sure it's fundamentally OK.

I also recall that my brief experimentation with LVGL V8 via NuttX, using the example app, worked with no visible artifacts, so I am leaning towards some setup or other incompatibility between LVGL V9 (which purports to have NuttX support and was only recently incorporated into NuttX to supersede V8) and NuttX, or the SAMA5, or similar.

I will investigate further today as there are a whole heap of LVGL settings with no documentation that I can find - either at LVGL or at NuttX - so it could be I just need to find the the correct, arcane, incantations. And also try reverting to LVGL V8 to compare behaviours if necessary.

On 14/06/2024 03:39, Gregory Nutt wrote:

On 6/13/2024 8:32 PM, Gregory Nutt wrote:
On 6/13/2024 11:56 AM, Gregory Nutt wrote:
Changing the existing driver interface would break the NX graphics. NX graphics is mis-named.  It is not a graphics system like LVGL, but a windowing system like X.  Whatever you do should not break the windowing system and, in fact, really should optionally integrate with the windowing system.

There is some graphics support in apps/ now (called NxGraphics), but that was never really fully developed. LVGL has the better 2D graphics.  NxGraphics can provide a Z-axis as well if properly integrated with LVGL.  There are several examples of window managers that run on top of NX graphics  NxTerms, NxWM, a tiny port of a TWM-like window manger called Twm4Nx.  These must not be broken.

So you have a few options:  (1) Provide dual graphics that are completely separate so that the existing graphic framework is not trashed.  That would not be cool.  Or (2) Integrate LVGL with NX Windows, or (3) both.  Then you could have multiple LVGL windows.. which is really pretty cool. There would possible be some performance hit, however.  The simplest LVGL integration would be to use per Window framebuffers.  The current framebuffer driver supports the whole screen.  That is not the way other graphic systems work.  Rather they provide a framebuffer per Window.  That naturally supports Windows and cleanly provides multi-threaded access to the display.

Here are URLs to some relevant documentation.  I may or may not have ever been leveraged into  nuttx/Documentation.

  * https://cwiki.apache.org/confluence/display/NUTTX/Framebuffer+Character+Driver   * https://cwiki.apache.org/confluence/display/NUTTX/NX+Graphics+Subsystem

  * https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=139629474   * https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=139629473


A couple more references that most people are not aware of:

 * https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=139629398  * https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=139629401



Reply via email to