⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 guidev_copyfromlcd.c

📁 ucGUI3.90a没有MemDev这是从3.24向上移植的
💻 C
字号:
/*! @file GUIDEV_CopyFromLCD.c
 *  Implementation of memory devices 
 *
 *  @author hiber modified
 *  @author Copyleft (C) 1981-2006, All Rights Givenup
 *  @date 04/18/2006
 *  @version 
 *
 *  @note 3.90a和3.24部分宏和函数名不同
 *  @attention 
 *  @warning 
 *  @bug
 *
 *  @todo
 *  @example <file-name>
 *  @see
 */

#include "GUI_Private.h"
#include "GUIDebug.h"

#if GUI_SUPPORT_MEMDEV

extern void * _GUI_ALLOC_h2p_Lock(GUI_HMEM hMem);
#define GUI_ALLOC_H2P(h)          _GUI_ALLOC_h2p_Lock(h)
#define GUI_ALLOC_FREE(handle)    GUI_ALLOC_Free(handle)
#define GUI_ALLOC_LOCK(handle)    _GUI_ALLOC_h2p_Lock(handle)
#define GUI_ALLOC_UNLOCK(handle)

#ifdef GUI_USAGE_H2P
    #undef GUI_USAGE_H2P
    #define GUI_USAGE_H2P(h) ((GUI_USAGE*)_GUI_ALLOC_h2p_Lock(h)) 
#endif

#ifdef GUI_MEMDEV_H2P
    #undef GUI_MEMDEV_H2P
    #define GUI_MEMDEV_H2P _GUI_ALLOC_h2p_Lock
#endif

//////////////////////////////////////////////////////////////////////////

#define LCD_LIMIT(Var, Op, Limit) if (Var Op Limit) Var = Limit

//! 从LCD 数据(视频存储器)拷贝一个存储设备的内容到存储设备,即回读LCD的内容到存储设备。
//! @param hMem 存储设备的句柄
void GUI_MEMDEV_CopyFromLCD(GUI_MEMDEV_Handle hMem)
{
    /* Make sure memory handle is valid */
    if (!hMem)
    {
        hMem = GUI_Context.hDevData;// 如果参数为NULL,尝试使用图形设备上下文中的句柄
    }

    if (!hMem)
    {
        return ;
    }

   // 大括号...
    {
        GUI_MEMDEV *pDevData = (GUI_MEMDEV*)GUI_ALLOC_LOCK(hMem); /* Convert to pointer */
        LCD_RECT r;
        int y;
        int XMax;
        GUI_USAGE *pUsage = 0;
        GUI_MEMDEV_Handle hMemOld = GUI_Context.hDevData;

        GUI_MEMDEV_Select(hMem);
        if (pDevData->hUsage)
        {
            pUsage = GUI_USAGE_H2P(pDevData->hUsage);
        }

        /* Get bounding rectangle */
        r.y0 = pDevData->y0;
        r.x0 = pDevData->x0;
        r.x1 = pDevData->x0 + pDevData->XSize - 1;
        r.y1 = pDevData->y0 + pDevData->YSize - 1;

        /* Make sure bounds are within LCD area so we can call driver directly */
        LCD_LIMIT(r.x0,  < , 0);
        LCD_LIMIT(r.y0,  < , 0);
        LCD_LIMIT(r.x1,  > , LCD_GET_XSIZE() - 1);
        LCD_LIMIT(r.y1,  > , LCD_GET_YSIZE() - 1);

        XMax = r.x1;
        for (y = r.y0; y <= r.y1; y++)
        {
            int x = r.x0;
            LCD_PIXELINDEX *pData = (LCD_PIXELINDEX *)GUI_MEMDEV__XY2PTR(x, y);
            if (pUsage)
            {
                GUI_USAGE_AddHLine(pUsage, x, y, r.x1 - r.x0 + 1);
            }

            for (; x <= XMax; x++)
            {
                *pData++ = LCD_L0_GetPixelIndex(x, y);
            }
        }

        GUI_MEMDEV_Select(hMemOld);
    }

    GUI_ALLOC_UNLOCK(hMem);
}
#endif /* GUI_MEMDEV_SUPPORT */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -