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

1700 lines
42 KiB
C++

#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; Tick<aMs; Tick++){
for(mTick=0; mTick<160000; mTick++);
sys_error_led_task();
}
}
void TDeviceSetup::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 TDeviceSetup::RenderBackGround(void)
{
RectFillRender(Content.Left, Content.Top, Content.Right, Content.Bottom, Color);
}
void TDeviceSetup::RenderBackGround(unsigned int aClr)
{
RectFillRender(Content.Left, Content.Top, Content.Right, Content.Bottom, aClr);
}
void TDeviceSetup::DrawSelf(void)
{
unsigned int x, y, x2, y2, w, h;
VertLineRender(Bound.Left, Bound.Top, Bound.Height -1, 0xFFFFFFFF);
VertLineRender(Bound.Right -1, Bound.Top +1, Bound.Height -2, 0xFF808080);
VertLineRender(Bound.Right, Bound.Top, Bound.Height, 0xFF404040);
HorizLineRender(Bound.Left, Bound.Top, Bound.Width - 1, 0xFFFFFFFF);
HorizLineRender(Bound.Left +1, Bound.Bottom -1, Bound.Width - 2, 0xFF808080);
HorizLineRender(Bound.Left, Bound.Bottom, Bound.Width, 0xFF404040);
x = Bound.Left +2 ;
x2 = Bound.Right -2;
y = Bound.Top +2;
y2 = Bound.Bottom - 2;
w = Bound.Width -4;
h = Bound.Height - 4;
VertLineRender (x, y, h-1, 0xFF808080);
HorizLineRender (x, y, w-1, 0xFF808080);
VertLineRender (x+1, y+1, h-2, 0xFF404040);
HorizLineRender (x+1, y+1, w-2, 0xFF404040);
VertLineRender (x2-1, y+1, h-2, 0xFFD4D0C8);
HorizLineRender (x+1, y2-1, w-2, 0xFFD4D0C8);
VertLineRender (x2, y, h, 0xFFFFFFFF);
HorizLineRender (x, y2, w, 0xFFFFFFFF);
RenderBackGround();
}
void TDeviceSetup::Show(void)
{
IsShowing = 1;
RenderBackGround();
DrawSelf();
ShowCaption();
}
void TDeviceSetup::FullRedraw(int Prm)
{
if(Prm == 0){
IsShowing = 1;
RenderBackGround();
DrawSelf();
ShowCaption();
aPanel->Show();
}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) && (Path0<dPORT_MAX_COUNT) && (Addr>0) && (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; x<AddrEnd; x++){
if(aUcFull != Port[Path0-1].UcList[x].Full){
SaveOk = 0;
break;
}
aUcFull += Pitch;
}
if(SaveOk){
ShowSaveOk();
}else{
ShowSaveNotOk();
}
}else{
ShowCheckDataFail();
}
break;
case VK_RETURN:
CtlIndex =2;
InitPanel();
break;
}
if( (VK_EXECUTE != aKey) && (VK_RETURN != aKey) ){
ClearOutText();
}
}else
if(SetupMode ==4){
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 = DirectPadNum;
AddrOld = NodeNum;
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_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; aP0<dPORT_MAX_COUNT; aP0++){
if(MainCtl.fData.Split.ExistTablePort[aP0]){
for(aP1=0; aP1<250; aP1++){
if(Port[aP0].ExistTable[aP1]){
IsFound =1;
Path0 = aP0+1;
Addr = aP1+1;
UserCode.Full = Port[aP0].UcList[aP1].Full;
AssignType = Port[aP0].AssignType[aP1];
aPanel->Edit[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<dPORT_MAX_COUNT; aP0++){
if(MainCtl.fData.Split.ExistTablePort[aP0]){
for(aP1=0; aP1<250; aP1++){
if(Port[aP0].ExistTable[aP1]){
IsFound =1;
Path0 = aP0+1;
AddrStart = aP1+1;
AddrEnd = aP1+2;
if(AddrEnd > 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; i++){
aP0++;
if(aP0 >= 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; aP0<dPORT_MAX_COUNT; aP0++){
if(MainCtl.fData.Split.ExistTablePort[aP0]){
for(aP1=0; aP1<250; aP1++){
if(Port[aP0].ExistTable[aP1]){
FoundHere = 1;
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;
}
}
}
}
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<dPORT_MAX_COUNT; x++ ){
fAddr = dFlashAddrDevUserCode + (x * 4096);
nor_erase_sector_4k(dFlashAddrDevUserCodeChip,fAddr);
DelayMs(100);
do{
DelayMs(10);
GetSta = nor_get_busy_state(dFlashAddrDevUserCodeChip);
}while(GetSta);
}
}
void TDeviceSetup::Task1000Ms()
{
if(IsShowing){
}
}
void TDeviceSetup::Task10Ms()
{
if(IsShowing){
}
}
int TDeviceSetup::ExtRequst(unsigned char Prm)
{
IsShowing =0;
SetupMode =0;
return 0;
}