| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221 |
- /*********************************************************************
- * SEGGER Microcontroller GmbH & Co. KG *
- * Solutions for real time microcontroller applications *
- **********************************************************************
- * *
- * (c) 1996 - 2015 SEGGER Microcontroller GmbH & Co. KG *
- * *
- * Internet: www.segger.com Support: support@segger.com *
- * *
- **********************************************************************
- ** emWin V5.32 - 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 STMicroelectronics International
- N.V. a Dutch company with a Swiss branch and its headquarters in Plan-
- les-Ouates, Geneva, 39 Chemin du Champ des Filles, Switzerland for the
- purposes of creating libraries for ARM Cortex-M-based 32-bit microcon_
- troller products commercialized by Licensee only, sublicensed and dis_
- tributed under the terms and conditions of the End User License Agree_
- ment supplied by STMicroelectronics International N.V.
- Full source code is available at: www.segger.com
- We appreciate your understanding and fairness.
- ----------------------------------------------------------------------
- Licensing information
- Licensor: SEGGER Software GmbH
- Licensed to: STMicroelectronics International NV
- Licensed SEGGER software: emWin
- License number: GUI-00429
- License model: Buyout SRC [Buyout Source Code License, signed November 29th 2012]
- Licensed product: -
- Licensed platform: STMs ARM Cortex-M based 32 BIT CPUs
- Licensed number of seats: -
- ----------------------------------------------------------------------
- File : GUIDEMO_Speed.c
- Purpose : Speed demo
- ----------------------------------------------------------------------
- */
- #include "GUIDEMO.h"
- #if (SHOW_GUIDEMO_SPEED)
- #include <stdlib.h> // rand()
- /*********************************************************************
- *
- * Static data
- *
- **********************************************************************
- */
- static const GUI_COLOR _aColor[8] = {
- 0x000000,
- 0x0000FF,
- 0x00FF00,
- 0x00FFFF,
- 0xFF0000,
- 0xFF00FF,
- 0xFFFF00,
- 0xFFFFFF
- };
- /*********************************************************************
- *
- * Static code
- *
- **********************************************************************
- */
- /*********************************************************************
- *
- * _GetPixelsPerSecond
- */
- static U32 _GetPixelsPerSecond(void) {
- GUI_COLOR BkColor;
- GUI_COLOR Color;
- I32 PixelsPerSecond;
- I32 PixelCnt;
- I32 t0;
- I32 t;
- U32 xSize;
- U32 ySize;
- U32 Cnt;
- U32 x0;
- U32 x1;
- U32 y0;
- U32 y1;
- //
- // Find an area which is not obstructed by any windows
- //
- xSize = LCD_GetXSize();
- ySize = LCD_GetYSize();
- Cnt = 0;
- x0 = 0;
- x1 = xSize - 1;
- y0 = 65;
- y1 = ySize - 60 - 1;
- Color = GUI_GetColor();
- BkColor = GUI_GetBkColor();
- GUI_SetColor(BkColor);
- //
- // Repeat fill as often as possible in 100 ms
- //
- t0 = GUIDEMO_GetTime();
- do {
- GUI_FillRect(x0, y0, x1, y1);
- Cnt++;
- t = GUIDEMO_GetTime();
- } while ((t - (t0 + 100)) <= 0);
- //
- // Compute result
- //
- t -= t0;
- PixelCnt = (x1 - x0 + 1) * (y1 - y0 + 1) * Cnt;
- PixelsPerSecond = PixelCnt / t * 1000;
- GUI_SetColor(Color);
- return PixelsPerSecond;
- }
- /*********************************************************************
- *
- * Public code
- *
- **********************************************************************
- */
- /*********************************************************************
- *
- * GUIDEMO_Speed
- */
- void GUIDEMO_Speed(void) {
- #if GUI_SUPPORT_TOUCH
- GUI_PID_STATE State;
- #endif
- GUI_RECT ClipRect;
- GUI_RECT Rect;
- char acText[40] = { 0 };
- U32 PixelsPerSecond;
- int aColorIndex[8];
- int TimeStart;
- int vySize;
- int xSize;
- int ySize;
- int i;
- GUIDEMO_ConfigureDemo("High speed", "Multi layer clipping\nHighly optimized drivers", 0);
- xSize = LCD_GetXSize();
- ySize = LCD_GetYSize();
- vySize = LCD_GetVYSize();
- if (vySize > ySize) {
- ClipRect.x0 = 0;
- ClipRect.y0 = 0;
- ClipRect.x1 = xSize;
- ClipRect.y1 = ySize;
- GUI_SetClipRect(&ClipRect);
- }
- for (i = 0; i< 8; i++) {
- aColorIndex[i] = GUI_Color2Index(_aColor[i]);
- }
- TimeStart = GUIDEMO_GetTime();
- for (i = 0; ((GUIDEMO_GetTime() - TimeStart) < 5000) && (GUIDEMO_CheckCancel() == 0); i++) {
- GUI_SetColorIndex(aColorIndex[i&7]);
- //
- // Calculate random positions
- //
- Rect.x0 = rand() % xSize - xSize / 2;
- Rect.y0 = rand() % ySize - ySize / 2;
- Rect.x1 = Rect.x0 + 20 + rand() % xSize;
- Rect.y1 = Rect.y0 + 20 + rand() % ySize;
- GUI_FillRect(Rect.x0, Rect.y0, Rect.x1, Rect.y1);
- //
- // Clip rectangle to visible area and add the number of pixels (for speed computation)
- //
- if (Rect.x1 >= xSize) {
- Rect.x1 = xSize - 1;
- }
- if (Rect.y1 >= ySize) {
- Rect.y1 = ySize - 1;
- }
- if (Rect.x0 < 0 ) {
- Rect.x0 = 0;
- }
- if (Rect.y1 < 0) {
- Rect.y1 = 0;
- }
- //
- // There is no control window. A simple click on any position has to skip the demo.
- //
- #if GUI_SUPPORT_TOUCH
- GUI_PID_GetState(&State);
- if (State.Pressed) {
- break;
- }
- #endif
- }
- GUIDEMO_NotifyStartNext();
- PixelsPerSecond = _GetPixelsPerSecond();
- GUI_SetClipRect(NULL);
- GUIDEMO_AddStringToString(acText, "Pixels/sec: ");
- GUIDEMO_AddIntToString(acText, PixelsPerSecond);
- GUIDEMO_DrawBk();
- GUI_SetColor(GUI_WHITE);
- GUI_SetTextMode(GUI_TM_TRANS);
- GUI_SetFont(&GUI_FontRounded22);
- GUI_DispStringHCenterAt(acText, xSize / 2, (ySize - GUI_GetFontSizeY()) / 2);
- GUIDEMO_ConfigureDemo(NULL, NULL, GUIDEMO_SHOW_CURSOR | GUIDEMO_SHOW_CONTROL);
- GUIDEMO_Delay(4000);
- }
- #else
- void GUIDEMO_Speed_C(void);
- void GUIDEMO_Speed_C(void) {}
- #endif // SHOW_GUIDEMO_SPEED
- /*************************** End of file ****************************/
|