www.pudn.com > uC-GUI-V3-98.zip > HouseControl.c
/* ********************************************************************************************************* * uC/GUI * Universal graphic software for embedded applications * * (c) Copyright 2002, Micrium Inc., Weston, FL * (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH * * µC/GUI 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 a license and should not be redistributed * in any way. We appreciate your understanding and fairness. * ---------------------------------------------------------------------- File : HouseControl.c Purpose : house control demo ---------------------------END-OF-HEADER------------------------------ */ #include#include #include #include "GUI.h" #include "FRAMEWIN.h" #include "MULTIPAGE.h" static void _cbWinAlert(WM_MESSAGE* pMsg); typedef void SERIAL_Callback(const char* pStr, int v1, int v2); //#define NEC_HOUSE /********************************************************************* * * defines and statics for serial interface * (defined for target hardware only) * ********************************************************************** */ #ifndef WIN32 #include "RTOS.h" /********************************************************************* * * defines */ #define EOL 13 /* sign marking end of line */ #define BUFFER_SIZE 512 /* size of receive buffer */ #define STRING_SIZE 32 /* size of string buffer */ /********************************************************************* * * structures */ typedef struct { OS_U8* pDataEnd; OS_U8* pWrite; OS_U8* pRead; U16 Size; } BUFFER; /********************************************************************* * * static data */ static SERIAL_Callback* _pfcbReceiveCommand; /* buffer to hold string */ static char _acString[STRING_SIZE + 2]; static char* _pString = _acString; /* buffer for receiving */ static OS_U8 _Buffer[BUFFER_SIZE]; static BUFFER _RxBuffer = {_Buffer + BUFFER_SIZE, _Buffer, _Buffer, BUFFER_SIZE}; #endif /* #ifndef WIN32 */ /********************************************************************* * * defines * ********************************************************************** */ #define PI2 6.2831853f #define RPM 10 #define UPS 100 #define ARRAY(aItems) aItems, GUI_COUNTOF(aItems) /********************************************************************* * * structures * ********************************************************************** */ typedef struct { I16 XCenter; I16 YCenter; I16 XSize; I16 YSize; } LOGO; typedef struct { I16 ActV; I16 NewV; GUI_RECT Rect; } OBJECT; typedef struct { OBJECT Light; I16 Elevator; } LEVEL; typedef struct { OBJECT Itself; OBJECT Door; I16 NumToDo; I16 ToDo[6]; I16 Move; I16 Pause; I16 Level; I16 LastLevel; int Time; WM_HWIN Handle; } ELEVATOR; /********************************************************************* * * static data * ********************************************************************** */ static WM_CALLBACK* _pfcbFrameWin; static SCROLLBAR_Handle _hScroll; static WM_HWIN _hAlert[2]; static WM_HWIN _hDialogLight; static WM_HWIN _hWinHouse; static WM_HWIN _hWinControl; static WM_HWIN _hWinMap; static const char _acAlertText[2][12] = {"Fire", "Burglary"}; static int _AlertCnt[2]; static int _SlidePrevTime; static int _ScrollPrevTime; static int _InitDialog; static int _ExecuteCommands; static int _LogoRPM = RPM; static int _LogoWaitTime = 1000 / UPS; static int _LogoPrevTime; static int _LogoPrevMulX; static int _LogoMulX; static float _LogoDivisor; static float _LogoAngle; static LEVEL _Level[6] = { {{0, 0, { 35, 650, 164, 780}}, 0}, {{0, 0, { 35, 520, 164, 650}}, 0}, {{0, 0, { 35, 390, 164, 520}}, 0}, {{0, 0, { 35, 260, 164, 390}}, 0}, {{0, 0, { 35, 130, 164, 260}}, 0}, {{0, 0, { 35, 0, 164, 130}}, 0}, }; static ELEVATOR _Elevator = { {0, 0, { 57, 130, 83, 780}}, // the elevator itself {0, 0, { 57, 82, 83, 125}}, // the elevator door 0, {0, 0, 0, 0, 0}, 0, 0, 0, 0, 0, 0 }; static LOGO _Logo; static OBJECT _Garage = {0, 0, { 40, 732, 90, 776}}; static OBJECT _Jalousie1 = {0, 0, {165, 400, 167, 493}}; static OBJECT _Jalousie2 = {0, 0, { 32, 140, 34, 233}}; static OBJECT _Marquee1 = {0, 0, {165, 549, 196, 566}}; static OBJECT _Marquee2 = {0, 0, { 3, 289, 34, 306}}; static OBJECT _Scroll = {0, 0, { 0, 0, 199, 780}}; static OBJECT _LogoArrow = {0, 0, { 58, 69, 139, 100}}; static OBJECT _LogoLarge = {0, 0, { 58, 46, 139, 69}}; static OBJECT _LogoSmall = {0, 0, { 7, 8, 47, 19}}; static OBJECT _GarageSmall = {0, 0, { 10, 220, 24, 232}}; static OBJECT _Jalousie1Small = {0, 0, { 48, 120, 49, 147}}; static OBJECT _Jalousie2Small = {0, 0, { 6, 42, 7, 69}}; static OBJECT _Marquee1Small = {0, 0, { 48, 166, 55, 170}}; static OBJECT _Marquee2Small = {0, 0, { 0, 88, 7, 92}}; static OBJECT _ElevatorSmall = {0, 0, { 14, 40, 23, 233}}; static OBJECT _LightSmall[6] = { {0, 0, { 8, 195, 48, 234}}, {0, 0, { 8, 156, 48, 195}}, {0, 0, { 8, 117, 48, 156}}, {0, 0, { 8, 78, 48, 117}}, {0, 0, { 8, 39, 48, 78}}, {0, 0, { 8, 0, 48, 39}}, }; /********************************************************************* * * static data, dialog resource * ********************************************************************** */ /********************************************************************* * * DialogLight */ static const GUI_WIDGET_CREATE_INFO _aDialogLight[] = { { WINDOW_CreateIndirect, "", 0, 0, 0, 113, 140, WM_CF_SHOW }, { TEXT_CreateIndirect, "5.Floor:", 0, 5, 8, 40, 23, TEXT_CF_LEFT }, { TEXT_CreateIndirect, "4.Floor:", 0, 5, 33, 40, 23, TEXT_CF_LEFT }, { TEXT_CreateIndirect, "3.Floor:", 0, 5, 58, 40, 23, TEXT_CF_LEFT }, { TEXT_CreateIndirect, "2.Floor:", 0, 5, 83, 40, 23, TEXT_CF_LEFT }, { TEXT_CreateIndirect, "1.Floor:", 0, 5, 108, 40, 23, TEXT_CF_LEFT }, { SLIDER_CreateIndirect, NULL, GUI_ID_SLIDER4, 45, 4, 64, 23 }, { SLIDER_CreateIndirect, NULL, GUI_ID_SLIDER3, 45, 29, 64, 23 }, { SLIDER_CreateIndirect, NULL, GUI_ID_SLIDER2, 45, 54, 64, 23 }, { SLIDER_CreateIndirect, NULL, GUI_ID_SLIDER1, 45, 79, 64, 23 }, { SLIDER_CreateIndirect, NULL, GUI_ID_SLIDER0, 45, 104, 64, 23 } }; /********************************************************************* * * DialogMisc */ static const GUI_WIDGET_CREATE_INFO _aDialogMisc[] = { { WINDOW_CreateIndirect, "", 0, 0, 0, 113, 140, WM_CF_SHOW }, { BUTTON_CreateIndirect, "Jalousie 1", GUI_ID_BUTTON0, 5, 3, 103, 19, TEXT_CF_HCENTER }, { BUTTON_CreateIndirect, "Jalousie 2", GUI_ID_BUTTON1, 5, 24, 103, 19, TEXT_CF_HCENTER }, { BUTTON_CreateIndirect, "Marquee 1", GUI_ID_BUTTON2, 5, 45, 103, 19, TEXT_CF_HCENTER }, { BUTTON_CreateIndirect, "Marquee 2", GUI_ID_BUTTON3, 5, 66, 103, 19, TEXT_CF_HCENTER }, { BUTTON_CreateIndirect, "Garage", GUI_ID_BUTTON4, 5, 87, 103, 19, TEXT_CF_HCENTER }, { BUTTON_CreateIndirect, "<", GUI_ID_BUTTON5, 5, 108, 20, 19, TEXT_CF_HCENTER }, { BUTTON_CreateIndirect, "LogoStop", GUI_ID_BUTTON6, 27, 108, 59, 19, TEXT_CF_HCENTER }, { BUTTON_CreateIndirect, ">", GUI_ID_BUTTON7, 88, 108, 20, 19, TEXT_CF_HCENTER } }; /********************************************************************* * * DialogElev */ static const GUI_WIDGET_CREATE_INFO _aDialogElev[] = { { WINDOW_CreateIndirect, "", 0, 9, 8, 113, 140, WM_CF_SHOW }, { BUTTON_CreateIndirect, "", GUI_ID_BUTTON4, 16, 21, 16, 16, TEXT_CF_HCENTER}, { BUTTON_CreateIndirect, "", GUI_ID_BUTTON3, 16, 39, 16, 16, TEXT_CF_HCENTER}, { BUTTON_CreateIndirect, "", GUI_ID_BUTTON2, 16, 57, 16, 16, TEXT_CF_HCENTER}, { BUTTON_CreateIndirect, "", GUI_ID_BUTTON1, 16, 75, 16, 16, TEXT_CF_HCENTER}, { BUTTON_CreateIndirect, "", GUI_ID_BUTTON0, 16, 93, 16, 16, TEXT_CF_HCENTER}, { BUTTON_CreateIndirect, "Door", GUI_ID_BUTTON5, 42, 21, 53, 16, TEXT_CF_HCENTER}, { BUTTON_CreateIndirect, "Pause", GUI_ID_BUTTON6, 42, 39, 53, 16, TEXT_CF_HCENTER} }; /********************************************************************* * * static data, polygons * ********************************************************************** */ /********************************************************************* * * Arrows */ static const GUI_POINT _aArrowUp[] = { {1, 0}, {4, 3}, { 1, 3}, {1, 8}, {0, 8}, {0, 3}, {-3, 3}, {0, 0} }; static const GUI_POINT _aArrowDown[] = { {1, 8}, {4, 5}, { 1, 5}, {1, 0}, {0, 0}, {0, 5}, {-3, 5}, {0, 8} }; static GUI_POINT _aArrowRight[] = { {0, 0}, {5, 0}, { 5,-3}, {8, 0}, {8, 1}, {5, 4}, { 5, 1}, {0, 1} }; static GUI_POINT _aArrowLeft[] = { {0, 0}, {3,-3}, { 3, 0}, {8, 0}, {8, 1}, {3, 1}, { 3, 4}, {0, 1} }; /********************************************************************* * * Roof */ static GUI_POINT _aRoof[] = { {0, 0}, {75, 60}, {-75, 60} }; static GUI_POINT _aRoofMini[] = { {0, 0}, {119, 90}, {-119, 90} }; /********************************************************************* * * static data, bitmaps * ********************************************************************** */ #ifdef NEC_HOUSE /********************************************************************* * * NEC_Logo */ static const GUI_COLOR _ColorsLogoNEC[] = { 0x000000,0x960000,0xA10000,0x9B0000 ,0xA90000,0xB00000,0xB80000,0xBD0000 ,0xCC2323,0xC21919,0xB50000,0xAC0000 ,0xC92020,0xBA0000,0xC70000,0xA40000 }; static const GUI_LOGPALETTE _PalLogoNEC = { 16, /* number of entries */ 1, /* No transparency */ &_ColorsLogoNEC[0] }; static const unsigned char _acLogoNEC[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x22, 0x22, 0x22, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x22, 0x21, 0x00, 0x32, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x01, 0x24, 0x56, 0x77, 0x88, 0x88, 0x97, 0x76, 0xAB, 0x30, 0x02, 0xCC, 0xCC, 0xCC, 0xC8, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xCC, 0xC3, 0x00, 0x7C, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xC7, 0x00, 0x00, 0x00, 0x2A, 0x9C, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x50, 0x02, 0xCC, 0xCC, 0xCC, 0xCC, 0xCD, 0x10, 0x00, 0x00, 0x00, 0x00, 0x08, 0xCC, 0xC3, 0x00, 0x7C, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xC7, 0x00, 0x00, 0x27, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xE8, 0x8E, 0xCC, 0xCC, 0x50, 0x02, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x08, 0xCC, 0xC3, 0x00, 0x7C, 0xCC, 0xCC, 0xCC, 0x87, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x7A, 0x00, 0x0F, 0xCC, 0xCC, 0xCC, 0xCC, 0xCE, 0xA4, 0x30, 0x00, 0x00, 0x03, 0x24, 0x20, 0x02, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCA, 0x00, 0x00, 0x00, 0x00, 0x08, 0xCC, 0xC3, 0x00, 0x7C, 0xCC, 0xCC, 0xCC, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0xCC, 0xCC, 0xCC, 0xCC, 0xA1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x50, 0x00, 0x00, 0x00, 0x08, 0xCC, 0xC3, 0x00, 0x7C, 0xCC, 0xCC, 0xCC, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xCC, 0xCC, 0xCC, 0xC5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCB, 0x00, 0x00, 0x00, 0x08, 0xCC, 0xC3, 0x00, 0x7C, 0xCC, 0xCC, 0xCC, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xCC, 0xCC, 0xCC, 0xCC, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xCC, 0xC6, 0x6C, 0xCC, 0xCC, 0xCC, 0xCC, 0xF0, 0x00, 0x00, 0x08, 0xCC, 0xC3, 0x00, 0x7C, 0xCC, 0xCC, 0xCC, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0xCC, 0xCC, 0xCC, 0xCC, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xCC, 0xCA, 0x17, 0xCC, 0xCC, 0xCC, 0xCC, 0xC2, 0x00, 0x00, 0x08, 0xCC, 0xC3, 0x00, 0x7C, 0xCC, 0xCC, 0xCC, 0x74, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x30, 0x06, 0xCC, 0xCC, 0xCC, 0xCC, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xCC, 0xCA, 0x01, 0x9C, 0xCC, 0xCC, 0xCC, 0xCE, 0x30, 0x00, 0x08, 0xCC, 0xC3, 0x00, 0x7C, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x40, 0x07, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xCC, 0xCA, 0x00, 0xF8, 0xCC, 0xCC, 0xCC, 0xCC, 0x83, 0x00, 0x08, 0xCC, 0xC3, 0x00, 0x7C, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x40, 0x08, 0xCC, 0xCC, 0xCC, 0xC8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xCC, 0xCA, 0x00, 0x03, 0xEC, 0xCC, 0xCC, 0xCC, 0xC9, 0xF0, 0x08, 0xCC, 0xC3, 0x00, 0x7C, 0xCC, 0xCC, 0xCC, 0x95, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x30, 0x09, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xCC, 0xCA, 0x00, 0x00, 0x2C, 0xCC, 0xCC, 0xCC, 0xCC, 0x71, 0x08, 0xCC, 0xC3, 0x00, 0x7C, 0xCC, 0xCC, 0xCC, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0xCC, 0xCC, 0xCC, 0xCC, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xCC, 0xCA, 0x00, 0x00, 0x0F, 0xCC, 0xCC, 0xCC, 0xCC, 0xCD, 0x08, 0xCC, 0xC3, 0x00, 0x7C, 0xCC, 0xCC, 0xCC, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0xCC, 0xCC, 0xCC, 0xCC, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xCC, 0xCA, 0x00, 0x00, 0x00, 0xBC, 0xCC, 0xCC, 0xCC, 0xCC, 0x68, 0xCC, 0xC3, 0x00, 0x7C, 0xCC, 0xCC, 0xCC, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xCC, 0xCC, 0xCC, 0xCC, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xCC, 0xCA, 0x00, 0x00, 0x00, 0x05, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xC3, 0x00, 0xDC, 0xCC, 0xCC, 0xCC, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xEC, 0xCC, 0xCC, 0xCC, 0xC5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xCC, 0xCA, 0x00, 0x00, 0x00, 0x00, 0xAC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xC3, 0x00, 0xAC, 0xCC, 0xCC, 0xCC, 0xC2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBC, 0xCC, 0xCC, 0xCC, 0xCC, 0xA1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xCC, 0xCA, 0x00, 0x00, 0x00, 0x00, 0x0D, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xC3, 0x00, 0x4C, 0xCC, 0xCC, 0xCC, 0xCC, 0x65, 0xB4, 0x44, 0x44, 0x44, 0x44, 0x4B, 0x00, 0x07, 0xCC, 0xCC, 0xCC, 0xCC, 0xC8, 0x52, 0x10, 0x00, 0x00, 0x03, 0x24, 0x40, 0x02, 0xCC, 0xCA, 0x00, 0x00, 0x00, 0x00, 0x01, 0x7C, 0xCC, 0xCC, 0xCC, 0xCC, 0xC3, 0x00, 0x19, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0x01, 0xAC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCE, 0x88, 0x8E, 0xCC, 0xCC, 0x70, 0x02, 0xCC, 0xCA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1D, 0xCC, 0xCC, 0xCC, 0xCC, 0xC3, 0x00, 0x03, 0x7C, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0x00, 0x03, 0xAE, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x70, 0x03, 0xAA, 0xA4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0xAA, 0xAA, 0xAA, 0xA1, 0x00, 0x00, 0x02, 0xB6, 0x77, 0x79, 0x88, 0x88, 0x88, 0x88, 0x77, 0x77, 0x6A, 0x00, 0x00, 0x00, 0x01, 0xF5, 0x78, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xC8, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x32, 0x22, 0x22, 0x22, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; static const GUI_BITMAP _LogoBitmap = { 82, /* XSize */ 26, /* YSize */ 41, /* BytesPerLine */ 4, /* BitsPerPixel */ _acLogoNEC, /* Pointer to picture data (indices) */ &_PalLogoNEC /* Pointer to palette */ }; #define LOGOMULX 1000 #define LOGOMULY 1000 #else /********************************************************************* * * Micrium_Logo */ const GUI_COLOR ColorsMicriumLogo[] = { 0xFF0000,0xFF0043,0xFF003D,0xDE1D6C ,0xB63A94,0xBB378F,0xB33D98,0xFF003B ,0xA04CAD,0x2B98FF,0x3890FF,0xA945A2 ,0xFF002F,0x1EA0FF,0xA648A6,0x3B8FFF ,0x4887FF,0x4687FF,0x3393FF,0xFF0030 ,0x2F97FF,0x2C97FF,0xFF0023,0xA14AAA ,0x3294FF,0x3E8CFF,0x259CFF,0x3990FF ,0xAE429E,0xFF003C,0xFF003F,0xC23288 ,0x7C65CE,0x835FC7,0xFF003E,0xFF0037 ,0x746AD5,0x4489FF,0xFF0035,0xFF0022 ,0xEE0F5A,0xC62F84,0xCA2C80,0xC33287 ,0xFF002A,0xFF0039,0xFF0044,0xFF0033 ,0xFF0048,0x6A70DF,0x4588FF,0x3B8EFF ,0xFF0031,0x4E83F9,0x587CEF,0xD12779 ,0x4887FE,0x3592FF,0x3791FF,0x3394FF ,0x567EF1,0x9057BB,0xF50953,0xB23E9A ,0x4C84FA,0x428AFF,0x855EC5,0xFF0024 ,0xFA044D,0x4A86FC,0x8E58BD,0x5082F7 ,0xC1338A,0x2C98FF,0xA449A8,0x3691FF ,0x4389FF,0xF00D57,0x9751B4,0x3A8FFF ,0x3C8DFF,0xD62373,0x2A99FF,0xC23389 ,0x408BFF,0x865EC5,0xFF001E,0x2E97FF ,0x279BFF,0xBC378F,0xD92071,0xB53C97 ,0xF9064F,0xFF002C,0x8062CB,0x3493FF ,0x209FFF,0xFF0045,0x587DF0,0x438AFF ,0xFF002B,0x4F82F8,0x3D8DFF,0xFF002E ,0xFF0009,0xAD43A0,0xA14BAB,0xC0348B ,0x3096FF,0x7B65CF,0x7767D3,0x557FF3 ,0xFF0027,0x4A86FD,0xFF0018,0x4B85FB ,0xFF0020,0x8B5AC0,0xAD429F,0xFF0029 ,0x229EFF,0xB03F9C,0x3195FF,0xEF0E58 ,0xA349A8,0x9E4DAE,0xAB44A1,0xFF0006 ,0xFD0049,0x2F96FF,0x4987FD,0xFF0025 ,0x6574E3,0x6872E1,0xA845A2,0xE71561 ,0xDF1C6A,0x9156BA,0xFF0042,0x9E4DAF ,0xAF429E,0xA14CAC,0xA846A3,0xE21966 ,0xFF0036,0x3692FF,0x4F83F9,0xCB2B80 ,0x239EFF,0x7E63CC,0x7768D3,0x5E78EA ,0xFF0026,0xB73A94,0xFF0034,0xFF0038 ,0x4F83F8,0x3F8BFF,0x7868D3,0xF8064F ,0xBB3891,0x8161C9,0x597CEF,0x3F8CFF ,0x289AFF,0x8C59BE,0x4688FF,0xA449A7 ,0x2B99FF,0xF8074F,0x895BC2,0xFF0032 ,0xFF0028,0xC72E83,0x9553B6,0xC82E84 ,0xEA135E,0xBD368D,0xC13389,0xF50952 ,0xB83991,0xA548A6,0x398FFF }; const GUI_LOGPALETTE PalMicriumLogo = { 183, /* number of entries */ 0, /* No transparency */ &ColorsMicriumLogo[0] }; const unsigned char acMicriumLogo[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x04, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x04, 0x03, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x04, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x04, 0x03, 0x01, 0x00, 0x01, 0x03, 0x04, 0x05, 0x05, 0x05, 0x04, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x05, 0x05, 0x05, 0x05, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x08, 0x09, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x09, 0x0B, 0x07, 0x00, 0x00, 0x00, 0x07, 0x0B, 0x09, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x09, 0x08, 0x07, 0x00, 0x07, 0x08, 0x09, 0x0A, 0x0A, 0x0A, 0x09, 0x08, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0D, 0x0A, 0x0A, 0x0A, 0x0A, 0x0D, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x11, 0x12, 0x13, 0x00, 0x00, 0x00, 0x13, 0x12, 0x11, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x14, 0x10, 0x10, 0x10, 0x10, 0x14, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x15, 0x16, 0x00, 0x00, 0x00, 0x16, 0x15, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x07, 0x17, 0x18, 0x19, 0x19, 0x19, 0x18, 0x17, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x1A, 0x19, 0x19, 0x19, 0x19, 0x1A, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1B, 0x1C, 0x1D, 0x00, 0x1D, 0x1C, 0x1B, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x1E, 0x1F, 0x20, 0x21, 0x21, 0x21, 0x20, 0x1F, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x22, 0x22, 0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x01, 0x00, 0x23, 0x24, 0x21, 0x21, 0x21, 0x21, 0x24, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x22, 0x22, 0x22, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x10, 0x25, 0x10, 0x10, 0x0F, 0x1C, 0x07, 0x00, 0x07, 0x1C, 0x0F, 0x10, 0x10, 0x25, 0x10, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x00, 0x26, 0x27, 0x27, 0x27, 0x27, 0x27, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x0C, 0x28, 0x29, 0x2A, 0x2A, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x02, 0x2E, 0x2C, 0x2B, 0x29, 0x28, 0x26, 0x30, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x00, 0x00, 0x00, 0x02, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x02, 0x00, 0x00, 0x00, 0x02, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x02, 0x00, 0x00, 0x00, 0x02, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x00, 0x2E, 0x0C, 0x28, 0x29, 0x2A, 0x29, 0x28, 0x26, 0x00, 0x00, 0x2E, 0x0C, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x25, 0x31, 0x25, 0x10, 0x32, 0x33, 0x34, 0x00, 0x34, 0x33, 0x32, 0x10, 0x25, 0x31, 0x25, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x02, 0x1C, 0x35, 0x36, 0x36, 0x36, 0x35, 0x1C, 0x02, 0x00, 0x00, 0x00, 0x2E, 0x34, 0x37, 0x35, 0x38, 0x39, 0x3A, 0x3A, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x07, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x25, 0x36, 0x36, 0x36, 0x35, 0x3F, 0x01, 0x40, 0x3B, 0x39, 0x41, 0x42, 0x43, 0x25, 0x36, 0x36, 0x36, 0x36, 0x25, 0x2F, 0x00, 0x02, 0x1C, 0x35, 0x36, 0x36, 0x36, 0x35, 0x1C, 0x02, 0x00, 0x02, 0x1C, 0x35, 0x36, 0x36, 0x36, 0x35, 0x1C, 0x02, 0x00, 0x02, 0x1C, 0x35, 0x36, 0x36, 0x36, 0x25, 0x2C, 0x44, 0x45, 0x38, 0x39, 0x3A, 0x39, 0x41, 0x46, 0x2C, 0x1E, 0x44, 0x45, 0x38, 0x39, 0x3A, 0x3B, 0x47, 0x37, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x48, 0x0F, 0x10, 0x10, 0x49, 0x43, 0x00, 0x2C, 0x49, 0x10, 0x10, 0x0F, 0x48, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x07, 0x4A, 0x4B, 0x4C, 0x4C, 0x4C, 0x4B, 0x4A, 0x07, 0x00, 0x00, 0x2E, 0x4D, 0x4E, 0x09, 0x4C, 0x32, 0x10, 0x10, 0x10, 0x10, 0x10, 0x4C, 0x4F, 0x50, 0x51, 0x07, 0x00, 0x00, 0x00, 0x0C, 0x52, 0x4C, 0x4C, 0x4C, 0x4B, 0x53, 0x41, 0x54, 0x10, 0x10, 0x33, 0x55, 0x56, 0x52, 0x4C, 0x4C, 0x4C, 0x4C, 0x52, 0x0C, 0x00, 0x07, 0x4A, 0x4B, 0x4C, 0x4C, 0x4C, 0x4B, 0x4A, 0x07, 0x00, 0x07, 0x4A, 0x4B, 0x4C, 0x4C, 0x4C, 0x4B, 0x4A, 0x07, 0x00, 0x07, 0x4A, 0x4B, 0x4C, 0x4C, 0x4C, 0x57, 0x13, 0x0A, 0x54, 0x32, 0x10, 0x10, 0x10, 0x32, 0x18, 0x4E, 0x07, 0x0A, 0x54, 0x32, 0x10, 0x10, 0x10, 0x4C, 0x58, 0x59, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x3A, 0x5A, 0x3A, 0x10, 0x10, 0x0A, 0x5B, 0x2D, 0x5C, 0x18, 0x10, 0x10, 0x3A, 0x5A, 0x3A, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x00, 0x5D, 0x5E, 0x5F, 0x10, 0x10, 0x10, 0x10, 0x54, 0x54, 0x25, 0x10, 0x10, 0x10, 0x32, 0x60, 0x61, 0x2E, 0x00, 0x00, 0x0C, 0x14, 0x10, 0x10, 0x10, 0x32, 0x62, 0x63, 0x10, 0x10, 0x10, 0x57, 0x02, 0x64, 0x14, 0x10, 0x10, 0x10, 0x10, 0x14, 0x0C, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x32, 0x65, 0x63, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x4F, 0x65, 0x63, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x32, 0x66, 0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x14, 0x68, 0x52, 0x10, 0x10, 0x0F, 0x69, 0x0C, 0x6A, 0x0F, 0x10, 0x10, 0x52, 0x68, 0x14, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x02, 0x6B, 0x6C, 0x10, 0x10, 0x10, 0x10, 0x12, 0x6D, 0x6E, 0x6F, 0x54, 0x10, 0x10, 0x10, 0x32, 0x0A, 0x70, 0x00, 0x00, 0x0C, 0x14, 0x10, 0x10, 0x10, 0x10, 0x32, 0x10, 0x4F, 0x5F, 0x4B, 0x71, 0x13, 0x0C, 0x14, 0x10, 0x10, 0x10, 0x10, 0x14, 0x0C, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x10, 0x32, 0x4F, 0x5F, 0x4F, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x32, 0x4F, 0x5F, 0x4F, 0x10, 0x10, 0x10, 0x10, 0x10, 0x6C, 0x44, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x14, 0x72, 0x73, 0x25, 0x10, 0x32, 0x4C, 0x74, 0x75, 0x19, 0x10, 0x25, 0x73, 0x72, 0x14, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x67, 0x54, 0x32, 0x10, 0x10, 0x10, 0x3A, 0x76, 0x77, 0x2F, 0x02, 0x45, 0x66, 0x54, 0x4F, 0x5F, 0x78, 0x79, 0x02, 0x00, 0x0C, 0x14, 0x10, 0x10, 0x10, 0x10, 0x10, 0x7A, 0x3F, 0x7B, 0x7C, 0x59, 0x22, 0x0C, 0x14, 0x10, 0x10, 0x10, 0x10, 0x14, 0x0C, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x10, 0x3A, 0x3F, 0x7B, 0x3F, 0x7A, 0x10, 0x10, 0x10, 0x10, 0x10, 0x3A, 0x3F, 0x7B, 0x3F, 0x7A, 0x10, 0x10, 0x10, 0x10, 0x0F, 0x7D, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x14, 0x27, 0x7E, 0x0F, 0x10, 0x10, 0x09, 0x7F, 0x1A, 0x10, 0x10, 0x0F, 0x7E, 0x27, 0x14, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x2E, 0x80, 0x81, 0x10, 0x10, 0x10, 0x25, 0x82, 0x83, 0x00, 0x00, 0x07, 0x6B, 0x84, 0x85, 0x86, 0x87, 0x88, 0x28, 0x61, 0x00, 0x0C, 0x14, 0x10, 0x10, 0x10, 0x10, 0x66, 0x89, 0x64, 0x8A, 0x07, 0x22, 0x00, 0x0C, 0x14, 0x10, 0x10, 0x10, 0x10, 0x14, 0x0C, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x25, 0x82, 0x83, 0x8A, 0x64, 0x89, 0x66, 0x10, 0x10, 0x10, 0x25, 0x82, 0x83, 0x8A, 0x64, 0x89, 0x66, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x14, 0x83, 0x59, 0x0A, 0x10, 0x10, 0x33, 0x59, 0x33, 0x10, 0x10, 0x0A, 0x59, 0x83, 0x14, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x07, 0x8B, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x8C, 0x07, 0x00, 0x00, 0x00, 0x22, 0x26, 0x26, 0x07, 0x8A, 0x8A, 0x61, 0x00, 0x00, 0x0C, 0x14, 0x10, 0x10, 0x10, 0x10, 0x0F, 0x8D, 0x07, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x14, 0x10, 0x10, 0x10, 0x10, 0x14, 0x0C, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x8C, 0x07, 0x00, 0x07, 0x8E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x8C, 0x07, 0x00, 0x07, 0x8E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x14, 0x0C, 0x83, 0x09, 0x10, 0x10, 0x10, 0x33, 0x10, 0x10, 0x10, 0x09, 0x83, 0x0C, 0x14, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x14, 0x10, 0x10, 0x10, 0x10, 0x18, 0x80, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x14, 0x10, 0x10, 0x10, 0x10, 0x14, 0x0C, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x14, 0x0C, 0x34, 0x4C, 0x32, 0x10, 0x10, 0x10, 0x10, 0x10, 0x32, 0x4C, 0x34, 0x0C, 0x14, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x14, 0x10, 0x10, 0x10, 0x10, 0x14, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x14, 0x10, 0x10, 0x10, 0x10, 0x14, 0x0C, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x14, 0x0C, 0x07, 0x69, 0x0F, 0x10, 0x10, 0x10, 0x10, 0x10, 0x0F, 0x69, 0x07, 0x0C, 0x14, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x07, 0x7C, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x1C, 0x07, 0x00, 0x00, 0x00, 0x2D, 0x8F, 0x87, 0x8F, 0x34, 0x90, 0x90, 0x00, 0x00, 0x0C, 0x14, 0x10, 0x10, 0x10, 0x10, 0x14, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x14, 0x10, 0x10, 0x10, 0x10, 0x14, 0x0C, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x1C, 0x07, 0x00, 0x07, 0x1C, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x14, 0x0C, 0x02, 0x5B, 0x0A, 0x10, 0x10, 0x10, 0x10, 0x10, 0x0A, 0x5B, 0x02, 0x0C, 0x14, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x02, 0x5B, 0x91, 0x10, 0x10, 0x10, 0x25, 0x92, 0x70, 0x00, 0x00, 0x1D, 0x93, 0x94, 0x5F, 0x09, 0x95, 0x96, 0x97, 0x90, 0x00, 0x0C, 0x14, 0x10, 0x10, 0x10, 0x10, 0x14, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x14, 0x10, 0x10, 0x10, 0x10, 0x14, 0x0C, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x25, 0x92, 0x70, 0x01, 0x70, 0x92, 0x25, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x14, 0x0C, 0x00, 0x43, 0x49, 0x10, 0x10, 0x10, 0x10, 0x10, 0x49, 0x43, 0x00, 0x0C, 0x14, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x98, 0x33, 0x32, 0x10, 0x10, 0x10, 0x39, 0x99, 0x64, 0x9A, 0x9B, 0x9C, 0x25, 0x10, 0x10, 0x9D, 0x3A, 0x9E, 0x23, 0x00, 0x0C, 0x14, 0x10, 0x10, 0x10, 0x10, 0x14, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x14, 0x10, 0x10, 0x10, 0x10, 0x14, 0x0C, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x10, 0x39, 0x05, 0x9F, 0x05, 0x39, 0x10, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x14, 0x0C, 0x00, 0x34, 0x33, 0x32, 0x10, 0x10, 0x10, 0x32, 0x33, 0x34, 0x00, 0x0C, 0x14, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x02, 0xA0, 0x3A, 0x10, 0x10, 0x10, 0x10, 0x7A, 0x42, 0xA1, 0xA2, 0xA3, 0x10, 0x10, 0x10, 0x10, 0xA4, 0x5C, 0x2E, 0x00, 0x0C, 0x14, 0x10, 0x10, 0x10, 0x10, 0x14, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x14, 0x10, 0x10, 0x10, 0x10, 0x14, 0x0C, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1B, 0x3B, 0x1B, 0x10, 0x10, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x14, 0x0C, 0x00, 0x07, 0x1C, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x1C, 0x07, 0x00, 0x0C, 0x14, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x00, 0x98, 0x7A, 0x41, 0x10, 0x10, 0x10, 0x10, 0xA3, 0xA3, 0x25, 0x10, 0x10, 0x10, 0x10, 0x12, 0xA5, 0x9A, 0x00, 0x00, 0x0C, 0x14, 0x10, 0x10, 0x10, 0x10, 0x14, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x14, 0x10, 0x10, 0x10, 0x10, 0x14, 0x0C, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xA6, 0x10, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xA7, 0x3A, 0x25, 0x25, 0x25, 0xA8, 0x0C, 0x00, 0x1D, 0x1C, 0x91, 0x25, 0x25, 0x25, 0x91, 0x1C, 0x1D, 0x00, 0x0C, 0xA8, 0x25, 0x25, 0x25, 0x3A, 0xA7, 0x07, 0x00, 0x07, 0xA7, 0x3A, 0x25, 0x25, 0x25, 0x3A, 0xA7, 0x07, 0x00, 0x00, 0x01, 0xA9, 0x32, 0x5F, 0x25, 0xA6, 0x10, 0x10, 0x10, 0x10, 0x10, 0xA6, 0x25, 0x57, 0xAA, 0x77, 0x00, 0x00, 0x00, 0x0C, 0xA8, 0x25, 0x25, 0x25, 0x25, 0xA8, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0xA8, 0x25, 0x25, 0x25, 0x25, 0xA8, 0x0C, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x10, 0xA3, 0xA6, 0x10, 0x25, 0x92, 0x63, 0x25, 0x25, 0x25, 0x3A, 0xA7, 0x07, 0x00, 0x07, 0xA7, 0x3A, 0x25, 0x25, 0x25, 0x3A, 0xA7, 0x07, 0x00, 0x07, 0xA7, 0x3A, 0x25, 0x25, 0x25, 0x3A, 0xA7, 0x07, 0x00, 0x07, 0xA7, 0x3A, 0x25, 0x25, 0x25, 0x3A, 0xA7, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x0B, 0x25, 0x9C, 0x9C, 0x9C, 0x1B, 0xAB, 0x00, 0x00, 0x98, 0x1B, 0x9C, 0x9C, 0x9C, 0x1B, 0x98, 0x00, 0x00, 0xAB, 0x1B, 0x9C, 0x9C, 0x9C, 0x25, 0x0B, 0x1D, 0x00, 0x1D, 0x0B, 0x25, 0x9C, 0x9C, 0x9C, 0x25, 0x0B, 0x1D, 0x00, 0x00, 0x00, 0x01, 0xAC, 0xAD, 0x25, 0x25, 0x91, 0x0A, 0x0A, 0x0A, 0x91, 0x25, 0x25, 0xAD, 0x0C, 0x00, 0x00, 0x00, 0x00, 0xAB, 0x1B, 0x9C, 0x9C, 0x9C, 0x9C, 0x1B, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAB, 0x1B, 0x9C, 0x9C, 0x9C, 0x9C, 0x1B, 0xAB, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0xA3, 0xAE, 0x19, 0x5F, 0x0A, 0xAF, 0x25, 0x9C, 0x9C, 0x9C, 0x25, 0x0B, 0x1D, 0x00, 0x1D, 0x0B, 0x25, 0x9C, 0x9C, 0x9C, 0x25, 0x0B, 0x1D, 0x00, 0x1D, 0x0B, 0x25, 0x9C, 0x9C, 0x9C, 0x25, 0x0B, 0x1D, 0x00, 0x1D, 0x0B, 0x25, 0x9C, 0x9C, 0x9C, 0x25, 0x0B, 0x1D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1D, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0x00, 0x00, 0x00, 0x00, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0x00, 0x00, 0x00, 0x00, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0x1D, 0x00, 0x00, 0x00, 0x1D, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0x1D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x5D, 0xB0, 0xB1, 0xB2, 0xB2, 0xB2, 0xB1, 0xB0, 0x5D, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0x00, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x1C, 0xB3, 0xB4, 0xB0, 0x9B, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0x1D, 0x00, 0x00, 0x00, 0x1D, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0x1D, 0x00, 0x00, 0x00, 0x1D, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0x1D, 0x00, 0x00, 0x00, 0x1D, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0x1D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x22, 0x22, 0x22, 0x22, 0x22, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x90, 0x22, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0E, 0x0F, 0x10, 0x10, 0x10, 0x0F, 0x0E, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xB5, 0xB6, 0x11, 0x11, 0x11, 0xB6, 0xB5, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x6A, 0x6C, 0x33, 0x33, 0x33, 0x6C, 0x6A, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x13, 0x13, 0x13, 0x13, 0x13, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; static const GUI_BITMAP _LogoBitmap = { 145, /* XSize */ 39, /* YSize */ 145, /* BytesPerLine */ 8, /* BitsPerPixel */ acMicriumLogo, /* Pointer to picture data (indices) */ &PalMicriumLogo /* Pointer to palette */ }; #define LOGOMULX 600 #define LOGOMULY 600 #endif /********************************************************************* * * TouchCursor */ static const GUI_COLOR _ColorsTouchCursor[] = { 0x0000FF,0x000000,0xFFFFFF }; static const GUI_LOGPALETTE _PalTouchCursor = { 3, /* number of entries */ 1, /* Has transparency */ &_ColorsTouchCursor[0] }; static const unsigned char _acTouchCursor[] = { 0x00, 0x00, 0x00, 0x01, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x94, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x56, 0xA5, 0x55, 0x55, 0x55, 0x40, 0x6A, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x40, 0x55, 0x55, 0x55, 0x56, 0xA5, 0x55, 0x55, 0x55, 0x40, 0x00, 0x00, 0x00, 0x05, 0x94, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x50, 0x00, 0x00, 0x00, 0x00 }; static const GUI_BITMAP _bmTouchCursor = { 33, /* XSize */ 17, /* YSize */ 9, /* BytesPerLine */ 2, /* BitsPerPixel */ _acTouchCursor, /* Pointer to picture data (indices) */ &_PalTouchCursor /* Pointer to palette */ }; static const GUI_CURSOR _TouchCursor = { &_bmTouchCursor, 16, 8 }; /********************************************************************* * * static code, serial interface * (defined for target hardware only) * ********************************************************************** */ #ifndef WIN32 /********************************************************************* * * _cbReceiveData */ static void _cbReceiveData(OS_U8 Data) { *(_RxBuffer.pWrite)++ = Data; if (_RxBuffer.pWrite == _RxBuffer.pDataEnd) { _RxBuffer.pWrite -= _RxBuffer.Size; } } /********************************************************************* * * _SendString */ static void _SendString(const char* pStr) { OS_SendString(pStr); } /********************************************************************* * * _ConvIntToStr */ static char* _ConvIntToStr(char* pStr, int Value) { char* Ptr = pStr + 4; int v = Value; *Ptr = 0; do { *(--Ptr) = (v % 10) + '0'; v /= 10; } while (v && (Ptr != pStr)); strcpy(pStr, Ptr); return pStr; } /********************************************************************* * * _ConvStrToInt */ static int _ConvStrToInt(char* pStr) { char* Ptr = pStr; int r = 0; while (*Ptr) { r *= 10; r += *(Ptr++) - '0'; } return r; } /********************************************************************* * * _ReceivedString */ static void _ReceivedString(const char* pStr) { int v1 = -1, v2 = -1; char* Ptr; Ptr = strrchr(pStr, ' '); if (Ptr != NULL) { v1 = _ConvStrToInt(Ptr + 1); *Ptr = 0; } Ptr = strrchr(pStr, ' '); if (Ptr != NULL) { v2 = v1; v1 = _ConvStrToInt(Ptr + 1); *Ptr = 0; } if (_pfcbReceiveCommand) { (*_pfcbReceiveCommand)(pStr, v1, v2); } } /********************************************************************* * * _ReceivedChar */ static void _ReceivedChar(char c) { if (c == EOL) { _pString = _acString; _ReceivedString(_acString); } else { if (_pString < (_acString + STRING_SIZE)) { if (c >= 'a' && c <= 'z') { c -= 'a' - 'A'; } *_pString++ = c; *(_pString + 1) = 0; } } } #endif /* #ifndef WIN32 */ /********************************************************************* * * static code, serial interface * ********************************************************************** */ /********************************************************************* * * _SerialSendCommand */ static void _SerialSendCommand(const char* pStr, int v1, int v2) { #ifndef WIN32 char Str1[STRING_SIZE + 2]; char Str2[5]; int Len, i, v; Str1[STRING_SIZE] = 0; strncpy(Str1, pStr, STRING_SIZE); for (i = 0; i < 2; i++) { v = (i == 0) ? v1 : v2; if (v >= 0 && v <= 999) { _ConvIntToStr(Str2, v); if ((strlen(Str1) + strlen(Str2) + 1) <= STRING_SIZE) { strcat(Str1, " "); strcat(Str1, Str2); } } } Len = strlen(Str1); Str1[Len] = EOL; Str1[Len+1] = 0; _SendString(Str1); #endif } /********************************************************************* * * _SerialExec */ static void _SerialExec(void) { #ifndef WIN32 OS_U8 Data; while (_RxBuffer.pRead != _RxBuffer.pWrite) { Data = *(_RxBuffer.pRead)++; if (_RxBuffer.pRead == _RxBuffer.pDataEnd) { _RxBuffer.pRead -= _RxBuffer.Size; } _ReceivedChar((char)Data); } #endif } /********************************************************************* * * _SerialInit */ static void _SerialInit(SERIAL_Callback* cb) { #ifndef WIN32 OS_SetRxCallback(&_cbReceiveData); _pfcbReceiveCommand = cb; #endif } /********************************************************************* * * static code, helper functions * ********************************************************************** */ /********************************************************************* * * _SetSliderValue */ static void _SetSliderValue(WM_HWIN hWin, int Id, int Min, int Max, int Value) { WM_HWIN hItem; hItem = WM_GetDialogItem(hWin, Id); SLIDER_SetRange(hItem, Min, Max); SLIDER_SetValue(hItem, Value); } /********************************************************************* * * _GetSliderValue */ static int _GetSliderValue(WM_HWIN hDlg, int Id) { return SLIDER_GetValue(WM_GetDialogItem(hDlg, Id)); } /********************************************************************* * * _AddDialog */ static WM_HWIN _AddDialog(const char* pText, const GUI_WIDGET_CREATE_INFO* pDialog, int NumItems, WM_CALLBACK* cb, WM_HWIN hMultiPage) { WM_HWIN hWin; hWin = GUI_CreateDialogBox(pDialog, NumItems, cb, WM_GetClientWindow(hMultiPage), 0, 0); MULTIPAGE_AddPage(hMultiPage, 0, pText); return hWin; } /********************************************************************* * * _SetDialogLight */ static void _SetDialogLight(void) { if (_hDialogLight) { _InitDialog = 1; _SetSliderValue(_hDialogLight, GUI_ID_SLIDER0, 0, 100, _Level[0].Light.ActV); _SetSliderValue(_hDialogLight, GUI_ID_SLIDER1, 0, 100, _Level[1].Light.ActV); _SetSliderValue(_hDialogLight, GUI_ID_SLIDER2, 0, 100, _Level[2].Light.ActV); _SetSliderValue(_hDialogLight, GUI_ID_SLIDER3, 0, 100, _Level[3].Light.ActV); _SetSliderValue(_hDialogLight, GUI_ID_SLIDER4, 0, 100, _Level[4].Light.ActV); _InitDialog = 0; } } /********************************************************************* * * _InvalidateObject */ static void _InvalidateObject(WM_HWIN hWin, GUI_RECT r) { r.y0 -= _Scroll.ActV; r.y1 -= _Scroll.ActV; WM_InvalidateRect(hWin, &r); } /********************************************************************* * * _InvalidateObject2 */ static void _InvalidateObject2(WM_HWIN hWin, GUI_RECT r) { WM_InvalidateRect(hWin, &r); } /********************************************************************* * * _InvalidateRect */ static void _InvalidateRect(WM_HWIN hWin, GUI_RECT r, int xOff, int yOff) { r.x0 += xOff; r.x1 += xOff; r.y0 += yOff; r.y1 += yOff; WM_InvalidateRect(hWin, &r); } /********************************************************************* * * _AlertOn */ static void _AlertOn(int Index) { if (_hAlert[Index] == 0) { BUTTON_Handle hBut; WM_HWIN hClient; int Off = Index * 10; _hAlert[Index] = FRAMEWIN_Create(_acAlertText[Index], 0, WM_CF_SHOW, 100 + Off, 85 + Off, 110, 60); FRAMEWIN_SetMoveable(_hAlert[Index], 1); FRAMEWIN_SetActive(_hAlert[Index], 1); FRAMEWIN_SetBarColor(_hAlert[Index], 0, Index ? GUI_BLUE : GUI_RED); hClient = WM_GetClientWindow(_hAlert[Index]); WM_SetCallback(hClient, &_cbWinAlert); hBut = BUTTON_CreateAsChild(20, 10, 65, 20, hClient, 1, WM_CF_SHOW); BUTTON_SetText(hBut, "OK"); _AlertCnt[Index] = 250; } } /********************************************************************* * * _AlertOff */ static void _AlertOff(int Index) { if (_hAlert[Index]) { WM_DeleteWindow(_hAlert[Index]); _hAlert[Index] = 0; _AlertCnt[Index] = 0; } } /********************************************************************* * * _SlideValue */ static int _SlideValue(OBJECT* pObj, int Step) { int DiffY = pObj->NewV - pObj->ActV; if (DiffY != 0) { if (DiffY < 0) { pObj->ActV -= Step; DiffY = -DiffY; } else { pObj->ActV += Step; } if ((DiffY - Step) < 0) { pObj->ActV = pObj->NewV; } return 1; } return 0; } /********************************************************************* * * _SlideStatus */ static void _SlideStatus() { int Step = ((GUI_GetTime() - _SlidePrevTime) * 5) >> 7; if (Step != 0) { _SlidePrevTime = GUI_GetTime(); if (_SlideValue(&_Garage, Step << 1)) { _InvalidateObject(_hWinHouse, _Garage.Rect); _InvalidateObject2(_hWinMap, _GarageSmall.Rect); } if (_SlideValue(&_Jalousie1, Step)) { _InvalidateObject(_hWinHouse, _Jalousie1.Rect); _InvalidateObject2(_hWinMap, _Jalousie1Small.Rect); } if (_SlideValue(&_Jalousie2, Step)) { _InvalidateObject(_hWinHouse, _Jalousie2.Rect); _InvalidateObject2(_hWinMap, _Jalousie2Small.Rect); } if (_SlideValue(&_Marquee1, Step)) { _InvalidateObject(_hWinHouse, _Marquee1.Rect); _InvalidateObject2(_hWinMap, _Marquee1Small.Rect); } if (_SlideValue(&_Marquee2, Step)) { _InvalidateObject(_hWinHouse, _Marquee2.Rect); _InvalidateObject2(_hWinMap, _Marquee2Small.Rect); } if (_SlideValue(&_Elevator.Itself, Step)) { _InvalidateObject(_hWinHouse, _Elevator.Itself.Rect); _InvalidateObject2(_hWinMap, _ElevatorSmall.Rect); } if (_SlideValue(&_Elevator.Door, Step << 1)) { _InvalidateRect(_hWinHouse, _Elevator.Door.Rect, 0, _Elevator.Itself.ActV - _Scroll.ActV); } if (_AlertCnt[0]) { _AlertCnt[0] -= Step; if (_AlertCnt[0] <= 0) _AlertOff(0); } if (_AlertCnt[1]) { _AlertCnt[1] -= Step; if (_AlertCnt[1] <= 0) _AlertOff(1); } } Step = GUI_GetTime() - _ScrollPrevTime; if (Step != 0) { _ScrollPrevTime = GUI_GetTime(); if (_SlideValue(&_Scroll, Step << 1)) { SCROLLBAR_SetValue(_hScroll, _Scroll.ActV); _InvalidateObject(_hWinHouse, _Scroll.Rect); } } } /********************************************************************* * * _Clip */ static int _Clip(int Value) { Value = (Value < 100) ? Value : 100; Value = (Value > 0) ? Value : 0; return Value; } /********************************************************************* * * static code, drawing functions * ********************************************************************** */ /********************************************************************* * * _DrawRect */ static void _DrawRect(int x0, int y0, int x1, int y1, int PenSize) { GUI_SetPenSize(PenSize); GUI_DrawRect(x0, y0, x1, y1 + PenSize - 1); } /********************************************************************* * * _DrawElevator2 */ static void _DrawElevator2(int x, int y, int w, int h, int x0, int y0, int x1, int y1, int Index, GUI_COLOR Color) { if (y0 <= y1 && x0 <= x1) { GUI_RECT ClipRect; const GUI_RECT* OldClipRect; int Door = (w - 2) * (100 - _Elevator.Door.ActV) / 100; ClipRect.x0 = x + x0; ClipRect.y0 = y + y0; ClipRect.x1 = x + x1; ClipRect.y1 = y + y1; OldClipRect = WM_SetUserClipRect(&ClipRect); /* Draw elevator car */ GUI_SetColor(LCD_MixColors256(Color, GUI_GRAY, Index ? 150 : 0)); GUI_FillRect(x, y, x + w, y + h); /* Draw door frame (inside) */ GUI_SetColor(LCD_MixColors256(Color, GUI_WHITE, Index ? 150 : 0)); _DrawRect(x, y, x + w, y + h, 1); /* Draw elevator door (inside) */ GUI_SetColor(LCD_MixColors256(Color, GUI_LIGHTGRAY, Index ? 150 : 0)); GUI_FillRect(x + 1, y + 1, x + 1 + Door, y + h - 1); WM_SetUserClipRect(OldClipRect); } } /********************************************************************* * * _DrawElevator */ static void _DrawElevator(int x, int y, int w, int h, int Level) { GUI_COLOR Color1, Color2; int yPos, yStart, yEnd, y0, y1; int Light = _Level[Level].Light.ActV; /* Draw elevator shaft */ Color1 = (0x8F * Light / 100 + 0x60) << 16; Color1 += (0x7F * Light / 100 + 0x0) << 8; Color1 += (0x6F * Light / 100 + 0x20); GUI_SetColor(Color1); GUI_FillRect(x, y, x + w, y + h); /* Draw elevator door (outside) */ Color2 = 0x5F * Light / 100 + 0xA0; Color2 = (Color2 << 16 | Color2 << 8 | Color2); GUI_SetColor(Color2); GUI_FillRect(x + 2, y + 80, x + w - 2, y + h - 2); /* Draw elevator car */ yPos = _Elevator.Itself.ActV - (5 - Level) * 130 + 80; yStart = (yPos < 0) ? -yPos : 0; yEnd = (yPos > 82) ? 125 - yPos : 43; if (yPos != 80) { y0 = (yPos > 80) ? yStart + 44 - (yPos - 80) : yStart; y1 = (yPos > 80) ? yEnd : 79 - yPos; _DrawElevator2(x + 2, y + yPos, w - 4, 43, 0, y0, w - 4, y1, 1, Color1); } y0 = (yPos < 80) ? yStart + (80 - yPos) : yStart; y1 = (yPos > 80) ? 43 - (yPos - 80) : 43; if (_Elevator.Move) { GUI_SetColor(Color2); GUI_FillRect(x + 2, y + 80, x + w - 2, y + h - 2); _DrawElevator2(x + 2, y + yPos, w - 4, 43, 0, y0, w - 4, y1, 1, Color2); } else { int Door = (w - 4) * (100 - _Elevator.Door.ActV) / 100; _DrawElevator2(x + 2, y + yPos, w - 4, 43, 0, y0, Door, y1, 1, Color2); _DrawElevator2(x + 2, y + yPos, w - 4, 43, Door + 1, y0, w - 4, y1, 0, Color2); } /* Draw door frame (outside) */ Color2 = 0x7F * Light / 100 + 0x50; GUI_SetColor(Color2 << 16); _DrawRect(x + 1, y + 79, x + w - 1, y + h - 1, 1); /* Draw level number */ if (_Elevator.Itself.ActV == _Elevator.Itself.NewV && _Elevator.Itself.ActV == ((5 - Level) * 130)) { GUI_SetColor(0x00FF40); } else { Color2 = 0x3F * Light / 100 + 0xC0; GUI_SetColor(Color2 << 8 | Color2); } GUI_SetFont(&GUI_Font8x8); GUI_SetTextMode(GUI_TM_TRANS); GUI_DispCharAt(Level + 1 + '0', x + (w / 2) - 3, y + 70); } /********************************************************************* * * _DrawWindow */ static void _DrawWindow(int x, int y, int w, int h, int dy, int Light) { GUI_COLOR Color; int i; Color = 0x80 * Light / 100 + 0x7F; GUI_SetColor(Color << 16); GUI_FillRect(x, y, x + w, y + h); Color = 0x60 * Light / 100 + 0x9F; GUI_SetColor(Color << 16 | Color << 8 | Color); GUI_DrawVLine(x, y, y + h); GUI_DrawVLine(x + w / 2, y, y + h); GUI_DrawVLine(x + w, y, y + h); for (i = 0; i < h; i += dy) { GUI_DrawHLine(y + i, x, x + w); } GUI_DrawHLine(y + h, x, x + w); } /********************************************************************* * * _DrawFrame */ static void _DrawFrame(int x, int y, int w, int h, int Light) { GUI_COLOR Color; Color = 0x88 * Light / 100 + 0x48; GUI_SetColor(Color << 16 | Color << 8 | Color); GUI_FillRect(x, y, x + w - 1, y + h - 1); GUI_SetColor(GUI_WHITE); _DrawRect(x, y, x + w - 1, y + h - 1, 2); Color = 0xA0 * Light / 100 + 0x5F; GUI_SetColor(Color << 16 | Color << 8 | Color); GUI_SetPenSize(1); GUI_DrawLine(x + 2, y + 2, x + w - 2, y + h - 2); GUI_DrawLine(x + w - 2, y + 2, x + 2, y + h - 2); } /********************************************************************* * * _DrawMarquee */ static void _DrawMarquee(int x, int y, int w, int h, int d, int Status) { GUI_RECT ClipRect; const GUI_RECT* OldClipRect; ClipRect.x0 = (d < 0) ? (x - w - 2) : (x + 1); ClipRect.y0 = y - 1; ClipRect.x1 = (d < 0) ? (x - 1) : (x + w + 2); ClipRect.y1 = y + 61; OldClipRect = WM_SetUserClipRect(&ClipRect); GUI_AA_SetFactor(4); GUI_AA_EnableHiRes(); x <<= 2; y <<= 2; w = (w - 2) * (100 - Status) / 25 + 12; w = (d > 0) ? w : -w; h = h * (100 - Status) / 25 + 4; GUI_SetPenSize(3); GUI_SetPenShape(GUI_PS_ROUND); GUI_SetColor(0xA08080); GUI_AA_DrawLine(x + (60 * d), y + 240, x, y + 240); GUI_SetPenShape(GUI_PS_FLAT); GUI_SetColor(0x00C0FF); GUI_AA_DrawLine(x + w, y + h, x, y); GUI_AA_DrawLine(x + w - (3 * d), y + h, x + w - (3 * d), y + h + 20); GUI_AA_DisableHiRes(); WM_SetUserClipRect(OldClipRect); } /********************************************************************* * * _DrawJalousie */ static void _DrawJalousie(int x, int y, int h, int Status) { GUI_SetColor(0x0C0FF); GUI_SetPenSize(3); GUI_SetPenShape(GUI_PS_ROUND); GUI_DrawLine(x, y, x, y + (h * Status / 100) + 2); } /********************************************************************* * * _DrawRoof */ static void _DrawRoof(int x, int y) { GUI_SetBkColor(GUI_BLACK); GUI_ClearRect(35, y - 70, 164, y + 59); GUI_SetColor(0xD82000); GUI_AA_SetFactor(3); GUI_AA_FillPolygon(_aRoof, 3, x, y); GUI_SetColor(0x0066FF); if (_LogoRPM < 0) { GUI_FillPolygon(_aArrowLeft, 8, x - 4, y + 9); } if (_LogoRPM > 0) { GUI_FillPolygon(_aArrowRight, 8, x - 4, y + 9); } GUI_DrawBitmapEx(&_LogoBitmap, x - 1, y - _Logo.YSize / 2 - 3, _Logo.XCenter, _Logo.YCenter, _LogoMulX, LOGOMULY); } /********************************************************************* * * _DrawDoor */ static void _DrawDoor(int x, int y, int w, int h) { GUI_SetColor(GUI_BLUE); GUI_FillRect(x, y, x + w, y + h); GUI_SetColor(GUI_BLACK); _DrawRect(x, y, x + w, y + h, 1); GUI_DrawHLine(y + h/2, x + 4, x + 8); GUI_DrawVLine(x + 4, y + h/2 - 1, y + h/2 + 3); } /********************************************************************* * * _DrawGarage */ static void _DrawGarage(int x, int y, int w, int h, int Status) { GUI_SetColor(GUI_YELLOW); GUI_FillRect(x, y + 1, x + w, y + ((h - 2) * (100 - Status) / 100) + 1); GUI_SetColor(GUI_BLACK); _DrawRect(x, y, x + w, y + h, 1); } /********************************************************************* * * _DrawSmallLevel */ static void _DrawSmallLevel(int Level, int x0, int y0, int Light) { GUI_COLOR Color; int i; y0 += (4 - Level) * 39; /* Draw frame of levels (background) */ Color = 0x78 * Light / 100 + 0x58; GUI_SetColor(Color << 16 | Color << 8 | Color); GUI_FillRect(x0 + 9, y0 + 40, x0 + 46, y0 + 78); /* Draw frame of levels (rear bracing)*/ Color = 0xA0 * Light / 100 + 0x5F; GUI_SetColor(Color << 16 | Color << 8 | Color); GUI_DrawLine(x0 + 9, y0 + 40, x0 + 46, y0 + 77); GUI_DrawLine(x0 + 9, y0 + 77, x0 + 46, y0 + 40); /* Draw windows */ Color = 0x80 * Light / 100 + 0x7F; GUI_SetColor(Color << 16); GUI_FillRect(x0 + 32, y0 + 42, x0 + 40, y0 + 75); Color = 0x60 * Light / 100 + 0x9F; GUI_SetColor(Color << 16 | Color << 8 | Color); GUI_DrawVLine(x0 + 31, y0 + 41, y0 + 76); GUI_DrawVLine(x0 + 36, y0 + 41, y0 + 76); GUI_DrawVLine(x0 + 41, y0 + 41, y0 + 76); for (i = 0; i < ((Level) ? 8 : 5); i++) { GUI_DrawHLine(y0 + (i * 5) + 41, x0 + 31, x0 + 40); } /* Draw elevator shaft*/ Color = (0x8F * Light / 100 + 0x60) << 16; Color += (0x7F * Light / 100 + 0x0) << 8; Color += (0x6F * Light / 100 + 0x20); GUI_SetColor(Color); GUI_FillRect(x0 + 14, y0 + 40, x0 + 23, y0 + 77); Color = 0x5F * Light / 100 + 0xA0; GUI_SetColor(Color << 16 | Color << 8 | Color); GUI_FillRect(x0 + 15, y0 + 64, x0 + 22, y0 + 76); } /********************************************************************* * * _DrawSmallElevatorDoor */ static void _DrawSmallElevatorDoor(int Level, int x0, int y0, int Light) { GUI_COLOR Color; y0 += (4 - Level) * 39; Color = 0x7F * Light / 100 + 0x50; GUI_SetColor(Color << 16); _DrawRect(x0 + 14, y0 + 63, x0 + 23, y0 + 77, 1); if (_Elevator.Itself.ActV == _Elevator.Itself.NewV && _Elevator.Itself.ActV == ((5 - Level) * 130)) { GUI_SetColor(0x00FF60); //GUI_SetColor(0x00FF40); } else { Color = 0x2F * Light / 100 + 0xD0; GUI_SetColor(Color << 8 | Color); } GUI_DrawHLine(y0 + 61, x0 + 18, x0 + 19); } /********************************************************************* * * _DrawRotateLogo */ static int _DrawRotateLogo(void) { if (_LogoRPM != 0) { if ((GUI_GetTime() - _LogoPrevTime) >= _LogoWaitTime) { _LogoDivisor = 60000 / _LogoRPM / PI2; _LogoAngle += (GUI_GetTime() - _LogoPrevTime) / _LogoDivisor; _LogoPrevTime = GUI_GetTime(); _LogoMulX = cos(_LogoAngle) * LOGOMULX; if (_LogoMulX != _LogoPrevMulX) { _LogoPrevMulX = _LogoMulX; return 1; } } } return 0; } /********************************************************************* * * _DrawLevel */ static void _DrawLevel(int n, int y) { if (n != 5) { _DrawFrame(35, y, 129, 129, _Level[n].Light.ActV); _DrawElevator(55, y + 2, 30, 125, n); if (n != 0) { _DrawWindow(115, y + 5, 30, 119, 17, _Level[n].Light.ActV); } } switch (n) { case 0: _DrawWindow(115, y + 5, 30, 76, 17, _Level[0].Light.ActV); _DrawDoor(115, y + 82, 30, 45); _DrawGarage(40, y + 82, 50, 45, _Garage.ActV); break; case 1: _DrawMarquee(164, y + 30, 30, 10, 1, _Marquee1.ActV); break; case 2: _DrawJalousie(166, y + 10, 90, _Jalousie1.ActV); break; case 3: _DrawMarquee(35, y + 30, 30, 10, -1, _Marquee2.ActV); break; case 4: _DrawJalousie(33, y + 10, 90, _Jalousie2.ActV); break; case 5: _DrawRoof(99, y + 70); } } /********************************************************************* * * _DrawHouseMap */ static void _DrawHouseMap(int x0, int y0) { int i, ElevatorY, Status; /* Draw roof of house */ GUI_AA_SetFactor(5); GUI_AA_EnableHiRes(); GUI_SetColor(0xD82000); GUI_AA_FillPolygon(_aRoofMini, 3, (x0 * 5) + 138, (y0 * 5) + 105); GUI_AA_DisableHiRes(); GUI_DrawBitmapEx(&_LogoBitmap, x0 + 28, y0 + 18 - _Logo.YSize / 4, _Logo.XCenter, _Logo.YCenter, _LogoMulX >> 1, LOGOMULY >> 1); /* Draw levels*/ for (i = 0; i < 5; i++) { _DrawSmallLevel(i, x0, y0, _Level[i].Light.ActV); } /* Draw elevator car */ GUI_SetColor(0xD0D0D0); ElevatorY = y0 + (_Elevator.Itself.ActV / (10. / 3.)) + 25; GUI_FillRect(x0 + 15, ElevatorY, x0 + 22, ElevatorY + 12); /* Draw elevator doors */ for (i = 0; i < 5; i++) { _DrawSmallElevatorDoor(i, x0, y0, _Level[i].Light.ActV); } /* Draw door */ GUI_SetColor(GUI_BLUE); GUI_FillRect(x0 + 32, y0 + 220, x0 + 40, y0 + 232); GUI_SetColor(GUI_BLACK); _DrawRect(x0 + 31, y0 + 219, x0 + 41, y0 + 233, 1); GUI_SetColor(0x707070); GUI_DrawHLine(y0 + 219, x0 + 31, x0 + 41); /* Draw Garage */ Status = ((100 - _Garage.ActV) * 12 / 100); GUI_SetColor(GUI_YELLOW); GUI_FillRect(x0 + 10, y0 + 220, x0 + 24, y0 + 220 + Status); GUI_SetColor(GUI_BLACK); _DrawRect(x0 + 9, y0 + 219, x0 + 25, y0 + 233, 1); /* Draw Jalousie 1 */ Status = (_Jalousie1.ActV * 23 / 100); GUI_SetColor(0x00C0FF); GUI_DrawVLine(x0 + 48, y0 + 120, y0 + 124 + Status); GUI_SetColor(0x006C90); GUI_DrawVLine(x0 + 49, y0 + 120, y0 + 124 + Status); /* Draw Jalousie 2 */ Status = (_Jalousie2.ActV * 23 / 100); GUI_SetColor(0x00C0FF); GUI_DrawVLine(x0 + 7, y0 + 42, y0 + 46 + Status); GUI_SetColor(0x006C90); GUI_DrawVLine(x0 + 6, y0 + 42, y0 + 46 + Status); /* Draw Marquee 1*/ GUI_AA_SetFactor(5); GUI_AA_EnableHiRes(); GUI_SetPenSize(2); Status = ((100 - _Marquee1.ActV) * 28 / 100) + 5; GUI_SetColor(0x0C0FF); GUI_AA_DrawLine(240, 835, 240 + Status, 835 + Status/2.5); GUI_SetColor(0xA08080); GUI_DrawHLine(183, 47, 51); GUI_DrawHLine(184, 47, 51); /* Draw Marquee 2*/ Status = ((100 - _Marquee2.ActV) * 28 / 100) + 5; GUI_SetColor(0x0C0FF); GUI_AA_DrawLine(40, 445, 40 - Status, 445 + Status/2.5); GUI_SetColor(0xA08080); GUI_DrawHLine(105, 4, 8); GUI_DrawHLine(106, 4, 8); GUI_SetPenSize(1); GUI_AA_DisableHiRes(); /* Draw frame of levels (front bracing)*/ GUI_SetColor(0xFFFFFF); GUI_DrawVLine(x0 + 8, y0 + 39, y0 + 234); GUI_DrawVLine(x0 + 47, y0 + 39, y0 + 234); GUI_DrawHLine(y0 + 39, x0 + 9, x0 + 46); GUI_DrawHLine(y0 + 78, x0 + 9, x0 + 46); GUI_DrawHLine(y0 + 117, x0 + 9, x0 + 46); GUI_DrawHLine(y0 + 156, x0 + 9, x0 + 46); GUI_DrawHLine(y0 + 195, x0 + 9, x0 + 46); GUI_DrawHLine(y0 + 234, x0 + 9, x0 + 46); } /********************************************************************* * * static code, elevator functions * ********************************************************************** */ /********************************************************************* * * _ElevatorOpenDoor */ static void _ElevatorOpenDoor(void) { _Elevator.Door.NewV = 100; _Elevator.Time = GUI_GetTime() + 4000; _SerialSendCommand("LIFT_OPEN", -1, -1); } /********************************************************************* * * _ElevatorCloseDoor */ static void _ElevatorCloseDoor(void) { _Elevator.Door.NewV = 0; _Elevator.Time = GUI_GetTime() + 2000; _SerialSendCommand("LIFT_CLOSE", -1, -1); } /********************************************************************* * * _ElevatorMoveTo */ static void _ElevatorMoveTo(int Level) { if (Level < 5) { _Elevator.Itself.NewV = (5 - Level) * 130; _Elevator.Move = (_Elevator.Itself.ActV > _Elevator.Itself.NewV) ? 1 : -1; WM_InvalidateWindow(_Elevator.Handle); _SerialSendCommand("LIFT", Level, -1); } } /********************************************************************* * * _ElevatorStop */ static void _ElevatorStop(void) { _Elevator.Move = 0; _Elevator.Itself.NewV = _Elevator.Itself.ActV; WM_InvalidateWindow(_Elevator.Handle); } /********************************************************************* * * _ElevatorAddLevel */ static void _ElevatorAddLevel(int Level) { if (_Level[Level].Elevator == 0 && Level < 5) { _Level[Level].Elevator = 1; _Elevator.ToDo[_Elevator.NumToDo++] = Level; WM_InvalidateWindow(_Elevator.Handle); } } /********************************************************************* * * _ElevatorDelLevel */ static void _ElevatorDelLevel(int Level) { int i; if (_Level[Level].Elevator != 0 && Level < 5) { _Level[Level].Elevator = 0; for (i = 0; i < _Elevator.NumToDo; i++) { if (_Elevator.ToDo[i] == Level) break; } for (; i < (_Elevator.NumToDo - 1); i++) { _Elevator.ToDo[i] = _Elevator.ToDo[i + 1]; } _Elevator.NumToDo--; } } /********************************************************************* * * _ElevatorGetLevel */ static void _ElevatorGetLevel(void) { _Elevator.Level = 5 - ((_Elevator.Itself.ActV + 65) / 130); if (_Elevator.Level != _Elevator.LastLevel) { WM_InvalidateWindow(_Elevator.Handle); _Elevator.LastLevel = _Elevator.Level; } } /********************************************************************* * * _ElevatorOptimize */ static void _ElevatorOptimize(void) { int EndLevel = 5 - (_Elevator.Itself.NewV / 130); int Diff, i, Level; if (_Elevator.Itself.ActV < _Elevator.Itself.NewV) { Level = (5 - ((_Elevator.Itself.ActV + 130) / 130)); } else { Level = (5 - ((_Elevator.Itself.ActV - 1) / 130)); } Diff = (Level < EndLevel) ? 1 : -1; for (i = Level; i != EndLevel; i += Diff) { if (_Level[i].Elevator) { _ElevatorMoveTo(i); break; } } } /********************************************************************* * * _ElevatorPause */ static void _ElevatorPause(void) { _Elevator.Pause = ~_Elevator.Pause; if (_Elevator.Pause) { _Elevator.Itself.NewV = _Elevator.Itself.ActV; _SerialSendCommand("LIFT_STOP", -1 , -1); } else { if (_Elevator.Door.ActV == 0) { if (_Elevator.NumToDo > 0) { _ElevatorMoveTo(_Elevator.ToDo[0]); } } } WM_InvalidateWindow(_Elevator.Handle); } /********************************************************************* * * _ElevatorMove */ static void _ElevatorMove(int Level) { int yPos; if (_Level[Level].Elevator == 0) { yPos = (5 - Level) * 130; if (yPos != _Elevator.Itself.ActV || _Elevator.Itself.ActV != _Elevator.Itself.NewV) { _ElevatorAddLevel(Level); } else { _ElevatorOpenDoor(); } } } /********************************************************************* * * _ElevatorExec */ static void _ElevatorExec(void) { if (GUI_GetTime() < _Elevator.Time) return; if (_Elevator.Door.ActV == _Elevator.Door.NewV) { if (_Elevator.Door.ActV == 100) { _ElevatorCloseDoor(); } else { if (!_Elevator.Pause) { if (_Elevator.Move) { if (_Elevator.Itself.ActV == _Elevator.Itself.NewV) { _ElevatorDelLevel(_Elevator.Level); _ElevatorStop(); _ElevatorOpenDoor(); } else { _ElevatorOptimize(); _ElevatorGetLevel(); } } else { if (_Elevator.NumToDo > 0) { _ElevatorMoveTo(_Elevator.ToDo[0]); } else { _Elevator.Time = GUI_GetTime() + 250; } } } } } } /********************************************************************* * * static code, callbacks * ********************************************************************** */ /********************************************************************* * * _cbReceiveCommand */ static void _cbReceiveCommand(const char* pStr, int v1, int v2) { if (_ExecuteCommands) { if (strcmp(pStr, "LIGHT") == 0) { if (v1 >= 0 && v1 <= 4) { _Level[v1].Light.ActV = _Clip(v2); _InvalidateObject(_hWinHouse, _Level[v1].Light.Rect); _InvalidateObject2(_hWinMap, _LightSmall[v1].Rect); _SetDialogLight(); } return; } if (strcmp(pStr, "JALOUSIE") == 0) { if (v1) { _Jalousie1.NewV = _Clip(v2); } else { _Jalousie2.NewV = _Clip(v2); } return; } if (strcmp(pStr, "MARQUEE") == 0) { if (v1) { _Marquee1.NewV = _Clip(v2); } else { _Marquee2.NewV = _Clip(v2); } return; } if (strcmp(pStr, "GARAGE") == 0) { _Garage.NewV = _Clip(v1); return; } if (strcmp(pStr, "LOGO") == 0) { switch (v1) { case 0: _LogoRPM = 0; _LogoMulX = LOGOMULX; _InvalidateObject(_hWinHouse, _LogoLarge.Rect); _InvalidateObject2(_hWinMap, _LogoSmall.Rect); break; case 1: _LogoRPM = -RPM; break; case 2: _LogoRPM = RPM; } _InvalidateObject(_hWinHouse, _LogoArrow.Rect); return; } if (strcmp(pStr, "LIFT") == 0) { _ElevatorMove(v1); return; } if (strcmp(pStr, "LIFT_OPEN") == 0) { _ElevatorOpenDoor(); return; } if (strcmp(pStr, "LIFT_STOP") == 0) { _ElevatorPause(); return; } if (strcmp(pStr, "SHOW") == 0) { if (v1 >= 0 && v1 <= 5) { _Scroll.NewV = 650 - v1 * 130; _ScrollPrevTime = GUI_GetTime(); } return; } if (strcmp(pStr, "BURGLARY") == 0) { if (v1 & 0x1) { _AlertOn(0); } if (v1 & 0x2) { _AlertOn(1); } return; } } } /********************************************************************* * * static code, window callbacks * ********************************************************************** */ /********************************************************************* * * _cbBkWindow */ static void _cbBkWindow(WM_MESSAGE* pMsg) { switch (pMsg->MsgId) { case WM_PAINT: GUI_SetBkColor(GUI_BLACK); GUI_Clear(); break; default: WM_DefaultProc(pMsg); } } /********************************************************************* * * _cbWinControl */ static void _cbWinControl(WM_MESSAGE* pMsg) { switch (pMsg->MsgId) { case WM_PAINT: GUI_SetBkColor(GUI_GRAY); GUI_Clear(); break; default: if (_pfcbFrameWin) { (*_pfcbFrameWin)(pMsg); } } } /********************************************************************* * * _cbWinHouse */ static void _cbWinHouse(WM_MESSAGE* pMsg) { WM_SCROLL_STATE ScrollState; switch (pMsg->MsgId) { case WM_NOTIFY_PARENT: if (pMsg->Data.v == WM_NOTIFICATION_VALUE_CHANGED) { if (WM_GetId(pMsg->hWinSrc) == GUI_ID_VSCROLL) { WM_GetScrollState(pMsg->hWinSrc, &ScrollState); if (ScrollState.v != _Scroll.ActV) { _Scroll.NewV = ScrollState.v; _Scroll.ActV = _Scroll.NewV; _InvalidateObject(_hWinHouse, _Scroll.Rect); WM_BringToTop(WM_GetParent(pMsg->hWin)); } } } break; case WM_PAINT: GUI_SetBkColor(GUI_BLACK); GUI_ClearRect(0, 0, 34, 129); GUI_ClearRect(165, 0, 199, 129); if (_Scroll.ActV < 130) { _DrawLevel(5, 0 - _Scroll.ActV); } if (_Scroll.ActV != 0 && _Scroll.ActV < 260) { _DrawLevel(4, 130 - _Scroll.ActV); } if (_Scroll.ActV > 130 && _Scroll.ActV < 390) { _DrawLevel(3, 260 - _Scroll.ActV); } if (_Scroll.ActV > 260 && _Scroll.ActV < 520) { _DrawLevel(2, 390 - _Scroll.ActV); } if (_Scroll.ActV > 390 && _Scroll.ActV < 650) { _DrawLevel(1, 520 - _Scroll.ActV); } if (_Scroll.ActV > 520) { _DrawLevel(0, 650 - _Scroll.ActV); } break; default: WM_DefaultProc(pMsg); } } /********************************************************************* * * _cbWinMap */ static void _cbWinMap(WM_MESSAGE* pMsg) { GUI_PID_STATE TouchState; switch (pMsg->MsgId) { case WM_TOUCH: GUI_TOUCH_GetState(&TouchState); if (TouchState.Pressed) { int x = TouchState.x - WM_GetWindowOrgX(pMsg->hWin); int y = TouchState.y - WM_GetWindowOrgY(pMsg->hWin); if (x >= 0 && x <= 50 && y >= 0 && y <= 233) { _Scroll.NewV = 650 - 130 * (5 - (y / 39)); _ScrollPrevTime = GUI_GetTime(); } } break; case WM_PAINT: GUI_SetBkColor(GUI_BLACK); GUI_Clear(); _DrawHouseMap(0, 0); break; default: WM_DefaultProc(pMsg); } } /********************************************************************* * * _cbWinAlert */ static void _cbWinAlert(WM_MESSAGE* pMsg) { WM_HWIN hParent; int Index; hParent = WM_GetParent(pMsg->hWin); for (Index = 0; Index < 2; Index++) { if (hParent == _hAlert[Index]) break; } switch (pMsg->MsgId) { case WM_PAINT: GUI_SetBkColor(GUI_WHITE); GUI_Clear(); break; case WM_NOTIFY_PARENT: if (pMsg->Data.v == WM_NOTIFICATION_RELEASED) { _AlertOff(Index); } case WM_TOUCH: WM_BringToTop(_hAlert[Index]); break; default: WM_DefaultProc(pMsg); } } /********************************************************************* * * static code, dialog callbacks * ********************************************************************** */ /********************************************************************* * * _cbDialogLight */ static void _cbDialogLight(WM_MESSAGE* pMsg) { switch (pMsg->MsgId) { case WM_INIT_DIALOG: _hDialogLight = pMsg->hWin; _SetDialogLight(); break; case WM_NOTIFY_PARENT: if (_InitDialog) break; if (pMsg->Data.v == WM_NOTIFICATION_VALUE_CHANGED) { int Id = WM_GetId(pMsg->hWinSrc); if (Id >= GUI_ID_SLIDER0 && Id <= GUI_ID_SLIDER4) { int i = Id - GUI_ID_SLIDER0; _Level[i].Light.ActV = _GetSliderValue(pMsg->hWin, Id); _InvalidateObject(_hWinHouse, _Level[i].Light.Rect); _InvalidateObject2(_hWinMap, _LightSmall[i].Rect); _SerialSendCommand("LIGHT", i, _Level[i].Light.ActV); } } case WM_TOUCH: WM_BringToTop(WM_GetParent(_hWinControl)); break; default: WM_DefaultProc(pMsg); } } /********************************************************************* * * _cbDialogMisc */ static void _cbDialogMisc(WM_MESSAGE* pMsg) { switch (pMsg->MsgId) { case WM_NOTIFY_PARENT: if (_InitDialog) break; if (pMsg->Data.v == WM_NOTIFICATION_RELEASED) { int Id = WM_GetId(pMsg->hWinSrc); if (Id >= GUI_ID_BUTTON0 && Id <= GUI_ID_BUTTON7) { switch (Id) { case GUI_ID_BUTTON0: _Jalousie2.NewV = 100 - _Jalousie2.NewV; _SerialSendCommand("JALOUSIE", 0, _Jalousie2.NewV); break; case GUI_ID_BUTTON1: _Jalousie1.NewV = 100 - _Jalousie1.NewV; _SerialSendCommand("JALOUSIE", 1, _Jalousie1.NewV); break; case GUI_ID_BUTTON2: _Marquee2.NewV = 100 - _Marquee2.NewV; _SerialSendCommand("MARQUEE", 0, _Marquee2.NewV); break; case GUI_ID_BUTTON3: _Marquee1.NewV = 100 - _Marquee1.NewV; _SerialSendCommand("MARQUEE", 1, _Marquee1.NewV); break; case GUI_ID_BUTTON4: _Garage.NewV = 100 - _Garage.NewV; _SerialSendCommand("GARAGE", _Garage.NewV, -1); break; case GUI_ID_BUTTON5: _LogoRPM = -RPM; _InvalidateObject(_hWinHouse, _LogoArrow.Rect); _SerialSendCommand("LOGO", 1, -1); break; case GUI_ID_BUTTON6: _LogoRPM = 0; _LogoMulX = LOGOMULX; _InvalidateObject(_hWinHouse, _LogoArrow.Rect); _InvalidateObject(_hWinHouse, _LogoLarge.Rect); _InvalidateObject2(_hWinMap, _LogoSmall.Rect); _SerialSendCommand("LOGO", 0, -1); break; case GUI_ID_BUTTON7: _LogoRPM = RPM; _InvalidateObject(_hWinHouse, _LogoArrow.Rect); _SerialSendCommand("LOGO", 2, -1); break; } } } case WM_TOUCH: WM_BringToTop(WM_GetParent(_hWinControl)); break; default: WM_DefaultProc(pMsg); } } /********************************************************************* * * _cbDialogElev */ static void _cbDialogElev(WM_MESSAGE* pMsg) { int i; switch (pMsg->MsgId) { case WM_INIT_DIALOG: _Elevator.Handle = pMsg->hWin; break; case WM_NOTIFY_PARENT: if (_InitDialog) break; if (pMsg->Data.v == WM_NOTIFICATION_CLICKED) { int Id = WM_GetId(pMsg->hWinSrc); if (Id >= GUI_ID_BUTTON0 && Id <= GUI_ID_BUTTON4) { _ElevatorMove(Id - GUI_ID_BUTTON0); } else { if (Id == GUI_ID_BUTTON5) { if (!_Elevator.Move) { if (_Elevator.Itself.ActV == _Elevator.Itself.NewV) { _ElevatorOpenDoor(); } } } if (Id == GUI_ID_BUTTON6) { if (_Elevator.Pause) { BUTTON_SetText(pMsg->hWinSrc, "Pause"); } else { BUTTON_SetText(pMsg->hWinSrc, "Resume"); } _ElevatorPause(); } } } case WM_TOUCH: WM_BringToTop(WM_GetParent(_hWinControl)); break; case WM_PAINT: GUI_SetBkColor(GUI_BLACK); GUI_ClearRect(0, 0, 35, 15); GUI_SetColor(GUI_GRAY); GUI_FillRect(0, 16, 35, 114); GUI_SetColor(GUI_WHITE); GUI_DrawRect(0, 0, 35, 114); GUI_DrawHLine(16, 0, 35); GUI_SetColor(GUI_RED); GUI_SetFont(&GUI_Font8x10_ASCII); GUI_DispCharAt(_Elevator.Level + '1', 9, 4); if (_Elevator.Move) { GUI_FillPolygon((_Elevator.Move < 0) ? _aArrowDown : _aArrowUp, 8, 22, 4); } GUI_SetBkColor(GUI_GRAY); GUI_SetFont(&GUI_Font6x8); for (i = 0; i < 5; i++) { GUI_SetColor((_Level[i].Elevator) ? GUI_RED : GUI_BLACK); GUI_DispCharAt(i + '1', 6, 97 - (i * 18)); } break; default: WM_DefaultProc(pMsg); } } /********************************************************************* * * static code * ********************************************************************** */ /********************************************************************* * * _NEC_Demo */ static void _NEC_Demo(void) { MULTIPAGE_Handle hMultiPage; FRAMEWIN_Handle hFrame; /* Use memory devices for all windows */ WM_SetCreateFlags(WM_CF_MEMDEV); WM_EnableMemdev(WM_HBKWIN); /* Set the callback for the background window */ WM_SetCallback(WM_HBKWIN, &_cbBkWindow); /* Create a framewin for the house */ FRAMEWIN_SetDefaultCaptionSize(14); FRAMEWIN_SetDefaultFont(&GUI_Font10_1); hFrame = FRAMEWIN_Create("House", 0, WM_CF_SHOW, 100, 28, 217, 151); FRAMEWIN_SetMoveable(hFrame, 1); FRAMEWIN_CreateMinButton(hFrame, FRAMEWIN_BUTTON_RIGHT, 0); /* Get the client window and add a scrollbar */ _hWinHouse = WM_GetClientWindow(hFrame); WM_SetCallback(_hWinHouse, &_cbWinHouse); _hScroll = SCROLLBAR_CreateAttached(_hWinHouse, SCROLLBAR_CF_VERTICAL); SCROLLBAR_SetNumItems(_hScroll, 780); SCROLLBAR_SetPageSize(_hScroll, 130); SCROLLBAR_SetValue(_hScroll, 650); /* Create a framewin for the controls */ _hWinControl = FRAMEWIN_Create("Control", 0, WM_CF_SHOW, 100, 5, 130, 181); FRAMEWIN_SetMoveable(_hWinControl, 1); FRAMEWIN_CreateMinButton(_hWinControl, FRAMEWIN_BUTTON_RIGHT, 0); FRAMEWIN_Minimize(_hWinControl); /* Get the client window and add controls */ _hWinControl = WM_GetClientWindow(_hWinControl); _pfcbFrameWin = WM_SetCallback(_hWinControl, &_cbWinControl); hMultiPage = MULTIPAGE_CreateEx(3, 4, 117, 153, _hWinControl, WM_CF_SHOW, 0, 0); _hDialogLight = _AddDialog("Light", ARRAY(_aDialogLight), &_cbDialogLight, hMultiPage); _AddDialog("Misc", ARRAY(_aDialogMisc), &_cbDialogMisc, hMultiPage); _AddDialog("Elev.", ARRAY(_aDialogElev), &_cbDialogElev, hMultiPage); MULTIPAGE_SelectPage(hMultiPage, 0); /* Create a window for the house map */ _hWinMap = WM_CreateWindow(0, 3, 57, 235, WM_CF_SHOW, &_cbWinMap, 0); /* Init some values */ _Logo.XCenter = ((_LogoBitmap.XSize / 2) - 1); _Logo.YCenter = ((_LogoBitmap.YSize / 2) - 1); _Logo.XSize = _LogoBitmap.XSize * LOGOMULX / 1000; _Logo.YSize = _LogoBitmap.YSize * LOGOMULY / 1000; _LogoLarge.Rect.x0 = 98 - _Logo.XSize / 2; _LogoLarge.Rect.y0 = 67 - _Logo.YSize; _LogoLarge.Rect.x1 = 100 + _Logo.XSize / 2; _LogoLarge.Rect.y1 = 69; _LogoSmall.Rect.x0 = 26 - _Logo.XSize / 4; _LogoSmall.Rect.y0 = 18 - _Logo.YSize / 2; _LogoSmall.Rect.x1 = 28 + _Logo.XSize / 4; _LogoSmall.Rect.y1 = 19; _Elevator.Itself.ActV = 650; _Elevator.Itself.NewV = 650; /* Init the serial interface */ _SerialInit(&_cbReceiveCommand); /* Show the touch cursor */ GUI_CURSOR_Select(&_TouchCursor); GUI_CURSOR_Show(); /* Handle the windows */ WM_SetFocus(hFrame); _ExecuteCommands = 1; while (1) { _SlideStatus(); _ElevatorExec(); if (_DrawRotateLogo()) { _InvalidateObject(_hWinHouse, _LogoLarge.Rect); _InvalidateObject2(_hWinMap, _LogoSmall.Rect); } _SerialExec(); GUI_Delay(5); } } /********************************************************************* * * MainTask * ********************************************************************** */ void MainTask(void) { GUI_Init(); _NEC_Demo(); }