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

📄 tcpip_chuli_task.c

📁 c8051f020实现4个 产UART 口
💻 C
📖 第 1 页 / 共 2 页
字号:

#include "all.h"

void Reply_TCPIP_SET_OK(uchar Fun) ;
void  Reply_TCPIP_Set_False(uchar Fun)  ;
void  Reply_TCPIP_QueRen();
uchar TCPIP_IS_CS_OK() ;
void  DaBao_TCPIP_And_Send(uchar fun,char *Bufff,uint Lenn) ;

bit   Is_Tcp_Or_Key_B;    //TCP能运行或  KEY 能运行之任务,1能运行
                                       //两者只能一个能运行

uchar  Second_WoSou;   //握手秒标志
uchar  Second_wucnt;
uchar  Net_oK_FLAG_0_Cnt=0;
uint   Re_XinTcp_JingLei_cnt=0;   //重新发新警情计数器

code  uchar  RestTcp[12]={0xA1,0X25,0X06,0X01,'8','8','8','8','8',0XFF};

void TcpIp_CHULI_Taskqq(void)  _task_  TcpIp_CHULI   {       //   警情处理任务
       xdata uchar ttt,ii;
	uchar Faaa[2];
       os_wait2(K_SIG, 0);
       while(1)   {	   
	                 os_wait2(K_TMO,2);      
		          Dog_TcpIp_CHULI_cnt=0; //看门狗计数器


                        //  通知TCPIP  有新警情================================================ 
                       //  通知TCPIP  有新警情================================================ 
                       //  通知TCPIP  有新警情================================================ 
                        if(  Re_XinTcp_JingLei_cnt!=0)  { // 保证16 秒重新发一次, 重新发新警情计数器
									          
                                      Re_XinTcp_JingLei_cnt--;
					  if(  Re_XinTcp_JingLei_cnt>RE_Fa_Jing_TCPIP4000)
					  	      Re_XinTcp_JingLei_cnt=RE_Fa_Jing_TCPIP4000;
                         }
	                 if( XinTcp_JingLei_Byte!=0&&  Re_XinTcp_JingLei_cnt==0)    {   //  通知TCPIP  有新警情 
	                               
			              // XinTcp_JingLei_Byte =0;  //  通知屏显示
			               
			               // while(KEY_TX_Right_B==0 )     os_wait2(K_TMO,2);
					 //KEY_TX_Right_B=0;    //得到信号灯
				 	 //上传警情命令54
					 // 注:数据长度:7 (1 bytes)
					 //   数据:6Byte 年月日时分秒 + 1Byte的警情字节
                                     GPRS_Xin_485_b_FLAG&=(~XIN_GPRS_IN_B);
					  DaBao_TCPIP_And_Send(54,(uchar *)&struct_JingQing_Current_True.Jing_time[0], 7);
					
					 // os_wait2(K_TMO,200);
 					  //KEY_TX_Right_B=1;	//放信号灯

					  Re_XinTcp_JingLei_cnt=RE_Fa_Jing_TCPIP4000; // 保证16 秒重新发一次, 重新发新警情计数器
									          
 					  ii=0;
					  while(1)  {   //wait 1.5s
						 	 os_wait2(K_TMO,5);
							 if(++ii>150) {
	                                                  break;
							 }
							 if( (GPRS_Xin_485_b_FLAG&XIN_GPRS_IN_B)==XIN_GPRS_IN_B)  {   
	                                                                      GPRS_Xin_485_b_FLAG&=(~XIN_GPRS_IN_B);
										       if(TCPIP_IS_CS_OK()==1&&GPRS_RX_Buff[0]==1&&GPRS_RX_Buff[2]==54)  { //   
										                  //收到应答ok
										                   Re_XinTcp_JingLei_cnt=0; //重新发新警情计数器
										                  XinTcp_JingLei_Byte =0;  //  通知屏显示
										                  break;
											}
							 }					   
			            }
	                }
                        //=====以上是报警时主动发警情 ======================
                        //如不成功则过16秒再重新发一次
  			//=====以上是报警时主动发警情 ======================
  			//=====以上是报警时主动发警情 ======================




			   //= ===//以下是对TCPIP的设查的处理===============================			
			   if( (GPRS_Xin_485_b_FLAG&XIN_GPRS_IN_B)==XIN_GPRS_IN_B)  {   
			   	                //以下是对TCPIP的设查的处理
			   	               while(Is_Tcp_Or_Key_B==0)  {
								    os_wait2(K_TMO,2);      
								  Dog_TcpIp_CHULI_cnt=0; //看门狗计数器
						 }
						 Is_Tcp_Or_Key_B=0;
							   
			   	                Attand_TCPIP();
								
						 Is_Tcp_Or_Key_B=1;
			   	                GPRS_Xin_485_b_FLAG&=(~XIN_GPRS_IN_B);
			   }
			   //===========================================================


			   //===============以下是握手时间到则握手================
                        if(  Second_WoSou  ==  0xff  )   {    //握手秒标志 
                                   Second_WoSou  =  0; 
					if(++Second_wucnt>26)	 {
                                                  Second_wucnt=0;
							 //握手
							 Faaa[0]=0xaa;
							 Faaa[1]=0xaa;

							  GPRS_Xin_485_b_FLAG&=(~XIN_GPRS_IN_B);
							 DaBao_TCPIP_And_Send(56,Faaa, 2);  //发握手命令
							 
							 ttt=0;
							  
							 while(1)  {      //    1.5秒
							 	         os_wait2(K_TMO,5);  
                                                                 if( (GPRS_Xin_485_b_FLAG&XIN_GPRS_IN_B)==XIN_GPRS_IN_B)  {   
                                                                                if(TCPIP_IS_CS_OK()==1)  {
													if(GPRS_RX_Buff[0]==1)	{			//&&GPRS_RX_Buff[2]==56)
                                                                                                         Para_all_True.Net_oK_FLAG=1;
															Net_oK_FLAG_0_Cnt=0;	
															break;
													}
											   }
									  }
									  if(++ttt>150) {			//时限到						  	      
											if(++Net_oK_FLAG_0_Cnt>=2) {	
													 Net_oK_FLAG_0_Cnt=0;
	                                                                                      Para_all_True.Net_oK_FLAG=0;
													// 以下是连续两次握手不成功,进行重新连接
													MoveByte(GPRS_TX_Buff, RestTcp, 12);
													//FA_TCPIP_Buff();
													 GPRS_TX_Len=10;  //GPRS_TX_Buff[3]+6;		
												        GPRS_TX_cnt=0;		
											               
											                 GPRS_TX_Len--;	
														  
													  SBUF0=GPRS_TX_Buff[0];


													 //===============================================
										       }
											break;
									  }	
							 } 					 
					}	
                        }
			   //===============以上是握手时间到则握手================
			 
	   }
}



/**********************************************************************
**函数原型:   void Atttand_TonCen()  
**入口参数:    
**出口参数:   无
**返 回 值:   无
**说    明: 对TCPIP的设查的处理
************************************************************************/

// 对TCPIP的设查的处理
data uchar *MPPo1,*MPPo2;
void   Attand_TCPIP( )   {
              
	       // uchar i;
              uchar Mbufrem;
		 uchar ii,Len,num,startn;
		
		  

              XinKey_b=0;		
	

	       if(TCPIP_IS_CS_OK()==0)  return ; //   Reply_TCPIP_Set_False();  &&GPRS_RX_Buff[0]!=0x0a
	   
		
	        if(GPRS_RX_Buff[0]==0x02)       return;	   //02 不需要回答

		 //os_wait2(K_TMO, 5);
		 //Reply_TCPIP_QueRen();	
		 os_wait2(K_TMO, 100);
                    
			
               switch(GPRS_RX_Buff[0])  {
		                    case 3:
						 //系统进行一次布防
						  BuFang_Once() ;
						  Reply_TCPIP_SET_OK(3);
						   os_wait2(K_TMO, 250);

					break;
					   case 4:
                                           //系统进行一次在家布防
					 	 ZaiJia_BuFang_Once() ;
						 Reply_TCPIP_SET_OK(4);
						  os_wait2(K_TMO, 250);


					break;
					   case 5:
					   	  //系统进行一次撤防
						   CeFang_Once() ;
						   Reply_TCPIP_SET_OK(5);
						    os_wait2(K_TMO, 250);

					break;
					   case 6:  //06	时间设置  (暂不用下传) 
                                              Reply_TCPIP_SET_OK(6);
											  
					break;
					case 7:  //07	IP地址设置
                                                  for(ii=0;ii<4;ii++)  {
								   Para_all_True.IP[ii]=GPRS_RX_Buff[2+ii];  // 
							  }
							  Para_all_True.IP_Port=GPRS_RX_Buff[2+ii];
							  Para_all_True.IP_Port<<=8;
							  Para_all_True.IP_Port|=(uint)GPRS_RX_Buff[2+ii+1];
												
							  Para_all_True.Change_Flag=1;   
                                                   Reply_TCPIP_SET_OK(7);
					break;
					case 8: //08	登录网络(登录厂家服务器)
					                  //要不要断网命令??????????

									  

					break;
					case 9:  //09	报警电话设置
                                                 
							  num=GPRS_RX_Buff[2];		//1234		  
							  Len=GPRS_RX_Buff[3];
							   if(Len>15||num==0||num>5)
							  	         Reply_TCPIP_Set_False(9);
                                                  else {
							  
								         for(ii=0;ii<(Len+1);ii++)  {
										  Para_all_True.Phone_1To6[num-1][ii]=GPRS_RX_Buff[3+ii];  // ascii 码
									  }
									  Para_all_True.Phone_1To6[num-1][ii]='\0';    // ascii 码
									  Para_all_True.Phone_1To6[num-1][0]=GPRS_RX_Buff[3];     //长度 不是 ascii 码
									  Para_all_True.Change_Flag=1;

									   Reply_TCPIP_SET_OK(9);
                                                  }
					break;
					   case 10:   //10	密码修改
                                              GPRS_RX_Buff[2+6]=0;		//123456
                                             for(ii=0;ii<6;ii++)  {
                                                       if( GPRS_RX_Buff[2+ii]<'0'||GPRS_RX_Buff[2+ii]>'9') {
                                                                   break;
								}
						   }
						   if(ii==6) {
		                                                  strcpy( &Para_all_True.Mima[0], &GPRS_RX_Buff[2]);
								        Para_all_True.Change_Flag=1;		  
								        Reply_TCPIP_SET_OK(10);
						   }
						    else {

                                                               Reply_TCPIP_Set_False(10);

						    }

					break;

					//其实11 12 36 都 是一样的
					case 11:  //11	地震仪自检
					
                                             En_zijian_B=1;
							  
						   ii=0;
						   while(En_zijian_B)  {    // 2.5 秒
						   	      os_wait2(K_TMO,5);	
						   	      if(ii++>250)   {
                                                                break;
																
								}
						  }
						  DaBao_TCPIP_And_Send(11, &Para_all_True.DiZhenYi_status[0],2);
						

					break;
					case 12:  //12	防震床自检
                                              
                                             En_zijian_B=1;
							  
						   ii=0;
						   while(En_zijian_B)  {    // 2.5 秒
						   	      os_wait2(K_TMO,5);	
						   	      if(ii++>250)   {
                                                                break;
																
								}
						  }
						   DaBao_TCPIP_And_Send(12, &Para_all_True.ChuangTi_status[0],3);

					break;
					   case 13://13	自检间隔设置   0:则不自检

                                                  Para_all_True.ZiJian_Time=GPRS_RX_Buff[2]; 
							  Para_all_True.Change_Flag=1;
							 Reply_TCPIP_SET_OK(13);

					break;
					case 14:  //14	无线防区对码功能
                                              
											  


					break;
					 case 15:
						   	 //有线防区(1-4)对应的字节内容为1:对应的防区为常开防区
	                                          //                                                                           0:对应的防区为常闭防区
                                                 if(GPRS_RX_Buff[2]>1||GPRS_RX_Buff[3]>1||GPRS_RX_Buff[4]>1||GPRS_RX_Buff[5]>1)  
                                                              Reply_JTX_0x24_Set_False();
							else {
									Para_all_True.FangQu_is_1or0[0]=GPRS_RX_Buff[2]; 	      //防区1
									Para_all_True.FangQu_is_1or0[1]=GPRS_RX_Buff[3]; 	      //防区2
									Para_all_True.FangQu_is_1or0[2]=GPRS_RX_Buff[4]; 	      //防区3
									Para_all_True.FangQu_is_1or0[3]=GPRS_RX_Buff[5]; 	      //防区4
									Para_all_True.Change_Flag=1  ;   // 

									 Reply_TCPIP_SET_OK(15);
								}

					break;
					 case 16: //查询有线防区的输入状态
                                                DaBao_TCPIP_And_Send(16, &Para_all_True.FangQu_is_1or0[0],4);
											   
					break;
					 case 17:  //17	布防延时时间设置
                                             	Para_all_True.BuFang_Delay_Time=GPRS_RX_Buff[2]; 	    
							Para_all_True.Change_Flag=1  ;   // 

							 Reply_TCPIP_SET_OK(17);


					break;
					 case 18:   //   18	振铃次数设置2-9
                                               if( GPRS_RX_Buff[2]<2||GPRS_RX_Buff[2]>9)  {

                                                         	 Reply_TCPIP_Set_False(18);

							    }
							else {   	
		   					  	       Para_all_True.ZhenLingCiShu_Time=GPRS_RX_Buff[2]; 	    
									Para_all_True.Change_Flag=1  ;   // 

⌨️ 快捷键说明

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