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

📄 ibmsgateway.c

📁 一个uclinux下进行网络数据处理,及串口读取,CGI配置
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "IBMSGateway.h"char *token,*deviceport,*localserverport;int pointnumber;point_struct point[3000];com_struct read_com;net_struct read_net;char *alarm_monitorname[50];char *alarm_deviceno[50];int alarm_index;int read_comdata_from_file(char *filename,net_struct *net,com_struct *com){   FILE *fp;   int i,re;   char s[30],tmp[30];   char *p;   if ((fp=fopen(filename,"r"))==NULL)   {         re=0;   }   else   {      for(i=0;i<7;i++)      {          fscanf(fp,"%s",s);          p=strstr(s,":");	  memset(tmp,0,30);          strncpy(tmp,s,p-s);          if (!strcmp(tmp,"serverip"))          {            strcpy((*net).serverip,p+1);          }          if (!strcmp(tmp,"serverport"))          {            strcpy((*net).serverport,p+1);          }          if (!strcmp(tmp,"baudrate"))          {            strcpy((*com).baudrate,p+1);          }          if (!strcmp(tmp,"parity"))          {            strcpy((*com).parity,p+1);          }          if (!strcmp(tmp,"databits"))          {            strcpy((*com).databits,p+1);          }          if (!strcmp(tmp,"stopbits"))          {            strcpy((*com).stopbits,p+1);          }          if (!strcmp(tmp,"handshaking"))          {            strcpy((*com).handshaking,p+1);          }      }      re=1;   }   fclose(fp);   return re;}/*void processcomdata(){  int com_fd;  fd_set readfds;  int i,numbytes,checksum,processbuffbytes=0;  unsigned char recvbuff[30],processbuff[256];  char sendbuff[1]={6};  int SystemNo,deviceaddress;  com_fd=opencommport("/dev/ttyS1",read_com);  printf("the serial comport(fd=%d) is now already...\n",com_fd);  FD_ZERO(&readfds);  FD_SET(com_fd,&readfds);  while (1)  {    select(com_fd+1,&readfds,NULL,NULL,NULL);    if (FD_ISSET(com_fd,&readfds))    {	numbytes=read(com_fd,recvbuff,sizeof(recvbuff));        if ((numbytes==1) && (recvbuff[0]==5))  //device send inquire message	{	   write(com_fd,sendbuff,1);	}	else	{           for (i=0;i<numbytes;i++)	      processbuff[processbuffbytes+i]=recvbuff[i];           processbuffbytes=processbuffbytes+numbytes;	   while (processbuffbytes>=7)  //start to process data	   {	       if (processbuff[0]=0xFF)	       {                 checksum=0;                 for (i=0;i<=5;i++)  checksum=checksum+processbuff[i];		 if (processbuff[6]==(checksum-(checksum/128)*128))//check success		 {		    write(com_fd,sendbuff,1);		    if ((processbuff[1] & 0x0F)==9)  //sensor event		    {		       if (((processbuff[2] & 0x1F)==5) || ((processbuff[2] & 0x1F)==11))    //smoke or temp sensor event		       {			   SystemNo=(processbuff[4]>>5)+1;			   deviceaddress=(processbuff[4] & 0x1F)*16+(processbuff[3] & 0x0F);			   if ((processbuff[1]>>4)==0)   //sensor normal			   {				   			   }			   else			   {			      printf("System:%d,address:%d\n",SystemNo,deviceaddress);			      //then the socket will send the data			      			   }		       }		    }		    else if ((processbuff[1] & 0x0F)==5)  //onoff operate		    {			 if ((processbuff[2] & 0x1F)==3)   //reset			 {			    printf("System Reset.\n"); 			    //then the socket will send the reset message			    			 }	 		    }		 }                 //discard these 7 data whether check success or not		 for (i=7;i<processbuffbytes;i++)		    processbuff[i-7]=processbuff[i];                 processbuffbytes=processbuffbytes-7;	       }	       else	       {		   processbuffbytes=0;    	       }	   }	}    }  }}*//*void processdata(){  int localserver_fd,udp_fd,com_fd,max_fd,new_fd;  struct sockaddr_in localserv_addr,udp_addr,their_addr;  unsigned char strbuf[100],recvbuff[30],processbuff[256];  char sendbuff[1]={6};  fd_set readfds;  int numbytes,processbuffbytes=0;  int i,checksum;  int SystemNo,deviceaddress;  char *monitorname;  char deviceno[14];  int sin_size;  char tmpbuf[50];  //creat the local server socket  localserver_fd=socket(AF_INET,SOCK_STREAM,0);  if (localserver_fd==-1)  {    printf("create local server socket error.\n");    exit(1);  }  max_fd=localserver_fd;  //set the socket to nonblock  fcntl(localserver_fd,F_SETFL,O_NONBLOCK);  bzero(&localserv_addr,sizeof(localserv_addr));  localserv_addr.sin_family=AF_INET;  localserv_addr.sin_port=htons(atoi(localserverport));  localserv_addr.sin_addr.s_addr=INADDR_ANY;  if (bind(localserver_fd,(struct sockaddr *)&localserv_addr,sizeof(struct sockaddr))==-1)  {     printf("bind local server port error.\n");     exit(1);  }  if (listen(localserver_fd,5)==-1)  //local server socket is listening...  {     printf("local server socket listen error.\n");     exit(1);  }  printf("the local server socket(fd=%d) is now listening...\n",localserver_fd);  //creat the udp socket  udp_fd=socket(AF_INET,SOCK_DGRAM,0);  if (udp_fd==-1)  {     printf("create device message socket error.\n");     exit(1);  }  bzero(&udp_addr,sizeof(udp_addr));  udp_addr.sin_family=AF_INET;  udp_addr.sin_port=htons(atoi(deviceport));  inet_aton(read_net.serverip,&udp_addr.sin_addr);  printf("the udp socket(fd=%d) is now already...\n",udp_fd);  //open comm port  com_fd=opencommport("/dev/ttyS1",read_com);  printf("the serial comport(fd=%d) is now already...\n",com_fd);  if (com_fd>max_fd)   max_fd=com_fd;  FD_ZERO(&readfds);  FD_SET(localserver_fd,&readfds);  FD_SET(com_fd,&readfds);  while (1)  {     select(max_fd+1,&readfds,NULL,NULL,NULL);     if (FD_ISSET(com_fd,&readfds))     {	FD_SET(localserver_fd,&readfds);	FD_SET(com_fd,&readfds);	numbytes=read(com_fd,recvbuff,sizeof(recvbuff));	if ((numbytes==1) && (recvbuff[0]==5))  //device send inquire message	{	  write(com_fd,sendbuff,1);	}	else// if (recvbuff[0]==0xFF)   //device message	{	   for (i=0;i<numbytes;i++)	     processbuff[processbuffbytes+i]=recvbuff[i];  	   processbuffbytes=processbuffbytes+numbytes;	   while (processbuffbytes>=7)  //start to process data	   {	      if (processbuff[0]=0xFF)	      {		 //first check the sum                 checksum=0;                 for (i=0;i<=5;i++)  checksum=checksum+processbuff[i];		 if (processbuff[6]==(checksum-(checksum/128)*128))//check success	         {	            write(com_fd,sendbuff,1);		    if ((processbuff[1] & 0x0F)==9)  //sensor event		    {		       if (((processbuff[2] & 0x1F)==5) || ((processbuff[2] & 0x1F)==11))    //smoke or temp sensor event		       {                          SystemNo=(processbuff[4]>>5)+1;                          deviceaddress=(processbuff[4] & 0x1F)*16+(processbuff[3] & 0x0F);                          sprintf(monitorname,"%d.%d",SystemNo,deviceaddress);			  if (FindDeviceNo(point,pointnumber,monitorname,deviceno)==0)  //cannot find the deviceno			  {				  printf("cannot find the deviceno of %s.\n",monitorname);			  }			  else			  {		             if ((processbuff[1]>>4)==0)   //sensor normal			     {			     }			     else  //sensor alarm			     {			       printf("monitorname:%s deviceno:%s\n",monitorname,deviceno);			       alarm_monitorname[alarm_index]=(char *)malloc(sizeof(char)*20);			       strcpy(alarm_monitorname[alarm_index],monitorname);			       alarm_deviceno[alarm_index]=(char *)malloc(sizeof(char)*20);			       strcpy(alarm_deviceno[alarm_index],deviceno);			       alarm_index++;                               strcpy(strbuf,"");                               strcatall(strbuf,TokenSeparator,token,TokenSeparator,DeviceSeparator,deviceno,DeviceSeparator,DataSeparator,monitorname,DataSeparator,DataSeparator,"alarm",DataSeparator,NULL);                               sendto(udp_fd,strbuf,strlen(strbuf),0,(struct sockaddr *)&udp_addr,sizeof(struct sockaddr));		      		             }			  }//end if (find deviceno)		       }//end if (smoke or temp sensor event)		    }//end if(sensor event)		    else if ((processbuff[1] & 0x0F)==5)  //onoff operate		    {		       if ((processbuff[2] & 0x1F)==3)   //reset		       {			  printf("System Reset.\n");			  for (i=0;i<alarm_index;i++)			  {		          printf("%s:%s is normal.\n",alarm_deviceno[i],alarm_monitorname[i]);                          strcpy(strbuf,"");		          strcatall(strbuf,TokenSeparator,token,TokenSeparator,DeviceSeparator,alarm_deviceno[i],DeviceSeparator,DataSeparator,alarm_monitorname[i],DataSeparator,DataSeparator,"normal",DataSeparator,NULL);			  free(alarm_deviceno[i]);			  free(alarm_monitorname[i]);			  sendto(udp_fd,strbuf,strlen(strbuf),0,(struct sockaddr *)&udp_addr,sizeof(struct sockaddr));  			  }			  alarm_index=0;		       }//end if (reset)		    }//end if (onoff operate)		 }// end if (check)		 //discard these 7 data whether check success or not                 for (i=7;i<processbuffbytes;i++)		     processbuff[i-7]=processbuff[i];	         processbuffbytes=processbuffbytes-7;	      }//end if (0xFF)	      else  //discard all data	      {		 processbuffbytes=0;	      }           }//end if (processbuffbytes)    	}//end if(device message)       }//end if(FD_ISSET com_fd)     if (FD_ISSET(localserver_fd,&readfds))     {	 FD_SET(localserver_fd,&readfds);	 FD_SET(com_fd,&readfds);	 sin_size=sizeof(struct sockaddr_in);	 if ((new_fd=accept(localserver_fd,(struct sockaddr *)&their_addr,&sin_size))==-1)	 {		continue; 	 }	 printf("local server socket get connection from %s.\n",inet_ntoa(their_addr.sin_addr));	 close(new_fd);     }//end if(FD_ISSET localserver_fd)  } //end while}	  */void processdata(){  int localserver_fd,udp_fd,com_fd,max_fd,new_fd;  struct sockaddr_in localserv_addr,udp_addr,their_addr;  unsigned char strbuf[100],recvbuff[30],processbuff[256],processdata[10];  unsigned char *sendbuff;  fd_set readfds;  int numbytes,processbuffbytes=0;  int i,checksum;  int SystemNo,deviceaddress;  char *monitorname;  char deviceno[14];  int sin_size;  char tmpbuf[50];  char s[10];  char mytmp[256];  char *mytmp2;  long int mytmpd;  time_t t;  char str_t[50];  struct tm *gt;  int isdigital=1;  double f;  //creat the local server socket  localserver_fd=socket(AF_INET,SOCK_STREAM,0);  if (localserver_fd==-1)  {    printf("create local server socket error.\n");    exit(1);  }  max_fd=localserver_fd;  //set the socket to nonblock  fcntl(localserver_fd,F_SETFL,O_NONBLOCK);  bzero(&localserv_addr,sizeof(localserv_addr));  localserv_addr.sin_family=AF_INET;  localserv_addr.sin_port=htons(atoi(localserverport));  localserv_addr.sin_addr.s_addr=INADDR_ANY;  if (bind(localserver_fd,(struct sockaddr *)&localserv_addr,sizeof(struct sockaddr))==-1)  {     printf("bind local server port error.\n");     exit(1);  }  if (listen(localserver_fd,5)==-1)  //local server socket is listening...  {     printf("local server socket listen error.\n");     exit(1);

⌨️ 快捷键说明

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