?? nec_buildingmanagement.c
字號:
/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* 礐/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 : NEC_BuildingManagement.c
Purpose : NEC Building Management Demo
---------------------------END-OF-HEADER------------------------------
*/
#include <stddef.h>
#include <stdio.h>
#include "GUI.h"
#include "WM.h"
#include "BUTTON.h"
#include "EDIT.h"
#include "TEXT.h"
#include "SLIDER.h"
/*********************************************************************
*
* Defines
*
**********************************************************************
*/
#define MSG_SELECTSENSOR (WM_USER+0)
#define MSG_SENSORDATA (WM_USER+1)
#define ID_ENTER (GUI_ID_USER+0)
#define ID_ESCAPE (GUI_ID_USER+1)
#define ID_BACK (GUI_ID_USER+2)
/*********************************************************************
*
* Types
*
**********************************************************************
*/
typedef struct {
const char* pName;
const char* pUnit;
int ActValue;
int MinValue;
int MaxValue;
int IsAdjustable;
} SENSOR;
/*********************************************************************
*
* Static data
*
**********************************************************************
*/
static int _DateDay = 11;
static int _DateMonth = 10;
static int _DateYear = 2004;
static int _TimeOffset = 39600000;
static char _acUserName[34];
static char _acPassword[34];
static int _ActSensor;
static SENSOR _Sensor[4] = {
{ "Temperature A", "癈", 23, 20, 25, 1 },
{ "Temperature B", "癈", 25, 20, 25, 1 },
{ "Pressure", "mBar", 21, 20, 25, 0 },
{ "Humidity", "RH", 50, 20, 25, 0 }
};
/*********************************************************************
*
* Static code
*
**********************************************************************
*/
/*********************************************************************
*
* _CopyCurrentValuesToEdit
*/
static void _CopyCurrentValuesToEdit(WM_HWIN hWin) {
char ac[32];
int i;
for (i = 0; i < 4; i++) {
sprintf(ac, "%d %s", _Sensor[i].ActValue, _Sensor[i].pUnit);
EDIT_SetText(WM_GetDialogItem(hWin, GUI_ID_EDIT0 + i), ac);
}
}
/*********************************************************************
*
* _CopyMinMaxToEdit
*/
static void _CopyMinMaxToEdit(WM_HWIN hWin) {
char ac[32];
sprintf(ac, "%d %s", _Sensor[_ActSensor].MinValue, _Sensor[_ActSensor].pUnit);
EDIT_SetText(WM_GetDialogItem(hWin, GUI_ID_EDIT0), ac);
sprintf(ac, "%d %s", _Sensor[_ActSensor].MaxValue, _Sensor[_ActSensor].pUnit);
EDIT_SetText(WM_GetDialogItem(hWin, GUI_ID_EDIT1), ac);
}
/*********************************************************************
*
* Static code, callbacks
*
**********************************************************************
*/
/*********************************************************************
*
* _cbDialogSensor
*/
static void _cbDialogSensor(WM_MESSAGE* pMsg) {
WM_HWIN hWin, hItem;
hWin = pMsg->hWin;
switch (pMsg->MsgId) {
case WM_CREATE: {
WM_SetFocus(hWin);
hItem = BUTTON_CreateEx((LCD_GetXSize() >> 1) - 70, LCD_GetYSize() - 42, 140, 36, hWin, WM_CF_SHOW, 0, GUI_ID_OK);
BUTTON_SetText(hItem, "Exit To Menu");
TEXT_CreateEx(40, 160 + (0 * 45), 300, 30, hWin, WM_CF_SHOW, 0, GUI_ID_TEXT0, "1. Minimum setting");
TEXT_CreateEx(40, 160 + (1 * 45), 300, 30, hWin, WM_CF_SHOW, 0, GUI_ID_TEXT1, "2. Maximum setting");
hItem = EDIT_CreateEx(350, 157 + (0 * 45), 110, 30, hWin, WM_CF_SHOW, 0, GUI_ID_EDIT0, 0);
WM_DisableWindow(hItem);
hItem = EDIT_CreateEx(350, 157 + (1 * 45), 110, 30, hWin, WM_CF_SHOW, 0, GUI_ID_EDIT1, 0);
WM_DisableWindow(hItem);
if (_Sensor[_ActSensor].IsAdjustable) {
hItem = SLIDER_CreateEx(480, 152 + (0 * 45), 110, 36, hWin, WM_CF_SHOW, 0, GUI_ID_SLIDER0);
SLIDER_SetWidth(hItem, 12);
SLIDER_SetRange(hItem, 0, 40);
SLIDER_SetValue(hItem, _Sensor[_ActSensor].MinValue);
hItem = SLIDER_CreateEx(480, 152 + (1 * 45), 110, 36, hWin, WM_CF_SHOW, 0, GUI_ID_SLIDER1);
SLIDER_SetWidth(hItem, 12);
SLIDER_SetRange(hItem, 0, 40);
SLIDER_SetValue(hItem, _Sensor[_ActSensor].MaxValue);
_CopyMinMaxToEdit(hWin);
} else {
EDIT_SetText(WM_GetDialogItem(hWin, GUI_ID_EDIT0), "-----");
EDIT_SetText(WM_GetDialogItem(hWin, GUI_ID_EDIT1), "-----");
}
hItem = BUTTON_CreateEx( 80, 275, 230, 42, hWin, WM_CF_SHOW, 0, GUI_ID_BUTTON0);
BUTTON_SetText(hItem, "View Trend Graph");
hItem = BUTTON_CreateEx(340, 275, 230, 42, hWin, WM_CF_SHOW, 0, GUI_ID_BUTTON1);
BUTTON_SetText(hItem, "View User Log");
} break;
case WM_PAINT:
{
char ac[64];
int Time;
Time = GUI_GetTime() + _TimeOffset;
GUI_SetBkColor(GUI_BLACK);
GUI_Clear();
GUI_SetColor(GUI_WHITE);
GUI_SetFont(&GUI_Font32B_ASCII);
GUI_DispStringHCenterAt("NEC Building Management Demo", LCD_GetXSize() >> 1, 20);
GUI_SetFont(&GUI_Font24B_ASCII);
sprintf(ac, "Sensor %d - %s", _ActSensor + 1, _Sensor[_ActSensor].pName);
GUI_DispStringHCenterAt(ac, LCD_GetXSize() >> 1, 70);
GUI_SetFont(&GUI_Font24_ASCII);
sprintf(ac, "Date: %.2d/%.2d/%.2d", _DateDay, _DateMonth, _DateYear % 100);
GUI_DispStringAt(ac, 10, LCD_GetYSize() - 35);
sprintf(ac, "Time: %.2d:%.2d", (Time / 3600000) % 24, (Time / 60000) % 60);
GUI_DispStringAt(ac, LCD_GetXSize() - 120, LCD_GetYSize() - 35);
}
break;
case WM_NOTIFY_PARENT:
if (pMsg->Data.v == WM_NOTIFICATION_RELEASED) {
int Id = WM_GetId(pMsg->hWinSrc);
if (Id == GUI_ID_OK) {
WM_DeleteWindow(hWin);
} else if (Id == GUI_ID_BUTTON0) {
/* View Trend Graph */
} else if (Id == GUI_ID_BUTTON1) {
/* View User Log */
}
} else if (pMsg->Data.v == WM_NOTIFICATION_VALUE_CHANGED) {
int Id = WM_GetId(pMsg->hWinSrc);
if (Id == GUI_ID_SLIDER0) {
hItem = WM_GetDialogItem(hWin, GUI_ID_SLIDER0);
_Sensor[_ActSensor].MinValue = SLIDER_GetValue(hItem);
if (_Sensor[_ActSensor].MinValue > _Sensor[_ActSensor].MaxValue) {
SLIDER_SetValue(hItem, _Sensor[_ActSensor].MaxValue);
}
_CopyMinMaxToEdit(hWin);
}
if (Id == GUI_ID_SLIDER1) {
hItem = WM_GetDialogItem(hWin, GUI_ID_SLIDER1);
_Sensor[_ActSensor].MaxValue = SLIDER_GetValue(hItem);
if (_Sensor[_ActSensor].MaxValue < _Sensor[_ActSensor].MinValue) {
SLIDER_SetValue(hItem, _Sensor[_ActSensor].MinValue);
}
_CopyMinMaxToEdit(hWin);
}
}
break;
default:
WM_DefaultProc(pMsg);
}
}
/*********************************************************************
*
* _cbDialogSelect
*/
static void _cbDialogSelect(WM_MESSAGE* pMsg) {
WM_HWIN hWin, hItem;
int i;
hWin = pMsg->hWin;
switch (pMsg->MsgId) {
case WM_CREATE:
WM_SetFocus(hWin);
hItem = BUTTON_CreateEx((LCD_GetXSize() >> 1) - 70, LCD_GetYSize() - 42, 140, 36, hWin, WM_CF_SHOW, 0, GUI_ID_OK);
BUTTON_SetText(hItem, "Exit To Menu");
for (i = 0; i < 4; i++) {
char ac[64];
sprintf(ac, "%d. %s", i + 1, _Sensor[i].pName);
TEXT_CreateEx(40, 160 + (i * 45), 300, 30, hWin, WM_CF_SHOW, 0, GUI_ID_TEXT0 + i, ac);
hItem = EDIT_CreateEx(350, 157 + (i * 45), 110, 30, hWin, WM_CF_SHOW, 0, GUI_ID_EDIT0 + i, 0);
WM_DisableWindow(hItem);
hItem = BUTTON_CreateEx(480, 156 + (i * 45), 110, 32, hWin, WM_CF_SHOW, 0, GUI_ID_BUTTON0 + i);
BUTTON_SetText(hItem, "Select");
}
/* Fill edit controls */
_CopyCurrentValuesToEdit(hWin);
break;
case WM_PAINT:
{
char ac[32];
int Time;
Time = GUI_GetTime() + _TimeOffset;
GUI_SetBkColor(GUI_BLACK);
GUI_Clear();
GUI_SetColor(GUI_WHITE);
GUI_SetFont(&GUI_Font32B_ASCII);
GUI_DispStringHCenterAt("NEC Building Management Demo", LCD_GetXSize() >> 1, 20);
GUI_SetFont(&GUI_Font24B_ASCII);
GUI_DispStringHCenterAt("Sensor Selection", LCD_GetXSize() >> 1, 70);
GUI_SetFont(&GUI_Font24_ASCII);
sprintf(ac, "Date: %.2d/%.2d/%.2d", _DateDay, _DateMonth, _DateYear % 100);
GUI_DispStringAt(ac, 10, LCD_GetYSize() - 35);
sprintf(ac, "Time: %.2d:%.2d", (Time / 3600000) % 24, (Time / 60000) % 60);
GUI_DispStringAt(ac, LCD_GetXSize() - 120, LCD_GetYSize() - 35);
}
break;
case WM_NOTIFY_PARENT:
if (pMsg->Data.v == WM_NOTIFICATION_RELEASED) {
int Id = WM_GetId(pMsg->hWinSrc);
if (Id == GUI_ID_OK) {
WM_DeleteWindow(hWin);
_acUserName[0] = 0;
_acPassword[0] = 0;
} else if ((Id >= GUI_ID_BUTTON0) && (Id <= GUI_ID_BUTTON3)) {
_ActSensor = Id - GUI_ID_BUTTON0;
hItem = WM_CreateWindowAsChild(0, 0, LCD_GetXSize(), LCD_GetYSize(), hWin, WM_CF_SHOW, &_cbDialogSensor, 0);
WM_MakeModal(hItem);
}
}
break;
default:
WM_DefaultProc(pMsg);
}
}
/*********************************************************************
*
* _CreateButton
*/
static void _CreateButton(WM_HWIN hWin, int x, int y, int w, int h, int Id, const char* pText) {
WM_HWIN hItem;
hItem = BUTTON_CreateEx(x, y, w, h, hWin, WM_CF_SHOW, 0, Id + GUI_ID_USER);
BUTTON_SetFocussable(hItem, 0);
if (pText) {
BUTTON_SetText(hItem, pText);
}
if (Id == 0) {
WM_DisableWindow(hItem);
}
}
/*********************************************************************
*
* _cbKeyWin
*/
static void _cbKeyWin(WM_MESSAGE* pMsg) {
switch (pMsg->MsgId) {
case WM_CREATE:
WM_SetFocus(pMsg->hWin);
break;
case WM_PAINT:
(*WIDGET_Effect_3D2L.pfDrawUp)();
break;
default:
WM_DefaultProc(pMsg);
}
}
/*********************************************************************
*
* _CreateKeyboard
*/
static void _CreateKeyboard(WM_HWIN hParent) {
WM_HWIN hWin;
int b;
b = WIDGET_Effect_3D2L.EffectSize;
hWin = WM_CreateWindowAsChild(145 - b, 258 - b, 349 + 2*b, 146 + 2*b, hParent, WM_CF_SHOW, &_cbKeyWin, 0);
/* Create buttons for line 1 */
_CreateButton(hWin, b + 0, b + 0, 30, 30, GUI_ID_USER + '1', "1");
_CreateButton(hWin, b + 29, b + 0, 30, 30, GUI_ID_USER + '2', "2");
_CreateButton(hWin, b + 58, b + 0, 30, 30, GUI_ID_USER + '3', "3");
_CreateButton(hWin, b + 87, b + 0, 30, 30, GUI_ID_USER + '4', "4");
_CreateButton(hWin, b + 116, b + 0, 30, 30, GUI_ID_USER + '5', "5");
_CreateButton(hWin, b + 145, b + 0, 30, 30, GUI_ID_USER + '6', "6");
_CreateButton(hWin, b + 174, b + 0, 30, 30, GUI_ID_USER + '7', "7");
_CreateButton(hWin, b + 203, b + 0, 30, 30, GUI_ID_USER + '8', "8");
_CreateButton(hWin, b + 232, b + 0, 30, 30, GUI_ID_USER + '9', "9");
_CreateButton(hWin, b + 261, b + 0, 30, 30, GUI_ID_USER + '0', "0");
_CreateButton(hWin, b + 290, b + 0, 59, 30, ID_BACK, "<<");
/* Create buttons for line 2 */
_CreateButton(hWin, b + 0, b + 29, 16, 30, 0, 0);
_CreateButton(hWin, b + 15, b + 29, 30, 30, GUI_ID_USER + 'Q', "Q");
_CreateButton(hWin, b + 44, b + 29, 30, 30, GUI_ID_USER + 'W', "W");
_CreateButton(hWin, b + 73, b + 29, 30, 30, GUI_ID_USER + 'E', "E");
_CreateButton(hWin, b + 102, b + 29, 30, 30, GUI_ID_USER + 'R', "R");
_CreateButton(hWin, b + 131, b + 29, 30, 30, GUI_ID_USER + 'T', "T");
_CreateButton(hWin, b + 160, b + 29, 30, 30, GUI_ID_USER + 'Y', "Y");
_CreateButton(hWin, b + 189, b + 29, 30, 30, GUI_ID_USER + 'U', "U");
_CreateButton(hWin, b + 218, b + 29, 30, 30, GUI_ID_USER + 'I', "I");
_CreateButton(hWin, b + 247, b + 29, 30, 30, GUI_ID_USER + 'O', "O");
_CreateButton(hWin, b + 276, b + 29, 30, 30, GUI_ID_USER + 'P', "P");
_CreateButton(hWin, b + 305, b + 29, 30, 30, GUI_ID_USER + '
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -