#include "DevMask.h" #include "Runtime.h" #include "DirectPadCfg.h" extern "C"{ #include "user_norflash.h" //#include "user_eeprom.h" #include "uart_key_drv.h" #include "task.h" #include "HW_config.h" } #define clOdd clMoneyGreen #define clEven clWhiteBlue #define clEnable clDeepGreen #define clDisable clSilver #define dWdClr clSkyBlue #define dWdDisabelClr clNearWhite #define dWWidth 24 #define dWHeigh 24 #define dRoundR 7 const short GridX [5] = {10, 160, 300, 500, 700}; const short GridX2[5] = {156, 296, 496, 696, 786}; const short GridY [10] = {86, 126, 496, 696, 786}; const short GridY2[10] = {156, 296, 496, 696, 786}; class TItemList *TDirectPadCfg::sIList; void TDirectPadCfg::DrawFixText() { if(LanguageEnCn==0){ TextRender_string24(Lv.Grid.Left[0] + 10, Lv.Grid.Top[0] +6, clNearWhite, "多线盘"); TextRender_string24(Lv.Grid.Left[0] + 200, Lv.Grid.Top[0] +6, clNearWhite, "盘使能"); TextRender_string24(Lv.Grid.Left[0] + 320, Lv.Grid.Top[0] +6, clNearWhite, "机器号"); TextRender_string24(Lv.Grid.Left[0] + 414, 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[0] + 160, Lv.Grid.Top[0] + 40, clNearWhite, "共"); TextRender_string24(Lv.Grid.Left[0] + 196, Lv.Grid.Top[0] + 40, clNearWhite, "8点"); 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] +50, Lv.Grid.Top[3] + 36, clNearWhite, ItemColor, "不检测故障"); TextRender_string24(Lv.Grid.Left[4] +10, Lv.Grid.Top[4] + 4, clNearWhite, ItemColor, "启用状态"); TextRender_string24(Lv.Grid.Left[4] +50, Lv.Grid.Top[4] + 36, clNearWhite, ItemColor, "启用"); TextRender_string24(Lv.Grid.Left[4] +176, Lv.Grid.Top[4] + 36, clNearWhite, ItemColor, "禁止"); }else{ TextRender_string24(Lv.Grid.Left[0] + 10, Lv.Grid.Top[0] +6, clNearWhite, "Brd ID"); TextRender_string24(Lv.Grid.Left[0] + 200, Lv.Grid.Top[0] +6, clNearWhite, "Enabled"); TextRender_string24(Lv.Grid.Left[0] + 320, Lv.Grid.Top[0] +6, clNearWhite, "CtlID"); TextRender_string24(Lv.Grid.Left[0] + 414, Lv.Grid.Top[0] +6, clNearWhite, " Local"); 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, "Node"); TextRender_string24(Lv.Grid.Left[0] + 280, Lv.Grid.Top[0] + 40, clNearWhite, " Note:"); TextRender_string24(Lv.Grid.Left[0] + 160, Lv.Grid.Top[0] + 40, clNearWhite, "8Pads"); //TextRender_string24(Lv.Grid.Left[0] + 196, Lv.Grid.Top[0] + 40, clNearWhite, "8点"); 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 Type"); TextRender_string24(Lv.Grid.Left[3] +10, Lv.Grid.Top[3] + 4, clNearWhite, ItemColor, "Inspection"); TextRender_string24(Lv.Grid.Left[3] +50, Lv.Grid.Top[3] + 36, clNearWhite, ItemColor, "No Insp"); TextRender_string24(Lv.Grid.Left[4] +10, Lv.Grid.Top[4] + 4, clNearWhite, ItemColor, "Enabled"); TextRender_string24(Lv.Grid.Left[4] +50, Lv.Grid.Top[4] + 36, clNearWhite, ItemColor, "Enabled"); TextRender_string24(Lv.Grid.Left[4] +176, Lv.Grid.Top[4] + 36, clNearWhite, ItemColor, "Disabled"); } } void TDirectPadCfg::Init(int aMode) { IsPermission = 0; EdittingDescp = 0; ResultPst = 0; Tag.Reset(); IsExtInput = 1; EnterMethod = aMode; ShowResultTick = 0; if(EnterMethod == 0){ Tag.InxMin = 0; }else{ Tag.InxMin = 1; } Tag.Inx = Tag.InxMin; } void TDirectPadCfg::RenderBackGround(void) { RectFillRender(ContentGeometry.Left, ContentGeometry.Top, ContentGeometry.Right, ContentGeometry.Bottom, ContentColor); } void TDirectPadCfg::RenderBackGround(unsigned int aClr) { RectFillRender(ContentGeometry.Left, ContentGeometry.Top, ContentGeometry.Right, ContentGeometry.Bottom, aClr); } void TDirectPadCfg::FullRedraw(int Prm) { IsShow = 1; if(Prm == 0){ RenderBackGround(); DrawSelf(); }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); TextDigitRender2Right24(Lv.Grid.Left[0] + 392, Lv.Grid.Top[0] +6, clNearWhite, MainCtl.fData.Split.MyNum); DrawFixText(); DrawIsPadDeActive(); IList->STextState.Show(); IList->EditPortNum.Show(); IList->EditAddrNum.Show(); IList->EditDescpShow.Show(); IList->EditUserCode.Show(); IList->EditAreaAssign.Show(); IList->Edit[0].Show(); IList->STextModuleInDefineType.Show(); DrawPadBoardCfgList(); if(IsPermission)PmsIntervene4Gui.ReDraw4GuiRecall(); if(EdittingDescp){} } } void TDirectPadCfg::DrawState() { unsigned char aSta; if(Path0 && Path1 && (Path0 <= dDIRECTCTL_MAX_COUNT) && (Path1 <= dDIRECTCTL_KEY_MAX_COUNT) ){ if(DirectCtlBoard[Path0-1].FaultState[Path1-1]){ 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(DirectCtlBoard[Path0-1].FeedbackState[Path1-1]){ 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("FBCK", 24); }else if(DirectCtlBoard[Path0-1].OutputState[Path1-1]){ 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("ACT.", 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); } }else{ TCircle::sRender(IList->STextState.Bound.Left -12, IList->STextState.Bound.Top +14, 10, ItemColor, 0xF); IList->STextState.SetText("----", 24); } IList->STextState.Show(); } void TDirectPadCfg::DrawSelf(void) { RenderBackGround(); RectFillRender(Lv.Caption.Left, Lv.Caption.Top, Lv.Caption.Right, Lv.Caption.Bottom, CaptionColor); if(LanguageEnCn==0){ if(EnterMethod) TextRender_string24(Lv.Caption.Left + 10, Lv.Caption.Top +4, clNearWhite, CaptionColor, "手动控制盘->信息->多线配置"); else TextRender_string24(Lv.Caption.Left + 10, Lv.Caption.Top +4, clNearWhite, CaptionColor, "手动控制盘->多线配置 "); }else{ if(EnterMethod) TextRender_string24(Lv.Caption.Left + 10, Lv.Caption.Top +4, clNearWhite, CaptionColor, "Manual Control Unit->Information->Direct Pad Boards Config"); else TextRender_string24(Lv.Caption.Left + 10, Lv.Caption.Top +4, clNearWhite, CaptionColor, "Manual Control Unit->Direct Pad Boards Config "); } for(int i=0; i<2; 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.PanelSmall.Active)RectFillRender(Lv.PanelSmall.Left, Lv.PanelSmall.Top, Lv.PanelSmall.Right, Lv.PanelSmall.Bottom, SmallPanelColor); for(int i=2; iSTextCtlNum.Init(Lv.Grid.Left[0] + 236, Lv.Grid.Top[0] + 6, 120, 30, 0, 0, clNearWhite, ItemColor); TextDigitRender2Right24(Lv.Grid.Left[0] + 392, Lv.Grid.Top[0] +6, clNearWhite, MainCtl.fData.Split.MyNum); IList->STextState.Init(Lv.Grid.Left[0] + 730, Lv.Grid.Top[0] + 2, 68, 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 = 1; IList->STextDType.Visible =1; IList->STextState.Enable = 1; IList->STextState.Visible =1; IList->STextRegisted.Enable = 1; IList->STextRegisted.Visible =1; //IList->STextCtlNum.Enable = 1; //IList->STextCtlNum.Visible =1; IList->EditPortNum.TextClear(); IList->EditAddrNum.TextClear(); IList->EditPortNum.SetMaxLen(2); IList->EditAddrNum.SetMaxLen(2); if(EnterMethod) IList->EditPortNum.Enable = 0; else IList->EditPortNum.Enable = 1; IList->EditPortNum.Visible = 1; IList->EditAddrNum.Enable = 1; IList->EditAddrNum.Visible = 1; IList->EditDescpShow.Enable = 1; 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 = 1; IList->EditUserCode.Visible =1; IList->EditUserCode.SetMaxLen(8); IList->EditAreaAssign.Enable = 1; IList->EditAreaAssign.Visible =1; IList->EditAreaAssign.SetMaxLen(4); IList->Edit[0].Init(Lv.Grid.Left[2] +146, Lv.Grid.Top[2] + 4, 48,30,0,0,1,clNearBlack); IList->Edit[0].SetMaxLen(3); IList->Edit[0].Str.Clear(); IList->STextModuleInDefineType.Init(Lv.Grid.Left[2] +4, Lv.Grid.Top[2] + 40, 260,30,0,0,clNearWhite,ItemColor); //if(Path0Valid && Path1Valid){ // unsigned char tType = DirectCtlBoard[Path0-1].AssignType[Path1-1]; // IList->Edit[0].Str.FromUInt3Dg(tType); // if(tType == 0){ // IList->STextModuleInDefineType.SetText("未指派类型" , 24); // }else{ // IList->STextModuleInDefineType.SetText(StrTypeShortName[tType] , 24); // } //}else{ // IList->STextModuleInDefineType.SetText("----" , 24); //} //IList->Edit[0].Show(); //IList->STextModuleInDefineType.Show(); if(Lv.Panel.Active)RectFillRender(Lv.Panel.Left, Lv.Panel.Top, Lv.Panel.Right, Lv.Panel.Bottom, PanelColor); if(Lv.PanelSmall.Active)RectFillRender(Lv.PanelSmall.Left, Lv.PanelSmall.Top, Lv.PanelSmall.Right, Lv.PanelSmall.Bottom, SmallPanelColor); } void TDirectPadCfg::DrawPadBoardCfgList() { int i, x, y; x = Lv.Panel.Left+6; y = Lv.Panel.Top +2; if(LanguageEnCn==0){ TextRender_string24(x, y, clNearBlack, PanelColor, "节点 二次码 分区 故障检测 启用"); }else{ TextRender_string24(x, y, clNearBlack, PanelColor, "Node AuxID Zone CheckLine InUse"); } int TopCnt = dDIRECTCTL_KEY_MAX_COUNT; if( TopCnt >8) TopCnt = 8; for(i=0; iEditDescpShow.Str.Text[i] = *(volatile unsigned char *)(aAddr + i); } IList->EditDescpShow.Str.Text[32] = '\0'; IList->EditDescpShow.Str.Text[33] = '\0'; IList->EditDescpShow.SetPstTail(); IList->EditDescpShow.Show(); IList->EditDescpShow.ShowCursor(); } } } void TDirectPadCfg::DrawUserCodeAssignAreaAssignType() { int iVal; IList->EditUserCode.Str.FromUInt8Dg(DirectCtlBoard[Path0-1].UcList[Path1-1].Full); IList->EditUserCode.Show(); IList->EditAreaAssign.Str.FromUInt4Dg(DirectCtlBoard[Path0-1].Area[Path1-1]); IList->EditAreaAssign.Show(); IList->Edit[0].Str.FromUInt3Dg(DirectCtlBoard[Path0-1].AssignType[Path1-1]); IList->Edit[0].Show(); iVal = IList->Edit[0].Str.ToInteger(); if( (iVal > 255) || (iVal <0) ){ iVal = 0; IList->STextModuleInDefineType.SetText(" ",24); }else{ if(LanguageEnCn==0) IList->STextModuleInDefineType.SetText(StrTypeShortName[iVal],24); else IList->STextModuleInDefineType.SetText(StrTypeShortNameEn[iVal],24); } IList->STextModuleInDefineType.Show(); } void TDirectPadCfg::SetPath(unsigned char aCtlNum, unsigned char aPath0, unsigned char aPath1) { unsigned char tP0, tP1, tT; //this->CtlNum = aCtlNum; if(aPath0 && (aPath0 <= dDIRECTCTL_MAX_COUNT)) { Path0Valid = 1; IList->EditPortNum.SelectedColor = clBlue; }else{ Path0Valid = 0; IList->EditPortNum.SelectedColor = clRed; } if(aPath1 && (aPath1 <= dDIRECTCTL_KEY_MAX_COUNT)){ Path1Valid = 1; IList->EditAddrNum.SelectedColor = clBlue; }else{ Path1Valid = 0; IList->EditAddrNum.SelectedColor = clRed; } this->Path0 = aPath0; this->Path1 = aPath1; IList->EditPortNum.Str.FromUInt2Dg(aPath0); IList->EditAddrNum.Str.FromUInt2Dg(aPath1); IList->EditPortNum.Show(); IList->EditAddrNum.Show(); DrawState(); ReLoadAndDrawDescp(); DrawUserCodeAssignAreaAssignType(); LoadCfg4Edit(aPath0, aPath1); DrawPadBoardCfgList(); Check4Selected(); } void TDirectPadCfg::Show(void) { DrawSelf(); IsShow = 1; } void TDirectPadCfg::sDelayMs(unsigned int aMs) { volatile unsigned int mTick; volatile unsigned int Tick; for(Tick=0; TickEditDescpShow.Selected = 1; IList->EditDescpShow.SetPstTail(); IList->EditDescpShow.Show(); RectFillRender(aPanel->Bound.Left, aPanel->Bound.Top, aPanel->Bound.Right, aPanel->Bound.Bottom, ContentColor); for(int i=1; i<4; 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.PanelSmall.Active)RectFillRender(Lv.PanelSmall.Left, Lv.PanelSmall.Top, Lv.PanelSmall.Right, Lv.PanelSmall.Bottom, SmallPanelColor); if(LanguageEnCn==0){ 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] +50, Lv.Grid.Top[3] + 36, clNearWhite, ItemColor, "开启"); }else{ 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 Type"); TextRender_string24(Lv.Grid.Left[3] +10, Lv.Grid.Top[3] + 4, clNearWhite, ItemColor, "Inspection"); TextRender_string24(Lv.Grid.Left[3] +50, Lv.Grid.Top[3] + 36, clNearWhite, ItemColor, "In USe"); } IList->EditUserCode.Show(); IList->EditAreaAssign.Show(); IList->Edit[0].Show(); IList->STextModuleInDefineType.Show(); DrawISCheckFault(); DrawPadBoardCfgList(); } void TDirectPadCfg::PermissionCmdReturnDraw() { int x,y; Check4Selected(); if(Lv.Panel.Active)RectFillRender(Lv.Panel.Left, Lv.Panel.Top, Lv.Panel.Right, Lv.Panel.Bottom, PanelColor); DrawPadBoardCfgList(); } void TDirectPadCfg::InitPanel() { int x,y,x2,y2, aW,aH,i; x = 20; y = 150; x2 = 799; y2 = 340; aW = x2 - x +1; aH = y2 -y +1; aPanel->Init(x,y,aW,aH,0,0,clMoneyGreen, bvRaised); aPanel->Caption.Init(1,1,aW-3,32,x,y,clNearWhite,clBlue); if(LanguageEnCn==0) aPanel->Caption.SetText("按中/EN键切换输入法,设置键保存更改,返回键放弃更改并返回",24); else aPanel->Caption.SetText("Key 中/EN To Switch Input Method,Key Set To Save",24); aPanel->Caption.Enable = 1; aPanel->Caption.Visible = 1; aPanel->SText[0].Init(460,40,300,34,x,y,clNearBlack,clMoneyGreen); if(LanguageEnCn==0){ TMyString::sFromStr("当前快捷输入数字", aPanel->SText[0].Text); }else{ TMyString::sFromStr("Enter Numbers ", aPanel->SText[0].Text); } aPanel->SText[0].Enable = 1; aPanel->SText[0].Visible = 1; aPanel->Edit[ 0].Init(10,40,420,30,x,y,1,clNearBlack); aPanel->Edit[ 0].Str.FromStr(IList->EditDescpShow.Str.Text); for(i=0; i<1;i++){ aPanel->Edit[i].Enable = 1; aPanel->Edit[i].Visible = 1; aPanel->Edit[i].SetMaxLen(32); aPanel->Edit[i].SetPstTail(); aPanel->Edit[i].Selected = 1; } aPanel->Show(); aPanel->Caption.Show(); aPanel->SText[0].Show(); aPanel->Edit[0].Show(); aPanel->Edit[0].ShowCursor(); IsExtInput = 1; CnInput.Init(aPanel->Bound.Left + 10, aPanel->Bound.Top +80, 760, 90, 0, 0, clGray); CnInput.Show(); if(LanguageEnCn==0){ TMyString::sFromStr("请根据以下输入法提示输入", aPanel->SText[0].Text); }else{ //TMyString::sFromStr("Pay Attention To The Tip", aPanel->SText[0].Text); TMyString::sFromStr(" ", aPanel->SText[0].Text); } aPanel->SText[0].Show(); } void TDirectPadCfg::ClearSelected() { switch(Tag.Inx){ case 0: IList->EditPortNum.Selected = 0; IList->EditPortNum.Show(); break; case 1: TRoundSquare::sSelected(Lv.Grid.Left[0] +170, Lv.Grid.Top[0] + 6, dWWidth, dWHeigh, 4, ItemColor); break; case 2: IList->EditAddrNum.Selected = 0; IList->EditAddrNum.Show(); break; case 3: IList->EditDescpShow.Selected = 0; IList->EditDescpShow.Show(); break; case 4: IList->EditUserCode.Selected = 0; IList->EditUserCode.Show(); break; case 5: IList->EditAreaAssign.Selected = 0; IList->EditAreaAssign.Show(); break; case 6: IList->Edit[0].Selected = 0; IList->Edit[0].Show(); break; case 7: TRoundSquare::sSelected(Lv.Grid.Left[3] +12, Lv.Grid.Top[3] + 36, dWWidth, dWHeigh, 4, ItemColor); break; case 8: TRoundSquare::sSelected(Lv.Grid.Left[4] +12, Lv.Grid.Top[4] + 36, dWWidth, dWHeigh, 4, ItemColor); break; case 9: TRoundSquare::sSelected(Lv.Grid.Left[4] +140, Lv.Grid.Top[4] + 36, dWWidth, dWHeigh, 4, ItemColor); break; } } void TDirectPadCfg::Check4Selected() { switch(Tag.Inx){ case 0: IList->EditPortNum.Selected = 1; IList->EditPortNum.SetPstTail(); IList->EditPortNum.Show(); IList->EditPortNum.ShowCursor(); break; case 1: TRoundSquare::sSelected(Lv.Grid.Left[0] +170, Lv.Grid.Top[0] + 6, dWWidth, dWHeigh, 4, clNearWhite); break; case 2: IList->EditAddrNum.Selected = 1; IList->EditAddrNum.SetPstTail(); IList->EditAddrNum.Show(); IList->EditAddrNum.ShowCursor(); break; case 3: IList->EditDescpShow.Selected = 1; IList->EditDescpShow.SetPstTail(); IList->EditDescpShow.Show(); IList->EditDescpShow.ShowCursor(); break; case 4: IList->EditUserCode.Selected = 1; IList->EditUserCode.SetPstTail(); IList->EditUserCode.Show(); IList->EditUserCode.ShowCursor(); break; case 5: IList->EditAreaAssign.Selected = 1; IList->EditAreaAssign.SetPstTail(); IList->EditAreaAssign.Show(); IList->EditAreaAssign.ShowCursor(); break; case 6: IList->Edit[0].Selected = 1; IList->Edit[0].SetPstTail(); IList->Edit[0].Show(); IList->Edit[0].ShowCursor(); break; case 7: TRoundSquare::sSelected(Lv.Grid.Left[3] +12, Lv.Grid.Top[3] + 36, dWWidth, dWHeigh, 4, clNearWhite); break; case 8: TRoundSquare::sSelected(Lv.Grid.Left[4] +12, Lv.Grid.Top[4] + 36, dWWidth, dWHeigh, 4, clNearWhite); break; case 9: TRoundSquare::sSelected(Lv.Grid.Left[4] +140, Lv.Grid.Top[4] + 36, dWWidth, dWHeigh, 4, clNearWhite); break; } } TGuiMsgReturn TDirectPadCfg::KeyIn(unsigned char aKey) { int ind,i,aIndex; unsigned char aP0; TGuiMsgReturn aMsg = guiMsgNone; TGuiMsgReturn SubRtnMsg = guiMsgNone; TGuiMsgReturn PmsRtnMsg = guiMsgNone; int HadPrc = 0; int iVal; JustShowResult = 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(); } }else if(EdittingDescp){ const char *p; if(aKey == dfKEY_SETUP){ //Save and return IList->EditDescpShow.Str.FromStr(this->aPanel->Edit[0].Str.Text); IList->EditDescpShow.Show(); EdittingDescp = 0; Redraw4DescpEdit(); }else if(IsExtInput){ if(aKey == dfKEY_ENCN){ CnInput.KeyIn(aKey); if(0){ IsExtInput = 0; CnInput.OverPrint(this->aPanel->Color); aPanel->Show(); aPanel->Caption.Show(); aPanel->SText[0].Show(); aPanel->Edit[0].Show(); aPanel->Edit[0].ShowCursor(); TMyString::sFromStr("当前快捷输入数字", aPanel->SText[0].Text); aPanel->SText[0].Show(); } }else if(aKey == VK_RETURN){ //Just return Redraw4DescpEdit(); EdittingDescp = 0; }else{ if( (aKey == VK_DELETE) && (CnInput.sEdit.Pst == -1) ){ aPanel->Edit[0].KeyIn(aKey); aPanel->Edit[0].Show(); aPanel->Edit[0].ShowCursor(); }else{ p = CnInput.KeyIn(aKey); if(p != nullptr){ if(CnInput.GotChar[0] != '\0'){ aPanel->Edit[0].Pst = aPanel->Edit[0].Str.Insert(CnInput.GotChar, aPanel->Edit[0].Pst); aPanel->Edit[0].Str.BrokeFixLen(32); aPanel->Edit[0].CorrectPst(); aPanel->Edit[0].Show(); } } } } }else{ switch(aKey){ case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case VK_LEFT: case VK_RIGHT: case VK_DELETE: aPanel->Edit[0].KeyIn(aKey); aPanel->Edit[0].Str.BrokeFixLen(32); aPanel->Edit[0].CorrectPst(); aPanel->Edit[0].Show(); break; case dfKEY_ENCN: if(IsExtInput == 0){ IsExtInput = 1; CnInput.Init(aPanel->Bound.Left + 10, aPanel->Bound.Top +80, 760, 90, 0, 0, clGray); CnInput.Show(); if(LanguageEnCn==0){ TMyString::sFromStr("当前根据输入法输入", aPanel->SText[0].Text); }else{ TMyString::sFromStr(" ", aPanel->SText[0].Text); } aPanel->SText[0].Show(); } break; case VK_EXECUTE: break; case VK_RETURN: Redraw4DescpEdit(); EdittingDescp = 0; break; } } }else{ 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){ if(aKey == VK_RIGHT){ if(IList->EditPortNum.Pst >= IList->EditPortNum.Str.GetEndPst()){ ClearSelected(); Tag.Inx = 1; Check4Selected(); HadPrc = 1; } } if(HadPrc == 0){ IList->EditPortNum.KeyIn(aKey); iVal = IList->EditPortNum.Str.ToInteger(); if( (iVal) && (iVal <= dDIRECTCTL_MAX_COUNT) ){ IList->EditPortNum.SelectedColor = clBlue; Path0Valid = 1; }else{ IList->EditPortNum.SelectedColor = clRed; Path0Valid = 0; } if(Path0 != iVal){ Path0 = iVal; DrawState(); ReLoadAndDrawDescp(); DrawUserCodeAssignAreaAssignType(); LoadCfg4Edit(Path0, Path1); DrawPadBoardCfgList(); } IList->EditPortNum.Show(); IList->EditPortNum.ShowCursor(); } }else if(Tag.Inx == 1){ if(VK_LEFT == aKey){ if(Tag.Inx > Tag.InxMin){ ClearSelected(); Tag.Inx = 0; Check4Selected(); } } }else if(Tag.Inx == 2){ if(aKey == VK_RIGHT){ if(IList->EditAddrNum.Pst >= IList->EditAddrNum.Str.GetEndPst()){ ClearSelected(); Tag.Inx = 3; Check4Selected(); HadPrc = 1; } } if(HadPrc == 0){ IList->EditAddrNum.KeyIn(aKey); iVal = IList->EditAddrNum.Str.ToInteger(); if( (iVal) && (iVal <= dDIRECTCTL_KEY_MAX_COUNT) ){ IList->EditAddrNum.SelectedColor = clBlue; Path1Valid =1; }else{ IList->EditAddrNum.SelectedColor = clRed; Path1Valid = 0; } if(Path1 != iVal){ Path1 = iVal; DrawState(); ReLoadAndDrawDescp(); DrawUserCodeAssignAreaAssignType(); LoadCfg4Edit(Path0, Path1); } IList->EditAddrNum.Show(); IList->EditAddrNum.ShowCursor(); } }else if(Tag.Inx == 3){ //DescpShow if(aKey == VK_LEFT){ ClearSelected(); Tag.Inx = 2; Check4Selected(); HadPrc =1; } }else if(Tag.Inx == 4){ //User Code IList->EditUserCode.KeyIn(aKey); IList->EditUserCode.Show(); IList->EditUserCode.ShowCursor(); }else if(Tag.Inx == 5){ //Area IList->EditAreaAssign.KeyIn(aKey); IList->EditAreaAssign.Show(); IList->EditAreaAssign.ShowCursor(); }else if(Tag.Inx == 6){ //Define Type IList->Edit[0].KeyIn(aKey); iVal = IList->Edit[0].Str.ToInteger(); if( (iVal > 255) || (iVal <0) ){ iVal = 0; IList->Edit[0].SelectedColor = clRed; IList->STextModuleInDefineType.SetText(" ",24); }else{ IList->Edit[0].SelectedColor = clBlue; if(LanguageEnCn==0) IList->STextModuleInDefineType.SetText(StrTypeShortName[iVal],24); else IList->STextModuleInDefineType.SetText(StrTypeShortNameEn[iVal],24); } IList->Edit[0].Show(); IList->Edit[0].ShowCursor(); IList->STextModuleInDefineType.Show(); }else if(Tag.Inx == 8){ //Define Type if(aKey == VK_RIGHT){ ClearSelected(); Tag.Inx = 9; Check4Selected(); } }else if(Tag.Inx == 9){ //Define Type if(aKey == VK_LEFT){ ClearSelected(); Tag.Inx = 8; Check4Selected(); } } break; case VK_UP: if(Tag.Inx > Tag.InxMin){ ClearSelected(); Tag.Inx--; Check4Selected(); }else{ ClearSelected(); Tag.Inx =9; Check4Selected(); } break; case VK_DOWN: if(Tag.Inx < 9){ ClearSelected(); Tag.Inx++; Check4Selected(); }else{ ClearSelected(); Tag.Inx = Tag.InxMin; Check4Selected(); } break; case VK_TAB: break; case dfKEY_ENCN: break; case dfKEY_SETUP: if(Tag.Inx == 1){ Rt.IsPadDeActive = Rt.IsPadDeActive ? 0 : 1; DrawIsPadDeActive(); }else if(Tag.Inx == 3){ PermissionCmd = CmdEditDescp; if(SystemPermission >2){ PermissionCmdGO(); }else{ IsPermission = 1; PmsIntervene4Gui.Show4Gui(Lv.Panel.Left + 16, Lv.Panel.Top + 16, Lv.Panel.Width -34, 140, 3); } }else if(Tag.Inx == 7){ Rt.IsCheckFault = Rt.IsCheckFault ? 0 : 1; DrawISCheckFault(); }else if( (Tag.Inx == 8) || (Tag.Inx == 9) ){ Rt.IsNodeUsing = Rt.IsNodeUsing ? 0 : 1; DrawIsNodeUsing(); } break; case VK_F2: break; case VK_EXECUTE: if( (Path0) && (Path1) && (Path0 <= dDIRECTCTL_MAX_COUNT) && (Path1 <=dDIRECTCTL_KEY_MAX_COUNT) ) { if(Tag.Inx == 1){ //Save CFG - PadActive, ResultPst = 0; PermissionCmd = CmdWriteCfg; if(SystemPermission >2){ PermissionCmdGO(); }else{ IsPermission = 1; PmsIntervene4Gui.Show4Gui(Lv.Panel.Left + 16, Lv.Panel.Top + 16, Lv.Panel.Width -34, 140, 3); } }else if(Tag.Inx == 3){ PermissionCmd = CmdWriteDescp; if(SystemPermission >2){ PermissionCmdGO(); }else{ IsPermission = 1; PmsIntervene4Gui.Show4Gui(Lv.Panel.Left + 16, Lv.Panel.Top + 16, Lv.Panel.Width -34, 140, 3); } }else if(Tag.Inx == 4){ //Save UserCode PermissionCmd = CmdWriteUserCode; if(SystemPermission >2){ PermissionCmdGO(); }else{ IsPermission = 1; PmsIntervene4Gui.Show4Gui(Lv.Panel.Left + 16, Lv.Panel.Top + 16, Lv.Panel.Width -34, 140, 3); } }else if(Tag.Inx == 5){ //Save Area Code PermissionCmd = CmdWriteAreaCode; if(SystemPermission >2){ PermissionCmdGO(); }else{ IsPermission = 1; PmsIntervene4Gui.Show4Gui(Lv.Panel.Left + 16, Lv.Panel.Top + 16, Lv.Panel.Width -34, 140, 3); } }else if(Tag.Inx == 6){ //Save Assign Type PermissionCmd = CmdWriteAssignType; if(SystemPermission >2){ PermissionCmdGO(); }else{ IsPermission = 1; PmsIntervene4Gui.Show4Gui(Lv.Panel.Left + 16, Lv.Panel.Top + 16, Lv.Panel.Width -34, 140, 3); } }else if(Tag.Inx == 7){ //Save CFG - ResultPst = 3; PermissionCmd = CmdWriteCfg; if(SystemPermission >2){ PermissionCmdGO(); }else{ IsPermission = 1; PmsIntervene4Gui.Show4Gui(Lv.Panel.Left + 16, Lv.Panel.Top + 16, Lv.Panel.Width -34, 140, 3); } }else if( (Tag.Inx == 8) || (Tag.Inx == 9) ){ //Save CFG - ResultPst = 4; PermissionCmd = CmdWriteCfg; if(SystemPermission >2){ PermissionCmdGO(); }else{ IsPermission = 1; PmsIntervene4Gui.Show4Gui(Lv.Panel.Left + 16, Lv.Panel.Top + 16, Lv.Panel.Width -34, 140, 3); } } } break; } if(aKey == VK_RETURN){ IsShow = 0; aMsg = guiMsgReturn; } } if(JustShowResult ==0)TextRender_string24(Lv.PanelSmall.Left+ 10, Lv.PanelSmall.Top +2, clNearWhite, ItemColor, " "); return aMsg; } void TDirectPadCfg::PermissionCmdGO() { int aVal, IsSaveFail; TUserCode tUserCode; IsSaveFail = 0; switch(PermissionCmd){ case CmdEditDescp: IList->EditDescpShow.Selected = 0; IList->EditDescpShow.Show(); InitPanel(); EdittingDescp = 1; IsExtInput = 1; break; case CmdWriteUserCode: case CmdWriteAreaCode: case CmdWriteAssignType: case CmdWriteCfg: case CmdWriteDescp: if( Path0 && Path1 && (Path0 <= dDIRECTCTL_MAX_COUNT) && (Path1<=dDIRECTCTL_KEY_MAX_COUNT) ){ aVal = IList->EditUserCode.Str.ToInteger(); if( (aVal < 100000000) && (aVal>-1) ){ tUserCode.Full = aVal; WriteUserCode2Flash(Path0, Path1, tUserCode); Record.ReadDirectPadUserSet(Path0); if(aVal != DirectCtlBoard[Path0-1].UcList[Path1-1].Full){ IsSaveFail = 1; } }else{ IsSaveFail =1; } }else{ IsSaveFail =1; } if( Path0 && Path1 && (Path0 <= dDIRECTCTL_MAX_COUNT) && (Path1<=dDIRECTCTL_KEY_MAX_COUNT) ){ aVal = IList->Edit[0].Str.ToInteger(); if( (aVal < 256) && (aVal>-1) ){ const unsigned char aAssignType = static_cast(aVal); WriteAssignType2Flash(Path0, Path1, aAssignType); Record.ReadDirectPadUserSet(Path0); if(aVal != DirectCtlBoard[Path0-1].AssignType[Path1-1]){ IsSaveFail = 2; } }else{ IsSaveFail =2; } }else{ IsSaveFail =2; } if(IsSaveFail ==1){ if(LanguageEnCn==0){ TextRender_string24(Lv.PanelSmall.Left+ 10, Lv.PanelSmall.Top +2, clNearWhite, ItemColor, "用户码保存失败"); }else{ TextRender_string24(Lv.PanelSmall.Left+ 10, Lv.PanelSmall.Top +2, clNearWhite, ItemColor, "Failed To Save AuxID "); } ShowResultTick =5; JustShowResult = 1; return; } if(IsSaveFail ==2){ if(LanguageEnCn==0){ TextRender_string24(Lv.PanelSmall.Left+ 10, Lv.PanelSmall.Top +2, clNearWhite, ItemColor, "类型保存失败 "); }else{ TextRender_string24(Lv.PanelSmall.Left+ 10, Lv.PanelSmall.Top +2, clNearWhite, ItemColor, "Failed To Save Type "); } ShowResultTick =5; JustShowResult = 1; return; } IList->EditUserCode.Str.FromUInt8Dg(DirectCtlBoard[Path0-1].UcList[Path1-1].Full); IList->EditUserCode.Show(); IList->Edit[0].Str.FromUInt3Dg(DirectCtlBoard[Path0-1].AssignType[Path1-1]); IList->Edit[0].Show(); //___________________________________________________________________________________________________________ if( Path0 && Path1 && (Path0 <= dDIRECTCTL_MAX_COUNT) && (Path1<=dDIRECTCTL_KEY_MAX_COUNT) ){ aVal = IList->EditAreaAssign.Str.ToInteger(); aVal &= 0x0000FFFF; if(aVal < dAreaCountMax){ AreaNum = aVal; WriteAreaNum2Flash(Path0, Path1, AreaNum); Record.ReadDirectPadAreaNum(); if(aVal != DirectCtlBoard[Path0-1].Area[Path1-1]){ IsSaveFail = 1; } IList->EditAreaAssign.Str.FromUInt4Dg(DirectCtlBoard[Path0-1].Area[Path1-1]); IList->EditAreaAssign.Show(); }else{ IsSaveFail =1; } }else{ IsSaveFail =1; } if(IsSaveFail){ if(LanguageEnCn==0){ TextRender_string24(Lv.PanelSmall.Left+ 10, Lv.PanelSmall.Top +2, clNearWhite, ItemColor, "区域号指派失败"); }else{ TextRender_string24(Lv.PanelSmall.Left+ 10, Lv.PanelSmall.Top +2, clNearWhite, ItemColor, "Failed To Save Zone "); } ShowResultTick =5; JustShowResult = 1; return; } Write2Flash(Path0, Path1); ReadDirectPadCfg(Path0); if( (Rt.IsPadDeActive == DirectCtlBoard[Path0-1].PadIsProhibit) && (Rt.IsNodeUsing == DirectCtlBoard[Path0-1].IsRegisted[Path1-1]) && (Rt.IsCheckFault == DirectCtlBoard[Path0-1].IsCheckError[Path1-1]) ){ }else{ if(LanguageEnCn==0){ TextRender_string24(Lv.PanelSmall.Left+ 10, Lv.PanelSmall.Top +2, clNearWhite, ItemColor, "配置保存失败 "); }else{ TextRender_string24(Lv.PanelSmall.Left+ 10, Lv.PanelSmall.Top +2, clNearWhite, ItemColor, "Failed To Save Configure "); } ShowResultTick =5; JustShowResult = 1; IsSaveFail =1; } LoadCfg4Edit(Path0, Path1); DrawPadBoardCfgList(); if(IsSaveFail)return; TMyString::sFromStr(IList->EditDescpShow.Str.Text, TextHasSave); sRestoreDescp(Path0, Path1, IList->EditDescpShow.Str.Text); WriteDescp2Flash(); ReLoadAndDrawDescp(); if(TMyString::sCompStr32Char(IList->EditDescpShow.Str.Text, TextHasSave) != 0){ if(LanguageEnCn==0){ TextRender_string24(Lv.PanelSmall.Left+ 10, Lv.PanelSmall.Top +2, clNearWhite, ItemColor, "描述保存失败 "); }else{ TextRender_string24(Lv.PanelSmall.Left+ 10, Lv.PanelSmall.Top +2, clNearWhite, ItemColor, "Failed To Save Note "); } ShowResultTick =5; IsSaveFail =1; } if(IsSaveFail)return; ShowResultTick =5; JustShowResult = 1; if(LanguageEnCn==0){ TextRender_string24(Lv.PanelSmall.Left+ 10, Lv.PanelSmall.Top +2, clNearWhite, ItemColor, "保存成功 "); }else{ TextRender_string24(Lv.PanelSmall.Left+ 10, Lv.PanelSmall.Top +2, clNearWhite, ItemColor, "Saved Completed "); } break; } } void TDirectPadCfg::WriteDescp2Flash() { TDescpWrite::sWrite2Flash(dADDR_DIRECTPAD_START); } void TDirectPadCfg::sWriteUserCodeAssignType(unsigned char aPath0) { unsigned int fAddr; unsigned int i; volatile unsigned int x, GetSta; unsigned char aP0, aP1; TDMix tCrc1,tCrc2; if(sIList==nullptr)return; do{ sDelayMs(3); GetSta = nor_get_busy_state(dFlashAddrDevUserCodeChip); }while(GetSta); //Erase 1 * 4K Blocks if( (aPath0 >0) && (aPath0 <= dDIRECTCTL_MAX_COUNT) ){ aP0 = aPath0 -1; sIList->ReadWriteData.Reset(); fAddr = dFlashAddrDirectPadUserCode + (aP0 * 4096); nor_erase_sector_4k(dFlashAddrDevUserCodeChip,fAddr); sDelayMs(100); do{ sDelayMs(10); GetSta = nor_get_busy_state(dFlashAddrDevUserCodeChip); }while(GetSta); Crc32Reset(); for(x=0;xReadWriteData.D32[x] = DirectCtlBoard[aP0].UcList[x].Full; Crc32Feed(sIList->ReadWriteData.D32[x]); } tCrc1.D32 = Crc32GetResult(); Crc32Reset(); for(x=0;xReadWriteData.D8[x + 32] = DirectCtlBoard[aP0].AssignType[x]; Crc32Feed(static_cast(sIList->ReadWriteData.D8[x + 32])); } tCrc2.D32 = Crc32GetResult(); sIList->ReadWriteData.D8[32+8 +0] =tCrc1.D8[0]; sIList->ReadWriteData.D8[32+8 +1] =tCrc1.D8[1]; sIList->ReadWriteData.D8[32+8 +2] =tCrc1.D8[2]; sIList->ReadWriteData.D8[32+8 +3] =tCrc1.D8[3]; sIList->ReadWriteData.D8[32+8 +4] =tCrc2.D8[0]; sIList->ReadWriteData.D8[32+8 +5] =tCrc2.D8[1]; sIList->ReadWriteData.D8[32+8 +6] =tCrc2.D8[2]; sIList->ReadWriteData.D8[32+8 +7] =tCrc2.D8[3]; nor_write_page(dFlashAddrDevUserCodeChip, fAddr, sIList->ReadWriteData.D8); do{ sDelayMs(5); GetSta = nor_get_busy_state(dFlashAddrDevUserCodeChip); }while(GetSta); do{ sDelayMs(5); GetSta = nor_get_busy_state(dFlashAddrDevUserCodeChip); }while(GetSta); } } void TDirectPadCfg::WriteUserCode2Flash(unsigned char aPath0, unsigned char aPath1, TUserCode aUc) { unsigned char aP0, aP1; //Erase 1 * 4K Blocks if( (aPath0 >0) && (aPath0 <= dDIRECTCTL_MAX_COUNT) ){ if( (aPath1 >0) && (aPath1 <= dDIRECTCTL_KEY_MAX_COUNT) ){ aP0 = aPath0 -1; aP1 = aPath1 -1; DirectCtlBoard[aP0].UcList[aP1].Full = aUc.Full; sIList = IList; sWriteUserCodeAssignType(aPath0); } } } void TDirectPadCfg::WriteAssignType2Flash(unsigned char aPath0, unsigned char aPath1, unsigned char aAssignType) { unsigned char aP0, aP1; //Erase 1 * 4K Blocks if( (aPath0 >0) && (aPath0 <= dDIRECTCTL_MAX_COUNT) ){ if( (aPath1 >0) && (aPath1 <= dDIRECTCTL_KEY_MAX_COUNT) ){ aP0 = aPath0 -1; aP1 = aPath1 -1; DirectCtlBoard[aP0].AssignType[aP1] = aAssignType; sIList = IList; sWriteUserCodeAssignType(aPath0); } } } void TDirectPadCfg::sWrite2Flash(unsigned char aPath0) { unsigned int fAddr; volatile unsigned int x, GetSta; unsigned char aP0, aP1; TDMix tCrc; if(sIList==nullptr)return; sIList->ReadWriteData.Reset(); if(aPath0 == 0)return; if(aPath0 > dDIRECTCTL_MAX_COUNT)return; do{ sDelayMs(3); GetSta = nor_get_busy_state(dFlashDirectPadLnkChipX); }while(GetSta); //Erase 1 * 4K Blocks aP0 = aPath0 -1; fAddr = dFlashAddrDirectPadLnk + (aP0 * 4096); nor_erase_sector_4k(dFlashDirectPadLnkChipX,fAddr); sDelayMs(100); do{ sDelayMs(10); GetSta = nor_get_busy_state(dFlashDirectPadLnkChipX); }while(GetSta); Crc32Reset(); for(x=0;xReadWriteData.D8[x*8 +0] = DirectCtlBoard[aP0].IsRegisted[x]; sIList->ReadWriteData.D8[x*8 +1] = DirectCtlBoard[aP0].IsCheckError[x]; sIList->ReadWriteData.D8[x*8 +2] = 0; sIList->ReadWriteData.D8[x*8 +3] = 0; sIList->ReadWriteData.D8[x*8 +4] = 0; sIList->ReadWriteData.D8[x*8 +5] = 0; sIList->ReadWriteData.D8[x*8 +6] = 0; sIList->ReadWriteData.D8[x*8 +7] = DirectCtlBoard[aP0].PadIsProhibit; Crc32Feed(static_cast(DirectCtlBoard[aP0].IsRegisted[x])); Crc32Feed(static_cast(DirectCtlBoard[aP0].IsCheckError[x])); Crc32Feed(static_cast(DirectCtlBoard[aP0].PadIsProhibit)); } tCrc.D32 = Crc32GetResult(); sIList->ReadWriteData.D32[dDIRECTCTL_KEY_MAX_COUNT*2+0] = tCrc.D32; fAddr = dFlashAddrDirectPadLnk + (aP0 * 4096); nor_write_page(dFlashDirectPadLnkChipX, fAddr, sIList->ReadWriteData.D8); do{ sDelayMs(5); GetSta = nor_get_busy_state(dFlashDirectPadLnkChipX); }while(GetSta); } void TDirectPadCfg::Write2Flash(unsigned char aPath0, unsigned char aPath1) { unsigned int fAddr; volatile unsigned int x, GetSta; unsigned char aP0, aP1; TDMix tCrc; if(aPath0 == 0)return; if(aPath0 > dDIRECTCTL_MAX_COUNT)return; if(aPath1 == 0)return; if(aPath1 > dDIRECTCTL_KEY_MAX_COUNT)return; aP0 = aPath0-1; aP1 = aPath1-1; DirectCtlBoard[aP0].IsRegisted[aP1] = Rt.IsNodeUsing;; DirectCtlBoard[aP0].IsCheckError[aP1] = Rt.IsCheckFault; //DirectCtlBoard[aP0].IsPump[aP1]=0; DirectCtlBoard[aP0].IsProhibitLinkage[aP1]=0; DirectCtlBoard[aP0].IsOutputState[aP1]=0; DirectCtlBoard[aP0].PadIsProhibit = Rt.IsPadDeActive; sIList=IList; sWrite2Flash(aPath0); } void TDirectPadCfg::ReadDirectPadCfg(unsigned char aPath0) { Record.LoadDirectPadCfg(aPath0); } void TDirectPadCfg::DrawIsPadDeActive() { if(Rt.IsPadDeActive){ TRoundSquare::sDrawBySize(Lv.Grid.Left[0] + 170, Lv.Grid.Top[0] + 6, dWWidth, dWHeigh, dRoundR, dWdDisabelClr , 0); }else{ TRoundSquare::sDrawBySize(Lv.Grid.Left[0] + 170, Lv.Grid.Top[0] + 6, dWWidth, dWHeigh, dRoundR, dWdClr , 1); } } void TDirectPadCfg::DrawIsNodeUsing() { if(Rt.IsNodeUsing){ TRoundSquare::sDrawBySize(Lv.Grid.Left[4] + 12, Lv.Grid.Top[4] + 36, dWWidth, dWHeigh, dRoundR, dWdClr , 1); TRoundSquare::sDrawBySize(Lv.Grid.Left[4] + 140, Lv.Grid.Top[4] + 36, dWWidth, dWHeigh, dRoundR, dWdDisabelClr , 0); }else{ TRoundSquare::sDrawBySize(Lv.Grid.Left[4] + 12, Lv.Grid.Top[4] + 36, dWWidth, dWHeigh, dRoundR, dWdDisabelClr , 0); TRoundSquare::sDrawBySize(Lv.Grid.Left[4] + 140, Lv.Grid.Top[4] + 36, dWWidth, dWHeigh, dRoundR, dWdClr , 1); } } void TDirectPadCfg::DrawISCheckFault() { if(Rt.IsCheckFault){ TRoundSquare::sDrawBySize(Lv.Grid.Left[3] + 12, 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); } } void TDirectPadCfg::LoadCfg4Edit(unsigned char aPath0, unsigned aPath1) { unsigned char aP0, aP1; if(aPath0 == 0)return; if(aPath0 > dDIRECTCTL_MAX_COUNT)return; if(aPath1 == 0)return; if(aPath1 > dDIRECTCTL_KEY_MAX_COUNT)return; aP0 = aPath0 -1; aP1 = aPath1 -1; Rt.IsPadDeActive = DirectCtlBoard[aP0].PadIsProhibit; Rt.IsNodeUsing = DirectCtlBoard[aP0].IsRegisted[aP1]; Rt.IsCheckFault = DirectCtlBoard[aP0].IsCheckError[aP1]; DrawIsPadDeActive(); DrawIsNodeUsing(); DrawISCheckFault(); } void TDirectPadCfg::sWriteAreaNum() { unsigned int fAddr; unsigned int i; unsigned int aUcFull; volatile unsigned int x, GetSta; unsigned char aP0, aP1, wP1; TDMix tCrc; do{ sDelayMs(3); GetSta = nor_get_busy_state(dFlash4DevAreaNumChip); }while(GetSta); if(sIList==nullptr)return; sIList->ReadWriteData.Reset(); //Erase 1 * 4K Blocks fAddr = dFlash4DevAreaNum + (40 / 8 * 4096); nor_erase_sector_4k(dFlash4DevAreaNumChip,fAddr); sDelayMs(100); LoopCheck1S(); do{ sDelayMs(10); GetSta = nor_get_busy_state(dFlash4DevAreaNumChip); }while(GetSta); for(i=0; i<10; i++){ Crc32Reset(); for(x=0;xReadWriteData.D16[i*(dDIRECTCTL_KEY_MAX_COUNT+2) + x] = DirectCtlBoard[i].Area[x]; Crc32Feed(static_cast(DirectCtlBoard[i].Area[x])); } tCrc.D32 = Crc32GetResult(); sIList->ReadWriteData.D16[i*(dDIRECTCTL_KEY_MAX_COUNT+2) + dDIRECTCTL_KEY_MAX_COUNT +0] = tCrc.D16[0]; sIList->ReadWriteData.D16[i*(dDIRECTCTL_KEY_MAX_COUNT+2) + dDIRECTCTL_KEY_MAX_COUNT +1] = tCrc.D16[1]; } fAddr = dFlash4DevAreaNum + (40 * 512) + (0 * 256); nor_write_page(dFlash4DevAreaNumChip, fAddr, sIList->ReadWriteData.D8); do{ sDelayMs(5); GetSta = nor_get_busy_state(dFlash4DevAreaNumChip); }while(GetSta); for(i=10; i<20; i++){ Crc32Reset(); for(x=0;xReadWriteData.D16[(i-10)*(dDIRECTCTL_KEY_MAX_COUNT+2) + x] = DirectCtlBoard[i].Area[x]; Crc32Feed(static_cast(DirectCtlBoard[i].Area[x])); } tCrc.D32 = Crc32GetResult(); sIList->ReadWriteData.D16[(i-10)*(dDIRECTCTL_KEY_MAX_COUNT+2) + dDIRECTCTL_KEY_MAX_COUNT +0] = tCrc.D16[0]; sIList->ReadWriteData.D16[(i-10)*(dDIRECTCTL_KEY_MAX_COUNT+2) + dDIRECTCTL_KEY_MAX_COUNT +1] = tCrc.D16[1]; } fAddr = dFlash4DevAreaNum + (40 * 512) + (1 * 256); nor_write_page(dFlash4DevAreaNumChip, fAddr, sIList->ReadWriteData.D8); do{ sDelayMs(5); GetSta = nor_get_busy_state(dFlash4DevAreaNumChip); }while(GetSta); } void TDirectPadCfg::WriteAreaNum2Flash(unsigned char aPath0, unsigned char aAddr, unsigned short aNum) { unsigned char aP0, aP1; if(aPath0 <1)return; if(aPath0 >dDIRECTCTL_MAX_COUNT)return; if(aAddr <1)return; if(aAddr >dDIRECTCTL_KEY_MAX_COUNT)return; aP0 = aPath0 -1; aP1 = aAddr -1; DirectCtlBoard[aP0].Area[aP1] = aNum; sIList = IList; sWriteAreaNum(); } void TDirectPadCfg::Task1000Ms() { if(IsShow){ DrawState(); if(ShowResultTick){ ShowResultTick--; if(ShowResultTick == 0){ TextRender_string24(Lv.PanelSmall.Left+ 10, Lv.PanelSmall.Top +2, clNearWhite, ItemColor, " "); } } } } void TDirectPadCfg::sRecoverSetDefault() { unsigned int fAddr; unsigned int i; volatile unsigned int x, GetSta; SysLoopTick = 0; do{ sDelayMs(3); GetSta = nor_get_busy_state(dFlash4DevAreaNumChip); }while(GetSta); //Cfg for(i=0; i