📄 alarm.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 + -