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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? guidev.c

?? ucCos移植到廣州友善nano2410
?? C
字號(hào):
/*********************************************************************
*                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 ****************************/

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91麻豆精品国产91久久久使用方法| 久久综合久久综合久久| 国产一区二区在线看| 亚洲三级免费观看| 欧美成人官网二区| 色狠狠一区二区| 国产福利精品导航| 日本成人在线视频网站| 亚洲欧美国产三级| 国产色91在线| 日韩欧美一二三四区| 欧美日韩在线播放一区| 99久久精品99国产精品 | 一区二区三区欧美日韩| 欧美精品一区在线观看| 6080国产精品一区二区| 在线亚洲欧美专区二区| 成人国产在线观看| 国产福利精品一区| 国产麻豆9l精品三级站| 日韩福利电影在线| 午夜免费久久看| 亚洲综合一区二区三区| 亚洲色图一区二区三区| 久久精品一区蜜桃臀影院| 日韩欧美国产1| 日韩一级免费一区| 88在线观看91蜜桃国自产| 在线观看免费视频综合| 色综合欧美在线| av成人免费在线观看| 成人av在线播放网站| 成人永久看片免费视频天堂| 国产一区91精品张津瑜| 国产高清不卡二三区| 国产成人综合亚洲91猫咪| 国产美女娇喘av呻吟久久| 经典三级视频一区| 国产一区二区三区av电影 | 日本精品视频一区二区| 99精品偷自拍| 91免费看`日韩一区二区| 成人av电影在线| av不卡一区二区三区| 99精品国产热久久91蜜凸| 91一区一区三区| 欧洲国产伦久久久久久久| 91久久精品一区二区三| 欧美亚一区二区| 欧美日韩大陆在线| 日韩三级视频中文字幕| 日韩精品一区二区在线| 欧美白人最猛性xxxxx69交| 精品国产乱码久久久久久蜜臀| 精品国产露脸精彩对白| 久久欧美中文字幕| 国产精品久久久久久福利一牛影视| 中文字幕人成不卡一区| 亚洲日本在线看| 亚洲综合色噜噜狠狠| 免费视频最近日韩| 国产精品77777| 91网址在线看| 777奇米成人网| 国产日韩欧美电影| 一区二区在线电影| 日韩黄色免费电影| 国产成人精品亚洲777人妖| 91亚洲国产成人精品一区二三| 欧美影院一区二区| 精品福利在线导航| 亚洲欧美偷拍三级| 日韩av电影免费观看高清完整版 | 欧美日韩一二三区| 欧美mv和日韩mv国产网站| 国产精品美女久久久久久久网站| 夜夜嗨av一区二区三区网页| 日日欢夜夜爽一区| 成人性生交大片免费看在线播放| 欧美专区在线观看一区| 日韩精品自拍偷拍| 亚洲女同ⅹxx女同tv| 日本sm残虐另类| 国产91在线|亚洲| 欧美高清性hdvideosex| 久久久三级国产网站| 亚洲一区在线播放| 国产成人福利片| 欧美日韩国产大片| 国产精品久久看| 蜜桃91丨九色丨蝌蚪91桃色| yourporn久久国产精品| 日韩精品在线看片z| 亚洲女人的天堂| 国产综合色产在线精品| 欧美又粗又大又爽| 欧美激情资源网| 蜜桃久久久久久久| 欧美午夜免费电影| 国产精品久久久久久久久图文区| 日韩黄色免费电影| 91亚洲国产成人精品一区二三| 日韩午夜激情视频| 一区二区三区在线观看动漫| 国产一区二区三区电影在线观看| 欧美日韩一区二区不卡| 亚洲人123区| 国产成人精品三级麻豆| 欧美成人精品1314www| 亚洲高清不卡在线观看| 99re这里只有精品6| 久久久美女艺术照精彩视频福利播放 | 91精品久久久久久久99蜜桃| 亚洲欧美日韩中文播放 | 欧美一区二区视频免费观看| 夜夜亚洲天天久久| 成人av电影在线观看| 久久久久久久久久久99999| 蜜臀av一级做a爰片久久| 欧美视频一区在线观看| 亚洲精品国产一区二区精华液 | 在线观看视频一区二区| 国产精品白丝在线| 成人免费电影视频| 亚洲国产精品99久久久久久久久| 久久国产日韩欧美精品| 欧美一区二区精品在线| 午夜久久久影院| 欧美中文字幕不卡| 亚洲一区免费在线观看| 色婷婷av一区二区三区大白胸 | 亚洲色欲色欲www| 色综合久久久久久久| 亚洲欧美一区二区视频| 99精品热视频| 亚洲精品成人精品456| 91香蕉国产在线观看软件| 亚洲久草在线视频| 在线观看区一区二| 午夜成人免费电影| 日韩一区国产二区欧美三区| 麻豆91精品视频| 精品黑人一区二区三区久久| 精品亚洲欧美一区| 欧美国产日韩精品免费观看| 波多野结衣在线一区| 亚洲精品成人在线| 制服丝袜日韩国产| 久久99精品久久久久久国产越南 | 国内精品久久久久影院色| 久久免费偷拍视频| 波多野结衣欧美| 亚洲最新视频在线观看| 国产精品热久久久久夜色精品三区| 福利91精品一区二区三区| 自拍偷拍国产精品| 在线观看不卡一区| 麻豆一区二区三区| 中日韩免费视频中文字幕| 色网站国产精品| 五月天欧美精品| 久久亚洲综合色| 色综合久久天天| 日日夜夜一区二区| 国产亚洲欧美日韩在线一区| 91麻豆国产精品久久| 欧美aaaaaa午夜精品| 中文字幕精品在线不卡| 色综合久久中文综合久久牛| 美女诱惑一区二区| 中文字幕在线一区二区三区| 9191国产精品| 成人网男人的天堂| 偷拍一区二区三区| 久久久久99精品国产片| 日本乱码高清不卡字幕| 久久99精品国产麻豆婷婷洗澡| 国产精品少妇自拍| 欧美高清视频一二三区| 懂色av噜噜一区二区三区av| 亚洲综合久久久| 久久综合色婷婷| 色婷婷国产精品综合在线观看| 看片网站欧美日韩| 亚洲女与黑人做爰| 精品国产亚洲在线| 欧美午夜精品理论片a级按摩| 激情av综合网| 午夜一区二区三区在线观看| 久久久久9999亚洲精品| 欧美乱妇15p| 99国产精品国产精品久久| 极品美女销魂一区二区三区| 亚洲与欧洲av电影| 国产精品久久久一区麻豆最新章节| 欧美一区二区三区影视| 91麻豆免费视频| 国产精品一区二区三区乱码| 五月天久久比比资源色| 亚洲欧美日韩国产另类专区|