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

📄 new_communication.c

📁 基于S3C4510的家庭网关的通讯进程程序源码
💻 C
📖 第 1 页 / 共 5 页
字号:
	          res=(int)(buf[3]>>4)&0x0f;
	          NetNode[netwk][node].zigbee_node=buf[1];	                     	   
	          NetNode[netwk][node].real_node=buf[3];	                     	   
	          zig_node[res] = (unsigned int)node;
	          for(m=0;m<2;m++)
	          {	        	     
	               tmp_buf[m] = buf[m+5];	                                
	           }
	          tmp_buf[2] = '\0';
	          /*转化并显示电量*/
	          egy=((tmp_buf[1]<<8)&0xff00)+tmp_buf[0];
	          cell1=(float)(egy/1023.0*3.3)*1000;
	          NetNode[netwk][node].cell=(unsigned int)cell1;
	          if(NetNode[netwk][node].cell < min_cell_energy)
	          {
	           /*发送电池报警邮件*/
	           sprintf(tittle,"dian chi bao jing");
	           sprintf(body,"dian chi dian liang bu zhu");
	           SendMailStr = Send_Mail_Packet(NetwkCode,NodeCode,DataStr);	                           
	           mail(DstStr,SrcStr,tittle,body,SendMailStr);                    
	          }
	          wait_flag = TRUE;
	          break;
	         }
	         else if(NetNode[netwk][node].flag==0)/*找到新节点*/
	         {
	           NetNode[netwk][node].flag=1;
	           NetNode[netwk][node].timeout=5;//设定节点丢失的时间溢出为5
	           /*将zigbee节点号于实际子节点号相对应*/
	           NetwkCode = (unsigned char)netwk;
	           NodeCode = (buf[3]>>4)&0x0f;	                      	    
		   res=(int)(buf[3]>>4)&0x0f;
		   NetNode[netwk][node].zigbee_node=buf[1];	                     	   
	           NetNode[netwk][node].real_node=buf[3];	                     	   
	           zig_node[res] = (unsigned int)node;
	           Judge_Node_Type(netwk,node,buf[3]&0x0f);
	           for(m=0;m<2;m++)
	           {	                               	
	             tmp_buf[m] = buf[m+5];/*读取电池电量*/	                                
	           }
	           tmp_buf[2] = '\0';
	           /*转化并显示电量*/
	           egy=((tmp_buf[1]<<8)&0xff00)+tmp_buf[0];
	           cell1=(float)(egy/1023.0*3.3)*1000;
	           NetNode[netwk][node].cell=(unsigned int)cell1;	                             
	           sprintf(tittle,"jie dian jia ru");/*有新节点加入*/
	           sprintf(body,"you xin jie dian jia ru");
	           SendMailStr = Send_Mail_Packet(NetwkCode,NodeCode,DataStr);	                           
	           mail(DstStr,SrcStr,tittle,body,SendMailStr);	 
	           wait_flag = TRUE;
	           break;   
	         }
	         else
	         {
	            printf("netnode flag error\n");
	            wait_flag = TRUE;
	          }
	        }
	        else 
	        {
	        /*如果此时有安放信息到来则相应安防信息*/                 	
	        /*安防信息的应答信息发送*/
	        ResDevData[1]=buf[1];	                 	
	        if(buf[4]==report_switch1_order)
	        {
	           ResDevData[4] = respond_switch1;
	        }
	        else if(buf[4]==report_switch2_order)
	        {
	           ResDevData[4] = respond_switch2;	
	        }
	        else
	        {printf("no alarm infor");break;}	                 	
	        ResDevData[3]=buf[3];
	        if(((buf[3]&0x0f)==0x04)||((buf[3]&0x0f)==0x05))
	        {
	           /*报警信息应答*/ 	
	          if(alarm_flag==0)
	            {ResDevData[5]=alarm_unreply;}
	          else
	            {ResDevData[5]=alarm_reply_data;}
	         }
	         else       /*设/撤防信息应答*/
	         {ResDevData[5]=alarm_reply_data;}
	         ResDevData[6] = Bit_Xor(6,ResDevData);	                 		                 
	         write(fd,ResDevData,strlen(ResDevData));
	         /*调用设防子程序*/
	         alarm_return=Alarm_Inf(buf);
                 switch(alarm_return)
                 {
            	    case -1: printf("alarm_return error\n");break;
            	    case  2: printf("节点报警\n");break;
            	    case  0: printf("解除设防\n");break;
            	    case  1: printf("设防启动\n");break;
            	    default: printf("alarm_return is not right.\n");
                  }	                 	
	          wait_flag = TRUE;
	          break;
	        }
	          memset(buf,'\0',sizeof(buf));	                  
	       }
	       else if(buf[0]==0x52)  
	       {                      
                 if(i==22)
                 {
             	   if(NetNode[netwk][node].flag==1)
             	   {
                      NetNode[netwk][node].timeout--;
                      if(NetNode[netwk][node].timeout<1)   
                      {
                      	/*时间溢出删除节点*/
                        NetNode[netwk][node].flag=0;
                        NetwkCode = (unsigned char)netwk;
                        NodeCode = (NetNode[netwk][node].real_node>>4)&0x0f;
                        sprintf(tittle,"shan chu jie dian");
                        sprintf(body,"you jie dian cha xun bu dao");
                        memset(tmp_buf,'\0',sizeof(tmp_buf));	                        
	                SendMailStr = Send_Mail_Packet(NetwkCode,NodeCode,DataStr);	                           
	                mail(DstStr,SrcStr,tittle,body,SendMailStr);
	                wait_flag = TRUE;
	                break;   
                      }  
                   }
                   else if(NetNode[netwk][node].flag==0)
                   {wait_flag = TRUE;}
                   else
                   {
                    printf("NetNode[netwk][node].flag error\n");
                    wait_flag = TRUE;
                   }
                 }
                 else
                    {wait_flag = TRUE;}
               }
               else         
               { wait_flag = TRUE;}
          }
          else //对应wait_flag==FALSE
          {
             if(i==22)
             {             	       
               if(NetNode[netwk][node].flag==1)
               {
                 NetNode[netwk][node].timeout--;
                 if(NetNode[netwk][node].timeout<1)   
                  {
                     /*时间溢出删除节点*/
                     NetNode[netwk][node].flag=0;
                     NetwkCode = (unsigned char)netwk;
                     NodeCode = (NetNode[netwk][node].real_node>>4)&0x0f;
                     sprintf(tittle,"shan chu jie dian");
                     sprintf(body,"you jie dian cha xun bu dao");
                     memset(tmp_buf,'\0',sizeof(tmp_buf));
	             SendMailStr = Send_Mail_Packet(NetwkCode,NodeCode,DataStr);	                           
	             mail(DstStr,SrcStr,tittle,body,SendMailStr);                               
	             break;  
	           }
	         }
	        else
                {printf("NetNode[netwk][node].flag error\n");
                 wait_flag = TRUE;}
              }
        }              
     }
  /*刷新网页*/
  Renew_Html(); 
  /*信息初始化pipe管道查询*/
  memset(PipeBuffer,'\0',sizeof(PipeBuffer));   
  restr=read(init_pipe_fd,PipeBuffer,BUFFER_SIZE);
  if(restr!=0)
  {
    /*重新配置用户信息*/
    Get_User_Inf();
    Get_Collect_Time();
    Get_Mail_Address(); 
    Renew_Html();			     
   }
   /*命令发送pipe管道查询*/
   memset(PipeBuffer,'\0',sizeof(PipeBuffer));   
   restr=read(pipe_fd,PipeBuffer,BUFFER_SIZE);
   if(restr!=0)
   {
   	/*有控制命令到来*/
	Control_Order_Send(fd,PipeBuffer);
	Renew_Html();			     
    }
    /*小区信息pipe管道查询*/
    memset(PipeBuffer1,'\0',sizeof(PipeBuffer1));   
    restr=read(inf_pipe_fd,PipeBuffer1,PIPEBUFFER_SIZE);
    if(restr!=0)
    {
    	/*小区信息到来,点亮信息指示灯*/
	testdev = open("/dev/test",O_RDWR | O_NOCTTY );
        if ( testdev == -1 )
        {
            printf("why not open file \n");
            //exit(0);
         }
         testdev_flag = 1;/*信息指示灯亮标志*/
         if(inf_num == SetInfNum+1) inf_num = 0;		
	 Renew_Html_Inf(PipeBuffer1,inf_num);
	 inf_num++;
	 Renew_Html();			     
     }
    /*小区信息已阅读pipe管道查询*/
     memset(PipeBuffer,'\0',sizeof(PipeBuffer));   
     restr=read(reply_pipe_fd,PipeBuffer,BUFFER_SIZE);   	
     if(restr!=0)
     {
	if(testdev_flag == 1)
        {
        /*信息已阅熄灭信息指示灯*/
          close(testdev);
          testdev_flag = 0;
	}
	anniu_flag = 0;
	for(i=0;i<SetInfNum+1;i++)
 	{ 
          PipeInfBuffer[i][0]=' ';
	 }
	 if(alarm_tran_flag == 1)
	 {
	    /*报警信息已阅*/
            NetNode[AlarmNetNum][AlarmNodeNum].state="正常";
            Control_Order_Send(fd,PipeBuffer);
	  }		
          Renew_Html(); 				     
       }
