#include "UserCodeSet.h" #include "Runtime.h" extern "C"{ #include "user_norflash.h" #include "user_eeprom.h" #include "uart_key_drv.h" #include "HW_config.h" } //#define dFlash4AreaChip (0) //#define dFlash4Area (0x00BB'0000) #define dWdClr clSkyBlue #define dWdDisabelClr clNearWhite #define dWWidth 24 #define dWHeigh 24 #define dRoundR 7 const int xInc = 84; const int xDec = 180; const int xModify = 84; const int xSave = 180; static const char CharBcdText[20]= {"0123456789*------\0"}; void TUserCodeSet::Init() { IsPermission =0; CtlIndex = 0; IsShow = 0; ListPage = 0; PortNum = 0; AddrStart =0; AddrEnd =0; dType =0; PortValid = 1; AddrStartValid =1; AddrEndValid =1; dTypeValid =1; IncDec = 0; Sta =0; } void TUserCodeSet::DelayMs(unsigned int aMs) { volatile unsigned int mTick; volatile unsigned int Tick; for(Tick=0; Tick二次码编辑"); TextRender_string24(Lv.Grid.Left[0] + 10, Lv.Grid.Top[0] +6, clNearWhite, "回路号"); TextRender_string24(Lv.Grid.Left[0] + 186, Lv.Grid.Top[0] +6, clNearWhite, "机器号"); TextRender_string24(Lv.Grid.Left[0] + 286, Lv.Grid.Top[0] +6, clNearWhite, "本机"); TextRender_string24(Lv.Grid.Left[0] + 10, Lv.Grid.Top[0] +44, clNearWhite, "地址段"); TextRender_string24(Lv.Grid.Left[0] + 136, Lv.Grid.Top[0] +44, clNearWhite, "-"); TextRender_string24(Lv.Grid.Left[0] + 240, Lv.Grid.Top[0] +44, clNearWhite, "起始地址指派类型"); TextRender_string24(Lv.Grid.Left[1] + 10, Lv.Grid.Top[1] +6, clNearWhite, "起始地址分区简称"); TextRender_string24(Lv.Grid.Left[2] + 10, Lv.Grid.Top[2] +6, clNearWhite, "通配二次码"); TextRender_string24(Lv.Grid.Left[3] + 10, Lv.Grid.Top[3] +6, clNearWhite, "置换二次码"); TextRender_string24(Lv.Grid.Left[4] + 10, Lv.Grid.Top[4] +6, clNearWhite, "模式"); TextRender_string24(Lv.Grid.Left[4] + xInc +30, Lv.Grid.Top[4] +8, clNearWhite, "递增"); TextRender_string24(Lv.Grid.Left[4] + xDec +30, Lv.Grid.Top[4] +8, clNearWhite, "递减"); TextRender_string24(Lv.Grid.Left[5] + 10, Lv.Grid.Top[5] +6, clNearWhite, "操作"); TRoundRect::sDrawBySize(xModify, Lv.Grid.Top[5] + 6, 76, 30, 7, clNearWhite, "确认", 14, clNearBlack); TRoundRect::sDrawBySize(xSave, Lv.Grid.Top[5] + 6, 76, 30, 7, clNearWhite, "保存", 14, clNearBlack); }else{ TextRender_string24(Lv.Caption.Left + 10, Lv.Caption.Top +4, clNearWhite, CaptionColor, "Linkage->Aux ID Setting"); TextRender_string24(Lv.Grid.Left[0] + 10, Lv.Grid.Top[0] +6, clNearWhite, "LoopID"); TextRender_string24(Lv.Grid.Left[0] + 186, Lv.Grid.Top[0] +6, clNearWhite, "CtlID"); TextRender_string24(Lv.Grid.Left[0] + 286, Lv.Grid.Top[0] +6, clNearWhite, " Local"); TextRender_string24(Lv.Grid.Left[0] + 10, Lv.Grid.Top[0] +44, clNearWhite, "Range"); TextRender_string24(Lv.Grid.Left[0] + 136, Lv.Grid.Top[0] +44, clNearWhite, "-"); TextRender_string24(Lv.Grid.Left[0] + 240, Lv.Grid.Top[0] +44, clNearWhite, " Device Type"); TextRender_string24(Lv.Grid.Left[1] + 10, Lv.Grid.Top[1] +6, clNearWhite, "Zone Brief"); TextRender_string24(Lv.Grid.Left[2] + 10, Lv.Grid.Top[2] +6, clNearWhite, "ID With * "); TextRender_string24(Lv.Grid.Left[3] + 10, Lv.Grid.Top[3] +6, clNearWhite, "ReplaceNum"); TextRender_string24(Lv.Grid.Left[4] + 10, Lv.Grid.Top[4] +6, clNearWhite, "Mode"); TextRender_string24(Lv.Grid.Left[4] + xInc +30, Lv.Grid.Top[4] +8, clNearWhite, "Inc "); TextRender_string24(Lv.Grid.Left[4] + xDec +30, Lv.Grid.Top[4] +8, clNearWhite, "Dec "); TextRender_string24(Lv.Grid.Left[5] + 10, Lv.Grid.Top[5] +6, clNearWhite, "Opera"); TRoundRect::sDrawBySize(xModify, Lv.Grid.Top[5] + 6, 76, 30, 7, clNearWhite, "View", 14, clNearBlack); TRoundRect::sDrawBySize(xSave, Lv.Grid.Top[5] + 6, 76, 30, 7, clNearWhite, "Save", 14, clNearBlack); } } void TUserCodeSet::DrawSelf(void) { RenderBackGround(); RectFillRender(Lv.Caption.Left, Lv.Caption.Top, Lv.Caption.Right, Lv.Caption.Bottom, CaptionColor); for(int i=0; iSTextDType.Init(Lv.Grid.Left[0] + 492, Lv.Grid.Top[0] +44, 300, 32, 0,0, clNearWhite, ItemColor); IList->STextDType.TextClear(); IList->STextDType.Visible = 1; //Port Num IList->EditPortNum.Init(Lv.Grid.Left[0] + 86, Lv.Grid.Top[0] +4, 48, 30, 0,0,1,clNearWhite); IList->EditPortNum.Str.Clear(); IList->EditPortNum.SetMaxLen(2); IList->EditPortNum.Enable =1; //Start Addr IList->EditAddrNum.Init(Lv.Grid.Left[0] + 86, Lv.Grid.Top[0] +40, 48, 30, 0,0,1,clNearWhite); IList->EditAddrNum.Str.Clear(); IList->EditAddrNum.SetMaxLen(3); IList->EditAddrNum.Enable =1; //End Addr IList->Edit[0].Init(Lv.Grid.Left[0] + 152, Lv.Grid.Top[0] +40, 48, 30, 0,0,1,clNearWhite); IList->Edit[0].Str.Clear(); IList->Edit[0].SetMaxLen(3); IList->Edit[0].Enable =1; //Assign Type IList->EditCtlNum.Init(Lv.Grid.Left[0] + 440, Lv.Grid.Top[0] +40, 48, 30, 0,0,1,clNearWhite); IList->EditCtlNum.Str.Clear(); IList->EditCtlNum.SetMaxLen(3); IList->EditCtlNum.Enable =0; //Short Name IList->Edit[1].Init(Lv.Grid.Left[1] + 10, Lv.Grid.Top[1] +36, 270, 30, 0,0,1,clNearWhite); IList->Edit[1].Str.Clear(); IList->Edit[1].Enable =0; //Descp //mlEdit.Init(Lv.Grid.Left[2] +10, Lv.Grid.Top[2] +32, 270, 64, 0,0,1,clNearWhite); //mlEdit.SetLineSpacing(4); //mlEdit.Str.Clear(); //mlEdit.Enable =0; //Prv UserCode IList->Edit[2].Init(Lv.Grid.Left[2] + 132, Lv.Grid.Top[2] +4, 110, 30, 0,0,1,clNearWhite); IList->Edit[2].SetMaxLen(8); IList->Edit[2].Str.Clear(); IList->Edit[2].Enable =1; //New UserCode IList->Edit[3].Init(Lv.Grid.Left[3] + 132, Lv.Grid.Top[3] +4, 110, 30, 0,0,1,clNearWhite); IList->Edit[3].SetMaxLen(8); IList->Edit[3].Str.Clear(); IList->Edit[3].Enable =1; IList->EditPortNum.Str.FromUInt2Dg(PortNum+1); IList->EditAddrNum.Str.FromUInt3Dg(AddrStart+1); IList->Edit[0].Str.FromUInt3Dg(AddrEnd+1); IList->EditCtlNum.Str.FromUInt3Dg(dType); IList->EditPortNum.SetPstTail(); IList->EditAddrNum.SetPstTail(); IList->Edit[0].SetPstTail(); IList->EditCtlNum.SetPstTail(); IList->EditPortNum.Show(); IList->EditAddrNum.Show(); IList->Edit[0].Show(); IList->EditCtlNum.Show(); IList->STextDType.Show(); IList->Edit[1].Show(); IList->Edit[2].Show(); IList->Edit[3].Show(); //IList->EditAreaAssign.Show(); //mlEdit.Show(); DrawFixText(); DrawIncDec(); Check4Selected(); } void TUserCodeSet::Show(void) { IsShow = 1; RenderBackGround(); DrawSelf(); DrawList(); } void TUserCodeSet::DrawIncDec() { if(IncDec==0){ TRoundSquare::sDrawBySize(xInc, Lv.Grid.Top[4] + 8, dWWidth, dWHeigh, dRoundR, dWdClr , 1); TRoundSquare::sDrawBySize(xDec, Lv.Grid.Top[4] + 8, dWWidth, dWHeigh, dRoundR, dWdDisabelClr , 0); }else{ TRoundSquare::sDrawBySize(xInc, Lv.Grid.Top[4] + 8, dWWidth, dWHeigh, dRoundR, dWdDisabelClr , 0); TRoundSquare::sDrawBySize(xDec, Lv.Grid.Top[4] + 8, dWWidth, dWHeigh, dRoundR, dWdClr , 1); } } void TUserCodeSet::ShowSta() { if(LanguageEnCn==0){ if(Sta == 0){ TextRender_string24(ResultTipPoint.x, ResultTipPoint.y, clNearWhite, ItemColor, " "); }else if(Sta == 1){ TextRender_string24(ResultTipPoint.x, ResultTipPoint.y, clNearWhite, ItemColor, "保存成功"); }else if(Sta == -1){ TextRender_string24(ResultTipPoint.x, ResultTipPoint.y, clNearWhite, ItemColor, "保存失败"); }else if(Sta == -2){ TextRender_string24(ResultTipPoint.x, ResultTipPoint.y, clNearWhite, ItemColor, "无效操作"); } }else{ if(Sta == 0){ TextRender_string24(ResultTipPoint.x, ResultTipPoint.y, clNearWhite, ItemColor, " "); }else if(Sta == 1){ TextRender_string24(ResultTipPoint.x, ResultTipPoint.y, clNearWhite, ItemColor, "Saved OK"); }else if(Sta == -1){ TextRender_string24(ResultTipPoint.x, ResultTipPoint.y, clNearWhite, ItemColor, "Failed "); }else if(Sta == -2){ TextRender_string24(ResultTipPoint.x, ResultTipPoint.y, clNearWhite, ItemColor, "Invalid "); } } } void TUserCodeSet::ShowSta(int aSta) { Sta = aSta; ShowSta(); } void TUserCodeSet::FullRedraw(int Prm) { if(Prm == 0){ RenderBackGround(); DrawSelf(); ShowSta(); }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); TextDigitRender2_24(Lv.Grid.Left[0] + 260, Lv.Grid.Top[0] +6, clNearWhite, MainCtl.fData.Split.MyNum); DrawFixText(); IList->STextDType.Show(); IList->EditPortNum.Show(); IList->EditAddrNum.Show(); IList->Edit[0].Show(); IList->EditCtlNum.Show(); IList->Edit[1].Show(); IList->Edit[2].Show(); Check4Selected(); if(IsPermission)PmsIntervene4Gui.ReDraw4GuiRecall(); } } //______________________________________________________________________________________________________________________________ void TUserCodeSet::ClearSelected(void) { char *tText; switch(CtlIndex){ case 0: IList->EditPortNum.Selected =0; IList->EditPortNum.Show(); break; case 1: IList->EditAddrNum.Selected =0; IList->EditAddrNum.Show(); break; case 2: IList->Edit[0].Selected =0; IList->Edit[0].Show(); break; case 3: IList->Edit[2].Selected =0; IList->Edit[2].Show(); break; case 4: IList->Edit[3].Selected =0; IList->Edit[3].Show(); break; case 5: TRoundSquare::sSelected(xInc, Lv.Grid.Top[4]+8, dWWidth, dWHeigh, 4, ItemColor); break; case 6: TRoundSquare::sSelected(xDec, Lv.Grid.Top[4]+8, dWWidth, dWHeigh, 4, ItemColor); break; case 7: if(LanguageEnCn==0)tText="确定"; else tText="View"; TRoundRect::sDrawBySize(xModify, Lv.Grid.Top[5] + 6, 76, 30, 7, clNearWhite, tText, 14, clNearBlack); break; case 8: if(LanguageEnCn==0)tText="保存"; else tText="Save"; TRoundRect::sDrawBySize(xSave, Lv.Grid.Top[5] + 6, 76, 30, 7, clNearWhite, tText, 14, clNearBlack); break; default: break; } } void TUserCodeSet::Check4Selected(void) { char *tText; switch(CtlIndex){ case 0: IList->EditPortNum.Selected =1; IList->EditPortNum.SetPstTail(); IList->EditPortNum.Show(); break; case 1: IList->EditAddrNum.Selected =1; IList->EditAddrNum.SetPstTail(); IList->EditAddrNum.Show(); break; case 2: IList->Edit[0].Selected =1; IList->Edit[0].SetPstTail(); IList->Edit[0].Show(); break; case 3: IList->Edit[2].Selected =1; IList->Edit[2].SetPstTail(); IList->Edit[2].Show(); break; case 4: IList->Edit[3].Selected =1; IList->Edit[3].SetPstTail(); IList->Edit[3].Show(); break; case 5: TRoundSquare::sSelected(xInc, Lv.Grid.Top[4]+8, dWWidth, dWHeigh, 4, clNearWhite); //sDrawBySize(int x, int y, int aW, int aH, int RoundR, u32 aClr, int Active); break; case 6: TRoundSquare::sSelected(xDec, Lv.Grid.Top[4]+8, dWWidth, dWHeigh, 4, clNearWhite); break; case 7: if(LanguageEnCn==0)tText="确定"; else tText="View"; TRoundRect::sDrawBySize(xModify, Lv.Grid.Top[5] + 6, 76, 30, 7, clBlue, tText, 14, clNearWhite); break; case 8: if(LanguageEnCn==0)tText="保存"; else tText="Save"; TRoundRect::sDrawBySize(xSave, Lv.Grid.Top[5] + 6, 76, 30, 7, clBlue, tText, 14, clNearWhite); break; default: break; } } void TUserCodeSet::PermissionCmdGO() { if((PermissionCmd == 1) || (PermissionCmd == 2)){ if(0 == DrawDetail()){ Write2Flash(); }else{ ShowSta(-2); } } } void TUserCodeSet::PermissionCmdReturnDraw() { if(Lv.Panel.Active)RectFillRender(Lv.Panel.Left, Lv.Panel.Top, Lv.Panel.Right, Lv.Panel.Bottom, PanelColor); } void TUserCodeSet::InitPanel() { int x,y,x2,y2, aW,aH,i; x = 10; y = 240; x2 = 789; y2 = 430; 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(); } //_____________________________________________________________________________________________________________________________ TGuiMsgReturn TUserCodeSet::KeyIn(unsigned char aKey) { TGuiMsgReturn aMsg = guiMsgNone; TGuiMsgReturn PmsRtnMsg = guiMsgNone; int iVal; int HadPrc; 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; }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: HadPrc =0; if( (aKey == VK_LEFT) || (aKey == VK_RIGHT) ){ if(CtlIndex == 1){ if(aKey == VK_RIGHT){ if(IList->EditAddrNum.Pst >= IList->EditAddrNum.Str.GetEndPst()){ if( (PortValid + dTypeValid + AddrStartValid + AddrEndValid) == 4){ ClearSelected(); CtlIndex++; Check4Selected(); HadPrc =1; } } } }else if(CtlIndex == 2){ if(aKey == VK_LEFT){ if(IList->Edit[0].Pst <0){ if( (PortValid + dTypeValid + AddrStartValid + AddrEndValid) == 4){ ClearSelected(); CtlIndex--; Check4Selected(); HadPrc =1; } } } }else if(CtlIndex == 5){ if(aKey == VK_RIGHT){ ClearSelected(); CtlIndex++; Check4Selected(); HadPrc =1; } }else if(CtlIndex == 6){ if(aKey == VK_LEFT){ ClearSelected(); CtlIndex--; Check4Selected(); HadPrc =1; } }else if(CtlIndex == 7){ if(aKey == VK_RIGHT){ ClearSelected(); CtlIndex++; Check4Selected(); HadPrc =1; } }else if(CtlIndex == 8){ if(aKey == VK_LEFT){ ClearSelected(); CtlIndex--; Check4Selected(); HadPrc =1; } } } if(HadPrc == 0){ if(CtlIndex == 0){ IList->EditPortNum.KeyIn(aKey); int iVal; iVal = IList->EditPortNum.Str.ToInteger(); if( (iVal <1) || (iVal > dPORT_MAX_COUNT) ){ PortValid =0; IList->EditPortNum.SelectedColor = clRed; }else{ PortValid =1; IList->EditPortNum.SelectedColor = clBlue; iVal--; if(iVal != PortNum){ PortNum = iVal; LoadData(); } } IList->EditPortNum.Show(); }else if(CtlIndex == 1){ IList->EditAddrNum.KeyIn(aKey); int iVal; iVal = IList->EditAddrNum.Str.ToInteger(); if( (iVal <1) || (iVal > dEP_MAX_COUNT_PER_PORT) ){ AddrStartValid =0; IList->EditAddrNum.SelectedColor = clRed; }else{ AddrStartValid =1; IList->EditAddrNum.SelectedColor = clBlue; iVal--; if(iVal != AddrStart){ AddrStart = iVal; LoadData(); } } IList->EditAddrNum.Show(); }else if(CtlIndex == 2){ IList->Edit[0].KeyIn(aKey); int iVal; iVal = IList->Edit[0].Str.ToInteger(); if( (iVal <1) || (iVal > dEP_MAX_COUNT_PER_PORT) ){ AddrEndValid =0; IList->Edit[0].SelectedColor = clRed; }else{ AddrEndValid =1; IList->Edit[0].SelectedColor = clBlue; iVal--; if(iVal != AddrEnd){ AddrEnd = iVal; } } IList->Edit[0].Show(); }else if(CtlIndex == 3){ IList->Edit[2].KeyIn(aKey); IList->Edit[2].Show(); }else if(CtlIndex == 4){ IList->Edit[3].KeyIn(aKey); IList->Edit[3].Show(); } } break; case dfKEY_ASTERISK: if(CtlIndex == 3){ IList->Edit[2].KeyIn(aKey); IList->Edit[2].Show(); } break; case VK_UP: if(CtlIndex >0){ if( (PortValid + dTypeValid + AddrStartValid + AddrEndValid) == 4){ ClearSelected(); CtlIndex--; Check4Selected(); } }else{ if( (PortValid + dTypeValid + AddrStartValid + AddrEndValid) == 4){ ClearSelected(); CtlIndex =8; Check4Selected(); } } break; case VK_DOWN: if(CtlIndex <8){ if( (PortValid + dTypeValid + AddrStartValid + AddrEndValid) == 4){ ClearSelected(); CtlIndex++; Check4Selected(); } }else{ ClearSelected(); CtlIndex=0; Check4Selected(); } break; case VK_TAB: //IsList = 1; //DrawList(); //ClearSelected(); break; case dfKEY_SETUP: //0x70 // Key value for SETUP if( (CtlIndex == 5) || (CtlIndex == 6) ){ IncDec = IncDec ? 0 :1; DrawIncDec(); } break; case VK_EXECUTE: if( (CtlIndex == 5) || (CtlIndex == 6) ){ IncDec = IncDec ? 0 :1; DrawIncDec(); }else if(CtlIndex == 7){ DrawDetail(); }else if(CtlIndex == 8){ //Save Data Here PermissionCmd = 1; if(SystemPermission > 2){ PermissionCmdGO(); }else{ IsPermission = 1; ClearSelected(); PmsIntervene4Gui.Show4Gui(Lv.Panel.Left + 16, Lv.Panel.Top + 16, Lv.Panel.Width -36 , 140, 3); } } break; case VK_RETURN: aMsg = guiMsgReturn; break; default : break; } if(VK_EXECUTE != aKey){ ShowSta(0); } } return aMsg; } void TUserCodeSet::LoadAssignType() { int i; unsigned int Idf, aOrd, sAddr; unsigned char AssignType; if( (PortNum < dPORT_MAX_COUNT ) && (AddrStart < dEP_MAX_COUNT_PER_PORT) ){ AssignType = Port[PortNum].AssignType[AddrStart]; IList->EditCtlNum.Str.FromUInt3Dg(AssignType); if(LanguageEnCn==0)IList->STextDType.SetText(StrTypeShortName[AssignType] ,24); else IList->STextDType.SetText(StrTypeShortNameEn[AssignType] ,24); }else{ IList->EditCtlNum.Str.FromStr("---"); IList->STextDType.SetText("----" ,24); } IList->EditCtlNum.Show(); IList->STextDType.Show(); } void TUserCodeSet::LoadUcBcdText() { int i; unsigned int Idf, aOrd, sAddr; if( (PortNum < dPORT_MAX_COUNT ) && (AddrStart < dEP_MAX_COUNT_PER_PORT) ){ IList->Edit[2].Str.FromUInt8Dg(Port[PortNum].UcList[AddrStart].Full); }else{ IList->Edit[2].Str.FromStr("00000000"); } IList->Edit[2].Show(); } void TUserCodeSet::LoadShortName() { unsigned int Idf, sAddr; if( (PortNum < dPORT_MAX_COUNT ) && (AddrStart < dEP_MAX_COUNT_PER_PORT) ){ AreaNum = Port[PortNum].Area[AddrStart]; if(AreaNum){ AreaNum--; }else{ AreaNum = dAreaCountMax +10; } }else{ AreaNum = dAreaCountMax +10;; } if(AreaNum >= dAreaCountMax ){ IList->Edit[1].Str.FromStr("------"); IList->Edit[1].Show(); return; } sAddr = dAddrSdRam_4Area + (AreaNum * 64); Idf = *(volatile unsigned int *)(sAddr); if(Idf == 0xA8A7A6A5){ sAddr = dAddrSdRam_4Area + (AreaNum * 64) + 16; for(int i=0; i<16; i++){ IList->Edit[1].Str.Text[i] = *(volatile unsigned char *)(sAddr +i); } IList->Edit[1].Str.Text[16] = '\0'; }else{ IList->Edit[1].Str.Text[0] = '\0'; IList->Edit[1].Str.Text[1] = '\0'; } IList->Edit[1].Show(); } void TUserCodeSet::LoadData() { LoadAssignType(); LoadUcBcdText(); LoadShortName(); } int TUserCodeSet::DrawDetail() { int x,y, Pst; char tText[16]; unsigned int tUc, HadGotAsFinished; int AstStartPoint, AstEndPoint, AstLength, InputLength, InputVal, Step; x = Lv.Panel.Left +4; y = Lv.Panel.Top +4; if(Lv.Panel.Active)RectFillRender(Lv.Panel.Left, Lv.Panel.Top, Lv.Panel.Right, Lv.Panel.Bottom, PanelColor); if(LanguageEnCn==0){ if(PortNum >= dPORT_MAX_COUNT){ TextRender_string24(x, y, clNearWhite, "回路号不正确"); return -1; }else if(AddrStart >= dEP_MAX_COUNT_PER_PORT){ TextRender_string24(x, y, clNearWhite, "起始地址不正确"); return -1; }else if(AddrEnd >= dEP_MAX_COUNT_PER_PORT){ TextRender_string24(x, y, clNearWhite, "结束地址不正确"); return -1; }else if(AddrStart > AddrEnd){ TextRender_string24(x, y, clNearWhite, "起始-结束 地址不正确"); return -1; } if(IList->Edit[2].Str.Text[8] != '\0'){ TextRender_string24(x, y, clNearWhite, "通配二次码超出长度"); return -1; } }else{ if(PortNum >= dPORT_MAX_COUNT){ TextRender_string24(x, y, clNearWhite, "Loop ID Invalid"); return -1; }else if(AddrStart >= dEP_MAX_COUNT_PER_PORT){ TextRender_string24(x, y, clNearWhite, "Begin Addr Invalid"); return -1; }else if(AddrEnd >= dEP_MAX_COUNT_PER_PORT){ TextRender_string24(x, y, clNearWhite, "End Addr Invalid"); return -1; }else if(AddrStart > AddrEnd){ TextRender_string24(x, y, clNearWhite, "Begin-End Addr Invalid"); return -1; } if(IList->Edit[2].Str.Text[8] != '\0'){ TextRender_string24(x, y, clNearWhite, "Aux ID Invalid"); return -1; } } Step =0; GotAst = 0; HadGotAsFinished =0; for(int i=0; i<16; i++)tText[i] = '\0'; for(Pst=0; Pst<8; Pst++){ if(IList->Edit[2].Str.Text[Pst] != '\0'){ if(HadGotAsFinished == 1){ if(IList->Edit[2].Str.Text[Pst] == '*'){ if(LanguageEnCn==0)TextRender_string24(x, y, clNearWhite, "通配二次码存在两段或以上的通配字段"); else TextRender_string24(x, y, clNearWhite, "Invalid,Aux ID 2 Paragraphs Wildcard"); return -1; }else{ tText[Pst] = IList->Edit[2].Str.Text[Pst]; Step++; } }else{ if(IList->Edit[2].Str.Text[Pst] == '*'){ tText[Pst] = '0'; if(GotAst == 0)AstStartPoint = Pst; GotAst =1; AstEndPoint = Pst; }else{ tText[Pst] = IList->Edit[2].Str.Text[Pst]; if(GotAst){ HadGotAsFinished = 1; Step++; } } } }else{ break; } } UserCodeItv = 1; for(int i=0; i< Step; i++){ UserCodeItv *= 10; } AstLength = AstEndPoint - AstStartPoint +1; if(IList->Edit[3].Str.Text[8] != '\0'){ if(LanguageEnCn==0)TextRender_string24(x, y, clNearWhite, "新二次码长度超出范围"); else TextRender_string24(x, y, clNearWhite, "New Aux ID Invalid"); //value out of range return -1; } InputLength =0; for(int i=0; i<8; i++){ if(IList->Edit[3].Str.Text[i] != '\0')InputLength++; else break; } InputVal = IList->Edit[3].Str.ToInteger(); if(GotAst){ if(InputLength > AstLength){ if(LanguageEnCn==0)TextRender_string24(x, y, clNearWhite, "新二次码长度超出通配字段长度"); else TextRender_string24(x, y, clNearWhite, "Replacing Num Out Of Wildcard"); return -1; } unsigned int tScope =1; for(int i=0, z=0; (i<8) && (zEdit[3].Str.ToInteger(); if(IncDec == 0){ if( (InputVal + (AddrEnd - AddrStart) ) > tScope){ if(LanguageEnCn==0)TextRender_string24(x, y, clNearWhite, "通配字段递增溢出"); else TextRender_string24(x, y, clNearWhite, "Invalid,Value Out Of Range"); return -1; } }else{ if( (InputVal - (AddrEnd - AddrStart) ) < 0){ if(LanguageEnCn)TextRender_string24(x, y, clNearWhite, "通配字段递减溢出"); else TextRender_string24(x, y, clNearWhite, "Invalid,Value Out Of Range"); return -1; } } UserCodePrv = TMyString::sToInteger(tText); if(UserCodePrv>99'999'999)UserCodePrv=99'999'999; if(UserCodePrv==0)UserCodePrv=1; UserCodeStart = UserCodePrv + (InputVal * UserCodeItv); if(UserCodeStart>99'999'999)UserCodeStart=99'999'999; else if(UserCodeStart==0)UserCodeStart=1; if(LanguageEnCn==0){ TextRender_string24(x, y, clNearWhite, "使用通配字:"); x += 132; TextDigitRender8_24(x, y, clNearWhite, UserCodePrv); x += 110; TextRender_string24(x, y, clNearWhite, "开始"); x += 48; TextDigitRender8_24(x, y, clNearWhite, UserCodeStart); x += 96; TextRender_string24(x, y, clNearWhite, "+"); x += 12; TextDigitRender8_24(x, y, clNearWhite, UserCodeItv); }else{ TextRender_string24(x, y, clNearWhite, "With Wildcard"); x += 13 *12; TextDigitRender8_24(x, y, clNearWhite, UserCodePrv); x += 110; TextRender_string24(x, y, clNearWhite, "Begin"); x += 5*12; TextDigitRender8_24(x, y, clNearWhite, UserCodeStart); x += 96; TextRender_string24(x, y, clNearWhite, "+"); x += 12; TextDigitRender8_24(x, y, clNearWhite, UserCodeItv); } }else{ UserCodeStart = IList->Edit[2].Str.ToInteger(); if(UserCodeStart>99'999'999)UserCodeStart=99'999'999; else if(UserCodeStart==0)UserCodeStart=1; if(LanguageEnCn==0){ TextRender_string24(x, y, clNearWhite, "无通配字 开始:"); x += 170; TextDigitRender8_24(x, y, clNearWhite, UserCodeStart); x += 96; TextRender_string24(x, y, clNearWhite, "+"); x += 12; TextDigitRender8_24(x, y, clNearWhite, 1); }else{ TextRender_string24(x, y, clNearWhite, "Without Wildcard"); x += 16*12; TextDigitRender8_24(x, y, clNearWhite, UserCodeStart); x += 96; TextRender_string24(x, y, clNearWhite, "+"); x += 12; TextDigitRender8_24(x, y, clNearWhite, 1); } } IList->RealtimeData.Reset(); x = Lv.Panel.Left +4; y+=28; if(LanguageEnCn==0){ TextRender_string24(x, y, clNearWhite, "写入条目数量:"); x += 156; }else{ TextRender_string24(x, y, clNearWhite, "Numbers Of Items:"); x += 17*12; } TextDigitRender5_24(x, y, clNearWhite, AddrEnd-AddrStart+1); x += 72; TextDigitRender5_24(x, y, clNearWhite, AddrStart+1); x += 72; TextRender_string24(x, y, clNearWhite, "-"); x += 12; TextDigitRender3_24(x, y, clNearWhite, AddrEnd+1); const int Count = AddrEnd - AddrStart +1; tUc = UserCodeStart; int aAddr = AddrStart; if(Count < 7){ for(int i=0; i"); x += 36; TextDigitRender8_24(x, y, clNearWhite, tUc ); if(IncDec==0){ tUc += UserCodeItv; if( (tUc>99'999'999) || (tUc==0) )tUc=1; }else{ tUc -= UserCodeItv; if( (tUc>99'999'999) || (tUc==0) )tUc=99'999'999; } aAddr ++; } }else{ for(int i=0; i(Count-4)) ){ x = Lv.Panel.Left +4; y+=28; if(LanguageEnCn==0)TextRender_string24(x, y, clNearWhite, "回路:"); else TextRender_string24(x, y, clNearWhite, "Loop:"); x += 60; TextDigitRender2_24(x, y, clNearWhite, PortNum+1); x += 36; if(LanguageEnCn==0)TextRender_string24(x, y, clNearWhite, "地址:"); else TextRender_string24(x, y, clNearWhite, "Addr:"); x += 60; TextDigitRender3_24(x, y, clNearWhite, aAddr+1); x += 60; if(LanguageEnCn==0)TextRender_string24(x, y, clNearWhite, "原:"); else TextRender_string24(x, y, clNearWhite, " "); x += 36; TextDigitRender8_24(x, y, clNearWhite, Port[PortNum].UcList[aAddr].Full ); x += 100; TextRender_string24(x, y, clNearWhite, "-->"); x += 36; TextDigitRender8_24(x, y, clNearWhite, tUc ); } if( i==3){ x = Lv.Panel.Left + 200; y+=28; TextRender_string24(x, y, clNearWhite, "............"); } if(IncDec==0){ tUc += UserCodeItv; if( (tUc>99'999'999) || (tUc==0) )tUc=1; }else{ tUc -= UserCodeItv; if( (tUc>99'999'999) || (tUc==0) )tUc=99'999'999; } aAddr ++; } } return 0; } void TUserCodeSet::Write2Flash() { unsigned int fAddr; unsigned int i,z; unsigned int aUcFull; volatile unsigned int x, GetSta; unsigned char wP1; TDMix tCrc; if( (PortValid + dTypeValid + AddrStartValid + AddrEndValid) != 4){ return; } do{ DelayMs(3); GetSta = nor_get_busy_state(dFlashAddrDevUserCodeChip); }while(GetSta); //Erase 1 * 4K Blocks if( (PortNum < dPORT_MAX_COUNT) ){ fAddr = dFlashAddrDevUserCode + (PortNum * 4096); nor_erase_sector_4k(dFlashAddrDevUserCodeChip,fAddr); DelayMs(100); do{ DelayMs(10); GetSta = nor_get_busy_state(dFlashAddrDevUserCodeChip); }while(GetSta); aUcFull = UserCodeStart; Crc32Reset(); for(i=0; i<64; i++)IList->ReadWriteData.D32[i] = 0; for(i=0; i<4; i++){ for(x=0;x<64;x++){ IList->ReadWriteData.D32[x] = Port[PortNum].UcList[i*64 + x].Full; if( ( (i*64 + x) >= AddrStart) && ((i*64 + x) <= AddrEnd) ){ IList->ReadWriteData.D32[x] = aUcFull; if(IncDec == 0){ aUcFull += UserCodeItv; if( (aUcFull >99999999) || (aUcFull==0) )aUcFull =1; }else{ aUcFull -= UserCodeItv; if( (aUcFull >99999999) || (aUcFull==0) )aUcFull =99999999; } } if( (i<3) or (x< (dEP_MAX_COUNT_PER_PORT % 64 ) ) ){ Crc32Feed(IList->ReadWriteData.D32[x]); } } if(i==3){ IList->ReadWriteData.D32[63] = Crc32GetResult(); } fAddr = dFlashAddrDevUserCode + (PortNum * 4096) + (i * 256); nor_write_page(dFlashAddrDevUserCodeChip, fAddr, IList->ReadWriteData.D8); do{ DelayMs(5); GetSta = nor_get_busy_state(dFlashAddrDevUserCodeChip); }while(GetSta); } for(x=0;xReadWriteData.D8[x] = Port[PortNum].AssignType[x]; if(dType !=0){ if( (x >= AddrStart) && (x <= AddrEnd) ){ IList->ReadWriteData.D8[x] = dType; } } } Crc32Reset(); for(x=0; x(IList->ReadWriteData.D8[x])); tCrc.D32 = Crc32GetResult(); IList->ReadWriteData.D8[252] = tCrc.D8[0]; IList->ReadWriteData.D8[253] = tCrc.D8[1]; IList->ReadWriteData.D8[254] = tCrc.D8[2]; IList->ReadWriteData.D8[255] = tCrc.D8[3]; fAddr = dFlashAddrDevUserCode + (PortNum * 4096) + (4 * 256); nor_write_page(dFlashAddrDevUserCodeChip, fAddr, IList->ReadWriteData.D8); do{ DelayMs(5); GetSta = nor_get_busy_state(dFlashAddrDevUserCodeChip); }while(GetSta); //Signal Type for(x=0;xReadWriteData.D8[x] = Port[PortNum].FuncSetByte[x]; } Crc32Reset(); for(x=0; x(IList->ReadWriteData.D8[x])); tCrc.D32 = Crc32GetResult(); IList->ReadWriteData.D8[252] = tCrc.D8[0]; IList->ReadWriteData.D8[253] = tCrc.D8[1]; IList->ReadWriteData.D8[254] = tCrc.D8[2]; IList->ReadWriteData.D8[255] = tCrc.D8[3]; fAddr = dFlashAddrDevUserCode + (PortNum * 4096) + (5 * 256); nor_write_page(dFlashAddrDevUserCodeChip, fAddr, IList->ReadWriteData.D8); do{ DelayMs(5); GetSta = nor_get_busy_state(dFlashAddrDevUserCodeChip); }while(GetSta); } Record.ReadDevUserSet(); int Count = AddrEnd -AddrEnd +1; int NotEqOcc =0; int aAddr = AddrStart; aUcFull = UserCodeStart; for(int Gz=0; Gz99999999) || (aUcFull==0) )aUcFull =1; }else{ aUcFull -= UserCodeItv; if( (aUcFull >99999999) || (aUcFull==0) )aUcFull =99999999; } aAddr++; } if(NotEqOcc){ //Error ShowSta(-1); }else{ //OK ShowSta(1); } } void TUserCodeSet::DrawList() { int i, z, x, y; unsigned int aClr, TopInx, sAddr, Idf; return; IsList ? aClr=clBlue : 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); const unsigned int PageCount = dAreaCountMax / 8; if(ListPage >= PageCount) ListPage = 0; x = Lv.Panel.Left+6; y = Lv.Panel.Top +6; TextRender_string24(x, y, clNearBlack, PanelColor, "区域号 配置 简称 二次码"); TopInx = ListPage * 8; for(i=0,z=TopInx; (i<8) && (z