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

2906 lines
79 KiB
C++

#include "Gui.h"
#include "DevProperty.h"
extern "C"{
#include "user_norflash.h"
#include "user_eeprom.h"
#include "uart_key_drv.h"
#include "task.h"
#include "HW_config.h"
}
#define cmDeviceRuntimeDataStart 207
#define cmDeviceRuntimeDataStop 208
static const char CharBcdText[20]= {"0123456789*------\0"};
static const unsigned char stHexNum[16] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
//For Query Device Function to PopUp Show One Device Property Key:Value Edit or View
//Root Device
//static const char cAvtive[12] = {"已挂载数量"};
//static const char cCarry[12] = {"登记数量"};
//static const char cVoltage[12] = {"电压V"};
//static const char cCurrent[8] = {"电流A"};
//static const char cTempe[8] = {"摄氏度"};
//static const char cVer[8] = {"版本V"};
//static const char cFBV[16] = {"回码电压"};
//static const char cFBC[16] = {"回码电流"};
//static const char cFBCZero[12] = {"静态电流mA"};
//static const char cFBCFull[12] = {"动态电流mA"};
//static const char cFBVZero[12] = {"静态电压V"};
//static const char cFBVOL[12] = {"动态电压V"};
//static const char cConnectCount[12] = "已连接数量";
//static const char cK[4] = "K";
//static const char cCAN[8] = "CAN";
//static const char cRS485[8] = "RS485";
//static const char cEth[8] = "以太网";
//static const char cSpeed[12] = "速度 KHz";
//static const char cEth100M[12] = "100M 以太网";
//static const char cEth1G[12] = "1G 以太网";
//static const char cCommType[12] = "通讯类型";
char TDevProperty::Text4CmpInc[16] = "\0\0" ;
class TItemList *TDevProperty::sIList;
void TDevProperty::DrawCommonInfTitleFixText()
{
if(LanguageEnCn == 0){
TextRender_string24(Lv.Grid.Left[0] + 10, Lv.Grid.Top[0] +6, clNearWhite, "回路号");
TextRender_string24(Lv.Grid.Left[0] + 160, Lv.Grid.Top[0] +6, clNearWhite, "机器号");
TextDigitRender2Right24(Lv.Grid.Left[0] + 232, Lv.Grid.Top[0] +6, clNearWhite, CtlNum);
TextRender_string24(Lv.Grid.Left[0] + 254, Lv.Grid.Top[0] +6, clNearWhite, "本机");
TextRender_string24(Lv.Grid.Left[0] + 340, Lv.Grid.Top[0] +6, clNearWhite, "类型:");
TextRender_string24(Lv.Grid.Left[0] + 640, Lv.Grid.Top[0] +6, clNearWhite, "状态:");
TextRender_string24(Lv.Grid.Left[0] + 10, Lv.Grid.Top[0] + 40, clNearWhite, "地址号");
TextRender_string24(Lv.Grid.Left[0] + 280, Lv.Grid.Top[0] + 40, clNearWhite, "注释信息:");
//User Code & Area Assign
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, "分区号");
}else
if(LanguageEnCn == 1){
TextRender_string24(Lv.Grid.Left[0] + 10, Lv.Grid.Top[0] +6, clNearWhite, "LoopID");
TextRender_string24(Lv.Grid.Left[0] + 160, Lv.Grid.Top[0] +6, clNearWhite, "HostID");
TextDigitRender2Right24(Lv.Grid.Left[0] + 232, Lv.Grid.Top[0] +6, clNearWhite, CtlNum);
TextRender_string24(Lv.Grid.Left[0] + 254, Lv.Grid.Top[0] +6, clNearWhite, " Local");
TextRender_string24(Lv.Grid.Left[0] + 340, Lv.Grid.Top[0] +6, clNearWhite, "Type:");
TextRender_string24(Lv.Grid.Left[0] + 640, Lv.Grid.Top[0] +6, clNearWhite, "State");
TextRender_string24(Lv.Grid.Left[0] + 10, Lv.Grid.Top[0] + 40, clNearWhite, "Addr");
TextRender_string24(Lv.Grid.Left[0] + 320, Lv.Grid.Top[0] + 40, clNearWhite, "Note:");
TextRender_string24(Lv.Grid.Left[1] + 10, Lv.Grid.Top[1] +6, clNearWhite, "AuxID");
TextRender_string24(Lv.Grid.Left[1] + 10, Lv.Grid.Top[1] +40, clNearWhite, "Zone");
}
}
void TDevProperty::Init(THwDevType aDevType, int aMode)
{
HwDevType = aDevType;
IsPermission = 0;
PanelIsUsingText = 1;
Tag.Reset();
EdittingDescp = 0;
IsExtInput = 1;
SetEnterMethod(aMode);
RuntimeData.Reset();
PanelDrawData.Reset();
PanelDrawData.TextDrawLine = 0;
SmokerReadWriteSta =0;
TempeReadSta = 0;
VaReadWriteSta =0;
DisplayPadReadWriteSta =0;
DisplayPadDownloadDescpSta =0;
for(int i=0; i<16; i++)DebugBytes[i] = Text4CmpInc[i];
}
void TDevProperty::FullRedraw(int Prm)
{
if(Prm == 0){
RenderBackGround();
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);
}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);
}
RedrawCommonInfTitle();
switch(HwDevType){
case htNoType:
FullRedrawNoType(Prm);
break;
case htSmoker:
FullRedrawhtSmoker(Prm);
break;
case htTempe:
FullRedrawhtTempe(Prm);
break;
case htHandPad:
FullRedrawhtHandPad(Prm);
break;
case htHydrantPad:
FullRedrawhtHydrantPad(Prm);
break;
case htModuleIn:
FullRedrawhtModuleIn(Prm);
break;
case htModuleInOut:
FullRedrawhtModuleInOut(Prm);
break;
case htModuleOut:
FullRedrawhtModuleOut(Prm);
break;
case htVa:
FullRedrawhtVa(Prm);
break;
case htDisplayPad:
FullRedrawhtDisplayPad(Prm);
break;
case htLinkagePowerSuply:
FullRedrawhtLinkagePowerSuply(Prm);
break;
default :
break;
}
}
void TDevProperty::DrawStateCn(unsigned char aSta)
{
}
void TDevProperty::DrawStateEn(unsigned char aSta)
{
}
void TDevProperty::DrawState(unsigned char aSta)
{
if(LanguageEnCn == 0){
if(aSta & dEpStateBitFire){
TCircle::sRender(IList->STextState.Bound.Left -12, IList->STextState.Bound.Top +14, 10, clRed, 0xF);
IList->STextState.SetText("报警", 24);
}else
if(aSta & dEpStateBitStart){
TCircle::sRender(IList->STextState.Bound.Left -12, IList->STextState.Bound.Top +14, 10, clOrange, 0xF);
IList->STextState.SetText("启动", 24);
}else
if(aSta & dEpStateBitSv){
TCircle::sRender(IList->STextState.Bound.Left -12, IList->STextState.Bound.Top +14, 10, clOrange, 0xF);
IList->STextState.SetText("启动", 24);
}else
if(aSta & dEpStateBitFault){
TCircle::sRender(IList->STextState.Bound.Left -12, IList->STextState.Bound.Top +14, 10, clOrange, 0xF);
IList->STextState.SetText("故障", 24);
}else
if(aSta & dEpStateBitFeedBack){
TCircle::sRender(IList->STextState.Bound.Left -12, IList->STextState.Bound.Top +14, 10, clBlue, 0xF);
IList->STextState.SetText("反馈", 24);
}else
if(aSta & dEpStateBitMask){
TCircle::sRender(IList->STextState.Bound.Left -12, IList->STextState.Bound.Top +14, 10, clOrange, 0xF);
IList->STextState.SetText("屏蔽", 24);
}else{
TCircle::sRender(IList->STextState.Bound.Left -12, IList->STextState.Bound.Top +14, 10, clDeepGreen, 0xF);
IList->STextState.SetText("正常", 24);
}
}else
if(LanguageEnCn == 1){
if(aSta & dEpStateBitFire){
TCircle::sRender(IList->STextState.Bound.Left -12, IList->STextState.Bound.Top +14, 10, clRed, 0xF);
IList->STextState.SetText("Fire", 24);
}else
if(aSta & dEpStateBitStart){
TCircle::sRender(IList->STextState.Bound.Left -12, IList->STextState.Bound.Top +14, 10, clOrange, 0xF);
IList->STextState.SetText("LINK", 24);
}else
if(aSta & dEpStateBitSv){
TCircle::sRender(IList->STextState.Bound.Left -12, IList->STextState.Bound.Top +14, 10, clOrange, 0xF);
IList->STextState.SetText("SUPV", 24);
}else
if(aSta & dEpStateBitFault){
TCircle::sRender(IList->STextState.Bound.Left -12, IList->STextState.Bound.Top +14, 10, clOrange, 0xF);
IList->STextState.SetText("Fail", 24);
}else
if(aSta & dEpStateBitFeedBack){
TCircle::sRender(IList->STextState.Bound.Left -12, IList->STextState.Bound.Top +14, 10, clBlue, 0xF);
IList->STextState.SetText("FBCK", 24);
}else
if(aSta & dEpStateBitMask){
TCircle::sRender(IList->STextState.Bound.Left -12, IList->STextState.Bound.Top +14, 10, clOrange, 0xF);
IList->STextState.SetText("Mask", 24);
}else{
TCircle::sRender(IList->STextState.Bound.Left -12, IList->STextState.Bound.Top +14, 10, clDeepGreen, 0xF);
IList->STextState.SetText("Idle", 24);
}
}
}
void TDevProperty::DrawMac()
{
unsigned char Num, Num10;
TMyString::sClear(TextDraw);
TMyString::sAddOnStr("MAC:", TextDraw);
for(int i=0; i<6; i++){
Num = RuntimeData.Mac[i] % 16;
Num10 = RuntimeData.Mac[i] / 16 % 16;
TMyString::sAddOnChar(stHexNum[Num10], TextDraw);
TMyString::sAddOnChar(stHexNum[Num], TextDraw);
if(i&0x01)TMyString::sAddOnChar(' ', TextDraw);
}
TextRender_string24(Lv.PanelSmall.Left + 256, Lv.PanelSmall.Top + 36, clNearWhite, SmallPanelColor, TextDraw);
}
void TDevProperty::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 TDevProperty::SetEnterMethod(int aMt)
{
EnterMethod = aMt;
if(EnterMethod){
Tag.InxMin = 2;
}else{
Tag.InxMin = 1;
}
Tag.Inx = Tag.InxMin;
}
void TDevProperty::SetEditMode(unsigned int aMode)
{
}
void TDevProperty::RenderBackGround(void)
{
RectFillRender(ContentGeometry.Left, ContentGeometry.Top, ContentGeometry.Right, ContentGeometry.Bottom, ContentColor);
}
void TDevProperty::RenderBackGround(unsigned int aClr)
{
RectFillRender(ContentGeometry.Left, ContentGeometry.Top, ContentGeometry.Right, ContentGeometry.Bottom, aClr);
}
void TDevProperty::DrawSelf(void)
{
RenderBackGround();
RectFillRender(Lv.Caption.Left, Lv.Caption.Top, Lv.Caption.Right, Lv.Caption.Bottom, CaptionColor);
if(LanguageEnCn == 0){
if(EnterMethod)
TextRender_string24(Lv.Caption.Left + 10, Lv.Caption.Top +4, clNearWhite, "回路->注册信息->单回路部件数据");
else
TextRender_string24(Lv.Caption.Left + 10, Lv.Caption.Top +4, clNearWhite, "回路->部件数据");
}else{
if(EnterMethod)
TextRender_string24(Lv.Caption.Left + 10, Lv.Caption.Top +4, clNearWhite, "Loop->Registed Info->Single Loop Device");
else
TextRender_string24(Lv.Caption.Left + 10, Lv.Caption.Top +4, clNearWhite, "Loop->Device");
}
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);
if(Lv.Panel.Active)RectFillRender(Lv.PanelSmall.Left, Lv.PanelSmall.Top, Lv.PanelSmall.Right, Lv.PanelSmall.Bottom, SmallPanelColor);
}
void TDevProperty::DrawCaption(void)
{
}
void TDevProperty::InitPanel()
{
int x,y,x2,y2, aW,aH,i;
x = 20;
y = 150;
x2 = 799;
y2 = 340;
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
if(LanguageEnCn == 1){
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("Pay Attention To The Tip", aPanel->SText[0].Text);
}
aPanel->SText[0].Enable = 1;
aPanel->SText[0].Visible = 1;
aPanel->Edit[ 0].Init(10,40,420,30,x,y,1,clNearBlack);
aPanel->Edit[ 0].Str.FromStr(IList->EditDescpShow.Str.Text);
for(i=0; i<1;i++){
aPanel->Edit[i].Enable = 1;
aPanel->Edit[i].Visible = 1;
aPanel->Edit[i].SetMaxLen(32);
aPanel->Edit[i].SetPstTail();
aPanel->Edit[i].Selected = 1;
}
aPanel->Show();
aPanel->Caption.Show();
aPanel->SText[0].Show();
aPanel->Edit[0].Show();
aPanel->Edit[0].ShowCursor();
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();
}
void TDevProperty::SetPath(unsigned char aCtlNum, unsigned char aPath0, unsigned char aPath1)
{
unsigned char tP0, tP1, tT;
this->CtlNum = aCtlNum;
if(aPath0 && (aPath0 <= dPORT_MAX_COUNT)) PortNumValid = 1; else PortNumValid = 0;
if(aPath1 && (aPath1 <= dEP_MAX_COUNT_PER_PORT)) AddrNumValid = 1; else AddrNumValid = 0;
this->Path0 = aPath0;
this->Path1 = aPath1;
tP0 = aPath0-1;
tP1 = aPath1-1;
if(Port[tP0].ExistTable[tP1] == 0xA5){
dType = Port[tP0].dTypeTable[tP1];
}else{
dType = 0;
}
}
void TDevProperty::Init4DType()
{
Data.Reset();
IList->TextOutClear();
RectFillRender(Lv.Grid.Left[0], Lv.Grid.Top[3], Lv.Grid.Right[3], Lv.Grid.Bottom[4], ContentColor);
if(dType == dgTYPE_SMOKE_DETECTOR){
PanelDrawData.TextDrawLine = 0;
HwDevType = htSmoker;
InitHtSmoker();
ResetTargetData();
RealTimeSendCmd(1);
SendReqMac();
CurveInit(Lv.Panel.Left+8, Lv.Panel.Top+8, Lv.Panel.Width-16, Lv.Panel.Heigh-16, 3);
CurveSetMargin(60, 2, 60, 2);
CurveSetGrid(6, 6, 50, 50);
CurveSetColor(clRed, clBlue, clPurple, clDeepGreen);
CurveSetScaling();
}else
if(dType == dgTYPE_TEMPE_DETECTOR){
PanelDrawData.TextDrawLine = 0;
HwDevType = htTempe;
InitHtTempe();
ResetTargetData();
CurveInit(Lv.Panel.Left+8, Lv.Panel.Top+8, Lv.Panel.Width-16, Lv.Panel.Heigh-16, 2);
CurveSetMargin(60, 2, 60, 2);
CurveSetGrid(6, 6, 50, 50);
CurveSetColor(clDeepGreen, clPurple, clDeepGreen, clDeepGreen);
CurveSetScaling();
}else
if(dType == dgTYPE_HAND_REPORT){
PanelDrawData.TextDrawLine = 0;
HwDevType = htHandPad;
InitHtHandPad();
ResetTargetData();
}else
if(dType == dgTYPE_FIRE_HydrantKp){
PanelDrawData.TextDrawLine = 0;
HwDevType = htHydrantPad;
InitHtHydrantPad();
ResetTargetData();
}else
if(dType == dgTYPE_IN_MODULE){
PanelDrawData.TextDrawLine = 0;
HwDevType = htModuleIn;
InitHtModuleIn();
ResetTargetData();
}else
if(dType == dgTYPE_OUT_MODULE){
PanelDrawData.TextDrawLine = 0;
HwDevType = htModuleOut;
InitHtModuleOut();
ResetTargetData();
}else
if(dType == dgTYPE_INOUT_MODULE_NonSource){
PanelDrawData.TextDrawLine = 0;
HwDevType = htModuleInOut;
InitHtModuleInOut();
ResetTargetData();
}else
if(dType == dgType_VAALRAM){
PanelDrawData.TextDrawLine = 0;
HwDevType = htVa;
InitHtVa();
ResetTargetData();
}else
if(dType == dgTYPE_DISPLAY_PAD){
PanelDrawData.TextDrawLine = 0;
HwDevType = htDisplayPad;
InitHtDisplayPad();
ResetTargetData();
}else
if(dType == dgTYPE_LINKAGE_POWERSUPLY){
PanelDrawData.TextDrawLine = 0;
HwDevType = htLinkagePowerSuply;
InitHtLinkagePowerSuply();
ResetTargetData();
}else{
PanelDrawData.TextDrawLine = 0;
HwDevType = htNoType;
ResetTargetData();
InitNoType();
}
}
void TDevProperty::UpdataOnlineData()
{
if(dType == dgTYPE_SMOKE_DETECTOR){
SmokerRt.IsWait4ReadSens = 1;
SmokerRt.IsWait4WriteSens = 0;
SmokerRt.RecRdy = 0;
SmokerRt.RecCmd = 0;
SmokerRt.WaitTick = 0;
SendSmokeCmdRead();
if(EdittingDescp == 0){
if(LanguageEnCn == 0){
TextRender_string24(IList->Edit[0].Bound.Right + 6, IList->Edit[0].Bound.Top + 4, clNearWhite, ItemColor, "获取中 ");
}else{
TextRender_string24(IList->Edit[0].Bound.Right + 6, IList->Edit[0].Bound.Top + 4, clNearWhite, ItemColor, "Reading ");
}
}
}else
if(dType == dgTYPE_TEMPE_DETECTOR){
TempeRt.IsWait4ReadSensType = 1;
TempeRt.RecRdy = 0;
TempeRt.RecCmd = 0;
TempeRt.WaitTick = 0;
SendTempeCmdRead();
if(EdittingDescp == 0){
if(LanguageEnCn == 0){
TextRender_string24(IList->Edit[0].Bound.Right + 6, IList->Edit[0].Bound.Top + 4, clNearWhite, ItemColor, "获取中 ");
}else{
TextRender_string24(IList->Edit[0].Bound.Right + 6, IList->Edit[0].Bound.Top + 4, clNearWhite, ItemColor, "Reading ");
}
}
}else
if(dType == dgTYPE_HAND_REPORT){
}else
if(dType == dgTYPE_FIRE_HydrantKp){
}else
if(dType == dgTYPE_IN_MODULE){
}else
if(dType == dgTYPE_OUT_MODULE){
}else
if(dType == dgTYPE_INOUT_MODULE_NonSource){
}else
if(dType == dgType_VAALRAM){
}else
if(dType == dgTYPE_DISPLAY_PAD){
}else
if(dType == dgTYPE_LINKAGE_POWERSUPLY){
}
}
void TDevProperty::RenewCommonInf()
{
unsigned char tP0, tP1, Found, tType, tSta;
unsigned int tAddr;
//Draw Port Num
IList->EditPortNum.Str.FromUInt2Dg(Path0);
IList->EditPortNum.SetPstTail();
IList->EditPortNum.Show();
if(IList->EditPortNum.Selected)IList->EditPortNum.ShowCursor();
//Draw Addr Num
IList->EditAddrNum.Str.FromUInt3Dg(Path1);
IList->EditAddrNum.SetPstTail();
IList->EditAddrNum.Show();
if(IList->EditAddrNum.Selected)IList->EditAddrNum.ShowCursor();
Found = 0;
if(CtlNum == MainCtl.fData.Split.MyNum){
//Draw If Registed
if( (Path0) && (Path0 <= dPORT_MAX_COUNT) ){
if( (Path1) && (Path1 <= dEP_MAX_COUNT_PER_PORT) ){
tP0 = Path0-1;
tP1 = Path1-1;
if(Port[tP0].ExistTable[tP1] == 0xA5){
Found = 1;
tType = Port[tP0].dTypeTable[tP1];
dType = tType;
tSta = Port[tP0].StateTable[tP1];
}
}
}
if(Found){
if(LanguageEnCn==0)IList->STextDType.SetText(StrTypeShortName[tType],24);
else IList->STextDType.SetText(StrTypeShortNameEn[tType],24);
DrawState(tSta);
if(LanguageEnCn == 0){
IList->STextRegisted.SetText("已注册", 24);
}else{
IList->STextRegisted.SetText("Reg", 24);
}
IsRegisted = 1;
}else{
IList->STextDType.SetText("---------", 24);
IList->STextState.SetText("----", 24);
if(LanguageEnCn == 0){
IList->STextRegisted.SetText("未注册", 24);
}else{
IList->STextRegisted.SetText("Not Reg", 24);
}
IsRegisted = 0;
}
tAddr = dAddrSdRam_Descp + (tP0 * 256 * 32) + (tP1 * 32);
for(int g=0; g<32; g++){
IList->EditDescpShow.Str.Text[g] = *(volatile unsigned char *)(tAddr + g);
if( (IList->EditDescpShow.Str.Text[g] == '\0') || (IList->EditDescpShow.Str.Text[g] == 0) ){
break;
}
}
IList->EditDescpShow.Str.Text[32] = '\0';
IList->EditDescpShow.Str.Text[33] = '\0';
IList->EditUserCode.Str.FromUInt8Dg(Port[tP0].UcList[tP1].Full);
IList->EditAreaAssign.Str.FromUInt4Dg(Port[tP0].Area[tP1]);
IList->STextDType.Show();
IList->STextState.Show();
IList->STextRegisted.Show();
IList->EditDescpShow.Show();
IList->EditUserCode.Show();
IList->EditAreaAssign.Show();
Check4Selected();
}else{
}
}
void TDevProperty::ReDrawCommonInf()
{
unsigned char tP0, tP1, Found, tType, tSta;
unsigned int tAddr;
//Draw Port Num
Found = 0;
if(CtlNum == MainCtl.fData.Split.MyNum){
//Draw If Registed
if( (Path0) && (Path0 <= dPORT_MAX_COUNT) ){
if( (Path1) && (Path1 <= dEP_MAX_COUNT_PER_PORT) ){
tP0 = Path0-1;
tP1 = Path1-1;
if(Port[tP0].ExistTable[tP1] == 0xA5){
Found = 1;
tType = Port[tP0].dTypeTable[tP1];
tSta = Port[tP0].StateTable[tP1];
}
}
}
if(Found){
if(LanguageEnCn==0)IList->STextDType.SetText(StrTypeShortName[tType],24);
else IList->STextDType.SetText(StrTypeShortNameEn[tType],24);
DrawState(tSta);
if(LanguageEnCn == 0){
IList->STextRegisted.SetText("已注册", 24);
}else{
IList->STextRegisted.SetText("Reg", 24);
}
IsRegisted = 1;
}else{
IList->STextDType.SetText("---------", 24);
IList->STextState.SetText("----", 24);
if(LanguageEnCn == 0){
IList->STextRegisted.SetText("未注册", 24);
}else{
IList->STextRegisted.SetText("Not Reg", 24);
}
IsRegisted = 0;
}
tAddr = dAddrSdRam_Descp + (tP0 * 256 * 32) + (tP1 * 32);
for(int g=0; g<32; g++){
IList->EditDescpShow.Str.Text[g] = *(volatile unsigned char *)(tAddr + g);
if( (IList->EditDescpShow.Str.Text[g] == '\0') || (IList->EditDescpShow.Str.Text[g] == 0) ){
break;
}
}
IList->EditDescpShow.Str.Text[32] = '\0';
IList->EditDescpShow.Str.Text[33] = '\0';
IList->EditUserCode.Str.FromUInt8Dg(Port[tP0].UcList[tP1].Full);
IList->EditAreaAssign.Str.FromUInt4Dg(Port[tP0].Area[tP1]);
IList->STextDType.Show();
IList->STextState.Show();
IList->STextRegisted.Show();
IList->EditDescpShow.Show();
IList->EditUserCode.Show();
IList->EditAreaAssign.Show();
}else{
}
}
void TDevProperty::ClearCommonInf()
{
IList->STextDType.SetText("------",24);
IList->STextState.SetText("----", 24);
IList->STextRegisted.SetText("------", 24);
IList->EditDescpShow.Str.Text[0] = '\0';
IList->EditDescpShow.Str.Text[1] = '\0';
IList->EditUserCode.Str.FromStr("--------");
IList->EditAreaAssign.Str.FromStr("----");
IList->STextDType.Show();
TCircle::sRender(IList->STextState.Bound.Left -12, IList->STextState.Bound.Top +14, 10, ItemColor, 0xF);
IList->STextState.Show();
IList->STextRegisted.Show();
IList->EditDescpShow.Show();
IList->EditUserCode.Show();
IList->EditAreaAssign.Show();
}
void TDevProperty::ReLoadAndDrawDescp()
{
unsigned char tP0, tP1, Ava, tType, tSta;
unsigned int tAddr;
Ava = 0;
if(CtlNum == MainCtl.fData.Split.MyNum){
//Draw If Registed
if( (Path0) && (Path0 <= dPORT_MAX_COUNT) ){
if( (Path1) && (Path1 <= dEP_MAX_COUNT_PER_PORT) ){
tP0 = Path0-1;
tP1 = Path1-1;
Ava = 1;
}
}
if(Ava){
tAddr = dAddrSdRam_Descp + (tP0 * 256 * 32) + (tP1 * 32);
for(int g=0; g<32; g++){
IList->EditDescpShow.Str.Text[g] = *(volatile unsigned char *)(tAddr + g);
if( (IList->EditDescpShow.Str.Text[g] == '\0') || (IList->EditDescpShow.Str.Text[g] == 0) ){
break;
}
}
IList->EditDescpShow.Str.Text[32] = '\0';
IList->EditDescpShow.Str.Text[33] = '\0';
IList->EditDescpShow.Show();
}
}
}
void TDevProperty::DrawCommonInfTitle()
{
DrawCommonInfTitleFixText();
IList->STextDType.Init(Lv.Grid.Left[0] + 400, Lv.Grid.Top[0] + 2, 240, 30, 0, 0, clNearWhite, ItemColor);
IList->STextState.Init(Lv.Grid.Left[0] + 730, Lv.Grid.Top[0] + 2, 70, 30, 0, 0, clNearWhite, ItemColor);
IList->STextRegisted.Init(Lv.Grid.Left[0] + 160, Lv.Grid.Top[0] + 36, 120, 30, 0, 0, clNearWhite, ItemColor);
IList->STextCtlNum.Init(Lv.Grid.Left[0] + 236, Lv.Grid.Top[0] + 6, 120, 30, 0, 0, clNearWhite, ItemColor);
IList->EditPortNum.Init(Lv.Grid.Left[0] + 86, Lv.Grid.Top[0] + 2, 50, 30, 0, 0, 1, clNearWhite);
IList->EditAddrNum.Init(Lv.Grid.Left[0] + 86, Lv.Grid.Top[0] + 36, 50, 30, 0, 0, 1, clNearWhite);
IList->EditDescpShow.Init(Lv.Grid.Left[0] + 390, Lv.Grid.Top[0] + 36, 400, 30, 0, 0, 1, clNearWhite);
IList->STextDType.Enable = 1;
IList->STextDType.Visible =1;
IList->STextState.Enable = 1;
IList->STextState.Visible =1;
IList->STextRegisted.Enable = 1;
IList->STextRegisted.Visible =1;
IList->STextCtlNum.Enable = 1;
IList->STextCtlNum.Visible =1;
IList->EditPortNum.SetMaxLen(2);
IList->EditAddrNum.SetMaxLen(3);
if(EnterMethod)
IList->EditPortNum.Enable = 0;
else
IList->EditPortNum.Enable = 1;
IList->EditPortNum.Visible = 1;
IList->EditAddrNum.Enable = 1;
IList->EditAddrNum.Visible = 1;
IList->EditDescpShow.Enable = 1;
IList->EditDescpShow.Visible = 1;
IList->EditDescpShow.IsShowCursor = 0;
//User Code & Area Assign
if(LanguageEnCn == 0){
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, "分区号");
}else{
TextRender_string24(Lv.Grid.Left[1] + 10, Lv.Grid.Top[1] +6, clNearWhite, "AuxID");
TextRender_string24(Lv.Grid.Left[1] + 10, Lv.Grid.Top[1] +40, clNearWhite, "Zone");
}
IList->EditUserCode.Init(Lv.Grid.Left[1] + 84, Lv.Grid.Top[1] + 6, 108, 30, 0, 0, 1, clNearWhite);
IList->EditAreaAssign.Init(Lv.Grid.Left[1] + 84, Lv.Grid.Top[1] + 40, 108, 30, 0, 0, 1, clNearWhite);
IList->EditUserCode.Enable = 1;
IList->EditUserCode.Visible =1;
IList->EditUserCode.SetMaxLen(8);
IList->EditAreaAssign.Enable = 1;
IList->EditAreaAssign.Visible =1;
IList->EditAreaAssign.SetMaxLen(4);
}
void TDevProperty::RedrawCommonInfTitle()
{
DrawCommonInfTitleFixText();
IList->EditPortNum.Show();
IList->EditAddrNum.Show();
}
void TDevProperty::Redraw4DescpEdit()
{
IList->EditDescpShow.Selected = 1;
IList->EditDescpShow.SetPstTail();
IList->EditDescpShow.Show();
RectFillRender(aPanel->Bound.Left, aPanel->Bound.Top, aPanel->Bound.Right, aPanel->Bound.Bottom, ContentColor);
if( (HwDevType == htVa ) || (HwDevType == htModuleIn) || (HwDevType == htModuleInOut) ) {
for(int i=1; i<3; i++)RectFillRender(Lv.Grid.Left[i], Lv.Grid.Top[i], Lv.Grid.Right[i], Lv.Grid.Bottom[i], ItemColor);
}else{
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);
if(Lv.Panel.Active)RectFillRender(Lv.PanelSmall.Left, Lv.PanelSmall.Top, Lv.PanelSmall.Right, Lv.PanelSmall.Bottom, SmallPanelColor);
if(LanguageEnCn == 0){
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, "分区号");
}else
if(LanguageEnCn == 1){
TextRender_string24(Lv.Grid.Left[1] + 10, Lv.Grid.Top[1] +6, clNearWhite, "AuxID");
TextRender_string24(Lv.Grid.Left[1] + 10, Lv.Grid.Top[1] +40, clNearWhite, "Zone");
}
IList->EditUserCode.Show();
IList->EditAreaAssign.Show();
switch(HwDevType){
case htNoType:
EditDescpReturnHtNoType();
break;
case htSmoker:
EditDescpReturnHtSmoker();
break;
case htTempe:
EditDescpReturnHtTempe();
break;
case htHandPad:
EditDescpReturnHtHandPad();
break;
case htHydrantPad:
EditDescpReturnHtHydrantPad();
break;
case htModuleIn:
EditDescpReturnHtModuleIn();
break;
case htModuleInOut:
EditDescpReturnHtModuleInOut();
break;
case htModuleOut:
EditDescpReturnHtModuleOut();
break;
case htVa:
EditDescpReturnHtVa();
break;
case htDisplayPad:
EditDescpReturnHtDisplayPad();
break;
case htLinkagePowerSuply:
EditDescpReturnHtLinkagePowerSuply();
break;
default :
break;
}
}
void TDevProperty::Redraw4NewLoad()
{
Data.Reset();
IList->TextOutClear();
switch(HwDevType){
case htNoType:
Redraw4NoTypeNewLoad();
break;
case htSmoker:
Redraw4SmokerNewLoad();
break;
case htTempe:
Redraw4TempeNewLoad();
break;
case htHandPad:
Redraw4HandPadNewLoad();
break;
case htHydrantPad:
Redraw4HydrantPadNewLoad();
break;
case htModuleIn:
Redraw4ModuleInNewLoad();
break;
case htModuleInOut:
Redraw4ModuleInOutNewLoad();
break;
case htModuleOut:
Redraw4ModuleOutNewLoad();
break;
case htVa:
Redraw4VaNewLoad();
break;
case htDisplayPad:
Redraw4DisplayPadNewLoad();
break;
case htLinkagePowerSuply:
Redraw4LinkagePowerSuplyNewLoad();
break;
default :
break;
}
}
TGuiMsgReturn TDevProperty::KeyIn(unsigned char aKey)
{
TGuiMsgReturn aMsg = guiMsgNone;
TGuiMsgReturn SubRtnMsg = guiMsgNone;
TGuiMsgReturn PmsRtnMsg = guiMsgNone;
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();
}
}else
if(EdittingDescp){
const char *p;
if(aKey == dfKEY_SETUP){
//Save and return
TMyString::sFromStr(aPanel->Edit[0].Str.Text, IList->EditDescpShow.Str.Text);
TMyString::sBrokeFixLen(IList->EditDescpShow.Str.Text, 32);
Redraw4DescpEdit();
EdittingDescp = 0;
}else
if(IsExtInput){
if(aKey == dfKEY_ENCN){
CnInput.KeyIn(aKey);
if(0){
IsExtInput = 1;
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 The Numbers Directly", aPanel->SText[0].Text);
}
aPanel->SText[0].Show();
}
}else
if(aKey == VK_RETURN){
//Just return
Redraw4DescpEdit();
EdittingDescp = 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("Enter The Numbers Directly", aPanel->SText[0].Text);
}
aPanel->SText[0].Show();
}
break;
case VK_EXECUTE:
break;
case VK_RETURN:
Redraw4DescpEdit();
EdittingDescp = 0;
break;
}
}
}else{
if( (aKey == dfKEY_SETUP) && (Tag.Inx == 3) ){
//Descp Show
PermissionCmd = pcEditDescp;
if(SystemPermission >2){
PermissionCmdGO();
}else{
IsPermission = 1;
PmsIntervene4Gui.Show4Gui(Lv.Panel.Left + 16, Lv.Panel.Top + 16, Lv.Panel.Width -34, 140, 3);
}
}
switch(HwDevType){
case htNoType:
SubRtnMsg = KeyInHtNoType(aKey);
break;
case htSmoker:
SubRtnMsg = KeyInHtSmoker(aKey);
break;
case htTempe:
SubRtnMsg = KeyInHtTempe(aKey);
break;
case htHandPad:
SubRtnMsg = KeyInHtHandPad(aKey);
break;
case htHydrantPad:
SubRtnMsg = KeyInHtHydrantPad(aKey);
break;
case htModuleIn:
SubRtnMsg = KeyInHtModuleIn(aKey);
break;
case htModuleInOut:
SubRtnMsg = KeyInHtModuleInOut(aKey);
break;
case htModuleOut:
SubRtnMsg = KeyInHtModuleOut(aKey);
break;
case htVa:
SubRtnMsg = KeyInHtVa(aKey);
break;
case htDisplayPad:
SubRtnMsg = KeyInHtDisplayPad(aKey);
break;
case htLinkagePowerSuply:
SubRtnMsg = KeyInHtLinkagePowerSuply(aKey);
break;
default :
SubRtnMsg = guiMsgReturn;
break;
}
return SubRtnMsg;
}
return aMsg;
}
TGuiMsgReturn TDevProperty::KeyInCommonEdit(unsigned char aKey)
{
int tVal;
unsigned char tP0, tP1, NewType, IsNewTarget;
TGuiMsgReturn aMsg = guiMsgNone;
int HasPrcKey = 0;
if(Tag.Inx == 0){
//Ctl Num
}else
if(Tag.Inx == 1){
//Port Num
IsNewTarget = 0;
IList->EditPortNum.KeyIn(aKey);
tVal = IList->EditPortNum.Str.ToInteger();
if( (tVal >0) && (tVal <= dPORT_MAX_COUNT) )PortNumValid = 1; else PortNumValid = 0;
if( PortNumValid && AddrNumValid){
if(Path0 != tVal){
ClearReqDataState();
Path0 = tVal;
IList->EditPortNum.SelectedColor = clBlue;
ReDrawCommonInf();
Check4Selected();
RealTimeSendCmdAbort();
tP0 = Path0-1;
tP1 = Path1-1;
if(Port[tP0].ExistTable[tP1] == 0xA5){
NewType = Port[tP0].dTypeTable[tP1];
}else{
NewType = 0;
}
if(NewType == dType){
//Load New Addr Inf
Redraw4NewLoad();
UpdataOnlineData();
ResetTargetData();
}else{
//Load 4 New Type
dType = NewType;
Init4DType();
}
}
}else{
ClearReqDataState();
Path0 = 0;
if(dType != 0){
dType = 0;
Init4DType();
}
RealTimeSendCmdAbort();
IList->EditPortNum.SelectedColor = clRed;
ClearCommonInf();
}
IList->EditPortNum.Show();
}else
if(Tag.Inx == 2){
//Addr Num
if(aKey == VK_RIGHT){
if(IList->EditAddrNum.Pst >= IList->EditAddrNum.Str.GetEndPst()){
if( PortNumValid && AddrNumValid){
IList->EditAddrNum.Selected = 0;
IList->EditAddrNum.Show();
Tag.Inx = 3;
IList->EditDescpShow.Selected = 1;
IList->EditDescpShow.Show();
HasPrcKey = 1;
}
}
}
if(HasPrcKey == 0){
IsNewTarget = 0;
IList->EditAddrNum.KeyIn(aKey);
tVal = IList->EditAddrNum.Str.ToInteger();
if( (tVal >0) && (tVal <= dEP_MAX_COUNT_PER_PORT) )AddrNumValid = 1; else AddrNumValid = 0;
if( PortNumValid && AddrNumValid){
if(Path1 != tVal){
ClearReqDataState();
Path1 = tVal;
IList->EditAddrNum.SelectedColor = clBlue;
ReDrawCommonInf();
Check4Selected();
RealTimeSendCmdAbort();
tP0 = Path0-1;
tP1 = Path1-1;
if(Port[tP0].ExistTable[tP1] == 0xA5){
NewType = Port[tP0].dTypeTable[tP1];
}else{
NewType = 0;
}
if(NewType == dType){
//Load New Addr Inf
Redraw4NewLoad();
UpdataOnlineData();
}else{
//Load 4 New Type
dType = NewType;
Init4DType();
}
ResetTargetData();
}
}else{
ClearReqDataState();
Path1 = 0;
if(dType != 0){
dType = 0;
Init4DType();
}
RealTimeSendCmdAbort();
IList->EditAddrNum.SelectedColor = clRed;
ClearCommonInf();
}
IList->EditAddrNum.Show();
}
}else
if(Tag.Inx == 3){
//Descp Show
if(aKey == VK_LEFT){
IList->EditAddrNum.Selected = 1;
IList->EditAddrNum.SetPstTail();
IList->EditAddrNum.Show();
IList->EditAddrNum.ShowCursor();
Tag.Inx = 2;
IList->EditDescpShow.Selected = 0;
IList->EditDescpShow.Show();
}
}else
if(Tag.Inx == 4){
//User Code
IList->EditUserCode.KeyIn(aKey);
IList->EditUserCode.Show();
}else
if(Tag.Inx == 5){
//Area
IList->EditAreaAssign.KeyIn(aKey);
IList->EditAreaAssign.Show();
}
return aMsg;
}
TGuiMsgReturn TDevProperty::KeyInCommonEnter(unsigned char aKey)
{
int aVal;
TGuiMsgReturn aMsg = guiMsgNone;
if(Tag.Inx == 0){
//Ctl Num
}else
if(Tag.Inx == 1){
//Port Num
}else
if(Tag.Inx == 2){
//Addr Num
}else
if(Tag.Inx == 3){
//Descp Show
PermissionCmd = pcWriteDescp;
if(SystemPermission >2){
PermissionCmdGO();
}else{
IsPermission = 1;
PmsIntervene4Gui.Show4Gui(Lv.Panel.Left + 16, Lv.Panel.Top + 16, Lv.Panel.Width -34, 140, 3);
}
}else
if(Tag.Inx == 4){
//User Code
if(SystemPermission >2){
if( Path0 && Path1 && (Path0 <= dPORT_MAX_COUNT) && (Path1<=dEP_MAX_COUNT_PER_PORT) ){
aVal = IList->EditUserCode.Str.ToInteger();
if( (aVal < 100000000) && (aVal>0) ){
aUcSetting.Full = aVal;
WriteAUserCode2Flash(Path0, Path1, aUcSetting);
ReadAllEpUserCode();
if(aVal == Port[Path0-1].UcList[Path1-1].Full){
if(LanguageEnCn == 0){
TextRender_string24(IList->EditUserCode.Bound.Right + 2, IList->EditUserCode.Bound.Top +4, clNearWhite, ItemColor, "保存成功");
}else{
TextRender_string24(IList->EditUserCode.Bound.Right + 2, IList->EditUserCode.Bound.Top +4, clNearWhite, ItemColor, "Save OK ");
}
}else{
if(LanguageEnCn == 0){
TextRender_string24(IList->EditUserCode.Bound.Right + 2, IList->EditUserCode.Bound.Top +4, clNearWhite, ItemColor, "保存失败");
}else{
TextRender_string24(IList->EditUserCode.Bound.Right + 2, IList->EditUserCode.Bound.Top +4, clNearWhite, ItemColor, "Save Err");
}
}
IList->EditUserCode.Str.FromUInt8Dg(Port[Path0-1].UcList[Path1-1].Full);
IList->EditUserCode.Show();
}
}
}else{
ClearSelected();
IsPermission = 1;
PermissionCmd = pcWriteUserCode;
PmsIntervene4Gui.Show4Gui(Lv.Panel.Left + 16, Lv.Panel.Top + 16, Lv.Panel.Width -34, 140, 3);
}
}else
if(Tag.Inx == 5){
//Area
aVal = IList->EditAreaAssign.Str.ToInteger();
aVal &= 0x0000FFFF;
AreaNum = aVal;
if((AreaNum >-1) && (AreaNum <= dAreaCountMax)){
if(SystemPermission >2){
if( Path0 && Path1 && (Path0 <= dPORT_MAX_COUNT) && (Path1<=dEP_MAX_COUNT_PER_PORT) ){
PermissionCmd = pcWriteAreaInx;
PermissionCmdGO();
}
}else{
ClearSelected();
IsPermission = 1;
PermissionCmd = pcWriteAreaInx;
PmsIntervene4Gui.Show4Gui(Lv.Panel.Left + 16, Lv.Panel.Top + 16, Lv.Panel.Width -34, 140, 3);
}
}
}
return aMsg;
}
void TDevProperty::ReadAllEpUserCode()
{
Record.ReadDevUserSet();
}
void TDevProperty::ResetTargetData()
{
RuntimeData.Reset();
IList->RealtimeData.Reset();
IList->TextOutClear();
PanelDrawData.ResetNotFull();
switch(HwDevType){
case htNoType:
break;
case htSmoker:
RealTimeSendCmd(1);
SendSmokeCmdRead();
SendReqMac();
break;
case htTempe:
RealTimeSendCmd(1);
SendTempeCmdRead();
SendReqMac();
break;
case htHandPad:
RealTimeSendCmd(1);
SendReqMac();
break;
case htHydrantPad:
RealTimeSendCmd(1);
SendReqMac();
break;
case htModuleIn:
RealTimeSendCmd(1);
SendModuleSignalInOutTypeRead();
SendReqMac();
break;
case htModuleInOut:
RealTimeSendCmd(1);
SendModuleSignalInOutTypeRead();
SendReqMac();
break;
case htModuleOut:
RealTimeSendCmd(1);
SendModuleSignalInOutTypeRead();
SendReqMac();
break;
case htVa:
RealTimeSendCmd(1);
SendVaSettingRead();
SendReqMac();
break;
case htDisplayPad:
RealTimeSendCmd(1);
SendReqMac();
break;
case htLinkagePowerSuply:
RealTimeSendCmd(1);
SendReqMac();
break;
default :
break;
}
}
void TDevProperty::PushInnerCanData(unsigned char aCmd, unsigned char *pData)
{
int i;
unsigned char Inx = pData[3];
if(aCmd == cmQueryMacCode){
if(pData[0] == 1){
if( (pData[2] == Path0) && (pData[3] == Path1) ) {
RuntimeData.MacPath0 = Path0;
RuntimeData.MacPath1 = Path1;
RuntimeData.MacHasUpdate |= 1;
RuntimeData.Mac[0] = pData[4];
RuntimeData.Mac[1] = pData[5];
RuntimeData.Mac[2] = pData[6];
RuntimeData.Mac[3] = pData[7];
}
}else
if(pData[0] == 2){
if( (pData[2] == Path0) && (pData[3] == Path1) ) {
RuntimeData.MacPath0 = Path0;
RuntimeData.MacPath1 = Path1;
RuntimeData.MacHasUpdate |= 2;
RuntimeData.Mac[4] = pData[4];
RuntimeData.Mac[5] = pData[5];
RuntimeData.Mac[6] = pData[6];
RuntimeData.Mac[7] = 0;
}
}
return;
}
switch(HwDevType){
case htNoType:
break;
case htSmoker:
PushSmokeCanData(aCmd, pData);
break;
case htTempe:
PushTempeCanData(aCmd, pData);
break;
case htHandPad:
break;
case htHydrantPad:
break;
case htModuleIn:
PushModuleInCanData(aCmd, pData);
break;
case htModuleInOut:
PushModuleInOutCanData(aCmd, pData);
break;
case htModuleOut:
PushModuleOutCanData(aCmd, pData);
break;
case htVa:
PushVaCanData(aCmd, pData);
break;
case htDisplayPad:
PushDisplayPadCanData(aCmd, pData);
break;
case htLinkagePowerSuply:
PushLinkagePowerSuplyCanData(aCmd, pData);
break;
default :
break;
}
}
void TDevProperty::PushInnerCanRuntimeData(unsigned char aCmd, unsigned char *pData)
{
int i;
switch(HwDevType){
case htNoType:
break;
case htSmoker:
break;
case htTempe:
break;
case htHandPad:
break;
case htHydrantPad:
break;
case htModuleIn:
break;
case htModuleInOut:
break;
case htModuleOut:
break;
case htVa:
break;
case htDisplayPad:
break;
case htLinkagePowerSuply:
break;
default :
break;
}
}
void TDevProperty::Show(void)
{
IsShow = 1;
DrawSelf();
}
void TDevProperty::Task1000Ms()
{
if(IsShow == 0) return;
if( (Path0) && (Path1 ) ){
if( (Path0 <= dPORT_MAX_COUNT) && (Path1 <= dEP_MAX_COUNT_PER_PORT) ){
if(IsRegisted){
const unsigned char tSta = Port[Path0-1].StateTable[Path1-1];
DrawState(tSta);
IList->STextState.Show();
}
}
}
switch(HwDevType){
case htNoType:
break;
case htSmoker:
Task1000MsSmoker();
break;
case htTempe:
Task1000MsTempe();
break;
case htHandPad:
Task1000MsHandPad();
break;
case htHydrantPad:
Task1000MsHydrantPad();
break;
case htModuleIn:
Task1000MsModuleIn();
break;
case htModuleInOut:
Task1000MsModuleInOut();
break;
case htModuleOut:
Task1000MsModuleOut();
break;
case htVa:
Task1000MsVa();
break;
case htDisplayPad:
Task1000MsDisplayPad();
break;
case htLinkagePowerSuply:
Task1000MsLinkagePowerSuply();
break;
default :
break;
}
}
void TDevProperty::RunTimeSendCmd(const int StartStop)
{
TCanHeaderID aIde;
unsigned int i;
unsigned int Len;
for(i=0; i<8; i++){
CommData[i] = 0;
}
CommData[2] = Path0;
CommData[3] = Path1;
if(StartStop != 0){
aIde.BitF.Cmd = cmDeviceRuntimeDataStart;
}else{
aIde.BitF.Cmd = cmDeviceRuntimeDataStop;
}
Len = 4;
aIde.BitF.Pri = 1;
aIde.BitF.sLvl = 1;
aIde.BitF.dLvl = 7;
aIde.BitF.sAddr = 0;
aIde.BitF.dAddr = 127;
InnerCan.Buf4GuiSend.Insert(aIde, CommData, Len);
}
void TDevProperty::RealTimeSendCmd(const int StartStop)
{
TCanHeaderID aIde;
unsigned int i;
unsigned int Len;
for(i=0; i<8; i++){
CommData[i] = 0;
}
CommData[2] = Path0;
CommData[3] = Path1;
if(StartStop != 0){
aIde.BitF.Cmd = cmQueryRuntimeData;
}else{
aIde.BitF.Cmd = cmQueryAbout;
}
Len = 4;
aIde.BitF.Pri = 1;
aIde.BitF.sLvl = 1;
aIde.BitF.dLvl = 7;
aIde.BitF.sAddr = 0;
aIde.BitF.dAddr = 127;
InnerCan.Buf4GuiSend.Insert(aIde, CommData, Len);
}
void TDevProperty::RealTimeSendCmdAbort()
{
TCanHeaderID aIde;
unsigned char cVal;
unsigned int i;
unsigned int Len;
int iVal;
unsigned char aP0,aP1;
for(i=0; i<8; i++){
CommData[i] = 0;
}
aIde.BitF.Cmd = cmQueryAbout;
Len = 4;
//Prm
CommData[0] = 0;
CommData[1] = 0;
CommData[2] = Path0;
CommData[3] = Path1;
aIde.BitF.Pri = 1;
aIde.BitF.sLvl = 1;
aIde.BitF.dLvl = 7;
aIde.BitF.sAddr = 0;
aIde.BitF.dAddr = 127;
InnerCan.Buf4GuiSend.Insert(aIde, CommData, Len);
}
void TDevProperty::SendReqMac()
{
TCanHeaderID aIde;
unsigned char cVal;
unsigned int i;
unsigned int Len;
int iVal;
unsigned char aP0,aP1;
for(i=0; i<8; i++){
CommData[i] = 0;
}
aIde.BitF.Cmd = cmQueryMacCode;
Len = 4;
//Prm
CommData[0] = 0;
CommData[1] = MainCtl.fData.Split.MyNum;
CommData[2] = Path0;
CommData[3] = Path1;
aIde.BitF.Pri = 1;
aIde.BitF.sLvl = 1;
aIde.BitF.dLvl = 7;
aIde.BitF.sAddr = 0;
aIde.BitF.dAddr = 127;
InnerCan.Buf4GuiSend.Insert(aIde, CommData, Len);
}
void TDevProperty::SendCmdLightOn()
{
TCanHeaderID aIde;
unsigned char cVal;
unsigned int i;
unsigned int Len;
int iVal;
unsigned char aP0,aP1;
for(i=0; i<8; i++){
CommData[i] = 0;
}
aIde.BitF.Cmd = cmDevLightOn;
Len = 5;
//Prm
CommData[0] = 0;
CommData[1] = MainCtl.fData.Split.MyNum;
CommData[2] = Path0;
CommData[3] = Path1;
CommData[4] = 1;
CommData[5] = 0;
aIde.BitF.Pri = 1;
aIde.BitF.sLvl = 1;
aIde.BitF.dLvl = 7;
aIde.BitF.sAddr = 0;
aIde.BitF.dAddr = 127;
if( (Path0) && (Path0<=dPORT_MAX_COUNT) && (Path1) ){
aP0 = Path0-1;
aP1 = Path1-1;
Port[aP0].HasSetLightOn[aP1] = 1;
}
InnerCan.Buf4GuiSend.Insert(aIde, CommData, Len);
}
void TDevProperty::SendCmdLightOff()
{
TCanHeaderID aIde;
unsigned char cVal;
unsigned int i;
unsigned int Len;
int iVal;
unsigned char aP0,aP1;
for(i=0; i<8; i++){
CommData[i] = 0;
}
aIde.BitF.Cmd = cmDevLightOn;
Len = 6;
//Prm
CommData[0] = 0;
CommData[1] = MainCtl.fData.Split.MyNum;
CommData[2] = 255;
CommData[3] = 255;
CommData[4] = 0;
CommData[5] = 0;
aIde.BitF.Pri = 1;
aIde.BitF.sLvl = 1;
aIde.BitF.dLvl = 7;
aIde.BitF.sAddr = 0;
aIde.BitF.dAddr = 127;
InnerCan.Buf4GuiSend.Insert(aIde, CommData, Len);
}
void TDevProperty::SendCmdMuteBroadcast()
{
TCanHeaderID aIde;
unsigned char cVal;
unsigned int i;
unsigned int Len;
int iVal;
unsigned char aP0,aP1;
for(i=0; i<8; i++){
CommData[i] = 0;
}
aIde.BitF.Cmd = cmDevMute;
Len = 4;
//Prm
CommData[0] = 0;
CommData[1] = MainCtl.fData.Split.MyNum;
CommData[2] = 255;
CommData[3] = 255;
aIde.BitF.Pri = 1;
aIde.BitF.sLvl = 1;
aIde.BitF.dLvl = 7;
aIde.BitF.sAddr = 0;
aIde.BitF.dAddr = 127;
InnerCan.Buf4GuiSend.Insert(aIde, CommData, Len);
}
void TDevProperty::SendCmdMute()
{
TCanHeaderID aIde;
unsigned char cVal;
unsigned int i;
unsigned int Len;
int iVal;
unsigned char aP0,aP1;
for(i=0; i<8; i++){
CommData[i] = 0;
}
aIde.BitF.Cmd = cmDevMute;
Len = 4;
//Prm
CommData[0] = 0;
CommData[1] = MainCtl.fData.Split.MyNum;
CommData[2] = Path0;
CommData[3] = Path1;
aIde.BitF.Pri = 1;
aIde.BitF.sLvl = 1;
aIde.BitF.dLvl = 7;
aIde.BitF.sAddr = 0;
aIde.BitF.dAddr = 127;
InnerCan.Buf4GuiSend.Insert(aIde, CommData, Len);
}
void TDevProperty::RuntimeDataPrc(u8 aInx, u8 D0, u8 D1, u8 D2, u8 D3)
{
unsigned short tDa;
if(aInx ==0){
RuntimeData.voltage = D1;
switch(HwDevType){
case htSmoker: tDa = D2; tDa<<=8; tDa |= D3; RuntimeData.SmokerBL = tDa;break;
case htTempe: tDa = D2; tDa<<=8; tDa |= D3; RuntimeData.TempeOriginData = tDa;break;
case htModuleIn: RuntimeData.ModuleInAdVal = D2; break;
case htModuleInOut: RuntimeData.ModuleInAdVal = D2; break;
case htDisplayPad: tDa = D2; tDa<<=8; tDa |= D3; RuntimeData.DisplayPadAlramCount = tDa; break;
case htLinkagePowerSuply:tDa = D2; tDa<<=8; tDa |= D3; RuntimeData.BatVoltage = tDa; break;
default :
break;
}
if(HwDevType == htSmoker){
Curve.Smoke.DataAva[0] =1;
Curve.Smoke.Blue = RuntimeData.SmokerBL;
}else
if(HwDevType == htTempe){
Curve.Tempe.DataAva[0] =1;
Curve.Tempe.Val = RuntimeData.TempeOriginData;
}
}else
if(aInx == 1){
switch(HwDevType){
case htSmoker: tDa = D0; tDa<<=8; tDa |= D1; RuntimeData.SmokerIR = tDa;break;
case htTempe: RuntimeData.TempeCelsiusData = D0; break;
case htLinkagePowerSuply:
RuntimeData.BatEnergy = D0;
tDa = D1; tDa<<=8; tDa |= D2;
RuntimeData.OutputVoltage = tDa;
RuntimeData.OutputCurrent = D3;
RuntimeData.OutputCurrent<<=8;
break;
default :
break;
}
if(HwDevType == htSmoker){
Curve.Smoke.DataAva[1] =1;
Curve.Smoke.IR = RuntimeData.SmokerIR;
}else
if(HwDevType == htTempe){
Curve.Tempe.DataAva[1] =1;
Curve.Tempe.Celsius = RuntimeData.TempeCelsiusData;
if(Curve.Tempe.DataAva[0]){
CurvePutDataTempe(Curve.Tempe.Val,Curve.Tempe.Celsius,0,0);
Curve.HasUpdate =1;
}
}
Curve.Tempe.DataAva[0] =0;
Curve.Tempe.DataAva[1] =0;
}else
if(aInx == 2){
switch(HwDevType){
case htSmoker:
tDa = D2; tDa<<=8; tDa |= D3; RuntimeData.SmokerPrmM = tDa;
Curve.Smoke.MVal = RuntimeData.SmokerPrmM;
Curve.Smoke.DataAva[2] =1;
if(Curve.Smoke.DataAva[0] && Curve.Smoke.DataAva[1]){
CurvePutDataSmoke(Curve.Smoke.IR, Curve.Smoke.Blue, Curve.Smoke.MVal, 0);
Curve.HasUpdate =1;
}
break;
case htTempe:
//Data.GotTempeSensType[0] = 0xF1;
//Data.GotTempeSensType[1] = Path0;
//Data.GotTempeSensType[2] = Path1;
//Data.GotTempeSensType[3] = D1;
break;
case htLinkagePowerSuply:
RuntimeData.OutputCurrent |= D0;
RuntimeData.PwrLoaddingPercent = D1;
break;
default :
break;
}
Curve.Smoke.DataAva[0] =0;
Curve.Smoke.DataAva[1] =0;
Curve.Smoke.DataAva[2] =0;
}else
if(aInx == 3){
switch(HwDevType){
case htSmoker:
break;
default :
break;
}
}
if(Curve.HasUpdate){
if(PanelIsUsingText == 0){
if(Curve.HasDrawOutline == 0){
if( (EdittingDescp == 0) && (IsPermission == 0) )
if( (IsSelfChecking == 0) && (PmsIntervene.IsShow == 0) )
CurveDraw(1);
}else{
if( (EdittingDescp == 0) && (IsPermission == 0) )
if( (IsSelfChecking == 0) && (PmsIntervene.IsShow == 0) )
CurveDraw(0);
}
}
}
}
void TDevProperty::PushOneRealDataReport(u8 aP0, u8 aP1, u8 aInx, u8 D0, u8 D1, u8 D2, u8 D3)
{
unsigned int aAddr, i, Num, Num10, Pst;
unsigned char Da[4];
int x,y;
const int MaxLen=41;
if(IsShow == 0)return;
if(aP0 != Path0)return;
if(aP1 != Path1)return;
RuntimeDataPrc(aInx, D0,D1,D2,D3);
Da[0] = D0;
Da[1] = D1;
Da[2] = D2;
Da[3] = D3;
if(PanelDrawData.TextDrawLine >7){
PanelDrawData.Reset();
}
if(aInx == 0){
PanelDrawData.TextDrawLine++;
if(PanelDrawData.TextDrawLine >7){
PanelDrawData.Reset();
}
if(PanelDrawData.TextDrawLine == 0){
for(int z=0; z<8; z++){
for(int g=0; g<80; g++){
IList->TextOut[z][g] = '\0';
}
}
if( (EdittingDescp == 0) && (IsPermission == 0) ){
if( PanelIsUsingText && (IsSelfChecking == 0) && (PmsIntervene.IsShow == 0) ){
RectFillRender(Lv.Panel.Left, Lv.Panel.Top, Lv.Panel.Right, Lv.Panel.Bottom, PanelColor);
}
}
}
for(int g=0; g<MaxLen; g++){
IList->TextOut[PanelDrawData.TextDrawLine][g] = ' ';
}
for(int g=MaxLen; g<80; g++){
IList->TextOut[PanelDrawData.TextDrawLine][g] = '\0';
}
y = Lv.Panel.Top + 1;
y = y + PanelDrawData.TextDrawLine * 27;
x = Lv.Panel.Left + 2;
TMyString::sClear(TextTmp);
PanelDrawData.UsingTextHex = PanelDrawData.DesertTextHex;
if(PanelDrawData.IsHexList[PanelDrawData.TextDrawLine] == dtNone){
if(PanelDrawData.UsingTextHex)PanelDrawData.IsHexList[PanelDrawData.TextDrawLine] =dtHex;
else PanelDrawData.IsHexList[PanelDrawData.TextDrawLine] =dtDec;
}
if(PanelDrawData.IsHexList[PanelDrawData.TextDrawLine] == dtHex){
for(i=0; i<4; i++){
Pst= 0 + i*3;
Num = Da[i] % 16;
Num10 = Da[i] / 16 % 16;
IList->TextOut[PanelDrawData.TextDrawLine][Pst+0] = stHexNum[Num10];
IList->TextOut[PanelDrawData.TextDrawLine][Pst+1] = stHexNum[Num];
if(i<3)IList->TextOut[PanelDrawData.TextDrawLine][Pst+2] = ' ';
else IList->TextOut[PanelDrawData.TextDrawLine][Pst+2] = ',';
}
if( (EdittingDescp == 0) && (IsPermission == 0) ){
if( PanelIsUsingText && (IsSelfChecking == 0) && (PmsIntervene.IsShow == 0) )
TextRender_string24(x,y,clNearBlack, PanelColor, IList->TextOut[PanelDrawData.TextDrawLine]);
}
}else
if(PanelDrawData.IsHexList[PanelDrawData.TextDrawLine] == dtDec){
for(i=0; i<4; i++){
Pst= 0 + i*4;
Num = Da[i] / 100;
IList->TextOut[PanelDrawData.TextDrawLine][Pst+0] = Num + '0';
Num = Da[i] % 100 / 10;
IList->TextOut[PanelDrawData.TextDrawLine][Pst+1] = Num + '0';
Num = Da[i] % 10;
IList->TextOut[PanelDrawData.TextDrawLine][Pst+2] = Num + '0';
if(i<3)IList->TextOut[PanelDrawData.TextDrawLine][Pst+3] = ' ';
else IList->TextOut[PanelDrawData.TextDrawLine][Pst+3] = ',';
}
if( (EdittingDescp == 0) && (IsPermission == 0) ){
if( PanelIsUsingText && (IsSelfChecking == 0) && (PmsIntervene.IsShow == 0) )
TextRender_string24(x,y,clNearBlack, PanelColor, IList->TextOut[PanelDrawData.TextDrawLine]);
}
}
}else
if(aInx < 4){
y = Lv.Panel.Top + 1;
y = y + PanelDrawData.TextDrawLine * 27;
x = Lv.Panel.Left + 2;
TMyString::sClear(TextTmp);
if(PanelDrawData.IsHexList[PanelDrawData.TextDrawLine] == dtHex){
for(i=0; i<4; i++){
Pst= aInx*12 + i*3;
if(Pst > (MaxLen-1-2))break;
Num = Da[i] % 16;
Num10 = Da[i] / 16 % 16;
IList->TextOut[PanelDrawData.TextDrawLine][Pst+0] = stHexNum[Num10];
IList->TextOut[PanelDrawData.TextDrawLine][Pst+1] = stHexNum[Num];
if((Pst+2)<=(MaxLen-1)){
if(i<3)IList->TextOut[PanelDrawData.TextDrawLine][Pst+2] = ' ';
else IList->TextOut[PanelDrawData.TextDrawLine][Pst+2] = ',';
}
}
if( (EdittingDescp == 0) && (IsPermission == 0) ){
if( PanelIsUsingText && (IsSelfChecking == 0) && (PmsIntervene.IsShow == 0) /*&& (aInx == 3)*/ )
TextRender_string24(x,y,clNearBlack, PanelColor, IList->TextOut[PanelDrawData.TextDrawLine]);
}
}else
if(PanelDrawData.IsHexList[PanelDrawData.TextDrawLine] == dtDec){
for(i=0; i<4; i++){
Pst= aInx*16 + i*4;
if(Pst > (MaxLen-1-3))break;
Num = Da[i] / 100;
IList->TextOut[PanelDrawData.TextDrawLine][Pst+0] = Num + '0';
Num = Da[i] % 100 / 10;
IList->TextOut[PanelDrawData.TextDrawLine][Pst+1] = Num + '0';
Num = Da[i] % 10;
IList->TextOut[PanelDrawData.TextDrawLine][Pst+2] = Num + '0';
if((Pst+3)<=(MaxLen-1)){
if(i<3)IList->TextOut[PanelDrawData.TextDrawLine][Pst+3] = ' ';
else IList->TextOut[PanelDrawData.TextDrawLine][Pst+3] = ',';
}
}
if( (EdittingDescp == 0) && (IsPermission == 0) ){
if( PanelIsUsingText && (IsSelfChecking == 0) && (PmsIntervene.IsShow == 0) /*&& (aInx == 3)*/ )
TextRender_string24(x,y,clNearBlack, PanelColor, IList->TextOut[PanelDrawData.TextDrawLine]);
}
}
}
}
void TDevProperty::PermissionCmdGO()
{
int aVal;
unsigned char aBits;
switch(PermissionCmd){
case pcWriteDescp:
TDescpWrite::sRestoreDescp(Path0, Path1, IList->EditDescpShow.Str.Text);
IList->EditDescpShow.SelectedColor = clDeepGreen;
if(LanguageEnCn == 0){
IList->EditDescpShow.Str.FromStr("写入注释信息, 重新读取注释信息");
}else{
IList->EditDescpShow.Str.FromStr("Save And Reload");
}
IList->EditDescpShow.Show();
sDelayMs(100);
IList->EditDescpShow.SelectedColor = clBlue;
TDescpWrite::sWrite2Flash(Path0);
ReLoadAndDrawDescp();
break;
case pcWriteUserCode:
if( Path0 && Path1 && (Path0 <= dPORT_MAX_COUNT) && (Path1<=dEP_MAX_COUNT_PER_PORT) ){
aVal = IList->EditUserCode.Str.ToInteger();
if( (aVal < 100000000) && (aVal>0) ){
aUcSetting.Full = aVal;
WriteAUserCode2Flash(Path0, Path1, aUcSetting);
ReadAllEpUserCode();
if(LanguageEnCn == 0){
if(aVal == Port[Path0-1].UcList[Path1-1].Full){
TextRender_string24(IList->EditUserCode.Bound.Right + 2, IList->EditUserCode.Bound.Top +4, clNearWhite, ItemColor, "保存成功");
}else{
TextRender_string24(IList->EditUserCode.Bound.Right + 2, IList->EditUserCode.Bound.Top +4, clNearWhite, ItemColor, "保存失败");
}
}else{
if(aVal == Port[Path0-1].UcList[Path1-1].Full){
TextRender_string24(IList->EditUserCode.Bound.Right + 2, IList->EditUserCode.Bound.Top +4, clNearWhite, ItemColor, "Save OK ");
}else{
TextRender_string24(IList->EditUserCode.Bound.Right + 2, IList->EditUserCode.Bound.Top +4, clNearWhite, ItemColor, "Save Err");
}
}
IList->EditUserCode.Str.FromUInt8Dg(Port[Path0-1].UcList[Path1-1].Full);
IList->EditUserCode.Show();
}
}
break;
case pcWriteAssignType:
if( Path0 && Path1 && (Path0 <= dPORT_MAX_COUNT) && (Path1<=dEP_MAX_COUNT_PER_PORT) ){
if(LanguageEnCn == 0){
TextRender_string24(IList->Edit[0].Bound.Right + 6, IList->Edit[0].Bound.Top + 4, clNearWhite, ItemColor, "写入中 ");
WriteAAssignType2Flash(Path0, Path1, AssignTypeSetting);
Record.ReadDevUserSet();
if(AssignTypeSetting == Port[Path0-1].AssignType[Path1-1]){
TextRender_string24(IList->Edit[0].Bound.Right + 6, IList->Edit[0].Bound.Top + 4, clNearWhite, ItemColor, "写入成功");
}else{
TextRender_string24(IList->Edit[0].Bound.Right + 6, IList->Edit[0].Bound.Top + 4, clNearWhite, ItemColor, "写入失败");
}
}else{
TextRender_string24(IList->Edit[0].Bound.Right + 6, IList->Edit[0].Bound.Top + 4, clNearWhite, ItemColor, "Saving ");
WriteAAssignType2Flash(Path0, Path1, AssignTypeSetting);
Record.ReadDevUserSet();
if(AssignTypeSetting == Port[Path0-1].AssignType[Path1-1]){
TextRender_string24(IList->Edit[0].Bound.Right + 6, IList->Edit[0].Bound.Top + 4, clNearWhite, ItemColor, "Save OK ");
}else{
TextRender_string24(IList->Edit[0].Bound.Right + 6, IList->Edit[0].Bound.Top + 4, clNearWhite, ItemColor, "Save Err");
}
}
}
break;
case pcWriteAreaInx:
if( Path0 && Path1 && (Path0 <= dPORT_MAX_COUNT) && (Path1<=dEP_MAX_COUNT_PER_PORT) ){
if(LanguageEnCn == 0){
TextRender_string24(IList->EditAreaAssign.Bound.Right + 2, IList->EditAreaAssign.Bound.Top + 4, clNearWhite, ItemColor, "写入中 ");
WriteAreaNum2Flash(Path0, Path1, AreaNum);
Record.ReadDevAreaNum();
if(AreaNum == Port[Path0-1].Area[Path1-1]){
TextRender_string24(IList->EditAreaAssign.Bound.Right + 2, IList->EditAreaAssign.Bound.Top + 4, clNearWhite, ItemColor, "写入成功");
}else{
TextRender_string24(IList->EditAreaAssign.Bound.Right + 2, IList->EditAreaAssign.Bound.Top + 4, clNearWhite, ItemColor, "写入失败");
}
}else{
TextRender_string24(IList->EditAreaAssign.Bound.Right + 2, IList->EditAreaAssign.Bound.Top + 4, clNearWhite, ItemColor, "Saving ");
WriteAreaNum2Flash(Path0, Path1, AreaNum);
Record.ReadDevAreaNum();
if(AreaNum == Port[Path0-1].Area[Path1-1]){
TextRender_string24(IList->EditAreaAssign.Bound.Right + 2, IList->EditAreaAssign.Bound.Top + 4, clNearWhite, ItemColor, "Save OK ");
}else{
TextRender_string24(IList->EditAreaAssign.Bound.Right + 2, IList->EditAreaAssign.Bound.Top + 4, clNearWhite, ItemColor, "Save Err");
}
}
}
break;
case pcWriteSmokerSens:
SmokerRt.IsWait4ReadSens = 0;
SmokerRt.IsWait4WriteSens = 1;
SmokerRt.RecRdy = 0;
SmokerRt.RecCmd = 0;
SmokerRt.WaitTick = 0;
SendSmokeCmdCfg();
if(LanguageEnCn == 0){
TextRender_string24(IList->Edit[0].Bound.Right + 6, IList->Edit[0].Bound.Top + 4, clNearWhite, ItemColor, "写入中 ");
}else
if(LanguageEnCn == 1){
TextRender_string24(IList->Edit[0].Bound.Right + 6, IList->Edit[0].Bound.Top + 4, clNearWhite, ItemColor, "Saving ");
}
break;
case pcWriteTempeSensType:
break;
case pcWriteModuleDefineType:
break;
case pcWriteModuleSignalInType:
//ModuleInRt.IsWait4ReadSignalType = 0;
//ModuleInRt.IsWait4WriteSignalType = 1;
//ModuleInRt.RecRdy = 0;
//ModuleInRt.RecCmd = 0;
//ModuleInRt.WaitTick = 0;
//SendModuleSignalInOutTypeWrite();
aBits = Data.ModuleSignalInType;
WriteMouelaInputSignal();
if(LanguageEnCn == 0){
if(aBits == Data.ModuleSignalInType)
TextRender_string24(Lv.Grid.Left[3] + 160, ModuleRectLv3.Top + 4, clNearWhite, ItemColor, "写入成功");
else
TextRender_string24(Lv.Grid.Left[3] + 160, ModuleRectLv3.Top + 4, clNearWhite, ItemColor, "写入失败");
}else
if(LanguageEnCn == 1){
if(aBits == Data.ModuleSignalInType)
TextRender_string24(Lv.Grid.Left[3] + 160, ModuleRectLv3.Top + 4, clNearWhite, ItemColor, "Save OK ");
else
TextRender_string24(Lv.Grid.Left[3] + 160, ModuleRectLv3.Top + 4, clNearWhite, ItemColor, "Save Err");
}
break;
case pcWriteNoTypeSignalInOutType:
//ModuleInOutRt.IsWait4ReadSignalType = 0;
//ModuleInOutRt.IsWait4WriteSignalType = 1;
//ModuleInOutRt.RecRdy = 0;
//ModuleInOutRt.RecCmd = 0;
//ModuleInOutRt.WaitTick = 0;
//SendModuleSignalInOutTypeWrite();
aBits = Data.NoTypeSignalInOutType;
WriteNoTypeInOutSignal();
if(LanguageEnCn == 0){
if(aBits == Data.NoTypeSignalInOutType)
TextRender_string24(Lv.Grid.Left[3] + 160, ModuleRectLv3.Top + 4, clNearWhite, ItemColor, "写入成功");
else
TextRender_string24(Lv.Grid.Left[3] + 160, ModuleRectLv3.Top + 4, clNearWhite, ItemColor, "写入失败");
}else{
if(aBits == Data.NoTypeSignalInOutType)
TextRender_string24(Lv.Grid.Left[3] + 160, ModuleRectLv3.Top + 4, clNearWhite, ItemColor, "Save OK ");
else
TextRender_string24(Lv.Grid.Left[3] + 160, ModuleRectLv3.Top + 4, clNearWhite, ItemColor, "Save Err");
}
break;
case pcWriteModuleSignalInOutType:
//ModuleInOutRt.IsWait4ReadSignalType = 0;
//ModuleInOutRt.IsWait4WriteSignalType = 1;
//ModuleInOutRt.RecRdy = 0;
//ModuleInOutRt.RecCmd = 0;
//ModuleInOutRt.WaitTick = 0;
//SendModuleSignalInOutTypeWrite();
aBits = Data.ModuleSignalInOutType;
WriteMouelaInOutSignal();
if(LanguageEnCn == 0){
if(aBits == Data.ModuleSignalInOutType)
TextRender_string24(Lv.Grid.Left[3] + 160, ModuleRectLv3.Top + 4, clNearWhite, ItemColor, "写入成功");
else
TextRender_string24(Lv.Grid.Left[3] + 160, ModuleRectLv3.Top + 4, clNearWhite, ItemColor, "写入失败");
}else{
if(aBits == Data.ModuleSignalInOutType)
TextRender_string24(Lv.Grid.Left[3] + 160, ModuleRectLv3.Top + 4, clNearWhite, ItemColor, "Save OK ");
else
TextRender_string24(Lv.Grid.Left[3] + 160, ModuleRectLv3.Top + 4, clNearWhite, ItemColor, "Save Err");
}
break;
case pcWriteModuleSignalOutType:
break;
case pcWriteVaIsLinkageAble:
//Write to Flash No This Function See WriteVaSetting
break;
case pcWriteVaSetting:
SendVaSettingWrite();
break;
case pcWriteDisplayPadMatchData:
WriteDisplayPadMatchData();
break;
case pcLightUp:
//No Permission Requst, See KeyIn-Function
break;
case pcSimAlram:
SimFire(Path0, Path1);
break;
case pcSimStart:
SimStart(Path0, Path1);
break;
case pcSimInputActive:
SimFeedBack(Path0, Path1);
break;
case pcDisplayPadMute:
SendDisplayPadMute();
break;
case pcDownLoadDescp:
SendDisplayPadDescpDownload();
break;
case pcEditDescp:
IList->EditDescpShow.Selected = 0;
IList->EditDescpShow.Show();
InitPanel();
EdittingDescp = 1;
IsExtInput = 1;
break;
}
}
void TDevProperty::RedrawPanelData()
{
int x,y;
if(PanelIsUsingText){
for(int i=0; i<8; i++){
y = Lv.Panel.Top + 1;
y = y + i * 27;
x = Lv.Panel.Left + 2;
if(EdittingDescp == 0){
if( (IsSelfChecking == 0) && (PmsIntervene.IsShow == 0) )
TextRender_string24(x,y,clNearBlack, IList->TextOut[i]);
}
}
}else{
if(EdittingDescp == 0){
if( (IsSelfChecking == 0) && (PmsIntervene.IsShow == 0) )
CurveDraw(1);
}
}
}
void TDevProperty::PermissionCmdReturnDraw()
{
Check4Selected();
if(Lv.Panel.Active)RectFillRender(Lv.Panel.Left, Lv.Panel.Top, Lv.Panel.Right, Lv.Panel.Bottom, PanelColor);
RedrawPanelData();
}
void TDevProperty::ReDrawPanel()
{
PermissionCmdReturnDraw();
}
void TDevProperty::ClearSelected()
{
switch(HwDevType){
case htNoType: ClearSelectedNoType(); break;
case htSmoker: ClearSelectedHtSmoker(); break;
case htTempe: ClearSelectedHtTempe(); break;
case htHandPad: ClearSelectedHtHandPad(); break;
case htHydrantPad: ClearSelectedHtHydrantPad(); break;
case htModuleIn: ClearSelectedHtModuleIn(); break;
case htModuleInOut: ClearSelectedHtModuleInOut(); break;
case htModuleOut: ClearSelectedHtModuleOut(); break;
case htVa: ClearSelectedHtVa(); break;
case htDisplayPad: ClearSelectedHtDisplayPad(); break;
case htLinkagePowerSuply:ClearSelectedHtLinkagePowerSuply(); break;
default :break;
}
}
void TDevProperty::Check4Selected()
{
switch(HwDevType){
case htNoType: Check4SelectedNoType(); break;
case htSmoker: Check4SelectedHtSmoker(); break;
case htTempe: Check4SelectedHtTempe(); break;
case htHandPad: Check4SelectedHtHandPad(); break;
case htHydrantPad: Check4SelectedHtHydrantPad(); break;
case htModuleIn: Check4SelectedHtModuleIn(); break;
case htModuleInOut: Check4SelectedHtModuleInOut(); break;
case htModuleOut: Check4SelectedHtModuleOut(); break;
case htVa: Check4SelectedHtVa(); break;
case htDisplayPad: Check4SelectedHtDisplayPad(); break;
case htLinkagePowerSuply:Check4SelectedHtLinkagePowerSuply(); break;
default :break;
}
}
void TDevProperty::ClearReqDataState()
{
SmokerRt.IsWait4ReadSens = 0;
SmokerRt.IsWait4WriteSens = 0;
TempeRt.IsWait4ReadSensType =0;
ModuleInRt.IsWait4ReadSignalType =0;
ModuleInRt.IsWait4WriteSignalType =0;
ModuleInOutRt.IsWait4ReadStaticData =0;
ModuleInOutRt.IsWait4WriteStaticData =0;
ModuleOutRt.IsWait4ReadStaticData =0;
ModuleOutRt.IsWait4WriteStaticData =0;
VaRt.IsWait4ReadVaSetting =0;
VaRt.IsWait4WriteVaSetting =0;
DisplayPadRt.IsMute =0;
DisplayPadRt.IsDownloadDescp =0;
}
void TDevProperty::sWriteAuxIdAssignTypeSignalType(unsigned char aPath0)
{
unsigned int fAddr;
unsigned int i;
TDMix tCrc;
volatile unsigned int x, GetSta;
unsigned char aP0, aP1, wP1;
if(sIList == nullptr)return;
sIList->ReadWriteData.Reset();
do{
sDelayMs(3);
GetSta = nor_get_busy_state(dFlashAddrDevUserCodeChip);
}while(GetSta);
//Erase 1 * 4K Blocks
if( (aPath0 >0) && (aPath0 <= dPORT_MAX_COUNT) ){
aP0 = aPath0 -1;
fAddr = dFlashAddrDevUserCode + (aP0 * 4096);
nor_erase_sector_4k(dFlashAddrDevUserCodeChip,fAddr);
sDelayMs(100);
do{
sDelayMs(10);
GetSta = nor_get_busy_state(dFlashAddrDevUserCodeChip);
}while(GetSta);
Crc32Reset();
for(i=0; i<dEP_MAX_COUNT_PER_PORT; i++)Crc32Feed(Port[aP0].UcList[i].Full);
tCrc.D32 = Crc32GetResult();
for(i=0; i<4; i++){
for(x=0;x<64;x++){
sIList->ReadWriteData.D32[x] = Port[aP0].UcList[i*64 + x].Full;
}
if(i==3){
sIList->ReadWriteData.D32[63] = tCrc.D32;
}
fAddr = dFlashAddrDevUserCode + (aP0 * 4096) + (i * 256);
nor_write_page(dFlashAddrDevUserCodeChip, fAddr, sIList->ReadWriteData.D8);
do{
sDelayMs(5);
GetSta = nor_get_busy_state(dFlashAddrDevUserCodeChip);
}while(GetSta);
}
Crc32Reset();
for(x=0; x<dEP_MAX_COUNT_PER_PORT; x++)Crc32Feed(static_cast<unsigned int>(Port[aP0].AssignType[x]));
tCrc.D32 = Crc32GetResult();
for(x=0;x<dEP_MAX_COUNT_PER_PORT;x++){
sIList->ReadWriteData.D8[x] = Port[aP0].AssignType[x];
}
sIList->ReadWriteData.D8[252] = tCrc.D8[0];
sIList->ReadWriteData.D8[253] = tCrc.D8[1];
sIList->ReadWriteData.D8[254] = tCrc.D8[2];
sIList->ReadWriteData.D8[255] = tCrc.D8[3];
fAddr = dFlashAddrDevUserCode + (aP0 * 4096) + (4 * 256);
nor_write_page(dFlashAddrDevUserCodeChip, fAddr, sIList->ReadWriteData.D8);
do{
sDelayMs(5);
GetSta = nor_get_busy_state(dFlashAddrDevUserCodeChip);
}while(GetSta);
//Signal Type
Crc32Reset();
for(x=0; x<dEP_MAX_COUNT_PER_PORT; x++)Crc32Feed(static_cast<unsigned int>(Port[aP0].FuncSetByte[x]));
tCrc.D32 = Crc32GetResult();
for(x=0;x<dEP_MAX_COUNT_PER_PORT;x++){
sIList->ReadWriteData.D8[x] = Port[aP0].FuncSetByte[x];
}
sIList->ReadWriteData.D8[252] = tCrc.D8[0];
sIList->ReadWriteData.D8[253] = tCrc.D8[1];
sIList->ReadWriteData.D8[254] = tCrc.D8[2];
sIList->ReadWriteData.D8[255] = tCrc.D8[3];
fAddr = dFlashAddrDevUserCode + (aP0 * 4096) + (5 * 256);
nor_write_page(dFlashAddrDevUserCodeChip, fAddr, sIList->ReadWriteData.D8);
do{
sDelayMs(5);
GetSta = nor_get_busy_state(dFlashAddrDevUserCodeChip);
}while(GetSta);
}
}
void TDevProperty::sWriteAuxIdAssignTypeSignalTypeDefault(unsigned char aPath0)
{
unsigned int fAddr;
unsigned int i;
TDMix tCrc;
volatile unsigned int x, GetSta;
unsigned char aP0, aP1, wP1;
if(sIList == nullptr)return;
do{
sDelayMs(3);
GetSta = nor_get_busy_state(dFlashAddrDevUserCodeChip);
}while(GetSta);
//Erase 1 * 4K Blocks
if( (aPath0 >0) && (aPath0 <= dPORT_MAX_COUNT) ){
aP0 = aPath0 -1;
fAddr = dFlashAddrDevUserCode + (aP0 * 4096);
nor_erase_sector_4k(dFlashAddrDevUserCodeChip,fAddr);
sDelayMs(100);
do{
sDelayMs(10);
GetSta = nor_get_busy_state(dFlashAddrDevUserCodeChip);
}while(GetSta);
Crc32Reset();
for(i=0; i<dEP_MAX_COUNT_PER_PORT; i++){
Port[aP0].UcList[i].Full =0;
Crc32Feed(Port[aP0].UcList[i].Full);
}
tCrc.D32 = Crc32GetResult();
for(i=0; i<4; i++){
for(x=0;x<64;x++){
sIList->ReadWriteData.D32[x] = Port[aP0].UcList[i*64 + x].Full;
}
if(i==3){
sIList->ReadWriteData.D32[63] = tCrc.D32;
}
fAddr = dFlashAddrDevUserCode + (aP0 * 4096) + (i * 256);
nor_write_page(dFlashAddrDevUserCodeChip, fAddr, sIList->ReadWriteData.D8);
do{
sDelayMs(5);
GetSta = nor_get_busy_state(dFlashAddrDevUserCodeChip);
}while(GetSta);
LoopCheck1S();
}
Crc32Reset();
for(x=0; x<dEP_MAX_COUNT_PER_PORT; x++){
Port[aP0].AssignType[x] =0;
Crc32Feed(static_cast<unsigned int>(Port[aP0].AssignType[x]));
}
tCrc.D32 = Crc32GetResult();
for(x=0;x<dEP_MAX_COUNT_PER_PORT;x++){
sIList->ReadWriteData.D8[x] = Port[aP0].AssignType[x];
}
sIList->ReadWriteData.D8[252] = tCrc.D8[0];
sIList->ReadWriteData.D8[253] = tCrc.D8[1];
sIList->ReadWriteData.D8[254] = tCrc.D8[2];
sIList->ReadWriteData.D8[255] = tCrc.D8[3];
fAddr = dFlashAddrDevUserCode + (aP0 * 4096) + (4 * 256);
nor_write_page(dFlashAddrDevUserCodeChip, fAddr, sIList->ReadWriteData.D8);
do{
sDelayMs(5);
GetSta = nor_get_busy_state(dFlashAddrDevUserCodeChip);
}while(GetSta);
LoopCheck1S();
//Signal Type
Crc32Reset();
for(x=0; x<dEP_MAX_COUNT_PER_PORT; x++){
Port[aP0].FuncSetByte[x] =0;
Crc32Feed(static_cast<unsigned int>(Port[aP0].FuncSetByte[x]));
}
tCrc.D32 = Crc32GetResult();
for(x=0;x<dEP_MAX_COUNT_PER_PORT;x++){
sIList->ReadWriteData.D8[x] = Port[aP0].FuncSetByte[x];
}
sIList->ReadWriteData.D8[252] = tCrc.D8[0];
sIList->ReadWriteData.D8[253] = tCrc.D8[1];
sIList->ReadWriteData.D8[254] = tCrc.D8[2];
sIList->ReadWriteData.D8[255] = tCrc.D8[3];
fAddr = dFlashAddrDevUserCode + (aP0 * 4096) + (5 * 256);
nor_write_page(dFlashAddrDevUserCodeChip, fAddr, sIList->ReadWriteData.D8);
do{
sDelayMs(5);
GetSta = nor_get_busy_state(dFlashAddrDevUserCodeChip);
}while(GetSta);
LoopCheck1S();
}
}
void TDevProperty::WriteAUserCode2Flash(unsigned char aPath0, unsigned char aAddr, TUserCode aUc)
{
unsigned int fAddr;
unsigned int i;
TDMix tCrc;
volatile unsigned int x, GetSta;
unsigned char aP0, aP1, wP1;
//Erase 1 * 4K Blocks
if( (aPath0 >0) && (aPath0 <= dPORT_MAX_COUNT) ){
aP0 = aPath0 -1;
aP1 = aAddr -1;
Port[aP0].UcList[aP1].Full = aUc.Full;
sIList = IList;
sWriteAuxIdAssignTypeSignalType(aPath0);
}
}
void TDevProperty::WriteAAssignType2Flash(unsigned char aPath0, unsigned char aAddr, unsigned char aNewAssignType)
{
unsigned int fAddr;
unsigned int i;
unsigned int aUcFull;
volatile unsigned int x, GetSta;
unsigned char aP0, aP1, wP1;
do{
sDelayMs(3);
GetSta = nor_get_busy_state(dFlashAddrDevUserCodeChip);
}while(GetSta);
//Erase 1 * 4K Blocks
if( (aPath0 >0) && (aPath0 <= dPORT_MAX_COUNT) ){
aP0 = aPath0 -1;
aP1 = aAddr -1;
Port[aP0].AssignType[aP1] = aNewAssignType;
sIList = IList;
sWriteAuxIdAssignTypeSignalType(aPath0);
}
}
void TDevProperty::WriteAreaNum2Flash(unsigned char aPath0, unsigned char aAddr, unsigned short aNum)
{
unsigned int fAddr;
unsigned int i;
unsigned int aUcFull;
volatile unsigned int x, GetSta;
unsigned char aP0, aP1, wP1;
TDMix tCrc;
if(aPath0 <1)return;
if(aPath0 >dPORT_MAX_COUNT)return;
aP0 = aPath0 -1;
aP1 = aAddr -1;
Port[aP0].Area[aP1] = aNum;
sIList = IList;
sWriteAreaNumOnePort(aPath0);
}
void TDevProperty::sWriteAreaNumOnePort(unsigned char aPort)
{
unsigned int fAddr;
unsigned int i;
unsigned int aUcFull;
volatile unsigned int x, GetSta;
unsigned char aP0, aP1, wP1;
TDMix tCrc;
if(aPort==0)return;
if(aPort>dPORT_MAX_COUNT)return;
if(sIList==nullptr)return;
sIList->ReadWriteData.Reset();
do{
sDelayMs(3);
GetSta = nor_get_busy_state(dFlash4DevAreaNumChip);
}while(GetSta);
aP0 = aPort -1;
fAddr = dFlash4DevAreaNum + (aP0 / 8 * 4096);
nor_erase_sector_4k(dFlash4DevAreaNumChip,fAddr);
sDelayMs(100);
do{
sDelayMs(10);
GetSta = nor_get_busy_state(dFlash4DevAreaNumChip);
}while(GetSta);
for(i=0; i<8; i++){
Crc32Reset();
for(int Gg=0; Gg<2; Gg++){
for(x=0;x<128;x++){
sIList->ReadWriteData.D16[x] = Port[ (aP0 & 0xF8) +i].Area[Gg * 128 + x];
if(sIList->ReadWriteData.D16[x] > dAreaCountMax)sIList->ReadWriteData.D16[x] =0;
if(Gg==0 or (x<(dEP_MAX_COUNT_PER_PORT-128))){
Crc32Feed(static_cast<unsigned int>(sIList->ReadWriteData.D16[x]));
}
}
if(Gg==1){
tCrc.D32 = Crc32GetResult();
sIList->ReadWriteData.D8[252] = tCrc.D8[0];
sIList->ReadWriteData.D8[253] = tCrc.D8[1];
sIList->ReadWriteData.D8[254] = tCrc.D8[2];
sIList->ReadWriteData.D8[255] = tCrc.D8[3];
}
fAddr = dFlash4DevAreaNum + ( aP0/8 * 4096 + (i * 512) ) + (Gg * 256);
nor_write_page(dFlash4DevAreaNumChip, fAddr, sIList->ReadWriteData.D8);
do{
sDelayMs(5);
GetSta = nor_get_busy_state(dFlash4DevAreaNumChip);
}while(GetSta);
}
}
}
void TDevProperty::sWriteAreaNumDefault()
{
unsigned int fAddr;
unsigned int i,m,t;
volatile unsigned int x, GetSta;
TDMix tCrc;
if(sIList==nullptr)return;
do{
sDelayMs(3);
GetSta = nor_get_busy_state(dFlash4DevAreaNumChip);
}while(GetSta);
//Erase 1 * 4K Blocks
for(t=0; t<(dPORT_MAX_COUNT/8) ;t++){
fAddr = dFlash4DevAreaNum + (t * 4096);
nor_erase_sector_4k(dFlash4DevAreaNumChip,fAddr);
sDelayMs(100);
do{
sDelayMs(10);
GetSta = nor_get_busy_state(dFlash4DevAreaNumChip);
}while(GetSta);
for(i=0; i<8; i++){
SysLoopTick = 0;
sIList->ReadWriteData.Reset();
for(m=0; m<dEP_MAX_COUNT_PER_PORT; m++){
Port[t*8 +i].Area[m] =0;
}
Crc32Reset();
for(int Gg=0; Gg<2; Gg++){
for(x=0;x<128;x++){
sIList->ReadWriteData.D16[x] = Port[ (t *8) +i].Area[Gg * 128 + x];
if(Gg==0 or (x<(dEP_MAX_COUNT_PER_PORT-128))){
Crc32Feed(static_cast<unsigned int>(sIList->ReadWriteData.D16[x]));
}
}
if(Gg==1){
tCrc.D32 = Crc32GetResult();
sIList->ReadWriteData.D8[252] = tCrc.D8[0];
sIList->ReadWriteData.D8[253] = tCrc.D8[1];
sIList->ReadWriteData.D8[254] = tCrc.D8[2];
sIList->ReadWriteData.D8[255] = tCrc.D8[3];
}
fAddr = dFlash4DevAreaNum + ( t * 4096 + (i * 512) ) + (Gg * 256);
nor_write_page(dFlash4DevAreaNumChip, fAddr, sIList->ReadWriteData.D8);
do{
sDelayMs(5);
GetSta = nor_get_busy_state(dFlash4DevAreaNumChip);
}while(GetSta);
}
}
}
}
void TDevProperty::sRecoverSetDefault()
{
unsigned int fAddr;
unsigned int i,x;
volatile unsigned int GetSta;
//User Code and Assign Type
//First 32 Port
SysLoopTick = 0;
for(i=0; i<dPORT_MAX_COUNT; i++){
SysLoopTick = 0;
sWriteAuxIdAssignTypeSignalTypeDefault(i+1);
}
//Area Num
SysLoopTick = 0;
sWriteAreaNumDefault();
SysLoopTick = 0;
Record.ReadDevUserSet();
Record.ReadDevAreaNum();
}
void TDevProperty::LoadUcBcdText(unsigned int aUcFull, char *pText)
{
int i;
unsigned int f, aOrd;
f = aUcFull;
for(i=0; i<8; i++){
f = aUcFull;
f >>= ((7-i)*4);
aOrd = (f & 0x0000'000F);
pText[i] = CharBcdText[aOrd];
}
pText[8] = '\0';
}
unsigned int TDevProperty::RestoreUcBcdText(char * pText)
{
int i;
unsigned int f, Val, tResult;
tResult = 0;
for(i=0; i<8; i++){
f = 11;
if( (pText[i] >= '0') && (pText[i] <= '9') ) {
f = pText[i] - '0';
}
if(pText[i] == '*')f = 10;
f <<= ((7-i) * 4);
tResult |= f;
}
return tResult;
}
void TDevProperty::FireSimulation(unsigned char CtlNum, unsigned char aP0, unsigned char aP1, unsigned char aType, unsigned int aUcCode, unsigned short aArea)
{
if(CtlNum == MainCtl.fData.Split.MyNum){
}else{
}
}
void TDevProperty::SimFire(unsigned char aP0, unsigned char aP1)
{
//Smoker Tempe HandReport
if(aP0 == 0)return;
if(aP1 == 0)return;
if(aP0 >dPORT_MAX_COUNT)return;
if(aP1 >dEP_MAX_COUNT_PER_PORT)return;
Record.InnerMsgSetYear (0, DateTime.Date.Split.Year);
Record.InnerMsgSetMonth (0, DateTime.Date.Split.Month);
Record.InnerMsgSetDay (0, DateTime.Date.Split.Day);
Record.InnerMsgSetHour (0, DateTime.Time.Split.Hour);
Record.InnerMsgSetMinute (0, DateTime.Time.Split.Minute);
Record.InnerMsgSetSecond (0, DateTime.Time.Split.Second);
Record.InnerMsgSet_mType (0, CmdActiveDefaultSet[cmPublishAlram][7]);
Record.InnerMsgSet_CtlNum (0, MainCtl.fData.Split.MyNum ); //(0,aRxMsg.Data.D8[1]);
Record.InnerMsgSet_P0 (0,aP0);
Record.InnerMsgSet_P1 (0,aP1);
Record.InnerMsgSet_P2 (0,0);
Record.InnerMsgSet_dType (0,0);
Record.InnerMsgSet_Data0 (0,0);
Record.InnerMsgSet_Data1 (0,0);
Record.InnerMsgSet_iByte0 (0,CmdActiveDefaultSet[cmPublishAlram][8]);
Record.InnerMsgSet_iByte1 (0,0);
InnerCan.GetEpUserCodeAreaNumDevType(aP0, aP1, &Record.iMsgRx.Splite.UserCode, &Record.iMsgRx.Splite.AreaNum, &Record.iMsgRx.Splite.dType);
if(Register.IsDevRegisting != 0x00A5A5A5){
if(CtlCenter.ieMsgFire.Count <1)Record.InnerMsgSet_Data1 (0,1);
else Record.InnerMsgSet_Data1 (0,0);
Record.InnerMsgSet_Data0(0,TControlCenter::LinkInputTypeFireSimulate);
if(CtlCenter.IsMsgReseting == 0){
if(CtlCenter.iePushOneMsgFireSimulate(Record.iMsgRx,0)){
//ProtoC2C.MasterDoPublishFire(aCtlNum, aIm.Splite.P0, aIm.Splite.P1, aIm.Splite.dType);
ProtoC2C.SlaveDoSend2MasterMachine(Record.iMsgRx, cmVIrtualAlram, TProtoC2C::mtFire);
//ExRecord.SetStateCodeFire();
//FecBusCRT.SetStateCodeFire();
Record.FireAdd(Record.iMsgRx);
}
}
}
}
void TDevProperty::SimStart(unsigned char aP0, unsigned char aP1)
{
if(aP0 == 0)return;
if(aP1 == 0)return;
if(aP0 >dPORT_MAX_COUNT)return;
if(aP1 >dEP_MAX_COUNT_PER_PORT)return;
Record.InnerMsgSetYear (0, DateTime.Date.Split.Year);
Record.InnerMsgSetMonth (0, DateTime.Date.Split.Month);
Record.InnerMsgSetDay (0, DateTime.Date.Split.Day);
Record.InnerMsgSetHour (0, DateTime.Time.Split.Hour);
Record.InnerMsgSetMinute (0, DateTime.Time.Split.Minute);
Record.InnerMsgSetSecond (0, DateTime.Time.Split.Second);
Record.InnerMsgSet_mType (0, CmdActiveDefaultSet[cmAutoStart][7]);
Record.InnerMsgSet_CtlNum (0, MainCtl.fData.Split.MyNum ); //(0,aRxMsg.Data.D8[1]);
Record.InnerMsgSet_P0 (0,aP0);
Record.InnerMsgSet_P1 (0,aP1);
Record.InnerMsgSet_P2 (0,0);
Record.InnerMsgSet_dType (0,0);
Record.InnerMsgSet_Data0 (0,0);
Record.InnerMsgSet_Data1 (0,TControlCenter::StartTypeSimulate);
Record.InnerMsgSet_iByte0 (0,CmdActiveDefaultSet[cmAutoStart][8]);
Record.InnerMsgSet_iByte1 (0,0);
InnerCan.GetEpUserCodeAreaNumDevType(aP0, aP1, &Record.iMsgRx.Splite.UserCode, &Record.iMsgRx.Splite.AreaNum, &Record.iMsgRx.Splite.dType);
if(Register.IsDevRegisting != 0x00A5A5A5){
if(CtlCenter.iePushOneMsgLinkageStartSimulate(Record.iMsgRx)){
//ExRecord.SetStateCodeStart();
//FecBusCRT.SetStateCodeStart();
Record.LinkageAdd(Record.iMsgRx);
ProtoC2C.SlaveDoSend2MasterMachine(Record.iMsgRx, cmVIrtualStart, TProtoC2C::mtLink);
}
}
}
void TDevProperty::SimSv(unsigned char aP0, unsigned char aP1)
{
if(aP0 == 0)return;
if(aP1 == 0)return;
if(aP0 >dPORT_MAX_COUNT)return;
if(aP1 >dEP_MAX_COUNT_PER_PORT)return;
Record.InnerMsgSetYear (0, DateTime.Date.Split.Year);
Record.InnerMsgSetMonth (0, DateTime.Date.Split.Month);
Record.InnerMsgSetDay (0, DateTime.Date.Split.Day);
Record.InnerMsgSetHour (0, DateTime.Time.Split.Hour);
Record.InnerMsgSetMinute (0, DateTime.Time.Split.Minute);
Record.InnerMsgSetSecond (0, DateTime.Time.Split.Second);
Record.InnerMsgSet_mType (0, CmdActiveDefaultSet[cmAutoStart][7]);
Record.InnerMsgSet_CtlNum (0, MainCtl.fData.Split.MyNum ); //(0,aRxMsg.Data.D8[1]);
Record.InnerMsgSet_P0 (0,aP0);
Record.InnerMsgSet_P1 (0,aP1);
Record.InnerMsgSet_P2 (0,0);
Record.InnerMsgSet_dType (0,0);
Record.InnerMsgSet_Data0 (0,0);
Record.InnerMsgSet_Data1 (0,TControlCenter::StartTypeSimulate);
Record.InnerMsgSet_iByte0 (0,CmdActiveDefaultSet[cmAutoStart][8]);
Record.InnerMsgSet_iByte1 (0,0);
InnerCan.GetEpUserCodeAreaNumDevType(aP0, aP1, &Record.iMsgRx.Splite.UserCode, &Record.iMsgRx.Splite.AreaNum, &Record.iMsgRx.Splite.dType);
if(Register.IsDevRegisting != 0x00A5A5A5){
if(CtlCenter.iePushOneMsgSvSimulate(Record.iMsgRx)){
//ExRecord.SetStateCodeStart();
//FecBusCRT.SetStateCodeStart();
Record.SvAdd(Record.iMsgRx);
ProtoC2C.SlaveDoSend2MasterMachine(Record.iMsgRx, cmVIrtualSuperVi, TProtoC2C::mtSv);
}
}
}
void TDevProperty::SimFeedBack(unsigned char aP0, unsigned char aP1)
{
unsigned char tP0,tP1;
if(aP0 == 0)return;
if(aP1 == 0)return;
if(aP0 >dPORT_MAX_COUNT)return;
if(aP1 >dEP_MAX_COUNT_PER_PORT)return;
tP0 = aP0-1; tP1 = aP1 -1;
if( (Port[tP0].FuncSetByte[tP1] & 0x07) == 0x02){
SimFire(aP0,aP1);
return;
}else
if( (Port[tP0].FuncSetByte[tP1] & 0x07) == 0x04){
SimSv(aP0,aP1);
return;
}
Record.InnerMsgSetYear (0, DateTime.Date.Split.Year);
Record.InnerMsgSetMonth (0, DateTime.Date.Split.Month);
Record.InnerMsgSetDay (0, DateTime.Date.Split.Day);
Record.InnerMsgSetHour (0, DateTime.Time.Split.Hour);
Record.InnerMsgSetMinute (0, DateTime.Time.Split.Minute);
Record.InnerMsgSetSecond (0, DateTime.Time.Split.Second);
Record.InnerMsgSet_mType (0, CmdActiveDefaultSet[cmAck][7]);
Record.InnerMsgSet_CtlNum (0, MainCtl.fData.Split.MyNum ); //(0,aRxMsg.Data.D8[1]);
Record.InnerMsgSet_P0 (0,aP0);
Record.InnerMsgSet_P1 (0,aP1);
Record.InnerMsgSet_P2 (0,0);
Record.InnerMsgSet_dType (0,0);
Record.InnerMsgSet_Data0 (0,0);
Record.InnerMsgSet_Data1 (0,TControlCenter::StartTypeSimulate);
Record.InnerMsgSet_iByte0 (0,CmdActiveDefaultSet[cmAck][8]);
Record.InnerMsgSet_iByte1 (0,0);
InnerCan.GetEpUserCodeAreaNumDevType(aP0, aP1, &Record.iMsgRx.Splite.UserCode, &Record.iMsgRx.Splite.AreaNum, &Record.iMsgRx.Splite.dType);
if(Register.IsDevRegisting != 0x00A5A5A5){
if(CtlCenter.iePushOneMsgLinkageFbSimulate(Record.iMsgRx)){
Record.LinkageAdd(Record.iMsgRx);
ProtoC2C.SlaveDoSend2MasterMachine(Record.iMsgRx, cmVIrtualAck, TProtoC2C::mtLink);
}
}
}