Migration Guide

From 13.6.x to 13.7.x

Front Panel

  • Set the explicit dependency to the UI Pack 13.7.0:

    <dependency org="com.microej.pack.ui" name="ui-pack" rev="13.7.0">
           <artifact name="frontpanel" type="jar"/>
    </dependency>
    

BSP

  • [VEE Port configuration project]

    • Fetch C Module MicroUI 3.1.0.
  • [BSP project]

    • Optionally, implement UI_DRAWING_freeImageResources(MICROUI_Image* image) (single-output buffered image format) or UI_DRAWING_freeImageResources_X(MICROUI_Image* image) (mulitple-output buffered image formats, where X is the image format identifier) to free the resources associated with a buffered image when it is closed.

BSP with DMA2D

  • [VEE Port configuration project]

    • Fetch C Module Display-DMA2D 4.1.0.

BSP with VG-Lite

  • [VEE Port configuration project]

    • Fetch C Module MicroUI-VGLite 7.2.0.

BSP with NemaGFX

  • [VEE Port configuration project]

    • Fetch C Module MicroUI-VGLite 1.1.0.

From 13.5.x to 13.6.x

Front Panel

  • Set the explicit dependency to the UI Pack 13.6.2:

    <dependency org="com.microej.pack.ui" name="ui-pack" rev="13.6.2">
           <artifact name="frontpanel" type="jar"/>
    </dependency>
    

BSP with VG-Lite

These steps are for a VEE Port that manages its own implementation of LLUI_DISPLAY_impl.h (that did not use the old implementation which was available in this C Module):

  • [VEE Port configuration project]

    • Fetch C Module MicroUI-VGLite 7.1.0.
    • (optional) Fetch C Module MicroUI-Mimxrt595-EVK 7.0.0.
  • [BSP project]

    • Delete the properties file cco_microui-vglite.properties.
    • Delete the following files from the file-system and from the C project configuration:
      • inc/display_utils.h
      • inc/display_vglite.h
      • inc/drawing_vglite.h
      • inc/vglite_path.h
      • src/display_stub.c
      • src/display_utils.c
      • src/display_vglite.c
      • src/drawing_vglite.c
      • src/vglite_path.c
    • Add the new files to the C project configuration:
      • src/ui_drawing_vglite_path.c
      • src/ui_drawing_vglite_process.c
      • src/ui_vglite.c
    • Review all imports of the removed header files.
    • In the implementation of LLUI_DISPLAY_impl.h, call UI_VGLITE_init() during the initialization step.
    • In the GPU interrupt rountine, call UI_VGLITE_IRQHandler().
    • Review all options of ui_vglite_configuration.h.
    • Implement UI_VGLITE_IMPL_notify_gpu_xxx() instead of DISPLAY_IMPL_notify_gpu_xxx().
    • Implement UI_VGLITE_IMPL_error() instead of DISPLAY_IMPL_error().
    • Change all calls to DISPLAY_VGLITE_xxx() functions to UI_VGLITE_xxx() functions.
    • Change all calls to DRAWING_VGLITE_xxx() functions to UI_DRAWING_VGLITE_PROCESS_xxx() functions.
    • Change all calls to VGLITE_PATH_xxx() functions to UI_DRAWING_VGLITE_PATH_xxx() functions.
    • Change all calls to DISPLAY_UTILS_xxx() functions to UI_VGLITE_xxx() functions.
  • Build the VEE Port and the BSP.

BSP With MCU i.MX RT595

These steps are for a VEE Port that uses the implementation of LLUI_DISPLAY_impl.h which was available in the C Module VGLite:

  • [VEE Port configuration project]

    • Fetch C Module MicroUI-VGLite 7.1.0.
    • Fetch C Module MicroUI-Mimxrt595-EVK 7.0.0.
  • [BSP project]

    • Follow the steps of BSP with VG-Lite (described above) except the calls to UI_VGLITE_init() and UI_VGLITE_IRQHandler().
    • Implement DISPLAY_DMA_IMPL_notify_dma_xxx() instead of DISPLAY_IMPL_notify_dma_xxx().
  • Build the VEE Port and the BSP.

From 13.4.x to 13.5.x

Front Panel

  • Set the explicit dependency to the UI Pack 13.5.1:

    <dependency org="com.microej.pack.ui" name="ui-pack" rev="13.5.1">
            <artifact name="frontpanel" type="jar"/>
    </dependency>
    
  • Replace any calls to LLUIPainter.setDrawer() and LLDWPainter.setDrawer() to LLUIDisplay.Instance.registerUIDrawer().

  • Replace any calls to LLUIPainter.getDrawer() and LLDWPainter.getDrawer() to LLUIDisplay.Instance.getUIDrawer().

  • Replace any calls to LLUIDisplay.getDWDrawerSoftware() to LLUIDisplay.Instance.getUIDrawerSoftware().

  • Implementation of the interface UIDrawingDefault: implement the interface UIDrawing instead.

  • Implementation of the interfaces DWDrawing and DWDrawingDefault: implement the interface UIDrawing instead.

  • Implementation of the service BufferedImageProvider: implement handledFormat() and remove the parameter format from newBufferedImage().

  • Replace any occurrences of MICROUI_IMAGE_FORMAT_LCD by MICROUI_IMAGE_FORMAT_DISPLAY.

BSP without GPU

  • [VEE Port configuration project]

    • Fetch UI Pack 13.5.1 and C Module MicroUI 3.0.0.
  • [BSP project]

    • Delete the VEE Port include folder (often /platform/inc).
    • Delete the properties file cco_microui.properties.
    • In the C project configuration, include the new C files ui_drawing.c, ui_image_drawing.c and ui_drawing_stub.c.
  • Build the VEE Port and the BSP.

BSP with DMA2D

  • Follow the migration steps of “BSP without GPU”.

  • [VEE Port configuration project]

    • Fetch C Module Display-DMA2D 4.0.0.
  • [BSP project]

    • Delete the properties file cco_display-dma2d.properties.
    • Delete the C files drawing_dma2d.h and drawing_dma2d.c and remove them from the C project configuration.
    • In the C project configuration, include the new C file ui_drawing_dma2d.c.
    • Replace the import drawing_dma2d.h by ui_drawing_dma2d.h.
    • Replace the calls to functions DRAWING_DMA2D_xxx() by UI_DRAWING_DMA2D_xxx().
  • Build the VEE Port and the BSP.

