2D Image Processing Library for Cortex-M Processors
All Data Structures Functions Variables Typedefs Enumerations Enumerator Modules Pages
7 Helper Services

Data Structures

struct  arm_2d_pfb_t
 the header of a PFB block More...
 
struct  arm_2d_region_list_item_t
 the node of a region list More...
 
struct  arm_2d_helper_render_evt_t
 on low level render event More...
 
struct  arm_2d_helper_draw_evt_t
 on drawing event More...
 
struct  arm_2d_helper_pfb_dependency_t
 The PFB Helper Service Dependency. More...
 
struct  arm_2d_helper_pfb_cfg_t
 PFB Helper configuration. More...
 
struct  arm_2d_helper_pfb_t
 the PFB helper control block More...
 
struct  arm_2d_helper_pfb_cfg_t.FrameBuffer
 
struct  arm_2d_helper_pfb_t.__unnamed117__
 < user configuration More...
 
struct  arm_2d_helper_pfb_t.__unnamed117__.Adapter
 
struct  arm_2d_helper_pfb_t.__unnamed117__.Adapter.__unnamed121__
 
struct  arm_2d_helper_pfb_t.__unnamed117__.Adapter.FlushFIFO
 
struct  arm_2d_helper_pfb_t.Statistics
 

Macros

#define ARM_2D_HELPER_PFB_INIT(__CB_ADDR, __SCREEN_WIDTH, __SCREEN_HEIGHT, __PIXEL_TYPE, __WIDTH, __HEIGHT, __PFB_NUM, ...)
 a macro wrapper in uppercase to help initialising PFB service More...
 
#define ARM_2D_HELPER_PFB_UPDATE_ON_DRAW_HANDLER( __CB_ADDR, __HANDLER, ...)
 a macro wrapper to update the evtOnDrawring event handler More...
 
#define __IMPL_ARM_2D_REGION_LIST(__NAME, ...)
 
#define IMPL_ARM_2D_REGION_LIST(__NAME, ...)    __IMPL_ARM_2D_REGION_LIST(__NAME,##__VA_ARGS__)
 
#define END_IMPL_ARM_2D_REGION_LIST(...)    };
 
#define __ADD_REGION_TO_LIST(__NAME, ...)
 
#define ADD_REGION_TO_LIST(__NAME, ...)    __ADD_REGION_TO_LIST(__NAME, ##__VA_ARGS__)
 
#define __ADD_LAST_REGION_TO_LIST(__NAME, ...)
 
#define ADD_LAST_REGION_TO_LIST(__NAME, ...)    __ADD_LAST_REGION_TO_LIST(__NAME, ##__VA_ARGS__)
 
#define IMPL_PFB_ON_DRAW(__NAME)
 
#define IMPL_PFB_ON_LOW_LV_RENDERING(__NAME)
 
#define IMPL_PFB_ON_FRAME_SYNC_UP(__NAME)    bool __NAME(void *pTarget)
 
#define init_arm_2d_helper_pfb(__CB_ADDR, __SCREEN_WIDTH, __SCREEN_HEIGHT, __PIXEL_TYPE, __WIDTH, __HEIGHT, __PFB_NUM, ...)
 a macro wrapper in lowercase to help initialising PFB service More...
 
#define update_arm_2d_helper_pfb_on_draw_handler( __CB_ADDR, __HANDLER, ...)
 a macro wrapper to update the evtOnDrawring event handler More...
 
#define impl_arm_2d_region_list(__NAME, ...)    IMPL_ARM_2D_REGION_LIST(__NAME,##__VA_ARGS__)
 
#define add_region_to_list(__NAME, ...)    ADD_REGION_TO_LIST(__NAME, ##__VA_ARGS__)
 
#define add_last_region_to_list(__NAME, ...)    ADD_LAST_REGION_TO_LIST(__NAME, ##__VA_ARGS__)
 
#define end_impl_arm_2d_region_list(...)    END_IMPL_ARM_2D_REGION_LIST(__VA_ARGS__)
 
#define impl_pfb_on_draw(__NAME)   IMPL_PFB_ON_DRAW(__NAME)
 
#define impl_pfb_on_low_lv_rendering(__NAME)    IMPL_PFB_ON_LOW_LV_RENDERING(__NAME)
 
#define __declare_tile(__NAME)    extern const arm_2d_tile_t __NAME;
 
#define declare_tile(__NAME)   __declare_tile(__NAME)
 
#define __implement_tile(__NAME, __WIDTH, __HEIGHT, __TYPE, ...)
 
#define implement_tile(__NAME, __WIDTH, __HEIGHT, __TYPE, ...)    __implement_tile(__NAME, __WIDTH, __HEIGHT, __TYPE, ##__VA_ARGS__)
 
#define get_tile_buffer_pixel_count(__NAME)
 
#define get_tile_buffer_size(__NAME, __TYPE)    (get_2d_layer_buffer_pixel_count(__NAME) * sizeof(TYPE))
 
#define __arm_2d_align_centre2(__region, __size)
 
#define __arm_2d_align_centre3(__region, __width, __height)
 
#define arm_2d_align_centre(...)
 

Typedefs

typedef arm_fsm_rt_t arm_2d_helper_draw_handler_t(void *pTarget, const arm_2d_tile_t *ptTile, bool bIsNewFrame)
 the On-Drawing event handler for application layer More...
 
typedef void arm_2d_helper_render_handler_t(void *pTarget, const arm_2d_pfb_t *ptPFB, bool bIsNewFrame)
 the On Low Level Rendering event handler for the low level (LCD Driver) More...
 

Enumerations

enum  {
  ARM_2D_PFB_DEPEND_ON_LOW_LEVEL_RENDERING = _BV(0) ,
  ARM_2D_PFB_DEPEND_ON_DRAWING = _BV(1) ,
  ARM_2D_PFB_DEPEND_ON_LOW_LEVEL_SYNC_UP = _BV(2) ,
  ARM_2D_PFB_DEPEND_ON_FRAME_SYNC_UP = _BV(3)
}
 the enumeration for events More...
 

Functions

arm_2d_err_t arm_2d_helper_pfb_init (arm_2d_helper_pfb_t *ptThis, arm_2d_helper_pfb_cfg_t *ptCFG)
 initialize pfb helper service More...
 
arm_fsm_rt_t arm_2d_helper_pfb_task (arm_2d_helper_pfb_t *ptThis, arm_2d_region_list_item_t *ptDirtyRegions)
 the task function for pfb helper More...
 
arm_2d_err_t arm_2d_helper_pfb_update_dependency (arm_2d_helper_pfb_t *ptThis, uint_fast8_t chMask, const arm_2d_helper_pfb_dependency_t *ptDependency)
 update PFB dependency (event handlers) More...
 
void arm_2d_helper_pfb_report_rendering_complete (arm_2d_helper_pfb_t *ptThis, arm_2d_pfb_t *ptPFB)
 tell PFB helper that a low level LCD flushing work is complete More...
 

Description


Data Structure Documentation

◆ arm_2d_pfb_t

struct arm_2d_pfb_t

the header of a PFB block

Data Fields
struct arm_2d_pfb_t * ptNext next pfb block
arm_2d_tile_t tTile descriptor
bool bIsNewFrame a flag to indicate the starting of a frame

◆ arm_2d_region_list_item_t

struct arm_2d_region_list_item_t

the node of a region list

Data Fields
struct arm_2d_region_list_item_t * ptNext the next node
arm_2d_region_t tRegion the region

◆ arm_2d_helper_render_evt_t

struct arm_2d_helper_render_evt_t

on low level render event

Data Fields
arm_2d_helper_render_handler_t * fnHandler event handler function
void * pTarget user attached target

◆ arm_2d_helper_draw_evt_t

struct arm_2d_helper_draw_evt_t

on drawing event

Data Fields
arm_2d_helper_draw_handler_t * fnHandler event handler function
void * pTarget user attached target

◆ arm_2d_helper_pfb_dependency_t

struct arm_2d_helper_pfb_dependency_t

The PFB Helper Service Dependency.

Data Fields
arm_2d_helper_render_evt_t evtOnLowLevelRendering event handler for low level rendering
arm_2d_helper_draw_evt_t evtOnDrawing event handler for drawing GUI
arm_2d_evt_t evtOnLowLevelSyncUp low level rendering handler wants to sync-up (return arm_fsm_rt_wait_for_obj)

◆ arm_2d_helper_pfb_cfg_t

struct arm_2d_helper_pfb_cfg_t

PFB Helper configuration.

Data Fields
arm_2d_region_t tDisplayArea screen description
struct arm_2d_helper_pfb_cfg_t.FrameBuffer FrameBuffer frame buffer context
arm_2d_helper_pfb_dependency_t Dependency user registered dependency

◆ arm_2d_helper_pfb_t

struct arm_2d_helper_pfb_t

the PFB helper control block

Data Fields
struct arm_2d_helper_pfb_t.__unnamed117__ __unnamed__ < user configuration
struct arm_2d_helper_pfb_t.Statistics Statistics performance statistics

◆ arm_2d_helper_pfb_cfg_t.FrameBuffer

struct arm_2d_helper_pfb_cfg_t.FrameBuffer
Data Fields
arm_2d_pfb_t * ptPFBs current PFB block
arm_2d_size_t tFrameSize the size of the frame
uint32_t wBufferSize the buffer size
uint16_t hwPFBNum the number of PFB
uint16_t bDoNOTUpdateDefaultFrameBuffer: 1 A flag to disable automatically default-framebuffer-registration.
uint16_t bDisableDynamicFPBSize: 1 A flag to disable resize of the PFB block.
uint16_t bSwapRGB16: 1 A flag to enable swapping high and low bytes of an RGB16 pixel.

◆ arm_2d_helper_pfb_t.__unnamed117__

struct arm_2d_helper_pfb_t.__unnamed117__

< user configuration

Data Fields
arm_2d_helper_pfb_cfg_t tCFG
struct arm_2d_helper_pfb_t.__unnamed117__.Adapter Adapter

◆ arm_2d_helper_pfb_t.__unnamed117__.Adapter

struct arm_2d_helper_pfb_t.__unnamed117__.Adapter
Data Fields
arm_2d_region_t tDrawRegion
arm_2d_region_t tTargetRegion
arm_2d_region_list_item_t * ptDirtyRegion
arm_2d_tile_t tPFBTile
arm_2d_size_t tFrameSize
bool bFirstIteration
bool bIsRegionChanged
uint8_t chPT
struct arm_2d_helper_pfb_t.__unnamed117__.Adapter.__unnamed121__ __unnamed__
arm_2d_pfb_t * ptCurrent
arm_2d_pfb_t * ptFreeList
struct arm_2d_helper_pfb_t.__unnamed117__.Adapter.FlushFIFO FlushFIFO
arm_2d_tile_t * ptFrameBuffer

◆ arm_2d_helper_pfb_t.__unnamed117__.Adapter.__unnamed121__

struct arm_2d_helper_pfb_t.__unnamed117__.Adapter.__unnamed121__
Data Fields
uint8_t bIsNewFrame: 1
uint8_t bIsFlushRequested:1

◆ arm_2d_helper_pfb_t.__unnamed117__.Adapter.FlushFIFO

struct arm_2d_helper_pfb_t.__unnamed117__.Adapter.FlushFIFO
Data Fields
arm_2d_pfb_t * ptHead
arm_2d_pfb_t * ptTail

◆ arm_2d_helper_pfb_t.Statistics

struct arm_2d_helper_pfb_t.Statistics
Data Fields
int32_t nTotalCycle cycles used by drawing
int32_t nRenderingCycle cycles used in LCD flushing

Macro Definition Documentation

◆ ARM_2D_HELPER_PFB_INIT

#define ARM_2D_HELPER_PFB_INIT (   __CB_ADDR,
  __SCREEN_WIDTH,
  __SCREEN_HEIGHT,
  __PIXEL_TYPE,
  __WIDTH,
  __HEIGHT,
  __PFB_NUM,
  ... 
)
Value:
({ \
__attribute__((section(".bss.noinit.arm_2d_pfb_pool"))) \
static struct { \
arm_2d_pfb_t tFPB; \
__ALIGNED(4) \
__PIXEL_TYPE tBuffer[(__WIDTH) * (__HEIGHT)]; \
} s_tPFBs[__PFB_NUM]; \
\
arm_2d_helper_pfb_cfg_t tCFG = { \
.tDisplayArea.tSize = { \
.iWidth = (__SCREEN_WIDTH), \
.iHeight = (__SCREEN_HEIGHT), \
}, \
\
.FrameBuffer.ptPFBs = (arm_2d_pfb_t *)s_tPFBs, \
.FrameBuffer.tFrameSize = { \
.iWidth = (__WIDTH), \
.iHeight = (__HEIGHT), \
}, \
.FrameBuffer.wBufferSize = sizeof(s_tPFBs[0].tBuffer), \
.FrameBuffer.hwPFBNum = dimof(s_tPFBs), \
.Dependency = \
__VA_ARGS__ \
}; \
arm_2d_helper_pfb_init((__CB_ADDR), &tCFG); \
})

