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_SSD1926_Private.h
alejandroRL 0:dd702039127a 40 Purpose : Interface definition for GUIDRV_SSD1926 driver
alejandroRL 0:dd702039127a 41 ---------------------------END-OF-HEADER------------------------------
alejandroRL 0:dd702039127a 42 */
alejandroRL 0:dd702039127a 43
alejandroRL 0:dd702039127a 44 #include "GUIDRV_SSD1926.h"
alejandroRL 0:dd702039127a 45 #include "GUIDRV_NoOpt_1_8.h"
alejandroRL 0:dd702039127a 46
alejandroRL 0:dd702039127a 47 #ifndef GUIDRV_SSD1926_PRIVATE_H
alejandroRL 0:dd702039127a 48 #define GUIDRV_SSD1926_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_SSD1926
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 // Function pointers for writing to display controller
alejandroRL 0:dd702039127a 80 //
alejandroRL 0:dd702039127a 81 void (* pfWriteReg) (DRIVER_CONTEXT * pContext, U16 Reg, U16 Data);
alejandroRL 0:dd702039127a 82 void (* pfWriteAddrW)(DRIVER_CONTEXT * pContext, U32 Addr);
alejandroRL 0:dd702039127a 83 void (* pfWriteAddrB)(DRIVER_CONTEXT * pContext, U32 Addr);
alejandroRL 0:dd702039127a 84 void (* pfWrite8) (DRIVER_CONTEXT * pContext, U8 Data);
alejandroRL 0:dd702039127a 85 void (* pfSetAddr) (DRIVER_CONTEXT * pContext, U32 Addr);
alejandroRL 0:dd702039127a 86 U8 (* pfRead8) (DRIVER_CONTEXT * pContext, U32 Addr);
alejandroRL 0:dd702039127a 87 void (* pfFlush) (DRIVER_CONTEXT * pContext);
alejandroRL 0:dd702039127a 88 } MANAGE_VMEM_API;
alejandroRL 0:dd702039127a 89
alejandroRL 0:dd702039127a 90 /*********************************************************************
alejandroRL 0:dd702039127a 91 *
alejandroRL 0:dd702039127a 92 * DRIVER_CONTEXT
alejandroRL 0:dd702039127a 93 */
alejandroRL 0:dd702039127a 94 struct DRIVER_CONTEXT {
alejandroRL 0:dd702039127a 95 //
alejandroRL 0:dd702039127a 96 // Common data
alejandroRL 0:dd702039127a 97 //
alejandroRL 0:dd702039127a 98 int xSize, ySize;
alejandroRL 0:dd702039127a 99 int vxSize, vySize;
alejandroRL 0:dd702039127a 100 int UseCache;
alejandroRL 0:dd702039127a 101 int MemSize;
alejandroRL 0:dd702039127a 102 //
alejandroRL 0:dd702039127a 103 // Driver specific data
alejandroRL 0:dd702039127a 104 //
alejandroRL 0:dd702039127a 105 int FirstSEG;
alejandroRL 0:dd702039127a 106 int FirstCOM;
alejandroRL 0:dd702039127a 107 //
alejandroRL 0:dd702039127a 108 // Accelerators for calculation
alejandroRL 0:dd702039127a 109 //
alejandroRL 0:dd702039127a 110 int BytesPerLine;
alejandroRL 0:dd702039127a 111 int BitsPerPixel;
alejandroRL 0:dd702039127a 112 //
alejandroRL 0:dd702039127a 113 // VRAM
alejandroRL 0:dd702039127a 114 //
alejandroRL 0:dd702039127a 115 U8 * pVMEM;
alejandroRL 0:dd702039127a 116 //
alejandroRL 0:dd702039127a 117 // Colors
alejandroRL 0:dd702039127a 118 //
alejandroRL 0:dd702039127a 119 U32 * pColors;
alejandroRL 0:dd702039127a 120 //
alejandroRL 0:dd702039127a 121 // Buffer for one line of data
alejandroRL 0:dd702039127a 122 //
alejandroRL 0:dd702039127a 123 U16 * aBuffer; // Allocated buffer
alejandroRL 0:dd702039127a 124 U16 * pBuffer; // Pointer for writing operations
alejandroRL 0:dd702039127a 125 int NumBytesInBuffer; // Number of bytes in buffer
alejandroRL 0:dd702039127a 126 U32 Addr; // Destination address of buffer
alejandroRL 0:dd702039127a 127 int Odd; // 1 if the next address to be written is odd
alejandroRL 0:dd702039127a 128 //
alejandroRL 0:dd702039127a 129 // Pointer to driver internal initialization routine
alejandroRL 0:dd702039127a 130 //
alejandroRL 0:dd702039127a 131 void (* pfInit) (GUI_DEVICE * pDevice);
alejandroRL 0:dd702039127a 132 void (* pfCheck)(GUI_DEVICE * pDevice);
alejandroRL 0:dd702039127a 133 //
alejandroRL 0:dd702039127a 134 // API-Tables
alejandroRL 0:dd702039127a 135 //
alejandroRL 0:dd702039127a 136 MANAGE_VMEM_API ManageVMEM_API; // Memory management
alejandroRL 0:dd702039127a 137 GUI_PORT_API HW_API; // Hardware routines
alejandroRL 0:dd702039127a 138 };
alejandroRL 0:dd702039127a 139
alejandroRL 0:dd702039127a 140 /*********************************************************************
alejandroRL 0:dd702039127a 141 *
alejandroRL 0:dd702039127a 142 * Access macros
alejandroRL 0:dd702039127a 143 */
alejandroRL 0:dd702039127a 144 #define LCD_WRITE_A0(Data) pContext->HW_API.pfWrite8_A0(Data)
alejandroRL 0:dd702039127a 145 #define LCD_WRITE_A1(Data) pContext->HW_API.pfWrite8_A1(Data)
alejandroRL 0:dd702039127a 146 #define LCD_WRITEM_A0(pData, NumItems) pContext->HW_API.pfWriteM8_A0(pData, NumItems)
alejandroRL 0:dd702039127a 147 #define LCD_WRITEM_A1(pData, NumItems) pContext->HW_API.pfWriteM8_A1(pData, NumItems)
alejandroRL 0:dd702039127a 148 #define LCD_READ_A1(Data) Data = pContext->HW_API.pfRead8_A1()
alejandroRL 0:dd702039127a 149
alejandroRL 0:dd702039127a 150 /*********************************************************************
alejandroRL 0:dd702039127a 151 *
alejandroRL 0:dd702039127a 152 * LOG2PHYS_xxx
alejandroRL 0:dd702039127a 153 */
alejandroRL 0:dd702039127a 154 #define LOG2PHYS_X ( x )
alejandroRL 0:dd702039127a 155 #define LOG2PHYS_X_OX (pContext->xSize - x - 1)
alejandroRL 0:dd702039127a 156 #define LOG2PHYS_X_OY ( x )
alejandroRL 0:dd702039127a 157 #define LOG2PHYS_X_OXY (pContext->xSize - x - 1)
alejandroRL 0:dd702039127a 158 #define LOG2PHYS_X_OS ( y )
alejandroRL 0:dd702039127a 159 #define LOG2PHYS_X_OSX (pContext->ySize - y - 1)
alejandroRL 0:dd702039127a 160 #define LOG2PHYS_X_OSY ( y )
alejandroRL 0:dd702039127a 161 #define LOG2PHYS_X_OSXY (pContext->ySize - y - 1)
alejandroRL 0:dd702039127a 162
alejandroRL 0:dd702039127a 163 #define LOG2PHYS_Y ( y )
alejandroRL 0:dd702039127a 164 #define LOG2PHYS_Y_OX ( y )
alejandroRL 0:dd702039127a 165 #define LOG2PHYS_Y_OY (pContext->ySize - y - 1)
alejandroRL 0:dd702039127a 166 #define LOG2PHYS_Y_OXY (pContext->ySize - y - 1)
alejandroRL 0:dd702039127a 167 #define LOG2PHYS_Y_OS ( x )
alejandroRL 0:dd702039127a 168 #define LOG2PHYS_Y_OSX ( x )
alejandroRL 0:dd702039127a 169 #define LOG2PHYS_Y_OSY (pContext->xSize - x - 1)
alejandroRL 0:dd702039127a 170 #define LOG2PHYS_Y_OSXY (pContext->xSize - x - 1)
alejandroRL 0:dd702039127a 171
alejandroRL 0:dd702039127a 172 /*********************************************************************
alejandroRL 0:dd702039127a 173 *
alejandroRL 0:dd702039127a 174 * _SetPixelIndex_##EXT
alejandroRL 0:dd702039127a 175 */
alejandroRL 0:dd702039127a 176 #define DEFINE_SETPIXELINDEX(EXT, X_PHYS, Y_PHYS) \
alejandroRL 0:dd702039127a 177 static void _SetPixelIndex_##EXT(GUI_DEVICE * pDevice, int x, int y, LCD_PIXELINDEX PixelIndex) { \
alejandroRL 0:dd702039127a 178 DRIVER_CONTEXT * pContext; \
alejandroRL 0:dd702039127a 179 \
alejandroRL 0:dd702039127a 180 pContext = (DRIVER_CONTEXT *)pDevice->u.pContext; \
alejandroRL 0:dd702039127a 181 _SetPixelIndex(pContext, X_PHYS, Y_PHYS, PixelIndex); \
alejandroRL 0:dd702039127a 182 }
alejandroRL 0:dd702039127a 183
alejandroRL 0:dd702039127a 184 /*********************************************************************
alejandroRL 0:dd702039127a 185 *
alejandroRL 0:dd702039127a 186 * _GetPixelIndex_##EXT
alejandroRL 0:dd702039127a 187 */
alejandroRL 0:dd702039127a 188 #define DEFINE_GETPIXELINDEX(EXT, X_PHYS, Y_PHYS) \
alejandroRL 0:dd702039127a 189 static LCD_PIXELINDEX _GetPixelIndex_##EXT(GUI_DEVICE * pDevice, int x, int y) { \
alejandroRL 0:dd702039127a 190 DRIVER_CONTEXT * pContext; \
alejandroRL 0:dd702039127a 191 LCD_PIXELINDEX PixelIndex; \
alejandroRL 0:dd702039127a 192 \
alejandroRL 0:dd702039127a 193 pContext = (DRIVER_CONTEXT *)pDevice->u.pContext; \
alejandroRL 0:dd702039127a 194 PixelIndex = _GetPixelIndex(pContext, X_PHYS, Y_PHYS); \
alejandroRL 0:dd702039127a 195 return PixelIndex; \
alejandroRL 0:dd702039127a 196 }
alejandroRL 0:dd702039127a 197
alejandroRL 0:dd702039127a 198 /*********************************************************************
alejandroRL 0:dd702039127a 199 *
alejandroRL 0:dd702039127a 200 * _GetDevProp_##EXT
alejandroRL 0:dd702039127a 201 */
alejandroRL 0:dd702039127a 202 #define DEFINE_GETDEVPROP(EXT, MX, MY, SWAP) \
alejandroRL 0:dd702039127a 203 static I32 _GetDevProp_##EXT(GUI_DEVICE * pDevice, int Index) { \
alejandroRL 0:dd702039127a 204 switch (Index) { \
alejandroRL 0:dd702039127a 205 case LCD_DEVCAP_MIRROR_X: return MX; \
alejandroRL 0:dd702039127a 206 case LCD_DEVCAP_MIRROR_Y: return MY; \
alejandroRL 0:dd702039127a 207 case LCD_DEVCAP_SWAP_XY: return SWAP; \
alejandroRL 0:dd702039127a 208 } \
alejandroRL 0:dd702039127a 209 return _GetDevProp(pDevice, Index); \
alejandroRL 0:dd702039127a 210 }
alejandroRL 0:dd702039127a 211
alejandroRL 0:dd702039127a 212 /*********************************************************************
alejandroRL 0:dd702039127a 213 *
alejandroRL 0:dd702039127a 214 * DEFINE_FUNCTIONS
alejandroRL 0:dd702039127a 215 */
alejandroRL 0:dd702039127a 216 #define DEFINE_FUNCTIONS(EXT, X_PHYS, Y_PHYS, MX, MY, SWAP) \
alejandroRL 0:dd702039127a 217 DEFINE_SETPIXELINDEX(EXT, X_PHYS, Y_PHYS) \
alejandroRL 0:dd702039127a 218 DEFINE_GETPIXELINDEX(EXT, X_PHYS, Y_PHYS) \
alejandroRL 0:dd702039127a 219 DEFINE_GETDEVPROP(EXT, MX, MY, SWAP) \
alejandroRL 0:dd702039127a 220 DEFINE_GUI_DEVICE_API(EXT)
alejandroRL 0:dd702039127a 221
alejandroRL 0:dd702039127a 222 /*********************************************************************
alejandroRL 0:dd702039127a 223 *
alejandroRL 0:dd702039127a 224 * Private functions
alejandroRL 0:dd702039127a 225 *
alejandroRL 0:dd702039127a 226 **********************************************************************
alejandroRL 0:dd702039127a 227 */
alejandroRL 0:dd702039127a 228 void (*GUIDRV__SSD1926_GetDevFunc(GUI_DEVICE ** ppDevice, int Index))(void);
alejandroRL 0:dd702039127a 229 void GUIDRV__SSD1926_SetOrg (GUI_DEVICE * pDevice, int x, int y);
alejandroRL 0:dd702039127a 230 I32 GUIDRV__SSD1926_GetDevProp(GUI_DEVICE * pDevice, int Index);
alejandroRL 0:dd702039127a 231 void GUIDRV__SSD1926_GetRect (GUI_DEVICE * pDevice, LCD_RECT * pRect);
alejandroRL 0:dd702039127a 232
alejandroRL 0:dd702039127a 233 #if defined(__cplusplus)
alejandroRL 0:dd702039127a 234 }
alejandroRL 0:dd702039127a 235 #endif
alejandroRL 0:dd702039127a 236
alejandroRL 0:dd702039127a 237 #endif
alejandroRL 0:dd702039127a 238
alejandroRL 0:dd702039127a 239 /*************************** End of file ****************************/