RT1050 GUI demo using emWin library

Committer:
alejandroRL
Date:
Thu Sep 20 19:16:34 2018 +0000
Revision:
0:dd702039127a
emWin GUI Demo for RT1050

Who changed what in which revision?

UserRevisionLine numberNew contents of line
alejandroRL 0:dd702039127a 1 /*********************************************************************
alejandroRL 0:dd702039127a 2 * SEGGER Microcontroller GmbH & Co. KG *
alejandroRL 0:dd702039127a 3 * Solutions for real time microcontroller applications *
alejandroRL 0:dd702039127a 4 **********************************************************************
alejandroRL 0:dd702039127a 5 * *
alejandroRL 0:dd702039127a 6 * (c) 1996 - 2016 SEGGER Microcontroller GmbH & Co. KG *
alejandroRL 0:dd702039127a 7 * *
alejandroRL 0:dd702039127a 8 * Internet: www.segger.com Support: support@segger.com *
alejandroRL 0:dd702039127a 9 * *
alejandroRL 0:dd702039127a 10 **********************************************************************
alejandroRL 0:dd702039127a 11
alejandroRL 0:dd702039127a 12 ** emWin V5.38 - Graphical user interface for embedded applications **
alejandroRL 0:dd702039127a 13 All Intellectual Property rights in the Software belongs to SEGGER.
alejandroRL 0:dd702039127a 14 emWin is protected by international copyright laws. Knowledge of the
alejandroRL 0:dd702039127a 15 source code may not be used to write a similar product. This file may
alejandroRL 0:dd702039127a 16 only be used in accordance with the following terms:
alejandroRL 0:dd702039127a 17
alejandroRL 0:dd702039127a 18 The software has been licensed to NXP Semiconductors USA, Inc. whose
alejandroRL 0:dd702039127a 19 registered office is situated at 411 E. Plumeria Drive, San Jose,
alejandroRL 0:dd702039127a 20 CA 95134, USA solely for the purposes of creating libraries for
alejandroRL 0:dd702039127a 21 NXPs M0, M3/M4 and ARM7/9 processor-based devices, sublicensed and
alejandroRL 0:dd702039127a 22 distributed under the terms and conditions of the NXP End User License
alejandroRL 0:dd702039127a 23 Agreement.
alejandroRL 0:dd702039127a 24 Full source code is available at: www.segger.com
alejandroRL 0:dd702039127a 25
alejandroRL 0:dd702039127a 26 We appreciate your understanding and fairness.
alejandroRL 0:dd702039127a 27 ----------------------------------------------------------------------
alejandroRL 0:dd702039127a 28 Licensing information
alejandroRL 0:dd702039127a 29
alejandroRL 0:dd702039127a 30 Licensor: SEGGER Microcontroller Systems LLC
alejandroRL 0:dd702039127a 31 Licensed to: NXP Semiconductors, 1109 McKay Dr, M/S 76, San Jose, CA 95131, USA
alejandroRL 0:dd702039127a 32 Licensed SEGGER software: emWin
alejandroRL 0:dd702039127a 33 License number: GUI-00186
alejandroRL 0:dd702039127a 34 License model: emWin License Agreement, dated August 20th 2011
alejandroRL 0:dd702039127a 35 Licensed product: -
alejandroRL 0:dd702039127a 36 Licensed platform: NXP's ARM 7/9, Cortex-M0,M3,M4
alejandroRL 0:dd702039127a 37 Licensed number of seats: -
alejandroRL 0:dd702039127a 38 ----------------------------------------------------------------------
alejandroRL 0:dd702039127a 39 File : GUIDRV_SLin.h
alejandroRL 0:dd702039127a 40 Purpose : Interface definition for GUIDRV_SLin driver
alejandroRL 0:dd702039127a 41 ---------------------------END-OF-HEADER------------------------------
alejandroRL 0:dd702039127a 42 */
alejandroRL 0:dd702039127a 43
alejandroRL 0:dd702039127a 44 #include "GUIDRV_SLin.h"
alejandroRL 0:dd702039127a 45 #include "GUIDRV_NoOpt_1_8.h"
alejandroRL 0:dd702039127a 46
alejandroRL 0:dd702039127a 47 #ifndef GUIDRV_SLIN_PRIVATE_H
alejandroRL 0:dd702039127a 48 #define GUIDRV_SLIN_PRIVATE_H
alejandroRL 0:dd702039127a 49
alejandroRL 0:dd702039127a 50 #if defined(__cplusplus)
alejandroRL 0:dd702039127a 51 extern "C" { /* Make sure we have C-declarations in C++ programs */
alejandroRL 0:dd702039127a 52 #endif
alejandroRL 0:dd702039127a 53
alejandroRL 0:dd702039127a 54 /*********************************************************************
alejandroRL 0:dd702039127a 55 *
alejandroRL 0:dd702039127a 56 * Defines
alejandroRL 0:dd702039127a 57 *
alejandroRL 0:dd702039127a 58 **********************************************************************
alejandroRL 0:dd702039127a 59 */
alejandroRL 0:dd702039127a 60 //
alejandroRL 0:dd702039127a 61 // Use unique context identified
alejandroRL 0:dd702039127a 62 //
alejandroRL 0:dd702039127a 63 #define DRIVER_CONTEXT DRIVER_CONTEXT_SLIN
alejandroRL 0:dd702039127a 64
alejandroRL 0:dd702039127a 65 /*********************************************************************
alejandroRL 0:dd702039127a 66 *
alejandroRL 0:dd702039127a 67 * Types
alejandroRL 0:dd702039127a 68 *
alejandroRL 0:dd702039127a 69 **********************************************************************
alejandroRL 0:dd702039127a 70 */
alejandroRL 0:dd702039127a 71 typedef struct DRIVER_CONTEXT DRIVER_CONTEXT;
alejandroRL 0:dd702039127a 72
alejandroRL 0:dd702039127a 73 /*********************************************************************
alejandroRL 0:dd702039127a 74 *
alejandroRL 0:dd702039127a 75 * MANAGE_VRAM_CONTEXT
alejandroRL 0:dd702039127a 76 */
alejandroRL 0:dd702039127a 77 typedef struct {
alejandroRL 0:dd702039127a 78 //
alejandroRL 0:dd702039127a 79 // Should be the same for all controllers
alejandroRL 0:dd702039127a 80 //
alejandroRL 0:dd702039127a 81 U8 (* pfReadVMEM ) (DRIVER_CONTEXT * pContext, U32 Off);
alejandroRL 0:dd702039127a 82 void (* pfWriteVMEM) (DRIVER_CONTEXT * pContext, U32 Off, U8 Data);
alejandroRL 0:dd702039127a 83 void (* pfWritePixels)(DRIVER_CONTEXT * pContext, U32 Off, U8 Data);
alejandroRL 0:dd702039127a 84 //
alejandroRL 0:dd702039127a 85 // Depends on controller
alejandroRL 0:dd702039127a 86 //
alejandroRL 0:dd702039127a 87 void (* pfSetADDR) (DRIVER_CONTEXT * pContext, U32 Off);
alejandroRL 0:dd702039127a 88 void (* pfSetWriteNC) (DRIVER_CONTEXT * pContext);
alejandroRL 0:dd702039127a 89 void (* pfSetWriteC) (DRIVER_CONTEXT * pContext);
alejandroRL 0:dd702039127a 90 void (* pfSendCache) (DRIVER_CONTEXT * pContext, int x0, int y0, int x1, int y1);
alejandroRL 0:dd702039127a 91 U32 (* pfXY2Off) (DRIVER_CONTEXT * pContext, int x, int y);
alejandroRL 0:dd702039127a 92 //
alejandroRL 0:dd702039127a 93 // Only used by SSD1848
alejandroRL 0:dd702039127a 94 //
alejandroRL 0:dd702039127a 95 U8 (* pfData) (U8 Data);
alejandroRL 0:dd702039127a 96 void (* pfPutData) (DRIVER_CONTEXT * pContext, U32 Off, U8 Data);
alejandroRL 0:dd702039127a 97 U8 (* pfGetData) (DRIVER_CONTEXT * pContext, U32 Off);
alejandroRL 0:dd702039127a 98 void (* pfWriteData) (DRIVER_CONTEXT * pContext, U8 Data);
alejandroRL 0:dd702039127a 99 //
alejandroRL 0:dd702039127a 100 // Only used by T6963
alejandroRL 0:dd702039127a 101 //
alejandroRL 0:dd702039127a 102 void (* pfCheckBusy) (DRIVER_CONTEXT * pContext, U8 Mask);
alejandroRL 0:dd702039127a 103 void (* pfSetOrg) (DRIVER_CONTEXT * pContext);
alejandroRL 0:dd702039127a 104 } MANAGE_VMEM_API;
alejandroRL 0:dd702039127a 105
alejandroRL 0:dd702039127a 106 /*********************************************************************
alejandroRL 0:dd702039127a 107 *
alejandroRL 0:dd702039127a 108 * DRIVER_CONTEXT
alejandroRL 0:dd702039127a 109 */
alejandroRL 0:dd702039127a 110 struct DRIVER_CONTEXT {
alejandroRL 0:dd702039127a 111 //
alejandroRL 0:dd702039127a 112 // Common data
alejandroRL 0:dd702039127a 113 //
alejandroRL 0:dd702039127a 114 int xSize, ySize;
alejandroRL 0:dd702039127a 115 int vxSize, vySize;
alejandroRL 0:dd702039127a 116 int UseCache;
alejandroRL 0:dd702039127a 117 int MemSize;
alejandroRL 0:dd702039127a 118 U32 BufferOffset;
alejandroRL 0:dd702039127a 119 //
alejandroRL 0:dd702039127a 120 // Cache specific data
alejandroRL 0:dd702039127a 121 //
alejandroRL 0:dd702039127a 122 U8 * pVMEM;
alejandroRL 0:dd702039127a 123 int CacheLocked;
alejandroRL 0:dd702039127a 124 int IsDirty;
alejandroRL 0:dd702039127a 125 GUI_RECT DirtyRect;
alejandroRL 0:dd702039127a 126 //
alejandroRL 0:dd702039127a 127 // Driver specific data
alejandroRL 0:dd702039127a 128 //
alejandroRL 0:dd702039127a 129 int FirstSEG;
alejandroRL 0:dd702039127a 130 int FirstCOM;
alejandroRL 0:dd702039127a 131 int UseMirror; // Used by SSD1848
alejandroRL 0:dd702039127a 132 int CheckBusy; // Used by T6963
alejandroRL 0:dd702039127a 133 U32 Off; // Used by T6963
alejandroRL 0:dd702039127a 134 U8 UseDualScan; // Used by T6963
alejandroRL 0:dd702039127a 135 //
alejandroRL 0:dd702039127a 136 // Accelerators for calculation
alejandroRL 0:dd702039127a 137 //
alejandroRL 0:dd702039127a 138 int BytesPerLine;
alejandroRL 0:dd702039127a 139 int BitsPerPixel;
alejandroRL 0:dd702039127a 140 //
alejandroRL 0:dd702039127a 141 // Mirroring (used by UC1617)
alejandroRL 0:dd702039127a 142 //
alejandroRL 0:dd702039127a 143 const U8 * pMirror;
alejandroRL 0:dd702039127a 144 //
alejandroRL 0:dd702039127a 145 // Pointer to driver internal initialization routine
alejandroRL 0:dd702039127a 146 //
alejandroRL 0:dd702039127a 147 void (* pfInit)(GUI_DEVICE * pDevice);
alejandroRL 0:dd702039127a 148 //
alejandroRL 0:dd702039127a 149 // Set if cache is used
alejandroRL 0:dd702039127a 150 //
alejandroRL 0:dd702039127a 151 int (* pfControlCache)(GUI_DEVICE * pDevice, int Cmd);
alejandroRL 0:dd702039127a 152 void (* pfRefresh )(GUI_DEVICE * pDevice);
alejandroRL 0:dd702039127a 153 //
alejandroRL 0:dd702039127a 154 // API-Tables
alejandroRL 0:dd702039127a 155 //
alejandroRL 0:dd702039127a 156 MANAGE_VMEM_API ManageVMEM_API; // Memory management
alejandroRL 0:dd702039127a 157 GUI_PORT_API HW_API; // Hardware routines
alejandroRL 0:dd702039127a 158 };
alejandroRL 0:dd702039127a 159
alejandroRL 0:dd702039127a 160 /*********************************************************************
alejandroRL 0:dd702039127a 161 *
alejandroRL 0:dd702039127a 162 * LOG2PHYS_xxx
alejandroRL 0:dd702039127a 163 */
alejandroRL 0:dd702039127a 164 #define LOG2PHYS_X ( x )
alejandroRL 0:dd702039127a 165 #define LOG2PHYS_X_OX (pContext->xSize - x - 1)
alejandroRL 0:dd702039127a 166 #define LOG2PHYS_X_OY ( x )
alejandroRL 0:dd702039127a 167 #define LOG2PHYS_X_OXY (pContext->xSize - x - 1)
alejandroRL 0:dd702039127a 168 #define LOG2PHYS_X_OS ( y )
alejandroRL 0:dd702039127a 169 #define LOG2PHYS_X_OSX (pContext->ySize - y - 1)
alejandroRL 0:dd702039127a 170 #define LOG2PHYS_X_OSY ( y )
alejandroRL 0:dd702039127a 171 #define LOG2PHYS_X_OSXY (pContext->ySize - y - 1)
alejandroRL 0:dd702039127a 172
alejandroRL 0:dd702039127a 173 #define LOG2PHYS_Y ( y )
alejandroRL 0:dd702039127a 174 #define LOG2PHYS_Y_OX ( y )
alejandroRL 0:dd702039127a 175 #define LOG2PHYS_Y_OY (pContext->ySize - y - 1)
alejandroRL 0:dd702039127a 176 #define LOG2PHYS_Y_OXY (pContext->ySize - y - 1)
alejandroRL 0:dd702039127a 177 #define LOG2PHYS_Y_OS ( x )
alejandroRL 0:dd702039127a 178 #define LOG2PHYS_Y_OSX ( x )
alejandroRL 0:dd702039127a 179 #define LOG2PHYS_Y_OSY (pContext->xSize - x - 1)
alejandroRL 0:dd702039127a 180 #define LOG2PHYS_Y_OSXY (pContext->xSize - x - 1)
alejandroRL 0:dd702039127a 181
alejandroRL 0:dd702039127a 182 /*********************************************************************
alejandroRL 0:dd702039127a 183 *
alejandroRL 0:dd702039127a 184 * _SetPixelIndex_##EXT
alejandroRL 0:dd702039127a 185 */
alejandroRL 0:dd702039127a 186 #define DEFINE_SETPIXELINDEX(EXT, X_PHYS, Y_PHYS) \
alejandroRL 0:dd702039127a 187 static void _SetPixelIndex_##EXT(GUI_DEVICE * pDevice, int x, int y, LCD_PIXELINDEX PixelIndex) { \
alejandroRL 0:dd702039127a 188 DRIVER_CONTEXT * pContext; \
alejandroRL 0:dd702039127a 189 \
alejandroRL 0:dd702039127a 190 pContext = (DRIVER_CONTEXT *)pDevice->u.pContext; \
alejandroRL 0:dd702039127a 191 _SetPixelIndex(pContext, X_PHYS, Y_PHYS, PixelIndex); \
alejandroRL 0:dd702039127a 192 }
alejandroRL 0:dd702039127a 193
alejandroRL 0:dd702039127a 194 /*********************************************************************
alejandroRL 0:dd702039127a 195 *
alejandroRL 0:dd702039127a 196 * _GetPixelIndex_##EXT
alejandroRL 0:dd702039127a 197 */
alejandroRL 0:dd702039127a 198 #define DEFINE_GETPIXELINDEX(EXT, X_PHYS, Y_PHYS) \
alejandroRL 0:dd702039127a 199 static LCD_PIXELINDEX _GetPixelIndex_##EXT(GUI_DEVICE * pDevice, int x, int y) { \
alejandroRL 0:dd702039127a 200 DRIVER_CONTEXT * pContext; \
alejandroRL 0:dd702039127a 201 LCD_PIXELINDEX PixelIndex; \
alejandroRL 0:dd702039127a 202 \
alejandroRL 0:dd702039127a 203 pContext = (DRIVER_CONTEXT *)pDevice->u.pContext; \
alejandroRL 0:dd702039127a 204 PixelIndex = _GetPixelIndex(pContext, X_PHYS, Y_PHYS); \
alejandroRL 0:dd702039127a 205 return PixelIndex; \
alejandroRL 0:dd702039127a 206 }
alejandroRL 0:dd702039127a 207
alejandroRL 0:dd702039127a 208 /*********************************************************************
alejandroRL 0:dd702039127a 209 *
alejandroRL 0:dd702039127a 210 * _GetDevProp_##EXT
alejandroRL 0:dd702039127a 211 */
alejandroRL 0:dd702039127a 212 #define DEFINE_GETDEVPROP(EXT, MX, MY, SWAP) \
alejandroRL 0:dd702039127a 213 static I32 _GetDevProp_##EXT(GUI_DEVICE * pDevice, int Index) { \
alejandroRL 0:dd702039127a 214 switch (Index) { \
alejandroRL 0:dd702039127a 215 case LCD_DEVCAP_MIRROR_X: return MX; \
alejandroRL 0:dd702039127a 216 case LCD_DEVCAP_MIRROR_Y: return MY; \
alejandroRL 0:dd702039127a 217 case LCD_DEVCAP_SWAP_XY: return SWAP; \
alejandroRL 0:dd702039127a 218 } \
alejandroRL 0:dd702039127a 219 return _GetDevProp(pDevice, Index); \
alejandroRL 0:dd702039127a 220 }
alejandroRL 0:dd702039127a 221
alejandroRL 0:dd702039127a 222 /*********************************************************************
alejandroRL 0:dd702039127a 223 *
alejandroRL 0:dd702039127a 224 * DEFINE_FUNCTIONS
alejandroRL 0:dd702039127a 225 */
alejandroRL 0:dd702039127a 226 #define DEFINE_FUNCTIONS(EXT, X_PHYS, Y_PHYS, MX, MY, SWAP) \
alejandroRL 0:dd702039127a 227 DEFINE_SETPIXELINDEX(EXT, X_PHYS, Y_PHYS) \
alejandroRL 0:dd702039127a 228 DEFINE_GETPIXELINDEX(EXT, X_PHYS, Y_PHYS) \
alejandroRL 0:dd702039127a 229 DEFINE_GETDEVPROP(EXT, MX, MY, SWAP) \
alejandroRL 0:dd702039127a 230 DEFINE_GUI_DEVICE_API(EXT)
alejandroRL 0:dd702039127a 231
alejandroRL 0:dd702039127a 232 /*********************************************************************
alejandroRL 0:dd702039127a 233 *
alejandroRL 0:dd702039127a 234 * Private functions
alejandroRL 0:dd702039127a 235 *
alejandroRL 0:dd702039127a 236 **********************************************************************
alejandroRL 0:dd702039127a 237 */
alejandroRL 0:dd702039127a 238 void (*GUIDRV__SLin_GetDevFunc(GUI_DEVICE ** ppDevice, int Index))(void);
alejandroRL 0:dd702039127a 239 void GUIDRV__SLin_SetOrg (GUI_DEVICE * pDevice, int x, int y);
alejandroRL 0:dd702039127a 240 I32 GUIDRV__SLin_GetDevProp(GUI_DEVICE * pDevice, int Index);
alejandroRL 0:dd702039127a 241 void GUIDRV__SLin_GetRect (GUI_DEVICE * pDevice, LCD_RECT * pRect);
alejandroRL 0:dd702039127a 242
alejandroRL 0:dd702039127a 243 void GUIDRV__SLin_SendCache (DRIVER_CONTEXT * pContext, int x0, int y0, int x1, int y1);
alejandroRL 0:dd702039127a 244 void GUIDRV__SLin_WriteVMEM (DRIVER_CONTEXT * pContext, U32 Off, U8 Data, int x, int y);
alejandroRL 0:dd702039127a 245
alejandroRL 0:dd702039127a 246 #if defined(__cplusplus)
alejandroRL 0:dd702039127a 247 }
alejandroRL 0:dd702039127a 248 #endif
alejandroRL 0:dd702039127a 249
alejandroRL 0:dd702039127a 250 #endif
alejandroRL 0:dd702039127a 251
alejandroRL 0:dd702039127a 252 /*************************** End of file ****************************/