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

📄 ecm.c

📁 有线电视系统前端设备复用器原代码。 用语接受卫星信号
💻 C
📖 第 1 页 / 共 5 页
字号:
				g_ecmg_use_masterslave[1]=2;
				Display("ecmg1: Connect slave ecmg server OK!\r\n");
			}
		}	
		else
		{
			g_ecmg_use_masterslave[1] = 1;
			Display("ecmg1: Connect master ecmg server OK!");
		}

		g_ecmg_connected[1]=1;
		/*----------------------------------------------------------------------------------*/
		/*connect OK                                                                        */
		/*----------------------------------------------------------------------------------*/
		for(;;)
		{
			tm_set(0,0,0);
			
			g_ecmg_waitcommand[1]=ECMG2SCS_CHANNEL_STATUS;

			/*发送通道建立请求*/
			rc=ecmgSend(g_socket_ecmg1,ECMG2SCS_CHANNEL_SET_UP,0,1);
			if(rc<0)
			{
				Display("ecmg1: Send channel setup message socket error!\r\n");
				close(g_socket_ecmg1);
				g_ecmg_connected[1]=0;
				break;
			}
			else if(rc==0)
			{
				close(g_socket_ecmg1);
				g_ecmg_connected[1]=0;
				Display("ecmg1: Send channel setup message time out!\r\n",errno);
				break;
			}
			Display("ecmg1: send channel setup message ok!\r\n");

			haserr=ECMG_NOERROR;
			/*获得当前时间*/
			tm_get(&olddate,&oldtime,&oldtick);
			while(1)
			{	
				/*接收通道状态应答*/
				rc=ecmgRecv(g_socket_ecmg1,ECMG2SCS_CHANNEL_STATUS,0,1);
				if(rc<0) /* socket error */
				{
					haserr=ECMG_SOCKETERROR;
					break;
				}
				else if(rc==1) /* got the waiting message */
					break;

				tm_get(&date,&time,&tick);
				/*两次比较是否超时*/
				if(dif_second(date,time,olddate,oldtime)*10 > g_ca_config.Para_Config[1].Network_Delay)
				{
					haserr=ECMG_TIMEOUTERROR;
					break;					
				}
				my_Delay(10);
			}
			if(haserr==ECMG_SOCKETERROR)
			{
				Display("ecmg1: Receive channel status message socket error! \r\n");			
				close(g_socket_ecmg1);
				g_ecmg_connected[1]=0;
				break;
			}
			else if(haserr==ECMG_TIMEOUTERROR)
			{
				close(g_socket_ecmg1);
				g_ecmg_connected[1] = 0;
				Display("ecmg1: Receive channel status message out of time!\r\n");
				break;
			}

			Display("ecmg1: recevie channel status message ok!\r\n");

			/*----------------------------------------------------------------------------------*/
			/* setup all the stream                                                             */
			/*----------------------------------------------------------------------------------*/
			haserr=ECMG_NOERROR;
			g_ecmg_waitcommand[1]=ECMG2SCS_STREAM_STATUS;
			for(i=0;i<g_ecmg_stream_status_list[1].streamcount;i++)
			{/*根据列表信息建立多个流,最大为32*/
				/*发送建立流请求*/
				rc=ecmgSend(g_socket_ecmg1,ECMG2SCS_STREAM_SET_UP,i,1);
				if(rc<0)
				{
					haserr=ECMG_SOCKETERROR;
					break;
				}
				else if(rc==0)
				{
					haserr=ECMG_TIMEOUTERROR;
					break;
				}
			}
			if(haserr==ECMG_SOCKETERROR)
			{
				Display("ecmg1: Send stream setup message socket error!\r\n");		
				close(g_socket_ecmg1);
				g_ecmg_connected[1]=0;
				break;
			}
			else if(haserr==ECMG_TIMEOUTERROR)
			{
				/*延时,将所有流关闭*/
				ecmg_close_all(g_socket_ecmg1,2);
				close(g_socket_ecmg1);
				g_ecmg_connected[1]=0;
				Display("ecmg1: Send stream setup message out of time!\r\n");
				break;
			}
			Display("ecmg1: Send stream setup message ok!\r\n");

			/*----------------------------------------------------------------------------------*/
			/* wait for all the stream status message                                           */
			/*----------------------------------------------------------------------------------*/
			haserr=ECMG_NOERROR;
			tm_get(&olddate,&oldtime,&oldtick);
			while(1)
			{
				/*接收流状态应答*/
				rc=ecmgRecv(g_socket_ecmg1,ECMG2SCS_STREAM_STATUS,0,1);
				if(rc<0) /* socket error */
				{
					haserr=ECMG_SOCKETERROR;
					break;
				}
				else if(rc==1) /* got the waiting message */
					break;

				tm_get(&date,&time,&tick);
				if(dif_second(date,time,olddate,oldtime)*10 > g_ca_config.Para_Config[1].Network_Delay)
				{
					haserr=ECMG_TIMEOUTERROR;
					break;
				}
				my_Delay(10);				
			}
			if(haserr==ECMG_SOCKETERROR)
			{
				Display("ecmg1: Receive stream status message socket error! \r\n");			
				close(g_socket_ecmg1);
				g_socket_ecmg1=0;
				g_ecmg_connected[1] = 0;
				break;
			}
			else if(haserr==ECMG_TIMEOUTERROR)
			{
				ecmg_close_all(g_socket_ecmg1,2);
				close(g_socket_ecmg1);
				g_socket_ecmg1=0;
				g_ecmg_connected[1]=0;
				Display("ecmg1: Receive stream status message out of time! \r\n");
				break;
			}	
			Display("ecmg1: Receive stream status message ok!\r\n");

/*			if(g_IsResetStatue)
				g_wanted_cp_number[1]=g_current_cp_number+1;
			else
				g_wanted_cp_number[1] = g_CurrentSaveCpNum;
*/

			g_ecm_data[1].ecmsendflag=0;
			
			g_ecmg_waitcommand[1]=0;
	/*		ca_CW_int_Handle();  */
			tm_get(&lastdate,&lasttime,&lasttic);
			for(;;)
			{
				/*------------------------------------------------------------------------------*/
				/* wait message from interrupt                                                  */
				/*------------------------------------------------------------------------------*/
				/*等待接收中断事件*/
			    if(ReceiveQueue("QSEC",Q_WAIT,KC_TICKS2SEC,Msg)==ERR_TIMEOUT)
			    {
				   waitTime+=1;
				   if((bSendChannelTest==0)&&(waitTime>20))						
				   {
				       waitTime=0;
			              rc=ecmgSend(g_socket_ecmg1,ECMG2SCS_CHANNEL_TEST,0,1);
			             if(rc<=0)
			             {
                                      ca_Clear_simucrypt_map();		
					   close(g_socket_ecmg1);
				          g_ecmg_connected[1]=0;
				          break;
			             }
				           bSendChannelTest=1;			  
				 }			  
				if(bSendChannelTest==1)
				{			               
 			              rc=ecmgRecv(g_socket_ecmg1,ECMG2SCS_CHANNEL_STATUS,0,1);
				       if(rc<0) /* socket error */
				         {
                                           ca_Clear_simucrypt_map();		
						 bSendChannelTest=0;
				               close(g_socket_ecmg1);
				               g_ecmg_connected[1]=0;
						break;		  								
					  }
				      else if(rc==1) /* got the waiting message */									 
				       {
				            waitTime=0;
					     bSendChannelTest=0;
					     continue;
				        }		 
                                    if(waitTime>6)
				        {
                                         ca_Clear_simucrypt_map();		
						bSendChannelTest=0;
				              close(g_socket_ecmg1);
				              g_ecmg_connected[1]=0;									   
					       break;
				          }
			       }
				else
				{
 			              ecmgRecv(g_socket_ecmg1,ECMG2SCS_CHANNEL_STATUS,0,1);
				}
				
				continue;
	        }                            
		waitTime=0;
		bSendChannelTest=0;
		if(g_ecmg_connected[1]==0)
		{
                      break;
		}

		if(Msg[0] == 2)
		{/*请求断开连接*/
			close(g_socket_ecmg1);
			g_socket_ecmg1 = 0;			
			ca_Clear_simucrypt_map();		
			break;
		}
				
				/*------------------------------------------------------------------------------*/
				/* send all the cw to ecmg                                                      */
				/*------------------------------------------------------------------------------*/
		haserr=ECMG_NOERROR;
		g_ecmg_waitcommand[1] = ECMG2SCS_ECM_RESPONSE;
		for(i=0;i<g_ecmg_stream_status_list[1].streamcount;i++)
		{
					/*发送CW信息*/
	   	   rc=ecmgSend(g_socket_ecmg1,ECMG2SCS_CW_PROVISION,i,1);
		   if(rc<0)
		  {
			haserr=ECMG_SOCKETERROR;
			break;
		  }
		  else if(rc==0)
		  {
			haserr=ECMG_TIMEOUTERROR;
		       break;
		  }
		 my_Delay(10);
	    }
	    if(haserr==ECMG_SOCKETERROR)
	    {
			close(g_socket_ecmg1);
			g_socket_ecmg1=0;
			g_ecmg_connected[1] = 0;
			ca_Clear_simucrypt_map();		
			break;
	   }
	  else if(haserr==ECMG_TIMEOUTERROR)
	  {
	 	ecmg_close_all(g_socket_ecmg1,2);
	       close(g_socket_ecmg1);
		g_socket_ecmg1=0;
		g_ecmg_connected[1]=0;
		ca_Clear_simucrypt_map();		
		Display("ecmg1: Send CW provision message out of time!\r\n");
		break;
	 }	
	haserr=ECMG_NOERROR;
	tm_get(&olddate,&oldtime,&oldtick);
	for(i=0;i<g_ecmg_stream_status_list[1].streamcount;i++)
	{	
					/*等待接收ECM应答*/
	   rc=ecmgRecv(g_socket_ecmg1,ECMG2SCS_ECM_RESPONSE,0,1);
	   if(rc<0) /* socket error */
	   {
	     haserr=ECMG_SOCKETERROR;
	     break;
          }
	  tm_get(&date,&time,&tick);
	 if(dif_second(date,time,olddate,oldtime)*10 > g_ca_config.Para_Config[1].Network_Delay)
	 {
	     haserr=ECMG_TIMEOUTERROR;
	    close(g_socket_ecmg1);
	    g_socket_ecmg1=0;
	    ca_Clear_simucrypt_map();		
	    break;
	 }
	my_Delay(10);					
     }

    if(haserr!=ECMG_NOERROR)
	{
		break;
	}

    g_ecm_data[1].pqflag=!g_ecm_data[1].pqflag;			
	/*			g_wanted_cp_number[1]++;
				if(g_wanted_cp_number[1] >= 255)
					g_wanted_cp_number[1] = 0;		*/
     g_ecmg_waitcommand[1]=0;
     g_ecm_data[1].ecmsendflag=1;
    }

    if(haserr==ECMG_SOCKETERROR)
    {
				Display("ecmg1: Receive ecm response message socket error! \r\n");			
				close(g_socket_ecmg1);
				g_socket_ecmg1=0;
				g_ecmg_connected[1]=0;
				ca_Clear_simucrypt_map();		
				break;
			}
			else if(haserr==ECMG_TIMEOUTERROR)
			{
				ecmg_close_all(g_socket_ecmg1,2);
				close(g_socket_ecmg1);
				g_socket_ecmg1=0;
				g_ecmg_connected[1]=0;
				ca_Clear_simucrypt_map();		
				Display("ecmg1: Receive ecm response message out of time! \r\n");
				break;
			}
			if(dif_second(curdate,curtime,lastdate,lasttime) >= ( 60*120))
			{
				Config_Nib();
				lastdate=curdate;
				lasttime=curtime;
				lasttic=curtic;
			}
		}
	}
}


