Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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 Wed Jul 20 2022 15:03:44 by
