Files
FireAlarmCtrlCn/MyCode/Gui/LiteSelfCheck.cpp
2026-04-06 19:02:09 +08:00

672 lines
13 KiB
C++

#include "RuntimeData.h"
#include "LiteSelfCheck.h"
void TLiteSelfCheck::Init(int x1, int y1, int aW, int aH, int OwnerX, int OwnerY, u32 aColor)
{
#define CH 30 //Caption Height
unsigned short Left,Right, Top, Bottom, Width, Height, i;
Bound.SetBySize(OwnerX + x1, OwnerY + y1, aW, aH);
Left = Bound.Left +3;
Top = Bound.Top+3;
Width = aW - 7;
Height = aH - 7;
Right = Bound.Right -4;
Bottom = Bound.Bottom -4;
Caption.Init(Left, Top, Width, CH, 0, 0, clWhite, clMaroon);
SText.Init (429, Top, 370, CH, 0, 0, clWhite, clMaroon);
Content.Set(Left, Top+CH, Right, Bottom);
Color = aColor;
#undef CH
Caption.Border.Color = clGray;
IsShowing = 0;
CtlIndex = 0;
IsCheckWhat =0;
Seq =0;
AlramCountDown =0;
IsGo = 0;
CheckCmdHasSend = 0;
}
void TLiteSelfCheck::RenderBackGround(void)
{
RectFillRender(Content.Left, Content.Top, Content.Right, Content.Bottom, Color);
}
void TLiteSelfCheck::RenderBackGround(unsigned int aClr)
{
RectFillRender(Content.Left, Content.Top, Content.Right, Content.Bottom, aClr);
}
void TLiteSelfCheck::DrawSelf(void)
{
unsigned int x, y, x2, y2, w, h;
VertLineRender(Bound.Left, Bound.Top, Bound.Height -1, 0xFFFFFFFF);
VertLineRender(Bound.Right -1, Bound.Top +1, Bound.Height -2, 0xFF808080);
VertLineRender(Bound.Right, Bound.Top, Bound.Height, 0xFF404040);
HorizLineRender(Bound.Left, Bound.Top, Bound.Width - 1, 0xFFFFFFFF);
HorizLineRender(Bound.Left +1, Bound.Bottom -1, Bound.Width - 2, 0xFF808080);
HorizLineRender(Bound.Left, Bound.Bottom, Bound.Width, 0xFF404040);
x = Bound.Left +2 ;
x2 = Bound.Right -2;
y = Bound.Top +2;
y2 = Bound.Bottom - 2;
w = Bound.Width -4;
h = Bound.Height - 4;
VertLineRender (x, y, h-1, 0xFF808080);
HorizLineRender (x, y, w-1, 0xFF808080);
VertLineRender (x+1, y+1, h-2, 0xFF404040);
HorizLineRender (x+1, y+1, w-2, 0xFF404040);
VertLineRender (x2-1, y+1, h-2, 0xFFD4D0C8);
HorizLineRender (x+1, y2-1, w-2, 0xFFD4D0C8);
VertLineRender (x2, y, h, 0xFFFFFFFF);
HorizLineRender (x, y2, w, 0xFFFFFFFF);
RenderBackGround();
}
void TLiteSelfCheck::DrawCaption2(void)
{
//TMyString::sFromStr("TAB键在编辑与类型列表之间切换", SText.Text);
//SText.Show();
}
void TLiteSelfCheck::Show(void)
{
IsShowing = 1;
RenderBackGround();
DrawSelf();
if(LanguageEnCn==0)TMyString::sFromStr("自检-本机", Caption.Text);
else TMyString::sFromStr("Local Self-Check", Caption.Text);
Caption.Show();
Tick = 0;
Seq =0;
CheckCmdHasSend = 0;
IsGo =1;
IsSelfChecking = 1;
}
void TLiteSelfCheck::ShowCaption()
{
TMyString::sFromStr(" zzzzzzz", Caption.Text);
Caption.Show();
}
//______________________________________________________________________________________________________________________________
void TLiteSelfCheck::Check4Selected(void)
{
aPanel->Btn[0].Selected = 0;
aPanel->Btn[1].Selected = 0;
if(CtlIndex == 0){
aPanel->Btn[0].Selected = 1;
}else
if(CtlIndex == 1){
aPanel->Btn[1].Selected = 1;
}
}
void TLiteSelfCheck::ShowMsg(int p)
{
if(LanguageEnCn==0){
if(p==0){
TMyString::sFromStr("自检开始", Text);
}else{
TMyString::sFromStr("自检完成", Text);
}
}else{
if(p==0){
TMyString::sFromStr("Self-Check Begins", Text);
}else{
TMyString::sFromStr("Self-Check Completed", Text);
}
}
RectFillRender(4, 34, 796, 436, clNearWhite);
TextRender_string24(360, 140, clNearBlack, clNearWhite, Text);
}
//_____________________________________________________________________________________________________________________________
void TLiteSelfCheck::ClearOutText()
{
TMyString::sClear(aPanel->SText[0].Text);
aPanel->SText[0].Show();
}
void TLiteSelfCheck::CheckCP0_LcdRed()
{
TMyString::sFromStr(" LCD红色 ", aPanel->SText[0].Text);
aPanel->SText[0].Show();
}
void TLiteSelfCheck::CheckCP1_LcdGreen()
{
TMyString::sFromStr(" LCD绿色 ", aPanel->SText[0].Text);
aPanel->SText[0].Show();
}
void TLiteSelfCheck::CheckCP2_LcdBlue()
{
TMyString::sFromStr(" LCD蓝色 ", aPanel->SText[0].Text);
aPanel->SText[0].Show();
}
void TLiteSelfCheck::CheckCP3_PanelLedAllDarking()
{
TMyString::sFromStr(" 面板指示灯全部熄灭 ", aPanel->SText[0].Text);
aPanel->SText[0].Show();
}
void TLiteSelfCheck::CheckCP4_PanelLedAllLighting()
{
TMyString::sFromStr(" 面板指示灯全部点亮 ", aPanel->SText[0].Text);
aPanel->SText[0].Show();
}
void TLiteSelfCheck::CheckCP5_PanelLedSeq()
{
TMyString::sFromStr(" 面板指示灯依次点亮 ", aPanel->SText[0].Text);
aPanel->SText[0].Show();
}
void TLiteSelfCheck::CheckCP6_BusPadLedDarkAll()
{
TMyString::sFromStr("多线盘指示灯全部熄灭", aPanel->SText[0].Text);
aPanel->SText[0].Show();
}
void TLiteSelfCheck::CheckCP7_BusPadLedLightAll()
{
TMyString::sFromStr("总线盘指示灯全部点亮", aPanel->SText[0].Text);
aPanel->SText[0].Show();
}
void TLiteSelfCheck::CheckCP8_DirectPadLedDarkAll()
{
TMyString::sFromStr("多线盘指示灯全部熄灭", aPanel->SText[0].Text);
aPanel->SText[0].Show();
}
void TLiteSelfCheck::CheckCP9_DirectPadLedLightAll()
{
TMyString::sFromStr("多线盘指示灯全部点亮", aPanel->SText[0].Text);
aPanel->SText[0].Show();
}
void TLiteSelfCheck::CheckCP10_Speaker()
{
TMyString::sFromStr(" 扬声器发声 ", aPanel->SText[0].Text);
aPanel->SText[0].Show();
}
void TLiteSelfCheck::CheckFireAlram()
{
TMyString::sFromStr(" 警报声 ", aPanel->SText[0].Text);
aPanel->SText[0].Show();
}
void TLiteSelfCheck::ForceStopAll()
{
TMyString::sFromStr(" 全部停止 ", aPanel->SText[0].Text);
aPanel->SText[0].Show();
}
void TLiteSelfCheck::DoneAll()
{
TMyString::sFromStr(" 完成 ", aPanel->SText[0].Text);
aPanel->SText[0].Show();
}
void TLiteSelfCheck::iRun()
{
unsigned int m;
m = Tick % 5;
switch(m){
case 0:
RectFillRender(0, 0, 799, 479, clRed);
break;
case 1:
RectFillRender(0, 0, 799, 479, clGreen);
break;
case 2:
RectFillRender(0, 0, 799, 479, clBlue);
break;
case 3:
RectFillRender(0, 0, 799, 479, clBlack);
break;
case 4:
RectFillRender(0, 0, 799, 479, clWhite);
break;
case 5:
RectFillRender(0, 0, 799, 479, clRed);
break;
case 6:
RectFillRender(0, 0, 799, 479, clGreen);
break;
case 7:
RectFillRender(0, 0, 799, 479, clBlue);
break;
case 8:
RectFillRender(0, 0, 799, 479, clBlack);
break;
case 9:
RectFillRender(0, 0, 799, 479, clWhite);
break;
case 10:
RectFillRender(0, 0, 799, 479, clAqua);
break;
case 11:
RectFillRender(0, 0, 799, 479, clAqua);
break;
case 12:
RectFillRender(0, 0, 799, 479, clWhite);
break;
}
}
void TLiteSelfCheck::Task1000Ms()
{
if(IsShowing){
if(IsGo){
if(CheckCmdHasSend == 0){
if(SelfCheckSendCmd(1) == 0){
CheckCmdHasSend = 1;
CtlCenter.IsSendSelfCheckToPad =1;
}
}
if(CheckCmdHasSend){
iRun();
Tick++;
if(Tick > 12){
GuiRedrawBase();
GuiRedraw(0);
IsGo = 0;
IsShowing = 0;
IsSelfChecking = 0;
FinishCallBack();
}
}
}else{
IsShowing = 0;
FinishCallBack();
}
}
return;
if(IsShowing){
if(IsCheckWhat == 1){
switch(Seq){
case 0:
CheckCP0_LcdRed();
Seq++;
break;
case 1:
CheckCP0_LcdRed();
Seq++;
break;
case 2:
CheckCP1_LcdGreen();
Seq++;
break;
case 3:
CheckCP2_LcdBlue();
Seq++;
break;
case 4:
CheckCP3_PanelLedAllDarking();
Seq++;
break;
case 5:
CheckCP4_PanelLedAllLighting();
Seq++;
break;
case 6:
CheckCP3_PanelLedAllDarking();
Seq++;
break;
case 7:
CheckCP5_PanelLedSeq();
switch(Tick){
case 0: break;
case 1: break;
case 2: break;
case 3: break;
case 4: break;
case 5: break;
case 6: break;
case 7: break;
case 8: break;
case 9: break;
case 10: break;
case 11: break;
case 12: break;
case 13: break;
case 14: break;
case 15: break;
case 16: break;
case 17: break;
case 18: break;
case 19: break;
case 20: break;
case 21: break;
case 22: break;
case 23: break;
}
Tick++;
if(Tick > 6){
Seq++;
}
break;
case 8:
CheckCP6_BusPadLedDarkAll();
Seq++;
break;
case 9:
CheckCP7_BusPadLedLightAll();
Seq++;
break;
case 10:
CheckCP8_DirectPadLedDarkAll();
Seq++;
break;
case 11:
CheckCP9_DirectPadLedLightAll();
Seq++;
break;
case 12:
CheckCP10_Speaker();
Seq++;
break;
case 13:
Seq++;
break;
case 14:
Seq++;
break;
case 15:
DoneAll();
IsCheckWhat =0;
FinishCallBack();
break;
default:
DoneAll();
IsCheckWhat =0;
FinishCallBack();
break;
}
}else
if(IsCheckWhat == 2){
if(AlramCountDown){
AlramCountDown--;
TextDigitRender2Right24(260, 245 ,clNearBlack, clFrmFace, AlramCountDown);
}else{
DoneAll();
RectFillRender(260, 245, 283, 268, clFrmFace);
IsCheckWhat = 0;
FinishCallBack();
}
}
}
}
TGuiMsgReturn TLiteSelfCheck::KeyIn(unsigned char aKey)
{
TGuiMsgReturn aMsg = guiMsgNone;
unsigned char aP0,aP1,Err;
unsigned char x,y,aCh;
TDMix aFullPath;
switch(aKey){
case VK_0:
case VK_1:
case VK_2:
case VK_3:
case VK_4:
case VK_5:
case VK_6:
case VK_7:
case VK_8:
case VK_9:
case VK_DELETE:
break;
case VK_LEFT:
break;
case VK_RIGHT:
break;
case VK_UP:
if(IsCheckWhat == 0){
//ClearOutText();
if(CtlIndex >0){
CtlIndex--;
// Check4Selected();
// aPanel->ReDrawItems();
}
}
break;
case VK_DOWN:
if(IsCheckWhat == 0){
//ClearOutText();
if(CtlIndex <1){
CtlIndex++;
// Check4Selected();
// aPanel->ReDrawItems();
}
}
break;
case VK_TAB:
break;
case dfKEY_SETUP:
break;
case dfKEY_QUERY:
break;
case VK_EXECUTE:
//Do Check Here
if(IsCheckWhat == 0){
if(CtlIndex == 0){
// ClearOutText();
IsCheckWhat =1;
Seq =0;
Tick = 0;
}else
if(CtlIndex == 1){
// ClearOutText();
IsCheckWhat =2;
AlramCountDown =10;
}
}
break;
case VK_RETURN:
if(IsGo){
CheckCancel = 1;
}else{
IsGo =0;
IsShowing = 0;
IsSelfChecking = 0;
//ForceStopAll();
aMsg = guiMsgReturn;
}
break;
}
return aMsg;
}
void TLiteSelfCheck::SendCmdClearAll()
{
TCanHeaderID aIde;
unsigned char cVal;
unsigned int i;
unsigned int Len;
int iVal;
Len =3;
aIde.BitF.Cmd = cmClearAllRegist;
for(i=0; i<8; i++){
Data[i] = 0;
}
Data[0] = 0;
Data[1] = 0;
Data[2] = 0xFe;
aIde.BitF.Pri = 1;
aIde.BitF.sLvl = 1;
aIde.BitF.dLvl = 7;
aIde.BitF.sAddr = 0;
aIde.BitF.dAddr = 127;
InnerCan.Buf4GuiSend.Insert(aIde, Data, Len);
}
void TLiteSelfCheck::SendCmdClearOnePort(unsigned char aCc)
{
TCanHeaderID aIde;
unsigned char cVal;
unsigned int i;
unsigned int Len;
int iVal;
Len =3;
aIde.BitF.Cmd = cmClearSinglePortRegist;
for(i=0; i<8; i++){
Data[i] = 0;
}
Data[0] = 0;
Data[1] = 0;
Data[2] = aCc;
aIde.BitF.Pri = 1;
aIde.BitF.sLvl = 1;
aIde.BitF.dLvl = 7;
aIde.BitF.sAddr = 0;
aIde.BitF.dAddr = 127;
InnerCan.Buf4GuiSend.Insert(aIde, Data, Len);
}
void TLiteSelfCheck::SendCmdClearMultAddr(unsigned char aCc, unsigned char sAddr, unsigned char eAddr, unsigned char aType)
{
TCanHeaderID aIde;
unsigned char cVal;
unsigned int i;
unsigned int Len;
int iVal;
Len =3;
aIde.BitF.Cmd = cmClearSinglePortRegist;
for(i=0; i<8; i++){
Data[i] = 0;
}
Data[0] = 0;
Data[1] = 0;
Data[2] = aCc;
Data[3] = sAddr;
Data[4] = eAddr;
Data[5] = aType;
aIde.BitF.Pri = 1;
aIde.BitF.sLvl = 1;
aIde.BitF.dLvl = 7;
aIde.BitF.sAddr = 0;
aIde.BitF.dAddr = 127;
InnerCan.Buf4GuiSend.Insert(aIde, Data, Len);
}
void TLiteSelfCheck::SendCmdClearOneAddr(unsigned char aCc, unsigned char aAddr, unsigned char aType)
{
TCanHeaderID aIde;
unsigned char cVal;
unsigned int i;
unsigned int Len;
int iVal;
Len =3;
aIde.BitF.Cmd = cmClearSinglePortAddrRegist;
for(i=0; i<8; i++){
Data[i] = 0;
}
Data[0] = 0;
Data[1] = 0;
Data[2] = aCc;
Data[3] = aAddr;
Data[4] = aAddr;
Data[5] = aType;
aIde.BitF.Pri = 1;
aIde.BitF.sLvl = 1;
aIde.BitF.dLvl = 7;
aIde.BitF.sAddr = 0;
aIde.BitF.dAddr = 127;
InnerCan.CmdSendCustom(aIde, Data, Len);
}
int TLiteSelfCheck::SelfCheckSendCmd(unsigned char SatrtStop)
{
TCanHeaderID aIde;
unsigned char cVal;
unsigned int i;
unsigned int Len;
int iVal;
Len =2;
aIde.BitF.Cmd = cmSelfCheck;
for(i=0; i<8; i++){
Data[i] = 0;
}
Data[0] = 0;
Data[1] = SatrtStop;
aIde.BitF.Pri = 1;
aIde.BitF.sLvl = 1;
aIde.BitF.dLvl = 7;
aIde.BitF.sAddr = 0;
aIde.BitF.dAddr = 127;
return InnerCan.CmdSendCustomWithReturn(aIde, Data, Len);
}
int TLiteSelfCheck::ExtRequst(unsigned char Prm)
{
IsCheckWhat = 0;
IsGo = 0;
IsShowing = 0;
IsSelfChecking = 0;
return 0;
}