/*定时查询模拟量数据及脉冲量数据  */
   restr = Select_Time_Interval();
   if(restr == 0)
   {
     AskData[1] = inquire_encode1;	          
     for(netwk1=0;netwk1<NetNum;netwk1++)
     {
       if(netwk1!=0)
        {node1=0;}
       else
 	{node1=1;}    
       for(;node1<NodeNum;node1++)
       {
          AskData[1]++;
          /*节点号对应转换*/
          AskData[3] = NetNode[netwk1][node1].real_node;
          AskData[5] = Bit_Xor(5,AskData);                 
          if(NetNode[netwk1][node1].flag==1)
          {
     	   /*调用读脉冲、模拟量程序*/                                                    
            Data_Flag=Receive_Packet(fd,netwk1,AskData);                                                   
            if(Data_Flag==1)
            {
               NetNode[netwk1][node1].data_flag=1;
             }
             else if(Data_Flag==0)
             {
             /*data_flag是1表明曾经收到过此节点脉冲量数据,现在可能节点故障*/ 
               if(NetNode[netwk1][node1].data_flag==1)
               {                                                               	
                  NetNode[netwk1][node1].data_timeout--;
                  if(NetNode[netwk1][node1].data_timeout<1)
                  {                                                                        
                     NetNode[netwk1][node1].data_flag=0;
                     NetwkCode = (unsigned char)netwk1;
                     NodeCode = (NetNode[netwk1][node1].real_node>>4)&0x0f;
                     /*数据采集子节点故障报警发邮件*/
	             sprintf(tittle,"jie dian gu zhang bao jing");
	             sprintf(body,"cai ji jie dian fa sheng gu zhang");
	             memset(tmp_buf,'\0',sizeof(tmp_buf));
	             SendMailStr = Send_Mail_Packet(NetwkCode,NodeCode,DataStr);	                           
	             mail(DstStr,SrcStr,tittle,body,SendMailStr);                                                                            
                   } 
                 }                                                               			
               }
               else
                   {printf("Data_Flag return error\n");}                                                           
           } 
           /*在定时读节点数据的过程中检查各通讯管道是否有命令到来*/
           /*信息初始化pipe管道查询*/
           memset(PipeBuffer,'\0',sizeof(PipeBuffer));   
   	   restr=read(init_pipe_fd,PipeBuffer,BUFFER_SIZE);
	   if(restr!=0)
	   {
	       Get_User_Inf();
               Get_Collect_Time();
               Get_Mail_Address(); 
	       Renew_Html();			     
            } 
             memset(PipeBuffer,'\0',sizeof(PipeBuffer));   
   	     restr=read(anniu_pipe_fd,PipeBuffer,BUFFER_SIZE);
	     if(restr!=0)
	     { 
	         Anniu_Inf_Send();	
	     }     
             memset(PipeBuffer,'\0',sizeof(PipeBuffer));   
   	     restr=read(pipe_fd,PipeBuffer,BUFFER_SIZE);
	     if(restr!=0)
	     {
		 Control_Order_Send(fd,PipeBuffer);			     
             }
              /*小区信息pipe管道查询*/
              memset(PipeBuffer1,'\0',sizeof(PipeBuffer1));   
   	      restr=read(inf_pipe_fd,PipeBuffer1,PIPEBUFFER_SIZE);
	      if(restr!=0)
	      {
	          testdev = open("/dev/test",O_RDWR | O_NOCTTY );
                  if ( testdev == -1 )
                  {
                      printf("why not open file \n");
                  }
                  testdev_flag = 1;
		  if(inf_num == SetInfNum+1) inf_num = 0;		
		  Renew_Html_Inf(PipeBuffer1,inf_num);
		  inf_num++;
		  Renew_Html();			     
               }
               /*小区信息已阅读pipe管道查询*/
               memset(PipeBuffer,'\0',sizeof(

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -