亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? guidev.c

?? 這套代碼已經成功一直到S3C44B0X開發板上
?? 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.c
Purpose     : Implementation of memory devices
---------------------------END-OF-HEADER------------------------------
*/


#include <string.h>
#include "GUI_Private.h"
#include "GUIDebug.h"
#if GUI_WINSUPPORT
  #include "WM.h"
#endif

/* Memory device capabilities are compiled only if support for them is enabled.*/ 
#if GUI_SUPPORT_MEMDEV

/*********************************************************************
*
*       internal routines
*
**********************************************************************
*/
/*********************************************************************
*
*       GUI_MEMDEV__GetRect
*/
void GUI_MEMDEV__GetRect(GUI_RECT* pRect) {
  GUI_MEMDEV* pDev = GUI_MEMDEV_H2P(GUI_Context.hDevData);
  pRect->x0 = pDev->x0;
  pRect->y0 = pDev->y0;
  pRect->x1 = pDev->x0 + pDev->XSize-1;
  pRect->y1 = pDev->y0 + pDev->YSize-1;
}

/*********************************************************************
*
*       GUI_MEMDEV__Color2Index
*/
unsigned int GUI_MEMDEV__Color2Index(LCD_COLOR Color) {
  GUI_MEMDEV* pDev = GUI_MEMDEV_H2P(GUI_Context.hDevData);
  return pDev->pfColor2Index(Color);
}

/*********************************************************************
*
*       GUI_MEMDEV__Index2Color
*/
LCD_COLOR GUI_MEMDEV__Index2Color(int Index) {
  GUI_MEMDEV* pDev = GUI_MEMDEV_H2P(GUI_Context.hDevData);
  return pDev->pfIndex2Color(Index);
}

/*********************************************************************
*
*       GUI_MEMDEV__GetIndexMask
*/
unsigned int GUI_MEMDEV__GetIndexMask(void) {
  GUI_MEMDEV * pDev = GUI_MEMDEV_H2P(GUI_Context.hDevData);
  return pDev->pfGetIndexMask();
}

/*********************************************************************
*
*       Exported routines
*
**********************************************************************
*/
/*********************************************************************
*
*       GUI_MEMDEV_Delete
*/
void GUI_MEMDEV_Delete(GUI_MEMDEV_Handle hMemDev) {
/* Make sure memory device is not used */
  GUI_LOCK();
  if (hMemDev) {
    GUI_MEMDEV* pDev;
    if (GUI_Context.hDevData == hMemDev) {
	    GUI_SelectLCD();
    }
    pDev = GUI_MEMDEV_H2P(hMemDev);
    /* Delete the associated usage device */
    if (pDev->hUsage)
      GUI_USAGE_DecUseCnt(pDev->hUsage);
    GUI_ALLOC_Free(hMemDev);
  }
  GUI_UNLOCK();
}

/*********************************************************************
*
*       GUI_MEMDEV__CreateFixed
*/
GUI_MEMDEV_Handle GUI_MEMDEV__CreateFixed(int x0, int y0, int xsize, int ysize, int Flags
                                        ,const tLCDDEV_APIList * pMemDevAPI
                                        ,tLCDDEV_Color2Index*        pfColor2Index
                                        ,tLCDDEV_Index2Color*        pfIndex2Color
                                        ,tLCDDEV_GetIndexMask*       pfGetIndexMask) {
  I32 MemSize;
  GUI_USAGE_Handle hUsage = 0;
  unsigned int BitsPerPixel, BytesPerLine;
  GUI_MEMDEV_Handle hMemDev;
  BitsPerPixel = pMemDevAPI->BitsPerPixel;
  BytesPerLine = (xsize * BitsPerPixel + 7) >> 3;     /* Note: This code works with 8 and 16 bit memory devices. If other BPPs are introduced for MemDevs, it needs to be changed */
  /* Calc available MemSize */
  MemSize = GUI_ALLOC_GetMaxSize();
  if (!(Flags & GUI_MEMDEV_NOTRANS)) {
    MemSize = (MemSize / 4) * 3;   /* We need to reserve some memory for usage object ... TBD: This can be optimized as we do not use memory perfectly. */
  }
  if (ysize<=0) {
    int MaxLines = (MemSize - sizeof(GUI_MEMDEV)) / BytesPerLine;
    ysize = (MaxLines > -ysize) ? -ysize : MaxLines;
  }
  if (!(Flags & GUI_MEMDEV_NOTRANS)) {
    /* Create the usage map */
    hUsage = GUI_USAGE_BM_Create(x0, y0, xsize, ysize, 0);
  }
  /* Check if we can alloc sufficient memory */
  if (ysize <= 0) {
    GUI_DEBUG_WARN("GUI_MEMDEV_Create: Too little memory");
    GUI_UNLOCK();
    return 0;    
  }
  MemSize = ysize * BytesPerLine + sizeof(GUI_MEMDEV);
  if (Flags & GUI_MEMDEV_NOTRANS) {
    hMemDev = GUI_ALLOC_AllocNoInit(MemSize);
  } else {
    hMemDev = GUI_ALLOC_AllocZero(MemSize);
  }
  if (hMemDev) {
    GUI_MEMDEV* pDevData;
    pDevData = GUI_MEMDEV_H2P(hMemDev);
    pDevData->x0            = x0;
    pDevData->y0            = y0;
    pDevData->XSize         = xsize;
    pDevData->YSize         = ysize;
    pDevData->NumColors     = 
    #if GUI_NUM_LAYERS == 1
      LCD_GET_NUMCOLORS();
    #else
      LCD_GetNumColorsEx(GUI_Context.SelLayer);
    #endif
    pDevData->BytesPerLine  = BytesPerLine;
    pDevData->hUsage        = hUsage;
    /* Set color conversion routine pointers */
    pDevData->pfColor2Index = pfColor2Index;    /* LCD_L0_Color2Index; */
    pDevData->pfIndex2Color = pfIndex2Color;    /* LCD_L0_Index2Color; */
    pDevData->pfGetIndexMask= pfGetIndexMask;   /* LCD_L0_GetIndexMask */

    pDevData->pAPIList      = pMemDevAPI;
    pDevData->BitsPerPixel  = BitsPerPixel;
    #if (GUI_NUM_LAYERS > 1)   /* Size opt., preprocessor not required */
      pDevData->LayerIndex  = GUI_Context.SelLayer;
    #else
      pDevData->LayerIndex  = 0;
    #endif
  } else {
    if (hUsage) {
      GUI_ALLOC_Free(hUsage);
    }
    GUI_DEBUG_WARN("GUI_MEMDEV_Create: Alloc failed");
  }
  return hMemDev;
}

/*********************************************************************
*
*       GUI_MEMDEV_CreateEx
*/
GUI_MEMDEV_Handle GUI_MEMDEV_CreateEx(int x0, int y0, int xSize, int ySize, int Flags) {
  GUI_MEMDEV_Handle hMemDev;
  const tLCDDEV_APIList * pDeviceAPI;
  tLCDDEV_Color2Index   * pfColor2Index;
  tLCDDEV_Index2Color   * pfIndex2Color;
  tLCDDEV_GetIndexMask  * pfGetIndexMask;
  GUI_LOCK();
  #if (GUI_NUM_LAYERS > 1)   /* Size opt., preprocessor not required */
    pDeviceAPI = LCD_aAPI[GUI_Context.SelLayer];
  #else
    pDeviceAPI = LCD_aAPI[0];
  #endif
  if (GUI_Context.hDevData == 0) {
    pfColor2Index = GUI_Context.pDeviceAPI->pfColor2Index;    /* LCD_L0_Color2Index; */
    pfIndex2Color = GUI_Context.pDeviceAPI->pfIndex2Color;    /* LCD_L0_Index2Color; */
    pfGetIndexMask= GUI_Context.pDeviceAPI->pfGetIndexMask;   /* LCD_L0_GetIndexMask */
  } else {
    /* If a memory device is already selected, we create a compatible one by copying its data */
    GUI_MEMDEV* pDevSel;
    pDevSel = GUI_MEMDEV_H2P(GUI_Context.hDevData);
    pfColor2Index = pDevSel->pfColor2Index;
    pfIndex2Color = pDevSel->pfIndex2Color;
    pfGetIndexMask= pDevSel->pfGetIndexMask;
  }
  hMemDev = GUI_MEMDEV__CreateFixed(x0, y0, xSize, ySize, Flags, pDeviceAPI->pMemDevAPI, 
                                    pfColor2Index, pfIndex2Color ,pfGetIndexMask);
  GUI_UNLOCK();
  return hMemDev;
}
/*********************************************************************
*
*       GUI_MEMDEV_Create
*/
GUI_MEMDEV_Handle GUI_MEMDEV_Create(int x0, int y0, int xsize, int ysize) {
  return GUI_MEMDEV_CreateEx(x0, y0, xsize, ysize, GUI_MEMDEV_HASTRANS);
}

/*********************************************************************
*
*       GUI_MEMDEV_Select
*/
GUI_MEMDEV_Handle GUI_MEMDEV_Select(GUI_MEMDEV_Handle hMem) {
  GUI_MEMDEV_Handle r;
  GUI_LOCK();
  r = GUI_Context.hDevData;
  if (hMem == 0) {
    GUI_SelectLCD();
  } else {
    GUI_MEMDEV* pDev = GUI_MEMDEV_H2P(hMem);
    #if GUI_WINSUPPORT
      WM_Deactivate();
    #endif
    /* If LCD was selected Save cliprect */
    if (GUI_Context.hDevData == 0) {
      GUI_Context.ClipRectPrev = GUI_Context.ClipRect;
    }
    GUI_Context.hDevData = hMem;
    GUI_Context.pDeviceAPI = pDev->pAPIList;
    LCD_SetClipRectMax();
  }
  GUI_UNLOCK();
  return r;
}

/*********************************************************************
*
*       GUI_MEMDEV__WriteToActiveAt
*/
void GUI_MEMDEV__WriteToActiveAt(GUI_MEMDEV_Handle hMem,int x, int y) {
  GUI_MEMDEV* pDev = GUI_MEMDEV_H2P(hMem);
  GUI_USAGE_h hUsage = pDev->hUsage; 
  GUI_USAGE*  pUsage;
  int YSize = pDev->YSize;
  int yi;
  unsigned int BytesPerLine = pDev->BytesPerLine;
  unsigned int BitsPerPixel = pDev->BitsPerPixel;
  int BytesPerPixel = BitsPerPixel >> 3;
  U8* pData = (U8*)(pDev+1);
  if (hUsage) {
    pUsage = GUI_USAGE_H2P(hUsage);
    for (yi = 0; yi < YSize; yi++) {
      int xOff = 0;
      int XSize;
      XSize = GUI_USAGE_GetNextDirty(pUsage, &xOff, yi);
      if (XSize == pDev->XSize) {
        /* If the entire line is affected, calculate the number of entire lines */
        int y0 = yi;
        while ((GUI_USAGE_GetNextDirty(pUsage, &xOff, yi + 1)) == XSize) {
          yi++;
        }
		    LCD_DrawBitmap(x, y + y0, pDev->XSize, yi - y0 + 1, 1, 1, BitsPerPixel, BytesPerLine, pData, NULL);
        pData += (yi - y0 + 1) * BytesPerLine;
      } else {
        /* Draw the partial line which needs to be drawn */
        for (; XSize; ) {
          LCD_DrawBitmap(x + xOff, y + yi, XSize, 1, 1, 1, BitsPerPixel, BytesPerLine, pData + xOff * BytesPerPixel, NULL);
          xOff += XSize;
          XSize = GUI_USAGE_GetNextDirty(pUsage, &xOff, yi);
        }
        pData += BytesPerLine;
      }
    }
  } else {
		LCD_DrawBitmap(x, y, pDev->XSize, YSize, 1, 1, BitsPerPixel, BytesPerLine, pData, NULL);
  }
}

/*********************************************************************
*
*       GUI_MEMDEV_CopyToLCDAt
*/
void GUI_MEMDEV_CopyToLCDAt(GUI_MEMDEV_Handle hMem, int x, int y) {
  if (hMem) {
    GUI_MEMDEV_Handle hMemPrev;
    GUI_MEMDEV* pDevData;
  #if (GUI_WINSUPPORT)
    GUI_RECT r;
  #endif
  #if GUI_NUM_LAYERS > 1
    int PrevLayer;
  #endif
    GUI_LOCK();
    hMemPrev = GUI_Context.hDevData;
    pDevData = (GUI_MEMDEV*) GUI_ALLOC_h2p(hMem);  /* Convert to pointer */
    /* Make sure LCD is selected as device */
  #if GUI_NUM_LAYERS > 1
    PrevLayer = GUI_SelectLayer(pDevData->LayerIndex);
  #else
    GUI_SelectLCD();  /* Activate LCD */
  #endif
    if (x == GUI_POS_AUTO) {
      x = pDevData->x0;
      y = pDevData->y0;
    }
  #if (GUI_WINSUPPORT)
    /* Calculate rectangle */
    r.x1 = (r.x0 = x) + pDevData->XSize-1;
    r.y1 = (r.y0 = y) + pDevData->YSize-1;;
    /* Do the drawing. Window manager has to be on */
    WM_Activate();
    WM_ITERATE_START(&r) {
  #endif
    GUI_MEMDEV__WriteToActiveAt(hMem, x, y);
  #if (GUI_WINSUPPORT)
    } WM_ITERATE_END();
  #endif
  #if GUI_NUM_LAYERS > 1
    GUI_SelectLayer(PrevLayer);
  #endif
    /* Reactivate previously used device */
    GUI_MEMDEV_Select(hMemPrev);
    GUI_UNLOCK();
  }
}

/*********************************************************************
*
*       GUI_MEMDEV_CopyToLCD
*/
void GUI_MEMDEV_CopyToLCD(GUI_MEMDEV_Handle hMem) {
  GUI_MEMDEV_CopyToLCDAt(hMem, GUI_POS_AUTO, GUI_POS_AUTO);
}

#else

void GUIDEV_C(void) {}

#endif /* GUI_SUPPORT_MEMDEV */

/*************************** end of file ****************************/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品免费在线观看| www国产亚洲精品久久麻豆| 精品亚洲aⅴ乱码一区二区三区| 亚洲乱码日产精品bd| 中文字幕制服丝袜一区二区三区| 2020国产精品久久精品美国| 久久在线观看免费| 国产日韩欧美一区二区三区综合 | 97精品电影院| 91在线观看下载| 色噜噜夜夜夜综合网| 在线观看欧美日本| 欧美日韩久久一区二区| 欧美三级蜜桃2在线观看| 91精品国产综合久久福利软件 | 亚洲高清免费在线| 奇米777欧美一区二区| 精品一区二区三区的国产在线播放| 美女视频免费一区| 国产裸体歌舞团一区二区| 成人午夜av影视| 在线看国产一区二区| 欧美麻豆精品久久久久久| 日韩视频不卡中文| 亚洲国产精品高清| 亚洲精品美国一| 日韩电影在线一区| 粉嫩久久99精品久久久久久夜| 91麻豆国产自产在线观看| 欧美一区二区免费观在线| 久久午夜免费电影| 亚洲国产综合人成综合网站| 久久精品国产成人一区二区三区 | 日韩美女在线视频| 中国色在线观看另类| 亚洲电影一级黄| 国产黑丝在线一区二区三区| 欧美日韩精品欧美日韩精品一| 久久在线观看免费| 三级久久三级久久久| jizz一区二区| 欧美成人女星排名| 亚洲精品一二三区| 丁香桃色午夜亚洲一区二区三区| 欧美在线你懂的| 欧美国产禁国产网站cc| 偷偷要91色婷婷| 色综合天天视频在线观看| 精品动漫一区二区三区在线观看| 亚洲一区二区三区爽爽爽爽爽 | 亚洲欧洲精品一区二区三区不卡 | 国产高清不卡二三区| 欧美精品亚洲二区| 亚洲日本在线观看| 久久av老司机精品网站导航| 欧美性色黄大片| 亚洲青青青在线视频| 国产剧情一区在线| 欧美一区二区高清| 水蜜桃久久夜色精品一区的特点| 99久久久精品| 国产精品久久三区| 成人免费黄色在线| 国产日产亚洲精品系列| 男女激情视频一区| 欧美一区二区视频在线观看2020| 一区二区三区中文字幕精品精品| 国产91综合一区在线观看| 日韩欧美一二三四区| 日韩高清在线电影| 777色狠狠一区二区三区| 视频一区在线视频| 欧美丰满少妇xxxxx高潮对白 | 成人午夜精品一区二区三区| 欧美tk丨vk视频| 国产乱子轮精品视频| 久久久综合视频| 国产高清精品久久久久| 欧美激情一区二区| eeuss鲁一区二区三区| 中文字幕一区二区不卡| 色噜噜狠狠色综合中国| 亚洲综合免费观看高清完整版| 欧洲亚洲国产日韩| 日韩av一区二区三区| 日韩免费高清av| 国产最新精品免费| 国产精品另类一区| 色综合天天综合在线视频| 亚洲自拍另类综合| 日韩一卡二卡三卡四卡| 国产一区免费电影| 中文字幕视频一区| 制服丝袜亚洲色图| 国产高清成人在线| 亚洲精品精品亚洲| 日韩一区二区电影网| 国产高清视频一区| 一区二区高清在线| 日韩欧美国产系列| aaa欧美大片| 日韩电影在线免费观看| www成人在线观看| 91丝袜美女网| 蜜桃视频在线观看一区二区| 欧美激情一区二区三区四区| 在线免费观看视频一区| av在线播放成人| 亚洲一级二级在线| 日韩欧美一区二区视频| 成人高清免费观看| 日本亚洲电影天堂| 中文字幕一区二区视频| 91精品国产乱| gogo大胆日本视频一区| 日本不卡一区二区三区高清视频| 国产日韩视频一区二区三区| 欧美日韩情趣电影| 成人午夜在线播放| 欧美96一区二区免费视频| 亚洲色图20p| 国产亚洲一区二区在线观看| 在线精品国精品国产尤物884a| 国产精品综合视频| 视频一区二区三区入口| 中文字幕在线播放不卡一区| 欧美刺激脚交jootjob| 91成人免费电影| jizzjizzjizz欧美| 国产一区二区三区美女| 秋霞午夜av一区二区三区| 亚洲激情图片一区| 国产人成亚洲第一网站在线播放| 欧美群妇大交群的观看方式| 91在线视频免费观看| 国产精品一二三四五| 美日韩一区二区三区| 亚洲高清不卡在线观看| 亚洲同性同志一二三专区| 国产午夜亚洲精品午夜鲁丝片| 777欧美精品| 91精品国产欧美日韩| 欧美日本在线播放| 欧美色视频一区| 欧美性生活大片视频| 日本精品一区二区三区高清| 菠萝蜜视频在线观看一区| 国产精品一区三区| 国产成人小视频| 国产精品一区在线观看你懂的| 狠狠色伊人亚洲综合成人| 久久国产生活片100| 美腿丝袜亚洲综合| 久久精品国产澳门| 久久91精品国产91久久小草| 免费人成黄页网站在线一区二区| 三级影片在线观看欧美日韩一区二区| 亚洲国产精品自拍| 日韩av一区二| 蜜桃av噜噜一区| 国产乱一区二区| 成人午夜电影久久影院| av午夜精品一区二区三区| 91福利国产成人精品照片| 日本韩国一区二区三区视频| 欧美系列亚洲系列| 欧美久久久久免费| 精品电影一区二区| 国产欧美一区二区精品仙草咪| 国产三区在线成人av| 国产精品久久久久久久久快鸭| 亚洲人成伊人成综合网小说| 一区二区三区在线免费观看| 天天做天天摸天天爽国产一区| 免费亚洲电影在线| 成人高清视频免费观看| 91黄视频在线观看| 日韩午夜激情免费电影| 久久嫩草精品久久久精品一| 1024精品合集| 日韩av电影天堂| 国产.精品.日韩.另类.中文.在线.播放 | 亚洲一区二区三区免费视频| 日本一道高清亚洲日美韩| 精品一区二区三区香蕉蜜桃| 97精品久久久午夜一区二区三区| 精品污污网站免费看| 久久精品一区蜜桃臀影院| 亚洲乱码国产乱码精品精可以看| 日本午夜一本久久久综合| 国产不卡在线视频| 欧美日韩高清不卡| 国产精品久久久久久久久免费相片 | 日韩一区二区在线观看视频播放| 精品国产乱码久久久久久浪潮| 亚洲日本青草视频在线怡红院| 日韩专区一卡二卡| 91蝌蚪国产九色| 精品福利一二区| 奇米888四色在线精品|