MCUXpresso_LPC55S69/middleware/EmbeddedWizard/TargetSpecific/lpcxpresso55s69/ew_bsp_display.h
2022-04-08 22:42:47 +08:00

250 lines
8.1 KiB
C

/*******************************************************************************
*
* E M B E D D E D W I Z A R D P R O J E C T
*
* Copyright (c) TARA Systems GmbH
* written by Paul Banach and Manfred Schweyer
*
********************************************************************************
*
* This software is delivered "as is" and shows the usage of other software
* components. It is provided as an example software which is intended to be
* modified and extended according to particular requirements.
*
* TARA Systems hereby disclaims all warranties and conditions with regard to the
* software, including all implied warranties and conditions of merchantability
* and non-infringement of any third party IPR or other rights which may result
* from the use or the inability to use the software.
*
********************************************************************************
*
* DESCRIPTION:
* This file is part of the interface (glue layer) between an Embedded Wizard
* generated UI application and the board support package (BSP) of a dedicated
* target.
* This template is responsible to initialize the display hardware of the board
* and to provide the necessary access to update the display content.
*
*******************************************************************************/
#ifndef EW_BSP_DISPLAY_H
#define EW_BSP_DISPLAY_H
#ifdef __cplusplus
extern "C"
{
#endif
/* flag to indicate normal display update with full access to frame buffer */
#define EW_BSP_DISPLAY_UPDATE_NORMAL 0x00000000
/* flag to indicate partial frame buffer update in case of a synchroneous single
buffer - update is divided in stripes (fields) defined by the display driver */
#define EW_BSP_DISPLAY_UPDATE_PARTIAL 0x00000001
/* flag to indicate display update by using a scratch-pad buffer - update is done
in subareas that fit into the scratch-pad buffer */
#define EW_BSP_DISPLAY_UPDATE_SCRATCHPAD 0x00000002
/******************************************************************************
* TYPE:
* XDisplayInfo
*
* DESCRIPTION:
* The structure XDisplayInfo describes the attributes and current configuration
* of the display. The interpretation and usage of the members may depend on the
* underlying system and the selected framebuffer integration scenario.
*
* ELEMENTS:
* FrameBuffer - Pointer to the framebuffer memory. In case of double-buffering
* it refers to the first framebuffer (not the currently active front-buffer).
* If the display is updated from a scrach-pad buffer, the pointer refers to
* the scratch-pad buffer memory.
* DoubleBuffer - Pointer to the second framebuffer or scratch-pad buffer in
* case of double-buffering.
* BufferWidth - Width of the framebuffer(s) / scratch-pad buffer(s) in pixel.
* BufferHeight - Height of the framebuffer(s) / scratch-pad buffer(s) in pixel.
* DisplayWidth - Width of the display in pixel.
* DisplayHeight - Height of the display in pixel.
* UpdateMode - The display update mode (normal, partial, scratch-pad).
* Context - Optional pointer to a target specific struct.
*
******************************************************************************/
typedef struct
{
void* FrameBuffer;
void* DoubleBuffer;
int BufferWidth;
int BufferHeight;
int DisplayWidth;
int DisplayHeight;
int UpdateMode;
void* Context;
} XDisplayInfo;
/*******************************************************************************
* FUNCTION:
* EwBspDisplayInit
*
* DESCRIPTION:
* The function EwBspDisplayInit initializes the display hardware and returns
* the display parameter.
*
* ARGUMENTS:
* aDisplayInfo - Display info data structure.
*
* RETURN VALUE:
* Returns 1 if successful, 0 otherwise.
*
*******************************************************************************/
int EwBspDisplayInit
(
XDisplayInfo* aDisplayInfo
);
/*******************************************************************************
* FUNCTION:
* EwBspDisplayDone
*
* DESCRIPTION:
* The function EwBspDisplayDone deinitializes the display hardware.
*
* ARGUMENTS:
* None
*
* RETURN VALUE:
* None
*
*******************************************************************************/
void EwBspDisplayDone
(
void
);
/*******************************************************************************
* FUNCTION:
* EwBspDisplayGetUpdateArea
*
* DESCRIPTION:
* The function EwBspDisplayGetUpdateArea returns the next update area
* depending on the selected display mode:
* In case of a synchroneous single-buffer, the function has to return the
* the rectangular areas that correspond to the horizontal stripes (fields)
* of the framebuffer.
* In case of a scratch-pad buffer, the function has to return the subareas
* that fit into the provided update rectangle.
* During each display update, this function is called until it returns 0.
*
* ARGUMENTS:
* aUpdateRect - Rectangular area which should be updated (redrawn).
*
* RETURN VALUE:
* Returns 1 if a further update area can be provided, 0 otherwise.
*
*******************************************************************************/
int EwBspDisplayGetUpdateArea
(
XRect* aUpdateRect
);
/*******************************************************************************
* FUNCTION:
* EwBspDisplayWaitForCompletion
*
* DESCRIPTION:
* The function EwBspDisplayWaitForCompletion is called from the Graphics Engine
* to ensure that all pending activities of the display system are completed, so
* that the rendering of the next frame can start.
* In case of a double-buffering system, the function has to wait until the
* V-sync has occured and the pending buffer is used by the display controller.
* In case of an external display controller, the function has to wait until
* the transfer (update) of the graphics data has been completed and there are
* no pending buffers.
*
* ARGUMENTS:
* None
*
* RETURN VALUE:
* None
*
*******************************************************************************/
void EwBspDisplayWaitForCompletion
(
void
);
/*******************************************************************************
* FUNCTION:
* EwBspDisplayCommitBuffer
*
* DESCRIPTION:
* The function EwBspDisplayCommitBuffer is called from the Graphics Engine
* when the rendering of a certain buffer has been completed.
* The type of buffer depends on the selected framebuffer concept.
* If the display is running in a double-buffering mode, the function is called
* after each buffer update in order to change the currently active framebuffer
* address. Changing the framebuffer address should be synchronized with V-sync.
* If the system is using an external graphics controller, this function is
* responsible to start the transfer of the framebuffer content.
*
* ARGUMENTS:
* aAddress - Address of the framebuffer to be shown on the display.
* aX,
* aY - Origin of the area which has been updated by the Graphics Engine.
* aWidth,
* aHeight - Size of the area which has been updated by the Graphics Engine.
*
* RETURN VALUE:
* None
*
*******************************************************************************/
void EwBspDisplayCommitBuffer
(
void* aAddress,
int aX,
int aY,
int aWidth,
int aHeight
);
/*******************************************************************************
* FUNCTION:
* EwBspDisplaySetClut
*
* DESCRIPTION:
* The function EwBspDisplaySetClut is called from the Graphics Engine
* in order to update the hardware CLUT of the current framebuffer.
* The function is only called when the color format of the framebuffer is
* Index8 or LumA44.
*
* ARGUMENTS:
* aClut - Pointer to a color lookup table with 256 entries.
*
* RETURN VALUE:
* None
*
*******************************************************************************/
void EwBspDisplaySetClut
(
unsigned long* aClut
);
#ifdef __cplusplus
}
#endif
#endif /* EW_BSP_DISPLAY_H */
/* msy */