⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dtedlg.cpp

📁 自己项目组开发的自组网传输中串口通信程序
💻 CPP
📖 第 1 页 / 共 4 页
字号:
                                }
                                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 + -