Files
FireAlarmCtrlCn/MyCode/Gui/AreaCfg.cpp
2026-04-06 19:02:09 +08:00

1053 lines
26 KiB
C++

#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<aMs; Tick++){
for(mTick=0; mTick<160000; mTick++);
sys_error_led_task();
}
}
void TAreaCfg::RenderBackGround(void)
{
RectFillRender(ContentGeometry.Left, ContentGeometry.Top, ContentGeometry.Right, ContentGeometry.Bottom, ContentColor);
}
void TAreaCfg::RenderBackGround(unsigned int aClr)
{
RectFillRender(ContentGeometry.Left, ContentGeometry.Top, ContentGeometry.Right, ContentGeometry.Bottom, aClr);
}
void TAreaCfg::DrawFixText()
{
if(LanguageEnCn==0){
TextRender_string24(Lv.Caption.Left + 10, Lv.Caption.Top +4, clNearWhite, CaptionColor, "联动->分区编辑");
TextRender_string24(Lv.Grid.Left[0] + 10, Lv.Grid.Top[0] +6, clNearWhite, "分区号");
TextRender_string24(Lv.Grid.Left[0] + 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; i<Lv.Grid.UsingCount; 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].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; i<Lv.Grid.UsingCount; 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();
IList->Edit[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; i<dAreaCountMax; i++){
sAddr = dAddrSdRam_4Area + (i * 64);
Idf = *(volatile unsigned int *)(sAddr);
if(Idf != 0xA8A7A6A5){
GotNewInx = 1;
break;
}
}
if(GotNewInx){
ItemInx = i;
LoadData();
ClearSelected();
CtlIndex = 3;
Check4Selected();
}
}
//_____________________________________________________________________________________________________________________________
TGuiMsgReturn TAreaCfg::KeyIn(unsigned char aKey)
{
TGuiMsgReturn aMsg = guiMsgNone;
TGuiMsgReturn PmsRtnMsg = guiMsgNone;
int iVal;
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
if( (IsEdittingDescp) || (IsEdittingShortName) ){
const char *p;
if(aKey == dfKEY_SETUP){
//Restore
if(IsEdittingDescp){
RestoreDescp(this->aPanel->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<dAreaCountMax); i++, z++){
aClr = clNearWhite;
x = Lv.Panel.Left+6;
y+=28;
TextDigitRender4Right24(x, y, aClr, PanelColor, z+1);
x+=96;
sAddr = dAddrSdRam_4Area + (z * 64);
Idf = *(volatile unsigned int *)(sAddr);
if(Idf == 0xA8A7A6A5){
if(LanguageEnCn==0)TextRender_string24(x, y, clNearBlack, PanelColor, "已配置");
else TextRender_string24(x, y, clNearBlack, PanelColor, " Yes ");
//Show ShortName
for(int g=0; g<20;g++)ListText[g] =0;
sAddr = dAddrSdRam_4Area + (z * 64) + 16;
for(int g=0; g<16; g++){
ListText[g] = *(volatile unsigned char *)(sAddr +g);
}
x+=96;
TextRender_string24(x, y, clNearBlack, PanelColor, ListText);
//Show UserCode
for(int g=0; g<20;g++)ListText[g] =0;
sAddr = dAddrSdRam_4Area + (z * 64) + 4;
for(int g=0; g<8; g++){
ListText[g] = *(volatile unsigned char *)(sAddr +g);
}
x+=200;
TextRender_string24(x, y, clNearBlack, PanelColor, ListText);
}else{
TextRender_string24(x, y, clNearBlack, PanelColor, " ----");
}
}
}
void TAreaCfg::sRecoverSetDefault()
{
unsigned int fAddr, sAddr, GetSta;
unsigned int BlockX, PageX, OffSet;
SysLoopTick = 0;
do{
sDelayMs(3);
GetSta = nor_get_busy_state(dFlash4AreaChip);
}while(GetSta);
fAddr = dFlash4Area;
nor_erase_sector_64k(dFlash4AreaChip,fAddr);
sDelayMs(400);
SysLoopTick = 0;
do{
sDelayMs(3);
GetSta = nor_get_busy_state(dFlash4AreaChip);
}while(GetSta);
Record.Read4Area();
}