📄 cmdproc.c
字号:
/*------------------------------------------------------------------------------*/
/* 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 + -