rfserver.c

来自「MCS51的实现无线接收发送(315M或433M)源程序代码。」· C语言 代码 · 共 579 行 · 第 1/2 页

C
579
字号
	       	if(CmpString(RfRecvDataBuf+1+IDSERIALLEN,AmuData[i],IDSERIALLEN)==STR_EQUAL) break;
	       }
	     if(i==AmuNum)
	       {
	    	   #if DEBUG_RFSERVER
	        MDebugStrLF((INT8UC *)"不是我的成员");
	        #endif
	        return;
	       }  
	     #if DEBUG_RFSERVER
	     //MDebugExMemHex(RfRecvDataBuf,RfRecvDataLen);
	     #endif
	     
      Data=(INT8U *)(RfRecvDataBuf+1+IDSERIALLEN+IDSERIALLEN);
      switch(*Data)
        {
        	case 0x81:
              if(*(Data+1)==0x40)
                {
     	           #if DEBUG_RFSERVER
	                MDebugStrLF((INT8UC *)"报警触发应答");
	                #endif
	                AmuData[i][4]=1;
                }
              else
                {
     	           #if DEBUG_RFSERVER
	                MDebugStrLF((INT8UC *)"查询状况应答");
	                #endif
	                AmuData[i][4]=0;
                }
     	        #if DEBUG_RFSERVER
	             //MDebugExMemHex((INT8UX *)AmuData,AmuNum*5);
	             #endif
	             break;
	             
        	case 0xc0:
     	        #if DEBUG_RFSERVER
	             MDebugStrLF((INT8UC *)"收到SOSS报警应答");
	             #endif

	             break;
        }
   	 }	 
}
//=========================================================
void HdlRfData(void)
{
	  INT8U Temp;
	  
	  #if DEBUG_RFSERVER
	  //MDebugStrLF((INT8UC *)"HdlRfData()");
	  //MDebugExMemHex(Int0RecvBuf,Int0WrIndex);
	  //Int0RdIndex=Int0WrIndex=0;
	  #endif

   RfRecvDataLen=0;
   while(Int0RdIndex!=Int0WrIndex)
     {
     	RfRecvDataBuf[RfRecvDataLen++]=Int0RecvBuf[Int0RdIndex];
     	if(++Int0RdIndex>=INT0RECVBUFSIZE) Int0RdIndex=0;
     }
	  #if DEBUG_RFSERVER
	  //MDebugExMemHex(RfRecvDataBuf,RfRecvDataLen);
	  #endif
	  
	  if((RfRecvDataBuf[0]!=FLAG1)||(RfRecvDataBuf[RfRecvDataLen-1]!=FLAG2))
	    {
	     #if DEBUG_RFSERVER
	     //MDebugStrLF((INT8UC *)"帧出错");
	     //MDebugExMemHex(RfRecvDataBuf,RfRecvDataLen);
	     #endif
	     return;
	    }
	  Temp=GetChkSum(RfRecvDataBuf+1,RfRecvDataLen-3);
	  if(RfRecvDataBuf[RfRecvDataLen-2]!=Temp)
	    {
	    	#if DEBUG_RFSERVER
	     //MDebugStrLF((INT8UC *)"校验和出错");
	     //MDebugExMemHex(RfRecvDataBuf,RfRecvDataLen);
	     #endif
	     return;
	    }
	  HdlRfFrame();
}
//=========================================================
void HdlUartData(void)
{
	  INT8U i,j,Temp;
	  
	  #if DEBUG_RFSERVER
	  //MDebugStrLF((INT8UC *)"HdlUartData()");
	  //MDebugExMemHex(UartRecvBuf,UartWrIndex);
	  #endif
	  
	  Temp=RdRom(ADDR_IDENTITY);
	  if(Temp==HOST)
	    {
      if(UartRecvBuf[0]!=0x7f)
        {
	        #if DEBUG_RFSERVER
	        MDebugStrLF((INT8UC *)"帧出错");
	        MDebugExMemHex(UartRecvBuf,UartWrIndex);
	        #endif
     	   return;
        }
      if(UartRecvBuf[1]!=UartWrIndex-2)
        {
	        #if DEBUG_RFSERVER
	        MDebugStrLF((INT8UC *)"长度出错");
	        MDebugExMemHex(UartRecvBuf,UartWrIndex);
	        #endif
     	   return;
        }
	     if(UartRecvBuf[UartWrIndex-1]!=GetChkSum(UartRecvBuf+1,UartWrIndex-2))
	       {
	    	   #if DEBUG_RFSERVER
         MDebugStrLF((INT8UC *)"校验和出错");
	        MDebugExMemHex(UartRecvBuf,UartWrIndex);
	        MDebugPara("校验和=",GetChkSum(UartRecvBuf+1,UartWrIndex-2));
	        #endif
	        return;
	       }
	     Temp=UartRecvBuf[3];
	     switch(UartRecvBuf[2])
	       {
	       	case 0x01:
	    	        #if DEBUG_RFSERVER
	             MDebugPara("增加AMU=",Temp);
	             #endif
	             
	             UartSendLen=0;
              UartSendBuf[UartSendLen++]=0X7F;
              UartSendBuf[UartSendLen++]=3+(IDSERIALLEN+1)*Temp;
              UartSendBuf[UartSendLen++]=0X81;
              UartSendBuf[UartSendLen++]=Temp;
              
	             for(i=0;i<Temp;i++)
	               {
	    	           #if DEBUG_RFSERVER
                 //MDebugExMemHex(UartRecvBuf+4+i*IDSERIALLEN,IDSERIALLEN);
	                #endif
	                MovXX(UartSendBuf+UartSendLen,UartRecvBuf+4+i*IDSERIALLEN,IDSERIALLEN);
	    	           UartSendLen+=IDSERIALLEN;
	                for(j=0;j<AmuNum;j++)
	                  {
	                  	if(CmpString(UartRecvBuf+4+i*IDSERIALLEN,AmuData[j],IDSERIALLEN)==STR_EQUAL) break;
	                  }
	                if(j==AmuNum)
	                  {
	    	              UartSendBuf[UartSendLen++]=0x01;
	                  	MovXX(AmuData[AmuNum],UartRecvBuf+4+i*IDSERIALLEN,IDSERIALLEN);
	                  	AmuData[AmuNum][4]=0x03;  //通讯失败
	                  	AmuNum++;
	                  }
	                else UartSendBuf[UartSendLen++]=0x02;
	               }
	    	        UartSendBuf[UartSendLen++]=GetChkSum(UartSendBuf+2,UartSendLen-2);
	    	        #if DEBUG_RFSERVER
	             MDebugExMemHex(UartSendBuf,UartSendLen);
	             #endif
	    	        PostToUartSendQ(0);
	    	        
	             #if DEBUG_RFSERVER
	             MDebugPara("AmuNum:",AmuNum);
	             MDebugExMemHex((INT8UX *)AmuData,AmuNum*5);
	             #endif
	       	     break;
	       	case 0x02:
	    	        #if DEBUG_RFSERVER
	             MDebugPara("取消AMU=",Temp);
	             #endif
	             
	             UartSendLen=0;
              UartSendBuf[UartSendLen++]=0X7F;
              UartSendBuf[UartSendLen++]=3+(IDSERIALLEN+1)*Temp;
              UartSendBuf[UartSendLen++]=0X82;
              UartSendBuf[UartSendLen++]=Temp;
              
	             for(i=0;i<Temp;i++)
	               {
	    	           #if DEBUG_RFSERVER
                 //MDebugExMemHex(UartRecvBuf+4+i*IDSERIALLEN,IDSERIALLEN);
	                #endif
	                MovXX(UartSendBuf+UartSendLen,UartRecvBuf+4+i*IDSERIALLEN,IDSERIALLEN);
	    	           UartSendLen+=IDSERIALLEN;
	                for(j=0;j<AmuNum;j++)
	                  {
	                  	if(CmpString(UartRecvBuf+4+i*IDSERIALLEN,AmuData[j],IDSERIALLEN)==STR_EQUAL) break;
	                  }
	                if(j==AmuNum)  UartSendBuf[UartSendLen++]=0x02;
	                else
	                  {
	    	              UartSendBuf[UartSendLen++]=0x01;
	    	              MovXX(AmuData[j],AmuData[j+1],(AmuNum-1)*IDSERIALLEN);
	    	              AmuNum--;
	                  }
	               }
	    	        UartSendBuf[UartSendLen++]=GetChkSum(UartSendBuf+2,UartSendLen-2);
	    	        #if DEBUG_RFSERVER
	             MDebugExMemHex(UartSendBuf,UartSendLen);
	             #endif
	    	        PostToUartSendQ(0);
	    	        
	             #if DEBUG_RFSERVER
	             MDebugPara("AmuNum:",AmuNum);
	             MDebugExMemHex((INT8UX *)AmuData,AmuNum*5);
	             #endif
	       	     break;
	       	case 0x03:
	    	        #if DEBUG_RFSERVER
	             MDebugPara("查询AMU=",Temp);
	             #endif
	             
	             UartSendLen=0;
              UartSendBuf[UartSendLen++]=0X7F;
              UartSendBuf[UartSendLen++]=3+(IDSERIALLEN+1)*Temp;
              UartSendBuf[UartSendLen++]=0X83;
              UartSendBuf[UartSendLen++]=Temp;
              
	             for(i=0;i<Temp;i++)
	               {
	    	           #if DEBUG_RFSERVER
                 //MDebugExMemHex(UartRecvBuf+4+i*IDSERIALLEN,IDSERIALLEN);
	                #endif
	                MovXX(UartSendBuf+UartSendLen,UartRecvBuf+4+i*IDSERIALLEN,IDSERIALLEN);
	    	           UartSendLen+=IDSERIALLEN;
	                for(j=0;j<AmuNum;j++)
	                  {
	                  	if(CmpString(UartRecvBuf+4+i*IDSERIALLEN,AmuData[j],IDSERIALLEN)==STR_EQUAL) break;
	                  }
	                if(j==AmuNum)  UartSendBuf[UartSendLen++]=0x02;  //处于自由工作状态
	                else UartSendBuf[UartSendLen++]=AmuData[j][4];
	               }
	    	        UartSendBuf[UartSendLen++]=GetChkSum(UartSendBuf+2,UartSendLen-2);
	    	        #if DEBUG_RFSERVER
	             MDebugExMemHex(UartSendBuf,UartSendLen);
	             #endif
	    	        PostToUartSendQ(0);
	       	     break;
	       	case 0x04:
	    	        #if DEBUG_RFSERVER
	             MDebugStrLF((INT8UC *)"触发报警");
	             #endif
	             Status=0x40;
	             
	             UartSendLen=0;
              UartSendBuf[UartSendLen++]=0X7F;
              UartSendBuf[UartSendLen++]=2;
              UartSendBuf[UartSendLen++]=0X84;
	    	        UartSendBuf[UartSendLen++]=GetChkSum(UartSendBuf+2,UartSendLen-2);
	    	        #if DEBUG_RFSERVER
	             MDebugExMemHex(UartSendBuf,UartSendLen);
	             #endif
	    	        PostToUartSendQ(0);
	             
	       	     break;
	       	case 0x05:
	    	        #if DEBUG_RFSERVER
	             MDebugStrLF((INT8UC *)"取消报警");
	             #endif
	             Status=0x00;
	             
	             UartSendLen=0;
              UartSendBuf[UartSendLen++]=0X7F;
              UartSendBuf[UartSendLen++]=2;
              UartSendBuf[UartSendLen++]=0X85;
	    	        UartSendBuf[UartSendLen++]=GetChkSum(UartSendBuf+2,UartSendLen-2);
	    	        #if DEBUG_RFSERVER
	             MDebugExMemHex(UartSendBuf,UartSendLen);
	             #endif
	             
	    	        PostToUartSendQ(0);
	             
	       	     break;
	       }
	    
	    }
	  else if(Temp==AMU)
	    {
	    	
	    }
	  else if(Temp==SOSS)
	    {
	    	
	    }
}
//=========================================================

⌨️ 快捷键说明

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