LCD_L0_Generic.c
上传用户:zbk8730
上传日期:2017-08-10
资源大小:12168k
文件大小:12k
源码类别:

uCOS

开发平台:

C/C++

  1. /*********************************************************************
  2. *                SEGGER MICROCONTROLLER SYSTEME GmbH                 *
  3. *        Solutions for real time microcontroller applications        *
  4. **********************************************************************
  5. *                                                                    *
  6. *        (c) 2002         SEGGER Microcontroller Systeme GmbH        *
  7. *                                                                    *
  8. *        Internet: www.segger.com    Support:  support@segger.com    *
  9. *                                                                    *
  10. **********************************************************************
  11. **** emWin/GSC Grafical user interface for embedded applications ****
  12. emWin is protected by international copyright laws. Knowledge of the
  13. source code may not be used to write a similar product. This file may
  14. only be used in accordance with a license and should not be re-
  15. distributed in any way. We appreciate your understanding and fairness.
  16. ----------------------------------------------------------------------
  17. File        : LCD_L0_Generic.h
  18. Purpose     : Color conversion routines for LCD-drivers
  19.               This file may not be compiled by itself, bud needs
  20.               to be included in every LCD driver
  21. ---------------------------END-OF-HEADER------------------------------
  22. */
  23. #include <stddef.h>           /* needed for definition of NULL */
  24. #include "LCD_Private.H"      /* private modul definitions & config */
  25. #include "GUI_Private.H"
  26. #include "GUIDebug.h"
  27. /*
  28.         *********************************************************
  29.         *                                                       *
  30.         *                  Color info                           *
  31.         *                                                       *
  32.         *********************************************************
  33. */
  34. #if (LCD_FIXEDPALETTE==0)
  35.   static 
  36.   #if !LCD_PHYSCOLORS_IN_RAM
  37.     const
  38.   #endif
  39.   LCD_COLOR       LCD_PhysColors[] = { LCD_PHYSCOLORS };
  40.   const LCD_PHYSPALETTE LCD_PhysPal      = { LCD_NUM_COLORS, &LCD_PhysColors[0] };
  41. #endif
  42. #if LCD_NUM_DISPLAYS > 1
  43.   #if (LCD_FIXEDPALETTE_1 == 0)
  44.     static  const LCD_COLOR       LCD_PhysColors_[] = { LCD_PHYSCOLORS_1 };
  45.             const LCD_PHYSPALETTE LCD_PhysPal_      = { LCD_NUM_COLORS_1, &LCD_PhysColors_1[0] };
  46.   #endif
  47. #endif
  48. /*
  49.       *************************************************
  50.       *                                               *
  51.       *             LCD Device                        *
  52. *       (if memory devices are supported)       *
  53.       *                                               *
  54.       *************************************************
  55. */
  56. #if GUI_SUPPORT_MEMDEV
  57. const tLCDDEV_APIList LCD_L0_APIList = {
  58. #if LCD_YMAG==1
  59.   LCD_L0_Color2Index,
  60.   LCD_L0_DrawBitmap,
  61.   LCD_L0_DrawHLine,
  62.   LCD_L0_DrawVLine,
  63.   LCD_L0_FillRect,
  64.   LCD_L0_GetPixelIndex,
  65.   LCD_L0_GetRect,
  66.   LCD_L0_Index2Color,
  67.   LCD_L0_SetPixelIndex,
  68.   LCD_L0_XorPixel
  69. #else
  70.   LCD_L0_Color2Index,
  71.   LCD_L0_MAG_DrawBitmap,
  72.   LCD_L0_MAG_DrawHLine,
  73.   LCD_L0_MAG_DrawVLine,
  74.   LCD_L0_MAG_FillRect,
  75.   LCD_L0_MAG_GetPixelIndex,
  76.   LCD_L0_GetRect,          /* Original routine is o.k. here, since we use the logical
  77.                                  coordinates for clipping, which are not magnified */
  78.   LCD_L0_Index2Color,
  79.   LCD_L0_MAG_SetPixelIndex,
  80.   LCD_L0_MAG_XorPixel,
  81. #endif
  82. };
  83. #endif
  84. /*********************************************************************
  85. *
  86. *           Color conversion routines display 0
  87. *
  88. **********************************************************************
  89. */
  90. #if   LCD_FIXEDPALETTE == 0
  91.   #define COLOR2INDEX(Color) LCD_Color2Index_0(Color, &LCD_PhysPal)
  92.   #define INDEX2COLOR(Index) LCD_Index2Color_0(Index, &LCD_PhysPal)
  93. #elif LCD_FIXEDPALETTE == 1
  94.   #define COLOR2INDEX(Color) LCD_Color2Index_1(Color)
  95.   #define INDEX2COLOR(Index) LCD_Index2Color_1(Index)
  96. #elif LCD_FIXEDPALETTE == 2
  97.   #define COLOR2INDEX(Color) LCD_Color2Index_2(Color)
  98.   #define INDEX2COLOR(Index) LCD_Index2Color_2(Index)
  99. #elif LCD_FIXEDPALETTE == 4
  100.   #define COLOR2INDEX(Color) LCD_Color2Index_4(Color)
  101.   #define INDEX2COLOR(Index) LCD_Index2Color_4(Index)
  102. #elif (LCD_FIXEDPALETTE == 111) && (LCD_SWAP_RB==0)
  103.   #define COLOR2INDEX(Color) LCD_Color2Index_111(Color)
  104.   #define INDEX2COLOR(Index) LCD_Index2Color_111(Index)
  105. #elif (LCD_FIXEDPALETTE == 111) && (LCD_SWAP_RB)
  106.   #define COLOR2INDEX(Color) LCD_Color2Index_M111(Color)
  107.   #define INDEX2COLOR(Index) LCD_Index2Color_M111(Index)
  108. #elif (LCD_FIXEDPALETTE == 222) && (LCD_SWAP_RB==0)
  109.   #define COLOR2INDEX(Color) LCD_Color2Index_222(Color)
  110.   #define INDEX2COLOR(Index) LCD_Index2Color_222(Index)
  111. #elif (LCD_FIXEDPALETTE == 222) && (LCD_SWAP_RB==1)
  112.   #define COLOR2INDEX(Color) LCD_Color2Index_M222(Color)
  113.   #define INDEX2COLOR(Index) LCD_Index2Color_M222(Index)
  114. #elif (LCD_FIXEDPALETTE == 233) && (LCD_SWAP_RB==0)
  115.   #define COLOR2INDEX(Color) LCD_Color2Index_233(Color)
  116.   #define INDEX2COLOR(Index) LCD_Index2Color_233(Index)
  117. #elif (LCD_FIXEDPALETTE == 233) && (LCD_SWAP_RB==1)
  118.   #define COLOR2INDEX(Color) LCD_Color2Index_M233(Color)
  119.   #define INDEX2COLOR(Index) LCD_Index2Color_M233(Index)
  120. #elif (LCD_FIXEDPALETTE == 323) && (LCD_SWAP_RB==0)
  121.   #define COLOR2INDEX(Color) LCD_Color2Index_323(Color)
  122.   #define INDEX2COLOR(Index) LCD_Index2Color_323(Index)
  123. #elif (LCD_FIXEDPALETTE == 323) && (LCD_SWAP_RB==1)
  124.   #define COLOR2INDEX(Color) LCD_Color2Index_M323(Color)
  125.   #define INDEX2COLOR(Index) LCD_Index2Color_M323(Index)
  126. #elif (LCD_FIXEDPALETTE == 332) && (LCD_SWAP_RB==0)
  127.   #define COLOR2INDEX(Color) LCD_Color2Index_332(Color)
  128.   #define INDEX2COLOR(Index) LCD_Index2Color_332(Index)
  129. #elif (LCD_FIXEDPALETTE == 332) && (LCD_SWAP_RB==1)
  130.   #define COLOR2INDEX(Color) LCD_Color2Index_M332(Color)
  131.   #define INDEX2COLOR(Index) LCD_Index2Color_M332(Index)
  132. #elif (LCD_FIXEDPALETTE == 444)  && (LCD_SWAP_RB==0)
  133.   #define COLOR2INDEX(Color) LCD_Color2Index_444(Color)
  134.   #define INDEX2COLOR(Index) LCD_Index2Color_444(Index)
  135. #elif (LCD_FIXEDPALETTE == 555)  && (LCD_SWAP_RB==0)
  136.   #define COLOR2INDEX(Color) LCD_Color2Index_555(Color)
  137.   #define INDEX2COLOR(Index) LCD_Index2Color_555(Index)
  138. #elif (LCD_FIXEDPALETTE == 555)  && (LCD_SWAP_RB)
  139.   #define COLOR2INDEX(Color) LCD_Color2Index_M555(Color)
  140.   #define INDEX2COLOR(Index) LCD_Index2Color_M555(Index)
  141. #elif (LCD_FIXEDPALETTE == 565) && (LCD_SWAP_RB==0)
  142.   #define COLOR2INDEX(Color) LCD_Color2Index_565(Color)
  143.   #define INDEX2COLOR(Index) LCD_Index2Color_565(Index)
  144. #elif (LCD_FIXEDPALETTE == 565) && (LCD_SWAP_RB)
  145.   #define COLOR2INDEX(Color) LCD_Color2Index_M565(Color)
  146.   #define INDEX2COLOR(Index) LCD_Index2Color_M565(Index)
  147. #elif LCD_FIXEDPALETTE == 8666
  148.   #define COLOR2INDEX(Color) LCD_Color2Index_8666(Color)
  149.   #define INDEX2COLOR(Index) LCD_Index2Color_8666(Index)
  150. #else
  151.   #error Unsupported color mode
  152. #endif
  153. unsigned int LCD_L0_Color2Index(LCD_COLOR Color) {
  154.   unsigned int Index;
  155.   Index = COLOR2INDEX(Color);
  156.   #if LCD_REVERSE
  157.     Index ^= ((1<<LCD_BITSPERPIXEL)-1);
  158.   #endif
  159.   return Index;
  160. }
  161. LCD_COLOR LCD_L0_Index2Color(int Index) {
  162.   #if LCD_REVERSE
  163.     Index ^= ((1<<LCD_BITSPERPIXEL)-1);
  164.   #endif
  165.   return INDEX2COLOR(Index);
  166. }
  167. /*********************************************************************
  168. *
  169. *           LCD_L0_GetRect
  170. *
  171. **********************************************************************
  172. */
  173. void LCD_L0_GetRect (LCD_RECT *pRect) {
  174.   pRect->x0 = 0;
  175.   pRect->y0 = 0;
  176.   pRect->x1 = LCD_XSIZE-1;
  177.   pRect->y1 = LCD_YSIZE-1;
  178. }
  179. /*********************************************************************
  180. *
  181. *           Color conversion routines display 1
  182. *
  183. **********************************************************************
  184. */
  185. #if LCD_NUM_DISPLAYS > 1
  186.   #undef COLOR2INDEX
  187.   #undef INDEX2COLOR
  188.   #if   LCD_FIXEDPALETTE_1 == 0
  189.     #define COLOR2INDEX(Color) LCD_Color2Index_0(Color, &LCD_PhysPal)
  190.     #define INDEX2COLOR(Index) LCD_Index2Color_0(Index, &LCD_PhysPal)
  191.   #elif LCD_FIXEDPALETTE_1 == 1
  192.     #define COLOR2INDEX(Color) LCD_Color2Index_1(Color)
  193.     #define INDEX2COLOR(Index) LCD_Index2Color_1(Index)
  194.   #elif LCD_FIXEDPALETTE_1 == 2
  195.     #define COLOR2INDEX(Color) LCD_Color2Index_2(Color)
  196.     #define INDEX2COLOR(Index) LCD_Index2Color_2(Index)
  197.   #elif LCD_FIXEDPALETTE_1 == 4
  198.     #define COLOR2INDEX(Color) LCD_Color2Index_4(Color)
  199.     #define INDEX2COLOR(Index) LCD_Index2Color_4(Index)
  200.   #elif (LCD_FIXEDPALETTE_1 == 111) && (LCD_SWAP_RB_1==0)
  201.     #define COLOR2INDEX(Color) LCD_Color2Index_111(Color)
  202.     #define INDEX2COLOR(Index) LCD_Index2Color_111(Index)
  203.   #elif (LCD_FIXEDPALETTE_1 == 111) && (LCD_SWAP_RB_1)
  204.     #define COLOR2INDEX(Color) LCD_Color2Index_M111(Color)
  205.     #define INDEX2COLOR(Index) LCD_Index2Color_M111(Index)
  206.   #elif (LCD_FIXEDPALETTE_1 == 222) && (LCD_SWAP_RB_1==0)
  207.     #define COLOR2INDEX(Color) LCD_Color2Index_222(Color)
  208.     #define INDEX2COLOR(Index) LCD_Index2Color_222(Index)
  209.   #elif (LCD_FIXEDPALETTE_1 == 222) && (LCD_SWAP_RB_1==1)
  210.     #define COLOR2INDEX(Color) LCD_Color2Index_M222(Color)
  211.     #define INDEX2COLOR(Index) LCD_Index2Color_M222(Index)
  212.   #elif (LCD_FIXEDPALETTE_1 == 233) && (LCD_SWAP_RB_1==0)
  213.     #define COLOR2INDEX(Color) LCD_Color2Index_233(Color)
  214.     #define INDEX2COLOR(Index) LCD_Index2Color_233(Index)
  215.   #elif (LCD_FIXEDPALETTE_1 == 233) && (LCD_SWAP_RB_1==1)
  216.     #define COLOR2INDEX(Color) LCD_Color2Index_M233(Color)
  217.     #define INDEX2COLOR(Index) LCD_Index2Color_M233(Index)
  218.   #elif (LCD_FIXEDPALETTE_1 == 323) && (LCD_SWAP_RB_1==0)
  219.     #define COLOR2INDEX(Color) LCD_Color2Index_323(Color)
  220.     #define INDEX2COLOR(Index) LCD_Index2Color_323(Index)
  221.   #elif (LCD_FIXEDPALETTE_1 == 323) && (LCD_SWAP_RB_1==1)
  222.     #define COLOR2INDEX(Color) LCD_Color2Index_M323(Color)
  223.     #define INDEX2COLOR(Index) LCD_Index2Color_M323(Index)
  224.   #elif (LCD_FIXEDPALETTE_1 == 332) && (LCD_SWAP_RB_1==0)
  225.     #define COLOR2INDEX(Color) LCD_Color2Index_332(Color)
  226.     #define INDEX2COLOR(Index) LCD_Index2Color_332(Index)
  227.   #elif (LCD_FIXEDPALETTE_1 == 332) && (LCD_SWAP_RB_1==1)
  228.     #define COLOR2INDEX(Color) LCD_Color2Index_M332(Color)
  229.     #define INDEX2COLOR(Index) LCD_Index2Color_M332(Index)
  230.   #elif (LCD_FIXEDPALETTE_1 == 555)  && (LCD_SWAP_RB_1==0)
  231.     #define COLOR2INDEX(Color) LCD_Color2Index_555(Color)
  232.     #define INDEX2COLOR(Index) LCD_Index2Color_555(Index)
  233.   #elif (LCD_FIXEDPALETTE_1 == 555)  && (LCD_SWAP_RB_1)
  234.     #define COLOR2INDEX(Color) LCD_Color2Index_M555(Color)
  235.     #define INDEX2COLOR(Index) LCD_Index2Color_M555(Index)
  236.   #elif (LCD_FIXEDPALETTE_1 == 565) && (LCD_SWAP_RB_1==0)
  237.     #define COLOR2INDEX(Color) LCD_Color2Index_565(Color)
  238.     #define INDEX2COLOR(Index) LCD_Index2Color_565(Index)
  239.   #elif (LCD_FIXEDPALETTE_1 == 565) && (LCD_SWAP_RB_1)
  240.     #define COLOR2INDEX(Color) LCD_Color2Index_M565(Color)
  241.     #define INDEX2COLOR(Index) LCD_Index2Color_M565(Index)
  242.   #elif LCD_FIXEDPALETTE_1 == 8666
  243.     #define COLOR2INDEX(Color) LCD_Color2Index_8666(Color)
  244.     #define INDEX2COLOR(Index) LCD_Index2Color_8666(Index)
  245.   #else
  246.     #error Unsupported color mode
  247.   #endif
  248.   unsigned int LCD_L0_1_Color2Index(LCD_COLOR Color) {
  249.     unsigned int Index;
  250.     Index = COLOR2INDEX(Color);
  251.     #if LCD_REVERSE
  252.       Index ^= ((1<<LCD_BITSPERPIXEL)-1);
  253.     #endif
  254.     return Index;
  255.   }
  256.   LCD_COLOR LCD_L0_1_Index2Color(int Index) {
  257.     #if LCD_REVERSE
  258.       Index ^= ((1<<LCD_BITSPERPIXEL)-1);
  259.     #endif
  260.     return INDEX2COLOR(Index);
  261.   }
  262.   /*********************************************************************
  263.   *
  264.   *           LCD_L0_1_GetRect
  265.   *
  266.   **********************************************************************
  267.   */
  268.   void LCD_L0_1_GetRect (LCD_RECT *pRect) {
  269.     pRect->x0 = 0;
  270.     pRect->y0 = 0;
  271.     pRect->x1 = LCD_XSIZE_1 - 1;
  272.     pRect->y1 = LCD_YSIZE_1 - 1;
  273.   }
  274. #endif