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

📄 alarm.c

📁 有线电视系统前端设备复用器原代码。 用语接受卫星信号
💻 C
字号:
/*------------------------------------------------*/
/* Project Name: Multiplexer of MPEG-II                             */
/* Module  Name: Alarm & Status detect                             */
/* Purpose     :                                                                 */
/* Author      : LingYiChuan                                                */
/* Date        : 2000/9/20                                                  */
/* Version     : 1.0                                                            */
/* Copyright HignSun Dvision, All Right Reservered.            */
/*------------------------------------------------*/

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

#include "psos.h"


unsigned char BufToReportAlarmPanel[64];
unsigned char BufToReportAlarmNM[64];

extern System_Data   SystemData;

extern unsigned char	PanelOK;
extern unsigned char	Connected;            

extern unsigned char    UserChannelAlarm;

extern void my_Delay(unsigned long int dly_ms);
/*------------------------------------------------------------------------------*/
/*receive the alarm message from interrupt handler, and render to the Tcpip task*/
/*------------------------------------------------------------------------------*/
void TK_Alarm(void)
{
	unsigned long    rc;
	unsigned char    pCon[8];
	unsigned char    msg[16];
	MESSAGE          Msg,*pMsg;
	Packet           *ThePacket;
	Packet           *PanelPck;
	Cmd_Report_Alarm Cmd;
	int              i;
	
	for(;;)
	{
		rc=ReceiveQueue(QN_ALARM,Q_WAIT,0,msg);	
		
		if(rc)	
		{
			my_Delay(100);
			continue;
		}
		else
		{
			/*----------------------------------------------------------------------------------*/
			/* 中断处理发送过来的消息共16字节                                                   */
			/* 0-7表示每个端口的告警状态                                                        */
			/* 8表示用户数据通道的告警状态                                                      */
			/* 9-11 依次表示每个温度传感器的告警状态                                            */
			/*----------------------------------------------------------------------------------*/
			pMsg=(MESSAGE *)msg;

			if(pMsg->Flag==0x55185518)/* 网络接口板告警 */
			{
				for(i=0;i<8;i++)
				{
					Cmd.PortAlarmState[i]=0;
				}

				Cmd.UserChannelState=0;

				Cmd.NibAlarm        =pMsg->MsgType;
				Cmd.Reserve1        =0;
				Cmd.Reserve2        =0;
			}
			else                    /*端口告警        */
			{
				GetConnectState(pCon);

				for(i=0;i<8;i++)
				{
					if(pCon[i])
						Cmd.PortAlarmState[7-i]=msg[i]; /* 没有输入告警不处理 */
					else
						Cmd.PortAlarmState[7-i]=0;						
				}

				Cmd.UserChannelState=msg[8];

				Cmd.NibAlarm        =0;
				Cmd.Reserve1        =0;
				Cmd.Reserve2        =0;
			}

#if SC_SD_DEBUG_MODE==DBG_XN
	/*		Display("Alarm content Port[0-7]: 0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x UserChannel: 0x%x \n",msg[0],msg[1],msg[2],msg[3],msg[4],msg[5],msg[6],msg[7],msg[8]);*/
#endif
			if(Connected)
			{
				/*ThePacket=(Packet *)MemAlloc(RNG2ID,TN_ALARM,sizeof(Packet)- 4 + sizeof(Cmd_Report_Alarm));	*/
				ThePacket=(Packet *)BufToReportAlarmNM;
				if(ThePacket!=NULL)
				{

					ThePacket->Command         =COMMAND_REPORT_ALARM;
					ThePacket->DeviceType      =DEVICE_TYPE_MULTIPLEXER;
					ThePacket->DeviceIdt       =SystemData.EthernetPara.IP;
					ThePacket->PacketIdt       =0;
					ThePacket->Result          =0;

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

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

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

					SendQueue(QN_TCPIPSEND,&Msg);

					/* Display("Report current alarm command send out to Management System! \n"); */

				}
			}

			if(PanelOK)
			{
				/*PanelPck=(Packet *)MemAlloc(RNG2ID,TN_ALARM,sizeof(Packet)- 4 + sizeof(Cmd_Report_Alarm));	*/
				PanelPck=(Packet *)BufToReportAlarmPanel;
				if(PanelPck!=NULL)
				{

					PanelPck->Command         =COMMAND_REPORT_ALARM;
					PanelPck->DeviceType      =DEVICE_TYPE_MULTIPLEXER;
					PanelPck->PacketIdt       =SystemData.EthernetPara.IP;
					PanelPck->Result          =0;

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

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

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

					SendQueue(QN_PANELSEND,&Msg);

					/* Display("Report current alarm command send out to Panel! \n"); */
				}
			}
		}

		my_Delay(50);/*20-->2*/
	}
}

⌨️ 快捷键说明

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