BSP with VG-Lite

  • Follow the migration steps of “BSP without GPU”.

  • [VEE Port configuration project]

    • Fetch C Module MicroUI-VGLite 6.0.1.
  • [BSP project]

    • Delete the properties file cco_microui-vglite.properties.
    • Delete the C files vg_drawer.h and vg_drawer.c and remove them from the C project configuration.
    • Verify the options in display_configuration.h.
    • In the C project configuration, include the new C file ui_drawing_vglite.c.
  • Build the VEE Port and the BSP.

From 13.3.x to 13.4.x

Front Panel

  • Set the explicit dependency to the UI Pack 13.4.1:

    <dependency org="com.microej.pack.ui" name="ui-pack" rev="13.4.1">
           <artifact name="frontpanel" type="jar"/>
    </dependency>
    

BSP

  • The signatures of LLUI_DISPLAY_IMPL_decodeImage and LLUI_DISPLAY_IMPL_getNewImageStrideInBytes have changed:

    • use jbyte in function signatures.
    • add a cast to MICROUI_Image in implementation.
  • Use the MicroUI C module 2.0.1.

From 13.2.x to 13.3.x

Front Panel

  • Set the explicit dependency to the UI Pack 13.3.1:

    <dependency org="com.microej.pack.ui" name="ui-pack" rev="13.3.1">
           <artifact name="frontpanel" type="jar"/>
    </dependency>
    

BSP

  • Install the MicroUI C module 2.0.0.

  • The signatures of LLUI_DISPLAY_IMPL_decodeImage and LLUI_DISPLAY_IMPL_getNewImageStrideInBytes have changed:

    • use jbyte in functions signatures
    • add a cast to MICROUI_Image in the implementation.

From 13.1.x to 13.2.x

Front Panel

  • Set the explicit dependency to the UI Pack 13.2.0:

    <dependency org="com.microej.pack.ui" name="ui-pack" rev="13.2.0">
           <artifact name="frontpanel" type="jar"/>
    </dependency>
    

From 13.0.x to 13.1.x

Front Panel

  • Set the explicit dependency to the UI Pack 13.1.0:

    <dependency org="com.microej.pack.ui" name="ui-pack" rev="13.1.0">
           <artifact name="frontpanel" type="jar"/>
    </dependency>
    

BSP

  • Add a cast when using MICROUI_Image* object: (MICROUI_ImageFormat)image->format .
  • Remove parameter MICROUI_GraphicsContext* when calling LLUI_DISPLAY_setDrawingLimits().
  • Ensure to call LLUI_DISPLAY_setDrawingLimits() before calling LLUI_DISPLAY_setDrawingStatus() or LLUI_DISPLAY_notifyAsynchronousDrawingEnd().
  • (optional) Add an implementation of LLUI_DISPLAY_IMPL_image_heap_xxx to control the images heap allocation; by default the internal Graphics Engine’s allocator is used. Another implementation is also available on the MicroUI C module.

From 12.x to 13.x

VEE Port Configuration Project

  • Update Architecture version: 7.16.0 or higher.

  • Add the following module in the module description file:

    <dependency org="com.microej.clibrary.llimpl" name="microui" rev="1.0.3"/>
    
  • If not already set, set the ea:property bsp.project.microej.dir in the module ivy file to configure the BSP output folder where is extracted the module.

Hardware Accelerator

  • Open -configuration project > display > display.properties

  • Remove optional property hardwareAccelerator. If old value was dma2d, add the following module in the module description file:

    <dependency org="com.microej.clibrary.llimpl" name="display-dma2d" rev="1.0.6"/>``
    
  • For the hardware accelerator DMA2D, please consult STM32F7Discovery board updates. Add the file lldisplay_dma2d.c, the global defines DRAWING_DMA2D_BPP=16 (or another value) and STM32F4XX or STM32F7XX

  • For the others hardware accelerators, please contact MicroEJ support.

Front Panel

This chapter resumes the changes to perform. The available changes in Front Panel API are described in next chapter.

  • If not already done, follow the Front Panel version 6 migration procedure detailled in chapter From 11.x to 12.x.
  • Update the fp project dependency: <dependency org="ej.tool.frontpanel" name="widget" rev="2.0.0"/>
  • ej.fp.event.MicroUIButtons has been renamed in ej.microui.event.EventButton, and all others ej.fp.event.MicroUIxxx in ej.microui.event.Eventxxx
  • Display abstract class AbstractDisplayExtension (class to extend widget Display when targetting a custom display) has been converted on the interface DisplayExtension. Some methods names have changed and now take in parameter the display widget.