void tk_ecmgMgr2(void)
{
	static int     g_socket_ecmg2=0;
	struct 	sockaddr_in ECMGAddr;
	unsigned long RcvBufLen;
	int     i,rc;
	int     haserr;

	unsigned long  Msg[4];
	unsigned long  date,time,tick,olddate,oldtime,oldtick;
	unsigned long   waitTime=0;
	unsigned long   bSendChannelTest=0;

	g_ecm_data[2].pqflag=1;

	if(g_socket_ecmg2)
		close(g_socket_ecmg2);
	
	for(;;)
	{
	       my_Delay(1000);
		  g_ecmg_connected[2]=0;
		g_ecmg_waitcommand[2] = 1;
		
		/*创建套接口*/
		g_socket_ecmg2 = socket(AF_INET, SOCK_STREAM, TCP);
		if(g_socket_ecmg2 == -1)
		{
			Display("ecmg2: Create socket failed! error code=0x%x.\r\n",errno);
			close(0);
			my_Delay(100);
			continue;
		}
		Display("ecmg2: socket create ok!\r\n");

		g_ecmg_use_masterslave[2]=0;
		
		ECMGAddr.sin_family		 = AF_INET;
		ECMGAddr.sin_port		 = htons(g_ca_config.Para_Config[2].ECMG_Master_Port);
		ECMGAddr.sin_addr.s_addr = htonl(g_ca_config.Para_Config[2].ECMG_Master_IP);
		for(i=0;i<8;i++)
			ECMGAddr.sin_zero[i] = 0;

		/*连接主ECMG*/
		RcvBufLen = 16*1024;
		setsockopt(g_socket_ecmg2,SOL_SOCKET,SO_RCVBUF,(char *)&RcvBufLen,4);				
		if(conne

⌨️ 快捷键说明

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