📄 dtedlg.cpp
字号:
}
break;
//得到本节点的路由表
case ParaLocalNodeRouteTable:
aStr += "-------------------------------------------------------------------------------" ;
aStr += "\r\n";
//yuqi2005425 index += 2; //for 32 node length = 32*4+ 26*7 + 20 =330>256 ,长度2字节
index += 3;
LocalNodeRoute.NodeNum = (UINT8)PRUToDTEbuffer[index]; //节点的个数
index++;
for(i=0;i<LocalNodeRoute.NodeNum;i++)
{
for(j=0;j<4;j++)
LocalNodeRoute.IP[i].IPaddr[j] = (UINT8)PRUToDTEbuffer[index+j];
if(i == 0)
{
LocalIP[0] = '\0';
for(m=0;m<4;m++)
{
itoa((UINT8)PRUToDTEbuffer[index+m], string3, 10);
strcat(LocalIP, string3);
if(m < 3)
strcat(LocalIP, " .");
}
}
/*else
InitNetwork->NodeMemo->Lines->Add(aStr.sprintf(" 路由的节点IP: %d.%d.%d.%d",(UINT8)PRUToDTEbuffer[index],
(UINT8)PRUToDTEbuffer[index+1],
(UINT8)PRUToDTEbuffer[index+2],
(UINT8)PRUToDTEbuffer[index+3])); */
//yuqi20050510
index += 4;
}
LocalNodeRoute.RouteNum = (UINT8)PRUToDTEbuffer[index];//本节点路由的条数
STemp.Format("本节点路由的条数: %d", (UINT8)PRUToDTEbuffer[index]); //yuqi20050510
aStr += STemp;
aStr += "\r\n";
index++;
for(i=0;i<LocalNodeRoute.RouteNum;i++)
{
LocalNodeRoute.LocalRoute[i].Numhop = (UINT8)PRUToDTEbuffer[index];
index++;
//yuqi2005510
string1[0] = '\0';
strcat(string1, LocalIP);
for(j=0;j<LocalNodeRoute.LocalRoute[i].Numhop;j++)
{
string2[0] ='\0';
LocalNodeRoute.LocalRoute[i].NumofNode.NumofNodeList[j] = (UINT8)PRUToDTEbuffer[index+j];
strcat(string1, "-->");
string3[0] = '\0';
for(m=0;m<4;m++)
{
itoa(LocalNodeRoute.IP[LocalNodeRoute.LocalRoute[i].NumofNode.NumofNodeList[j]].IPaddr[m], string3, 10);
strcat(string2, string3);
if(m < 3)
strcat(string2, " .");
}
strcat(string1, string2);
}
index += LocalNodeRoute.LocalRoute[i].Numhop ;
STemp.Format("%s", string1);
aStr += STemp;
aStr += "\r\n";
string1[0] = '\0'; // yuqi2005331
}
break;
//本节点是否对分组处理
case SendIDToPCCommand:
aStr += "-------------------------------------------------------------------------------" ;
aStr += "\r\n";
IDTable[IDindex].PktID = (((UINT16)PRUToDTEbuffer[2])<<8)+ (UINT16)PRUToDTEbuffer[3];
//网络层的ID
IDTable[IDindex].NetID = (((UINT16)PRUToDTEbuffer[7])<<8)+ (UINT16)PRUToDTEbuffer[6];
if(IDTable[IDindex].NetID == 0)
{
STemp.Format("没有处理%d分组", IDTable[IDindex].PktID);
aStr += STemp;
aStr += "\r\n";
}
else
{
STemp.Format("已经处理%d分组,处理分组的网络层ID是%d", IDTable[IDindex].PktID, IDTable[IDindex].NetID);
aStr += STemp;
aStr += "\r\n";
}
IDindex++;
if(IDindex >0xffff) IDindex = 1;
break;
//源节点已确认分组
case SendAckIDToPCCommand:
aStr += "-------------------------------------------------------------------------------" ;
aStr += "\r\n";
m = (((UINT16)PRUToDTEbuffer[3])<<8) + (UINT16)PRUToDTEbuffer[2];
for(i=0;i<IDindex;i++)
{
if (m == IDTable[i].NetID)
{
switch((UINT8)PRUToDTEbuffer[4])
{
case 0:
STemp.Format("目的节点对分组%d已经确认" , IDTable[i].PktID);
aStr += STemp;
aStr += "\r\n";
break;
case 1:
STemp.Format("隐式确认%d分组" , IDTable[i].PktID);
aStr += STemp;
aStr += "\r\n";
break;
case 2:
STemp.Format("网内网关的端到端确认%d分组" , IDTable[i].PktID);
aStr += STemp;
aStr += "\r\n";
break;
}
break;
}
}
break;
// 源节点的报文没有确认
case SendNotRecvAckIDToPCCommand:
m = (((UINT16)PRUToDTEbuffer[3])<<8) + (UINT16)PRUToDTEbuffer[2];
for(i=0;i<IDindex;i++)
{
if (m == IDTable[i].NetID)
{ aStr += "-------------------------------------------------------------------------------" ;
aStr += "\r\n";
STemp.Format("分组%d没有被确认" , IDTable[i].PktID);
aStr += STemp;
aStr += "\r\n";
break;
}
}
// IDindex--;
break;
//0xa0网络层收到的分组显示
case SendPcNetRecvDataToDebug:
tblock = localtime(&timer);
aStr += "-------------------------------------------------------------------------------" ;
aStr += "\r\n";
timer = time(NULL);
tblock = localtime(&timer);
STemp.Format("当前时间为:%d:%d:%d", tblock->tm_hour, tblock->tm_min, tblock->tm_sec);
aStr += STemp;
aStr += "\r\n";
string1[0] = '\0';
string2[0] = '\0';
Length = PRUToDTEbuffer[1]*256 + PRUToDTEbuffer[2];
for(i=3;i<(Length+3);i++)
{
itoa((UINT8)PRUToDTEbuffer[i], string1, 16);
strcat(string2, string1);
strcat(string2, " ");
}
STemp.Format("网络层接收的数据 %s", string2);
aStr += STemp;
aStr += "\r\n";
break;
//网络层发送信息的显示
case SendPcNetSendDataToDebug:
aStr += "-------------------------------------------------------------------------------" ;
aStr += "\r\n";
timer = time(NULL);
tblock = localtime(&timer);
STemp.Format("当前时间为:%d:%d:%d", tblock->tm_hour, tblock->tm_min, tblock->tm_sec);
aStr += STemp;
aStr += "\r\n";
string1[0] = '\0';
string2[0] = '\0';
Length = PRUToDTEbuffer[1]*256 + PRUToDTEbuffer[2];
for(i=3;i<(Length+3);i++)
{
itoa((UINT8)PRUToDTEbuffer[i], string1, 16);
strcat(string2, string1);
strcat(string2, " ");
}
STemp.Format("网络层发送的数据 %s", string2);
aStr += STemp;
aStr += "\r\n";
break;
//得到PRU等待发送的分组个数
case PhyWaitSendPktNum:
aStr += "-------------------------------------------------------------------------------" ;
aStr += "\r\n";
STemp.Format("等待发送的分组个数: %d",PRUToDTEbuffer[2]);
aStr += STemp;
aStr += "\r\n";
STemp.Format("普通物理层剩余的队列个数: %d",PRUToDTEbuffer[3]);
aStr += STemp;
aStr += "\r\n";
STemp.Format("优先物理层剩余的队列个数: %d",PRUToDTEbuffer[4]);
aStr += STemp;
aStr += "\r\n";
break;
//得到告警的信息
case SendEmergencyInfo:
aStr +="----------告警信息------------------";
aStr += "\r\n";
switch(PRUToDTEbuffer[2])
{
case 0:
aStr += "自检通过,欢迎使用无线分组网通信系统!";
aStr += "\r\n";
break;
case 1:
aStr += "初始化完成,请配置网络参数,并选择系统工作模式,否则区本机默认参数!";
aStr += "\r\n";
break;
case 2:
aStr += "系统监测到本机节点与网内其它节点有冲突,请重新配置!";
aStr += "\r\n";
break;
case 3:
aStr += "电台预置节点号与系统内其它节点冲突,设置无效!";
aStr += "\r\n";
break;
case 4:
aStr += "电台处于职守工作状态,不允许发送!";
aStr += "\r\n";
break;
case 5:
aStr += "数据传发模式要求的最大数据跳超过于设置的时隙允许跳数,可能会引起信道碰撞!";
aStr += "\r\n";
break;
case 6:
aStr += "非分组无线网模式,该项参数设置无效!";
aStr += "\r\n";
break;
case 7:
aStr += "停止节点注册,等待其它节点信息!";
aStr += "\r\n";
break;
case 8:
aStr += "不能发数据给自己,丢弃该分组!";
aStr += "\r\n";
break;
case 9:
aStr += " 要发送的分组超出最大分组长度!";
aStr += "\r\n";
break;
case 10:
aStr += " 接收其它节点对本机节点的非法注销,本节点强制注册!";
aStr += "\r\n";
break;
case 11:
aStr += " 目的节点在退出节点队列,丢弃该分组!";
aStr += "\r\n";
break;
case 12:
aStr += " 设置节点号与本机预置节点号相同,不重新初始化!";
aStr += "\r\n";
break;
case 13:
aStr += " 译码缓存已满!";
aStr += "\r\n";
break;
case 14:
aStr += " 应用层数据提交网络层失败!";
aStr += "\r\n";
break;
case 15:
aStr += " 物理层暂存缓冲区已满,写入失败!";
aStr += "\r\n";
break;
case 16:
aStr += "目前就是该工作模式 !";
aStr += "\r\n";
break;
case 17:
aStr += " 系统支持的最大用户数位32个,请重新配置!";
aStr += "\r\n";
break;
case 18:
aStr += " 网络参数表加注成功!";
aStr += "\r\n";
break;
case 19:
aStr += "网络参数表加注失败 !";
aStr += "\r\n";
break;
case 20:
aStr += " 本子网网内还存在其它非法网关节点!";
aStr += "\r\n";
break;
case 21:
aStr += "本子网网内不存在有效网关节点 !";
aStr += "\r\n";
break;
case 22:
aStr += " 关闭周期性路由公告!";
aStr += "\r\n";
break;
case 23:
aStr += " 退出网络成功!";
aStr += "\r\n";
break;
case 24:
aStr += "默认网络参数错误,请重新加注 !";
aStr += "\r\n";
break;
default:break;
}
break;
default:break;
}
}
}
//-------------------------------------------------------------------------------
//
//----------------------------------------------------------------------------------
UINT RecvThread(LPVOID pvParam)
{
bool abContine = true;
DWORD dwEventMask = 0;
OVERLAPPED ov;
HANDLE arHandles[2];
DWORD dwWait;
memset(&ov, 0, sizeof(ov));
ov.hEvent = CreateEvent(0, true, 0, 0);
arHandles[0] = m_hThreadTerm;
while(abContine)
{
BOOL abRet = ::WaitCommEvent(m_hCommPort, &dwEventMask, &ov);
if(!abRet)
ASSERT(GetLastError() == ERROR_IO_PENDING);
arHandles[1] = ov.hEvent;
dwWait = WaitForMultipleObjects(2, arHandles, FALSE, INFINITE);
switch(dwWait)
{
case WAIT_OBJECT_0:
AfxEndThread(1);
break;
case WAIT_OBJECT_0 + 1:
{
EnterCriticalSection(&m_csLock);
DWORD dwBytesRead = 0;
OVERLAPPED ovRead;
BOOL bRet = false;
COMSTAT ComStat;
DWORD dwErrorFlags;
memset(&ovRead, 0, sizeof(ovRead));
ovRead.hEvent = CreateEvent(0, true, 0, 0);
do
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -