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
patch/inc/GUIDRV_Lin_Opt_24.h@0:c00e6c923941, 2015-11-02 (annotated)
- 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?
User | Revision | Line number | New 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 ****************************/ |