NXP
/
rt1050_emwin_gui_demo
RT1050 GUI demo using emWin library
Embed:
(wiki syntax)
Show/hide line numbers
main.cpp
00001 /* 00002 * The Clear BSD License 00003 * Copyright (c) 2016, Freescale Semiconductor, Inc. 00004 * Copyright 2016-2017 NXP 00005 * All rights reserved. 00006 * 00007 * Redistribution and use in source and binary forms, with or without modification, 00008 * are permitted (subject to the limitations in the disclaimer below) provided 00009 * that the following conditions are met: 00010 * 00011 * o Redistributions of source code must retain the above copyright notice, this list 00012 * of conditions and the following disclaimer. 00013 * 00014 * o Redistributions in binary form must reproduce the above copyright notice, this 00015 * list of conditions and the following disclaimer in the documentation and/or 00016 * other materials provided with the distribution. 00017 * 00018 * o Neither the name of the copyright holder nor the names of its 00019 * contributors may be used to endorse or promote products derived from this 00020 * software without specific prior written permission. 00021 * 00022 * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. 00023 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 00024 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 00025 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 00026 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR 00027 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 00028 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 00029 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 00030 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 00031 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 00032 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00033 */ 00034 00035 #include "mbed.h" 00036 00037 #include "GUI.h" 00038 #include "BUTTON.h" 00039 #include "CHECKBOX.h" 00040 #include "SLIDER.h" 00041 #include "DROPDOWN.h" 00042 #include "RADIO.h" 00043 #include "MULTIPAGE.h" 00044 00045 extern "C" { 00046 #include "board.h" 00047 #include "pin_mux.h" 00048 #include "emwin_support.h" 00049 } 00050 /******************************************************************************* 00051 * Definitions 00052 ******************************************************************************/ 00053 00054 #ifndef GUI_NORMAL_FONT 00055 #define GUI_NORMAL_FONT (&GUI_Font16_ASCII) 00056 #endif 00057 00058 #ifndef GUI_LARGE_FONT 00059 #define GUI_LARGE_FONT (&GUI_Font16B_ASCII) 00060 #endif 00061 00062 #ifndef GUI_SCALE_FACTOR 00063 #define GUI_SCALE_FACTOR 1 00064 #endif 00065 00066 #ifndef GUI_SCALE_FACTOR_X 00067 #define GUI_SCALE_FACTOR_X GUI_SCALE_FACTOR 00068 #endif 00069 00070 #ifndef GUI_SCALE_FACTOR_Y 00071 #define GUI_SCALE_FACTOR_Y GUI_SCALE_FACTOR 00072 #endif 00073 00074 #define GUI_SCALE(a) ((int)((a) * (GUI_SCALE_FACTOR))) 00075 #define GUI_SCALE_X(x) ((int)((x) * (GUI_SCALE_FACTOR_X))) 00076 #define GUI_SCALE_Y(y) ((int)((y) * (GUI_SCALE_FACTOR_Y))) 00077 #define GUI_SCALE_COORDS(x, y) GUI_SCALE_X(x), GUI_SCALE_Y(y) 00078 #define GUI_SCALE_RECT(x0, y0, xs, ys) GUI_SCALE_X(x0), GUI_SCALE_Y(y0), GUI_SCALE_X(xs), GUI_SCALE_Y(ys) 00079 00080 #define GUI_ID_DRAWAREA (GUI_ID_USER + 0) 00081 #define GUI_ID_PAGEWIN1 (GUI_ID_USER + 1) 00082 #define GUI_ID_PAGEWIN2 (GUI_ID_USER + 2) 00083 00084 /******************************************************************************* 00085 * Variables 00086 ******************************************************************************/ 00087 Serial pc(USBTX, USBRX); 00088 00089 /******************************************************************************* 00090 * Prototypes 00091 ******************************************************************************/ 00092 void BOARD_EnableLcdInterrupt(void); 00093 00094 /******************************************************************************* 00095 * Code 00096 ******************************************************************************/ 00097 00098 static DROPDOWN_Handle hDropdown0; 00099 static RADIO_Handle hRadio0; 00100 static CHECKBOX_Handle hCheck0; 00101 static WM_HWIN hDrawArea; 00102 00103 static SLIDER_Handle hSlider0; 00104 static SLIDER_Handle hSlider1; 00105 static SPINBOX_Handle hSpinbox0; 00106 static PROGBAR_Handle hProgbar0; 00107 00108 static const GUI_COLOR color_list[] = {GUI_BLACK, GUI_YELLOW, GUI_ORANGE, GUI_RED, 00109 GUI_MAGENTA, GUI_BLUE, GUI_CYAN, GUI_GREEN}; 00110 static const GUI_POINT triangle_points[] = { 00111 {GUI_SCALE(0), GUI_SCALE(0)}, {GUI_SCALE(-50), GUI_SCALE(100)}, {GUI_SCALE(50), GUI_SCALE(100)}}; 00112 00113 static void cbDrawArea(WM_MESSAGE *pMsg) 00114 { 00115 switch (pMsg->MsgId) 00116 { 00117 case WM_PAINT: 00118 GUI_SetColor(color_list[DROPDOWN_GetSel(hDropdown0)]); 00119 switch (RADIO_GetValue(hRadio0)) 00120 { 00121 case 0: 00122 if (CHECKBOX_GetState(hCheck0)) 00123 { 00124 GUI_FillRect(GUI_SCALE_X(70) - GUI_SCALE(50), GUI_SCALE_Y(70) - GUI_SCALE(50), 00125 GUI_SCALE_X(70) + GUI_SCALE(50), GUI_SCALE_Y(70) + GUI_SCALE(50)); 00126 } 00127 else 00128 { 00129 GUI_DrawRect(GUI_SCALE_X(70) - GUI_SCALE(50), GUI_SCALE_Y(70) - GUI_SCALE(50), 00130 GUI_SCALE_X(70) + GUI_SCALE(50), GUI_SCALE_Y(70) + GUI_SCALE(50)); 00131 } 00132 break; 00133 case 1: 00134 if (CHECKBOX_GetState(hCheck0)) 00135 { 00136 GUI_FillPolygon(triangle_points, 3, GUI_SCALE_COORDS(70, 20)); 00137 } 00138 else 00139 { 00140 GUI_DrawPolygon(triangle_points, 3, GUI_SCALE_COORDS(70, 20)); 00141 } 00142 break; 00143 case 2: 00144 if (CHECKBOX_GetState(hCheck0)) 00145 { 00146 GUI_FillEllipse(GUI_SCALE_COORDS(70, 70), GUI_SCALE(50), GUI_SCALE(50)); 00147 } 00148 else 00149 { 00150 GUI_DrawEllipse(GUI_SCALE_COORDS(70, 70), GUI_SCALE(50), GUI_SCALE(50)); 00151 } 00152 break; 00153 } 00154 break; 00155 default: 00156 WM_DefaultProc(pMsg); 00157 break; 00158 } 00159 } 00160 00161 static void cbPageWin1(WM_MESSAGE *pMsg) 00162 { 00163 int NCode; 00164 int Id; 00165 00166 switch (pMsg->MsgId) 00167 { 00168 case WM_NOTIFY_PARENT: 00169 Id = WM_GetId(pMsg->hWinSrc); 00170 NCode = pMsg->Data.v; 00171 00172 switch (Id) 00173 { 00174 case GUI_ID_RADIO0: 00175 switch (NCode) 00176 { 00177 case WM_NOTIFICATION_VALUE_CHANGED: 00178 WM_InvalidateWindow(hDrawArea); 00179 break; 00180 } 00181 break; 00182 00183 case GUI_ID_DROPDOWN0: 00184 switch (NCode) 00185 { 00186 case WM_NOTIFICATION_SEL_CHANGED: 00187 WM_InvalidateWindow(hDrawArea); 00188 break; 00189 } 00190 break; 00191 00192 case GUI_ID_CHECK0: 00193 switch (NCode) 00194 { 00195 case WM_NOTIFICATION_VALUE_CHANGED: 00196 WM_InvalidateWindow(hDrawArea); 00197 break; 00198 } 00199 break; 00200 } 00201 break; 00202 00203 default: 00204 WM_DefaultProc(pMsg); 00205 break; 00206 } 00207 } 00208 00209 static void cbPageWin2(WM_MESSAGE *pMsg) 00210 { 00211 int NCode; 00212 int Id; 00213 00214 switch (pMsg->MsgId) 00215 { 00216 case WM_NOTIFY_PARENT: 00217 Id = WM_GetId(pMsg->hWinSrc); 00218 NCode = pMsg->Data.v; 00219 00220 switch (Id) 00221 { 00222 case GUI_ID_SLIDER0: 00223 switch (NCode) 00224 { 00225 case WM_NOTIFICATION_VALUE_CHANGED: 00226 PROGBAR_SetValue(hProgbar0, SLIDER_GetValue(hSlider0)); 00227 break; 00228 } 00229 break; 00230 00231 case GUI_ID_SLIDER1: 00232 switch (NCode) 00233 { 00234 case WM_NOTIFICATION_VALUE_CHANGED: 00235 SPINBOX_SetValue(hSpinbox0, SLIDER_GetValue(hSlider1)); 00236 break; 00237 } 00238 break; 00239 00240 case GUI_ID_SPINBOX0: 00241 switch (NCode) 00242 { 00243 case WM_NOTIFICATION_VALUE_CHANGED: 00244 SLIDER_SetValue(hSlider1, SPINBOX_GetValue(hSpinbox0)); 00245 break; 00246 } 00247 break; 00248 } 00249 break; 00250 00251 default: 00252 WM_DefaultProc(pMsg); 00253 break; 00254 } 00255 } 00256 00257 /*! 00258 * @brief Main function 00259 */ 00260 int main(void) 00261 { 00262 BOARD_InitPins(); 00263 BOARD_InitI2C1Pins(); 00264 BOARD_InitSemcPins(); 00265 BOARD_InitLcdifPixelClock(); 00266 BOARD_InitLcd(); 00267 00268 pc.baud(115200); 00269 pc.printf("GUI demo start.\r\n"); 00270 00271 GUI_Init(); 00272 00273 CHECKBOX_SetDefaultFont(GUI_NORMAL_FONT); 00274 DROPDOWN_SetDefaultFont(GUI_NORMAL_FONT); 00275 MULTIPAGE_SetDefaultFont(GUI_NORMAL_FONT); 00276 RADIO_SetDefaultFont(GUI_NORMAL_FONT); 00277 00278 /* Create multipage widget */ 00279 MULTIPAGE_Handle hMultipage0; 00280 hMultipage0 = MULTIPAGE_CreateEx(GUI_SCALE_RECT(10, 10, 300, 220), 0, WM_CF_SHOW, 0, GUI_ID_MULTIPAGE0); 00281 00282 WM_HWIN hPageWin; 00283 00284 /* Create window for page 1 and add it */ 00285 hPageWin = WINDOW_CreateEx(GUI_SCALE_RECT(0, 0, 300, 200), WM_HBKWIN, 0, 0, GUI_ID_PAGEWIN1, cbPageWin1); 00286 MULTIPAGE_AddPage(hMultipage0, hPageWin, "Shapes & Colors"); 00287 00288 /* Create widgets on page 1 */ 00289 hDropdown0 = DROPDOWN_CreateEx(GUI_SCALE_RECT(10, 10, 100, 80), hPageWin, WM_CF_SHOW, DROPDOWN_CF_AUTOSCROLLBAR, 00290 GUI_ID_DROPDOWN0); 00291 DROPDOWN_SetTextHeight(hDropdown0, GUI_SCALE_Y(20)); 00292 DROPDOWN_SetScrollbarWidth(hDropdown0, GUI_SCALE_X(20)); 00293 DROPDOWN_AddString(hDropdown0, "Black"); 00294 DROPDOWN_AddString(hDropdown0, "Yellow"); 00295 DROPDOWN_AddString(hDropdown0, "Orange"); 00296 DROPDOWN_AddString(hDropdown0, "Red"); 00297 DROPDOWN_AddString(hDropdown0, "Purple"); 00298 DROPDOWN_AddString(hDropdown0, "Blue"); 00299 DROPDOWN_AddString(hDropdown0, "Cyan"); 00300 DROPDOWN_AddString(hDropdown0, "Green"); 00301 00302 hRadio0 = 00303 RADIO_CreateEx(GUI_SCALE_RECT(10, 50, 100, 90), hPageWin, WM_CF_SHOW, 0, GUI_ID_RADIO0, 3, GUI_SCALE_Y(30)); 00304 RADIO_SetText(hRadio0, "Square", 0); 00305 RADIO_SetText(hRadio0, "Triangle", 1); 00306 RADIO_SetText(hRadio0, "Circle", 2); 00307 00308 hCheck0 = CHECKBOX_CreateEx(GUI_SCALE_RECT(10, 150, 100, 16), hPageWin, WM_CF_SHOW, 0, GUI_ID_CHECK0); 00309 CHECKBOX_SetText(hCheck0, "Fill"); 00310 00311 hDrawArea = 00312 WINDOW_CreateEx(GUI_SCALE_RECT(130, 30, 140, 140), hPageWin, WM_CF_SHOW, 0, GUI_ID_DRAWAREA, cbDrawArea); 00313 00314 /* Create window for page 2 and add it */ 00315 hPageWin = WINDOW_CreateEx(GUI_SCALE_RECT(0, 0, 300, 200), WM_HBKWIN, 0, 0, GUI_ID_PAGEWIN2, cbPageWin2); 00316 MULTIPAGE_AddPage(hMultipage0, hPageWin, "Sliders & spinbox"); 00317 00318 /* Create widgets on page 2 */ 00319 hSlider0 = SLIDER_CreateEx(GUI_SCALE_RECT(60, 160, 200, 30), hPageWin, WM_CF_SHOW, 0, GUI_ID_SLIDER0); 00320 SLIDER_SetWidth(hSlider0, GUI_SCALE(10)); 00321 SLIDER_SetValue(hSlider0, 50); 00322 00323 hSlider1 = 00324 SLIDER_CreateEx(GUI_SCALE_RECT(10, 10, 30, 180), hPageWin, WM_CF_SHOW, SLIDER_CF_VERTICAL, GUI_ID_SLIDER1); 00325 SLIDER_SetWidth(hSlider1, GUI_SCALE(10)); 00326 SLIDER_SetValue(hSlider1, 50); 00327 00328 hSpinbox0 = SPINBOX_CreateEx(GUI_SCALE_RECT(100, 80, 100, 50), hPageWin, WM_CF_SHOW, GUI_ID_SPINBOX0, 0, 100); 00329 SPINBOX_SetFont(hSpinbox0, GUI_LARGE_FONT); 00330 SPINBOX_SetValue(hSpinbox0, 50); 00331 00332 hProgbar0 = 00333 PROGBAR_CreateEx(GUI_SCALE_RECT(60, 10, 200, 40), hPageWin, WM_CF_SHOW, PROGBAR_CF_HORIZONTAL, GUI_ID_PROGBAR0); 00334 PROGBAR_SetFont(hProgbar0, GUI_LARGE_FONT); 00335 PROGBAR_SetValue(hProgbar0, 50); 00336 00337 WM_SetDesktopColor(GUI_WHITE); 00338 WM_Exec(); 00339 00340 while (1) 00341 { 00342 /* Poll touch controller for update */ 00343 if (BOARD_Touch_Poll()) 00344 { 00345 GUI_Exec(); 00346 } 00347 } 00348 }
Generated on Tue Jul 12 2022 19:43:37 by 1.7.2