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 * The Clear BSD License
alejandroRL 0:dd702039127a 3 * Copyright (c) 2016, Freescale Semiconductor, Inc.
alejandroRL 0:dd702039127a 4 * Copyright 2016-2017 NXP
alejandroRL 0:dd702039127a 5 * All rights reserved.
alejandroRL 0:dd702039127a 6 *
alejandroRL 0:dd702039127a 7 * Redistribution and use in source and binary forms, with or without modification,
alejandroRL 0:dd702039127a 8 * are permitted (subject to the limitations in the disclaimer below) provided
alejandroRL 0:dd702039127a 9 * that the following conditions are met:
alejandroRL 0:dd702039127a 10 *
alejandroRL 0:dd702039127a 11 * o Redistributions of source code must retain the above copyright notice, this list
alejandroRL 0:dd702039127a 12 * of conditions and the following disclaimer.
alejandroRL 0:dd702039127a 13 *
alejandroRL 0:dd702039127a 14 * o Redistributions in binary form must reproduce the above copyright notice, this
alejandroRL 0:dd702039127a 15 * list of conditions and the following disclaimer in the documentation and/or
alejandroRL 0:dd702039127a 16 * other materials provided with the distribution.
alejandroRL 0:dd702039127a 17 *
alejandroRL 0:dd702039127a 18 * o Neither the name of the copyright holder nor the names of its
alejandroRL 0:dd702039127a 19 * contributors may be used to endorse or promote products derived from this
alejandroRL 0:dd702039127a 20 * software without specific prior written permission.
alejandroRL 0:dd702039127a 21 *
alejandroRL 0:dd702039127a 22 * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE.
alejandroRL 0:dd702039127a 23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
alejandroRL 0:dd702039127a 24 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
alejandroRL 0:dd702039127a 25 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
alejandroRL 0:dd702039127a 26 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
alejandroRL 0:dd702039127a 27 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
alejandroRL 0:dd702039127a 28 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
alejandroRL 0:dd702039127a 29 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
alejandroRL 0:dd702039127a 30 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
alejandroRL 0:dd702039127a 31 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
alejandroRL 0:dd702039127a 32 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
alejandroRL 0:dd702039127a 33 */
alejandroRL 0:dd702039127a 34
alejandroRL 0:dd702039127a 35 #include "GUI.h"
alejandroRL 0:dd702039127a 36 #include "WM.h"
alejandroRL 0:dd702039127a 37 #include "emwin_support.h"
alejandroRL 0:dd702039127a 38 #include "GUIDRV_Lin.h"
alejandroRL 0:dd702039127a 39
alejandroRL 0:dd702039127a 40 #include "fsl_elcdif.h"
alejandroRL 0:dd702039127a 41 #include "fsl_lpi2c.h"
alejandroRL 0:dd702039127a 42 #include "fsl_ft5406_rt.h"
alejandroRL 0:dd702039127a 43
alejandroRL 0:dd702039127a 44 /*
alejandroRL 0:dd702039127a 45 ** Define everything necessary for different color depths
alejandroRL 0:dd702039127a 46 */
alejandroRL 0:dd702039127a 47 #if LCD_BITS_PER_PIXEL == 8 /* Palette definition for LUT */
alejandroRL 0:dd702039127a 48 static uint32_t lutData[ELCDIF_LUT_ENTRY_NUM];
alejandroRL 0:dd702039127a 49 static const LCD_COLOR _aColors_256[] = {
alejandroRL 0:dd702039127a 50 0x000000, 0x000033, 0x000066, 0x000099, 0x0000CC, 0x0000FF, 0x003300, 0x003333, 0x003366, 0x003399, 0x0033CC,
alejandroRL 0:dd702039127a 51 0x0033FF, 0x006600, 0x006633, 0x006666, 0x006699, 0x0066CC, 0x0066FF, 0x009900, 0x009933, 0x009966, 0x009999,
alejandroRL 0:dd702039127a 52 0x0099CC, 0x0099FF, 0x00CC00, 0x00CC33, 0x00CC66, 0x00CC99, 0x00CCCC, 0x00CCFF, 0x00FF00, 0x00FF33, 0x00FF66,
alejandroRL 0:dd702039127a 53 0x00FF99, 0x00FFCC, 0x00FFFF, 0x330000, 0x330033, 0x330066, 0x330099, 0x3300CC, 0x3300FF, 0x333300, 0x333333,
alejandroRL 0:dd702039127a 54 0x333366, 0x333399, 0x3333CC, 0x3333FF, 0x336600, 0x336633, 0x336666, 0x336699, 0x3366CC, 0x3366FF, 0x339900,
alejandroRL 0:dd702039127a 55 0x339933, 0x339966, 0x339999, 0x3399CC, 0x3399FF, 0x33CC00, 0x33CC33, 0x33CC66, 0x33CC99, 0x33CCCC, 0x33CCFF,
alejandroRL 0:dd702039127a 56 0x33FF00, 0x33FF33, 0x33FF66, 0x33FF99, 0x33FFCC, 0x33FFFF, 0x660000, 0x660033, 0x660066, 0x660099, 0x6600CC,
alejandroRL 0:dd702039127a 57 0x6600FF, 0x663300, 0x663333, 0x663366, 0x663399, 0x6633CC, 0x6633FF, 0x666600, 0x666633, 0x666666, 0x666699,
alejandroRL 0:dd702039127a 58 0x6666CC, 0x6666FF, 0x669900, 0x669933, 0x669966, 0x669999, 0x6699CC, 0x6699FF, 0x66CC00, 0x66CC33, 0x66CC66,
alejandroRL 0:dd702039127a 59 0x66CC99, 0x66CCCC, 0x66CCFF, 0x66FF00, 0x66FF33, 0x66FF66, 0x66FF99, 0x66FFCC, 0x66FFFF, 0x000000, 0x000000,
alejandroRL 0:dd702039127a 60 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
alejandroRL 0:dd702039127a 61 0x111111, 0x222222, 0x333333, 0x444444, 0x555555, 0x666666, 0x777777, 0x888888, 0x999999, 0xAAAAAA, 0xBBBBBB,
alejandroRL 0:dd702039127a 62 0xCCCCCC, 0xDDDDDD, 0xEEEEEE, 0xFFFFFF, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
alejandroRL 0:dd702039127a 63 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x990000, 0x990033, 0x990066, 0x990099, 0x9900CC, 0x9900FF,
alejandroRL 0:dd702039127a 64 0x993300, 0x993333, 0x993366, 0x993399, 0x9933CC, 0x9933FF, 0x996600, 0x996633, 0x996666, 0x996699, 0x9966CC,
alejandroRL 0:dd702039127a 65 0x9966FF, 0x999900, 0x999933, 0x999966, 0x999999, 0x9999CC, 0x9999FF, 0x99CC00, 0x99CC33, 0x99CC66, 0x99CC99,
alejandroRL 0:dd702039127a 66 0x99CCCC, 0x99CCFF, 0x99FF00, 0x99FF33, 0x99FF66, 0x99FF99, 0x99FFCC, 0x99FFFF, 0xCC0000, 0xCC0033, 0xCC0066,
alejandroRL 0:dd702039127a 67 0xCC0099, 0xCC00CC, 0xCC00FF, 0xCC3300, 0xCC3333, 0xCC3366, 0xCC3399, 0xCC33CC, 0xCC33FF, 0xCC6600, 0xCC6633,
alejandroRL 0:dd702039127a 68 0xCC6666, 0xCC6699, 0xCC66CC, 0xCC66FF, 0xCC9900, 0xCC9933, 0xCC9966, 0xCC9999, 0xCC99CC, 0xCC99FF, 0xCCCC00,
alejandroRL 0:dd702039127a 69 0xCCCC33, 0xCCCC66, 0xCCCC99, 0xCCCCCC, 0xCCCCFF, 0xCCFF00, 0xCCFF33, 0xCCFF66, 0xCCFF99, 0xCCFFCC, 0xCCFFFF,
alejandroRL 0:dd702039127a 70 0xFF0000, 0xFF0033, 0xFF0066, 0xFF0099, 0xFF00CC, 0xFF00FF, 0xFF3300, 0xFF3333, 0xFF3366, 0xFF3399, 0xFF33CC,
alejandroRL 0:dd702039127a 71 0xFF33FF, 0xFF6600, 0xFF6633, 0xFF6666, 0xFF6699, 0xFF66CC, 0xFF66FF, 0xFF9900, 0xFF9933, 0xFF9966, 0xFF9999,
alejandroRL 0:dd702039127a 72 0xFF99CC, 0xFF99FF, 0xFFCC00, 0xFFCC33, 0xFFCC66, 0xFFCC99, 0xFFCCCC, 0xFFCCFF, 0xFFFF00, 0xFFFF33, 0xFFFF66,
alejandroRL 0:dd702039127a 73 0xFFFF99, 0xFFFFCC, 0xFFFFFF
alejandroRL 0:dd702039127a 74
alejandroRL 0:dd702039127a 75 };
alejandroRL 0:dd702039127a 76 static const LCD_PHYSPALETTE _aPalette_256 = {ARRAY_SIZE(_aColors_256), _aColors_256};
alejandroRL 0:dd702039127a 77 #endif
alejandroRL 0:dd702039127a 78 #if LCD_BITS_PER_PIXEL < 32 /* Buffer definitions for emwin and LCD framebuffer */
alejandroRL 0:dd702039127a 79 AT_NONCACHEABLE_SECTION_ALIGN(uint8_t s_gui_memory[GUI_NUMBYTES * LCD_BYTES_PER_PIXEL], FRAME_BUFFER_ALIGN);
alejandroRL 0:dd702039127a 80 AT_NONCACHEABLE_SECTION_ALIGN(uint8_t s_vram_buffer[VRAM_SIZE * GUI_BUFFERS * LCD_BYTES_PER_PIXEL], FRAME_BUFFER_ALIGN);
alejandroRL 0:dd702039127a 81 #else
alejandroRL 0:dd702039127a 82 uint32_t s_gui_memory[(GUI_NUMBYTES)];
alejandroRL 0:dd702039127a 83 uint32_t s_vram_buffer[VRAM_SIZE * GUI_BUFFERS];
alejandroRL 0:dd702039127a 84 #endif
alejandroRL 0:dd702039127a 85
alejandroRL 0:dd702039127a 86 /* Memory address definitions */
alejandroRL 0:dd702039127a 87 #define GUI_MEMORY_ADDR ((uint32_t)s_gui_memory)
alejandroRL 0:dd702039127a 88 #define VRAM_ADDR ((uint32_t)s_vram_buffer)
alejandroRL 0:dd702039127a 89
alejandroRL 0:dd702039127a 90 static volatile int32_t s_LCDpendingBuffer = -1;
alejandroRL 0:dd702039127a 91
alejandroRL 0:dd702039127a 92 /*******************************************************************************
alejandroRL 0:dd702039127a 93 * Implementation of PortAPI for emWin LCD driver
alejandroRL 0:dd702039127a 94 ******************************************************************************/
alejandroRL 0:dd702039127a 95
alejandroRL 0:dd702039127a 96 /* Enable interrupt. */
alejandroRL 0:dd702039127a 97 void BOARD_EnableLcdInterrupt(void)
alejandroRL 0:dd702039127a 98 {
alejandroRL 0:dd702039127a 99 EnableIRQ(LCDIF_IRQn);
alejandroRL 0:dd702039127a 100 }
alejandroRL 0:dd702039127a 101
alejandroRL 0:dd702039127a 102 void APP_LCDIF_IRQHandler(void)
alejandroRL 0:dd702039127a 103 {
alejandroRL 0:dd702039127a 104 uint32_t intStatus;
alejandroRL 0:dd702039127a 105
alejandroRL 0:dd702039127a 106 intStatus = ELCDIF_GetInterruptStatus(APP_ELCDIF);
alejandroRL 0:dd702039127a 107
alejandroRL 0:dd702039127a 108 ELCDIF_ClearInterruptStatus(APP_ELCDIF, intStatus);
alejandroRL 0:dd702039127a 109
alejandroRL 0:dd702039127a 110 if (intStatus & kELCDIF_CurFrameDone)
alejandroRL 0:dd702039127a 111 {
alejandroRL 0:dd702039127a 112 if (s_LCDpendingBuffer >= 0)
alejandroRL 0:dd702039127a 113 {
alejandroRL 0:dd702039127a 114 /* Send a confirmation that the given buffer is visible */
alejandroRL 0:dd702039127a 115 GUI_MULTIBUF_Confirm(s_LCDpendingBuffer);
alejandroRL 0:dd702039127a 116 s_LCDpendingBuffer = -1;
alejandroRL 0:dd702039127a 117 }
alejandroRL 0:dd702039127a 118 }
alejandroRL 0:dd702039127a 119 /* Add for ARM errata 838869, affects Cortex-M4, Cortex-M4F Store immediate overlapping
alejandroRL 0:dd702039127a 120 exception return operation might vector to incorrect interrupt */
alejandroRL 0:dd702039127a 121 #if defined __CORTEX_M && (__CORTEX_M == 4U)
alejandroRL 0:dd702039127a 122 __DSB();
alejandroRL 0:dd702039127a 123 #endif
alejandroRL 0:dd702039127a 124 }
alejandroRL 0:dd702039127a 125
alejandroRL 0:dd702039127a 126 void LCDIF_IRQHandler(void)
alejandroRL 0:dd702039127a 127 {
alejandroRL 0:dd702039127a 128 APP_LCDIF_IRQHandler();
alejandroRL 0:dd702039127a 129 }
alejandroRL 0:dd702039127a 130
alejandroRL 0:dd702039127a 131 void APP_ELCDIF_Init(void)
alejandroRL 0:dd702039127a 132 {
alejandroRL 0:dd702039127a 133 const elcdif_rgb_mode_config_t config = {
alejandroRL 0:dd702039127a 134 .panelWidth = APP_IMG_WIDTH,
alejandroRL 0:dd702039127a 135 .panelHeight = APP_IMG_HEIGHT,
alejandroRL 0:dd702039127a 136 .hsw = APP_HSW,
alejandroRL 0:dd702039127a 137 .hfp = APP_HFP,
alejandroRL 0:dd702039127a 138 .hbp = APP_HBP,
alejandroRL 0:dd702039127a 139 .vsw = APP_VSW,
alejandroRL 0:dd702039127a 140 .vfp = APP_VFP,
alejandroRL 0:dd702039127a 141 .vbp = APP_VBP,
alejandroRL 0:dd702039127a 142 .polarityFlags = APP_POL_FLAGS,
alejandroRL 0:dd702039127a 143 .bufferAddr = VRAM_ADDR,
alejandroRL 0:dd702039127a 144 .pixelFormat = ELCDIF_PIXEL_FORMAT,
alejandroRL 0:dd702039127a 145 .dataBus = APP_LCDIF_DATA_BUS,
alejandroRL 0:dd702039127a 146 };
alejandroRL 0:dd702039127a 147 ELCDIF_RgbModeInit(APP_ELCDIF, &config);
alejandroRL 0:dd702039127a 148
alejandroRL 0:dd702039127a 149 #if (LCD_BITS_PER_PIXEL == 8)
alejandroRL 0:dd702039127a 150 /* Load the LUT data. */
alejandroRL 0:dd702039127a 151 ELCDIF_UpdateLut(APP_ELCDIF, kELCDIF_Lut0, 0, lutData, ELCDIF_LUT_ENTRY_NUM);
alejandroRL 0:dd702039127a 152 ELCDIF_EnableLut(APP_ELCDIF, true);
alejandroRL 0:dd702039127a 153 #endif
alejandroRL 0:dd702039127a 154 BOARD_EnableLcdInterrupt();
alejandroRL 0:dd702039127a 155 ELCDIF_EnableInterrupts(APP_ELCDIF, kELCDIF_CurFrameDoneInterruptEnable);
alejandroRL 0:dd702039127a 156 ELCDIF_RgbModeStart(APP_ELCDIF);
alejandroRL 0:dd702039127a 157 }
alejandroRL 0:dd702039127a 158
alejandroRL 0:dd702039127a 159 /*******************************************************************************
alejandroRL 0:dd702039127a 160 * Implementation of communication with the touch controller
alejandroRL 0:dd702039127a 161 ******************************************************************************/
alejandroRL 0:dd702039127a 162
alejandroRL 0:dd702039127a 163 /* Touch driver handle. */
alejandroRL 0:dd702039127a 164 static ft5406_rt_handle_t touchHandle;
alejandroRL 0:dd702039127a 165
alejandroRL 0:dd702039127a 166 static void BOARD_Touch_Init(void)
alejandroRL 0:dd702039127a 167 {
alejandroRL 0:dd702039127a 168 lpi2c_master_config_t masterConfig = {0};
alejandroRL 0:dd702039127a 169 /*
alejandroRL 0:dd702039127a 170 * masterConfig.debugEnable = false;
alejandroRL 0:dd702039127a 171 * masterConfig.ignoreAck = false;
alejandroRL 0:dd702039127a 172 * masterConfig.pinConfig = kLPI2C_2PinOpenDrain;
alejandroRL 0:dd702039127a 173 * masterConfig.baudRate_Hz = 100000U;
alejandroRL 0:dd702039127a 174 * masterConfig.busIdleTimeout_ns = 0;
alejandroRL 0:dd702039127a 175 * masterConfig.pinLowTimeout_ns = 0;
alejandroRL 0:dd702039127a 176 * masterConfig.sdaGlitchFilterWidth_ns = 0;
alejandroRL 0:dd702039127a 177 * masterConfig.sclGlitchFilterWidth_ns = 0;
alejandroRL 0:dd702039127a 178 */
alejandroRL 0:dd702039127a 179 LPI2C_MasterGetDefaultConfig(&masterConfig);
alejandroRL 0:dd702039127a 180
alejandroRL 0:dd702039127a 181 /* Change the default baudrate configuration */
alejandroRL 0:dd702039127a 182 masterConfig.baudRate_Hz = BOARD_TOUCH_I2C_BAUDRATE;
alejandroRL 0:dd702039127a 183
alejandroRL 0:dd702039127a 184 /* Initialize the LPI2C master peripheral */
alejandroRL 0:dd702039127a 185 LPI2C_MasterInit(BOARD_TOUCH_I2C, &masterConfig, BOARD_TOUCH_I2C_CLOCK_FREQ);
alejandroRL 0:dd702039127a 186
alejandroRL 0:dd702039127a 187 /* Initialize the touch handle. */
alejandroRL 0:dd702039127a 188 FT5406_RT_Init(&touchHandle, BOARD_TOUCH_I2C);
alejandroRL 0:dd702039127a 189 }
alejandroRL 0:dd702039127a 190
alejandroRL 0:dd702039127a 191 void BOARD_Touch_Deinit(void)
alejandroRL 0:dd702039127a 192 {
alejandroRL 0:dd702039127a 193 LPI2C_MasterDeinit(BOARD_TOUCH_I2C);
alejandroRL 0:dd702039127a 194 }
alejandroRL 0:dd702039127a 195
alejandroRL 0:dd702039127a 196 int BOARD_Touch_Poll(void)
alejandroRL 0:dd702039127a 197 {
alejandroRL 0:dd702039127a 198 touch_event_t touch_event;
alejandroRL 0:dd702039127a 199 int touch_x;
alejandroRL 0:dd702039127a 200 int touch_y;
alejandroRL 0:dd702039127a 201 GUI_PID_STATE pid_state;
alejandroRL 0:dd702039127a 202
alejandroRL 0:dd702039127a 203 if (kStatus_Success != FT5406_RT_GetSingleTouch(&touchHandle, &touch_event, &touch_x, &touch_y))
alejandroRL 0:dd702039127a 204 {
alejandroRL 0:dd702039127a 205 return 0;
alejandroRL 0:dd702039127a 206 }
alejandroRL 0:dd702039127a 207 else if (touch_event != kTouch_Reserved)
alejandroRL 0:dd702039127a 208 {
alejandroRL 0:dd702039127a 209 pid_state.x = touch_y;
alejandroRL 0:dd702039127a 210 pid_state.y = touch_x;
alejandroRL 0:dd702039127a 211 pid_state.Pressed = ((touch_event == kTouch_Down) || (touch_event == kTouch_Contact));
alejandroRL 0:dd702039127a 212 pid_state.Layer = 0;
alejandroRL 0:dd702039127a 213 GUI_TOUCH_StoreStateEx(&pid_state);
alejandroRL 0:dd702039127a 214 return 1;
alejandroRL 0:dd702039127a 215 }
alejandroRL 0:dd702039127a 216 return 0;
alejandroRL 0:dd702039127a 217 }
alejandroRL 0:dd702039127a 218
alejandroRL 0:dd702039127a 219 /*******************************************************************************
alejandroRL 0:dd702039127a 220 * Application implemented functions required by emWin library
alejandroRL 0:dd702039127a 221 ******************************************************************************/
alejandroRL 0:dd702039127a 222 void LCD_X_Config(void)
alejandroRL 0:dd702039127a 223 {
alejandroRL 0:dd702039127a 224 GUI_MULTIBUF_Config(GUI_BUFFERS);
alejandroRL 0:dd702039127a 225 GUI_DEVICE_CreateAndLink(DISPLAY_DRIVER, COLOR_CONVERSION, 0, 0);
alejandroRL 0:dd702039127a 226 LCD_SetSizeEx(0, LCD_WIDTH, LCD_HEIGHT);
alejandroRL 0:dd702039127a 227 LCD_SetVSizeEx(0, LCD_WIDTH, LCD_HEIGHT);
alejandroRL 0:dd702039127a 228 LCD_SetVRAMAddrEx(0, (void *)VRAM_ADDR);
alejandroRL 0:dd702039127a 229 #if (LCD_BITS_PER_PIXEL == 8)
alejandroRL 0:dd702039127a 230 LCD_SetLUT(&_aPalette_256);
alejandroRL 0:dd702039127a 231 #endif
alejandroRL 0:dd702039127a 232 BOARD_Touch_Init();
alejandroRL 0:dd702039127a 233 }
alejandroRL 0:dd702039127a 234
alejandroRL 0:dd702039127a 235 int LCD_X_DisplayDriver(unsigned LayerIndex, unsigned Cmd, void *p)
alejandroRL 0:dd702039127a 236 {
alejandroRL 0:dd702039127a 237 uint32_t addr;
alejandroRL 0:dd702039127a 238 #if (LCD_BITS_PER_PIXEL == 8)
alejandroRL 0:dd702039127a 239 uint16_t colorR, colorG, colorB;
alejandroRL 0:dd702039127a 240 uint32_t color;
alejandroRL 0:dd702039127a 241 #endif
alejandroRL 0:dd702039127a 242 int result = 0;
alejandroRL 0:dd702039127a 243 LCD_X_SHOWBUFFER_INFO *pData;
alejandroRL 0:dd702039127a 244 switch (Cmd)
alejandroRL 0:dd702039127a 245 {
alejandroRL 0:dd702039127a 246 case LCD_X_INITCONTROLLER:
alejandroRL 0:dd702039127a 247 {
alejandroRL 0:dd702039127a 248 APP_ELCDIF_Init();
alejandroRL 0:dd702039127a 249 break;
alejandroRL 0:dd702039127a 250 }
alejandroRL 0:dd702039127a 251 case LCD_X_SHOWBUFFER:
alejandroRL 0:dd702039127a 252 {
alejandroRL 0:dd702039127a 253 pData = (LCD_X_SHOWBUFFER_INFO *)p;
alejandroRL 0:dd702039127a 254 /* Calculate address of the given buffer */
alejandroRL 0:dd702039127a 255 addr = VRAM_ADDR + VRAM_SIZE * pData->Index;
alejandroRL 0:dd702039127a 256 /* Make the given buffer visible */
alejandroRL 0:dd702039127a 257 ELCDIF_SetNextBufferAddr(APP_ELCDIF, addr);
alejandroRL 0:dd702039127a 258 //
alejandroRL 0:dd702039127a 259 // Remember buffer index to be used by ISR
alejandroRL 0:dd702039127a 260 //
alejandroRL 0:dd702039127a 261 s_LCDpendingBuffer = pData->Index;
alejandroRL 0:dd702039127a 262 while (s_LCDpendingBuffer >= 0)
alejandroRL 0:dd702039127a 263 ;
alejandroRL 0:dd702039127a 264 return 0;
alejandroRL 0:dd702039127a 265 }
alejandroRL 0:dd702039127a 266 #if (LCD_BITS_PER_PIXEL == 8)
alejandroRL 0:dd702039127a 267 case LCD_X_SETLUTENTRY:
alejandroRL 0:dd702039127a 268 {
alejandroRL 0:dd702039127a 269 //
alejandroRL 0:dd702039127a 270 // Required for setting a lookup table entry which is passed in the 'Pos' and 'Color' element of p
alejandroRL 0:dd702039127a 271 //
alejandroRL 0:dd702039127a 272 LCD_X_SETLUTENTRY_INFO *pData;
alejandroRL 0:dd702039127a 273 pData = (LCD_X_SETLUTENTRY_INFO *)p;
alejandroRL 0:dd702039127a 274 //
alejandroRL 0:dd702039127a 275 // Call hardware routine to write a LUT entry to the controller
alejandroRL 0:dd702039127a 276 //
alejandroRL 0:dd702039127a 277 color = pData->Color;
alejandroRL 0:dd702039127a 278 colorB = (color & 0xFF0000) >> 16;
alejandroRL 0:dd702039127a 279 colorG = (color & 0x00FF00) >> 8;
alejandroRL 0:dd702039127a 280 colorR = (color & 0x0000FF);
alejandroRL 0:dd702039127a 281 /* 16-bit bus */
alejandroRL 0:dd702039127a 282 lutData[pData->Pos] = ((colorR >> 3) << 11) | ((colorG >> 2) << 5) | ((colorB >> 3) << 0);
alejandroRL 0:dd702039127a 283 return 0;
alejandroRL 0:dd702039127a 284 }
alejandroRL 0:dd702039127a 285 #endif
alejandroRL 0:dd702039127a 286 default:
alejandroRL 0:dd702039127a 287 result = -1;
alejandroRL 0:dd702039127a 288 break;
alejandroRL 0:dd702039127a 289 }
alejandroRL 0:dd702039127a 290
alejandroRL 0:dd702039127a 291 return result;
alejandroRL 0:dd702039127a 292 }
alejandroRL 0:dd702039127a 293
alejandroRL 0:dd702039127a 294 void GUI_X_Config(void)
alejandroRL 0:dd702039127a 295 {
alejandroRL 0:dd702039127a 296 /* Assign work memory area to emWin */
alejandroRL 0:dd702039127a 297 GUI_ALLOC_AssignMemory((void *)GUI_MEMORY_ADDR, GUI_NUMBYTES);
alejandroRL 0:dd702039127a 298
alejandroRL 0:dd702039127a 299 /* Select default font */
alejandroRL 0:dd702039127a 300 GUI_SetDefaultFont(GUI_FONT_6X8);
alejandroRL 0:dd702039127a 301 }
alejandroRL 0:dd702039127a 302
alejandroRL 0:dd702039127a 303 void GUI_X_Init(void)
alejandroRL 0:dd702039127a 304 {
alejandroRL 0:dd702039127a 305 }
alejandroRL 0:dd702039127a 306
alejandroRL 0:dd702039127a 307 /* Dummy RTOS stub required by emWin */
alejandroRL 0:dd702039127a 308 void GUI_X_InitOS(void)
alejandroRL 0:dd702039127a 309 {
alejandroRL 0:dd702039127a 310 }
alejandroRL 0:dd702039127a 311
alejandroRL 0:dd702039127a 312 /* Dummy RTOS stub required by emWin */
alejandroRL 0:dd702039127a 313 void GUI_X_Lock(void)
alejandroRL 0:dd702039127a 314 {
alejandroRL 0:dd702039127a 315 }
alejandroRL 0:dd702039127a 316
alejandroRL 0:dd702039127a 317 /* Dummy RTOS stub required by emWin */
alejandroRL 0:dd702039127a 318 void GUI_X_Unlock(void)
alejandroRL 0:dd702039127a 319 {
alejandroRL 0:dd702039127a 320 }
alejandroRL 0:dd702039127a 321
alejandroRL 0:dd702039127a 322 /* Dummy RTOS stub required by emWin */
alejandroRL 0:dd702039127a 323 U32 GUI_X_GetTaskId(void)
alejandroRL 0:dd702039127a 324 {
alejandroRL 0:dd702039127a 325 return 0;
alejandroRL 0:dd702039127a 326 }
alejandroRL 0:dd702039127a 327
alejandroRL 0:dd702039127a 328 void GUI_X_ExecIdle(void)
alejandroRL 0:dd702039127a 329 {
alejandroRL 0:dd702039127a 330 }
alejandroRL 0:dd702039127a 331
alejandroRL 0:dd702039127a 332 GUI_TIMER_TIME GUI_X_GetTime(void)
alejandroRL 0:dd702039127a 333 {
alejandroRL 0:dd702039127a 334 return 0;
alejandroRL 0:dd702039127a 335 }
alejandroRL 0:dd702039127a 336
alejandroRL 0:dd702039127a 337 void GUI_X_Delay(int Period)
alejandroRL 0:dd702039127a 338 {
alejandroRL 0:dd702039127a 339 volatile int i;
alejandroRL 0:dd702039127a 340 for (; Period > 0; Period--)
alejandroRL 0:dd702039127a 341 {
alejandroRL 0:dd702039127a 342 for (i = 15000; i > 0; i--)
alejandroRL 0:dd702039127a 343 ;
alejandroRL 0:dd702039127a 344 }
alejandroRL 0:dd702039127a 345 }
alejandroRL 0:dd702039127a 346
alejandroRL 0:dd702039127a 347 void *emWin_memcpy(void *pDst, const void *pSrc, long size)
alejandroRL 0:dd702039127a 348 {
alejandroRL 0:dd702039127a 349 return memcpy(pDst, pSrc, size);
alejandroRL 0:dd702039127a 350 }