Front Panel API

  • ej.drawing.DWDrawing

    • [Added] Equivalent of dw_drawing.h and dw_drawing_soft.h**: allows to implement some drawing algorithms and/or to use the ones provided by the Graphics Engine. The drawing methods are related to the library ej.api.drawing.
    • [Added] Interface DWDrawingDefault: default implementation of DWDrawing which calls the Graphics Engine algorithms.
  • ej.drawing.LLDWPainter

    • [Added] Equivalent of module com.microej.clibrary.llimpl#microui (LLDW_PAINTER_impl.c): implements all ej.api.drawing natives and redirect them to the interface DWDrawing.
    • [Added] setDrawer(DWDrawing): allows to configure the implementation of DWDrawing the LLDWPainter has to use. When no drawer is configured, LLDWPainter redirects all drawings to the internal Graphics Engine software algorithms.
  • ej.fp.event.MicroUIButtons

    • [Removed] Replaced by EventButton.
  • ej.fp.event.MicroUICommand

    • [Removed] Replaced by EventCommand.
  • ej.fp.event.MicroUIEventGenerator

    • [Removed] Replaced by LLUIInput.
  • ej.fp.event.MicroUIGeneric

    • [Removed] Replaced by EventGeneric.
  • ej.fp.event.MicroUIPointer

    • [Removed] Replaced by EventPointer.
  • ej.fp.event.MicroUIStates

    • [Removed] Replaced by EventState.
  • ej.fp.event.MicroUITouch

    • [Removed] Replaced by EventTouch.
  • ej.fp.widget.MicroUIDisplay

    • [Removed] Replaced by LLUIDisplayImpl. Abstract widget display class has been replaced by an interface that a widget (which should simulate a display) has to implement to be compatible with the Graphics Engine.
    • [Removed] AbstractDisplayExtension, all available implementations and setExtensionClass(String): the standard display formats (RGB565, etc.) are internally managed by the Graphics Engine. For generic formats, some APIs are available in LLUIDisplayImpl.
    • [Removed] finalizeConfiguration(), getDisplayHeight(), getDisplayWidth(), getDrawingBuffer(), setDisplayWidth(int), setDisplayHeight(int), start(): LLUIDisplayImpl is not an abstract widget anymore, these notions are widget dependent.
    • [Removed] flush().
    • [Removed] getNbBitsPerPixel().
    • [Removed] switchBacklight(boolean).
  • ej.fp.widget.MicroUILED

    • [Removed] Replaced by LLUILedImpl. Abstract widget LED class has been replaced by an interface that a widget (which should simulate a LED) has to implement to be compatible with the Graphics Engine.
    • [Removed] finalizeConfiguration(): LLUILedImpl is not an abstract widget anymore, this notion is widget dependent.
    • [Removed] getID(): MicroUI uses the widget (which implements the interface LLUILedImpl)’s label to retrieve the LED. The LED labels must be integers from 0 to n-1.
  • ej.microui.display.LLUIDisplay

    • [Added] Equivalent of LLUI_DISPLAY.h: several functions to interact with the Graphics Engine.
    • [Added] blend(int,int,int): blends two ARGB colors and opacity level.
    • [Added] convertARGBColorToColorToDraw(int): crops given color to display capacities.
    • [Added] getDisplayPixelDepth(): replaces MicroUIDisplay.getNbBitsPerPixel().
    • [Added] getDWDrawerSoftware(): gives the unique instance of Graphics Engine’s internal software drawer (instance of DWDrawing).
    • [Added] getUIDrawerSoftware(): gives the unique instance of Graphics Engine’s internal software drawer (instance of UIDrawing).
    • [Added] mapMicroUIGraphicsContext(byte[]) and newMicroUIGraphicsContext(byte[]): maps the graphics context byte array (GraphicsContext.getSNIContext()) on an object which represents the graphics context in front panel.
    • [Added] mapMicroUIImage(byte[]) and newMicroUIImage(byte[]): maps the image byte array (Image.getSNIContext()) on an object which represents the image in front panel.
    • [Added] requestFlush(boolean): requests a call to LLUIDisplayImpl.flush().
    • [Added] requestRender(void): requests a call to Displayable.render().
  • ej.microui.display.LLUIDisplayImpl

    • [Added] Replaces MicroUIDisplay, equivalent of LLUI_DISPLAY_impl.h.
    • [Added] initialize(): asks to initialize the widget and to return a front panel image where the Graphics Engine will perform the MicroUI drawings.
    • [Changed] flush(MicroUIGraphicsContext, Image, int, int, int, int): asks to flush the graphics context drawn by MicroUI in image returned by initialize().
  • ej.microui.display.LLUIPainter

    • [Added] Equivalent of module com.microej.clibrary.llimpl#microui (LLUI_PAINTER_impl.c): implements all ej.api.microui natives and redirect them to the interface UIDrawing.
    • [Added] MicroUIGraphicsContext: representation of a MicroUI GraphicsContext in front panel. This interface (implemented by the Graphics Engine) provides several function to get information on graphics context, clip, etc.
    • [Added] MicroUIGraphicsContext#requestDrawing(): allows to take the hand on the drawing buffer.
    • [Added] MicroUIImage: representation of a MicroUI Image in front panel. This interface (implemented by the Graphics Engine) provides several function to get information on image.
    • [Added] setDrawer(UIDrawing): allows to configure the implementation of UIDrawing the LLUIPainter has to use. When no drawer is configured, LLUIPainter redirects all drawings to the internal Graphics Engine software algorithms.
  • ej.microui.display.UIDrawing

    • [Added] Equivalent of ui_drawing.h and ui_drawing_soft.h**: allows to implement some drawing algorithms and/or to use the ones provided by the Graphics Engine. The drawing methods are related to the library ej.api.microui.
    • [Added] Interface UIDrawingDefault: default implementation of UIDrawing which calls the Graphics Engine algorithms.
  • ej.microui.event.EventButton

    • [Added] Replaces MicroUIButton.
  • ej.microui.event.EventCommand

    • [Added] Replaces MicroUICommand.
  • ej.microui.event.EventGeneric

    • [Added] Replaces MicroUIGeneric.
  • ej.microui.event.EventPointer

    • [Added] Replaces MicroUIPointer.
  • ej.microui.event.EventQueue

    • [Added] Dedicated events queue used by MicroUI.
  • ej.microui.event.EventState

    • [Added] Replaces MicroUIState.
  • ej.microui.event.EventTouch

    • [Added] Replaces MicroUITouch.
  • ej.microui.event.LLUIInput

    • [Added] Replaces MicroUIEventGenerator.
  • ej.microui.led.LLUILedImpl

    • [Added] Replaces MicroUILED.

Image Generator

This chapter resumes the changes to perform. The available changes in Image Generator API are described in next chapter.

This chapter only concerns VEE Port with a custom display. In this case a dedicated image generator extension project is available. This project must be updated.

  • Reorganize project to use source folders src/main/java and src/main/resources

  • Add new module.ivy file:

    <ivy-module version="2.0" xmlns:ea="http://www.easyant.org" xmlns:m="http://www.easyant.org/ivy/maven" xmlns:ej="https://developer.microej.com" ej:version="2.0.0">
    
       <info organisation="com.is2t.microui" module="imageGenerator-xxx" status="integration" revision="1.0.0">
          <ea:build organisation="com.is2t.easyant.buildtypes" module="build-std-javalib" revision="2.+"/>
       </info>
    
       <configurations defaultconfmapping="default->default;provided->provided">
          <conf name="default" visibility="public" description="Runtime dependencies to other artifacts"/>
          <conf name="provided" visibility="public" description="Compile-time dependencies to APIs provided by the VEE Port"/>
          <conf name="documentation" visibility="public" description="Documentation related to the artifact (javadoc, PDF)"/>
          <conf name="source" visibility="public" description="Source code"/>
          <conf name="dist" visibility="public" description="Contains extra files like README.md, licenses"/>
          <conf name="test" visibility="private" description="Dependencies for test execution. It is not required for normal use of the application, and is only available for the test compilation and execution phases."/>
       </configurations>
    
       <publications/>
    
       <dependencies>
          <dependency org="com.microej.pack.ui" name="ui-pack" rev="[UI Pack version]">
             <artifact name="imageGenerator" type="jar"/>
          </dependency>
       </dependencies>
    </ivy-module>
    

The artifact name prefix must be imageGenerator-.

  • Update project classpath: remove classpath variable IMAGE-GENERATOR-x.x and add ivy file dependency

  • Instead of implementing GenericDisplayExtension, the extension class must extend BufferedImageLoader class; check class methods to override.

  • Add the file src/main/resources/META-INF/services/com.microej.tool.ui.generator.MicroUIRawImageGeneratorExtension; this file has to specify the class which extends the BufferedImageLoader class, for instance:

    com.microej.generator.MyImageGeneratoExtension
    
  • Build the easyant project

  • Copy the jar in the VEE Port -configuration project > dropins folder

  • Rebuild the VEE Port after any changes

Image Generator API

  • com.is2t.microej.microui.image.CustomDisplayExtension

    • [Removed] Replaced by ImageConverter and MicroUIRawImageGeneratorExtension.
  • com.is2t.microej.microui.image.DisplayExtension

    • [Removed]
  • com.is2t.microej.microui.image.GenericDisplayExtension

    • [Removed] Replaced by ImageConverter and MicroUIRawImageGeneratorExtension.
  • com.microej.tool.ui.generator.BufferedImageLoader

    • [Added] Pixelated image loader (PNG, JPEG etc.).
  • com.microej.tool.ui.generator.Image

    • [Added] Representation of an image listed in a images.list file.
  • com.microej.tool.ui.generator.ImageConverter

    • [Added] Generic converter to convert an image in an output stream.
  • com.microej.tool.ui.generator.MicroUIRawImageGeneratorExtension

    • [Added] Graphics Engine RAW image converter: used when the image (listed in images.list) targets a RAW format known by the Graphics Engine.

Font

  • Open optional font(s) in -configuration project > microui/**/*.ejf
  • Remove all Dynamic styles (select None or Built-in for bold, italic and underline); the number of generated fonts must be 1 (the feature to render Dynamic styles at runtime have been removed)
  • Save the file(s)

BSP

This chapter resumes the changes to perform. The available changes in LLAPI are described in next chapter.

  • Delete all VEE Port header files (folder should be set in -configuration project > bsp > bsp.properties > property output.dir)

  • If not possible to delete this folder, delete all UI headers files:

    • intern/LLDISPLAY*
    • intern/LLINPUT*
    • intern/LLLEDS*
    • LLDISPLAY*
    • LLINPUT*
    • LLLEDS*
  • Replace all #include "LLDISPLAY.h", #include "LLDISPLAY_EXTRA.h" and #include "LLDISPLAY_UTILS.h" by #include "LLUI_DISPLAY.h"

  • Replace all #include "LLDISPLAY_impl.h", #include "LLDISPLAY_EXTRA_drawing.h" and #include "LLDISPLAY_EXTRA_impl.h" by #include "LLUI_DISPLAY_impl.h"

  • Replace all LLDISPLAY_EXTRA_IMAGE_xxx by MICROUI_IMAGE_FORMAT_xxx

  • All LLDISPLAY_IMPL_xxx functions have been renamed in LLUI_DISPLAY_IMPL_xxx

  • LLUI_DISPLAY_IMPL_initialize has now the paremeter LLUI_DISPLAY_SInitData* init_data; fill it as explained in C doc.

  • Implement new functions void LLUI_DISPLAY_IMPL_binarySemaphoreTake(void* sem) and void LLUI_DISPLAY_IMPL_binarySemaphoreGive(void* sem, bool under_isr)

  • Signature of LLUI_DISPLAY_IMPL_flush has changed

  • All LLDISPLAY_EXTRA_IMPL_xxx functions have been renamed in LLUI_DISPLAY_IMPL_xxx

  • Fix some functions signatures (LLUI_DISPLAY_IMPL_hasBacklight(), etc)

  • Remove the functions LLDISPLAY_IMPL_getGraphicsBufferAddress, LLDISPLAY_IMPL_getHeight, LLDISPLAY_IMPL_getWidth, LLDISPLAY_IMPL_synchronize, LLDISPLAY_EXTRA_IMPL_waitPreviousDrawing, LLDISPLAY_EXTRA_IMPL_error

  • Add the end of asynchronous flush copy, call LLUI_DISPLAY_flushDone

  • Add the files LLUI_PAINTER_impl.c and LLDW_PAINTER_impl.c in your C configuration project

  • Replace the prefix LLINPUT in all header files, functions and defines by the new prefix LLUI_INPUT

  • Replace the prefix LLLEDS in all header files, functions and defines by the new prefix LLUI_LED

  • Replace the prefix LLDISPLAY in all header files, functions and defines by the new prefix LLUI_DISPLAY

