📄 alarm_q.c
字号:
/*************************************************************************
*
* Copyright 2000 National ASIC Center, All right Reserved
*
* FILE NAME: asix_tmr.c
* PROGRAMMER: Lingming
* Date of Creation: 2001/02/13
*
* DESCRIPTION:
*
*
*
*
* NOTE:
*
*
* FUNCTIONS LIST:
* -------------------------------------------------------------------------
*
* GLOBAL VARS LIST:
*
**************************************************************************
* MODIFICATION HISTORY
*
* 2001/05/21 by Lingming Creation of this file
*
*************************************************************************/
/* SDS C lib */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* asix window include file*/
#include "asixwin.h"
#include "asixapp.h"
//#include "hc.h"
//#include "asix_tmr.h"
#include "alarm_q.h"
#include "select.h"
#include "bitmap.h"
#include "gpc.h"
struct alarmlist {
U32 btid;
U32 staticid;
struct asix_alarmQ *alarm;
};
U8 AlarmWinOpened = FALSE;
struct asix_alarmQ *AsixAlarmQ, *CurDispAlarm = NULL;
U8 AlarmQLen = 0;
U8 AlarmHappens = FALSE;
static STATUS DispAlarmDetail(struct asix_alarmQ *alarm);
STATUS PostAlarm(char *title, char *infor, U16 style )
{
struct asix_alarmQ *alarmq, *qptr;
MSG msg;
alarmq = (struct asix_alarmQ *)Lcalloc(sizeof(struct asix_alarmQ));
if (alarmq == NULL ) return ASIX_NO_MEM;
alarmq->task = GetCurTask();
ReadDateTime( &alarmq->date,&alarmq->time );
alarmq->flag = style;
strncpy(alarmq->title, title, 19);
strncpy(alarmq->infor, infor, 99);
AlarmHappens = TRUE;
if (AsixAlarmQ == NULL ){
AsixAlarmQ = CurDispAlarm = alarmq;
AlarmQLen++;
}
else
{
for(qptr = AsixAlarmQ; qptr->next != NULL; qptr = qptr->next);
alarmq->prev = qptr;
qptr->next = alarmq;
if (CurDispAlarm == NULL) CurDispAlarm = alarmq;
AlarmQLen++;
}
memset( (void *)&msg, 0x0, sizeof(MSG) );
msg.messageType = ASIX_MESSAGE;
msg.message = WM_ALARM;
msg.lparam = 0;
msg.data = NULL;
msg.wparam = 0;
if( AdvSendMessage(GetCurTask()->id, (P_MESSAGE)&msg, NO_SWAP_TASK) == PPSM_ERROR )
return ASIX_ERROR;
return ASIX_OK;
}
STATUS AlarmWindow(void)
{
U32 boxid, bt1, bt2;
struct alarmlist list[10];
U8 listindex = 0;
static MSG Msg;
U8 quit = FALSE;
U8 float_time = 0;
U16 lcd_w, lcd_h;
char tempstr[25];
//struct asix_alarmq *temp;
char i = 0, j = 0;
#define SINGLE_ALARM_MODE 0 //only display one alarm message
#define MULTI_ALARM_MODE 1 //display multiple messages in one window
//which means there have new messages coming during
//this window MSG loop
U8 mode = SINGLE_ALARM_MODE;
U16 lst_w = CHINESE_CHAR_HEIGHT + 2;
if (AlarmWinOpened || CurDispAlarm == NULL)
return ASIX_ERROR;
lcd_w = ASIX_LCD_W;
lcd_h = ASIX_LCD_H;
if (CurDispAlarm->flag & ALM_NORMAL) {
boxid = CreateWindow(WNDCLASS_WIN, CurDispAlarm->title, WS_CAPTION | WS_CLOSEBOX, // | WS_SAVESCREEN,
0, 0, lcd_w, lcd_h, 0, 0, NULL);
} else if (CurDispAlarm->flag & ALM_FLOAT) {
boxid = CreateWindow(WNDCLASS_WIN, NULL, WS_BORDER | WS_SAVESCREEN,
(U16)(lcd_w/6), (U16)(lcd_h/2), (U16)(lcd_w*2/3), (U16)(CHINESE_CHAR_HEIGHT*3), 0, 0, NULL);
}
if (boxid==0) return ASIX_ERROR;
AlarmWinOpened = TRUE;
AlarmHappens = FALSE;
if (CurDispAlarm->flag & ALM_NORMAL) {
//switchonetotwo(note_icon, 6, CHINESE_CHAR_HEIGHT+4+6, 24, 24);
//DrawMonoImage( GetGC(), note_icon, 6, CHINESE_CHAR_HEIGHT+4+6, 24, 24, ColorTheme.form_text, ColorTheme.form_client );
{
U32 hbmp;
//U32 trColor;
U16 x = 6;
U16 y = CHINESE_CHAR_HEIGHT+4+6;
U32 palette[2];
palette[0] = ColorTheme.form_client;
palette[1] = ColorTheme.form_text;
hbmp = (U32)LoadBitmap( note_icon, (DWORD *)palette );
if( hbmp != 0 )
{
SetBMPPalette( hbmp, palette, NULL );
//SetBkFillMode( pGC, MAKELONG( GPC_REPLACE_STYLE, GPC_TRANSPARENT_STYLE ) );
//GetBMPPixel( pGC, 0, 0, hbmp, &trColor );
//DisplayBMPEx( pGC, x, y, hbmp, GPC_TRANSPARENT_STYLE, trColor );
DisplayBMP( GetGC(), x, y, hbmp );
FreeBitmap( hbmp );
}
}
sprintf(tempstr,"%02d:%02d:%02d\n%d/%02d/%02d", CurDispAlarm->time.hour, CurDispAlarm->time.minute,
CurDispAlarm->time.second,CurDispAlarm->date.year,CurDispAlarm->date.month,CurDispAlarm->date.day);
DisplayMsg(tempstr, 45, CHINESE_CHAR_HEIGHT+4+6, lcd_w-5, CHINESE_CHAR_HEIGHT+4+6+32, GPC_REPLACE_STYLE);
DisplayMsg(CurDispAlarm->infor, 5, CHINESE_CHAR_HEIGHT+4+6+35, lcd_w-5, lcd_h-25, GPC_REPLACE_STYLE);
bt1 = CreateWindow(WNDCLASS_BUTTON, "确定", WS_CHILD| BS_REGULAR,
20, (U16)(lcd_h-20), 32, 18, boxid, 0, NULL);
bt2 = CreateWindow(WNDCLASS_BUTTON, "确定", WS_CHILD| BS_REGULAR,
72, (U16)(lcd_h-20), 32, 18, boxid, 0, NULL);
CurDispAlarm->flag |= ALM_DISPED;
} else if (CurDispAlarm->flag & ALM_FLOAT) {
DisplayMsg(CurDispAlarm->infor, lcd_w/6+1,lcd_h/2+2, lcd_w*5/6, lcd_h/2+CHINESE_CHAR_HEIGHT*2, GPC_REPLACE_STYLE);
}
/*we should consider mutiple display of alarm 06/28*/
while(!quit) {
ASIXGetMessage(&Msg,NULL,0,0);
if (mode == SINGLE_ALARM_MODE){
if (CurDispAlarm->next != NULL && (CurDispAlarm->flag & ALM_NORMAL)) {
DestroyWindow(bt1);
DestroyWindow(bt2);
RepaintWindow(boxid, 0);
SetWindowText(boxid,"系统告警!",NULL);
list[0].btid = CreateWindow(WNDCLASS_BUTTON, CurDispAlarm->title, WS_CHILD | BS_ICON,
17,30, 100, lst_w, boxid, 0, NULL);
list[0].alarm = CurDispAlarm;
list[0].staticid = CreateWindow(WNDCLASS_STATIC, NULL, WS_CHILD | SS_ICON,
3,30, 10, 10, boxid, MAKELONG(10,10), (char *)down10X10);
listindex++;
CurDispAlarm = CurDispAlarm->next;
mode = MULTI_ALARM_MODE;
}
}
if (CurDispAlarm!= NULL && mode == MULTI_ALARM_MODE && listindex<10) {
list[listindex].btid = CreateWindow(WNDCLASS_BUTTON, CurDispAlarm->title, WS_CHILD | BS_ICON,
17,(U16)(listindex*lst_w+30), 100, lst_w, boxid, 0, NULL);
list[listindex].alarm = CurDispAlarm;
list[listindex].staticid = CreateWindow(WNDCLASS_STATIC, NULL, WS_CHILD | SS_ICON,
3,(U16)(listindex*lst_w+30), 10, 10, boxid, MAKELONG(10,10), (char *)down10X10);
listindex++;
CurDispAlarm->flag |= ALM_DISPED;
CurDispAlarm = CurDispAlarm->next;
AlarmHappens = FALSE;//clear the alarm happening flag
}
switch (Msg.message )
{
case ASIX_RTC:
i++;
if (mode == SINGLE_ALARM_MODE)
if (i>2 && (CurDispAlarm->flag & ALM_FLOAT))
quit=TRUE;
break;
/*case WM_CLIENT:
if (CurDispAlarm->flag & ALM_FLOAT)
quit = TRUE;
break;*/
case WM_COMMAND:
if (mode == SINGLE_ALARM_MODE) {
if (Msg.lparam == bt1) {
quit = TRUE;
} else if (Msg.lparam ==bt2) {
;
}
}else if (mode == MULTI_ALARM_MODE) {
for (j= 0; (Msg.lparam != list[j].btid) && j<10; j++);
if (j == 10 ) break;
DispAlarmDetail(list[j].alarm);
if (list[j].staticid != 0){
DestroyWindow(list[j].staticid);
list[j].staticid = 0;
}
}
break;
case WM_QUIT:
quit = TRUE;
break;
}
DefWindowProc(Msg.message, Msg.lparam, Msg.data, Msg.wparam);
}
DestroyWindow(boxid);
//temp = CurDispAlarm;
if (mode == SINGLE_ALARM_MODE)
CurDispAlarm = CurDispAlarm->next;
//Lfree(temp);
AlarmWinOpened = FALSE;
//AlarmQLen--;
return ASIX_OK;
}
STATUS DispAlarmDetail(struct asix_alarmQ *alarm)
{
U32 boxid, bt1, bt2;
static MSG Msg;
U8 quit = FALSE;
U16 lcd_w, lcd_h;
char tempstr[25];
//U8 i;
lcd_w = ASIX_LCD_W;
lcd_h = ASIX_LCD_H;
boxid = CreateWindow(WNDCLASS_WIN, alarm->title, WS_CAPTION | WS_CLOSEBOX ,
0, 0, lcd_w, lcd_h, 0, 0, NULL);
if (boxid==0) return ASIX_ERROR;
//switchonetotwo(note_icon, 6, CHINESE_CHAR_HEIGHT+4+6, 24, 24);
//DrawMonoImage( GetGC(), note_icon, 6, CHINESE_CHAR_HEIGHT+4+6, 24, 24, ColorTheme.form_text, ColorTheme.form_client );
{
U32 hbmp;
//U32 trColor;
U16 x = 6;
U16 y = CHINESE_CHAR_HEIGHT+4+6;
//U32 palette[] = { ColorTheme.form_client, ColorTheme.form_text };
U32 palette[2];
palette[0] = ColorTheme.form_client;
palette[1] = ColorTheme.form_text;
hbmp = LoadBitmap( note_icon, palette );
if( hbmp != 0 )
{
SetBMPPalette( hbmp, palette, NULL );
//SetBkFillMode( pGC, MAKELONG( GPC_REPLACE_STYLE, GPC_TRANSPARENT_STYLE ) );
//GetBMPPixel( pGC, 0, 0, hbmp, &trColor );
//DisplayBMPEx( pGC, x, y, hbmp, GPC_TRANSPARENT_STYLE, trColor );
DisplayBMP( GetGC(), x, y, hbmp );
FreeBitmap( hbmp );
}
}
sprintf(tempstr,"%02d:%02d:%02d\n%d/%02d/%02d", alarm->time.hour, alarm->time.minute,
alarm->time.second, alarm->date.year,alarm->date.month,alarm->date.day);
DisplayMsg(tempstr, 45, CHINESE_CHAR_HEIGHT+4+6, lcd_w-5, CHINESE_CHAR_HEIGHT+4+6+32, GPC_REPLACE_STYLE);
DisplayMsg(alarm->infor, 5, CHINESE_CHAR_HEIGHT+4+6+35, lcd_w-5, lcd_h-25, GPC_REPLACE_STYLE);
bt1 = CreateWindow(WNDCLASS_BUTTON, "确定", WS_CHILD| BS_REGULAR,
20, (U16)(lcd_h-20), 32, 18, boxid, 0, NULL);
bt2 = CreateWindow(WNDCLASS_BUTTON, "确定", WS_CHILD| BS_REGULAR,
72, (U16)(lcd_h-20), 32, 18, boxid, 0, NULL);
while(!quit) {
ASIXGetMessage(&Msg,NULL,0,0);
// if we are in this window for 25 seconds,
//we will quit automatically, so that we will never
//miss the after coming message
if (PowerSavingTimeOut <= 5) quit = TRUE;
switch (Msg.message )
{
case WM_COMMAND:
if (Msg.lparam == bt1) {
quit = TRUE;
} else if (Msg.lparam ==bt2) {
;
}
break;
case WM_QUIT:
quit = TRUE;
break;
}
DefWindowProc(Msg.message, Msg.lparam, Msg.data, Msg.wparam);
}
DestroyWindow(boxid);
return ASIX_OK;
}
STATUS BrowseAlarm(void)
{
U32 boxid, bt1, bt2, checkid, scrollid;
struct alarmlist list[9];
const char spacestr[]=" ";
SL_ITEM *checkitem;
U8 listindex = 0;
static MSG Msg;
U8 quit = FALSE;
struct asix_alarmQ *alarmq, *curindex, *oldindex;
U8 i;
if (AlarmQLen == 0) {
MessageBox(0, "没有告警记录!","没有告警记录",MB_OK | MB_ICONASTERISK);
return ASIX_OK;
}
memset(list, 0x0, 9*sizeof(struct alarmlist));
boxid = CreateWindow(WNDCLASS_WIN, "系统告警浏览", WS_CAPTION | WS_CLOSEBOX | WS_SAVESCREEN,
0, 0, ASIX_LCD_W, ASIX_LCD_H, 0, 0, NULL);
if (boxid==0) return ASIX_ERROR;
bt1 = CreateWindow(WNDCLASS_BUTTON, "删 除", WS_CHILD | WS_DISABLED | BS_REGULAR,
20,213, 50, 25, boxid, 0, NULL);
bt2 = CreateWindow(WNDCLASS_BUTTON, "确 定", WS_CHILD | BS_REGULAR,
90,213, 50, 25, boxid, 0, NULL);
checkitem = Lcalloc(min(AlarmQLen+1,10)*sizeof(SL_ITEM));
if (checkitem != NULL) {
for (i = 0; i< min(AlarmQLen,9); i++)
checkitem[i].caption = (char *)spacestr;
checkid = CreateWindow(WNDCLASS_SELECT, NULL, WS_CHILD | SLS_CHECKBOX,
1,30, 14, (U16)(i*20), boxid, 0, checkitem);
}
for (listindex = 0,alarmq = AsixAlarmQ ; listindex < min(9, AlarmQLen);
listindex++, alarmq = alarmq->next) {
list[listindex].btid = CreateWindow(WNDCLASS_BUTTON, alarmq->title, WS_CHILD | BS_ICON,
16,(U16)(listindex*20+30), 130, 20, boxid, 0, NULL);
list[listindex].alarm = alarmq;
}
if (AlarmQLen> 9) {
scrollid = CreateWindow(WNDCLASS_SCROLL, NULL, WS_CHILD | SBS_VERT,
146, 30, 14, 180, boxid, MAKELONG(0,AlarmQLen), NULL);
curindex = oldindex = AsixAlarmQ;
}
while(!quit) {
ASIXGetMessage(&Msg,NULL,0,0);
switch (Msg.message )
{
case WM_COMMAND:
if ( Msg.lparam == bt1 ) {
;
} else if (Msg.lparam == bt2) {
;
} else {
for(i=0; i<AlarmQLen && list[i].btid!=Msg.lparam; i++);
if (i == AlarmQLen ) break;
DispAlarmDetail(list[i].alarm);
}
break;
case WM_SELECTBOX:
for ( i = 0; i<(AlarmQLen+1) && checkitem[i].state == SL_UNCHECKED; i++);
if ( i == AlarmQLen+1)
EnableWindow(bt1, FALSE);
else
EnableWindow(bt1, TRUE);
break;
case WM_VSCROLL:
if (Msg.lparam == scrollid){
oldindex = curindex;
switch ( Msg.wparam )
{
case SB_PAGEUP:
for (i = 0; curindex!= NULL && i<9; i++)
curindex = curindex->prev;
if (curindex == NULL) curindex = AsixAlarmQ;
break;
case SB_PAGEDOWN:
for (i = 0; curindex->next != NULL && i<9; i++)
curindex = curindex->next;
break;
case SB_LINEUP:
curindex = curindex->prev;
if ( curindex == NULL ) curindex = AsixAlarmQ;
break;
case SB_LINEDOWN:
if (curindex->next!= NULL)
curindex = curindex->next;
break;
case SB_ENDSCROLL:
for ( i = 0, curindex = AsixAlarmQ; i<GetScrollPos(Msg.lparam,0,0,0); i++)
curindex = curindex->next ;
//if (curindex > (AsixAlarmQ+AlarmQLen-1)) curindex = AsixAlarmQ+AlarmQLen-1;
break;
}
if (oldindex != curindex){
for (i=0, alarmq = AsixAlarmQ; curindex != alarmq;i++,alarmq = alarmq->next);
SetScrollPos(Msg.lparam, i, 0, 0);
for ( i = 0; i < 9; i++){
list[i].alarm = curindex;
if (curindex!= NULL)
curindex = curindex->next;
if (list[i].alarm!= NULL)
SetWindowText(list[i].btid, (list[i].alarm)->title, NULL);
else
SetWindowText(list[i].btid, NULL, NULL);
if ( curindex == NULL )
EnableWindow(list[i].btid,FALSE);
else
EnableWindow(list[i].btid,TRUE);
}
}
}
break;
case WM_QUIT:
quit = TRUE;
break;
}
DefWindowProc(Msg.message, Msg.lparam, Msg.data, Msg.wparam);
}
DestroyWindow(boxid);
Lfree(checkitem);
return ASIX_OK;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -