This repository has been archived on 2025-02-28. You can view files and clone it, but cannot push or open issues or pull requests.
controller-hd/User/lib/lcd/gui/MemDev/GUIDEV_CmpWithLCD.c

116 lines
3.5 KiB
C

/*********************************************************************
* SEGGER MICROCONTROLLER SYSTEME GmbH *
* Solutions for real time microcontroller applications *
**********************************************************************
* *
* (c) 1996 - 2004 SEGGER Microcontroller Systeme GmbH *
* *
* Internet: www.segger.com Support: support@segger.com *
* *
**********************************************************************
***** emWin - Graphical user interface for embedded applications *****
emWin 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 re-
distributed in any way. We appreciate your understanding and fairness.
----------------------------------------------------------------------
File : GUIDEV_CmpWithLCD.c
Purpose : Implementation of Checking for memory devices
----------------------------------------------------------------------
Version-Date---Author-Explanation
----------------------------------------------------------------------
1.00 000418 RS First version for release (all tests O.K.)
---------------------------END-OF-HEADER------------------------------
*/
#include <string.h>
#include "GUI_Private.h"
#include "GUIDebug.h"
/* Memory device capabilities are compiled only if support for them is enabled. */
#if GUI_SUPPORT_MEMDEV
/*********************************************************************
*
* public code
*
**********************************************************************
*/
/*********************************************************************
*
* GUI_MEMDEV_CompareWithLCD
*/
int GUI_MEMDEV_CompareWithLCD(GUI_MEMDEV_Handle hMem, int*px, int*py, int *pExp, int*pAct) {
int Ret = 0;
/* Make sure memory handle is valid */
if (!hMem) {
hMem = GUI_Context.hDevData;
}
if (!hMem) {
return 1;
}
GUI_LOCK();
{
GUI_MEMDEV * pDevData = (GUI_MEMDEV*) GUI_ALLOC_h2p(hMem); /* Convert to pointer */
int y = pDevData->y0;
int x0 = pDevData->x0;
int XMax = pDevData->XSize + x0;
int YMax = pDevData->YSize + y;
int Max;
int MagX = LCD_GetXMag();
int MagY = LCD_GetYMag();
/* Calculate limits */
if (y < 0) {
y = 0;
}
if (x0 < 0) {
x0 = 0;
}
Max = LCD_GET_YSIZE();
if (YMax > Max) {
YMax = Max;
}
Max = LCD_GET_XSIZE();
if (XMax > Max) {
XMax = Max;
}
for (; y < YMax; y++) {
int x = x0;
U8 * pData = (U8 *)GUI_MEMDEV__XY2PTR(x, y);
for (x = x0; x < XMax; x++) {
int Exp = *pData++;
int Act = LCD_L0_GetPixelIndex(x * MagX, y * MagY);
#if (GUI_NUM_LAYERS > 1)
if (LCD_GetBitsPerPixelEx(GUI_Context.SelLayer) > 8)
#else
if (LCD_GetBitsPerPixel() > 8)
#endif
{
Exp |= (*pData++) << 8;
}
if (Act != Exp) {
*px = x;
*py = y;
*pAct = Act;
*pExp = Exp;
Ret = 1;
goto Skip;
}
}
}
}
Skip:
GUI_UNLOCK();
return Ret;
}
#else
void GUIDEV_CmpWithLCD(void) {} /* avoid empty object files */
#endif /* GUI_SUPPORT_MEMDEV */
/*************************** end of file ****************************/