a macro wrapper in uppercase to help initialising PFB service

Parameters
[in]__CB_ADDRthe address of the arm_2d_helper_pfb_t object
[in]__SCREEN_WIDTHthe width of the screen
[in]__SCREEN_HEIGHTthe hight of the screen
[in]__PIXEL_TYPEthe integer type of the pixel, i.e. uint8_t, uint16_t, uint32_t
[in]__WIDTHthe width of the PFB block
[in]__HEIGHTthe height of the PFB block
Note
For the same number of pixels in a PFB block, please priority the width over height, for example, 240 * 1 is better than 30 * 8
Parameters
[in]__PFB_NUMthe number of PFB blocks in the built-in PFB pool.
[in]...a code block to add additional initializer, see example below:
Returns
arm_2d_err_t the result of the initialisation process
static ARM_NOINIT arm_2d_helper_pfb_t s_tExamplePFB;
...
// initialise FPB helper
&s_tExamplePFB, // FPB Helper object
__GLCD_CFG_SCEEN_WIDTH__, // screen width
__GLCD_CFG_SCEEN_HEIGHT__, // screen height
uint16_t, // colour date type
240, // PFB block width
1, // PFB block height
1, // number of PFB in the PFB pool
{
.evtOnLowLevelRendering = {
// callback for low level rendering
.fnHandler = &__pfb_render_handler,
},
.evtOnDrawing = {
// callback for drawing GUI
.fnHandler = &__pfb_draw_background_handler,
},
},
//.FrameBuffer.bSwapRGB16 = true,
) < 0) {
//! error detected
assert(false);
}

◆ ARM_2D_HELPER_PFB_UPDATE_ON_DRAW_HANDLER

#define ARM_2D_HELPER_PFB_UPDATE_ON_DRAW_HANDLER (   __CB_ADDR,
  __HANDLER,
  ... 
)
Value:
/* An optional target address */ \
arm_2d_helper_pfb_update_dependency((__CB_ADDR), \
.evtOnDrawing = { \
.fnHandler = (__HANDLER), \
.pTarget = (NULL,##__VA_ARGS__),\
}, \
}})

a macro wrapper to update the evtOnDrawring event handler

Parameters
[in]__CB_ADDRthe address of the arm_2d_helper_pfb_t object
[in]__HANDLERthe new handler
[in]...[Optional] an address (of user defined structure) passed to the event handler.
Returns
arm_2d_err_t the process result

◆ __IMPL_ARM_2D_REGION_LIST

#define __IMPL_ARM_2D_REGION_LIST (   __NAME,
  ... 
)
Value:
enum { \
__NAME##_offset = __COUNTER__, \
}; \
__VA_ARGS__ \
arm_2d_region_list_item_t __NAME[] = {

◆ __ADD_REGION_TO_LIST

#define __ADD_REGION_TO_LIST (   __NAME,
  ... 
)
Value:
{ \
.ptNext = (arm_2d_region_list_item_t *) \
&(__NAME[__COUNTER__ - __NAME##_offset]), \
.tRegion = { \
__VA_ARGS__ \
}, \
}

◆ __ADD_LAST_REGION_TO_LIST

#define __ADD_LAST_REGION_TO_LIST (   __NAME,
  ... 
)
Value:
{ \
.ptNext = NULL, \
.tRegion = { \
__VA_ARGS__ \
}, \
}

◆ IMPL_PFB_ON_DRAW

#define IMPL_PFB_ON_DRAW (   __NAME)
Value:
arm_fsm_rt_t __NAME(void *pTarget, \
const arm_2d_tile_t *ptTile, \
bool bIsNewFrame)

◆ IMPL_PFB_ON_LOW_LV_RENDERING

#define IMPL_PFB_ON_LOW_LV_RENDERING (   __NAME)
Value:
void __NAME(void *pTarget, \
const arm_2d_pfb_t *ptPFB, \
bool bIsNewFrame)

◆ init_arm_2d_helper_pfb

#define init_arm_2d_helper_pfb (   __CB_ADDR,
  __SCREEN_WIDTH,
  __SCREEN_HEIGHT,
  __PIXEL_TYPE,
  __WIDTH,
  __HEIGHT,
  __PFB_NUM,
  ... 
)
Value:
__CB_ADDR, \
__SCREEN_WIDTH, \
__SCREEN_HEIGHT, \
__PIXEL_TYPE, \
__WIDTH, \
__HEIGHT, \
__PFB_NUM, \
##__VA_ARGS__ \
)

