system/lib/lcd/gui/Core/LCD_API.c

303 lines
8.2 KiB
C

/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/GUI is protected by international copyright laws. Knowledge of the
* source code may not be used to write a similar product. This file may
* only be used in accordance with a license and should not be redistributed
* in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File : LCD_API.C
Purpose : Selection of LCD display
---------------------------END-OF-HEADER------------------------------
*/
#include <stddef.h> /* needed for definition of NULL */
#include "GUI_Private.h"
#include "GUIDebug.h"
#include "LCD_Private.h" /* Required for configuration, APIList */
#if GUI_COMPILER_SUPPORTS_FP
/*********************************************************************
*
* LCD Device
* (if memory devices are supported)
*
**********************************************************************
*/
const tLCDDEV_APIList LCD_L0_APIList = {
#if LCD_YMAG==1
#if LCD_DELTA_MODE
LCD_L0_Color2Index,
LCD_L0_Index2Color,
LCD_L0_GetIndexMask,
LCD_L0_DELTA_DrawBitmap,
LCD_L0_DELTA_DrawHLine,
LCD_L0_DELTA_DrawVLine,
LCD_L0_DELTA_FillRect,
LCD_L0_DELTA_GetPixelIndex,
LCD_L0_GetRect, /* Original routine is o.k. here, since we use the logical
coordinates for clipping, which are not magnified */
LCD_L0_DELTA_SetPixelIndex,
LCD_L0_DELTA_XorPixel,
LCD_L0_SetLUTEntry,
#else
LCD_L0_Color2Index,
LCD_L0_Index2Color,
LCD_L0_GetIndexMask,
(tLCDDEV_DrawBitmap*)LCD_L0_DrawBitmap,
LCD_L0_DrawHLine,
LCD_L0_DrawVLine,
LCD_L0_FillRect,
LCD_L0_GetPixelIndex,
LCD_L0_GetRect,
LCD_L0_SetPixelIndex,
LCD_L0_XorPixel,
LCD_L0_SetLUTEntry,
#endif
#else
LCD_L0_Color2Index,
LCD_L0_Index2Color,
LCD_L0_GetIndexMask,
LCD_L0_MAG_DrawBitmap,
LCD_L0_MAG_DrawHLine,
LCD_L0_MAG_DrawVLine,
LCD_L0_MAG_FillRect,
LCD_L0_MAG_GetPixelIndex,
LCD_L0_GetRect, /* Original routine is o.k. here, since we use the logical
coordinates for clipping, which are not magnified */
LCD_L0_MAG_SetPixelIndex,
LCD_L0_MAG_XorPixel,
LCD_L0_SetLUTEntry,
#endif
#if GUI_SUPPORT_MEMDEV
NULL, /* pfFillPolygon */
NULL, /* pfFillPolygonAA */
#if LCD_BITSPERPIXEL <= 8
&GUI_MEMDEV__APIList8
#else
&GUI_MEMDEV__APIList16
#endif
#endif
};
/*
*************************************************
* *
* LCD Device *
* (if memory devices are supported) *
* *
*************************************************
*/
#if GUI_NUM_LAYERS > 1
const tLCDDEV_APIList LCD_L0_1_APIList = {
#if LCD_YMAG_1 == 1
LCD_L0_1_Color2Index,
LCD_L0_1_Index2Color,
LCD_L0_1_GetIndexMask,
LCD_L0_1_DrawBitmap,
LCD_L0_1_DrawHLine,
LCD_L0_1_DrawVLine,
LCD_L0_1_FillRect,
LCD_L0_1_GetPixelIndex,
LCD_L0_1_GetRect,
LCD_L0_1_SetPixelIndex,
LCD_L0_1_XorPixel,
LCD_L0_1_SetLUTEntry,
#else
LCD_L0_1_Color2Index,
LCD_L0_1_Index2Color,
LCD_L0_1_GetIndexMask,
LCD_L0_1_MAG_DrawBitmap,
LCD_L0_1_MAG_DrawHLine,
LCD_L0_1_MAG_DrawVLine,
LCD_L0_1_MAG_FillRect,
LCD_L0_1_MAG_GetPixelIndex,
LCD_L0_1_GetRect, /* Original routine is o.k. here, since we use the logical
coordinates for clipping, which are not magnified */
LCD_L0_1_MAG_SetPixelIndex,
LCD_L0_1_MAG_XorPixel,
LCD_L0_1_SetLUTEntry,
#endif
#if GUI_SUPPORT_MEMDEV
NULL, /* pfFillPolygon */
NULL, /* pfFillPolygonAA */
#if LCD_BITSPERPIXEL_1 <= 8
&GUI_MEMDEV__APIList8
#else
&GUI_MEMDEV__APIList16
#endif
#endif
};
#endif
#if GUI_NUM_LAYERS > 2
const tLCDDEV_APIList LCD_L0_2_APIList = {
#if LCD_YMAG_2 == 1
LCD_L0_2_Color2Index,
LCD_L0_2_Index2Color,
LCD_L0_2_GetIndexMask,
LCD_L0_2_DrawBitmap,
LCD_L0_2_DrawHLine,
LCD_L0_2_DrawVLine,
LCD_L0_2_FillRect,
LCD_L0_2_GetPixelIndex,
LCD_L0_2_GetRect,
LCD_L0_2_SetPixelIndex,
LCD_L0_2_XorPixel,
LCD_L0_2_SetLUTEntry,
#else
LCD_L0_2_Color2Index,
LCD_L0_2_Index2Color,
LCD_L0_2_GetIndexMask,
LCD_L0_2_MAG_DrawBitmap,
LCD_L0_2_MAG_DrawHLine,
LCD_L0_2_MAG_DrawVLine,
LCD_L0_2_MAG_FillRect,
LCD_L0_2_MAG_GetPixelIndex,
LCD_L0_2_GetRect, /* Original routine is o.k. here, since we use the logical
coordinates for clipping, which are not magnified */
LCD_L0_2_MAG_SetPixelIndex,
LCD_L0_2_MAG_XorPixel,
LCD_L0_2_SetLUTEntry,
#endif
#if GUI_SUPPORT_MEMDEV
NULL, /* pfFillPolygon */
NULL, /* pfFillPolygonAA */
#if LCD_BITSPERPIXEL_2 <= 8
&GUI_MEMDEV__APIList8
#else
&GUI_MEMDEV__APIList16
#endif
#endif
};
#endif
#if GUI_NUM_LAYERS > 3
const tLCDDEV_APIList LCD_L0_3_APIList = {
#if LCD_YMAG_3 == 1
LCD_L0_3_Color2Index,
LCD_L0_3_Index2Color,
LCD_L0_3_GetIndexMask,
LCD_L0_3_DrawBitmap,
LCD_L0_3_DrawHLine,
LCD_L0_3_DrawVLine,
LCD_L0_3_FillRect,
LCD_L0_3_GetPixelIndex,
LCD_L0_3_GetRect,
LCD_L0_3_SetPixelIndex,
LCD_L0_3_XorPixel,
LCD_L0_3_SetLUTEntry,
#else
LCD_L0_3_Color2Index,
LCD_L0_3_Index2Color,
LCD_L0_3_GetIndexMask,
LCD_L0_3_MAG_DrawBitmap,
LCD_L0_3_MAG_DrawHLine,
LCD_L0_3_MAG_DrawVLine,
LCD_L0_3_MAG_FillRect,
LCD_L0_3_MAG_GetPixelIndex,
LCD_L0_3_GetRect, /* Original routine is o.k. here, since we use the logical
coordinates for clipping, which are not magnified */
LCD_L0_3_MAG_SetPixelIndex,
LCD_L0_3_MAG_XorPixel,
LCD_L0_3_SetLUTEntry,
#endif
#if GUI_SUPPORT_MEMDEV
NULL, /* pfFillPolygon */
NULL, /* pfFillPolygonAA */
#if LCD_BITSPERPIXEL_3 <= 8
&GUI_MEMDEV__APIList8
#else
&GUI_MEMDEV__APIList16
#endif
#endif
};
#endif
#if GUI_NUM_LAYERS > 4
const tLCDDEV_APIList LCD_L0_4_APIList = {
#if LCD_YMAG_4 == 1
LCD_L0_4_Color2Index,
LCD_L0_4_Index2Color,
LCD_L0_4_GetIndexMask,
LCD_L0_4_DrawBitmap,
LCD_L0_4_DrawHLine,
LCD_L0_4_DrawVLine,
LCD_L0_4_FillRect,
LCD_L0_4_GetPixelIndex,
LCD_L0_4_GetRect,
LCD_L0_4_SetPixelIndex,
LCD_L0_4_XorPixel,
LCD_L0_4_SetLUTEntry,
#else
LCD_L0_4_Color2Index,
LCD_L0_4_Index2Color,
LCD_L0_4_GetIndexMask,
LCD_L0_4_MAG_DrawBitmap,
LCD_L0_4_MAG_DrawHLine,
LCD_L0_4_MAG_DrawVLine,
LCD_L0_4_MAG_FillRect,
LCD_L0_4_MAG_GetPixelIndex,
LCD_L0_4_GetRect, /* Original routine is o.k. here, since we use the logical
coordinates for clipping, which are not magnified */
LCD_L0_4_MAG_SetPixelIndex,
LCD_L0_4_MAG_XorPixel,
LCD_L0_4_SetLUTEntry,
#endif
#if GUI_SUPPORT_MEMDEV
NULL, /* pfFillPolygon */
NULL, /* pfFillPolygonAA */
#if LCD_BITSPERPIXEL_4 <= 8
&GUI_MEMDEV__APIList8
#else
&GUI_MEMDEV__APIList16
#endif
#endif
};
#endif
/***********************************************************
*
* LCD_aAPI
*
* Purpose:
* This table lists the available displays/layers by a single pointer.
* It is important that these are non-constants, because some high level
* software (such as the VNC server, but maybe also the mouse "Cursor" mdoule)
* may need to override these pointers in order to link itself into the chain
* of drawing routines.
* However, the API tables may of course be constants.
*
*/
const tLCDDEV_APIList* /*const*/ LCD_aAPI[] = {
&LCD_L0_APIList
#if GUI_NUM_LAYERS > 1
,&LCD_L0_1_APIList
#endif
#if GUI_NUM_LAYERS > 2
,&LCD_L0_2_APIList
#endif
#if GUI_NUM_LAYERS > 3
,&LCD_L0_3_APIList
#endif
#if GUI_NUM_LAYERS > 4
,&LCD_L0_4_APIList
#endif
};
#endif
/*************************** End of file ****************************/