/*********************************************************************
* SEGGER Microcontroller GmbH & Co. KG *
* Solutions for real time microcontroller applications *
**********************************************************************
* *
* (c) 1996 - 2012 SEGGER Microcontroller GmbH & Co. KG *
* *
* Internet: www.segger.com Support: support@segger.com *
* *
**********************************************************************
** emWin V5.18 - Graphical user interface for embedded applications **
All Intellectual Property rights in the Software belongs to SEGGER.
emWin is protected by international copyright laws. Knowledge of the
source code may not be used to write a similar product. This file may
only be used in accordance with the following terms:
The software has been licensed to NXP Semiconductors USA, Inc. whose
registered office is situated at 1109 McKay Dr, M/S 76, San Jose,
CA 95131, USA solely for the purposes of creating libraries for
NXPs M0, M3/M4 and ARM7/9 processor-based devices, sublicensed and
distributed under the terms and conditions of the NXP End User License
Agreement.
Full source code is available at: www.segger.com
We appreciate your understanding and fairness.
----------------------------------------------------------------------
File : LCDConf.c
Purpose : Display controller configuration (single layer)
---------------------------END-OF-HEADER------------------------------
*/
#include "GUI.h"
#include "GUIDRV_Lin.h"
#include "board.h"
/*********************************************************************
*
* Layer configuration (to be modified)
*
**********************************************************************
*/
//
// Physical display size
//
#define XSIZE_PHYS (BOARD_LCD.PPL) // 240
#define YSIZE_PHYS (BOARD_LCD.LPP) // 320
//
// Color conversion
//
#define COLOR_CONVERSION GUICC_M565
#define DISPLAY_ORIENTATION (GUI_SWAP_XY | GUI_MIRROR_Y)
//
// Display driver
//
//#define DISPLAY_DRIVER GUIDRV_LIN_32
#if (DISPLAY_ORIENTATION == (GUI_MIRROR_X))
#define DISPLAY_DRIVER GUIDRV_LIN_OX_16
#elif (DISPLAY_ORIENTATION == (GUI_MIRROR_Y))
#define DISPLAY_DRIVER GUIDRV_LIN_OY_16
#elif (DISPLAY_ORIENTATION == (GUI_MIRROR_X | GUI_MIRROR_Y))
#define DISPLAY_DRIVER GUIDRV_LIN_OXY_16
#elif (DISPLAY_ORIENTATION == (GUI_SWAP_XY))
#define DISPLAY_DRIVER GUIDRV_LIN_OS_16
#elif (DISPLAY_ORIENTATION == (GUI_SWAP_XY | GUI_MIRROR_X))
#define DISPLAY_DRIVER GUIDRV_LIN_OSX_16
#elif (DISPLAY_ORIENTATION == (GUI_SWAP_XY | GUI_MIRROR_Y))
#define DISPLAY_DRIVER GUIDRV_LIN_OSY_16
#else
#define DISPLAY_DRIVER GUIDRV_LIN_16
#endif
//
// Touch screen
//
#define USE_TOUCH 1
//
// Touch screen calibration
#define TOUCH_X_MIN ( 0) // 0x00E0
#define TOUCH_X_MAX (XSIZE_PHYS) // 0x0F40
#define TOUCH_Y_MIN ( 0) // 0x00C0
#define TOUCH_Y_MAX (YSIZE_PHYS) // 0x0F60
//
// Buffers / VScreens
//
#define NUM_BUFFERS 1 // Number of multiple buffers to be used
#define NUM_VSCREENS 1 // Number of virtual screens to be used
/*********************************************************************
*
* Configuration checking
*
**********************************************************************
*/
#ifndef VRAM_ADDR
#define VRAM_ADDR (FRAMEBUFFER_ADDR) // 0x28000000 // TBD by customer: This has to be the frame buffer start address
#endif
#ifndef XSIZE_PHYS
#error Physical X size of display is not defined!
#endif
#ifndef YSIZE_PHYS
#error Physical Y size of display is not defined!
#endif
#ifndef COLOR_CONVERSION
#error Color conversion not defined!
#endif
#ifndef DISPLAY_DRIVER
#error No display driver defined!
#endif
#ifndef NUM_VSCREENS
#define NUM_VSCREENS 1
#else
#if (NUM_VSCREENS <= 0)
#error At least one screeen needs to be defined!
#endif
#endif
#if (NUM_VSCREENS > 1) && (NUM_BUFFERS > 1)
#error Virtual screens and multiple buffers are not allowed!
#endif
#ifndef DISPLAY_ORIENTATION
#define DISPLAY_ORIENTATION 0
#endif
#if ((DISPLAY_ORIENTATION & GUI_SWAP_XY) != 0)
#define LANDSCAPE 1
#else
#define LANDSCAPE 0
#endif
#if (LANDSCAPE == 1)
#define WIDTH YSIZE_PHYS /* Screen Width (in pixels) */
#define HEIGHT XSIZE_PHYS /* Screen Hight (in pixels) */
#else
#define WIDTH XSIZE_PHYS /* Screen Width (in pixels) */
#define HEIGHT YSIZE_PHYS /* Screen Hight (in pixels) */
#endif
#if ((DISPLAY_ORIENTATION & GUI_SWAP_XY) != 0)
#if ((DISPLAY_ORIENTATION & GUI_MIRROR_X) != 0)
#define TOUCH_TOP TOUCH_X_MAX
#define TOUCH_BOTTOM TOUCH_X_MIN
#else
#define TOUCH_TOP TOUCH_X_MIN
#define TOUCH_BOTTOM TOUCH_X_MAX
#endif
#if ((DISPLAY_ORIENTATION & GUI_MIRROR_Y) != 0)
#define TOUCH_LEFT TOUCH_Y_MAX
#define TOUCH_RIGHT TOUCH_Y_MIN
#else
#define TOUCH_LEFT TOUCH_Y_MIN
#define TOUCH_RIGHT TOUCH_Y_MAX
#endif
#else
#if ((DISPLAY_ORIENTATION & GUI_MIRROR_X) != 0)
#define TOUCH_LEFT TOUCH_X_MAX
#define TOUCH_RIGHT TOUCH_X_MIN
#else
#define TOUCH_LEFT TOUCH_X_MIN
#define TOUCH_RIGHT TOUCH_X_MAX
#endif
#if ((DISPLAY_ORIENTATION & GUI_MIRROR_Y) != 0)
#define TOUCH_TOP TOUCH_Y_MAX
#define TOUCH_BOTTOM TOUCH_Y_MIN
#else
#define TOUCH_TOP TOUCH_Y_MIN
#define TOUCH_BOTTOM TOUCH_Y_MAX
#endif
#endif
/*********************************************************************
*
* Public code
*
**********************************************************************
*/
/*********************************************************************
*
* LCD_X_Config
*
* Purpose:
* Called during the initialization process in order to set up the
* display driver configuration.
*
*/
void LCD_X_Config(void) {
//
// At first initialize use of multiple buffers on demand
//
#if (NUM_BUFFERS > 1)
GUI_MULTIBUF_Config(NUM_BUFFERS);
#endif
//
// Set display driver and color conversion for 1st layer
//
GUI_DEVICE_CreateAndLink(DISPLAY_DRIVER, COLOR_CONVERSION, 0, 0);
//
// Display driver configuration, required for Lin-driver
//
if (LCD_GetSwapXY()) {
LCD_SetSizeEx (0, YSIZE_PHYS, XSIZE_PHYS);
LCD_SetVSizeEx(0, YSIZE_PHYS * NUM_VSCREENS, XSIZE_PHYS);
} else {
LCD_SetSizeEx (0, XSIZE_PHYS, YSIZE_PHYS);
LCD_SetVSizeEx(0, XSIZE_PHYS, YSIZE_PHYS * NUM_VSCREENS);
}
LCD_SetVRAMAddrEx(0, (void *)VRAM_ADDR);
#if (USE_TOUCH == 1)
//
// Set orientation of touch screen
//
GUI_TOUCH_SetOrientation(DISPLAY_ORIENTATION);
//
// Calibrate touch screen
//
GUI_TOUCH_Calibrate(GUI_COORD_X, 0, WIDTH - 1, TOUCH_LEFT, TOUCH_RIGHT);
GUI_TOUCH_Calibrate(GUI_COORD_Y, 0, HEIGHT - 1, TOUCH_TOP, TOUCH_BOTTOM);
#endif
//
// Set user palette data (only required if no fixed palette is used)
//
#if defined(PALETTE)
LCD_SetLUTEx(0, PALETTE);
#endif
}
/*********************************************************************
*
* LCD_X_DisplayDriver
*
* Purpose:
* This function is called by the display driver for several purposes.
* To support the according task the routine needs to be adapted to
* the display controller. Please note that the commands marked with
* 'optional' are not cogently required and should only be adapted if
* the display controller supports these features.
*
* Parameter:
* LayerIndex - Index of layer to be configured
* Cmd - Please refer to the details in the switch statement below
* pData - Pointer to a LCD_X_DATA structure
*
* Return Value:
* < -1 - Error
* -1 - Command not handled
* 0 - Ok
*/
int LCD_X_DisplayDriver(unsigned LayerIndex, unsigned Cmd, void * pData) {
int r;
switch (Cmd) {
case LCD_X_INITCONTROLLER: {
//
// Called during the initialization process in order to set up the
// display controller and put it into operation. If the display
// controller is not initialized by any external routine this needs
// to be adapted by the customer...
//
// ...
return 0;
}
case LCD_X_SETVRAMADDR: {
//
// Required for setting the address of the video RAM for drivers
// with memory mapped video RAM which is passed in the 'pVRAM' element of p
//
//LCD_X_SETVRAMADDR_INFO * p;
//p = (LCD_X_SETVRAMADDR_INFO *)pData;
//...
return 0;
}
case LCD_X_SETORG: {
//
// Required for setting the display origin which is passed in the 'xPos' and 'yPos' element of p
//
//LCD_X_SETORG_INFO * p;
//p = (LCD_X_SETORG_INFO *)pData;
//...
return 0;
}
case LCD_X_SHOWBUFFER: {
//
// Required if multiple buffers are used. The 'Index' element of p contains the buffer index.
//
//LCD_X_SHOWBUFFER_INFO * p;
//p = (LCD_X_SHOWBUFFER_INFO *)pData;
//...
return 0;
}
case LCD_X_SETLUTENTRY: {
//
// Required for setting a lookup table entry which is passed in the 'Pos' and 'Color' element of p
//
//LCD_X_SETLUTENTRY_INFO * p;
//p = (LCD_X_SETLUTENTRY_INFO *)pData;
//...
return 0;
}
case LCD_X_ON: {
//
// Required if the display controller should support switching on and off
//
return 0;
}
case LCD_X_OFF: {
//
// Required if the display controller should support switching on and off
//
// ...
return 0;
}
default:
r = -1;
}
return r;
}
/*********************************************************************
*
* Global functions for GUI touch
*
********************************************************************/
#if (USE_TOUCH == 1) // Used when touch screen support is enabled
/*********************************************************************
*
* GUI_TOUCH_X_ActivateX()
*
* Function decription:
* Called from GUI, if touch support is enabled.
* Switches on voltage on X-axis,
* prepares measurement for Y-axis.
* Voltage on Y-axis is switched off.
*/
void GUI_TOUCH_X_ActivateX(void) {
}
/*********************************************************************
*
* GUI_TOUCH_X_ActivateY()
*
* Function decription:
* Called from GUI, if touch support is enabled.
* Switches on voltage on Y-axis,
* prepares measurement for X-axis.
* Voltage on X-axis is switched off.
*/
void GUI_TOUCH_X_ActivateY(void) {
}
/*********************************************************************
*
* GUI_TOUCH_X_MeasureX()
*
* Function decription:
* Called from GUI, if touch support is enabled.
* Measures voltage of X-axis.
*/
int GUI_TOUCH_X_MeasureX(void) {
return 0;
}
/*********************************************************************
*
* GUI_TOUCH_X_MeasureY()
*
* Function decription:
* Called from GUI, if touch support is enabled.
* Measures voltage of Y-axis.
*/
int GUI_TOUCH_X_MeasureY(void) {
return 0;
}
#endif // USE_TOUCH
/*************************** End of file ****************************/
|