798 lines
21 KiB
C++
798 lines
21 KiB
C++
#include "RuntimeData.h"
|
|
#include "DuplicateCheck.h"
|
|
|
|
|
|
#define TextTopOffSet 6
|
|
#define ListLineCnt 10
|
|
|
|
void TDuplicateCheck::DrawFixText()
|
|
{
|
|
if(LanguageEnCn==0){
|
|
TextRender_string24(Lv.Caption.Left + 10, Lv.Caption.Top +4, clNearWhite, CaptionColor, "回路->重码检测");
|
|
TextRender_string24(Lv.Grid.Left[0] + 10, Lv.Grid.Top[0] +6, clNearWhite, "机器号");
|
|
if(MainCtl.fData.Split.NetworkMode == 1)
|
|
IList->STextCtlType.SetText("本集中机",24);
|
|
else if(MainCtl.fData.Split.NetworkMode == 2)
|
|
IList->STextCtlType.SetText("本区域机",24);
|
|
else
|
|
IList->STextCtlType.SetText("本单机 ",24);
|
|
IList->STextCtlType.Show();
|
|
TRoundRect::sDrawBySize(Lv.Grid.Left[0] +10, Lv.Grid.Top[0] + 36, 120, 30, 7, clNearWhite, "开始检测", 14, clNearBlack);
|
|
TextRender_string24(Lv.Grid.Left[1] + 10, Lv.Grid.Top[1] +6, clNearWhite, "分回路检测");
|
|
TextRender_string24(Lv.Grid.Left[1] + 10, Lv.Grid.Top[1] +38, clNearWhite, "回路号");
|
|
TRoundRect::sDrawBySize(Lv.Grid.Left[1] +10, Lv.Grid.Top[1] + 72, 120, 30, 7, clNearWhite, "回路检测", 14, clNearBlack);
|
|
TextRender_string24(Lv.Grid.Left[2] + 10, Lv.Grid.Top[2] +10, clNearWhite, "操作");
|
|
TRoundRect::sDrawBySize(Lv.Grid.Left[2] +10, Lv.Grid.Top[2] + 38, 76, 30, 7, clNearWhite, "点灯", 14, clNearBlack);
|
|
}else{
|
|
TextRender_string24(Lv.Caption.Left + 10, Lv.Caption.Top +4, clNearWhite, CaptionColor, "Loop->Duplicate Addr Detect");
|
|
TextRender_string24(Lv.Grid.Left[0] + 10, Lv.Grid.Top[0] +6, clNearWhite, "CtlID");
|
|
if(MainCtl.fData.Split.NetworkMode == 1)
|
|
IList->STextCtlType.SetText("Local Master ",24);
|
|
else if(MainCtl.fData.Split.NetworkMode == 2)
|
|
IList->STextCtlType.SetText("Local Regional ",24);
|
|
else
|
|
IList->STextCtlType.SetText("Local Stand Alone",24);
|
|
IList->STextCtlType.Show();
|
|
TRoundRect::sDrawBySize(Lv.Grid.Left[0] +10, Lv.Grid.Top[0] + 36, 120, 30, 7, clNearWhite, " Detect ", 14, clNearBlack);
|
|
TextRender_string24(Lv.Grid.Left[1] + 10, Lv.Grid.Top[1] +6, clNearWhite, "Single Loop Check");
|
|
TextRender_string24(Lv.Grid.Left[1] + 10, Lv.Grid.Top[1] +38, clNearWhite, "LoopID");
|
|
TRoundRect::sDrawBySize(Lv.Grid.Left[1] +10, Lv.Grid.Top[1] + 72, 120, 30, 7, clNearWhite, " Detect ", 14, clNearBlack);
|
|
TextRender_string24(Lv.Grid.Left[2] + 10, Lv.Grid.Top[2] +10, clNearWhite, "Operation");
|
|
TRoundRect::sDrawBySize(Lv.Grid.Left[2] +10, Lv.Grid.Top[2] + 38, 76, 30, 7, clNearWhite, "LED ", 14, clNearBlack);
|
|
}
|
|
}
|
|
|
|
|
|
void TDuplicateCheck::Init()
|
|
{
|
|
IsShow =0;
|
|
IsPermission =0;
|
|
IsFastCmd = 0;
|
|
Tag.Reset();
|
|
if(MainCtl.fData.Split.NetworkMode == 1){
|
|
Tag.InxMin = 0;
|
|
}else{
|
|
Tag.InxMin = 1;
|
|
}
|
|
Tag.InxMin = 1;
|
|
Tag.Inx = Tag.InxMin;
|
|
|
|
IsChecking =0;
|
|
IsOnNetwork =0;
|
|
CheckWhat =0;
|
|
CheckTick =0;
|
|
IsShowDetail =0;
|
|
CtlNum = MainCtl.fData.Split.MyNum;
|
|
KeepOnMeJustEnter = nullptr;
|
|
KeepUiOnMe = nullptr;
|
|
|
|
IsDulAddrChecking = 0;
|
|
}
|
|
|
|
void TDuplicateCheck::ResetBackEndData()
|
|
{
|
|
//dAddrSdRam_DupCheck
|
|
int i,x;
|
|
volatile unsigned int tAddrCnt;
|
|
PortCnt =0;
|
|
for(i=1; i<=dPORT_MAX_COUNT; i++){
|
|
tAddrCnt = dAddrSdRam_DupCheck + (i*256);
|
|
for(x=0; x<256; x++){
|
|
*(volatile unsigned char *)(tAddrCnt + x) = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
void TDuplicateCheck::SetData(unsigned char aPort, unsigned char aAddr, unsigned char aCnt)
|
|
{
|
|
volatile unsigned int tAddrCnt;
|
|
tAddrCnt = dAddrSdRam_DupCheck + (static_cast<unsigned int>(aPort) * 256) + static_cast<unsigned int>(aAddr);
|
|
*(volatile unsigned char *)(tAddrCnt) = aCnt;
|
|
}
|
|
|
|
unsigned char TDuplicateCheck::GetData(unsigned char aPort, unsigned char aAddr)
|
|
{
|
|
volatile unsigned int tAddrCnt;
|
|
unsigned char tCnt;
|
|
tAddrCnt = dAddrSdRam_DupCheck + (static_cast<unsigned int>(aPort) * 256) + static_cast<unsigned int>(aAddr);
|
|
tCnt = *(volatile unsigned char *)(tAddrCnt);
|
|
return tCnt;
|
|
}
|
|
|
|
void TDuplicateCheck::RenderBackGround(void)
|
|
{
|
|
RectFillRender(ContentGeometry.Left, ContentGeometry.Top, ContentGeometry.Right, ContentGeometry.Bottom, ContentColor);
|
|
}
|
|
|
|
void TDuplicateCheck::RenderBackGround(unsigned int aClr)
|
|
{
|
|
RectFillRender(ContentGeometry.Left, ContentGeometry.Top, ContentGeometry.Right, ContentGeometry.Bottom, aClr);
|
|
}
|
|
|
|
void TDuplicateCheck::DrawSelf(void)
|
|
{
|
|
RenderBackGround();
|
|
RectFillRender(Lv.Caption.Left, Lv.Caption.Top, Lv.Caption.Right, Lv.Caption.Bottom, CaptionColor);
|
|
|
|
|
|
for(int i=0; i<5; i++)RectFillRender(Lv.Grid.Left[i], Lv.Grid.Top[i], Lv.Grid.Right[i], Lv.Grid.Bottom[i], ItemColor);
|
|
if(Lv.Panel.Active)RectFillRender(Lv.Panel.Left, Lv.Panel.Top, Lv.Panel.Right, Lv.Panel.Bottom, PanelColor);
|
|
if(Lv.Panel.Active)RectFillRender(Lv.PanelSmall.Left, Lv.PanelSmall.Top, Lv.PanelSmall.Right, Lv.PanelSmall.Bottom, SmallPanelColor);
|
|
IList->EditCtlNum.Init(Lv.Grid.Left[0] + 100, Lv.Grid.Top[0] + 2, 36, 30, 0, 0, 1, clNearWhite);
|
|
if(MainCtl.fData.Split.NetworkMode == 1)
|
|
IList->EditCtlNum.Enable = 1;
|
|
else
|
|
IList->EditCtlNum.Enable = 0;
|
|
IList->EditCtlNum.Visible =1;;
|
|
IList->EditCtlNum.SetMaxLen(2);
|
|
IList->EditCtlNum.Str.FromUInt2Dg( MainCtl.fData.Split.MyNum);
|
|
IList->EditCtlNum.SelectedColor = clBlue;
|
|
IList->EditCtlNum.Enable = 0;
|
|
IList->EditCtlNum.Show();
|
|
CtlNum = MainCtl.fData.Split.MyNum;
|
|
IList->STextCtlType.Init(Lv.Grid.Left[0] + 146, Lv.Grid.Top[0] + 2, 106, 30, 0, 0, clNearWhite, ItemColor);
|
|
IList->EditPortNum.Init(Lv.Grid.Left[1] + 100, Lv.Grid.Top[1] + 34, 36, 30, 0, 0, 1, clNearWhite);
|
|
IList->EditPortNum.Enable = 1;
|
|
IList->EditPortNum.Visible =1;;
|
|
IList->EditPortNum.SetMaxLen(2);
|
|
IList->EditPortNum.Str.FromUInt2Dg( 1);
|
|
IList->EditPortNum.SelectedColor = clBlue;
|
|
IList->EditPortNum.Show();
|
|
IList->STextLastState.Init(Lv.Grid.Left[2] + 96, Lv.Grid.Top[2] + 6, 180, 30, 0, 0, clNearWhite, ItemColor);
|
|
DrawFixText();
|
|
IList->TextOutClear();
|
|
Check4Selected();
|
|
CtlNumAvalble =1;
|
|
PortNumAvalble =1;
|
|
}
|
|
|
|
void TDuplicateCheck::Show(void)
|
|
{
|
|
IsShow =1;
|
|
RenderBackGround();
|
|
DrawSelf();
|
|
}
|
|
|
|
void TDuplicateCheck::FullRedraw(int Prm)
|
|
{
|
|
if(Prm == 0){
|
|
RenderBackGround();
|
|
DrawSelf();
|
|
}else
|
|
if(Prm == 1){
|
|
RectFillRender(GuiRedrawDataList[1][0], GuiRedrawDataList[1][1], GuiRedrawDataList[1][2], GuiRedrawDataList[1][3], Color);
|
|
for(int i=0; i<3; i++)RectFillRender(Lv.Grid.Left[i], Lv.Grid.Top[i], Lv.Grid.Right[i], Lv.Grid.Bottom[i], ItemColor);
|
|
if(Lv.Panel.Active)RectFillRender(Lv.Panel.Left, Lv.Panel.Top, Lv.Panel.Right, Lv.Panel.Bottom, PanelColor);
|
|
DrawCommonByExReturn();
|
|
|
|
if(IsPermission)PmsIntervene4Gui.ReDraw4GuiRecall();
|
|
}
|
|
}
|
|
|
|
void TDuplicateCheck::DrawCommonByExReturn()
|
|
{
|
|
//0
|
|
DrawFixText();
|
|
IList->EditCtlNum.Show();
|
|
IList->STextCtlType.Show();
|
|
IList->EditPortNum.Show();
|
|
|
|
Check4Selected();
|
|
}
|
|
|
|
void TDuplicateCheck::DrawProgress()
|
|
{
|
|
//Percent;
|
|
if(LanguageEnCn==0){
|
|
RectFillRender(Lv.PanelSmall.Left, Lv.PanelSmall.Top, Lv.PanelSmall.Right, Lv.PanelSmall.Bottom, SmallPanelColor);
|
|
TextRender_string24(Lv.PanelSmall.Left +4, Lv.PanelSmall.Top + 4, clNearWhite, SmallPanelColor, "检测进度:");
|
|
TextDigitRender3_24(Lv.PanelSmall.Left +4+108, Lv.PanelSmall.Top + 4, clNearWhite, SmallPanelColor, Percent);
|
|
TextRender_string24(Lv.PanelSmall.Left +4+108+36, Lv.PanelSmall.Top + 4, clNearWhite, SmallPanelColor, "%");
|
|
|
|
if(IsTransmitingFinish){
|
|
TextRender_string24(Lv.PanelSmall.Left +4+200, Lv.PanelSmall.Top + 4, clNearWhite, SmallPanelColor, "传输完成");
|
|
}else
|
|
if(IsTransmiting){
|
|
TextRender_string24(Lv.PanelSmall.Left +4+200, Lv.PanelSmall.Top + 4, clNearWhite, SmallPanelColor, "正在传输");
|
|
}
|
|
}else{
|
|
RectFillRender(Lv.PanelSmall.Left, Lv.PanelSmall.Top, Lv.PanelSmall.Right, Lv.PanelSmall.Bottom, SmallPanelColor);
|
|
TextRender_string24(Lv.PanelSmall.Left +4, Lv.PanelSmall.Top + 4, clNearWhite, SmallPanelColor, "Progress:");
|
|
TextDigitRender3_24(Lv.PanelSmall.Left +4+108, Lv.PanelSmall.Top + 4, clNearWhite, SmallPanelColor, Percent);
|
|
TextRender_string24(Lv.PanelSmall.Left +4+108+36, Lv.PanelSmall.Top + 4, clNearWhite, SmallPanelColor, "%");
|
|
|
|
if(IsTransmitingFinish){
|
|
TextRender_string24(Lv.PanelSmall.Left +4+200, Lv.PanelSmall.Top + 4, clNearWhite, SmallPanelColor, "Completed");
|
|
}else
|
|
if(IsTransmiting){
|
|
TextRender_string24(Lv.PanelSmall.Left +4+200, Lv.PanelSmall.Top + 4, clNearWhite, SmallPanelColor, "Transmite");
|
|
}
|
|
}
|
|
}
|
|
|
|
void TDuplicateCheck::DrawDetailOutline()
|
|
{
|
|
unsigned int aClr;
|
|
if(IsShowDetail){
|
|
aClr = clBlue;
|
|
}else{
|
|
aClr = clMedGray;
|
|
}
|
|
|
|
RectFillRender(Lv.Panel.Left,Lv.Panel.Top,Lv.Panel.Right,Lv.Panel.Bottom,PanelColor);
|
|
|
|
RectFillRender(Lv.Panel.Left,Lv.Panel.Top,Lv.Panel.Left +4,Lv.Panel.Bottom,aClr);
|
|
RectFillRender(Lv.Panel.Left,Lv.Panel.Top,Lv.Panel.Right,Lv.Panel.Top +4,aClr);
|
|
RectFillRender(Lv.Panel.Right-4,Lv.Panel.Top,Lv.Panel.Right,Lv.Panel.Bottom,aClr);
|
|
RectFillRender(Lv.Panel.Left,Lv.Panel.Bottom -4,Lv.Panel.Right,Lv.Panel.Bottom,aClr);
|
|
}
|
|
|
|
void TDuplicateCheck::CheckResult()
|
|
{
|
|
const int tOffsetX = 84+4;
|
|
int tP0,tP1;
|
|
int Pages, Lines, Pst;
|
|
unsigned char Val;
|
|
Pages =0;
|
|
Lines = 0;
|
|
Pst = 0;
|
|
for(tP0=1; tP0<=dPORT_MAX_COUNT; tP0++){
|
|
Lines++;
|
|
if(Lines>LinesCount){
|
|
Pages++;
|
|
Lines =1;
|
|
Pst = 0;
|
|
}
|
|
for(tP1=1;tP1<=dEP_MAX_COUNT_PER_PORT;tP1++){
|
|
Val = GetData(tP0,tP1);
|
|
if(Val){
|
|
Pst++;
|
|
if(Pst>=5){
|
|
Pst=0;
|
|
Lines++;
|
|
if(Lines>LinesCount){
|
|
Pages++;
|
|
Lines =1;
|
|
Pst = 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
Details.PagesCount = Pages+1;
|
|
Details.PageX = 0;
|
|
}
|
|
|
|
int TDuplicateCheck::TryDrawDetail()
|
|
{
|
|
const int tOffsetX = 84+4;
|
|
int tP0,tP1;
|
|
int Pages, Lines, Pst, PageHasDraw;
|
|
unsigned char Val;
|
|
Pages =0;
|
|
Lines = 0;
|
|
Pst = 0;
|
|
PageHasDraw = 0;
|
|
if(Lv.Panel.Active)RectFillRender(Lv.Panel.Left, Lv.Panel.Top, Lv.Panel.Right, Lv.Panel.Bottom, PanelColor);
|
|
DrawDetailOutline();
|
|
for(tP0=1; tP0<=dPORT_MAX_COUNT; tP0++){
|
|
Lines++;
|
|
if(Lines>LinesCount){
|
|
Pages++;
|
|
Lines =1;
|
|
Pst = 1;
|
|
}
|
|
if(Pages == Details.PageX){
|
|
PageHasDraw =1;
|
|
if(LanguageEnCn==0)TextRender_string24(Lv.Panel.Left +4, Lv.Panel.Top + 4 + (Lines * 30 -30), clNearWhite, PanelColor, "回路:");
|
|
else TextRender_string24(Lv.Panel.Left +4, Lv.Panel.Top + 4 + (Lines * 30 -30), clNearWhite, PanelColor, "Loop:");
|
|
TextDigitRender2_24(Lv.Panel.Left +4+48, Lv.Panel.Top + 4 + (Lines * 30 -30), clNearWhite, PanelColor, tP0);
|
|
TextRender_string24(Lv.Panel.Left +4+48+24, Lv.Panel.Top + 4 + (Lines * 30 -30), clNearWhite, PanelColor, ":");
|
|
}
|
|
for(tP1=1;tP1<=dEP_MAX_COUNT_PER_PORT;tP1++){
|
|
Val = GetData(tP0,tP1);
|
|
if(Val){
|
|
Pst++;
|
|
if(Pst>5){
|
|
Pst=1;
|
|
Lines++;
|
|
if(Lines>LinesCount){
|
|
Pages++;
|
|
Lines =1;
|
|
}
|
|
}
|
|
if(Pages == Details.PageX){
|
|
PageHasDraw = 1;
|
|
TextDigitRender3_24(Lv.Panel.Left +tOffsetX + (Pst*72-72), Lv.Panel.Top + 4 + (Lines * 30 -30), clNearWhite, PanelColor, tP1);
|
|
Text[0]='x';Text[2]='\0'; Text[3]='\0';
|
|
if(Val<10){
|
|
Text[1]= Val + '0';
|
|
}else{
|
|
Text[1]= 'B';
|
|
}
|
|
TextRender_string24(Lv.Panel.Left +tOffsetX + (Pst*72-72) + 36, Lv.Panel.Top + 4 + (Lines * 30 -30), clNearWhite, PanelColor, Text);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return PageHasDraw;
|
|
}
|
|
|
|
void TDuplicateCheck::DrawDetail()
|
|
{
|
|
if(TryDrawDetail() == 0){
|
|
Details.PageX = 0;
|
|
TryDrawDetail();
|
|
}
|
|
}
|
|
|
|
//______________________________________________________________________________________________________________________________
|
|
void TDuplicateCheck::ClearSelected(void)
|
|
{
|
|
char *tText;
|
|
switch(Tag.Inx){
|
|
case 0:
|
|
IList->EditCtlNum.Selected = 0;
|
|
IList->EditCtlNum.Show();
|
|
break;
|
|
case 1:
|
|
if(LanguageEnCn==0)tText = "开始检测"; else tText = " Detect ";
|
|
TRoundRect::sDrawBySize(Lv.Grid.Left[0] +10, Lv.Grid.Top[0] + 36, 120, 30, 7, clNearWhite, tText, 14, clNearBlack);
|
|
break;
|
|
case 2:
|
|
IList->EditPortNum.Selected = 0;
|
|
IList->EditPortNum.Show();
|
|
break;
|
|
case 3:
|
|
if(LanguageEnCn==0)tText = "回路检测"; else tText = " Detect ";
|
|
TRoundRect::sDrawBySize(Lv.Grid.Left[1] +10, Lv.Grid.Top[1] + 72, 120, 30, 7, clNearWhite, tText, 14, clNearBlack);
|
|
break;
|
|
case 4:
|
|
if(LanguageEnCn==0)tText = "点灯"; else tText = "LED";
|
|
TRoundRect::sDrawBySize(Lv.Grid.Left[2] +10, Lv.Grid.Top[2] + 38, 76, 30, 7, clNearWhite, tText, 14, clNearBlack);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void TDuplicateCheck::Check4Selected(void)
|
|
{
|
|
char *tText;
|
|
switch(Tag.Inx){
|
|
case 0:
|
|
IList->EditCtlNum.Selected = 1;
|
|
IList->EditCtlNum.SetPstTail();
|
|
IList->EditCtlNum.Show();
|
|
IList->EditCtlNum.ShowCursor();
|
|
break;
|
|
case 1:
|
|
if(LanguageEnCn==0)tText = "开始检测"; else tText = " Detect ";
|
|
TRoundRect::sDrawBySize(Lv.Grid.Left[0] +10, Lv.Grid.Top[0] + 36, 120, 30, 7, clBlue, tText, 14, clNearWhite);
|
|
break;
|
|
case 2:
|
|
IList->EditPortNum.Selected = 1;
|
|
IList->EditPortNum.SetPstTail();
|
|
IList->EditPortNum.Show();
|
|
IList->EditPortNum.ShowCursor();
|
|
break;
|
|
case 3:
|
|
if(LanguageEnCn==0)tText = "回路检测"; else tText = " Detect ";
|
|
TRoundRect::sDrawBySize(Lv.Grid.Left[1] +10, Lv.Grid.Top[1] + 72, 120, 30, 7, clBlue, tText, 14, clNearWhite);
|
|
break;
|
|
case 4:
|
|
if(LanguageEnCn==0)tText = "点灯"; else tText = "LED";
|
|
TRoundRect::sDrawBySize(Lv.Grid.Left[2] +10, Lv.Grid.Top[2] + 38, 76, 30, 7, clBlue, tText, 14, clNearWhite);
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
void TDuplicateCheck::PermissionCmdReturnDraw()
|
|
{
|
|
int x,y;
|
|
Check4Selected();
|
|
if(Lv.Panel.Active)RectFillRender(Lv.Panel.Left, Lv.Panel.Top, Lv.Panel.Right, Lv.Panel.Bottom, PanelColor);
|
|
DrawDetailOutline();
|
|
if(IsChecking && (Percent == 100)){
|
|
|
|
}
|
|
}
|
|
//_____________________________________________________________________________________________________________________________
|
|
|
|
void TDuplicateCheck::PermissionCmdGO()
|
|
{
|
|
if(PermissionCmd == 0){
|
|
ResetBackEndData();
|
|
IList->RealtimeData.Reset();
|
|
IList->TextOutClear();
|
|
Data[0] = 0;
|
|
Data[1] = CtlNum;
|
|
Data[2] = 0xFF;
|
|
Data[3] = 0;
|
|
Data[4] = 0;
|
|
Data[5] = 0;
|
|
Data[6] = 0;
|
|
Data[7] = 1;
|
|
InnerCan.OBufInsert(1, cmDuplicateAddrCheckStart, Data, 3);
|
|
//IList->STextLastState.SetText("全部回路探测",24);
|
|
//IList->STextLastState.Show();
|
|
|
|
IsShowDetail = 0;
|
|
IsProgressUpdata =0;
|
|
IsDetailUpdata =0;
|
|
WastingTime = 0;
|
|
|
|
IsChecking =1;
|
|
IsTransmiting =0;
|
|
IsTransmitingFinish = 0;
|
|
if(CtlNum == MainCtl.fData.Split.MyNum){
|
|
IsOnNetwork =0;
|
|
CheckWhat =0;
|
|
Percent =0;
|
|
DrawProgress();
|
|
}else{
|
|
IsOnNetwork =1;
|
|
}
|
|
IsDulAddrChecking =1;
|
|
if(KeepUiOnMe != nullptr)KeepUiOnMe();
|
|
}else
|
|
if(PermissionCmd == 1){
|
|
ResetBackEndData();
|
|
IList->RealtimeData.Reset();
|
|
IList->TextOutClear();
|
|
int iVal = IList->EditPortNum.Str.ToInteger();
|
|
if( (iVal) && (iVal<=dPORT_MAX_COUNT)){
|
|
Data[0] = 0;
|
|
Data[1] = CtlNum;
|
|
Data[2] = iVal;
|
|
Data[3] = 0;
|
|
Data[4] = 0;
|
|
Data[5] = 0;
|
|
Data[6] = 0;
|
|
Data[7] = 1;
|
|
InnerCan.OBufInsert(1, cmDuplicateAddrCheckStart, Data, 3);
|
|
//IList->STextLastState.SetText("单回路探测",24);
|
|
//IList->STextLastState.Show();
|
|
|
|
IsShowDetail = 0;
|
|
IsProgressUpdata =0;
|
|
IsDetailUpdata =0;
|
|
WastingTime =0;
|
|
Percent =0;
|
|
|
|
IsChecking =1;
|
|
IsTransmiting =0;
|
|
IsTransmitingFinish = 0;
|
|
if(CtlNum == MainCtl.fData.Split.MyNum){
|
|
IsOnNetwork =0;
|
|
CheckWhat =iVal;
|
|
iVal--;
|
|
DrawProgress();
|
|
}else{
|
|
IsOnNetwork =1;
|
|
}
|
|
IsDulAddrChecking =1;
|
|
if(KeepUiOnMe != nullptr)KeepUiOnMe();
|
|
}
|
|
}else
|
|
if(PermissionCmd == 2){
|
|
//Light On
|
|
TCanHeaderID aIde;
|
|
if(CtlNum == MainCtl.fData.Split.MyNum){
|
|
aIde.BitF.Cmd = cmDevLightOn;
|
|
aIde.BitF.Pri = 1;
|
|
aIde.BitF.sLvl = 1;
|
|
aIde.BitF.dLvl = 7;
|
|
aIde.BitF.sAddr = 0;
|
|
aIde.BitF.dAddr = 127;
|
|
for(int i=4; i<8; i++){
|
|
Data[i] = 0;
|
|
}
|
|
Data[0] = 0;
|
|
Data[1] = 0xFF;
|
|
Data[2] = 1;
|
|
InnerCan.OBufInsert(1, cmDuplicateAddrEpDeviceLed, Data, 3);
|
|
}
|
|
}
|
|
}
|
|
|
|
TGuiMsgReturn TDuplicateCheck::KeyIn(unsigned char aKey)
|
|
{
|
|
TGuiMsgReturn aMsg = guiMsgNone;
|
|
TGuiMsgReturn PmsRtnMsg;
|
|
unsigned char aP0,aP1,Updata;
|
|
unsigned char x,y,aCh;
|
|
Updata = 0;
|
|
|
|
if(IsPermission){
|
|
PmsRtnMsg = PmsIntervene4Gui.KeyIn(aKey);
|
|
if(PmsRtnMsg == guiMsgOkAndReturn){
|
|
//Enter And Run Go
|
|
IsPermission = 0;
|
|
PermissionCmdReturnDraw();
|
|
PermissionCmdGO();
|
|
}else
|
|
if(PmsRtnMsg == guiMsgReturn){
|
|
//Not Enter Redraw
|
|
IsPermission = 0;
|
|
PermissionCmdReturnDraw();
|
|
}
|
|
return aMsg;
|
|
}
|
|
|
|
if(IsShowDetail){
|
|
switch(aKey){
|
|
case VK_LEFT:
|
|
case VK_UP:
|
|
if(Details.PageX>0){
|
|
Details.PageX--;
|
|
}
|
|
|
|
DrawDetail();
|
|
break;
|
|
case VK_RIGHT:
|
|
case VK_DOWN :
|
|
Details.PageX++;
|
|
if(Details.PageX>=(Details.PagesCount)){
|
|
Details.PageX =0;
|
|
}
|
|
DrawDetail();
|
|
break;
|
|
case VK_TAB:
|
|
if(IsTransmitingFinish){
|
|
IsTransmitingFinish =0;
|
|
IsShowDetail = 0;
|
|
DrawDetailOutline();
|
|
}
|
|
break;
|
|
case VK_RETURN:
|
|
IsShow = 0;
|
|
SendEndCmd();
|
|
aMsg = guiMsgReturn;
|
|
break;
|
|
}
|
|
return aMsg;
|
|
}
|
|
|
|
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:
|
|
case VK_LEFT:
|
|
case VK_RIGHT:
|
|
if(Tag.Inx == 0){
|
|
IList->EditCtlNum.KeyIn(aKey);
|
|
int iVal = IList->EditCtlNum.Str.ToInteger();
|
|
if( (iVal > 0) && (iVal <= 16) ){
|
|
IList->EditCtlNum.SelectedColor = clBlue;
|
|
CtlNumAvalble = 1;
|
|
}else{
|
|
IList->EditCtlNum.SelectedColor = clRed;
|
|
CtlNumAvalble = 0;
|
|
}
|
|
IList->EditCtlNum.Show();
|
|
}else
|
|
if(Tag.Inx == 2){
|
|
IList->EditPortNum.KeyIn(aKey);
|
|
int iVal = IList->EditPortNum.Str.ToInteger();
|
|
if( (iVal > 0) && (iVal <= dPORT_MAX_COUNT) ){
|
|
IList->EditPortNum.SelectedColor = clBlue;
|
|
PortNumAvalble = 1;
|
|
}else{
|
|
IList->EditPortNum.SelectedColor = clRed;
|
|
PortNumAvalble = 0;
|
|
}
|
|
IList->EditPortNum.Show();
|
|
}
|
|
break;
|
|
|
|
case VK_UP:
|
|
if(Tag.Inx>Tag.InxMin){
|
|
ClearSelected();
|
|
Tag.Inx--;
|
|
Check4Selected();
|
|
}else{
|
|
ClearSelected();
|
|
Tag.Inx=4;
|
|
Check4Selected();
|
|
}
|
|
break;
|
|
case VK_DOWN :
|
|
if(Tag.Inx<4){
|
|
ClearSelected();
|
|
Tag.Inx++;
|
|
Check4Selected();
|
|
}else{
|
|
ClearSelected();
|
|
Tag.Inx=Tag.InxMin;
|
|
Check4Selected();
|
|
}
|
|
break;
|
|
case VK_EXECUTE:
|
|
if(Tag.Inx == 1){
|
|
if(CtlNumAvalble){
|
|
if(SystemPermission >1){
|
|
PermissionCmd = 0;
|
|
PermissionCmdGO();
|
|
}else{
|
|
PermissionCmd = 0;
|
|
IsPermission = 1;
|
|
PmsIntervene4Gui.Show4Gui(Lv.Panel.Left + 16, Lv.Panel.Top + 16, Lv.Panel.Width -34, 140, 2);
|
|
}
|
|
}
|
|
}else
|
|
if(Tag.Inx == 3){
|
|
if( (CtlNumAvalble) && (PortNumAvalble) ){
|
|
if(SystemPermission >1){
|
|
PermissionCmd = 1;
|
|
PermissionCmdGO();
|
|
}else{
|
|
PermissionCmd = 1;
|
|
IsPermission = 1;
|
|
PmsIntervene4Gui.Show4Gui(Lv.Panel.Left + 16, Lv.Panel.Top + 16, Lv.Panel.Width -34, 140, 2);
|
|
}
|
|
}
|
|
}else
|
|
if(Tag.Inx == 4){
|
|
if( 1 ){
|
|
if(SystemPermission >1){
|
|
PermissionCmd = 2;
|
|
PermissionCmdGO();
|
|
}else{
|
|
PermissionCmd = 2;
|
|
IsPermission = 1;
|
|
PmsIntervene4Gui.Show4Gui(Lv.Panel.Left + 16, Lv.Panel.Top + 16, Lv.Panel.Width -34, 140, 2);
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case VK_TAB:
|
|
//IsShowDetail = 1;
|
|
//DrawDetailOutline();
|
|
break;
|
|
case VK_RETURN:
|
|
IsShow = 0;
|
|
SendEndCmd();
|
|
aMsg = guiMsgReturn;
|
|
break;
|
|
}
|
|
return aMsg;
|
|
}
|
|
|
|
void TDuplicateCheck::InnerCanPushData(unsigned char aCmd, unsigned char *pData)
|
|
{
|
|
unsigned int i,x,v, ov, tPortCnt, RecVal, FullVal;
|
|
if( aCmd == cmDuplicateAddrCheckPrg ){
|
|
if( (pData[1]) && (pData[1]<=dPORT_MAX_COUNT) ){
|
|
x = pData[1];
|
|
v = pData[2];
|
|
if(v>100)v=100;
|
|
IList->RealtimeData.Data[0][x]=v;
|
|
if(CheckWhat == 0){
|
|
tPortCnt=0;
|
|
for(i=0; i<dPORT_MAX_COUNT;i++)if(MainCtl.fData.Split.ExistTablePort[i])tPortCnt++;
|
|
FullVal = tPortCnt * 100;
|
|
}else{
|
|
FullVal = 100;
|
|
}
|
|
RecVal = 0;
|
|
for(i=1;i<=dPORT_MAX_COUNT;i++){
|
|
RecVal += static_cast<unsigned int>(IList->RealtimeData.Data[0][i]);
|
|
}
|
|
tPortCnt = RecVal * 100 / FullVal;
|
|
Percent = static_cast<unsigned char>(tPortCnt % 101);
|
|
IsProgressUpdata =1;
|
|
}
|
|
}else
|
|
if(aCmd == cmDuplicateAddrData){
|
|
if( (pData[1]) && (pData[1]<=dPORT_MAX_COUNT) && (pData[2] == 0)){
|
|
x = pData[1];
|
|
if(pData[4] && pData[5]){
|
|
SetData(x,pData[4],pData[5]);
|
|
IsDetailUpdata =1;
|
|
IsTransmiting =1;
|
|
}
|
|
if(pData[6] && pData[7]){
|
|
SetData(x,pData[6],pData[7]);
|
|
IsDetailUpdata =1;
|
|
IsTransmiting =1;
|
|
}
|
|
}
|
|
}else
|
|
if(aCmd == cmDuplicateAddrCheckEnd){
|
|
if( (pData[1]) && (pData[1]<=dPORT_MAX_COUNT) ){
|
|
x = pData[1];
|
|
v = pData[2];
|
|
if(1){
|
|
IList->RealtimeData.Data[1][x]=1;
|
|
if(CheckWhat == 0){
|
|
tPortCnt=0;
|
|
for(i=0; i<dPORT_MAX_COUNT;i++)if(MainCtl.fData.Split.ExistTablePort[i])tPortCnt++;
|
|
}else{
|
|
tPortCnt = 1;
|
|
}
|
|
RecVal = 0;
|
|
for(i=1;i<=dPORT_MAX_COUNT;i++){
|
|
RecVal += IList->RealtimeData.Data[1][i];
|
|
}
|
|
if(RecVal == tPortCnt){
|
|
IsDetailUpdata = 1;
|
|
IsTransmitingFinish = 1;
|
|
IsProgressUpdata =1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void TDuplicateCheck::SendEndCmd()
|
|
{
|
|
TCanHeaderID aIde;
|
|
aIde.BitF.Cmd = cmDuplicateAddrCheckEnd;
|
|
aIde.BitF.Pri = 1;
|
|
aIde.BitF.sLvl = 1;
|
|
aIde.BitF.dLvl = 7;
|
|
aIde.BitF.sAddr = 0;
|
|
aIde.BitF.dAddr = 127;
|
|
for(int i=0; i<8; i++){
|
|
Data[i] = 0;
|
|
}
|
|
Data[0] = 0;
|
|
Data[1] = CtlNum;
|
|
Data[2] = 0xFE;
|
|
|
|
InnerCan.Buf4GuiSend.Insert(aIde, Data,6);
|
|
}
|
|
|
|
void TDuplicateCheck::Task1000Ms()
|
|
{
|
|
unsigned int ttProgress, tt100, Val;
|
|
if(IsShow == 0){
|
|
IsDulAddrChecking = 0;
|
|
return;
|
|
}
|
|
if(IsChecking == 0)return;
|
|
if(WastingTime<360){
|
|
WastingTime++;
|
|
if(KeepUiOnMe != nullptr)KeepUiOnMe();
|
|
}
|
|
if(IsOnNetwork == 0){
|
|
if(IsProgressUpdata){
|
|
IsProgressUpdata =0;
|
|
DrawProgress();
|
|
}
|
|
if( IsDetailUpdata ){
|
|
IsShowDetail =1;
|
|
IsDetailUpdata = 0;
|
|
CheckResult();
|
|
DrawDetailOutline();
|
|
DrawDetail();
|
|
}
|
|
}else{
|
|
|
|
}
|
|
}
|
|
|
|
int TDuplicateCheck::ExtRequst(unsigned char Prm)
|
|
{
|
|
IsDulAddrChecking = 0;
|
|
IsShow =0;
|
|
SendEndCmd();
|
|
return 0;
|
|
}
|
|
|
|
|
|
|