#include "AreaCfg.h" #include "Runtime.h" extern "C"{ #include "user_norflash.h" #include "user_eeprom.h" #include "uart_key_drv.h" #include "task.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 xNew = 10; const int xModify = 100; const int xDelete = 100; const int xSave = 10; static const char CharBcdText[20]= {"0123456789*------\0"}; void TAreaCfg::Init() { CtlIndex = 0; IsShow = 0; ListPage = 0; ItemInx = 0; Sta =0; IsPermission =0; IsEdittingDescp =0; IsEdittingShortName =0; } void TAreaCfg::sDelayMs(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] + 400, Lv.Grid.Top[0] +6, clNearWhite, "分区数量:"); TextRender_string24(Lv.Grid.Left[1] + 10, Lv.Grid.Top[1] +6, clNearWhite, "简称"); TextRender_string24(Lv.Grid.Left[1] + 10, Lv.Grid.Top[1] +40, clNearWhite, "描述"); TextRender_string24(Lv.Grid.Left[1] + 10, Lv.Grid.Top[1] +114, clNearWhite, "二次码"); TextRender_string24(Lv.Grid.Left[2] + 10, Lv.Grid.Top[2] +6, clNearWhite, "操作"); TRoundRect::sDrawBySize(xNew, Lv.Grid.Top[0] + 40, 76, 30, 7, clNearWhite, "新建", 14, clNearBlack); //TRoundRect::sDrawBySize(xModify, Lv.Grid.Top[0] + 40, 76, 30, 7, clNearWhite, "修改", 14, clNearBlack); TRoundRect::sDrawBySize(xDelete, Lv.Grid.Top[0] + 40, 76, 30, 7, clNearWhite, "删除", 14, clNearBlack); TRoundRect::sDrawBySize(xSave, Lv.Grid.Top[2] + 40, 76, 30, 7, clNearWhite, "保存", 14, clNearBlack); }else{ TextRender_string24(Lv.Caption.Left + 10, Lv.Caption.Top +4, clNearWhite, CaptionColor, "Linkage->Zone Setting"); TextRender_string24(Lv.Grid.Left[0] + 10, Lv.Grid.Top[0] +6, clNearWhite, "ZoneID"); 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] + 400, Lv.Grid.Top[0] +6, clNearWhite, "Amout:"); TextRender_string24(Lv.Grid.Left[1] + 10, Lv.Grid.Top[1] +6, clNearWhite, "Brie"); TextRender_string24(Lv.Grid.Left[1] + 10, Lv.Grid.Top[1] +40, clNearWhite, "Desc"); TextRender_string24(Lv.Grid.Left[1] + 10, Lv.Grid.Top[1] +114, clNearWhite, "Aux ID"); TextRender_string24(Lv.Grid.Left[2] + 10, Lv.Grid.Top[2] +6, clNearWhite, "Operation"); TRoundRect::sDrawBySize(xNew, Lv.Grid.Top[0] + 40, 76, 30, 7, clNearWhite, "New ", 14, clNearBlack); //TRoundRect::sDrawBySize(xModify, Lv.Grid.Top[0] + 40, 76, 30, 7, clNearWhite, "修改", 14, clNearBlack); TRoundRect::sDrawBySize(xDelete, Lv.Grid.Top[0] + 40, 76, 30, 7, clNearWhite, "Del ", 14, clNearBlack); TRoundRect::sDrawBySize(xSave, Lv.Grid.Top[2] + 40, 76, 30, 7, clNearWhite, "Save", 14, clNearBlack); } } void TAreaCfg::DrawSelf(void) { RenderBackGround(); RectFillRender(Lv.Caption.Left, Lv.Caption.Top, Lv.Caption.Right, Lv.Caption.Bottom, CaptionColor); for(int i=0; iEdit[0].Init(Lv.Grid.Left[0] + 86, Lv.Grid.Top[0] +4, 60, 30, 0,0,1,clNearWhite); IList->Edit[0].Str.Clear(); IList->Edit[0].SetMaxLen(4); IList->Edit[0].Enable =1; IList->Edit[1].Init(Lv.Grid.Left[1] + 60, Lv.Grid.Top[1] +4, 226, 30, 0,0,1,clNearWhite); IList->Edit[1].Str.Clear(); IList->Edit[1].Enable =1; IList->Edit[1].IsShowCursor =0; mlEdit.Init(Lv.Grid.Left[1] +60, Lv.Grid.Top[1] +40, 226, 64, 0,0,1,clNearWhite); mlEdit.SetLineSpacing(4); mlEdit.Str.Clear(); mlEdit.Enable =1; mlEdit.IsShowCursor =0; IList->EditUserCode.Init(Lv.Grid.Left[1] + 86, Lv.Grid.Top[1] +110, 200, 30, 0,0,1,clNearWhite); IList->EditUserCode.Str.Clear(); IList->EditUserCode.SetMaxLen(8); IList->EditUserCode.Enable =1; IList->Edit[0].Show(); mlEdit.Show(); IList->Edit[1].Show(); IList->EditUserCode.Show(); } void TAreaCfg::Redraw4EditText() { RectFillRender(9, 239, 790, 431, ContentColor); for(int i=1; iEdit[0].Show(); IList->Edit[1].Show(); mlEdit.Show(); IList->EditUserCode.Show(); Check4Selected(); } void TAreaCfg::Show(void) { IsShow = 1; RenderBackGround(); DrawSelf(); DrawList(); } void TAreaCfg::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 == -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, "Save Err "); }else if(Sta == 2){ TextRender_string24(ResultTipPoint.x, ResultTipPoint.y, clNearWhite, ItemColor, "Deleted OK"); }else if(Sta == -2){ TextRender_string24(ResultTipPoint.x, ResultTipPoint.y, clNearWhite, ItemColor, "Failed "); } } } void TAreaCfg::CheckCount() { int i; ItemCount = AreaSetting.Count; } void TAreaCfg::DrawCount() { int i=0; TextDigitRender4_24(Lv.Grid.Left[0] + 400 + 110, Lv.Grid.Top[0] +6, clNearWhite, ItemColor, ItemCount); } void TAreaCfg::ShowSta(int aSta) { Sta = aSta; ShowSta(); } void TAreaCfg::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<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); DrawFixText(); TextDigitRender2_24(Lv.Grid.Left[0] + 260, Lv.Grid.Top[0] +6, clNearWhite, MainCtl.fData.Split.MyNum); IList->Edit[0].Show(); mlEdit.Show(); IList->Edit[1].Show(); IList->EditUserCode.Show(); if(IsList == 0)Check4Selected(); DrawList(); if(IsPermission)PmsIntervene4Gui.ReDraw4GuiRecall(); } } //______________________________________________________________________________________________________________________________ void TAreaCfg::ClearSelected(void) { char *tText; switch(CtlIndex){ case 0: IList->Edit[0].Selected =0; IList->Edit[0].Show(); break; case 1: if(LanguageEnCn==0)tText="新建";else tText="New "; TRoundRect::sDrawBySize(xNew, Lv.Grid.Top[0] + 40, 76, 30, 7, clNearWhite, tText, 14, clNearBlack); break; case 2: if(LanguageEnCn==0)tText="删除";else tText="Del "; TRoundRect::sDrawBySize(xDelete, Lv.Grid.Top[0] + 40, 76, 30, 7, clNearWhite, tText, 14, clNearBlack); break; case 3: IList->Edit[1].Selected =0; IList->Edit[1].Show(); break; case 4: mlEdit.Selected =0; mlEdit.Show(); break; case 5: IList->EditUserCode.Selected =0; IList->EditUserCode.Show(); break; case 6: if(LanguageEnCn==0)tText="保存";else tText="Save"; TRoundRect::sDrawBySize(xSave, Lv.Grid.Top[2] + 40, 76, 30, 7, clNearWhite, tText, 14, clNearBlack); break; default: break; } } void TAreaCfg::Check4Selected(void) { char *tText; switch(CtlIndex){ case 0: IList->Edit[0].Selected =1; IList->Edit[0].SetPstTail(); IList->Edit[0].Show(); break; case 1: if(LanguageEnCn==0)tText="新建";else tText="New "; TRoundRect::sDrawBySize(xNew, Lv.Grid.Top[0] + 40, 76, 30, 7, clBlue, tText, 14, clNearWhite); break; case 2: if(LanguageEnCn==0)tText="删除";else tText="Del "; TRoundRect::sDrawBySize(xDelete, Lv.Grid.Top[0] + 40, 76, 30, 7, clBlue, tText, 14, clNearWhite); break; case 3: IList->Edit[1].Selected =1; IList->Edit[1].SetPstTail(); IList->Edit[1].Show(); break; case 4: mlEdit.Selected =1; mlEdit.Show(); break; case 5: IList->EditUserCode.Selected =1; IList->EditUserCode.SetPstTail(); IList->EditUserCode.Show(); break; case 6: if(LanguageEnCn==0)tText="保存";else tText="Save"; TRoundRect::sDrawBySize(xSave, Lv.Grid.Top[2] + 40, 76, 30, 7, clBlue, tText, 14, clNearWhite); break; default: break; } } void TAreaCfg::ShowCfg() { IList->Edit[0].Show(); IList->Edit[1].Show(); mlEdit.Show(); IList->EditUserCode.Show(); DrawCount(); } void TAreaCfg::Start() { LoadData(); Check4Selected(); ShowCfg(); } void TAreaCfg::PermissionCmdGO() { if((PermissionCmd == 1) || (PermissionCmd == 2)){ RestoreData(); WriteEntryViaFlash(); LoadData(); DrawList(); } } void TAreaCfg::PermissionCmdReturnDraw() { if(Lv.Panel.Active)RectFillRender(Lv.Panel.Left, Lv.Panel.Top, Lv.Panel.Right, Lv.Panel.Bottom, PanelColor); DrawList(); } void TAreaCfg::RestoreShortName(char *p) { unsigned int i; for(i=0; i<16; i++){ IList->Edit[1].Str.Text[i] = *p; if(*p == 0){ break; } p++; } IList->Edit[1].Str.Text[i] =0; IList->Edit[1].Str.Text[16] =0; IList->Edit[1].Str.Text[17] =0; } void TAreaCfg::RestoreDescp(char *p) { unsigned int i; for(i=0; i<32; i++){ mlEdit.Str.Text[i] = *p; if(*p == 0){ break; } p++; } mlEdit.Str.Text[i] =0; mlEdit.Str.Text[32] =0; mlEdit.Str.Text[33] =0; } void TAreaCfg::InitPanel(char *pText) { 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(pText); 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(); } void TAreaCfg::NewEntry() { int i, GotNewInx; unsigned int sAddr, Idf; GotNewInx =0; for(i=0; iaPanel->Edit[0].Str.Text); }else if(IsEdittingShortName){ RestoreShortName(this->aPanel->Edit[0].Str.Text); } Redraw4EditText(); DrawList(); IsEdittingDescp = 0; IsEdittingShortName =0; }else if(IsExtInput){ if(aKey == dfKEY_ENCN){ CnInput.KeyIn(aKey); if(CnInput.InputMode == 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(); if(LanguageEnCn==0)TMyString::sFromStr("当前快捷输入数字", aPanel->SText[0].Text); else TMyString::sFromStr("Enter Numbers", aPanel->SText[0].Text); aPanel->SText[0].Show(); } }else if(aKey == VK_RETURN){ //Just return Redraw4EditText(); DrawList(); IsEdittingDescp = 0; IsEdittingShortName =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("Pay Attention To The Tip", aPanel->SText[0].Text); aPanel->SText[0].Show(); } break; case VK_EXECUTE: break; case VK_RETURN: Redraw4EditText(); DrawList(); IsEdittingDescp = 0; IsEdittingShortName =0; break; } } }else if(IsList){ int PageCountMax = dAreaCountMax / 8; switch(aKey){ case VK_LEFT: if(ListPage >0){ ListPage -=8; if(ListPage <0)ListPage = 0; } DrawList(); break; case VK_RIGHT: if(ListPage < PageCountMax){ ListPage +=8; if(ListPage > (PageCountMax-1))ListPage = PageCountMax-1; } DrawList(); break; case VK_UP: if(ListPage >0){ ListPage--; if(ListPage <0)ListPage = 0; } DrawList(); break; case VK_DOWN: if(ListPage < PageCountMax){ ListPage ++; if(ListPage > (PageCountMax-1))ListPage = PageCountMax-1; } DrawList(); break; case VK_TAB: IsList = 0; DrawList(); Check4Selected(); break; case VK_EXECUTE: break; case VK_RETURN: aMsg = guiMsgReturn; break; default : break; } }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: if(CtlIndex == 0){ IList->Edit[0].KeyIn(aKey); int iVal; iVal = IList->Edit[0].Str.ToInteger(); if( (iVal <1) || (iVal > dAreaCountMax) ){ IList->Edit[0].SelectedColor = clRed; }else{ IList->Edit[0].SelectedColor = clBlue; iVal--; if(iVal != ItemInx){ ItemInx = iVal; LoadUcBcdText(); LoadShortName(); LoadDescp(); ShowCfg(); Check4Selected(); } } IList->Edit[0].Show(); }else if(CtlIndex == 1){ if(aKey == VK_RIGHT){ ClearSelected(); CtlIndex++; Check4Selected(); } }else if(CtlIndex == 2){ if(aKey == VK_LEFT){ ClearSelected(); CtlIndex--; Check4Selected(); } }else if(CtlIndex == 3){ IList->Edit[1].Selected = 0; IList->Edit[1].Show(); InitPanel(IList->Edit[1].Str.Text); IsEdittingShortName = 1; IsExtInput = 0; }else if(CtlIndex == 4){ mlEdit.Selected = 0; mlEdit.Show(); InitPanel(mlEdit.Str.Text); IsEdittingDescp = 1; IsExtInput = 0; }else if(CtlIndex == 5){ IList->EditUserCode.KeyIn(aKey); IList->EditUserCode.Show(); } break; case dfKEY_ASTERISK: if(CtlIndex == 5){ IList->EditUserCode.KeyIn(aKey); IList->EditUserCode.Show(); } break; case VK_UP: if(CtlIndex >0){ ClearSelected(); CtlIndex--; Check4Selected(); } break; case VK_DOWN: if(CtlIndex <6){ ClearSelected(); CtlIndex++; Check4Selected(); } break; case VK_TAB: IsList = 1; DrawList(); ClearSelected(); break; case dfKEY_SETUP: //0x70 // Key value for SETUP //ShowCfg(); break; case VK_EXECUTE: //Save Data Here if(CtlIndex == 1){ NewEntry(); }else if(CtlIndex == 2){ PermissionCmd = 2; if(SystemPermission > 2){ PermissionCmdGO(); }else{ IsPermission = 1; ClearSelected(); PmsIntervene4Gui.Show4Gui(Lv.Panel.Left + 16, Lv.Panel.Top + 16, Lv.Panel.Width -36 , 140, 3); } }else if(CtlIndex == 3){ IList->Edit[1].Selected = 0; IList->Edit[1].Show(); InitPanel(IList->Edit[1].Str.Text); IsEdittingShortName = 1; IsExtInput = 0; }else if(CtlIndex == 4){ mlEdit.Selected = 0; mlEdit.Show(); InitPanel(mlEdit.Str.Text); IsEdittingDescp = 1; IsExtInput = 0; }else if(CtlIndex == 6){ 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){ if( (IsEdittingDescp == 0) && (IsEdittingShortName == 0) ){ ShowSta(0); } } } return aMsg; } void TAreaCfg::LoadUcBcdText() { int i; unsigned int Idf, aOrd, sAddr; if(ItemInx >= dAreaCountMax ){ IList->EditUserCode.Str.Text[0] = '\0'; IList->EditUserCode.Str.Text[1] = '\0'; return; } sAddr = dAddrSdRam_4Area + (ItemInx * 64); Idf = *(volatile unsigned int *)(sAddr); if(Idf == 0xA8A7A6A5){ sAddr = dAddrSdRam_4Area + (ItemInx * 64) + 4; for(i=0; i<8; i++){ IList->EditUserCode.Str.Text[i] = *(volatile unsigned char *)(sAddr +i); } IList->EditUserCode.Str.Text[8] = '\0'; }else{ IList->EditUserCode.Str.Text[0] = '\0'; IList->EditUserCode.Str.Text[1] = '\0'; } } void TAreaCfg::LoadShortName() { unsigned int Idf, sAddr; if(ItemInx >= dAreaCountMax ){ IList->Edit[1].Str.Text[0] = '\0'; IList->Edit[1].Str.Text[1] = '\0'; return; } sAddr = dAddrSdRam_4Area + (ItemInx * 64); Idf = *(volatile unsigned int *)(sAddr); if(Idf == 0xA8A7A6A5){ sAddr = dAddrSdRam_4Area + (ItemInx * 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'; } } void TAreaCfg::LoadDescp() { unsigned int Idf, sAddr; if(ItemInx >= dAreaCountMax ){ mlEdit.Str.Text[0] ='\0'; mlEdit.Str.Text[1] ='\0'; return; } sAddr = dAddrSdRam_4Area + (ItemInx * 64); Idf = *(volatile unsigned int *)(sAddr); if(Idf == 0xA8A7A6A5){ sAddr = dAddrSdRam_4Area + (ItemInx * 64) + 32; for(int i=0; i<32; i++){ mlEdit.Str.Text[i] = *(volatile unsigned char *)(sAddr +i);; } mlEdit.Str.Text[32] = '\0'; }else{ mlEdit.Str.Text[0] ='\0'; mlEdit.Str.Text[1] ='\0'; } } void TAreaCfg::RestoreUcBcdText() { for(int i=0; i<8; i++){ RawData[i+4] = IList->EditUserCode.Str.Text[i]; } } void TAreaCfg::RestoreShortName() { for(int i=0; i<16; i++){ RawData[i+16] = IList->Edit[1].Str.Text[i]; } } void TAreaCfg::RestoreDescp() { for(int i=0; i<32; i++){ RawData[i+32] = mlEdit.Str.Text[i]; } } void TAreaCfg::LoadData() { CheckCount(); IList->Edit[0].Str.FromUInt4Dg(ItemInx +1); LoadUcBcdText(); LoadShortName(); LoadDescp(); ShowCfg(); Check4Selected(); } void TAreaCfg::RestoreData() { int i; if(PermissionCmd == 1){ RestoreUcBcdText(); RestoreShortName(); RestoreDescp(); //Save for(i=0; i<4; i++)RawData[i] =0xA5 +i; }else if(PermissionCmd == 2){ //Erase for(i=0; i<64; i++)RawData[i] =0; } } void TAreaCfg::ReadEntryViaFlash() { } void TAreaCfg::WriteEntryViaFlash() { unsigned int fAddr, sAddr, GetSta; unsigned int BlockX, PageX, OffSet; BlockX = ItemInx * 64 / 4096; do{ sDelayMs(3); GetSta = nor_get_busy_state(dFlash4AreaChip); }while(GetSta); fAddr = dFlash4Area + (BlockX * 4096); nor_erase_sector_4k(dFlash4AreaChip,fAddr); sDelayMs(100); do{ sDelayMs(3); GetSta = nor_get_busy_state(dFlash4AreaChip); }while(GetSta); sAddr = dAddrSdRam_4Area + (ItemInx * 64); for(int x=0; x<64; x++){ *(volatile unsigned char *)(sAddr + x) = RawData[x]; } PageX = ItemInx / (256 / 64); for(int i=0; i<16; i++){ IList->RealtimeData.Reset(); sAddr = dAddrSdRam_4Area + ( (BlockX * 16 +i) * 256); do{ sDelayMs(10); GetSta = nor_get_busy_state(dFlash4AreaChip); }while(GetSta); for(int x=0;x<256;x++){ IList->RealtimeData.Data[0][x] = *(volatile unsigned char *)(sAddr + x); } fAddr = dFlash4Area + ( (BlockX * 16 + i) * 256); nor_write_page(dFlash4AreaChip, fAddr, IList->RealtimeData.Data[0]); do{ sDelayMs(5); GetSta = nor_get_busy_state(dFlash4AreaChip); }while(GetSta); } do{ sDelayMs(5); GetSta = nor_get_busy_state(dFlash4AreaChip); }while(GetSta); Record.Read4Area(); GetSta =0; sAddr = dAddrSdRam_4Area + (ItemInx * 64); for(int i=0; i<64; i++){ if(RawData[i] != *(volatile unsigned char *)(sAddr +i)){ GetSta=1; break; } } if(GetSta){ //Write Err if(PermissionCmd == 1){ //Save Err ShowSta(-1); }else if(PermissionCmd == 2){ //Delete Err ShowSta(-2); } }else{ //Write OK if(PermissionCmd == 1){ //Save OK ShowSta(1); }else if(PermissionCmd == 2){ //Delete OK ShowSta(2); } } } void TAreaCfg::DrawList() { int i, z, x, y; unsigned int aClr, TopInx, sAddr, Idf; 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; if(LanguageEnCn==0)TextRender_string24(x, y, clNearBlack, PanelColor, "区域号 配置 简称 二次码"); else TextRender_string24(x, y, clNearBlack, PanelColor, "ZoneID Config Brief Aux ID"); TopInx = ListPage * 8; for(i=0,z=TopInx; (i<8) && (z