#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(aPort) * 256) + static_cast(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(aPort) * 256) + static_cast(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(IList->RealtimeData.Data[0][i]); } tPortCnt = RecVal * 100 / FullVal; Percent = static_cast(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; iRealtimeData.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; }