this repository aim to make the official ST DISCO F746NG demo from STM32Cube_FW_F7_V1.2.0 working on mbed.

Dependencies:   BSP_DISCO_F746NG_patch mbed-rtos mbed

Committer:
NirT
Date:
Mon Nov 02 23:38:08 2015 +0000
Revision:
0:c00e6c923941
Error: Incomplete type is not allowed in "patch/LwIP/src/include/lwip/dhcp.h", Line: 83, Col: 4; ; and more like this.

Who changed what in which revision?

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