a macro wrapper in lowercase to help initialising PFB service

Parameters
[in]__CB_ADDRthe address of the arm_2d_helper_pfb_t object
[in]__SCREEN_WIDTHthe width of the screen
[in]__SCREEN_HEIGHTthe hight of the screen
[in]__PIXEL_TYPEthe integer type of the pixel, i.e. uint8_t, uint16_t, uint32_t
[in]__WIDTHthe width of the PFB block
[in]__HEIGHTthe height of the PFB block
Note
For the same number of pixels in a PFB block, please priority the width over height, for example, 240 * 1 is better than 30 * 8
Parameters
[in]__PFB_NUMthe number of PFB blocks in the built-in PFB pool.
[in]...a code block to add additional initializer, see example below:
Returns
arm_2d_err_t the result of the initialisation process
static ARM_NOINIT arm_2d_helper_pfb_t s_tExamplePFB;
...
// initialise FPB helper
&s_tExamplePFB, // FPB Helper object
__GLCD_CFG_SCEEN_WIDTH__, // screen width
__GLCD_CFG_SCEEN_HEIGHT__, // screen height
uint16_t, // colour date type
240, // PFB block width
1, // PFB block height
1, // number of PFB in the PFB pool
{
.evtOnLowLevelRendering = {
// callback for low level rendering
.fnHandler = &__pfb_render_handler,
},
.evtOnDrawing = {
// callback for drawing GUI
.fnHandler = &__pfb_draw_background_handler,
},
},
//.FrameBuffer.bSwapRGB16 = true,
) < 0) {
//! error detected
assert(false);
}

◆ update_arm_2d_helper_pfb_on_draw_handler

#define update_arm_2d_helper_pfb_on_draw_handler (   __CB_ADDR,
  __HANDLER,
  ... 
)
Value:
/* An optional target address */ \
ARM_2D_HELPER_PFB_UPDATE_ON_DRAW_HANDLER( \
(__CB_ADDR), \
(__HANDLER),##__VA_ARGRS__)

a macro wrapper to update the evtOnDrawring event handler

Parameters
[in]__CB_ADDRthe address of the arm_2d_helper_pfb_t object
[in]__HANDLERthe new handler
[in]...[Optional] an address (of user defined structure) passed to the event handler.
Returns
arm_2d_err_t the process result

◆ __implement_tile

#define __implement_tile (   __NAME,
  __WIDTH,
  __HEIGHT,
  __TYPE,
  ... 
)
Value:
ARM_NOINIT static __TYPE \
__NAME##Buffer[(__WIDTH) * (__HEIGHT)]; \
const arm_2d_tile_t __NAME = { \
.tRegion = { \
.tSize = {(__WIDTH), (__HEIGHT)}, \
}, \
.tInfo.bIsRoot = true, \
.pchBuffer = (uint8_t *)__NAME##Buffer, \
__VA_ARGS__ \
};

◆ get_tile_buffer_pixel_count

#define get_tile_buffer_pixel_count (   __NAME)
Value:
(uint32_t)( (__NAME.tRegion.tSize.iWidth) \
* (__NAME.tRegion.tSize.iHeight))

◆ __arm_2d_align_centre2

#define __arm_2d_align_centre2 (   __region,
  __size 
)
Value:
for (arm_2d_region_t __centre_region = { \
.tSize = (__size), \
.tLocation = { \
.iX = ((__region).tSize.iWidth - (__size).iWidth) >> 1,\
.iY = ((__region).tSize.iHeight - (__size).iHeight)>> 1,\
}, \
}, \
*ARM_CONNECT3(__ARM_USING_, __LINE__,_ptr) = NULL; \
ARM_CONNECT3(__ARM_USING_, __LINE__,_ptr)++ == NULL; \
)

◆ __arm_2d_align_centre3

#define __arm_2d_align_centre3 (   __region,
  __width,
  __height 
)
Value:
for (arm_2d_region_t __centre_region = { \
.tSize = { \
.iWidth = (__width), \
.iHeight = (__height), \
}, \
.tLocation = { \
.iX = ((__region).tSize.iWidth - (__width)) >> 1, \
.iY = ((__region).tSize.iHeight - (__height))>> 1, \
}, \
}, \
*ARM_CONNECT3(__ARM_USING_, __LINE__,_ptr) = NULL; \
ARM_CONNECT3(__ARM_USING_, __LINE__,_ptr)++ == NULL; \
arm_2d_op_wait_async(NULL) \
)

◆ arm_2d_align_centre

#define arm_2d_align_centre (   ...)
Value:
ARM_CONNECT2( __arm_2d_align_centre, \
__ARM_VA_NUM_ARGS(__VA_ARGS__))(__VA_ARGS__)

Typedef Documentation

◆ arm_2d_helper_draw_handler_t

typedef arm_fsm_rt_t arm_2d_helper_draw_handler_t(void *pTarget, const arm_2d_tile_t *ptTile, bool bIsNewFrame)

the On-Drawing event handler for application layer

Parameters
[in]pTargeta user attached target address
[in]ptTilea tile for the virtual screen
[in]bIsNewFramea flag indicate the starting of a new frame
Returns
arm_fsm_rt_t the status of the FSM.

◆ arm_2d_helper_render_handler_t

typedef void arm_2d_helper_render_handler_t(void *pTarget, const arm_2d_pfb_t *ptPFB, bool bIsNewFrame)

the On Low Level Rendering event handler for the low level (LCD Driver)

Parameters
[in]pTargeta user attached target address
[in]ptPFBthe PFB block
[in]bIsNewFramea flag indicate the starting of a new frame

Enumeration Type Documentation

◆ anonymous enum

anonymous enum

the enumeration for events

Enumerator
ARM_2D_PFB_DEPEND_ON_LOW_LEVEL_RENDERING 

On Low Level Rendering Event.

ARM_2D_PFB_DEPEND_ON_DRAWING 

On Drawing Event.

ARM_2D_PFB_DEPEND_ON_LOW_LEVEL_SYNC_UP 

On Low Level Sync-up Event.

ARM_2D_PFB_DEPEND_ON_FRAME_SYNC_UP 

On Frame Sync-up Event.

Function Documentation

◆ arm_2d_helper_pfb_init()

arm_2d_err_t arm_2d_helper_pfb_init ( arm_2d_helper_pfb_t ptThis,
arm_2d_helper_pfb_cfg_t ptCFG 
)

initialize pfb helper service

Parameters
[in]ptThisthe pfb helper control block
[in]ptCFGthe configuration
Returns
arm_2d_err_t the process result

◆ arm_2d_helper_pfb_task()

arm_fsm_rt_t arm_2d_helper_pfb_task ( arm_2d_helper_pfb_t ptThis,
arm_2d_region_list_item_t ptDirtyRegions 
)

the task function for pfb helper

Parameters
[in]ptThisan initialised PFB control block
[in]ptDirtyRegionsa region list pending for refresh, NULL means refreshing the whole screen
Return values
arm_fsm_rt_cplcomplete refreshing one frame
arm_fsm_rt_on_goingthe refreshing work is on-going
arm_fsm_rt_wait_for_objuser's OnDrawing event handler wants to wait for some objects, e.g. semaphore etc.
<0An error is detected

◆ arm_2d_helper_pfb_update_dependency()

arm_2d_err_t arm_2d_helper_pfb_update_dependency ( arm_2d_helper_pfb_t ptThis,
uint_fast8_t  chMask,
const arm_2d_helper_pfb_dependency_t ptDependency 
)

update PFB dependency (event handlers)

Parameters
[in]ptThisthe PFB control block
[in]chMaskthe bit mask for event handlers
[in]ptDependencythe new dependency description
Returns
arm_2d_err_t the process result

◆ arm_2d_helper_pfb_report_rendering_complete()

void arm_2d_helper_pfb_report_rendering_complete ( arm_2d_helper_pfb_t ptThis,
arm_2d_pfb_t ptPFB 
)

tell PFB helper that a low level LCD flushing work is complete

Note
This function is THREAD-SAFE, You can call this function asynchronously, e.g.
  • A ISR to indicate DMA-transfer complete event or
  • A different Thread
Parameters
[in]ptThisthe PFB control block
[in]ptPFBthe used PFB block