📄 housecontrol.c
字号:
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 = 1000; _InvalidateObject(_hWinHouse, _Logo.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_TOUCH: WM_BringToTop(WM_GetParent(pMsg->hWin)); break; case WM_PAINT: GUI_SetBkColor(GUI_GRAY); GUI_Clear(); break; default: WM_DefaultProc(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_TOUCH: 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_CLICKED) { 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 = 1000; _InvalidateObject(_hWinHouse, _LogoArrow.Rect); _InvalidateObject(_hWinHouse, _Logo.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("NEC - House", 0, WM_CF_SHOW, 100, 28, 217, 151); FRAMEWIN_SetMoveable(hFrame, 1); FRAMEWIN_SetActive(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); FRAMEWIN_Minimize(hFrame); /* Create a framewin for the controls */ _hWinControl = FRAMEWIN_Create("Control", 0, WM_CF_SHOW, 100, 5, 130, 181); FRAMEWIN_SetMoveable(_hWinControl, 1); FRAMEWIN_SetActive(_hWinControl, 1); FRAMEWIN_CreateMinButton(_hWinControl, FRAMEWIN_BUTTON_RIGHT, 0); FRAMEWIN_Minimize(_hWinControl); /* Get the client window and add controls */ _hWinControl = WM_GetClientWindow(_hWinControl); WM_SetCallback(_hWinControl, &_cbWinControl); hMultiPage = MULTIPAGE_Create(3, 4, 117, 153, _hWinControl, 0, WM_CF_SHOW, 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 */ _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 */ _ExecuteCommands = 1; while (1) { _SlideStatus(); _ElevatorExec(); if (_DrawRotateLogo()) { _InvalidateObject(_hWinHouse, _Logo.Rect); _InvalidateObject2(_hWinMap, _LogoSmall.Rect); } _SerialExec(); WM_Exec(); }}/*********************************************************************** MainTask************************************************************************/void MainTask(void) { GUI_Init(); _NEC_Demo();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -