#include "DevMask.h" #include "RuntimeData.h" #include "record.h" extern "C"{ #include "user_norflash.h" //#include "user_eeprom.h" #include "uart_key_drv.h" #include "task.h" #include "HW_config.h" } #define dWdClr clSkyBlue #define dWdDisabelClr clNearWhite #define dWWidth 24 #define dWHeigh 24 #define dRoundR 7 #define TextTopOffSet 6 #define ListLineCnt 10 #define ipdWidth0 400 #define ipdWidth1 390 #define dSdAddrMaskTemp dAddrSdRam_Commom #define dMaskCountPerPage 32 #define dMaskCountPerS4K 256 class TItemList *TDevMask::sIList; void TDevMask::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, "回路号"); TextRender_string24(Lv.Grid.Left[0] + 160, Lv.Grid.Top[0] +6, clNearWhite, "机器号"); TextRender_string24(Lv.Grid.Left[0] + 260, Lv.Grid.Top[0] +6, clNearWhite, "本机"); TextRender_string24(Lv.Grid.Left[0] + 340, Lv.Grid.Top[0] +6, clNearWhite, "类型:"); TextRender_string24(Lv.Grid.Left[0] + 640, Lv.Grid.Top[0] +6, clNearWhite, "状态:"); TextRender_string24(Lv.Grid.Left[0] + 10, Lv.Grid.Top[0] + 40, clNearWhite, "地址号"); TextRender_string24(Lv.Grid.Left[0] + 280, Lv.Grid.Top[0] + 40, clNearWhite, "注释信息:"); TextRender_string24(Lv.Grid.Left[1] + 10, Lv.Grid.Top[1] +6, clNearWhite, "二次码"); TextRender_string24(Lv.Grid.Left[1] + 10, Lv.Grid.Top[1] +40, clNearWhite, "分区号"); TextRender_string24(Lv.Grid.Left[2] +10, Lv.Grid.Top[2] + 6, clNearWhite, ItemColor, "设备定义"); TextRender_string24(Lv.Grid.Left[3] +10, Lv.Grid.Top[3] + 4, clNearWhite, ItemColor, "输入信号"); TextRender_string24(Lv.Grid.Left[3] +42, Lv.Grid.Top[3] + 36, clNearWhite, ItemColor, "反馈"); TextRender_string24(Lv.Grid.Left[3] +140, Lv.Grid.Top[3] + 36, clNearWhite, ItemColor, "报警"); TextRender_string24(Lv.Grid.Left[3] +236, Lv.Grid.Top[3] + 36, clNearWhite, ItemColor, "监管"); TextRender_string24(Lv.Grid.Left[4] +10, Lv.Grid.Top[4] + 4, clNearWhite, ItemColor, "操作"); TRoundRect::sDrawBySize(Lv.Grid.Left[4] +60, Lv.Grid.Top[4] + 36, 76, 30, 7, clNearWhite, "屏蔽", 14, clNearBlack); TRoundRect::sDrawBySize(Lv.Grid.Left[4] +150, Lv.Grid.Top[4] + 36, 124, 30, 7, clNearWhite, "解除屏蔽", 14, clNearBlack); }else{ TextRender_string24(Lv.Caption.Left + 10, Lv.Caption.Top +4, clNearWhite, CaptionColor, "Loop->Device Blocking"); TextRender_string24(Lv.Grid.Left[0] + 10, Lv.Grid.Top[0] +6, clNearWhite, "LoopID"); TextRender_string24(Lv.Grid.Left[0] + 160, Lv.Grid.Top[0] +6, clNearWhite, "CtlID"); TextRender_string24(Lv.Grid.Left[0] + 260, Lv.Grid.Top[0] +6, clNearWhite, "Local"); TextRender_string24(Lv.Grid.Left[0] + 340, Lv.Grid.Top[0] +6, clNearWhite, "Type:"); TextRender_string24(Lv.Grid.Left[0] + 640, Lv.Grid.Top[0] +6, clNearWhite, "State"); TextRender_string24(Lv.Grid.Left[0] + 10, Lv.Grid.Top[0] + 40, clNearWhite, "Addr "); TextRender_string24(Lv.Grid.Left[0] + 280, Lv.Grid.Top[0] + 40, clNearWhite, " Note:"); TextRender_string24(Lv.Grid.Left[1] + 10, Lv.Grid.Top[1] +6, clNearWhite, "AuxID"); TextRender_string24(Lv.Grid.Left[1] + 10, Lv.Grid.Top[1] +40, clNearWhite, "Zone"); TextRender_string24(Lv.Grid.Left[2] +10, Lv.Grid.Top[2] + 6, clNearWhite, ItemColor, "Assign"); TextRender_string24(Lv.Grid.Left[3] +10, Lv.Grid.Top[3] + 4, clNearWhite, ItemColor, "Signal"); TextRender_string24(Lv.Grid.Left[3] +42, Lv.Grid.Top[3] + 36, clNearWhite, ItemColor, "FBCK"); TextRender_string24(Lv.Grid.Left[3] +140, Lv.Grid.Top[3] + 36, clNearWhite, ItemColor, "Fire"); TextRender_string24(Lv.Grid.Left[3] +236, Lv.Grid.Top[3] + 36, clNearWhite, ItemColor, "SUPV"); TextRender_string24(Lv.Grid.Left[4] +10, Lv.Grid.Top[4] + 4, clNearWhite, ItemColor, "OPR"); TRoundRect::sDrawBySize(Lv.Grid.Left[4] +60, Lv.Grid.Top[4] + 36, 76, 30, 7, clNearWhite, "Mask", 14, clNearBlack); TRoundRect::sDrawBySize(Lv.Grid.Left[4] +150, Lv.Grid.Top[4] + 36, 124, 30, 7, clNearWhite, " Clear ", 14, clNearBlack); } } void TDevMask::Init() { IsPermission = 0; Tag.Reset(); SettingData.IsGoMask = 0; IsShow = 0; } void TDevMask::sDelayMs(unsigned int aMs) { volatile unsigned int mTick; volatile unsigned int Tick; for(Tick=0; TickSTextDType.Init(Lv.Grid.Left[0] + 400, Lv.Grid.Top[0] + 2, 240, 30, 0, 0, clNearWhite, ItemColor); IList->STextState.Init(Lv.Grid.Left[0] + 730, Lv.Grid.Top[0] + 2, 68, 30, 0, 0, clNearWhite, ItemColor); IList->STextRegisted.Init(Lv.Grid.Left[0] + 160, Lv.Grid.Top[0] + 36, 120, 30, 0, 0, clNearWhite, ItemColor); IList->STextCtlNum.Init(Lv.Grid.Left[0] + 236, Lv.Grid.Top[0] + 6, 120, 30, 0, 0, clNearWhite, ItemColor); IList->EditPortNum.Init(Lv.Grid.Left[0] + 86, Lv.Grid.Top[0] + 2, 50, 30, 0, 0, 1, clNearWhite); IList->EditAddrNum.Init(Lv.Grid.Left[0] + 86, Lv.Grid.Top[0] + 36, 50, 30, 0, 0, 1, clNearWhite); IList->EditDescpShow.Init(Lv.Grid.Left[0] + 390, Lv.Grid.Top[0] + 36, 400, 30, 0, 0, 1, clNearWhite); IList->STextDType.Enable = 0; IList->STextDType.Visible =1; IList->STextCtlNum.Enable = 1; IList->STextCtlNum.Visible =1; IList->EditPortNum.SetMaxLen(2); IList->EditAddrNum.SetMaxLen(3); IList->EditDescpShow.SetMaxLen(3); IList->EditPortNum.Enable = 1; IList->EditPortNum.Visible = 1; IList->EditAddrNum.Enable = 1; IList->EditAddrNum.Visible = 1; IList->EditDescpShow.Enable = 0; IList->EditDescpShow.Visible = 1; //User Code & Area Assign IList->EditUserCode.Init(Lv.Grid.Left[1] + 84, Lv.Grid.Top[1] + 6, 108, 30, 0, 0, 1, clNearWhite); IList->EditAreaAssign.Init(Lv.Grid.Left[1] + 84, Lv.Grid.Top[1] + 40, 108, 30, 0, 0, 1, clNearWhite); IList->EditUserCode.Enable = 0; IList->EditUserCode.Visible =1; IList->EditUserCode.SetMaxLen(8); IList->EditAreaAssign.Enable = 0; IList->EditAreaAssign.Visible =1; IList->EditAreaAssign.SetMaxLen(5); for(int i=2; iEdit[0].Init(Lv.Grid.Left[2] +110, Lv.Grid.Top[2] + 4, 100,30,0,0,1,clNearBlack); IList->Edit[0].Str.Clear(); IList->Edit[0].Enable = 0; IList->Edit[0].Visible = 1; IList->STextModuleInDefineType.Init(Lv.Grid.Left[2] +60, Lv.Grid.Top[2] + 38, 156,30,0,0,clNearWhite, ItemColor); IList->STextModuleInDefineType.Enable = 1; IList->STextModuleInDefineType.Visible = 1; if(LanguageEnCn==0)IList->STextModuleInDefineType.SetText("未定义",24); else IList->STextModuleInDefineType.SetText("Undefine",24); IList->STextLastState.Init(Lv.Grid.Left[4] +120, Lv.Grid.Top[4] + 4, 156, 30, 0, 0, clNearWhite, ItemColor); IList->STextLastState.TextClear(); IList->EditPortNum.SetText("01",24); IList->EditAddrNum.SetText("001",24); IList->EditDescpShow.SetText("------",24); IList->EditUserCode.SetText("00000001",24); IList->EditAreaAssign.SetText("0001",24); IList->Edit[0].SetText("000",24); IList->EditPortNum.Show(); IList->EditAddrNum.Show(); IList->EditDescpShow.Show(); IList->EditUserCode.Show(); IList->EditAreaAssign.Show(); IList->Edit[0].Show(); IList->STextDType.Show(); IList->STextModuleInDefineType.Show(); RedrawModuleInSignalInType(); Check4Selected(); Path0=1; Path1=1; Path0Avalble =1; Path1Avalble =1; ShowItemDetail(); } void TDevMask::Show(void) { IsShow = 1; RenderBackGround(); DrawSelf(); } void TDevMask::FullRedraw(int Prm) { if(Prm == 0){ RenderBackGround(); DrawSelf(); RedrawCommonByExReturn(); DrawHtInf(0); }else if(Prm == 1){ RectFillRender(GuiRedrawDataList[1][0], GuiRedrawDataList[1][1], GuiRedrawDataList[1][2], GuiRedrawDataList[1][3], ContentColor); 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); RedrawCommonByExReturn(); DrawHtInf(1); if(IsPermission)PmsIntervene4Gui.ReDraw4GuiRecall(); } } void TDevMask::RedrawCommonByExReturn() { if( (Path0Avalble && Path1Avalble) ){ if(IsRegisted){ if(Port[Path0-1].ExistTable[Path1-1] == 0xA5){ DrawState(Port[Path0-1].StateTable[Path1-1]); }else{ TCircle::sRender(IList->STextState.Bound.Left -12, IList->STextState.Bound.Top +14, 10, ItemColor, 0xF); IList->STextLastState.TextClear(); } }else{ TCircle::sRender(IList->STextState.Bound.Left -12, IList->STextState.Bound.Top +14, 10, ItemColor, 0xF); IList->STextLastState.TextClear(); } }else{ TCircle::sRender(IList->STextState.Bound.Left -12, IList->STextState.Bound.Top +14, 10, ItemColor, 0xF); IList->STextLastState.TextClear(); } DrawFixText(); TextDigitRender2Right24(Lv.Grid.Left[0] + 232, Lv.Grid.Top[0] +6, clNearWhite, MainCtl.fData.Split.MyNum); IList->EditPortNum.Show(); IList->EditAddrNum.Show(); IList->STextCtlType.Show(); IList->STextDType.Show(); IList->STextState.Show(); IList->STextRegisted.Show(); IList->EditDescpShow.Show(); IList->EditUserCode.Show(); IList->EditAreaAssign.Show(); IList->STextLastState.Show(); IList->Edit[0].Show(); IList->STextModuleInDefineType.Show(); } void TDevMask::DrawHtInf(int aPrm) { } void TDevMask::RedrawModuleInSignalInType() { if(SignalInputType == 1){ TRoundSquare::sDrawBySize(Lv.Grid.Left[3] + 12, Lv.Grid.Top[3] + 36, dWWidth, dWHeigh, dRoundR, dWdClr , 1); TRoundSquare::sDrawBySize(Lv.Grid.Left[3] + 110, Lv.Grid.Top[3] + 36, dWWidth, dWHeigh, dRoundR, dWdDisabelClr , 0); TRoundSquare::sDrawBySize(Lv.Grid.Left[3] + 206, Lv.Grid.Top[3] + 36, dWWidth, dWHeigh, dRoundR, dWdDisabelClr , 0); }else if(SignalInputType == 2){ TRoundSquare::sDrawBySize(Lv.Grid.Left[3] + 12, Lv.Grid.Top[3] + 36, dWWidth, dWHeigh, dRoundR, dWdDisabelClr , 0); TRoundSquare::sDrawBySize(Lv.Grid.Left[3] + 110, Lv.Grid.Top[3] + 36, dWWidth, dWHeigh, dRoundR, dWdClr , 1); TRoundSquare::sDrawBySize(Lv.Grid.Left[3] + 206, Lv.Grid.Top[3] + 36, dWWidth, dWHeigh, dRoundR, dWdDisabelClr , 0); }else if(SignalInputType == 3){ TRoundSquare::sDrawBySize(Lv.Grid.Left[3] + 12, Lv.Grid.Top[3] + 36, dWWidth, dWHeigh, dRoundR, dWdDisabelClr , 0); TRoundSquare::sDrawBySize(Lv.Grid.Left[3] + 110, Lv.Grid.Top[3] + 36, dWWidth, dWHeigh, dRoundR, dWdDisabelClr , 0); TRoundSquare::sDrawBySize(Lv.Grid.Left[3] + 206, Lv.Grid.Top[3] + 36, dWWidth, dWHeigh, dRoundR, dWdClr , 1); }else{ TRoundSquare::sDrawBySize(Lv.Grid.Left[3] + 12, Lv.Grid.Top[3] + 36, dWWidth, dWHeigh, dRoundR, dWdDisabelClr , 0); TRoundSquare::sDrawBySize(Lv.Grid.Left[3] + 110, Lv.Grid.Top[3] + 36, dWWidth, dWHeigh, dRoundR, dWdDisabelClr , 0); TRoundSquare::sDrawBySize(Lv.Grid.Left[3] + 206, Lv.Grid.Top[3] + 36, dWWidth, dWHeigh, dRoundR, dWdDisabelClr , 0); } } void TDevMask::ClearSelected() { char *tText; switch(Tag.Inx){ case 0: IList->EditPortNum.Selected = 0; IList->EditPortNum.Show(); IList->EditPortNum.ShowCursor(); break; case 1: IList->EditAddrNum.Selected = 0; IList->EditAddrNum.Show(); IList->EditAddrNum.ShowCursor(); break; case 2: if(LanguageEnCn==0)tText="屏蔽"; else tText="Mask"; TRoundRect::sDrawBySize(Lv.Grid.Left[4] +60, Lv.Grid.Top[4] + 36, 76, 30, 7, clNearWhite, tText, 14, clNearBlack); break; case 3: if(LanguageEnCn==0)tText="解除屏蔽"; else tText=" Clear "; TRoundRect::sDrawBySize(Lv.Grid.Left[4] +150, Lv.Grid.Top[4] + 36, 124, 30, 7, clNearWhite, tText, 14, clNearBlack); break; } } //______________________________________________________________________________________________________________________________ void TDevMask::Check4Selected(void) { char *tText; switch(Tag.Inx){ case 0: IList->EditPortNum.Selected = 1; IList->EditPortNum.SetPstTail(); IList->EditPortNum.Show(); IList->EditPortNum.ShowCursor(); break; case 1: IList->EditAddrNum.Selected = 1; IList->EditAddrNum.SetPstTail(); IList->EditAddrNum.Show(); IList->EditAddrNum.ShowCursor(); break; case 2: if(LanguageEnCn==0)tText="屏蔽"; else tText="Mask"; TRoundRect::sDrawBySize(Lv.Grid.Left[4] +60, Lv.Grid.Top[4] + 36, 76, 30, 7, clBlue, tText, 14, clNearWhite); break; case 3: if(LanguageEnCn==0)tText="解除屏蔽"; else tText=" Clear "; TRoundRect::sDrawBySize(Lv.Grid.Left[4] +150, Lv.Grid.Top[4] + 36, 124, 30, 7, clBlue, tText, 14, clNearWhite); break; } } void TDevMask::GetMsgViaIndex(int aInx) { volatile unsigned int sAddr; if(aInx < CtlCenter.ieMsgMask.Count){ sAddr = dAddrSdRam_MsgMask + aInx* 24; MaskMsg.D32[0] = *(volatile unsigned int *)(sAddr + 0); MaskMsg.D32[1] = *(volatile unsigned int *)(sAddr + 4); MaskMsg.D32[2] = *(volatile unsigned int *)(sAddr + 8); MaskMsg.D32[3] = *(volatile unsigned int *)(sAddr + 12); MaskMsg.D32[4] = *(volatile unsigned int *)(sAddr + 16); MaskMsg.D32[5] = *(volatile unsigned int *)(sAddr + 20); } } void TDevMask::ClearMsgViaIndex(int aInx) { volatile unsigned int sAddr; if(aInx < CtlCenter.ieMsgMask.Count){ sAddr = dAddrSdRam_MsgMask + aInx* 24; *(volatile unsigned int *)(sAddr + 0) = 0; *(volatile unsigned int *)(sAddr + 4) = 0; *(volatile unsigned int *)(sAddr + 8) = 0; *(volatile unsigned int *)(sAddr + 12) = 0; *(volatile unsigned int *)(sAddr + 16) = 0; *(volatile unsigned int *)(sAddr + 20) = 0; } } void TDevMask::CopyMsgViaIndex(int aInx) { volatile unsigned int sAddr; sAddr = dAddrSdRam_MsgMask + aInx* 24; MaskMsg.Body.iByte0 = 0; MaskMsg.Body.State = 1; *(volatile unsigned int *)(sAddr + 0) = MaskMsg.D32[0]; *(volatile unsigned int *)(sAddr + 4) = MaskMsg.D32[1]; *(volatile unsigned int *)(sAddr + 8) = MaskMsg.D32[2]; *(volatile unsigned int *)(sAddr + 12) = MaskMsg.D32[3]; *(volatile unsigned int *)(sAddr + 16) = MaskMsg.D32[4]; *(volatile unsigned int *)(sAddr + 20) = MaskMsg.D32[5]; } void TDevMask::GetTempMsgViaIndex(int aInx) { volatile unsigned int sAddr; if(aInx < ExistEntryCount){ sAddr = dSdAddrMaskTemp + aInx* 24; MaskMsg.D32[0] = *(volatile unsigned int *)(sAddr + 0); MaskMsg.D32[1] = *(volatile unsigned int *)(sAddr + 4); MaskMsg.D32[2] = *(volatile unsigned int *)(sAddr + 8); MaskMsg.D32[3] = *(volatile unsigned int *)(sAddr + 12); MaskMsg.D32[4] = *(volatile unsigned int *)(sAddr + 16); MaskMsg.D32[5] = *(volatile unsigned int *)(sAddr + 20); } } void TDevMask::ClearTempMsgViaIndex(int aInx) { volatile unsigned int sAddr; if(aInx < ExistEntryCount){ sAddr = dSdAddrMaskTemp + aInx* 24; *(volatile unsigned int *)(sAddr + 0) = 0; *(volatile unsigned int *)(sAddr + 4) = 0; *(volatile unsigned int *)(sAddr + 8) = 0; *(volatile unsigned int *)(sAddr + 12) = 0; *(volatile unsigned int *)(sAddr + 16) = 0; *(volatile unsigned int *)(sAddr + 20) = 0; } } void TDevMask::CopyTempMsgViaIndex(int aInx) { volatile unsigned int sAddr; sAddr = dSdAddrMaskTemp + aInx* 24; MaskMsg.Body.iByte0 = 0; MaskMsg.Body.State = 1; *(volatile unsigned int *)(sAddr + 0) = MaskMsg.D32[0]; *(volatile unsigned int *)(sAddr + 4) = MaskMsg.D32[1]; *(volatile unsigned int *)(sAddr + 8) = MaskMsg.D32[2]; *(volatile unsigned int *)(sAddr + 12) = MaskMsg.D32[3]; *(volatile unsigned int *)(sAddr + 16) = MaskMsg.D32[4]; *(volatile unsigned int *)(sAddr + 20) = MaskMsg.D32[5]; } void TDevMask::AddRemoveViaTempMsgList(unsigned char aP0, unsigned char aP1, unsigned int IsAdd) { unsigned char P0, P1; volatile unsigned int IsFound; unsigned int FirstNullIndex, Cnt; volatile int i; TDMix aAddr; P0 = aP0-1; P1 = aP1-1; if(P0 >= dPORT_MAX_COUNT)return; IsFound = 0; if(IsAdd){ Port[P0].StateTable[P1] |= dEpStateBitMask; for(i=0; i ieMSG_MASK_MAX_COUNT)FirstNullIndex = i; }else if( MaskMsg.D32[2] == aAddr.D32 ){ ClearTempMsgViaIndex(i); if(FirstNullIndex > ieMSG_MASK_MAX_COUNT){ FirstNullIndex = i; } }else{ if(FirstNullIndex < ieMSG_MASK_MAX_COUNT){ CopyTempMsgViaIndex(FirstNullIndex); ClearTempMsgViaIndex(i); FirstNullIndex++; } Cnt++; } } ExistEntryCount = Cnt; } } void TDevMask::AddRemoveViaCtlCenterMsg(unsigned char aP0, unsigned char aP1, unsigned int aUc, unsigned int IsAdd) { unsigned char P0, P1; volatile unsigned int IsFound; unsigned int FirstNullIndex, Cnt; volatile int i; TDMix aAddr; P0 = aP0-1; P1 = aP1-1; if(P0 >= dPORT_MAX_COUNT)return; IsFound = 0; if(IsAdd){ Port[P0].StateTable[P1] |= dEpStateBitMask; for(i=0; i ieMSG_MASK_MAX_COUNT)FirstNullIndex = i; }else if( MaskMsg.D32[2] == aAddr.D32 ){ ClearMsgViaIndex(i); if(FirstNullIndex > ieMSG_MASK_MAX_COUNT){ FirstNullIndex = i; } CtlCenter.ieMsgMask.ReflashIndex++; CtlCenter.ieGot = 1; }else{ if(FirstNullIndex < ieMSG_MASK_MAX_COUNT){ CopyMsgViaIndex(FirstNullIndex); ClearMsgViaIndex(i); FirstNullIndex++; } Cnt++; } } CtlCenter.ieMsgMask.Count = Cnt; //EventShow.MsgList[4].Count = CtlCenter.ieMsgMask.Count; //EventShow.MsgList[4].NewCount = CtlCenter.ieMsgMask.Count; //EventShow.TryGetMaskData(2, 20240428); } } //_____________________________________________________________________________________________________________________________ void TDevMask::DrawState(unsigned char aSta) { if(aSta & dEpStateBitFire){ TCircle::sRender(IList->STextState.Bound.Left -12, IList->STextState.Bound.Top +14, 10, clRed, 0xF); if(LanguageEnCn==0)IList->STextState.SetText("报警", 24); else IList->STextState.SetText("Fire", 24); }else if(aSta & dEpStateBitStart){ TCircle::sRender(IList->STextState.Bound.Left -12, IList->STextState.Bound.Top +14, 10, clOrange, 0xF); if(LanguageEnCn==0)IList->STextState.SetText("启动", 24); else IList->STextState.SetText("ACT.", 24); }else if(aSta & dEpStateBitSv){ TCircle::sRender(IList->STextState.Bound.Left -12, IList->STextState.Bound.Top +14, 10, clOrange, 0xF); if(LanguageEnCn==0)IList->STextState.SetText("监管", 24); else IList->STextState.SetText("SUPV", 24); }else if(aSta & dEpStateBitFault){ TCircle::sRender(IList->STextState.Bound.Left -12, IList->STextState.Bound.Top +14, 10, clOrange, 0xF); if(LanguageEnCn==0)IList->STextState.SetText("故障", 24); else IList->STextState.SetText("FLT.", 24); }else if(aSta & dEpStateBitFeedBack){ TCircle::sRender(IList->STextState.Bound.Left -12, IList->STextState.Bound.Top +14, 10, clBlue, 0xF); if(LanguageEnCn==0)IList->STextState.SetText("反馈", 24); else IList->STextState.SetText("FB ", 24); }else if(aSta & dEpStateBitMask){ TCircle::sRender(IList->STextState.Bound.Left -12, IList->STextState.Bound.Top +14, 10, clOrange, 0xF); if(LanguageEnCn==0)IList->STextState.SetText("屏蔽", 24); else IList->STextState.SetText("Mask", 24); }else{ TCircle::sRender(IList->STextState.Bound.Left -12, IList->STextState.Bound.Top +14, 10, clDeepGreen, 0xF); if(LanguageEnCn==0)IList->STextState.SetText("正常", 24); else IList->STextState.SetText("IDLE", 24); } IList->STextState.Show(); } void TDevMask::ShowItemDetail() { int ClearInf = 0; if( (Path0Avalble && Path1Avalble) ){ if(Port[Path0-1].ExistTable[Path1-1] == 0xA5){ IsRegisted = 1; dType = Port[Path0-1].dTypeTable[Path1-1]; AssignType = Port[Path0-1].AssignType[Path1-1]; if(LanguageEnCn==0)IList->STextDType.SetText(StrHwType[dType],24); else IList->STextDType.SetText(StrHwTypeEn[dType],24); DrawState(Port[Path0-1].StateTable[Path1-1]); if(LanguageEnCn==0){ IList->STextRegisted.SetText("已注册", 24); IList->STextModuleInDefineType.SetText(StrTypeShortName[AssignType],24); }else{ IList->STextRegisted.SetText("Registered", 24); IList->STextModuleInDefineType.SetText(StrTypeShortNameEn[AssignType],24); } IList->Edit[0].Str.FromUInt3Dg(AssignType); }else{ IsRegisted = 0; IList->STextDType.SetText("----", 24); IList->STextState.SetText("----", 24); if(LanguageEnCn==0)IList->STextRegisted.SetText("未注册", 24); else IList->STextRegisted.SetText("Un Reg", 24); IList->Edit[0].Str.FromStr("---"); IList->STextModuleInDefineType.TextClear(); } unsigned int tAddr = dAddrSdRam_Descp + ((Path0-1) * 256 * 32) + ((Path1-1) * 32); for(int g=0; g<32; g++){ IList->EditDescpShow.Str.Text[g] = *(volatile unsigned char *)(tAddr + g); if( (IList->EditDescpShow.Str.Text[g] == '\0') || (IList->EditDescpShow.Str.Text[g] == 0) ){ break; } } IList->EditDescpShow.Str.Text[32] = '\0'; IList->EditDescpShow.Str.Text[33] = '\0'; IList->EditUserCode.Str.FromUInt8Dg(Port[Path0-1].UcList[Path1-1].Full); IList->EditAreaAssign.Str.FromUInt4Dg(Port[Path0-1].Area[Path1-1]); }else{ IsRegisted = 0; ClearInf = 1; } if(ClearInf){ IList->STextDType.SetText("------",24); IList->STextState.SetText("----", 24); IList->STextRegisted.SetText("------", 24); IList->EditDescpShow.Str.Text[0] = '\0'; IList->EditDescpShow.Str.Text[1] = '\0'; IList->EditUserCode.Str.FromStr("--------"); IList->EditAreaAssign.Str.FromStr("----"); IList->Edit[0].Str.FromStr("---"); IList->STextModuleInDefineType.TextClear(); TCircle::sRender(IList->STextState.Bound.Left -12, IList->STextState.Bound.Top +14, 10, ItemColor, 0xF); } IList->STextDType.Show(); IList->STextState.Show(); IList->STextRegisted.Show(); IList->EditDescpShow.Show(); IList->EditUserCode.Show(); IList->EditAreaAssign.Show(); IList->Edit[0].Show(); IList->STextModuleInDefineType.Show(); } void TDevMask::sWaitChipIdle() { volatile unsigned int Sta; do{ sDelayMs(10); Sta = nor_get_busy_state(dFlashMaskChip); }while(Sta); } void TDevMask::WaitChipIdle2() { volatile unsigned int Sta; do{ sDelayMs(10); Sta = nor_get_busy_state(dFlashMaskChip); }while(Sta); } void TDevMask::ClearAllMask() { unsigned int fAddr, i; sWaitChipIdle(); fAddr = dFlashAddrMask; for(i=0; i<4; i++){ WaitChipIdle2(); nor_erase_sector_64k(dFlashMaskChip, fAddr); fAddr = fAddr + SizeOf64K; sDelayMs(200); } WaitChipIdle2(); } void TDevMask::AddMaskMsg2TempList(int Index, TRecordMaskMsg aMsg) { volatile unsigned int sAddr; sAddr = dSdAddrMaskTemp + (Index * 24); *(volatile unsigned int *)(sAddr + 0) = aMsg.D32[0]; *(volatile unsigned int *)(sAddr + 4) = aMsg.D32[1]; *(volatile unsigned int *)(sAddr + 8) = aMsg.D32[2]; *(volatile unsigned int *)(sAddr + 12) = aMsg.D32[3]; *(volatile unsigned int *)(sAddr + 16) = aMsg.D32[4]; *(volatile unsigned int *)(sAddr + 20) = aMsg.D32[5]; } void TDevMask::AddMaskMsg2DymList(int Index, TRecordMaskMsg aMsg) { volatile unsigned int sAddr; sAddr = dAddrSdRam_MsgMask + (Index * 24); *(volatile unsigned int *)(sAddr + 0) = aMsg.D32[0]; *(volatile unsigned int *)(sAddr + 4) = aMsg.D32[1]; *(volatile unsigned int *)(sAddr + 8) = aMsg.D32[2]; *(volatile unsigned int *)(sAddr + 12) = aMsg.D32[3]; *(volatile unsigned int *)(sAddr + 16) = aMsg.D32[4]; *(volatile unsigned int *)(sAddr + 20) = aMsg.D32[5]; } int TDevMask::ReadMaskFromFlash2Temp(int xArea) { volatile int i, x, PathAva; volatile unsigned int BaseAddr, fAddr, MaskCount, suExit; unsigned char tP0,tP1; TRecordMaskMsg tMaskMsg; MaskCount = 0; sWaitChipIdle(); //Page Count = (ieMSG_MASK_MAX_COUNT=10000 * EntrySize=16) / 16 = 10000; for(i=0; i4)ToBeErase64K_Count=4; sWaitChipIdle(); for(i=0; i 0){ suExit = 0; ToWritePage = ExistEntryCount / 16 +1; for(i=0; i 0){ suExit = 0; ToWritePage = ExistEntryCount / 16 +1; for(i=0; i 0){ suExit = 0; ToWritePage = CtlCenter.ieMsgMask.Count / 16 +1; for(i=0; i 0){ suExit = 0; ToWritePage = CtlCenter.ieMsgMask.Count / 16 +1; for(i=0; iCrc = rCrc; Crc32Feed(rCnt); if(MaskCount==0 and rCnt==0 and rCrc==dMaskNonDataIdf){ if(CrcFlag){ CrcFlag=0; CtlCenter.ieAddBrdFaultCancel(41,TBoardFaultType::StorageMaskData); } }else{ if(Error==0 and rCrc==Crc32GetResult()){ if(CrcFlag){ CrcFlag=0; CtlCenter.ieAddBrdFaultCancel(41,TBoardFaultType::StorageMaskData); } }else{ //error here CrcFlag=1; CtlCenter.ieAddBrdFault(41,TBoardFaultType::StorageMaskData); } } return MaskCount; } int TDevMask::ReadMaskFromFlash() { volatile int i, x; volatile unsigned int fAddr, sAddr, MaskCount, suExit, tUc; volatile unsigned int ExistCode, rCrc, rCnt, GetSta; int GoReadAndWrite; TRecordMaskMsg tMaskMsg; TRecordCommon aRC; MaskCount = 0; //Page Count = (ieMSG_MASK_MAX_COUNT=10000 * EntrySize=16) / 16 = 10000; for(i=0; i 0){ suExit = 0; int ToWritePage = rCnt / 16 +1; for(i=0; iCrc = rCrc; Crc32Feed(rCnt); if(MaskCount==0 and rCnt==0 and rCrc==dMaskNonDataIdf){ if(CrcFlag){ CrcFlag=0; CtlCenter.ieAddBrdFaultCancel(41,TBoardFaultType::StorageMaskData); } }else{ if(Error==0 and rCrc==Crc32GetResult()){ if(CrcFlag){ CrcFlag=0; CtlCenter.ieAddBrdFaultCancel(41,TBoardFaultType::StorageMaskData); } }else{ //error here CrcFlag=1; CtlCenter.ieAddBrdFault(41,TBoardFaultType::StorageMaskData); } } return MaskCount; } void TDevMask::PermissionCmdReturnDraw() { if(Lv.Panel.Active)RectFillRender(Lv.Panel.Left, Lv.Panel.Top, Lv.Panel.Right, Lv.Panel.Bottom, PanelColor); } void TDevMask::PermissionCmdGO() { TDMix aFullPath; unsigned int tUc; if(PermissionCmd){ SettingData.TimeOutTick = 0; SettingData.RecOK = 0; SettingData.IsGoMask = 1; SendToDevice(1); IList->STextLastState.TextClear(); IList->STextLastState.Show(); }else{ if(Path0 && (Path0 <= dPORT_MAX_COUNT)){ }else{ return; } if(MainCtl.fData.Split.ExistTablePort[Path0-1] == 0xA5){ SettingData.TimeOutTick = 0; SettingData.RecOK = 0; SettingData.IsGoMask = 2; SendToDevice(0); IList->STextLastState.TextClear(); IList->STextLastState.Show(); }else{ if(MainCtl.fData.Split.NetworkMode == 1){ if(1){ aFullPath.D8[0] = MainCtl.fData.Split.MyNum; aFullPath.D8[1] = Path0; aFullPath.D8[2] = Path1; aFullPath.D8[3] = Path0; tUc = 0; if(Path0 && Path1){ if( (Path0 <=dPORT_MAX_COUNT) && (Path1 <= dEP_MAX_COUNT_PER_PORT) ){ tUc = Port[Path0-1].UcList[Path1-1].Full; } } Record.OperateAdd_UnMask(aFullPath, dType, tUc); ExistEntryCount = ReadMaskFromFlash2Temp(0); AddRemoveViaTempMsgList(Path0, Path1,0); WriteToFlashMaster(); ExistEntryCount = ReadMaskFromFlash2Temp(0); CombMsg4Master(); (void)CheckStorageData(); ExRecord.SetStateCodeMask(); FecBusCRT.SetStateCodeMask(); if(CrcFlag==0){ if(LanguageEnCn==0)IList->STextLastState.SetText("取消成功",24); else IList->STextLastState.SetText("Clear OK ",24); }else{ if(LanguageEnCn==0)IList->STextLastState.SetText("取消失败",24); else IList->STextLastState.SetText("Clr Failed",24); } IList->STextLastState.Show(); SettingData.IsGoMask = 0; if(CtlCenter.ieMsgMask.Count == 0){ if(AlarmSoundWhat > 3)AlarmSoundWhat = 0x07; } } }else{ if(1){ aFullPath.D8[0] = MainCtl.fData.Split.MyNum; aFullPath.D8[1] = Path0; aFullPath.D8[2] = Path1; aFullPath.D8[3] = 0; tUc = 0; if(Path0 && Path1){ if( (Path0 <=dPORT_MAX_COUNT) && (Path1 <= dEP_MAX_COUNT_PER_PORT) ){ tUc = Port[Path0-1].UcList[Path1-1].Full; } } Record.OperateAdd_UnMask(aFullPath, dType, tUc); ExRecord.SetStateCodeMask(); FecBusCRT.SetStateCodeMask(); AddRemoveViaCtlCenterMsg(Path0, Path1, tUc, 0); WriteToFlashSlave(); CtlCenter.MaskCountSet(ReadMaskFromFlash()); if(CrcFlag==0){ if(LanguageEnCn==0)IList->STextLastState.SetText("取消成功",24); else IList->STextLastState.SetText("Clear OK ",24); }else{ if(LanguageEnCn==0)IList->STextLastState.SetText("取消失败",24); else IList->STextLastState.SetText("Clr Failed",24); } IList->STextLastState.Show(); SettingData.IsGoMask = 0; if(CtlCenter.ieMsgMask.Count == 0){ if(AlarmSoundWhat > 3)AlarmSoundWhat = 0x07; } } } } } } void TDevMask::CheckToDo() { unsigned char tDType, tSta; if( (Path0Avalble) && (Path1Avalble) ){ tDType = Port[Path0-1].dTypeTable[Path1-1]; tSta = Port[Path0-1].StateTable[Path1-1]; if( (tDType == dgTYPE_HAND_REPORT) || (tDType == dgType_VAALRAM) ){ SettingData.DevTypeNotAllow = 1; }else{ SettingData.DevTypeNotAllow = 0; } if( tSta & (dEpStateBitFire + dEpStateBitStart + dEpStateBitSv + dEpStateBitFault + dEpStateBitFeedBack + dEpStateBitDelayStart) ) { SettingData.DevStateNotAllow = 1; }else{ SettingData.DevStateNotAllow = 0; } SettingData.PathError = 0; }else{ SettingData.PathError = 1; } } int TDevMask::CheckInputErrState(int IsMask) { if(SettingData.PathError){ if(LanguageEnCn==0)IList->STextLastState.SetText("路径错误",24); else IList->STextLastState.SetText("Path Err ",24); IList->STextLastState.Show(); return 0; }else if(SettingData.DevStateNotAllow){ if(LanguageEnCn==0)IList->STextLastState.SetText("状态不允许",24); else IList->STextLastState.SetText("State Err",24); IList->STextLastState.Show(); return 0; }else if(SettingData.DevTypeNotAllow){ if(LanguageEnCn==0)IList->STextLastState.SetText("类型不允许",24); else IList->STextLastState.SetText("DType Err",24); IList->STextLastState.Show(); return 0; } if(IsMask){ if(CtlCenter.ieMsgMask.Count >= ieMSG_MASK_MAX_COUNT){ if(LanguageEnCn==0)IList->STextLastState.SetText("数量达上限",24); else IList->STextLastState.SetText("Count Err",24); IList->STextLastState.Show(); return 0; } } return 1; } TGuiMsgReturn TDevMask::KeyIn(unsigned char aKey) { TGuiMsgReturn aMsg = guiMsgNone; TGuiMsgReturn PmsRtnMsg; unsigned char aP0,aP1,Updata; unsigned char x,y,aCh; unsigned char aType; 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; } 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->EditPortNum.KeyIn(aKey); int iVal = IList->EditPortNum.Str.ToInteger(); if( (iVal > 0) && (iVal <= dPORT_MAX_COUNT) ){ IList->EditPortNum.SelectedColor = clBlue; Path0 = iVal; Path0Avalble = 1; }else{ IList->EditPortNum.SelectedColor = clRed; Path0Avalble = 0; } IList->EditPortNum.Show(); ShowItemDetail(); }else if(Tag.Inx == 1){ IList->EditAddrNum.KeyIn(aKey); int iVal = IList->EditAddrNum.Str.ToInteger(); if( (iVal > 0) && (iVal <= dEP_MAX_COUNT_PER_PORT) ){ IList->EditAddrNum.SelectedColor = clBlue; Path1 = iVal; Path1Avalble = 1; }else{ IList->EditAddrNum.SelectedColor = clRed; Path1Avalble = 0; } IList->EditAddrNum.Show(); ShowItemDetail(); } break; } if(aKey == VK_UP){ if(Tag.Inx>0){ if(Tag.Inx == 1){ if(Path1Avalble){ ClearSelected(); Tag.Inx--; Check4Selected(); } }else{ ClearSelected(); Tag.Inx--; Check4Selected(); } }else{ if(Path0Avalble){ ClearSelected(); Tag.Inx=3; Check4Selected(); } } }else if(aKey == VK_DOWN){ if(Tag.Inx<3){ if(Tag.Inx == 0){ if(Path0Avalble){ ClearSelected(); Tag.Inx++; Check4Selected(); } }else if(Tag.Inx == 1){ if(Path1Avalble){ ClearSelected(); Tag.Inx++; Check4Selected(); } }else{ ClearSelected(); Tag.Inx++; Check4Selected(); } }else{ ClearSelected(); Tag.Inx=0; Check4Selected(); } }else if(aKey == VK_F1){ //Go Modify }else if(aKey == VK_TAB){ } if(aKey == VK_EXECUTE){ //Save Data Here //Addr Mode if(Path0Avalble && Path1Avalble && (IsRegisted || (Tag.Inx == 3) ) ){ if(Tag.Inx == 2){ //Triget To Mask Here CheckToDo(); if(CheckInputErrState(1)){ if(SystemPermission > 1){ PermissionCmd = 1; PermissionCmdGO(); }else{ IsPermission = 1; PermissionCmd = 1; PmsIntervene4Gui.Show4Gui(Lv.Panel.Left + 16, Lv.Panel.Top + 16, Lv.Panel.Width -34, 140, 2); } } }else if(Tag.Inx == 3){ //Triget To UnMask Here CheckToDo(); if(CheckInputErrState(0)){ if(SystemPermission > 1){ PermissionCmd = 0; PermissionCmdGO(); }else{ IsPermission = 1; PermissionCmd = 0; PmsIntervene4Gui.Show4Gui(Lv.Panel.Left + 16, Lv.Panel.Top + 16, Lv.Panel.Width -34, 140, 2); } } } } }else if(aKey == VK_RETURN){ IsShow = 0; SettingData.IsGoMask = 0; SettingData.RecOK = 0; aMsg = guiMsgReturn; } return aMsg; } void TDevMask::SendToDevice(int IsAdd) { TCanHeaderID aIde; unsigned char cVal; unsigned int i; unsigned int Len; int iVal; unsigned char aP0,aP1; for(i=0; i<8; i++){ Data[i] = 0; } if(IsAdd == 1){ aIde.BitF.Cmd = cmEpDeviceMask; }else{ aIde.BitF.Cmd = cmEpDeviceMaskRemove; } Len = 4; //Prm Data[0] = 0; Data[1] = 0; Data[2] = Path0; Data[3] = Path1; 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); InnerCan.Buf4GuiSend.Insert(aIde, Data, Len); } void TDevMask::PushOneDataRec(unsigned char aCmd, unsigned char CtlNum, unsigned char aP0, unsigned char aP1) { if(IsShow){ if(SettingData.IsGoMask == 1){ if(aCmd == cmEpDeviceMask){ if( (aP0 == Path0) && (aP1 == Path1) ) { SettingData.RecOK = 1; } } }else if(SettingData.IsGoMask == 2){ if(aCmd == cmEpDeviceMaskRemove){ if( (aP0 == Path0) && (aP1 == Path1) ) { SettingData.RecOK = 1; } } } } } void TDevMask::Task1000Ms() { TDMix aFullPath; unsigned int tUc; if(IsSelfChecking)return; if(IsShow){ if( (Path0) and (Path1 ) ){ if( (Path0 <= dPORT_MAX_COUNT) && (Path1 <= dEP_MAX_COUNT_PER_PORT) ){ if(IsRegisted){ const unsigned char tSta = Port[Path0-1].StateTable[Path1-1]; DrawState(tSta); } } } if(SettingData.IsGoMask){ SettingData.TimeOutTick++; if(SettingData.TimeOutTick > 6){ SettingData.IsGoMask = 0; if(LanguageEnCn==0)IList->STextLastState.SetText("操作失败",24); else IList->STextLastState.SetText("OPR Fail",24); IList->STextLastState.Show(); }else{ if(MainCtl.fData.Split.NetworkMode == 1){ if(SettingData.IsGoMask == 1){ if(SettingData.RecOK){ aFullPath.D8[0] = MainCtl.fData.Split.MyNum; aFullPath.D8[1] = Path0; aFullPath.D8[2] = Path1; aFullPath.D8[3] = 0; tUc = 0; if(Path0 && Path1){ if( (Path0 <=dPORT_MAX_COUNT) && (Path1 <= dEP_MAX_COUNT_PER_PORT) ){ tUc = Port[Path0-1].UcList[Path1-1].Full; } } Record.OperateAdd_Mask(aFullPath, dType, tUc); ExistEntryCount = ReadMaskFromFlash2Temp(0); AddRemoveViaTempMsgList(Path0, Path1,1); WriteToFlashMaster(); ExistEntryCount = ReadMaskFromFlash2Temp(0); CombMsg4Master(); (void)CheckStorageData(); ExRecord.SetStateCodeMask(); FecBusCRT.SetStateCodeMask(); if(CrcFlag==0){ if(LanguageEnCn==0)IList->STextLastState.SetText("屏蔽成功",24); else IList->STextLastState.SetText("Blocked OK",24); }else{ if(LanguageEnCn==0)IList->STextLastState.SetText("屏蔽失败",24); else IList->STextLastState.SetText("Blk Failed",24); } IList->STextLastState.Show(); SettingData.IsGoMask = 0; if(CtlCenter.ieMsgMask.Count >0){ if(AlarmSoundWhat > 3)AlarmSoundWhat = 4; } } }else if(SettingData.IsGoMask == 2){ if(SettingData.RecOK){ aFullPath.D8[0] = MainCtl.fData.Split.MyNum; aFullPath.D8[1] = Path0; aFullPath.D8[2] = Path1; aFullPath.D8[3] = Path0; tUc = 0; if(Path0 && Path1){ if( (Path0 <=dPORT_MAX_COUNT) && (Path1 <= dEP_MAX_COUNT_PER_PORT) ){ tUc = Port[Path0-1].UcList[Path1-1].Full; } } Record.OperateAdd_UnMask(aFullPath, dType, tUc); ExistEntryCount = ReadMaskFromFlash2Temp(0); AddRemoveViaTempMsgList(Path0, Path1,0); WriteToFlashMaster(); ExistEntryCount = ReadMaskFromFlash2Temp(0); CombMsg4Master(); (void)CheckStorageData(); ExRecord.SetStateCodeMask(); FecBusCRT.SetStateCodeMask(); if(CrcFlag==0){ if(LanguageEnCn==0)IList->STextLastState.SetText("取消成功",24); else IList->STextLastState.SetText("Clear OK ",24); }else{ if(LanguageEnCn==0)IList->STextLastState.SetText("取消失败",24); else IList->STextLastState.SetText("Clr Failed",24); } IList->STextLastState.Show(); SettingData.IsGoMask = 0; if(CtlCenter.ieMsgMask.Count == 0){ if(AlarmSoundWhat > 3)AlarmSoundWhat = 0x07; } } } }else{ if(SettingData.IsGoMask == 1){ if(SettingData.RecOK){ aFullPath.D8[0] = MainCtl.fData.Split.MyNum; aFullPath.D8[1] = Path0; aFullPath.D8[2] = Path1; aFullPath.D8[3] = 0; tUc = 0; if(Path0 && Path1){ if( (Path0 <=dPORT_MAX_COUNT) && (Path1 <= dEP_MAX_COUNT_PER_PORT) ){ tUc = Port[Path0-1].UcList[Path1-1].Full; } } Record.OperateAdd_Mask(aFullPath, dType, tUc); AddRemoveViaCtlCenterMsg(Path0, Path1,tUc,1); WriteToFlashSlave(); CtlCenter.MaskCountSet(ReadMaskFromFlash()); if(CrcFlag==0){ if(LanguageEnCn==0)IList->STextLastState.SetText("屏蔽成功",24); else IList->STextLastState.SetText("Blocked OK",24); }else{ if(LanguageEnCn==0)IList->STextLastState.SetText("屏蔽失败",24); else IList->STextLastState.SetText("Blk Failed",24); } IList->STextLastState.Show(); SettingData.IsGoMask = 0; if(CtlCenter.ieMsgMask.Count >0){ if(AlarmSoundWhat > 3)AlarmSoundWhat = 4; } } }else if(SettingData.IsGoMask == 2){ if(SettingData.RecOK){ aFullPath.D8[0] = MainCtl.fData.Split.MyNum; aFullPath.D8[1] = Path0; aFullPath.D8[2] = Path1; aFullPath.D8[3] = 0; tUc = 0; if(Path0 && Path1){ if( (Path0 <=dPORT_MAX_COUNT) && (Path1 <= dEP_MAX_COUNT_PER_PORT) ){ tUc = Port[Path0-1].UcList[Path1-1].Full; } } Record.OperateAdd_UnMask(aFullPath, dType, tUc); ExRecord.SetStateCodeMask(); FecBusCRT.SetStateCodeMask(); AddRemoveViaCtlCenterMsg(Path0, Path1, tUc, 0); WriteToFlashSlave(); CtlCenter.MaskCountSet(ReadMaskFromFlash()); if(CrcFlag==0){ if(LanguageEnCn==0)IList->STextLastState.SetText("取消成功",24); else IList->STextLastState.SetText("Clear OK ",24); }else{ if(LanguageEnCn==0)IList->STextLastState.SetText("取消失败",24); else IList->STextLastState.SetText("Clr Failed",24); } IList->STextLastState.Show(); SettingData.IsGoMask = 0; if(CtlCenter.ieMsgMask.Count == 0){ if(AlarmSoundWhat > 3)AlarmSoundWhat = 0x07; } } } } } } } } void TDevMask::RecallCrcFaultMsg() { if(CrcFlag) CtlCenter.ieAddBrdFault(41,TBoardFaultType::StorageMaskData); } void TDevMask::sRecoverSetDefault() { volatile int i, x, aInx; volatile unsigned int fAddr, AddrSd; volatile unsigned int GetSta; //User Code and Assign Type //First 32 Port if(sIList==nullptr)return; sIList->ReadWriteData.Reset(); LoopCheck1S(); do{ sDelayMs(3); GetSta = nor_get_busy_state(dFlashMaskChip); }while(GetSta); fAddr = dFlashAddrMask; for(i=0; i<4; i++){ LoopCheck1S(); nor_erase_sector_64k(dFlashMaskChip, fAddr); sDelayMs(400); do{ sDelayMs(3); GetSta = nor_get_busy_state(dFlashMaskChip); }while(GetSta); fAddr = fAddr + SizeOf64K; } //Mark Crc 4 None Data fAddr = dFlashAddrMask + dMaskCrcCntOffset; sIList->ReadWriteData.D32[0] = 0; sIList->ReadWriteData.D32[1] = dMaskNonDataIdf; nor_write_page(dFlashMaskChip, fAddr, sIList->ReadWriteData.D8); do{ sDelayMs(5); GetSta = nor_get_busy_state(dFlashMaskChip); }while(GetSta); //Clear Backup fAddr = dFlashAddrMask_II; for(i=0; i<4; i++){ LoopCheck1S(); nor_erase_sector_64k(dFlashMaskChip, fAddr); sDelayMs(400); do{ sDelayMs(3); GetSta = nor_get_busy_state(dFlashMaskChip); }while(GetSta); fAddr = fAddr + SizeOf64K; } LoopCheck1S(); CtlCenter.CrcFlag.Mask =0; CtlCenter.ieMsgMask.Count = 0; CtlCenter.ieMsgMask.ReflashIndex++; for(i=0; i