Headers for emWin lib

Dependents:   DISCO-F746NG_rtos_test

Committer:
redbird
Date:
Sat Mar 26 22:49:50 2016 +0000
Revision:
0:1bf8f02b0770
new code integration

Who changed what in which revision?

UserRevisionLine numberNew contents of line
redbird 0:1bf8f02b0770 1 /*********************************************************************
redbird 0:1bf8f02b0770 2 * SEGGER Microcontroller GmbH & Co. KG *
redbird 0:1bf8f02b0770 3 * Solutions for real time microcontroller applications *
redbird 0:1bf8f02b0770 4 **********************************************************************
redbird 0:1bf8f02b0770 5 * *
redbird 0:1bf8f02b0770 6 * (c) 1996 - 2014 SEGGER Microcontroller GmbH & Co. KG *
redbird 0:1bf8f02b0770 7 * *
redbird 0:1bf8f02b0770 8 * Internet: www.segger.com Support: support@segger.com *
redbird 0:1bf8f02b0770 9 * *
redbird 0:1bf8f02b0770 10 **********************************************************************
redbird 0:1bf8f02b0770 11
redbird 0:1bf8f02b0770 12 ** emWin V5.24 - Graphical user interface for embedded applications **
redbird 0:1bf8f02b0770 13 All Intellectual Property rights in the Software belongs to SEGGER.
redbird 0:1bf8f02b0770 14 emWin is protected by international copyright laws. Knowledge of the
redbird 0:1bf8f02b0770 15 source code may not be used to write a similar product. This file may
redbird 0:1bf8f02b0770 16 only be used in accordance with the following terms:
redbird 0:1bf8f02b0770 17
redbird 0:1bf8f02b0770 18 The software has been licensed to NXP Semiconductors USA, Inc. whose
redbird 0:1bf8f02b0770 19 registered office is situated at 411 E. Plumeria Drive, San Jose,
redbird 0:1bf8f02b0770 20 CA 95134, USA solely for the purposes of creating libraries for
redbird 0:1bf8f02b0770 21 NXPs M0, M3/M4 and ARM7/9 processor-based devices, sublicensed and
redbird 0:1bf8f02b0770 22 distributed under the terms and conditions of the NXP End User License
redbird 0:1bf8f02b0770 23 Agreement.
redbird 0:1bf8f02b0770 24 Full source code is available at: www.segger.com
redbird 0:1bf8f02b0770 25
redbird 0:1bf8f02b0770 26 We appreciate your understanding and fairness.
redbird 0:1bf8f02b0770 27 ----------------------------------------------------------------------
redbird 0:1bf8f02b0770 28 File : GUIDRV_Lin_Opt_24.h
redbird 0:1bf8f02b0770 29 Purpose : Optimized routines, included by GUIDRV_Lin_..._24.c
redbird 0:1bf8f02b0770 30 ---------------------------END-OF-HEADER------------------------------
redbird 0:1bf8f02b0770 31 */
redbird 0:1bf8f02b0770 32
redbird 0:1bf8f02b0770 33 /*********************************************************************
redbird 0:1bf8f02b0770 34 *
redbird 0:1bf8f02b0770 35 * Static functions
redbird 0:1bf8f02b0770 36 *
redbird 0:1bf8f02b0770 37 **********************************************************************
redbird 0:1bf8f02b0770 38 */
redbird 0:1bf8f02b0770 39
redbird 0:1bf8f02b0770 40 #ifdef __cplusplus
redbird 0:1bf8f02b0770 41 extern "C" {
redbird 0:1bf8f02b0770 42 #endif
redbird 0:1bf8f02b0770 43
redbird 0:1bf8f02b0770 44 /*********************************************************************
redbird 0:1bf8f02b0770 45 *
redbird 0:1bf8f02b0770 46 * _FillRectOpt24
redbird 0:1bf8f02b0770 47 *
redbird 0:1bf8f02b0770 48 * Purpose:
redbird 0:1bf8f02b0770 49 * Optimized filling routine for 24 bpp
redbird 0:1bf8f02b0770 50 */
redbird 0:1bf8f02b0770 51 static void _FillRectOpt24(GUI_DEVICE * pDevice, int x0, int y0, int x1, int y1) {
redbird 0:1bf8f02b0770 52 DRIVER_CONTEXT * pContext;
redbird 0:1bf8f02b0770 53 U32 Off, Off0, OffLine;
redbird 0:1bf8f02b0770 54 int RemPixels, NumLines, RemLines, RemItems, Odd;
redbird 0:1bf8f02b0770 55 U32 Data, Data0, Data1, Data2;
redbird 0:1bf8f02b0770 56 LCD_PIXELINDEX ColorIndex;
redbird 0:1bf8f02b0770 57
redbird 0:1bf8f02b0770 58 pContext = (DRIVER_CONTEXT *)pDevice->u.pContext;
redbird 0:1bf8f02b0770 59 Off0 = XY2OFF32(pContext->vxSizePhys, x0, y0);
redbird 0:1bf8f02b0770 60 RemPixels = x1 - x0 + 1;
redbird 0:1bf8f02b0770 61 Odd = x0 & 3;
redbird 0:1bf8f02b0770 62 NumLines = y1 - y0 + 1;
redbird 0:1bf8f02b0770 63 OffLine = (pContext->vxSizePhys + pContext->vxSizePhys +pContext->vxSizePhys) >> 2;
redbird 0:1bf8f02b0770 64 RemItems = 0;
redbird 0:1bf8f02b0770 65 Off = 0;
redbird 0:1bf8f02b0770 66 if (GUI_pContext->DrawMode & LCD_DRAWMODE_XOR) {
redbird 0:1bf8f02b0770 67 //
redbird 0:1bf8f02b0770 68 // First triple DWORD
redbird 0:1bf8f02b0770 69 //
redbird 0:1bf8f02b0770 70 if (Odd) {
redbird 0:1bf8f02b0770 71 for (RemLines = NumLines; RemLines; RemLines--) {
redbird 0:1bf8f02b0770 72 RemItems = RemPixels;
redbird 0:1bf8f02b0770 73 Off = Off0 + OffLine * (RemLines - 1);
redbird 0:1bf8f02b0770 74 Data = READ_MEM32(pContext->VRAMAddr, Off);
redbird 0:1bf8f02b0770 75 switch (Odd) {
redbird 0:1bf8f02b0770 76 case 1:
redbird 0:1bf8f02b0770 77 Data ^= 0xFF000000;
redbird 0:1bf8f02b0770 78 WRITE_MEM32(pContext->VRAMAddr, Off, Data);
redbird 0:1bf8f02b0770 79 Off++;
redbird 0:1bf8f02b0770 80 Data = READ_MEM32(pContext->VRAMAddr, Off);
redbird 0:1bf8f02b0770 81 Data ^= 0x0000FFFF;
redbird 0:1bf8f02b0770 82 RemItems--;
redbird 0:1bf8f02b0770 83 if (!RemItems) {
redbird 0:1bf8f02b0770 84 WRITE_MEM32(pContext->VRAMAddr, Off, Data);
redbird 0:1bf8f02b0770 85 break;
redbird 0:1bf8f02b0770 86 }
redbird 0:1bf8f02b0770 87 //
redbird 0:1bf8f02b0770 88 // no break at this position required...
redbird 0:1bf8f02b0770 89 //
redbird 0:1bf8f02b0770 90 case 2:
redbird 0:1bf8f02b0770 91 Data ^= 0xFFFF0000;
redbird 0:1bf8f02b0770 92 WRITE_MEM32(pContext->VRAMAddr, Off, Data);
redbird 0:1bf8f02b0770 93 Off++;
redbird 0:1bf8f02b0770 94 Data = READ_MEM32(pContext->VRAMAddr, Off);
redbird 0:1bf8f02b0770 95 Data ^= 0x000000FF;
redbird 0:1bf8f02b0770 96 RemItems--;
redbird 0:1bf8f02b0770 97 if (!RemItems) {
redbird 0:1bf8f02b0770 98 WRITE_MEM32(pContext->VRAMAddr, Off, Data);
redbird 0:1bf8f02b0770 99 break;
redbird 0:1bf8f02b0770 100 }
redbird 0:1bf8f02b0770 101 //
redbird 0:1bf8f02b0770 102 // no break at this position required...
redbird 0:1bf8f02b0770 103 //
redbird 0:1bf8f02b0770 104 case 3:
redbird 0:1bf8f02b0770 105 Data ^= 0xFFFFFF00;
redbird 0:1bf8f02b0770 106 RemItems--;
redbird 0:1bf8f02b0770 107 WRITE_MEM32(pContext->VRAMAddr, Off, Data);
redbird 0:1bf8f02b0770 108 Off++;
redbird 0:1bf8f02b0770 109 }
redbird 0:1bf8f02b0770 110 }
redbird 0:1bf8f02b0770 111 Off0 = Off;
redbird 0:1bf8f02b0770 112 RemPixels -= (RemPixels - RemItems);
redbird 0:1bf8f02b0770 113 }
redbird 0:1bf8f02b0770 114 //
redbird 0:1bf8f02b0770 115 // Complete triple DWORDS
redbird 0:1bf8f02b0770 116 //
redbird 0:1bf8f02b0770 117 if (RemPixels >= 4) {
redbird 0:1bf8f02b0770 118 for (RemLines = NumLines; RemLines; RemLines--) {
redbird 0:1bf8f02b0770 119 RemItems = RemPixels;
redbird 0:1bf8f02b0770 120 Off = Off0 + OffLine * (RemLines - 1);
redbird 0:1bf8f02b0770 121 do {
redbird 0:1bf8f02b0770 122 Data = READ_MEM32(pContext->VRAMAddr, Off + 0);
redbird 0:1bf8f02b0770 123 Data ^= 0xFFFFFFFF;
redbird 0:1bf8f02b0770 124 WRITE_MEM32(pContext->VRAMAddr, Off + 0, Data);
redbird 0:1bf8f02b0770 125 Data = READ_MEM32(pContext->VRAMAddr, Off + 1);
redbird 0:1bf8f02b0770 126 Data ^= 0xFFFFFFFF;
redbird 0:1bf8f02b0770 127 WRITE_MEM32(pContext->VRAMAddr, Off + 1, Data);
redbird 0:1bf8f02b0770 128 Data = READ_MEM32(pContext->VRAMAddr, Off + 2);
redbird 0:1bf8f02b0770 129 Data ^= 0xFFFFFFFF;
redbird 0:1bf8f02b0770 130 WRITE_MEM32(pContext->VRAMAddr, Off + 2, Data);
redbird 0:1bf8f02b0770 131 Off += 3;
redbird 0:1bf8f02b0770 132 } while ((RemItems -= 4) >= 4);
redbird 0:1bf8f02b0770 133 }
redbird 0:1bf8f02b0770 134 Off0 = Off;
redbird 0:1bf8f02b0770 135 RemPixels -= (RemPixels >> 2) << 2;
redbird 0:1bf8f02b0770 136 }
redbird 0:1bf8f02b0770 137 //
redbird 0:1bf8f02b0770 138 // Last triple DWORD
redbird 0:1bf8f02b0770 139 //
redbird 0:1bf8f02b0770 140 if (RemPixels) {
redbird 0:1bf8f02b0770 141 for (RemLines = NumLines; RemLines; RemLines--) {
redbird 0:1bf8f02b0770 142 RemItems = RemPixels;
redbird 0:1bf8f02b0770 143 Off = Off0 + OffLine * (RemLines - 1);
redbird 0:1bf8f02b0770 144 Data = READ_MEM32(pContext->VRAMAddr, Off);
redbird 0:1bf8f02b0770 145 Data ^= 0x00FFFFFF;
redbird 0:1bf8f02b0770 146 RemItems--;
redbird 0:1bf8f02b0770 147 if (!RemItems) {
redbird 0:1bf8f02b0770 148 WRITE_MEM32(pContext->VRAMAddr, Off, Data);
redbird 0:1bf8f02b0770 149 continue;
redbird 0:1bf8f02b0770 150 }
redbird 0:1bf8f02b0770 151 Data ^= 0xFF000000;
redbird 0:1bf8f02b0770 152 WRITE_MEM32(pContext->VRAMAddr, Off, Data);
redbird 0:1bf8f02b0770 153 Off++;
redbird 0:1bf8f02b0770 154 Data = READ_MEM32(pContext->VRAMAddr, Off);
redbird 0:1bf8f02b0770 155 Data ^= 0x0000FFFF;
redbird 0:1bf8f02b0770 156 RemItems--;
redbird 0:1bf8f02b0770 157 if (!RemItems) {
redbird 0:1bf8f02b0770 158 WRITE_MEM32(pContext->VRAMAddr, Off, Data);
redbird 0:1bf8f02b0770 159 continue;
redbird 0:1bf8f02b0770 160 }
redbird 0:1bf8f02b0770 161 Data ^= 0xFFFF0000;
redbird 0:1bf8f02b0770 162 WRITE_MEM32(pContext->VRAMAddr, Off, Data);
redbird 0:1bf8f02b0770 163 Off++;
redbird 0:1bf8f02b0770 164 Data = READ_MEM32(pContext->VRAMAddr, Off);
redbird 0:1bf8f02b0770 165 Data ^= 0x000000FF;
redbird 0:1bf8f02b0770 166 WRITE_MEM32(pContext->VRAMAddr, Off, Data);
redbird 0:1bf8f02b0770 167 }
redbird 0:1bf8f02b0770 168 }
redbird 0:1bf8f02b0770 169 } else {
redbird 0:1bf8f02b0770 170 ColorIndex = LCD__GetColorIndex();
redbird 0:1bf8f02b0770 171 //
redbird 0:1bf8f02b0770 172 // First triple DWORD
redbird 0:1bf8f02b0770 173 //
redbird 0:1bf8f02b0770 174 if (Odd) {
redbird 0:1bf8f02b0770 175 for (RemLines = NumLines; RemLines; RemLines--) {
redbird 0:1bf8f02b0770 176 RemItems = RemPixels;
redbird 0:1bf8f02b0770 177 Off = Off0 + OffLine * (RemLines - 1);
redbird 0:1bf8f02b0770 178 Data = READ_MEM32(pContext->VRAMAddr, Off);
redbird 0:1bf8f02b0770 179 switch (Odd) {
redbird 0:1bf8f02b0770 180 case 1:
redbird 0:1bf8f02b0770 181 Data &= 0x00FFFFFF;
redbird 0:1bf8f02b0770 182 Data |= ColorIndex << 24;
redbird 0:1bf8f02b0770 183 WRITE_MEM32(pContext->VRAMAddr, Off, Data);
redbird 0:1bf8f02b0770 184 Off++;
redbird 0:1bf8f02b0770 185 Data = READ_MEM32(pContext->VRAMAddr, Off);
redbird 0:1bf8f02b0770 186 Data &= 0xFFFF0000;
redbird 0:1bf8f02b0770 187 Data |= ColorIndex >> 8;
redbird 0:1bf8f02b0770 188 RemItems--;
redbird 0:1bf8f02b0770 189 if (!RemItems) {
redbird 0:1bf8f02b0770 190 WRITE_MEM32(pContext->VRAMAddr, Off, Data);
redbird 0:1bf8f02b0770 191 break;
redbird 0:1bf8f02b0770 192 }
redbird 0:1bf8f02b0770 193 //
redbird 0:1bf8f02b0770 194 // no break at this position required...
redbird 0:1bf8f02b0770 195 //
redbird 0:1bf8f02b0770 196 case 2:
redbird 0:1bf8f02b0770 197 Data &= 0x0000FFFF;
redbird 0:1bf8f02b0770 198 Data |= ColorIndex << 16;
redbird 0:1bf8f02b0770 199 WRITE_MEM32(pContext->VRAMAddr, Off, Data);
redbird 0:1bf8f02b0770 200 Off++;
redbird 0:1bf8f02b0770 201 Data = READ_MEM32(pContext->VRAMAddr, Off);
redbird 0:1bf8f02b0770 202 Data &= 0xFFFFFF00;
redbird 0:1bf8f02b0770 203 Data |= ColorIndex >> 16;
redbird 0:1bf8f02b0770 204 RemItems--;
redbird 0:1bf8f02b0770 205 if (!RemItems) {
redbird 0:1bf8f02b0770 206 WRITE_MEM32(pContext->VRAMAddr, Off, Data);
redbird 0:1bf8f02b0770 207 break;
redbird 0:1bf8f02b0770 208 }
redbird 0:1bf8f02b0770 209 //
redbird 0:1bf8f02b0770 210 // no break at this position required...
redbird 0:1bf8f02b0770 211 //
redbird 0:1bf8f02b0770 212 case 3:
redbird 0:1bf8f02b0770 213 Data &= 0x000000FF;
redbird 0:1bf8f02b0770 214 Data |= ColorIndex << 8;
redbird 0:1bf8f02b0770 215 RemItems--;
redbird 0:1bf8f02b0770 216 WRITE_MEM32(pContext->VRAMAddr, Off, Data);
redbird 0:1bf8f02b0770 217 Off++;
redbird 0:1bf8f02b0770 218 }
redbird 0:1bf8f02b0770 219 }
redbird 0:1bf8f02b0770 220 Off0 = Off;
redbird 0:1bf8f02b0770 221 RemPixels -= (RemPixels - RemItems);
redbird 0:1bf8f02b0770 222 }
redbird 0:1bf8f02b0770 223 //
redbird 0:1bf8f02b0770 224 // Complete triple DWORDS
redbird 0:1bf8f02b0770 225 //
redbird 0:1bf8f02b0770 226 if (RemPixels >= 4) {
redbird 0:1bf8f02b0770 227 for (RemLines = NumLines; RemLines; RemLines--) {
redbird 0:1bf8f02b0770 228 RemItems = RemPixels;
redbird 0:1bf8f02b0770 229 Off = Off0 + OffLine * (RemLines - 1);
redbird 0:1bf8f02b0770 230 Data0 = (ColorIndex ) | (ColorIndex << 24);
redbird 0:1bf8f02b0770 231 Data1 = (ColorIndex >> 8) | (ColorIndex << 16);
redbird 0:1bf8f02b0770 232 Data2 = (ColorIndex >> 16) | (ColorIndex << 8);
redbird 0:1bf8f02b0770 233 do {
redbird 0:1bf8f02b0770 234 WRITE_MEM32(pContext->VRAMAddr, Off + 0, Data0);
redbird 0:1bf8f02b0770 235 WRITE_MEM32(pContext->VRAMAddr, Off + 1, Data1);
redbird 0:1bf8f02b0770 236 WRITE_MEM32(pContext->VRAMAddr, Off + 2, Data2);
redbird 0:1bf8f02b0770 237 Off += 3;
redbird 0:1bf8f02b0770 238 } while ((RemItems -= 4) >= 4);
redbird 0:1bf8f02b0770 239 }
redbird 0:1bf8f02b0770 240 Off0 = Off;
redbird 0:1bf8f02b0770 241 RemPixels -= (RemPixels >> 2) << 2;
redbird 0:1bf8f02b0770 242 }
redbird 0:1bf8f02b0770 243 //
redbird 0:1bf8f02b0770 244 // Last triple DWORD
redbird 0:1bf8f02b0770 245 //
redbird 0:1bf8f02b0770 246 if (RemPixels) {
redbird 0:1bf8f02b0770 247 for (RemLines = NumLines; RemLines; RemLines--) {
redbird 0:1bf8f02b0770 248 RemItems = RemPixels;
redbird 0:1bf8f02b0770 249 Off = Off0 + OffLine * (RemLines - 1);
redbird 0:1bf8f02b0770 250 Data = READ_MEM32(pContext->VRAMAddr, Off);
redbird 0:1bf8f02b0770 251 Data &= 0xFF000000;
redbird 0:1bf8f02b0770 252 Data |= ColorIndex;
redbird 0:1bf8f02b0770 253 RemItems--;
redbird 0:1bf8f02b0770 254 if (!RemItems) {
redbird 0:1bf8f02b0770 255 WRITE_MEM32(pContext->VRAMAddr, Off, Data);
redbird 0:1bf8f02b0770 256 continue;
redbird 0:1bf8f02b0770 257 }
redbird 0:1bf8f02b0770 258 Data &= 0x00FFFFFF;
redbird 0:1bf8f02b0770 259 Data |= ColorIndex << 24;
redbird 0:1bf8f02b0770 260 WRITE_MEM32(pContext->VRAMAddr, Off, Data);
redbird 0:1bf8f02b0770 261 Off++;
redbird 0:1bf8f02b0770 262 Data = READ_MEM32(pContext->VRAMAddr, Off);
redbird 0:1bf8f02b0770 263 Data &= 0xFFFF0000;
redbird 0:1bf8f02b0770 264 Data |= ColorIndex >> 8;
redbird 0:1bf8f02b0770 265 RemItems--;
redbird 0:1bf8f02b0770 266 if (!RemItems) {
redbird 0:1bf8f02b0770 267 WRITE_MEM32(pContext->VRAMAddr, Off, Data);
redbird 0:1bf8f02b0770 268 continue;
redbird 0:1bf8f02b0770 269 }
redbird 0:1bf8f02b0770 270 Data &= 0x0000FFFF;
redbird 0:1bf8f02b0770 271 Data |= ColorIndex << 16;
redbird 0:1bf8f02b0770 272 WRITE_MEM32(pContext->VRAMAddr, Off, Data);
redbird 0:1bf8f02b0770 273 Off++;
redbird 0:1bf8f02b0770 274 Data = READ_MEM32(pContext->VRAMAddr, Off);
redbird 0:1bf8f02b0770 275 Data &= 0xFFFFFF00;
redbird 0:1bf8f02b0770 276 Data |= ColorIndex >> 16;
redbird 0:1bf8f02b0770 277 WRITE_MEM32(pContext->VRAMAddr, Off, Data);
redbird 0:1bf8f02b0770 278 }
redbird 0:1bf8f02b0770 279 }
redbird 0:1bf8f02b0770 280 }
redbird 0:1bf8f02b0770 281 }
redbird 0:1bf8f02b0770 282
redbird 0:1bf8f02b0770 283 #ifdef __cplusplus
redbird 0:1bf8f02b0770 284 }
redbird 0:1bf8f02b0770 285 #endif
redbird 0:1bf8f02b0770 286 /*************************** End of file ****************************/