LLAPI

  • dw_drawing_soft.h

    • [Added] List of internal Graphics Engine software algorithms to perform some drawings (related to library ej.api.drawing).
  • dw_drawing.h

    • [Added] List of ej.api.drawing library’s drawing functions to optionally implement in VEE Port.
  • LLDISPLAY.h and intern/LLDISPLAY.h

    • [Removed]
  • LLDISPLAY_DECODER.h and intern/LLDISPLAY_DECODER.h

    • [Removed]
  • LLDISPLAY_EXTRA.h and intern/LLDISPLAY_EXTRA.h merged in LLUI_PAINTER_impl.h and LLDW_PAINTER_impl.h

    • [Changed] LLDISPLAY_SImage: replaced by MICROUI_Image.
    • [Removed] LLDISPLAY_SRectangle, LLDISPLAY_SDecoderImageData, LLDISPLAY_SDrawImage, LLDISPLAY_SFlipImage, LLDISPLAY_SScaleImage and LLDISPLAY_SRotateImage
  • LLDISPLAY_EXTRA_drawing.h

    • [Removed]
  • LLDISPLAY_EXTRA_impl.h and intern/LLDISPLAY_EXTRA_impl.h merged in LLUI_DISPLAY_impl.h, ui_drawing.h and dw_drawing.h

    • [Changed] LLDISPLAY_EXTRA_IMPL_setContrast(int32_t): replaced by LLUI_DISPLAY_IMPL_setContrast(uint32_t) (_optional_).
    • [Changed] LLDISPLAY_EXTRA_IMPL_getContrast(void): replaced by LLUI_DISPLAY_IMPL_getContrast(void) (_optional_).
    • [Changed] LLDISPLAY_EXTRA_IMPL_hasBackLight(void): replaced by LLUI_DISPLAY_IMPL_hasBacklight(void) (_optional_).
    • [Changed] LLDISPLAY_EXTRA_IMPL_setBacklight(int32_t): replaced by LLUI_DISPLAY_IMPL_setBacklight(uint32_t) (_optional_).
    • [Changed] LLDISPLAY_EXTRA_IMPL_getBacklight(void): replaced by LLUI_DISPLAY_IMPL_getBacklight(void) (_optional_).
    • [Changed] LLDISPLAY_EXTRA_IMPL_isColor(void): replaced by LLUI_DISPLAY_IMPL_isColor(void) (_optional_).
    • [Changed] LLDISPLAY_EXTRA_IMPL_getNumberOfColors(void): replaced by LLUI_DISPLAY_IMPL_getNumberOfColors(void) (_optional_).
    • [Changed] LLDISPLAY_EXTRA_IMPL_isDoubleBuffered(void): replaced by LLUI_DISPLAY_IMPL_isDoubleBuffered(void) (_optional_).
    • [Changed] LLDISPLAY_EXTRA_IMPL_getBacklight(void): replaced by LLUI_DISPLAY_IMPL_getBacklight(void) (_optional_).
    • [Changed] LLDISPLAY_EXTRA_IMPL_fillRect(void*,int32_t,void*,int32_t): replaced by UI_DRAWING_fillRectangle(MICROUI_GraphicsContext*,jint,jint,jint,jint) (_optional_).
    • [Changed] LLDISPLAY_EXTRA_IMPL_drawImage(void*,int32_t,void*,int32_t,void*): replaced by UI_DRAWING_drawImage(MICROUI_GraphicsContext*,MICROUI_Image*,jint,jint,jint,jint,jint,jint,jint) (_optional_).
    • [Changed] LLDISPLAY_EXTRA_IMPL_flipImage(void*,int32_t,void*,int32_t,void*): replaced by DW_DRAWING_drawFlippedImage(MICROUI_GraphicsContext*,MICROUI_Image*,jint,jint,jint,jint,jint,jint,DRAWING_Flip,jint) (_optional_).
    • [Changed] LLDISPLAY_EXTRA_IMPL_scaleImage(void*,int32_t,void*,int32_t,void*): replaced by DW_DRAWING_drawScaledImageNearestNeighbor(MICROUI_GraphicsContext*,MICROUI_Image*,jint,jint,jfloat,jfloat,jint) and DW_DRAWING_drawScaledImageBilinear(MICROUI_GraphicsContext*,MICROUI_Image*,jint,jint,jfloat,jfloat,jint) (_optional_).
    • [Changed] LLDISPLAY_EXTRA_IMPL_rotateImage(void*,int32_t,void*,int32_t,void*): replaced by DW_DRAWING_drawRotatedImageNearestNeighbor(MICROUI_GraphicsContext*,MICROUI_Image*,jint,jint,jint,jint,jfloat,jint) and DW_DRAWING_drawRotatedImageBilinear(MICROUI_GraphicsContext*,MICROUI_Image*,jint,jint,jint,jint,jfloat,jint) (_optional_).
    • [Changed] LLDISPLAY_EXTRA_IMPL_convertARGBColorToDisplayColor(int32_t) and LLDISPLAY_EXTRA_IMPL_convertDisplayColorToARGBColor(int32_t): replaced respectively by LLUI_DISPLAY_IMPL_convertARGBColorToDisplayColor(uint32_t) and LLUI_DISPLAY_IMPL_convertDisplayColorToARGBColor(uint32_t) (_optional_).
    • [Changed] LLDISPLAY_EXTRA_IMPL_prepareBlendingOfIndexedColors(void*,void*): replaced by LLUI_DISPLAY_IMPL_prepareBlendingOfIndexedColors(uint32_t*,uint32_t*) (_optional_).
    • [Changed] LLDISPLAY_EXTRA_IMPL_decodeImage(int32_t,int32_t,int32_t,void*): replaced by LLUI_DISPLAY_IMPL_decodeImage(uint8_t*,uint32_t,MICROUI_ImageFormat,MICROUI_Image*,bool*) (_optional_).
    • [Removed] LLDISPLAY_EXTRA_IMPL_getGraphicsBufferMemoryWidth(void) and LLDISPLAY_EXTRA_IMPL_getGraphicsBufferMemoryHeight(void): replaced by elements in structure LLUI_DISPLAY_SInitData (_optional_).
    • [Removed] LLDISPLAY_EXTRA_IMPL_backlightOn(void) and LLDISPLAY_EXTRA_IMPL_backlightOff(void).
    • [Removed] LLDISPLAY_EXTRA_IMPL_enterDrawingMode(void) and LLDISPLAY_EXTRA_IMPL_exitDrawingMode(void).
    • [Removed] LLDISPLAY_EXTRA_IMPL_error(int32_t).
    • [Removed] LLDISPLAY_EXTRA_IMPL_waitPreviousDrawing(void): implementation has to call LLUI_DISPLAY_notifyAsynchronousDrawingEnd(bool) instead.
  • LLDISPLAY_impl.h and intern/LLDISPLAY_impl.h merged in LLUI_DISPLAY_impl.h

    • [Changed] LLDISPLAY_IMPL_initialize(void): replaced by LLUI_DISPLAY_IMPL_initialize(LLUI_DISPLAY_SInitData*) (_mandatory_).
    • [Changed] LLDISPLAY_IMPL_flush(int32_t,int32_t,int32_t,int32_t,int32_t): replaced by LLUI_DISPLAY_IMPL_flush(MICROUI_GraphicsContext*,uint8_t*, uint32_t,uint32_t,uint32_t,uint32_t) (_mandatory_).
    • [Removed] LLDISPLAY_IMPL_getWidth(void), LLDISPLAY_IMPL_getHeight(void) and LLDISPLAY_IMPL_getGraphicsBufferAddress(void): replaced by elements in structure LLUI_DISPLAY_SInitData.
    • [Removed] LLDISPLAY_IMPL_synchronize(void): implementation has to call LLUI_DISPLAY_flushDone(bool) instead.
  • LLDISPLAY_UTILS.h and intern/LLDISPLAY_UTILS.h merged in LLUI_DISPLAY.h

    • [Changed] LLDISPLAY_UTILS_getBufferAddress(int32_t): replaced by LLUI_DISPLAY_getBufferAddress(MICROUI_Image*).
    • [Changed] LLDISPLAY_UTILS_setDrawingLimits(int32_t,int32_t,int32_t,int32_t,int32_t): replaced by LLUI_DISPLAY_setDrawingLimits(MICROUI_GraphicsContext*,jint,jint,jint,jint).
    • [Changed] LLDISPLAY_UTILS_blend(int32_t,int32_t,int32_t): replaced by LLUI_DISPLAY_blend(uint32_t,uint32_t,uint32_t).
    • [Changed] LLDISPLAY_UTILS_allocateDecoderImage(void*): replaced by LLUI_DISPLAY_allocateImageBuffer(MICROUI_Image*,uint8_t).
    • [Changed] LLDISPLAY_UTILS_flushDone(void): replaced by LLUI_DISPLAY_flushDone(bool).
    • [Changed] LLDISPLAY_UTILS_drawingDone(void): replaced by LLUI_DISPLAY_notifyAsynchronousDrawingEnd(bool).
    • [Removed] LLDISPLAY_UTILS_getWidth(int32_t), LLDISPLAY_UTILS_getHeight(int32_t) and LLDISPLAY_UTILS_getFormat(int32_t): use MICROUI_Image elements instead.
    • [Removed] LLDISPLAY_UTILS_enterDrawingMode(void) and LLDISPLAY_UTILS_exitDrawingMode(void).
    • [Removed] LLDISPLAY_UTILS_setClip(int32_t,int32_t,int32_t,int32_t,int32_t).
    • [Removed] LLDISPLAY_UTILS_getClipX1/X2/Y1/Y2(int32_t): use MICROUI_GraphicsContext elements instead.
    • [Removed] LLDISPLAY_UTILS_drawPixel(int32_t,int32_t,int32_t) and LLDISPLAY_UTILS_readPixel(int32_t,int32_t,int32_t).
  • LLDW_PAINTER_impl.h

  • LLLEDS_impl.h and intern/LLLEDS_impl.h merged in LLUI_LED_impl.h

    • [Changed] LLLEDS_MIN_INTENSITY and LLLEDS_MAX_INTENSITY: replaced respectively by LLUI_LED_MIN_INTENSITY and LLUI_LED_MAX_INTENSITY.
    • [Changed] LLLEDS_IMPL_initialize(void): replaced by LLUI_LED_IMPL_initialize(void).
    • [Changed] LLLEDS_IMPL_getIntensity(int32_t): replaced by LLUI_LED_IMPL_getIntensity(jint).
    • [Changed] LLLEDS_IMPL_setIntensity(int32_t,int32_t): replaced by LLUI_LED_IMPL_setIntensity(jint,jint).
  • LLINPUT.h and intern/LLINPUT.h merged in LLUI_INPUT.h

    • [Changed] LLINPUT_sendEvent(int32_t,int32_t): replaced by LLUI_INPUT_sendEvent(jint,jint).
    • [Changed] LLINPUT_sendEvents(int32_t,int32_t*,int32_t): replaced by LLUI_INPUT_sendEvents(jint,jint*,jint).
    • [Changed] LLINPUT_sendCommandEvent(int32_t,int32_t): replaced by LLUI_INPUT_sendCommandEvent(jint,jint).
    • [Changed] LLINPUT_sendButtonPressedEvent(int32_t,int32_t): replaced by LLUI_INPUT_sendButtonPressedEvent(jint,jint).
    • [Changed] LLINPUT_sendButtonReleasedEvent(int32_t,int32_t): replaced by LLUI_INPUT_sendButtonReleasedEvent()jint,jint.
    • [Changed] LLINPUT_sendButtonRepeatedEvent(int32_t,int32_t): replaced by LLUI_INPUT_sendButtonRepeatedEvent(jint,jint).
    • [Changed] LLINPUT_sendButtonLongEvent(int32_t,int32_t): replaced by LLUI_INPUT_sendButtonLongEvent(jint,jint).
    • [Changed] LLINPUT_sendPointerPressedEvent(int32_t,int32_t,int32_t,int32_t,int32_t): replaced by LLUI_INPUT_sendPointerPressedEvent(jint,jint,jint,jint,LLUI_INPUT_Pointer).
    • [Changed] LLINPUT_sendPointerReleasedEvent(int32_t,int32_t): replaced by LLUI_INPUT_sendPointerReleasedEvent(jint,jint).
    • [Changed] LLINPUT_sendPointerMovedEvent(int32_t,int32_t,int32_t,int32_t): replaced by LLUI_INPUT_sendPointerMovedEvent(jint,jint,jint,LLUI_INPUT_Pointer).
    • [Changed] LLINPUT_sendTouchPressedEvent(int32_t,int32_t,int32_t): replaced by LLUI_INPUT_sendTouchPressedEvent(jint,jint,jint).
    • [Changed] LLINPUT_sendTouchReleasedEvent(int32_t): replaced by LLUI_INPUT_sendTouchReleasedEvent(jint).
    • [Changed] LLINPUT_sendTouchMovedEvent(int32_t,int32_t,int32_t): replaced by LLUI_INPUT_sendTouchMovedEvent(jint,jint,jint).
    • [Changed] LLINPUT_sendStateEvent(int32_t,int32_t,int32_t): replaced by LLUI_INPUT_sendStateEvent(jint,jint,jint).
    • [Changed] LLINPUT_getMaxEventsBufferUsage(void): replaced by LLUI_INPUT_getMaxEventsBufferUsage(void).
  • LLINPUT_impl.h and intern/LLINPUT_impl.h merged in LLUI_INPUT_impl.h

    • [Changed] LLINPUT_IMPL_initialize(void): replaced by LLUI_INPUT_IMPL_initialize(void) (_mandatory_).
    • [Changed] LLINPUT_IMPL_getInitialStateValue(int32_t,int32_t): replaced by LLUI_INPUT_IMPL_getInitialStateValue(jint,jint) (_mandatory_).
    • [Changed] LLINPUT_IMPL_enterCriticalSection(void): replaced by LLUI_INPUT_IMPL_enterCriticalSection(void) (_mandatory_).
    • [Changed] LLINPUT_IMPL_leaveCriticalSection(void): replaced by LLUI_INPUT_IMPL_leaveCriticalSection(void) (_mandatory_).
  • LLUI_DISPLAY.h

    • [Added] Renaming of LLDISPLAY_UTILS.h.
    • [Added] Several functions to interact with the Graphics Engine and to get information on images, graphics context, clip, etc.
    • [Added] LLUI_DISPLAY_requestFlush(bool): requests a call to LLUI_DISPLAY_IMPL_flush().
    • [Added] LLUI_DISPLAY_requestRender(void): requests a call to Displayable.render().
    • [Added] LLUI_DISPLAY_freeImageBuffer(MICROUI_Image*): frees an image previously allocated by LLUI_DISPLAY_allocateImageBuffer(MICROUI_Image*,uint8_t).
    • [Added] LLUI_DISPLAY_requestDrawing(MICROUI_GraphicsContext*,SNI_callback): allows to take the hand on the shared drawing buffer.
    • [Added] LLUI_DISPLAY_setDrawingStatus(DRAWING_Status): specifies the drawing status to the Graphics Engine.
  • LLUI_DISPLAY_impl.h

    • [Added] Merge of LLDISPLAY_EXTRA_impl.h and LLDISPLAY_impl.h.
    • [Added] Structure LLUI_DISPLAY_SInitData: implementation has to fill it in LLUI_DISPLAY_IMPL_initialize(LLUI_DISPLAY_SInitData*).
    • [Added] LLUI_DISPLAY_IMPL_binarySemaphoreTake(void*) and LLUI_DISPLAY_IMPL_binarySemaphoreGive(void*,bool): implementation has to manage a binary semaphore (_mandatory_).
    • [Added] LLUI_DISPLAY_IMPL_getNewImageStrideInBytes(MICROUI_ImageFormat,uint32_t,uint32_t,uint32_t): allows to set an image stride different than image side (_optional_).
  • LLUI_PAINTER_impl.h

    • [Added] List of ej.api.microui library’s native functions implemented in module com.microej.clibrary.llimpl#microui.
    • [Added] MICROUI_ImageFormat: MicroUI Image pixel format.
    • [Added] MICROUI_Image: MicroUI Image representation.
    • [Added] MICROUI_GraphicsContext: MicroUI GraphicsContext representation.
  • ui_drawing_soft.h

    • [Added] List of internal Graphics Engine software algorithms to perform some drawings (related to library ej.api.microui).
  • ui_drawing.h

    • [Added] List of ej.api.microui library’s drawing functions to optionally implement in VEE Port.

Custom Native Drawing Functions

  • In custom UI native methods, replace LLDISPLAY_UTILS_getBufferAddress(xxx); by (uint32_t)LLUI_DISPLAY_getBufferAddress(xxx) (new function returns uint8_t*), where uint32_t xxx is replaced by MICROUI_Image* xxx or by MICROUI_GraphicsContext* xxx.
  • Replace LLDISPLAY_UTILS_getFormat(xxx) by xxx->format, where uint32_t xxx is replaced by MICROUI_Image* xxx or by MICROUI_GraphicsContext* xxx.
  • Replace call to LLDISPLAY_allocateDecoderImage by a call to LLUI_DISPLAY_allocateImageBuffer
  • Optional: implement drawing functions listed in ui_drawing.h following the available examples in LLUI_PAINTER_impl.c and LLDW_PAINTER_impl.c files comments.

Application

From 11.x to 12.x

VEE Port Configuration Project

  • Update Architecture version: 7.11.0 or higher.

Front Panel

  • Create a new Front Panel Project (next sections explain how to update each widget):

    1. Verify that FrontPanelDesigner is at least version 6: Help > About > Installations Details > Plug-ins.
    2. Create a new front panel project: File > New > Project… > MicroEJ > MicroEJ Front Panel Project, choose a name and press Finish.
    3. Move files from [old project]/src to [new project]/src/main/java.
    4. Move files from [old project]/resources to [new project]/src/main/resources.
    5. Move files from [old project]/definitions to [new project]/src/main/resources, except your xxx.fp file.
    6. If existing delete file [new project]/src/main/java/microui.properties.
    7. Delete file [new project]/src/main/resources/.fp.xsd.
    8. Delete file [new project]/src/main/resources/.fp1.0.xsd.
    9. Delete file [new project]/src/main/resources/widgets.desc.
    10. Open [old project]/definitions/xxx.fp.
    11. Copy device attributes (name and skin) from [old project]/definitions/xxx.fp to [new project]/src/main/resources/xxx.fp.
    12. Copy content of body (not body tag itself) from [old project]/definitions/xxx.fp under device group of [new project]/src/main/resources/xxx.fp.
  • Widget “led2states”:

    1. Rename led2states by ej.fp.widget.LED.
    2. Rename the attribute id by label.
  • Widget “pixelatedDisplay”:

    1. Rename pixelatedDisplay by ej.fp.widget.Display.
    2. Remove the attribute id.
    3. (if set) Remove the attribute initialColor if its value is 0
    4. (if set) Rename the attribute mask by filter; this image must have the same size in pixels than display itself (width * height).
    5. (if set) Rename the attribute realWidth by displayWidth.
    6. (if set) Rename the attribute realHeight by displayHeight.
    7. (if set) Rename the attribute transparencyLevel by alpha; change the value: newValue = 255 - oldValue.
    8. (if set) Remove the attribute residualFactor (not supported).
    9. (if set) If extensionClass is specified: follow next notes.
  • Widget “pixelatedDisplay”: ej.fp.widget.Display Extension Class:

    1. Open the class
    2. Extends ej.fp.widget.MicroUIDisplay.AbstractDisplayExtension instead of com.is2t.microej.frontpanel.display.DisplayExtension.
    3. Rename method convertDisplayColorToRGBColor to convertDisplayColorToARGBColor.
    4. Rename method convertRGBColorToDisplayColor to convertARGBColorToDisplayColor.
  • Widget “pointer”:

    1. Rename pointer by ej.fp.widget.Pointer.
    2. Remove the attribute id.
    3. (if set) Rename the attribute realWidth by areaWidth.
    4. (if set) Rename the attribute realHeight by areaHeight.
    5. Keep or remove the attribute listenerClass according next notes.
  • Widget “pointer”: ej.fp.widget.Pointer Listener Class:

    This extension class is useless if the implementation respects these rules:

    • (a) press method is sending a press MicroUI Pointer event.
    • (b) release method is sending a release MicroUI Pointer event.
    • (c ) move method is sending a move MicroUI Pointer event.
    • (d) The MicroUI Pointer event generator name is POINTER when ej.fp.widget.Pointer’s touch attribute is false (or not set).
    • (e) The MicroUI Pointer event generator name is TOUCH when ej.fp.widget.Pointer’s touch attribute is true.

    If only (d) or (e) is different:

    1. Open the listener class.
    2. Extends the class ej.fp.widget.Pointer.PointerListenerToPointerEvents instead of implementing the interface com.is2t.microej.frontpanel.input.listener.PointerListener.
    3. Implements the method getMicroUIGeneratorTag().

    In all other cases:

    1. Open the listener class.
    2. Implements the interface ej.fp.widget.Pointer.PointerListener instead of com.is2t.microej.frontpanel.input.listener.PointerListener.
  • Widget “push”:

    1. Rename push by ej.fp.widget.Button.
    2. Rename the attribute id by label.
    3. (if set) Review filter image: this image must have the same size in pixels than the button skin.
    4. (if set) Remove the attribute hotkey (not supported).
    5. Keep or remove the attribute listenerClass according next notes.
  • Widget “push”: ej.fp.widget.Button Listener Class:

    This extension class is useless if the implementation respects these rules:

    • (a) press method is sending a press MicroUI Buttons event with button label (equals to old button id) as button index.
    • (b) release method is sending a release MicroUI Buttons event with button label (equals to old button id) as button index.
    • (c ) The MicroUI Buttons event generator name is BUTTONS.

    If only (c ) is different:

    1. Open the listener class.
    2. Extends the class ej.fp.widget.Button.ButtonListenerToButtonEvents instead of implementing the interface com.is2t.microej.frontpanel.input.listener.ButtonListener.
    3. Overrides the method getMicroUIGeneratorTag().

    In all other cases:

    1. Open the listener class.
    2. Implements the interface ej.fp.widget.Button.ButtonListener instead of com.is2t.microej.frontpanel.input.listener.ButtonListener.
  • Widget “repeatPush”:

    1. Rename repeatPush by ej.fp.widget.RepeatButton.
    2. (if set) Remove the attribute sendPressRelease (not supported).
    3. Same rules than widget push.
  • Widget “longPush”:

    1. Rename longPush by ej.fp.widget.LongButton.
    2. Same rules than widget push.
  • Widget “joystick”:

    1. Rename joystick by ej.fp.widget.Joystick.
    2. Remove the attribute id.
    3. (if set) Rename the attribute mask by filter; this image must have the same size in pixels than joystick skin.
    4. (if set) Remove the attribute hotkeys (not supported).
    5. Keep or remove the attribute listenerClass according next notes.
  • Widget “joystick”: ej.fp.widget.Joystick Listener Class:

    This extension class is useless if the implementation respects these rules:

    • (a) press methods are sending some MicroUI Command events UP, DOWN, LEFT, RIGHT and SELECT.
    • (b) repeat methods are sending same MicroUI Command events UP, DOWN, LEFT, RIGHT and SELECT.
    • (c ) release methods are sending nothing.
    • (d) The MicroUI Command event generator name is JOYSTICK.

    If only (d) is different:

    1. Open the listener class
    2. Extends the class ej.fp.widget.Joystick.JoystickListenerToCommandEvents instead of implementing the interface com.is2t.microej.frontpanel.input.listener.JoystickListener.
    3. Overrides the method getMicroUIGeneratorTag().

    In all other cases:

    1. Open the listener class.
    2. Implements the interface ej.fp.widget.Joystick.JoystickListener instead of com.is2t.microej.frontpanel.input.listener.JoystickListener.
  • Others Widgets:

    These widgets may have not been migrated. Check in ej.tool.frontpanel.widget library if some widgets are compatible or write your own widgets.

Application

From 10.x to 11.x

VEE Port Configuration Project

  • Update Architecture version: 7.0.0 or higher.

From 9.x to 10.x

VEE Port Configuration Project

  • Update Architecture version: 6.13.0 or higher.
  • Edit display/display.properties
  • Add property imagesHeap.size=xxx; this value fixes the images heap size when using the VEE Port in command line (to build a firmware)
  • In VEE Port linker file (standalone mode with MicroEJ linker): remove the image heap reserved section and put the section .bss.microui.display.imagesHeap instead.

BSP

  • In BSP linker file: remove the image heap reserved section and put the section .bss.microui.display.imagesHeap instead
  • Edit LLDISPLAY*.c: remove the functions LLDISPLAY_IMPL_getWorkingBufferStartAddress and LLDISPLAY_IMPL_getWorkingBufferEndAddress

Application

From 8.x to 9.x

Application

From 7.x to 8.x

VEE Port Configuration Project

  • Update Architecture version: 6.4.0 or higher.
  • Edit display/display.properties: remove property mode=xxx

BSP

  • Edit LLDISPLAY*.c

  • For LLDISPLAY SWITCH

    • Remove the function LLDISPLAY_SWITCH_IMPL_getDisplayBufferAddress()
    • Replace the function void LLDISPLAY_SWITCH_IMPL_getDisplayBufferAddress() by int32_t LLDISPLAY_IMPL_flush()
    • In this function, return the old LCD frame buffer address
    • Replace the function LLDISPLAY_COPY_IMPL_getBackBufferAddress() by LLDISPLAY_IMPL_getGraphicsBufferAddress()
  • For LLDISPLAY COPY

    • Replace the function void LLDISPLAY_COPY_IMPL_copyBuffer() by int32_t LLDISPLAY_IMPL_flush()
    • In this function, return the back buffer address (given in argument)
    • Replace the function LLDISPLAY_COPY_IMPL_getBackBufferAddress() by LLDISPLAY_IMPL_getGraphicsBufferAddress()
  • For LLDISPLAY DIRECT

    • Add the function void LLDISPLAY_IMPL_synchorize(void) (do nothing)
    • Add the function int32_t LLDISPLAY_IMPL_flush()
    • In this function, just return the back buffer address (given in argument)
  • Replace h file LLDISPLAY_SWITCH_IMPL.h, LLDISPLAY_COPY_IMPL.h or LLDISPLAY_DIRECT_IMPL.h by LLDISPLAY_IMPL.h

  • Replace all functions LLDISPLAY_SWITCH_IMPL_xxx, LLDISPLAY_COPY_IMPL_xxx and LLDISPLAY_DIRECT_IMPL_xxx by LLDISPLAY_IMPL_xxx

  • Remove the argument int32_t type from getWidth and getHeight

STM32 VEE Ports with DMA2D only

  • In VEE Port configuration project, edit display/display.properties

  • Add property hardwareAccelerator=dma2d

  • In BSP project, edit LLDISPLAY*.c

  • simplify following functions (see STM32F7Discovery board implementation)

    LLDISPLAY_EXTRA_IMPL_fillRect
    LLDISPLAY_EXTRA_IMPL_drawImage
    LLDISPLAY_EXTRA_IMPL_waitPreviousDrawing
    
  • Add the following function

    void LLDISPLAY_EXTRA_IMPL_error(int32_t errorCode)
    {
       printf("lldisplay error: %d\n", errorCode);
       while(1);
    }
    
  • Launch an application with images and fillrect

  • Compile, link and debug the BSP

  • Set some breakpoints on three functions

  • Ensure the functions are called