Nuvoton
/
NuMaker-mbed-emWin-example
NuMaker emWin HMI
Diff: emWin/Config/TARGET_NUMAKER_IOT_M467/LCDConf2.c
- Revision:
- 10:c8165817d92a
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/emWin/Config/TARGET_NUMAKER_IOT_M467/LCDConf2.c Mon Mar 04 15:47:41 2024 +0800 @@ -0,0 +1,275 @@ +/********************************************************************* +* SEGGER Microcontroller GmbH * +* Solutions for real time microcontroller applications * +********************************************************************** +* * +* (c) 1996 - 2023 SEGGER Microcontroller GmbH * +* * +* Internet: www.segger.com Support: support@segger.com * +* * +********************************************************************** + +** emWin V6.34 - Graphical user interface for embedded applications ** +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 by SEGGER Software GmbH to Nuvoton Technology Corporation +at the address: No. 4, Creation Rd. III, Hsinchu Science Park, Taiwan +for the purposes of creating libraries for its +Arm Cortex-A, Arm Cortex-M and Arm9 32-bit microcontrollers, commercialized and distributed by Nuvoton Technology Corporation +under the terms and conditions of an End User +License Agreement supplied with the libraries. +Full source code is available at: www.segger.com + +We appreciate your understanding and fairness. +---------------------------------------------------------------------- +Licensing information +Licensor: SEGGER Software GmbH +Licensed to: Nuvoton Technology Corporation, No. 4, Creation Rd. III, Hsinchu Science Park, 30077 Hsinchu City, Taiwan +Licensed SEGGER software: emWin +License number: GUI-00735 +License model: emWin License Agreement, signed February 27, 2018 +Licensed platform: Cortex-M, Cortex-A, and ARM9 32-bit series microcontroller designed and manufactured by Nuvoton Technology Corporation. +---------------------------------------------------------------------- +Support and Update Agreement (SUA) +SUA period: 2018-03-26 - 2024-09-04 +Contact to extend SUA: sales@segger.com +---------------------------------------------------------------------- +File : LCDConf.c +Purpose : Display controller configuration (single layer) +---------------------------END-OF-HEADER------------------------------ +*/ + +#include <stddef.h> +#include <stdio.h> + +#include "GUI.h" +#include "GUIDRV_FlexColor.h" + +#include "NuMicro.h" + +#include "TouchPanel.h" + +#include "lcm.h" + +/********************************************************************* +* +* Layer configuration +* +********************************************************************** +*/ +// +// Physical display size +// +#ifdef __DEMO_160x128__ +#define XSIZE_PHYS 128 +#define YSIZE_PHYS 160 +#else +#define XSIZE_PHYS 240 +#define YSIZE_PHYS 320 +#endif + +// +// Color conversion +// +#ifdef __DEMO_160x128__ +#define COLOR_CONVERSION GUICC_M565 +#else +#define COLOR_CONVERSION GUICC_565 +#endif + +// +// Display driver +// +#define DISPLAY_DRIVER GUIDRV_FLEXCOLOR + +// +// Orientation +// +//#define DISPLAY_ORIENTATION (0) +//#define DISPLAY_ORIENTATION (GUI_MIRROR_X) +//#define DISPLAY_ORIENTATION (GUI_MIRROR_Y) +//#define DISPLAY_ORIENTATION (GUI_MIRROR_X | GUI_MIRROR_Y) +//#define DISPLAY_ORIENTATION (GUI_SWAP_XY) +#ifdef __DEMO_160x128__ +#define DISPLAY_ORIENTATION (GUI_MIRROR_X | GUI_SWAP_XY) +#else +#define DISPLAY_ORIENTATION (GUI_MIRROR_Y | GUI_SWAP_XY) +#endif +//#define DISPLAY_ORIENTATION (GUI_MIRROR_X | GUI_MIRROR_Y | GUI_SWAP_XY) + +/********************************************************************* +* +* Configuration checking +* +********************************************************************** +*/ +#ifndef VXSIZE_PHYS + #define VXSIZE_PHYS XSIZE_PHYS +#endif +#ifndef VYSIZE_PHYS + #define VYSIZE_PHYS YSIZE_PHYS +#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 DISPLAY_ORIENTATION + #define DISPLAY_ORIENTATION 0 +#endif + +/********************************************************************* +* +* Static code +* +********************************************************************** +*/ +/********************************************************************* +* +* 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) { + GUI_DEVICE * pDevice; + GUI_PORT_API PortAPI = {0}; + CONFIG_FLEXCOLOR Config = {0}; + + // + // Set display driver and color conversion for 1st layer + // + pDevice = GUI_DEVICE_CreateAndLink(DISPLAY_DRIVER, COLOR_CONVERSION, 0, 0); + // + // Orientation + // + Config.Orientation = DISPLAY_ORIENTATION; + GUIDRV_FlexColor_Config(pDevice, &Config); + // + // Display driver configuration + // + if (DISPLAY_ORIENTATION & GUI_SWAP_XY) { + LCD_SetSizeEx (0, YSIZE_PHYS, XSIZE_PHYS); + LCD_SetVSizeEx(0, VYSIZE_PHYS, VXSIZE_PHYS); + } else { + LCD_SetSizeEx (0, XSIZE_PHYS, YSIZE_PHYS); + LCD_SetVSizeEx(0, VXSIZE_PHYS, VYSIZE_PHYS); + } + // + // Function selection, hardware routines (PortAPI) and operation mode (bus, bpp and cache) + // + PortAPI.pfWrite8_A0 = _Write0; + PortAPI.pfWrite8_A1 = _Write1; + PortAPI.pfWriteM8_A0 = _WriteM1; + PortAPI.pfWriteM8_A1 = _WriteM1; + PortAPI.pfRead8_A0 = _Read1; /* FIXME if panel supports read back feature */ + PortAPI.pfRead8_A1 = _Read1; /* FIXME if panel supports read back feature */ + PortAPI.pfReadM8_A0 = _ReadM1; /* FIXME if panel supports read back feature */ + PortAPI.pfReadM8_A1 = _ReadM1; /* FIXME if panel supports read back feature */ + GUIDRV_FlexColor_SetFunc(pDevice, &PortAPI, GUIDRV_FLEXCOLOR_F66709, GUIDRV_FLEXCOLOR_M16C0B8); + + +#if GUI_SUPPORT_TOUCH +// LCD calibration +// +// Calibrate touch screen +// + GUI_TOUCH_Calibrate(GUI_COORD_X, 0, (__DEMO_TS_WIDTH__ - 1), 0, (__DEMO_TS_WIDTH__ - 1)); + GUI_TOUCH_Calibrate(GUI_COORD_Y, 0, (__DEMO_TS_HEIGHT__- 1), 0, (__DEMO_TS_HEIGHT__ - 1)); +#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 +*/ +int LCD_X_DisplayDriver(unsigned LayerIndex, unsigned Cmd, void * pData) { + int r; + + GUI_USE_PARA(LayerIndex); + GUI_USE_PARA(pData); + switch (Cmd) { + // + // Required + // + 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... + // + _InitController(); + return 0; + } + default: + r = -1; + } + return r; +} +#if GUI_SUPPORT_TOUCH +extern int ts_phy2log(int *sumx, int *sumy); + +void GUI_TOUCH_X_ActivateX(void) { +} + +void GUI_TOUCH_X_ActivateY(void) { +} + + + +int GUI_TOUCH_X_MeasureX(void) { + int sumx; + int sumy; + if (Read_TouchPanel(&sumx, &sumy)) + { +// printf("X = %d\n", sumx); + ts_phy2log(&sumx, &sumy); + return sumx; + } + return -1; +} + +int GUI_TOUCH_X_MeasureY(void) { + int sumx; + int sumy; + if ( Read_TouchPanel(&sumx, &sumy) ) + { +// printf("Y = %d\n", sumy); + ts_phy2log(&sumx, &sumy); + return sumy; + } + return -1; +} +#endif +/*************************** End of file ****************************/