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

📄 cmdproc.c

📁 有线电视系统前端设备复用器原代码。 用语接受卫星信号
💻 C
📖 第 1 页 / 共 3 页
字号:

	Cmd.ValidFlag=0xFFFF;

	Cmd.CctPortType=SystemData.Cct_Port_Type;

	Cmd.EthernetPara.IP=SystemData.EthernetPara.IP;
	Cmd.EthernetPara.GateWayIP=SystemData.EthernetPara.GateWayIP;

	for(i=0;i<8;i++)
	{
		Cmd.EthernetPara.PhysicsAddr[i] =SystemData.EthernetPara.PhysicsAddr[i];
		Cmd.PortConfig[i].Open          =SystemData.PortConfig[7-i].Open;
		Cmd.PortConfig[i].Rate          =SystemData.PortConfig[7-i].Rate;
		Cmd.PortConfig[i].Connected     =0;
		Cmd.PortConfig[i].IPAddr        =0;
	}

	Cmd.NetworkPort.ASIRate    =SystemData.NetworkPort.ASIRate;
	Cmd.NetworkPort.E3DS3Type  =SystemData.NetworkPort.E3DS3Type;
	Cmd.NetworkPort.PCRDelay   =SystemData.NetworkPort.PCRDelay;

	Cmd.UserChannel.BaudRate   =SystemData.UserChannel.BaudRate;
	Cmd.UserChannel.CharSize   =SystemData.UserChannel.CharSize;	
	Cmd.UserChannel.StopBits   =SystemData.UserChannel.StopBits;
	Cmd.UserChannel.Type       =SystemData.UserChannel.Type;
	Cmd.UserChannel.Verify     =SystemData.UserChannel.Verify;

	Cmd.TempAlarm.Temp1        =SystemData.TempAlarm.Temp1;
	Cmd.TempAlarm.Temp2        =SystemData.TempAlarm.Temp2;
	Cmd.TempAlarm.Temp3        =SystemData.TempAlarm.Temp3;
	Cmd.TempAlarm.Reserve      =0;

	/*===================================================================*/
	/* added for EPG 2002-09-17                                          */
	/*===================================================================*/
	for(i=0;i<8;i++)
		for(j=0;j<4;j++)
			Cmd.SIConfig.PortSIConfig[7-i][j]=SystemData.SIConfig.PortSIConfig[i][j];

	Cmd.SIConfig.IntSIState=SystemData.SIConfig.IntSIState;
	/*===================================================================*/
	/* added for EPG 2002-09-17                                          */
	/*===================================================================*/
	for(i=0;i<6;i++)
	{
		Cmd.PanelPassword[i]=1;/*SystemData.PanelPassword[i];*/
	}
	/*===================================================================*/
	/* added for panel password  2002-10-30                              */
	/*===================================================================*/
	Cmd.SoftVer                =SoftVer;
	NibVer=GetNibVer();
	Cmd.HardVer                =(unsigned long)(HardVer&0xFF) + (unsigned long)(NibVer<<8) ;

	ThePacket=(Packet *)MemAlloc(RNG1ID,"ReportCurrentConfig ",sizeof(Packet) - 4 + sizeof(Cmd_Report_CurCfg));
	if(ThePacket!=NULL)
	{

		ThePacket->Command         =COMMAND_REPORT_CURRENT_CONFIG;
		ThePacket->DeviceType      =DEVICE_TYPE_MULTIPLEXER;

		ThePacket->PacketType      =Pck->PacketType;
		ThePacket->DeviceIdt	   =Pck->DeviceIdt;
		ThePacket->PacketIdt       =Pck->PacketIdt;
		ThePacket->Result          =0;

		ThePacket->PacketHeadLength=sizeof(Packet) - 4;
		ThePacket->PacketLength    =sizeof(Packet) - 4 + sizeof(Cmd_Report_CurCfg);

		MemCopy((unsigned char *)&ThePacket->Data,(unsigned char *)&Cmd,sizeof(Cmd_Report_CurCfg));

		/*--------------------------------------------------------------------------------------------*/
		Msg.Flag   =0x00;
		Msg.MsgType=MSG_REPLY;
		Msg.Length =ThePacket->PacketLength;
		Msg.Pdata  =(unsigned char *)ThePacket;

		/*--------------------------------------------------------------------------------------*/
		/* 消息来自网管系统                                                                     */
		/*--------------------------------------------------------------------------------------*/
		if(Connected)
		{
			Display("command report current configuration send out to Management System.\n");

			SendQueue(QN_TCPIPSEND,&Msg);
			Has_Report_Device_Type=TRUE;

			my_Delay(500);/*by xu*/			
			
			/*------------------------------------------------------------*/
			/* 上报自检状态和IP连接给网管                                 */
			/*------------------------------------------------------------*/
			ReportSelftestState(presult,0);					
			ReportIPAddr(0);	
		}
	}
}

/*-------------------------------------------------------------------------*/
/* 上报当前配置,面板和网管有所不同                                        */
/*-------------------------------------------------------------------------*/
void ReportCurrentConfig(Packet *Pck)
{
	if(Pck->PacketType==0x00)
		ReportCurrentConfigToNM(Pck);
	else
		ReportCurrentConfigToPanel(Pck);
}

/*-------------------------------------------------------------------------*/
/* 数据同步,实现面板和网管系统的数据同步                                  */
/*-------------------------------------------------------------------------*/
void SynCurrentConfig(Packet *Pck,unsigned char Type)
{
	if(Type==PANELTOSMCC)
		ReportCurrentConfigToNM(Pck);
	else
		ReportCurrentConfigToPanel(Pck);
}


/*应答信息*/
void SendReply(Packet *ThePacket, unsigned char Success)
{

	Packet   *Pck;
	MESSAGE  Msg;
	unsigned long Cmd;

	unsigned short PckType;

	PckType=ThePacket->PacketType;

	Cmd=ThePacket->Command;

	Pck=(Packet *)MemAlloc(RNG1ID,"SendReply ",sizeof(Packet) - 4);

	if(Pck!=NULL)
	{

		Pck->Command=ThePacket->Command;
		Pck->DeviceIdt=ThePacket->DeviceIdt;
		Pck->DeviceType=ThePacket->DeviceType;

		Pck->PacketIdt=ThePacket->PacketIdt;

		Pck->PacketHeadLength=sizeof(Packet) - 4;
		Pck->PacketLength=sizeof(Packet) - 4;
		Pck->PacketType=ThePacket->PacketType;
		Pck->PacketVersion=ThePacket->PacketVersion;

		if(Success==FAILED)
			Pck->Result=1;
		else
			Pck->Result=0;
		

		Msg.Flag    =0;
		Msg.MsgType =MSG_REPLY;
		Msg.Length  =Pck->PacketLength;
		Msg.Pdata   =(unsigned char *)Pck;

		Display("A command reply send, command number:0x%x , result: 0x%x.\n",Pck->Command, Pck->Result);

		/*--------------------------------------------------------------------------------------*/
		/* 消息来自网管系统                                                                     */
		/*--------------------------------------------------------------------------------------*/
		if((PckType==0x00)&&Connected)
		{

			SendQueue(QN_TCPIPSEND,&Msg);
									
			if((Cmd==COMMAND_SET_PANEL_PASSWORD)||(Cmd==COMMAND_CONFIG_MULTIPLEXER))
			{
				if(Pck->Result==0)
					SynCurrentConfig(Pck,SMCCTOPANEL);
			}
		}
		/*--------------------------------------------------------------------------------------*/
		/* 消息来自面板                                                                         */
		/*--------------------------------------------------------------------------------------*/
		else if(PanelOK)
		{
			SendQueue(QN_PANELSEND,&Msg);
			
			if((Cmd==COMMAND_SET_PANEL_PASSWORD)||(Cmd==COMMAND_CONFIG_MULTIPLEXER))
			{
				if(Pck->Result==0)
					SynCurrentConfig(Pck,PANELTOSMCC);
			}
		}
	}
}


