#include "DeviceSetup.h" #include "gvalue.h" #include "Runtime.h" #include "server.h" extern "C"{ #include "user_norflash.h" #include "user_eeprom.h" #include "uart_key_drv.h" } static const char NonTypeText[12]= {"未知"}; void TDeviceSetup::Init(int x1, int y1, int aW, int aH, int OwnerX, int OwnerY, u32 aColor) { #define CH 30 //Caption Height unsigned short Left,Right, Top, Bottom, Width, Height, i; Bound.SetBySize(OwnerX + x1, OwnerY + y1, aW, aH); Left = Bound.Left +3; Top = Bound.Top+3; Width = aW - 7; Height = aH - 7; Right = Bound.Right -4; Bottom = Bound.Bottom -4; Caption.Init(Left, Top, Width, CH, 0, 0, clWhite, clMaroon); SText.Init (429, Top, 370, CH, 0, 0, clWhite, clMaroon); Content.Set(Left, Top, Right, Bottom); Color = aColor; #undef CH Caption.Border.Color = clGray; IsShowing = 0; SetupMode = 0; CtlIndex = 0; } void TDeviceSetup::DelayMs(unsigned int aMs) { volatile unsigned int mTick; volatile unsigned int Tick; for(Tick=0; TickShow(); }else if(Prm == 1){ RectFillRender(GuiRedrawDataList[1][0], GuiRedrawDataList[1][1], GuiRedrawDataList[1][2], GuiRedrawDataList[1][3], Color); aPanel->Show(); } } void TDeviceSetup::ShowCaption() { TMyString::sFromStr("系统设置->设备定义", Caption.Text); Caption.Show(); } //______________________________________________________________________________________________________________________________ void TDeviceSetup::InitPanel(void) { int i,x,y,x2,y2, aW,aH; unsigned int aClr, bClr; x = Content.Left; y = Content.Top; x2 = Content.Right; y2 = Content.Bottom; aW = Content.Width; aH = Content.Height; if(aPanel == nullptr)return; aPanel->Init(200,40,400,260,x,y,clFrmFace, bvRaised); TMyString::sFromStr("选择设置模式", aPanel->Caption.Text); aPanel->Caption.Visible = 1; aPanel->Caption.Enable = 1; x = aPanel->Content.Left; y = aPanel->Content.Top; aPanel->Btn[0].Init(96,16,220,36,x,y,clNearBlack,clFrmFace); aPanel->Btn[1].Init(96,66,220,36,x,y,clNearBlack,clFrmFace); aPanel->Btn[2].Init(96,116,220,36,x,y,clNearBlack,clFrmFace); aPanel->Btn[3].Init(96,166,220,36,x,y,clNearBlack,clFrmFace); aPanel->Btn[0].Caption.FromStr("回路设备连续定义"); aPanel->Btn[1].Caption.FromStr("回路设备一般修改"); aPanel->Btn[2].Caption.FromStr("回路设备快速定义"); aPanel->Btn[3].Caption.FromStr(" 多线盘节点定义 "); aPanel->Btn[0].Visible = 1; aPanel->Btn[1].Visible = 1; aPanel->Btn[2].Visible = 1; aPanel->Btn[3].Visible = 1; aPanel->Btn[0].Enable = 1; aPanel->Btn[1].Enable = 1; aPanel->Btn[2].Enable = 1; aPanel->Btn[3].Enable = 1; aPanel->Btn[0].SetCaptionLeftSpacing(6); aPanel->Btn[1].SetCaptionLeftSpacing(6); aPanel->Btn[2].SetCaptionLeftSpacing(6); aPanel->Btn[3].SetCaptionLeftSpacing(6); RenderBackGround(); SetupMode = 0; aPanel->Show(); Check4Selected(); aPanel->ReDrawItems(); } void TDeviceSetup::DrawTip(void) { if(SetupMode == 1) TextRender_string24(60, 60, clNearBlack, Color, "回路设备连续定义"); if(SetupMode == 2) TextRender_string24(60, 60, clNearBlack, Color, "回路设备一般修改"); if(SetupMode == 3) TextRender_string24(60, 60, clNearBlack, Color, "回路设备快速定义"); if(SetupMode == 4) TextRender_string24(60, 60, clNearBlack, Color, " 多线盘节点定义 "); if(SetupMode == 4){ TextRender_string24(16, 110, clNearBlack, Color, "1.设定为消防泵的"); TextRender_string24(16, 142, clNearBlack, Color, " 指派类型无效"); TextRender_string24(16, 210, clNearBlack, Color, "2.设置键查询键更改类型"); TextRender_string24(16, 246, clNearBlack, Color, "3.上下键切换选项"); TextRender_string24(16, 282, clNearBlack, Color, "4.左右键数字键编辑"); TextRender_string24(16, 318, clNearBlack, Color, "5.确认键保存"); }else{ TextRender_string24(16, 110, clNearBlack, Color, "1.联动类型未指派的"); TextRender_string24(16, 142, clNearBlack, Color, " 按原设备类型执行联动"); TextRender_string24(16, 174, clNearBlack, Color, " 指派后行为覆盖原类型"); TextRender_string24(16, 210, clNearBlack, Color, "2.设置键查询键更改类型"); TextRender_string24(16, 246, clNearBlack, Color, "3.上下键切换选项"); TextRender_string24(16, 282, clNearBlack, Color, "4.左右键数字键编辑"); TextRender_string24(16, 318, clNearBlack, Color, "5.确认键保存"); if(SetupMode == 1){ TextRender_string24(16, 356, clNearBlack, Color, "6.保存后地址及二次码"); TextRender_string24(16, 392, clNearBlack, Color, " 自动加一"); }else if(SetupMode == 2){ TextRender_string24(16, 356, clNearBlack, Color, "6.保存后重新加载"); } } } void TDeviceSetup::InitPanel4Setup(void) { int i,x,y,x2,y2, aW,aH; unsigned int aClr, bClr; x = Content.Left; y = Content.Top; x2 = Content.Right; y2 = Content.Bottom; aW = Content.Width; aH = Content.Height; if(aPanel == nullptr)return; aPanel->Init(300,26,480,320,x,y,clFrmFace, bvRaised); aPanel->Caption.TextClear(); aPanel->Caption.Color=clFrmFace; aPanel->Caption.Visible = 1; aPanel->Caption.Enable = 1; x = aPanel->Content.Left; y = aPanel->Bound.Top + 4; aPanel->SText[0].Init(6,6,110,30,x,y,clNearBlack,clFrmFace); aPanel->SText[1].Init(6,46,110,30,x,y,clNearBlack,clFrmFace); aPanel->SText[2].Init(6,86,110,30,x,y,clNearBlack,clFrmFace); aPanel->SText[3].Init(6,126,110,30,x,y,clNearBlack,clFrmFace); aPanel->SText[4].Init(6,166,110,30,x,y,clNearBlack,clFrmFace); aPanel->SText[5].Init(6,206,110,30,x,y,clNearBlack,clFrmFace); aPanel->SText[6].Init(26,240,400,30,x,y,clNearBlack,clFrmFace); aPanel->SText[11].Init(170,126,48,30,x,y,clNearBlack,clFrmFace); aPanel->SText[12].Init(222,126,246,30,x,y,clNearBlack,clFrmFace); aPanel->SText[13].Init(222,166,246,30,x,y,clNearBlack,clFrmFace); aPanel->SText[20].Init(270,6,200,30,x,y,clNearBlack,clFrmFace); TMyString::sFromStr("回路号:", aPanel->SText[0].Text); TMyString::sFromStr("地址号:", aPanel->SText[1].Text); TMyString::sFromStr("二次码:", aPanel->SText[2].Text); TMyString::sFromStr("原设备类型:", aPanel->SText[3].Text); TMyString::sFromStr("指派联动类型:", aPanel->SText[4].Text); TMyString::sFromStr("位置描述信息:", aPanel->SText[5].Text); TMyString::sFromStr("12345678901234567890123456789012", aPanel->SText[6].Text); TMyString::sFromStr("xxx", aPanel->SText[11].Text); TMyString::sFromStr("12345678901234567890", aPanel->SText[12].Text); TMyString::sFromStr("12345678901234567890", aPanel->SText[13].Text); TMyString::sFromStr(" ", aPanel->SText[20].Text); aPanel->Edit[0].Init(170,6,48,32,x,y,clNearBlack,clFrmFace); aPanel->Edit[1].Init(170,46,48,32,x,y,clNearBlack,clFrmFace); aPanel->Edit[2].Init(170,86,120,32,x,y,clNearBlack,clFrmFace); aPanel->Edit[3].Init(170,166,48,32,x,y,clNearBlack,clFrmFace); for(i=0; i<4; i++){ aPanel->Edit[i].Enable =1; aPanel->Edit[i].Visible =1; } aPanel->Edit[0].Str.FromStr("xx"); aPanel->Edit[1].Str.FromStr("xxx"); aPanel->Edit[2].Str.FromStr("xxxxxxxx"); aPanel->Edit[3].Str.FromStr("xxx"); aPanel->Edit[0].MaxLen = 2; aPanel->Edit[1].MaxLen = 3; aPanel->Edit[2].MaxLen = 8; aPanel->Edit[3].MaxLen = 3; aPanel->Edit[0].SetPstTail(); aPanel->Edit[1].SetPstTail(); aPanel->Edit[2].SetPstTail(); aPanel->Edit[3].SetPstTail(); RenderBackGround(); DrawTip(); CtlIndex =0; aPanel->Show(); Check4SelectedInSetup(); aPanel->ReDrawItems(); LoadStart(); } void TDeviceSetup::InitPanel4Fast(void) { int i,x,y,x2,y2, aW,aH; unsigned int aClr, bClr; x = Content.Left; y = Content.Top; x2 = Content.Right; y2 = Content.Bottom; aW = Content.Width; aH = Content.Height; if(aPanel == nullptr)return; aPanel->Init(300,46,480,280,x,y,clFrmFace, bvRaised); aPanel->Caption.TextClear(); aPanel->Caption.Color=clFrmFace; aPanel->Caption.Visible = 1; aPanel->Caption.Enable = 1; x = aPanel->Content.Left; y = aPanel->Bound.Top + 4; aPanel->SText[0].Init(6,6,110,30,x,y,clNearBlack,clFrmFace); aPanel->SText[1].Init(6,46,110,30,x,y,clNearBlack,clFrmFace); aPanel->SText[2].Init(6,86,110,30,x,y,clNearBlack,clFrmFace); aPanel->SText[3].Init(6,126,110,30,x,y,clNearBlack,clFrmFace); aPanel->SText[4].Init(6,166,110,30,x,y,clNearBlack,clFrmFace); //aPanel->SText[5].Init(6,206,110,30,x,y,clNearBlack,clFrmFace); aPanel->SText[6].Init(6,206,110,30,x,y,clNearBlack,clFrmFace); //aPanel->SText[7].Init(6,286,110,30,x,y,clNearBlack,clFrmFace); //aPanel->SText[8].Init(26,320,400,30,x,y,clNearBlack,clFrmFace); //aPanel->SText[11].Init(170,206,102,30,x,y,clNearBlack,clFrmFace); //aPanel->SText[12].Init(220,206,102,30,x,y,clNearBlack,clFrmFace); aPanel->SText[13].Init(220,206,246,30,x,y,clNearBlack,clFrmFace); aPanel->SText[20].Init(270,6,200,30,x,y,clNearBlack,clFrmFace); TMyString::sFromStr("回路号:", aPanel->SText[0].Text); TMyString::sFromStr("起始地址:", aPanel->SText[1].Text); TMyString::sFromStr("结束地址:", aPanel->SText[2].Text); TMyString::sFromStr("二次码:", aPanel->SText[3].Text); TMyString::sFromStr("步长:", aPanel->SText[4].Text); //TMyString::sFromStr("原设备类型", aPanel->SText[5].Text); TMyString::sFromStr("指派联动类型:", aPanel->SText[6].Text); //TMyString::sFromStr("位置描述信息:", aPanel->SText[7].Text); //TMyString::sFromStr("12345678901234567890123456789012", aPanel->SText[8].Text); //TMyString::sFromStr("xxx", aPanel->SText[11].Text); //TMyString::sFromStr("12345678901234567890", aPanel->SText[12].Text); TMyString::sFromStr("12345678901234567890", aPanel->SText[13].Text); TMyString::sFromStr(" ", aPanel->SText[20].Text); aPanel->Edit[0].Init(170,6,48,32,x,y,clNearBlack,clFrmFace); aPanel->Edit[1].Init(170,46,48,32,x,y,clNearBlack,clFrmFace); aPanel->Edit[2].Init(170,86,48,32,x,y,clNearBlack,clFrmFace); aPanel->Edit[3].Init(170,126,120,32,x,y,clNearBlack,clFrmFace); aPanel->Edit[4].Init(170,166,80,32,x,y,clNearBlack,clFrmFace); aPanel->Edit[5].Init(170,206,48,32,x,y,clNearBlack,clFrmFace); for(i=0; i<6; i++){ aPanel->Edit[i].Enable =1; aPanel->Edit[i].Visible =1; } aPanel->Edit[0].Str.FromStr("xx"); aPanel->Edit[1].Str.FromStr("xxx"); aPanel->Edit[2].Str.FromStr("xxx"); aPanel->Edit[3].Str.FromStr("xxxxxxxx"); aPanel->Edit[4].Str.FromStr("xxxx"); aPanel->Edit[5].Str.FromStr("---"); aPanel->Edit[6].Str.FromStr("---"); aPanel->Edit[0].MaxLen = 2; aPanel->Edit[1].MaxLen = 3; aPanel->Edit[2].MaxLen = 3; aPanel->Edit[3].MaxLen = 8; aPanel->Edit[4].MaxLen = 4; aPanel->Edit[5].MaxLen = 3; aPanel->Edit[0].SetPstTail(); aPanel->Edit[1].SetPstTail(); aPanel->Edit[2].SetPstTail(); aPanel->Edit[3].SetPstTail(); aPanel->Edit[4].SetPstTail(); aPanel->Edit[5].SetPstTail(); RenderBackGround(); DrawTip(); CtlIndex =0; aPanel->Show(); Check4SelectedInFast(); aPanel->ReDrawItems(); LoadStart(); } void TDeviceSetup::InitPanel4DirectPad(void) { int i,x,y,x2,y2, aW,aH; unsigned int aClr, bClr; x = Content.Left; y = Content.Top; x2 = Content.Right; y2 = Content.Bottom; aW = Content.Width; aH = Content.Height; if(aPanel == nullptr)return; aPanel->Init(300,26,480,320,x,y,clFrmFace, bvRaised); aPanel->Caption.TextClear(); aPanel->Caption.Color=clFrmFace; aPanel->Caption.Visible = 1; aPanel->Caption.Enable = 1; x = aPanel->Content.Left; y = aPanel->Bound.Top + 4; aPanel->SText[0].Init(6,6,110,30,x,y,clNearBlack,clFrmFace); aPanel->SText[1].Init(6,46,110,30,x,y,clNearBlack,clFrmFace); aPanel->SText[2].Init(6,86,110,30,x,y,clNearBlack,clFrmFace); aPanel->SText[3].Init(6,126,110,30,x,y,clNearBlack,clFrmFace); aPanel->SText[4].Init(6,166,110,30,x,y,clNearBlack,clFrmFace); aPanel->SText[5].Init(6,206,110,30,x,y,clNearBlack,clFrmFace); aPanel->SText[6].Init(26,240,400,30,x,y,clNearBlack,clFrmFace); aPanel->SText[7].Init(222,46,80,30,x,y,clNearBlack,clFrmFace); aPanel->SText[11].Init(170,126,48,30,x,y,clNearBlack,clFrmFace); aPanel->SText[12].Init(222,126,246,30,x,y,clNearBlack,clFrmFace); aPanel->SText[13].Init(222,166,246,30,x,y,clNearBlack,clFrmFace); aPanel->SText[20].Init(270,6,200,30,x,y,clNearBlack,clFrmFace); TMyString::sFromStr("多线盘号:", aPanel->SText[0].Text); TMyString::sFromStr("节点号:", aPanel->SText[1].Text); TMyString::sFromStr("二次码:", aPanel->SText[2].Text); TMyString::sFromStr("已设定消防泵:", aPanel->SText[3].Text); TMyString::sFromStr("指派联动类型:", aPanel->SText[4].Text); TMyString::sFromStr("位置描述信息:", aPanel->SText[5].Text); TMyString::sFromStr("12345678901234567890123456789012", aPanel->SText[6].Text); TMyString::sFromStr("未注册", aPanel->SText[7].Text); TMyString::sFromStr("xxx", aPanel->SText[11].Text); TMyString::sFromStr(" ", aPanel->SText[12].Text); TMyString::sFromStr("12345678901234567890", aPanel->SText[13].Text); TMyString::sFromStr(" ", aPanel->SText[20].Text); aPanel->Edit[0].Init(170,6,48,32,x,y,clNearBlack,clFrmFace); aPanel->Edit[1].Init(170,46,48,32,x,y,clNearBlack,clFrmFace); aPanel->Edit[2].Init(170,86,120,32,x,y,clNearBlack,clFrmFace); aPanel->Edit[3].Init(170,166,48,32,x,y,clNearBlack,clFrmFace); for(i=0; i<4; i++){ aPanel->Edit[i].Enable =1; aPanel->Edit[i].Visible =1; } aPanel->Edit[0].Str.FromStr("xx"); aPanel->Edit[1].Str.FromStr("xxx"); aPanel->Edit[2].Str.FromStr("xxxxxxxx"); aPanel->Edit[3].Str.FromStr("xxx"); aPanel->Edit[0].MaxLen = 2; aPanel->Edit[1].MaxLen = 3; aPanel->Edit[2].MaxLen = 8; aPanel->Edit[3].MaxLen = 3; aPanel->Edit[0].SetPstTail(); aPanel->Edit[1].SetPstTail(); aPanel->Edit[2].SetPstTail(); aPanel->Edit[3].SetPstTail(); RenderBackGround(); DrawTip(); CtlIndex =0; aPanel->Show(); Check4SelectedInSetup(); aPanel->ReDrawItems(); LoadStart(); } //_____________________________________________________________________________________________________________________________ void TDeviceSetup::ShowSaveOk() { TMyString::sFromStr("保存成功", aPanel->SText[20].Text); aPanel->SText[20].Show(); } void TDeviceSetup::ShowSaveNotOk() { TMyString::sFromStr("写入失败", aPanel->SText[20].Text); aPanel->SText[20].Show(); } void TDeviceSetup::ShowCheckDataFail() { TMyString::sFromStr("请检查设置值", aPanel->SText[20].Text); aPanel->SText[20].Show(); } void TDeviceSetup::ClearOutText() { TMyString::sClear(aPanel->SText[20].Text); aPanel->SText[20].Show(); } void TDeviceSetup::Check4Selected() { aPanel->Btn[0].Selected = 0; aPanel->Btn[1].Selected = 0; aPanel->Btn[2].Selected = 0; aPanel->Btn[3].Selected = 0; if(CtlIndex == 0){ aPanel->Btn[0].Selected = 1; }else if(CtlIndex == 1){ aPanel->Btn[1].Selected = 1; }else if(CtlIndex == 2){ aPanel->Btn[2].Selected = 1; }else if(CtlIndex == 3){ aPanel->Btn[3].Selected = 1; } } void TDeviceSetup::Check4SelectedInSetup() { aPanel->Edit[0].Selected = 0; aPanel->Edit[1].Selected = 0; aPanel->Edit[2].Selected = 0; aPanel->Edit[3].Selected = 0; if(CtlIndex == 0){ aPanel->Edit[0].Selected = 1; }else if(CtlIndex == 1){ aPanel->Edit[1].Selected = 1; }else if(CtlIndex == 2){ aPanel->Edit[2].Selected = 1; }else if(CtlIndex == 3){ aPanel->Edit[3].Selected = 1; } } void TDeviceSetup::Check4SelectedInFast() { aPanel->Edit[0].Selected = 0; aPanel->Edit[1].Selected = 0; aPanel->Edit[2].Selected = 0; aPanel->Edit[3].Selected = 0; aPanel->Edit[4].Selected = 0; aPanel->Edit[5].Selected = 0; if(CtlIndex == 0){ aPanel->Edit[0].Selected = 1; }else if(CtlIndex == 1){ aPanel->Edit[1].Selected = 1; }else if(CtlIndex == 2){ aPanel->Edit[2].Selected = 1; }else if(CtlIndex == 3){ aPanel->Edit[3].Selected = 1; }else if(CtlIndex == 4){ aPanel->Edit[4].Selected = 1; }else if(CtlIndex == 5){ aPanel->Edit[5].Selected = 1; } } void TDeviceSetup::GetNewPathAddr() { unsigned int iVal; iVal = aPanel->Edit[0].Str.ToInteger(); if( (iVal >0) && (iVal<=dPORT_MAX_COUNT) ){ Path0 = iVal; }else{ Path0 = 0; } iVal = aPanel->Edit[1].Str.ToInteger(); if( (iVal >0) && (iVal<=250) ){ Addr = iVal; }else{ Addr = 0; } } void TDeviceSetup::LoadData(int Inc) { unsigned int aAddr,i; unsigned char aP0, aP1; if( (SetupMode ==1) || (SetupMode == 2) ){ if( (Path0>0) && (Path00) && (Addr<=250) ){ aP0 = Path0-1; aP1 = Addr-1; if(Port[aP0].ExistTable[aP1]){ IsFound =1; }else{ IsFound =0; } }else{ IsFound =0; } if(IsFound){ if(SetupMode ==1){ if(Inc){ aPanel->Edit[2].Str.FromUInt8Dg(UserCode.Full); aPanel->Edit[3].Str.FromUInt3Dg(AssignType); }else{ AssignType = Port[aP0].AssignType[aP1]; aPanel->Edit[2].Str.FromUInt8Dg(Port[aP0].UcList[aP1].Full); aPanel->Edit[3].Str.FromUInt3Dg(AssignType); } }else if(SetupMode ==2){ aPanel->Edit[2].Str.FromUInt8Dg(Port[aP0].UcList[aP1].Full); aPanel->Edit[3].Str.FromUInt3Dg(Port[aP0].AssignType[aP1]); } TMyString::sFrom3Dg(Port[aP0].dTypeTable[aP1], aPanel->SText[11].Text); TMyString::sFromStr(StrTypeShortName[Port[aP0].dTypeTable[aP1]], aPanel->SText[12].Text); TMyString::sFromStr(StrTypeShortName[AssignType], aPanel->SText[13].Text); aAddr = dAddrSdRam_Descp + (aP0 * 256 * 32) + (aP1 * 32); for(i=0; i<8; i++){ ReadWriteData.D32[i] = *(volatile unsigned int *)(aAddr + (i *4)); } for(i=0; i<32; i++){ aPanel->SText[6].Text[i] = ReadWriteData.D8[i]; } aPanel->SText[6].Text[32] = '\0'; aPanel->Edit[2].Show(); aPanel->Edit[3].Show(); aPanel->SText[11].Show(); aPanel->SText[12].Show(); aPanel->SText[13].Show(); aPanel->SText[6].Show(); }else{ aPanel->Edit[2].Str.FromUInt8Dg(0); aPanel->Edit[3].Str.FromUInt3Dg(0); TMyString::sFromStr("xxx", aPanel->SText[11].Text); TMyString::sFromStr("无效", aPanel->SText[12].Text); TMyString::sFromStr("无效", aPanel->SText[13].Text); TMyString::sFromStr("此地址未登记", aPanel->SText[6].Text); aPanel->Edit[2].Show(); aPanel->Edit[3].Show(); aPanel->SText[11].Show(); aPanel->SText[12].Show(); aPanel->SText[13].Show(); aPanel->SText[6].Show(); } }else if(SetupMode == 3){ } } void TDeviceSetup::DrawFast() { unsigned int aAddr,i; unsigned char aP0, aP1; if(SetupMode == 3){ } } void TDeviceSetup::FindType(int Dir) { unsigned char aInx; int i; aInx = AssignType; if(Dir == -1){ for(i=0; i<257; i++){ aInx--; if( (StrTypeShortName[aInx][0] != NonTypeText[0]) && (StrTypeShortName[aInx][1] != NonTypeText[1]) ){ AssignType = aInx; break; } } }else{ for(i=0; i<257; i++){ aInx++; if( (StrTypeShortName[aInx][0] != NonTypeText[0]) && (StrTypeShortName[aInx][1] != NonTypeText[1]) ){ AssignType = aInx; break; } } } if( (SetupMode == 1) || (SetupMode == 2) || (SetupMode == 4)){ aPanel->Edit[3].Str.FromUInt3Dg(AssignType); aPanel->Edit[3].Show(); }else if(SetupMode == 3){ aPanel->Edit[5].Str.FromUInt3Dg(AssignType); aPanel->Edit[5].Show(); } TMyString::sFromStr(StrTypeShortName[AssignType], aPanel->SText[13].Text); aPanel->SText[13].Show(); } void TDeviceSetup::CheckDirectPadAva() { int iVal0, iVal1; unsigned char OldAva; OldAva = DirectPadAva; iVal0 = aPanel->Edit[0].Str.ToInteger(); iVal1 = aPanel->Edit[1].Str.ToInteger(); if( (iVal0 !=0) && (iVal0 <= dDIRECTCTL_MAX_COUNT) && (iVal1 !=0) && (iVal1 <= dDIRECTCTL_KEY_MAX_COUNT) ){ DirectPadAva = 1; DirectPadNum = iVal0 -1; NodeNum = iVal1 -1; }else{ DirectPadAva = 0; } if( DirectPadAva == 0 ){ aPanel->SText[7].Enable =0; aPanel->SText[7].TextClear(); aPanel->SText[7].Show(); aPanel->Edit[2].Enable = 0; aPanel->Edit[3].Enable = 0; aPanel->Edit[2].Str.Clear(); aPanel->Edit[3].Str.Clear(); aPanel->Edit[2].Show(); aPanel->Edit[3].Show(); }else{ if(OldAva != DirectPadAva){ aPanel->SText[7].Enable =1; aPanel->Edit[2].Enable = 1; aPanel->Edit[3].Enable = 1; } aPanel->Edit[2].Show(); aPanel->Edit[3].Show(); } } void TDeviceSetup::DirectPadDataShow() { unsigned int aAddr,i; unsigned char aP0, aP1; if(DirectPadAva == 0 ) return; UserCode.Full = DirectCtlBoard[DirectPadNum].UcList[NodeNum].Full; AssignType = DirectCtlBoard[DirectPadNum].AssignType[NodeNum]; if(DirectCtlBoard[DirectPadNum].IsRegisted[NodeNum]){ TMyString::sFromStr("已注册", aPanel->SText[7].Text); }else{ TMyString::sFromStr("未注册", aPanel->SText[7].Text); } if(DirectCtlBoard[DirectPadNum].IsPump[NodeNum]){ TMyString::sFromStr("是", aPanel->SText[11].Text); }else{ TMyString::sFromStr("否", aPanel->SText[11].Text); } aPanel->Edit[0].Str.FromUInt2Dg(DirectPadNum +1); aPanel->Edit[1].Str.FromUInt3Dg(NodeNum +1); aPanel->Edit[2].Str.FromUInt8Dg(UserCode.Full); aPanel->Edit[3].Str.FromUInt3Dg(AssignType); aPanel->Edit[0].Show(); aPanel->Edit[1].Show(); aPanel->Edit[2].Show(); aPanel->Edit[3].Show(); TMyString::sFromStr(StrTypeShortName[AssignType], aPanel->SText[13].Text); aPanel->SText[11].Show(); aPanel->SText[13].Show(); aP1 = DirectPadNum * dDIRECTCTL_KEY_MAX_COUNT + (NodeNum +1); aAddr = dAddrSdRam_Descp + (40 * 256 * 32) + (aP1 * 32); for(i=0; i<8; i++)ReadWriteData.D32[i] = *(volatile unsigned int *)(aAddr + (i) *4); for(i=0; i<32; i++)aPanel->SText[6].Text[i] = ReadWriteData.D8[i]; aPanel->SText[6].Text[32] = '\0'; aPanel->SText[6].Show(); aPanel->SText[7].Show(); } void TDeviceSetup::GetMinMax(unsigned int aP0) { unsigned int p0, x; if(aP0 == 0)return; if(aP0 >dPORT_MAX_COUNT)return; p0 = aP0; Port[p0].UserCodeMin = 0xFFFFFFFF; Port[p0].UserCodeMax = 0; for(x=0;x<256;x++){ if(Port[p0].UcList[x].Full < Port[p0].UserCodeMin){ Port[p0].UserCodeMin = Port[p0].UcList[x].Full; } if(Port[p0].UcList[x].Full > Port[p0].UserCodeMax){ Port[p0].UserCodeMax = Port[p0].UcList[x].Full; } } } TGuiMsgReturn TDeviceSetup::KeyIn(unsigned char aKey) { TGuiMsgReturn aMsg = guiMsgNone; unsigned char aP0,aP1,Err; unsigned char x,y,aCh; unsigned char Path0Old, AddrOld; unsigned int aAddr, aUcFull; int iVal; int SaveOk; TDMix aFullPath; if(SetupMode == 1){ //Continute 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: Path0Old = Path0; AddrOld = Addr; if(CtlIndex <4){ aPanel->Edit[CtlIndex].KeyIn(aKey); aPanel->Edit[CtlIndex].Show(); } if(CtlIndex <2){ GetNewPathAddr(); if( (Path0Old != Path0) || (AddrOld != Addr) ){ LoadData(0); } }else if(CtlIndex == 3){ iVal = aPanel->Edit[3].Str.ToInteger(); if(iVal < 256){ AssignType = iVal; }else{ AssignType = 255; aPanel->Edit[CtlIndex].Str.FromUInt3Dg(AssignType); aPanel->Edit[CtlIndex].Show(); } aPanel->SText[13].SetText(StrTypeShortName[AssignType],24); aPanel->SText[13].Show(); } break; case VK_DELETE: Path0Old = Path0; AddrOld = Addr; if(CtlIndex <4){ aPanel->Edit[CtlIndex].KeyIn(aKey); aPanel->Edit[CtlIndex].Show(); } if(CtlIndex <2){ GetNewPathAddr(); if( (Path0Old != Path0) || (AddrOld != Addr) ){ LoadData(0); } }else if(CtlIndex == 3){ iVal = aPanel->Edit[3].Str.ToInteger(); if(iVal < 256){ AssignType = iVal; }else{ AssignType = 255; aPanel->Edit[CtlIndex].Str.FromUInt3Dg(AssignType); aPanel->Edit[CtlIndex].Show(); } aPanel->SText[13].SetText(StrTypeShortName[AssignType],24); aPanel->SText[13].Show(); } break; case VK_UP: if(CtlIndex >0){ CtlIndex--; Check4SelectedInSetup(); aPanel->ReDrawItems(); } break; case VK_DOWN: if(CtlIndex <3){ CtlIndex++; Check4SelectedInSetup(); aPanel->ReDrawItems(); } break; case dfKEY_SETUP: if(CtlIndex == 3){ FindType(-1); } break; case dfKEY_QUERY: if(CtlIndex == 3){ FindType(1); } break; case VK_EXECUTE: if(PrepData2Write()){ Write2Flash(); Record.ReadDevUserSet(); if(Port[Path0-1].UcList[Addr-1].Full == UserCode.Full){ SaveOk =1; ShowSaveOk(); LoadNext(); LoadData(1); }else{ SaveOk =0; ShowSaveNotOk(); } }else{ ShowCheckDataFail(); } break; case VK_RETURN: CtlIndex =0; InitPanel(); break; } if( (VK_EXECUTE != aKey) && (VK_RETURN != aKey) ){ ClearOutText(); } }else if(SetupMode == 2){ // Inh 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: Path0Old = Path0; AddrOld = Addr; if(CtlIndex <4){ aPanel->Edit[CtlIndex].KeyIn(aKey); aPanel->Edit[CtlIndex].Show(); } if(CtlIndex <2){ GetNewPathAddr(); if( (Path0Old != Path0) || (AddrOld != Addr) ){ LoadData(0); } }else if(CtlIndex == 3){ iVal = aPanel->Edit[3].Str.ToInteger(); if(iVal < 256){ AssignType = iVal; }else{ AssignType = 255; aPanel->Edit[CtlIndex].Str.FromUInt3Dg(AssignType); aPanel->Edit[CtlIndex].Show(); } aPanel->SText[13].SetText(StrTypeShortName[AssignType],24); aPanel->SText[13].Show(); } break; case VK_DELETE: Path0Old = Path0; AddrOld = Addr; if(CtlIndex <4){ aPanel->Edit[CtlIndex].KeyIn(aKey); aPanel->Edit[CtlIndex].Show(); } if(CtlIndex <2){ GetNewPathAddr(); if( (Path0Old != Path0) || (AddrOld != Addr) ){ LoadData(0); } }else if(CtlIndex == 3){ iVal = aPanel->Edit[3].Str.ToInteger(); if(iVal < 256){ AssignType = iVal; }else{ AssignType = 255; aPanel->Edit[CtlIndex].Str.FromUInt3Dg(AssignType); aPanel->Edit[CtlIndex].Show(); } aPanel->SText[13].SetText(StrTypeShortName[AssignType],24); aPanel->SText[13].Show(); } break; case dfKEY_SETUP: if(CtlIndex == 3){ FindType(-1); } break; case dfKEY_QUERY: if(CtlIndex == 3){ FindType(1); } break; case VK_UP: if(CtlIndex >0){ CtlIndex--; Check4SelectedInSetup(); aPanel->ReDrawItems(); } break; case VK_DOWN: if(CtlIndex <3){ CtlIndex++; Check4SelectedInSetup(); aPanel->ReDrawItems(); } break; case VK_EXECUTE: if(PrepData2Write()){ Write2Flash(); Record.ReadDevUserSet(); if(Port[Path0-1].UcList[Addr-1].Full == UserCode.Full){ SaveOk =1; ShowSaveOk(); LoadData(0); }else{ SaveOk =0; ShowSaveNotOk(); } }else{ ShowCheckDataFail(); } break; case VK_RETURN: CtlIndex =1; InitPanel(); break; } if( (VK_EXECUTE != aKey) && (VK_RETURN != aKey) ){ ClearOutText(); } }else if(SetupMode == 3){ //Fast 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: if(CtlIndex <6){ aPanel->Edit[CtlIndex].KeyIn(aKey); aPanel->Edit[CtlIndex].Show(); } if(CtlIndex == 5){ iVal = aPanel->Edit[CtlIndex].Str.ToInteger(); if(iVal >255){ AssignType=255; aPanel->Edit[CtlIndex].Str.FromUInt3Dg(AssignType); }else{ AssignType = iVal; } aPanel->Edit[CtlIndex].Show(); aPanel->SText[13].SetText(StrTypeShortName[AssignType], 24); aPanel->SText[13].Show(); } break; case VK_DELETE: if(CtlIndex <6){ aPanel->Edit[CtlIndex].KeyIn(aKey); aPanel->Edit[CtlIndex].Show(); } if(CtlIndex == 5){ iVal = aPanel->Edit[CtlIndex].Str.ToInteger(); if(iVal >255){ AssignType=255; aPanel->Edit[CtlIndex].Str.FromUInt3Dg(AssignType); }else{ AssignType = iVal; } aPanel->Edit[CtlIndex].Show(); aPanel->SText[13].SetText(StrTypeShortName[AssignType], 24); aPanel->SText[13].Show(); } break; case VK_UP: if(CtlIndex >0){ CtlIndex--; Check4SelectedInFast(); aPanel->ReDrawItems(); } break; case VK_DOWN: if(CtlIndex <5){ CtlIndex++; Check4SelectedInFast(); aPanel->ReDrawItems(); } break; case dfKEY_SETUP: if(CtlIndex == 5){ FindType(-1); } break; case dfKEY_QUERY: if(CtlIndex == 5){ FindType(1); } break; case VK_EXECUTE: if(PrepData2Write()){ Write2Flash(); Record.ReadDevUserSet(); aUcFull = UserCode.Full; SaveOk =1; for(x=AddrStart-1; xEdit[CtlIndex].KeyIn(aKey); aPanel->Edit[CtlIndex].Show(); } if(CtlIndex <2){ CheckDirectPadAva(); DirectPadDataShow(); }else if(CtlIndex == 3){ iVal = aPanel->Edit[3].Str.ToInteger(); if(iVal < 256){ AssignType = iVal; }else{ AssignType = 255; aPanel->Edit[CtlIndex].Str.FromUInt3Dg(AssignType); aPanel->Edit[CtlIndex].Show(); } aPanel->SText[13].SetText(StrTypeShortName[AssignType],24); aPanel->SText[13].Show(); } break; case VK_DELETE: Path0Old = Path0; AddrOld = Addr; if(CtlIndex <4){ aPanel->Edit[CtlIndex].KeyIn(aKey); aPanel->Edit[CtlIndex].Show(); } if(CtlIndex <2){ CheckDirectPadAva(); DirectPadDataShow(); }else if(CtlIndex == 3){ iVal = aPanel->Edit[3].Str.ToInteger(); if(iVal < 256){ AssignType = iVal; }else{ AssignType = 255; aPanel->Edit[CtlIndex].Str.FromUInt3Dg(AssignType); aPanel->Edit[CtlIndex].Show(); } aPanel->SText[13].SetText(StrTypeShortName[AssignType],24); aPanel->SText[13].Show(); } break; case VK_UP: if(CtlIndex >0){ CtlIndex--; Check4SelectedInSetup(); aPanel->ReDrawItems(); } break; case VK_DOWN: if(CtlIndex < 1){ CtlIndex++; Check4SelectedInSetup(); aPanel->ReDrawItems(); }else if(CtlIndex <3){ if(DirectPadAva){ CtlIndex++; Check4SelectedInSetup(); aPanel->ReDrawItems(); } } break; case dfKEY_SETUP: if(CtlIndex == 3){ FindType(-1); } break; case dfKEY_QUERY: if(CtlIndex == 3){ FindType(1); } break; case VK_EXECUTE: if(PrepData2Write()){ WriteDirectPad2Flash(); Record.ReadDirectPadUserSet(); if(DirectCtlBoard[DirectPadNum].UcList[NodeNum].Full == UserCode.Full){ SaveOk =1; ShowSaveOk(); }else{ SaveOk =0; ShowSaveNotOk(); } }else{ ShowCheckDataFail(); } break; case VK_RETURN: CtlIndex =3; InitPanel(); break; } if( (VK_EXECUTE != aKey) && (VK_RETURN != aKey) ){ ClearOutText(); } }else{ //Start to Selecte Setup Mode switch(aKey){ case VK_UP: if(CtlIndex >0){ CtlIndex--; Check4Selected(); aPanel->ReDrawItems(); } break; case VK_DOWN: if(CtlIndex <3){ CtlIndex++; Check4Selected(); aPanel->ReDrawItems(); } break; case VK_EXECUTE: if(CtlIndex == 0){ SetupMode = 1; InitPanel4Setup(); }else if(CtlIndex == 1){ SetupMode = 2; InitPanel4Setup(); }else if(CtlIndex == 2){ SetupMode = 3; InitPanel4Fast(); }else if(CtlIndex == 3){ SetupMode = 4; InitPanel4DirectPad(); } break; case VK_RETURN: SetupMode = 0; IsShowing = 0; aMsg = guiMsgReturn; break; } } return aMsg; } void TDeviceSetup::LoadStart() { int aP0, aP1,i; unsigned int aAddr; IsFound = 0; if( (SetupMode == 1) || (SetupMode == 2) ){ for(aP0=0; aP0Edit[0].Str.FromUInt2Dg(Path0); aPanel->Edit[1].Str.FromUInt3Dg(Addr); aPanel->Edit[2].Str.FromUInt8Dg(UserCode.Full); aPanel->Edit[3].Str.FromUInt3Dg(AssignType); aPanel->Edit[0].Show(); aPanel->Edit[1].Show(); aPanel->Edit[2].Show(); aPanel->Edit[3].Show(); TMyString::sFrom3Dg(Port[aP0].dTypeTable[aP1], aPanel->SText[11].Text); TMyString::sFromStr(StrTypeShortName[Port[aP0].dTypeTable[aP1]], aPanel->SText[12].Text); TMyString::sFromStr(StrTypeShortName[AssignType], aPanel->SText[13].Text); aPanel->SText[11].Show(); aPanel->SText[12].Show(); aPanel->SText[13].Show(); aAddr = dAddrSdRam_Descp + (aP0 * 256 * 32) + (aP1 * 32); for(i=0; i<8; i++){ ReadWriteData.D32[i] = *(volatile unsigned int *)(aAddr + (i *4)); } for(i=0; i<32; i++){ aPanel->SText[6].Text[i] = ReadWriteData.D8[i]; } aPanel->SText[6].Text[32] = '\0'; aPanel->SText[6].Show(); break; } } } if(IsFound){ break; } } }else if(SetupMode == 3){ for(aP0=0; aP0 250)AddrEnd=250; UserCode.Full = 1010101; Pitch = 1; AssignType = 0; aPanel->Edit[0].Str.FromUInt2Dg(Path0); aPanel->Edit[1].Str.FromUInt3Dg(AddrStart); aPanel->Edit[2].Str.FromUInt3Dg(AddrStart); aPanel->Edit[3].Str.FromUInt8Dg(UserCode.Full); aPanel->Edit[4].Str.FromUInt4Dg(Pitch); aPanel->Edit[5].Str.FromUInt3Dg(AssignType); aPanel->Edit[0].Show(); aPanel->Edit[1].Show(); aPanel->Edit[2].Show(); aPanel->Edit[3].Show(); aPanel->Edit[4].Show(); aPanel->Edit[5].Show(); TMyString::sFromStr(StrTypeShortName[AssignType], aPanel->SText[13].Text); aPanel->SText[13].Show(); break; } } } if(IsFound){ break; } } }else if(SetupMode == 4){ DirectPadNum =0; NodeNum =0; DirectPadAva = 1; DirectPadDataShow(); } } void TDeviceSetup::LoadNext() { int aP0, aP1, i; int FoundHere; FoundHere = 0; if( (Path0>0) && (Path0<=dPORT_MAX_COUNT) && (Addr >0) && (Addr<=250) ){ aP0 = Path0-1; aP1 = Addr -1; aP1++; if(aP1<=250){ for(; aP1<250; aP1++){ if(Port[aP0].ExistTable[aP1]){ FoundHere = 1; if(UserCode.Full < 99999999)UserCode.Full++; IsFound =1; Path0 = aP0+1; Addr = aP1+1; aPanel->Edit[0].Str.FromUInt2Dg(Path0); aPanel->Edit[1].Str.FromUInt3Dg(Addr); aPanel->Edit[0].Show(); aPanel->Edit[1].Show(); break; } } } if(FoundHere == 0){ for(i=0; i= dPORT_MAX_COUNT) aP0 = 0; if(MainCtl.fData.Split.ExistTablePort[aP0]){ for(aP1=0; aP1<250; aP1++){ if(Port[aP0].ExistTable[aP1]){ FoundHere = 1; if(UserCode.Full < 99999999)UserCode.Full++; IsFound =1; Path0 = aP0+1; Addr = aP1+1; aPanel->Edit[0].Str.FromUInt2Dg(Path0); aPanel->Edit[1].Str.FromUInt3Dg(Addr); aPanel->Edit[0].Show(); aPanel->Edit[1].Show(); break; } if(FoundHere){ break; } } } if(FoundHere){ break; } } } }else{ for(aP0=0; aP0Edit[0].Str.FromUInt2Dg(Path0); aPanel->Edit[1].Str.FromUInt3Dg(Addr); aPanel->Edit[0].Show(); aPanel->Edit[1].Show(); break; } } } if(FoundHere){ break; } } } } int TDeviceSetup::PrepData2Write() { int i; unsigned char aP0, aP1; if( (SetupMode == 1) || (SetupMode == 2) ){ Path0 = aPanel->Edit[0].Str.ToInteger(); Addr = aPanel->Edit[1].Str.ToInteger(); UserCode.Full = aPanel->Edit[2].Str.ToInteger(); AssignType = aPanel->Edit[3].Str.ToInteger(); if( (Path0>0) && (Path0 <= dPORT_MAX_COUNT) && (Addr >0) && (Addr <= 250) ){ //if( (UserCode.Full <= 99999999) && (AssignType >0) && (AssignType < 256) ){ if( (UserCode.Full <= 99999999) && (AssignType < 256) ){ return 1; } } }else if(SetupMode == 3){ Path0 = aPanel->Edit[0].Str.ToInteger(); AddrStart = aPanel->Edit[1].Str.ToInteger(); AddrEnd = aPanel->Edit[2].Str.ToInteger(); UserCode.Full = aPanel->Edit[3].Str.ToInteger(); Pitch = aPanel->Edit[4].Str.ToInteger(); AssignType = aPanel->Edit[5].Str.ToInteger(); if( (Path0>0) && (Path0 <= dPORT_MAX_COUNT) && (AddrStart >0) && (AddrStart <= 250) && (AddrEnd >0) && (AddrEnd <= 250) ){ //if( (UserCode.Full <= 99999999) && (AssignType >0) && (AssignType < 256) ){ if( (UserCode.Full <= 99999999) && (AssignType < 256) ){ return 1; } } }else if(SetupMode == 4){ UserCode.Full = aPanel->Edit[2].Str.ToInteger(); AssignType = aPanel->Edit[3].Str.ToInteger(); if( (DirectPadNum < dDIRECTCTL_MAX_COUNT) && (NodeNum < dDIRECTCTL_KEY_MAX_COUNT) ){ //if( (UserCode.Full <= 99999999) && (AssignType >0) && (AssignType < 256) ){ if( (UserCode.Full <= 99999999) && (AssignType < 256) ){ return 1; } } } return 0; } void TDeviceSetup::Write2Flash() { unsigned int fAddr; unsigned int i; unsigned int aUcFull; volatile unsigned int x, GetSta; unsigned char aP0, aP1, wP1; do{ DelayMs(3); GetSta = nor_get_busy_state(dFlashAddrDevUserCodeChip); }while(GetSta); //Erase 1 * 4K Blocks if( (Path0 >0) && (Path0 <= dPORT_MAX_COUNT) ){ aP0 = Path0 -1; aP1 = Addr -1; fAddr = dFlashAddrDevUserCode + (aP0 * 4096); nor_erase_sector_4k(dFlashAddrDevUserCodeChip,fAddr); DelayMs(100); do{ DelayMs(10); GetSta = nor_get_busy_state(dFlashAddrDevUserCodeChip); }while(GetSta); aUcFull = UserCode.Full; for(i=0; i<4; i++){ for(x=0;x<64;x++){ ReadWriteData.D32[x] = Port[aP0].UcList[i*64 + x].Full; if( (SetupMode == 1) || (SetupMode == 2) ){ if( (i*64 + x) == (Addr -1))ReadWriteData.D32[x] = UserCode.Full; }else if(SetupMode == 3){ wP1 = i*64 + x; if( (wP1>= (AddrStart -1)) && (wP1 <= (AddrEnd-1) ) ){ ReadWriteData.D32[x] = aUcFull; aUcFull += Pitch; } } } fAddr = dFlashAddrDevUserCode + (aP0 * 4096) + (i * 256); nor_write_page(dFlashAddrDevUserCodeChip, fAddr, ReadWriteData.D8); do{ DelayMs(5); GetSta = nor_get_busy_state(dFlashAddrDevUserCodeChip); }while(GetSta); } for(x=0;x<256;x++){ ReadWriteData.D8[x] = Port[aP0].AssignType[x]; if( (SetupMode == 1) || (SetupMode == 2) ){ if(x == (Addr -1) )ReadWriteData.D8[x] = AssignType; }else if(SetupMode == 3){ wP1 = AddrStart -1; if( (x >= wP1) && (x <= (AddrEnd-1)) ){ ReadWriteData.D8[x] = AssignType; } } } fAddr = dFlashAddrDevUserCode + (aP0 * 4096) + (i * 256); nor_write_page(dFlashAddrDevUserCodeChip, fAddr, ReadWriteData.D8); do{ DelayMs(5); GetSta = nor_get_busy_state(dFlashAddrDevUserCodeChip); }while(GetSta); } } void TDeviceSetup::WriteDirectPad2Flash() { unsigned int fAddr; unsigned int i; volatile unsigned int x, GetSta; unsigned char aP0, aP1, wP1; do{ DelayMs(3); GetSta = nor_get_busy_state(dFlashAddrDevUserCodeChip); }while(GetSta); //Erase 1 * 4K Blocks if( (DirectPadNum < dDIRECTCTL_MAX_COUNT) && (NodeNum < dDIRECTCTL_KEY_MAX_COUNT) ){ aP0 = DirectPadNum; aP1 = NodeNum; fAddr = dFlashAddrDirectPadUserCode + (aP0 * 4096); nor_erase_sector_4k(dFlashAddrDevUserCodeChip,fAddr); DelayMs(100); do{ DelayMs(10); GetSta = nor_get_busy_state(dFlashAddrDevUserCodeChip); }while(GetSta); for(x=0;x<8;x++){ ReadWriteData.D32[x] = DirectCtlBoard[aP0].UcList[x].Full; } for(x=0;x<8;x++){ ReadWriteData.D8[x +32] = DirectCtlBoard[aP0].AssignType[x]; } ReadWriteData.D32[NodeNum] = UserCode.Full; ReadWriteData.D8[NodeNum + 32] = AssignType; fAddr = dFlashAddrDirectPadUserCode + (aP0 * 4096) + (0 * 256); nor_write_page(dFlashAddrDevUserCodeChip, fAddr, ReadWriteData.D8); do{ DelayMs(5); GetSta = nor_get_busy_state(dFlashAddrDevUserCodeChip); }while(GetSta); } } void TDeviceSetup::ClearAll() { unsigned int fAddr; volatile unsigned int x, GetSta; do{ DelayMs(3); GetSta = nor_get_busy_state(dFlashAddrDevUserCodeChip); }while(GetSta); //Erase 1 * 4K Blocks for( x=0; x