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

📄 cmdproc.c

📁 有线电视系统前端设备复用器原代码。 用语接受卫星信号
💻 C
📖 第 1 页 / 共 3 页
字号:
/*------------------------------------------------------------------------------*/
/* Project Name: Multiplexer of MPEG-II                                         */
/* Module  Name: Message dispatch                                               */
/* Purpose     :                                                                */
/* Author      : LingYiChuan                                                    */
/* Date        : 2000/9/20                                                      */
/* Version     : 1.0                                                            */
/* Copyright HignSun Dvision, All Right Reservered.                             */
/*------------------------------------------------------------------------------*/
#include "psos.h"
#include "src\board.h"

#include "constant.h"
#include "structure.h"
#include "command.h"
#include "tspack.h"
#include "repid.h"

#include "nib.h"

#include "sys_conf.h"
extern void my_Delay(unsigned long int dly_ms);
extern unsigned long SoftVer;
extern unsigned char HardVer;
extern EIT_ITEM_LIST EIT_Item_List;

extern System_Data   SystemData;
extern System_Data   DefSystemData;

extern SELECT_MUL Select_Mul;

extern unsigned char           SystemState;
extern SelfTest_Result         *presult;

unsigned long        OldIP;
extern unsigned char OldUserChannelType;
extern unsigned char UserChannelAlarm;


extern unsigned char PanelOK;
extern unsigned char Connected;    


extern unsigned char Has_Report_Device_Type;

extern void TK_UserInit(void);

extern unsigned long ConfigRemapTable(int);

extern unsigned long SST39VF040_Chip_Erase(void);
extern unsigned long SST39VF040_Program(unsigned char *Buffer,unsigned long Length);
extern unsigned long Config_Select_Mul(Packet *ThePacket);
extern unsigned long Proc_NIT(unsigned char *Cmd,unsigned char TS_Count);
extern unsigned long Proc_EIT(unsigned char *Cmd,unsigned char TS_Count);
extern unsigned long Proc_TDT(unsigned char *Cmd,unsigned char TS_Count);


extern int OnRcvQueryPIDFilterCmd(Packet *CmdPacket);
extern int OnRcvSetPIDFilterCmd(Packet *CmdPacket);


extern void SetExtSI(unsigned char *Cmd);
extern void SetIntSI(unsigned char *Cmd);

extern unsigned long Search_Program(Packet *ThePacket);
extern unsigned long Mdf_SDT(Packet *ThePacket);
extern void ReportIPAddr(unsigned char Type);

extern void UserDataLed(int H);
extern void RunLed(int H);

/*重新设置IP地址*/
unsigned long SetIP(unsigned short CmdFrom,Cmd_Set_IP *Cmd)
{
	int           i;

	/*记录新的IP地址*/
	SystemData.EthernetPara.IP=Cmd->IP;

	/*==============================================================*/
	/*面板发送的命令才设置物理地址和网关地址                        */
	/*2002-09-20                                                    */
	/*==============================================================*/
	if(CmdFrom!=0)
	{/*不为网管命令*/
		SystemData.EthernetPara.GateWayIP=Cmd->GatewayIP;

		for(i=0;i<6;i++)
		{
			SystemData.EthernetPara.PhysicsAddr[i]=Cmd->PhysicalAddr[i];
		}

		/*==========================================================*/
		/*固定物理地址前三个字节                                    */
		/*==========================================================*/
		SystemData.EthernetPara.PhysicsAddr[0]=0x88;
		SystemData.EthernetPara.PhysicsAddr[1]=0x88;
		SystemData.EthernetPara.PhysicsAddr[2]=0x88;
	}

	SaveSystemData(); 

	return 0;
}


unsigned long SetTempAlarm(Cmd_Set_Temp_Alarm *Cmd)
{
	SystemData.TempAlarm.Temp1=Cmd->Temp1;
	SystemData.TempAlarm.Temp2=Cmd->Temp2;
	SystemData.TempAlarm.Temp3=Cmd->Temp3;

	Set_Temp_Alarm_Threshold();

	SaveSystemData();

	return 0;
}
/*-----------------------------------------------------------------------------*/
/* 根据PAT,PMT的个数来设置定时器定时周期                                       */
/*-----------------------------------------------------------------------------*/
void SetTimerPeriod(int Count)
{
	unsigned long  Rate;
	unsigned short Period;

	/*
	switch(SystemData.NetworkPort.E3DS3Type)
	{
	case NETWORK_TYPE_E3: 		
		Rate=34000000;
		break;
	case NETWORK_TYPE_T3:
		Rate=45000000;
		break;
	default:
		Rate=SystemData.NetworkPort.ASIRate * 100*1024;
	}
	*/

	Rate=174.3 *1024*1024;

	if(GetNibVer()>=0x12)
		Rate/=2;

	Period= Rate / (10*Count*8*188);

	PSI_TIMER_REG_HIGH=(unsigned char)((Period&0xFF00)>>8);
	PSI_TIMER_REG_LOW=(unsigned char)(Period&0xFF);

}

void ReportCurrentTemp(Packet *Pck)
{
	MESSAGE                 Msg;
	Packet                  *ThePacket;
	Cmd_Report_Current_Temp	Cmd;

	Cmd.Temp1=TEMP_MONITOR_REG1;
	Cmd.Temp2=TEMP_MONITOR_REG2;
	Cmd.Temp3=TEMP_MONITOR_REG3;
	Cmd.Reserve=0;

	ThePacket=(Packet *)MemAlloc(RNG1ID,"ReportCurrentTemp ",sizeof(Packet) - 4 + sizeof(Cmd_Report_Current_Temp));
	if(ThePacket!=NULL)
	{
		ThePacket->Command         =COMMAND_REPORT_CURRENT_TEMP;
		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_Current_Temp);

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

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

		/*--------------------------------------------------------------------------------------*/
		/* 消息来自网管系统                                                                     */
		/*--------------------------------------------------------------------------------------*/
		if((Pck->PacketType==0x00)&&Connected)
		{
			SendQueue(QN_TCPIPSEND,&Msg);
		}
		/*--------------------------------------------------------------------------------------*/
		/* 消息来自面板                                                                         */
		/*--------------------------------------------------------------------------------------*/
		else if(PanelOK)
		{
			SendQueue(QN_PANELSEND,&Msg);
		}
	}
}
#if 0
void SynCurrentConfig(Packet *Pck,unsigned char Type)
{
	MESSAGE                 Msg;
	Packet                  *ThePacket;
	Cmd_Report_CurCfg		Cmd;

	unsigned char           *Tail;
	int                     i,j;


	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.Type       =SystemData.NetworkPort.Type;
	Cmd.NetworkPort.Rate       =SystemData.NetworkPort.Rate;
	Cmd.NetworkPort.Reserve    =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.bState=SystemData.SIConfig.bState;*/
	Cmd.SIConfig.IntSIState=SystemData.SIConfig.IntSIState;
	/*===================================================================*/
	/* added for EPG 2002-09-17                                          */
	/*===================================================================*/
	for(i=0;i<6;i++)
	{
		Cmd.PanelPassword[i]=SystemData.PanelPassword[i];
	}
	/*===================================================================*/
	/* added for panel password  2002-10-30                              */
	/*===================================================================*/
	Cmd.SoftVer                =SoftVer;
	Cmd.HardVer                =(unsigned long)HardVer&0xFF + (unsigned long)(GetNibVer()<<8);

	ThePacket=(Packet *)MemAlloc(RNG1ID,"SynCurrentConfig",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	   =OldIP;
		ThePacket->PacketIdt       =0;
		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(Type==PANELTOSMCC)
		{
			if(Connected)
			{
				SendQueue(QN_TCPIPSEND,&Msg);
				Display("command report current configuration send out to NMCC.\n");
			}
			else
				MemFree(ThePacket);
		}
		/*--------------------------------------------------------------------------------------*/
		/* 网管改变了配置,通知面板                                                             */
		/*--------------------------------------------------------------------------------------*/
		else if(Type==SMCCTOPANEL)
		{
			SendQueue(QN_PANELSEND,&Msg);
			Display("command report current configuration send out to panel.\n");
		}
	}
}
#endif

/*上报自检状态*/
unsigned long ReportSelftestState(SelfTest_Result  *presult, unsigned char Type)
{
	MESSAGE                 Msg;
	Packet                  *ThePacket;
	Packet					*PanelPck;
	Cmd_Selftest_Status     Cmd;

	Cmd.MPC860_State    = presult->MPC860_Result;
	Cmd.FPGA_State      = presult->FPGA_Result;
	
	/*Cmd.C54_State     = presult->C54_Result; */
	Cmd.C54_State       = SELFTEST_SUCCESS;

	Cmd.Panel_State     = SELFTEST_SUCCESS ; /* presult->Panel_Result; */
	Cmd.Network_State   = presult->Nib_Result;
	Cmd.Scrambler_State = SELFTEST_SUCCESS;
		
	if(Connected&&(Type==0))
	{
		ThePacket=(Packet *)MemAlloc(RNG1ID,"ReportSelftestState ",sizeof(Packet) - 4 + sizeof(Cmd_Selftest_Status));
		
		if(ThePacket!=NULL)
		{
			ThePacket->Command         =COMMAND_REPORT_SELFTEST_STAUTS;
			ThePacket->DeviceType      =DEVICE_TYPE_MULTIPLEXER;
			ThePacket->DeviceIdt       =SystemData.EthernetPara.IP;
			ThePacket->PacketType      =0;

			ThePacket->PacketIdt       =0;
			ThePacket->Result          =0;

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

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

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

			SendQueue(QN_TCPIPSEND,&Msg);

			Display("command report selftest result send out to Management System.\n");
		}
	}

	if(PanelOK&&(Type==1))
	{
		PanelPck=(Packet *)MemAlloc(RNG1ID,"ReportSelftestState ",sizeof(Packet) - 4 + sizeof(Cmd_Selftest_Status));
		
		if(PanelPck!=NULL)
		{
			PanelPck->Command         =COMMAND_REPORT_SELFTEST_STAUTS;
			PanelPck->DeviceType      =DEVICE_TYPE_MULTIPLEXER;
			PanelPck->DeviceIdt       =SystemData.EthernetPara.IP;

			PanelPck->PacketIdt       =0;
			PanelPck->Result          =0;

			PanelPck->PacketHeadLength=sizeof(Packet) - 4;
			PanelPck->PacketLength    =sizeof(Packet) - 4 + sizeof(Cmd_Selftest_Status);

			MemCopy((unsigned char *)&PanelPck->Data,(unsigned char *)&Cmd,sizeof(Cmd_Selftest_Status));

			Msg.Flag   =0x00;
			Msg.MsgType=MSG_SELFUP;
			Msg.Length =PanelPck->PacketLength;
			Msg.Pdata  =(unsigned char *)PanelPck;

			SendQueue(QN_PANELSEND,&Msg);
			
			Display("command report selftest result send out to Panel.\n");
		}
	}

	return 0;
}

/*上报当前配置到面板*/
void ReportCurrentConfigToPanel(Packet *Pck)
{
	MESSAGE						Msg;
	Packet						*ThePacket;
	Cmd_Report_CurCfg_To_Panel	Cmd;
	unsigned char				*Tail;		
	int							i,j;
	unsigned char				NibVer;

	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;

	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_To_Panel));
	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_To_Panel);

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

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

		Display("command report current configuration send out to Panel.\n");
		SendQueue(QN_PANELSEND,&Msg);	
	}
}

/*上报当前设置到网管*/
void ReportCurrentConfigToNM(Packet *Pck)
{
	MESSAGE                 Msg;
	Packet                  *ThePacket;
	Cmd_Report_CurCfg		Cmd;		
	int                     i,j;
	unsigned char           NibVer;

⌨️ 快捷键说明

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