unsigned long CfgUserChannel(Cmd_Set_User_Channel *Cmd)
{
	UARTBLOCK		uart;
	unsigned long	rc,ret;
	void 			*dummy;	
	unsigned char	ChannelType;
	unsigned long   DevNo;
	unsigned long   tid_recv;

	unsigned long   BaudList[10]={2400,4800,9600,19200,38400,57600,115200,230400,460800,921600};

#if 0

	ChannelType=SystemData.UserChannel.Type;
			
	if((ChannelType==USERCHANNELNOTUSE)&&(OldUserChannelType!=ChannelType))
	{
		DelUserChannelPSI();
		StopFPGA();
		ConfigRemapTable(2);
		StartFPGA();	
	}

	if((ChannelType!=USERCHANNELNOTUSE)&&(OldUserChannelType==USERCHANNELNOTUSE))
	{
		AddUserChannelPSI();
		StopFPGA();
		ConfigRemapTable(2);
		StartFPGA();	
	}

	/*---------------------------------------------------------------------*/
	/* 关闭用户通信口及相关任务,并重新启动用户通道处理相关任务             */
	/*---------------------------------------------------------------------*/
	if((OldUserChannelType==USERCHANNELRS232)||(OldUserChannelType==USERCHANNELRS422))
	{
		
		for(;;)
		{
			rc=t_ident(TN_USERRECV,0,&tid_recv);
			if(rc==0) 
				break;

			my_Delay(5);
		}

		t_suspend(tid_recv);

		/*------------------------------------------------------------*/
		/*关闭相应的通信口                                            */
		/*------------------------------------------------------------*/

		if(OldUserChannelType==USERCHANNELRS232)
		{
			uart.port=PORTRS232;
			de_close(DEV_RS232,(void *)&uart,&ret);

		}

		if(OldUserChannelType==USERCHANNELRS422)
		{
			uart.port=PORTRS422;
			de_close(DEV_RS422,(void *)&uart,&ret);
		}

		UserChannelAlarm=0;

		SetUserTimerPeriod();
		/*------------------------------------------------------------*/
		/*根据配置重新打开相应的端口                                  */
		/*------------------------------------------------------------*/
		if(ChannelType==USERCHANNELNOTUSE)
		{
			OldUserChannelType=USERCHANNELNOTUSE;
			t_delete(tid_recv);
		}
		else
		{
			if(ChannelType==USERCHANNELRS232)
			{
				uart.port=PORTRS232;
				DevNo    =DEV_RS232;
			}
			else if(ChannelType==USERCHANNELRS422)
			{
				uart.port=PORTRS422;
				DevNo    =DEV_RS422;
			}

			uart.BaudRate=BaudList[SystemData.UserChannel.BaudRate];
			uart.CharSize=SystemData.UserChannel.CharSize;
			uart.StopBits=SystemData.UserChannel.StopBits;
			uart.Verify  =SystemData.UserChannel.Verify;

			rc=de_init(DevNo,(void *)&uart,&ret,&dummy);
			if(rc)
			{

			}
			rc=de_open(DevNo,(void *)&uart,&ret);
			if(rc)
			{
				Display("deopen error, errno=0x%x \n",rc);

			}

			t_restart(tid_recv,0);

			OldUserChannelType=ChannelType;
		}
	}
	else if(ChannelType!=USERCHANNELNOTUSE)
	{
		CreateStartTask(TN_USERINIT,TASKPRIO2,SUPERSTACK,USERSTACK,0,TK_UserInit,0);
	}

#endif

	return 0;

}

/*网络接口及用户通道设置*/
unsigned long Config_Multiplexer(Cmd_Config_Multiplexer *Cmd)
{
	int           i,j;

	UARTBLOCK     uart;
	unsigned long tid_init,tid_recv,tid_proc,qid_proc;
	unsigned long rc,ret;
	unsigned long Para[4];
	MESSAGE       Msg;
	unsigned char Cct;

	unsigned char UserChannelChanged=0;
	unsigned char NeedNewPAT=0;

	/*--------------------------------------------------------*/
	/* 保存级连口的配置数据                                   */
	/*--------------------------------------------------------*/
	SystemData.Cct_Port_Type=Cmd->Cct_Port_Type;	
	/*--------------------------------------------------------*/
	/* 保存网络接口的配置数据                                 */
	/*--------------------------------------------------------*/
	SystemData.NetworkPort.ASIRate  =Cmd->CmdSetNetwork.ASIRate;
	SystemData.NetworkPort.E3DS3Type=Cmd->CmdSetNetwork.E3DS3Type;
	SystemData.NetworkPort.PCRDelay =Cmd->CmdSetNetwork.PCRDelay;

	/*--------------------------------------------------------*/
	/*D0=0:E3/1:DS3                                           */
	/*--------------------------------------------------------*/
	if(SystemData.NetworkPort.E3DS3Type&0x4)
	{
		if(SystemData.NetworkPort.ASIRate>1720)
			SystemData.NetworkPort.ASIRate=1720;
	}
	else
	{
		if(SystemData.NetworkPort.E3DS3Type&0x1)
		{
			if(SystemData.NetworkPort.ASIRate>447)
				SystemData.NetworkPort.ASIRate=447;
		}
		else
		{
			if(SystemData.NetworkPort.ASIRate>343)
				SystemData.NetworkPort.ASIRate=343;
		}
	}

	if(SystemData.NetworkPort.PCRDelay>100)
		SystemData.NetworkPort.PCRDelay=80;

	/*-------------------------------------------------------*/
	/* 重新设置网络接口板参数                                */
	/*-------------------------------------------------------*/
	Config_Nib();

	/*-------------------------------------------------------*/
	/* 保存端口的配置数据                                    */
	/*-------------------------------------------------------*/
	for(i=0;i<8;i++)
	{
		/*
		SystemData.PortConfig[i].Open=Cmd->CmdSetPort.Port[7-i].Open;
		SystemData.PortConfig[i].Rate=Cmd->CmdSetPort.Port[7-i].Rate;
		*/
		SystemData.PortConfig[i].Open=1;
		SystemData.PortConfig[i].Rate=40;
	}
	/*-------------------------------------------------------*/
	/* 保存用户通道的配置数据                                */
	/*-------------------------------------------------------*/

	if((Cmd->CmdSetUserChannel.Type>2)||(Cmd->CmdSetUserChannel.BaudRate>9)||(Cmd->CmdSetUserChannel.CharSize>8)||(Cmd->CmdSetUserChannel.StopBits>2)||(Cmd->CmdSetUserChannel.Verify>1))
	{
		if(SystemData.UserChannel.Type!=0)
		{
			UserChannelChanged=1;
			NeedNewPAT=1;
		}

		SystemData.UserChannel.Type=0;
		SystemData.UserChannel.BaudRate=0;
		SystemData.UserChannel.CharSize=0;
		SystemData.UserChannel.StopBits=0;
		SystemData.UserChannel.Verify=0;
	}
	else
	{
	
		if(Cmd->CmdSetUserChannel.Type!=USERCHANNELNOTUSE)
		{
			if(SystemData.UserChannel.Type!=Cmd->CmdSetUserChannel.Type)
			{
				NeedNewPAT=1;
				UserChannelChanged=1;
				SystemData.UserChannel.Type=Cmd->CmdSetUserChannel.Type;
			}

			if(SystemData.UserChannel.BaudRate!=Cmd->CmdSetUserChannel.BaudRate)
			{
				UserChannelChanged=1;
				SystemData.UserChannel.BaudRate=Cmd->CmdSetUserChannel.BaudRate;
			}
			if(SystemData.UserChannel.CharSize!=Cmd->CmdSetUserChannel.CharSize)
			{
				UserChannelChanged=1;
				SystemData.UserChannel.CharSize=Cmd->CmdSetUserChannel.CharSize;
			}

			if(SystemData.UserChannel.StopBits!=Cmd->CmdSetUserChannel.StopBits)
			{
				UserChannelChanged=1;
				SystemData.UserChannel.StopBits=Cmd->CmdSetUserChannel.StopBits;
			}
			if(SystemData.UserChannel.Verify!=Cmd->CmdSetUserChannel.Verify)
			{
				UserChannelChanged=1;
				SystemData.UserChannel.Verify=Cmd->CmdSetUserChannel.Verify;
			}

		}
		else
		{
			if(SystemData.UserChannel.Type!=Cmd->CmdSetUserChannel.Type)
			{
				UserChannelChanged=1;
				NeedNewPAT=1;
				SystemData.UserChannel.Type=Cmd->CmdSetUserChannel.Type;
				SystemData.UserChannel.BaudRate=Cmd->CmdSetUserChannel.BaudRate;
				SystemData.UserChannel.CharSize=Cmd->CmdSetUserChannel.CharSize;
				SystemData.UserChannel.StopBits=Cmd->CmdSetUserChannel.StopBits;
				SystemData.UserChannel.Verify=Cmd->CmdSetUserChannel.Verify;					
			}
		}
	}

	/*-------------------------------------------------------*/
	/*保存新的配置数据到数据库								 */
	/*-------------------------------------------------------*/
	SaveSystemData(); 

	/*-------------------------------------------------------*/
	/* 设置级连口                                            */
	/* ASI: BIT0=1                                           */
	/* SPI: BIT1=1                                           */
	/* E3:  BIT3=1                                           */
	/* T3:  BIT3=0                                           */
	/*-------------------------------------------------------*/
	switch(SystemData.Cct_Port_Type)
	{
		case CCT_PORT_TYPE_ASI:
			Cct=0x01;
			break;

		case CCT_PORT_TYPE_SPI:
			Cct=0x02;
			break;

		case CCT_PORT_TYPE_E3:
			Cct=0x08;
			break;

		case CCT_PORT_TYPE_T3:
			Cct=0x00;
			break;
	}

	CCT_PORT_TYPE_REG=Cct;

	Msg.Flag   =0;

⌨️ 快捷键说明

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