📄 light.c
字号:
#ifndef _LIGHT_C_
#define _LIGHT_C_
#include "api.h"
void task_light_process(void)
{
SYSTEM_DEVICE_STATUS *psdev = &gsystemStauts;
if( gSystemInfo.light_process_flag == TASK_EXECUTE )
{
light_alarm( psdev );
gSystemInfo.light_process_flag = TASK_READY;
}
}
BYTE light_e1_alarm( BYTE *e1_status )
{
BYTE xdata counter;
BYTE xdata light = INVALID;
SYSTEM_INFOMATION *psys = &gSystemInfo;
for( counter=0; counter<psys->max_system_e1; counter++ )
{
if( ((*e1_status)&(~E1_NOALARM)) == E1_ALARM )
{
light &= ~(BIT0<<counter);
}
e1_status ++;
}
return light;
}
void get_e1_light( BYTE *show, BYTE alarm, BYTE loop )
{
BYTE xdata counter;
SYSTEM_INFOMATION *psys = &gSystemInfo;
for( counter=0; counter<psys->max_system_e1; counter++ )
{
if( !(loop & (BIT0<<counter)) )
show[counter] = FALSH;
else if( !(alarm&(BIT0<<counter)) )
show[counter] = SHINE;
else
show[counter] = DROEN;
}
}
BYTE light_e1_loop( BYTE *e1_status )
{
BYTE xdata counter;
BYTE xdata light = INVALID;
SYSTEM_INFOMATION xdata *psys = &gSystemInfo;
for( counter=0; counter<psys->max_system_e1; counter++ )
{
if( ((*e1_status)&(~E1_NOLOOP)) == E1_LOOP )
{
light &= ~(BIT0<<counter);
}
e1_status ++;
}
return light;
}
bit falsh_light_local = 0;
bit falsh_light_remote = 0;
BYTE light_e1_status( BYTE end, BYTE *show )
{
BYTE xdata counter;
BYTE xdata light = INVALID;
SYSTEM_INFOMATION *psys = &gSystemInfo;
bit falsh_light;
if( end == LOCAL_END_LIGHT )
{
falsh_light_local = ~falsh_light_local;
falsh_light = falsh_light_local;
}
else
{
falsh_light_remote = ~falsh_light_remote;
falsh_light = falsh_light_remote;
}
for( counter=0; counter<psys->max_system_e1; counter++ )
{
switch( show[counter] )
{
case FALSH:
if( falsh_light )
light |= (BIT0<<counter);
else
light &= ~(BIT0<<counter);
break;
case SHINE:
light &= ~(BIT0<<counter);
break;
case DROEN:
light |= (BIT0<<counter);
break;
default:
break;
}
}
return light;
}
/*本端E1告警点灯程序*/
void light_local_e1_alarm( SYSTEM_DEVICE_STATUS *psdev )
{
BYTE xdata alarm = INVALID;
BYTE xdata loop = INVALID;
BYTE xdata light = INVALID;
BYTE xdata show[SYSTEM_DEVICE_TYPE_08J];
/*寻找是否有E1告警*/
alarm = light_e1_alarm( psdev->local.e1_status );
/*是否有环回设置*/
loop = light_e1_loop( psdev->remote.e1_status );
/*控制灯应该如何显示,环回:闪烁、中断:长亮、无告警:灭*/
get_e1_light( show, alarm, loop );
light = light_e1_status( LOCAL_END_LIGHT, show );
WriteChip( LOCAL_E1ALARM_ADDR, light );
}
void light_remote_e1_alarm( SYSTEM_DEVICE_STATUS *psdev )
{
BYTE xdata alarm = INVALID;
BYTE xdata loop = INVALID;
BYTE xdata light = INVALID;
BYTE xdata show[SYSTEM_DEVICE_TYPE_08J];
alarm = light_e1_alarm( psdev->remote.e1_status );
loop = light_e1_loop( psdev->local.e1_status );
get_e1_light( show, alarm, loop );
light = light_e1_status( REMOTE_END_LIGHT, show );
WriteChip( REMOTE_E1ALARM_ADDR, light );
}
BYTE light_fiber( BYTE* fiber_status )
{
BYTE xdata counter;
BYTE xdata light = INVALID;
BYTE xdata alarm;
for( counter=0; counter<MAX_FIBER_NOMBER; counter++ )
{
alarm = (*fiber_status)&(FIBER_ALARM_STATUS);
switch( alarm )
{
case FIBER_LOS:
light = ~BIT4;
break;
case FIBER_LFA:
light = ~BIT3;
break;
case FIBER_E_3:
light = ~BIT2;
break;
case FIBER_E_6:
/* light = ~BIT1;*/
break;
default:
break;
}
fiber_status ++;
}
return light;
}
BYTE get_local_alarm_status( SYSTEM_DEVICE_STATUS *psdev )
{
return (psdev->local.alarm_hook&0xf0)>>4;
}
BYTE light_fiber_time( SYSTEM_DEVICE_STATUS *psdev )
{
BYTE xdata counter;
BYTE xdata light = 0xff;
BYTE xdata alarm;
BYTE xdata fiber_number = 1;
BYTE xdata local_chip;
if( psdev->local.program&0x01 )
fiber_number = 2;
for( counter=0; counter<fiber_number; counter++ )
{
alarm = (psdev->local.fiber_status[counter])&(~FIBER_NOALARM);
switch( alarm )
{
case FIBER_LFA:
light = ~BIT3;
break;
case FIBER_E_3:
light = ~BIT2;
break;
case FIBER_E_6:
/* light = ~BIT1;*/
break;
default:
local_chip = ReadChip( LOCAL_STATUS_ADDR );
if( (local_chip&0x03) != 0x03 )
light = ~BIT4;
break;
}
}
return light;
}
void light_local_fiber_alarm( SYSTEM_DEVICE_STATUS *psdev )
{
BYTE xdata light = INVALID;
light = light_fiber_time( psdev );
if( get_local_alarm_status( psdev ) != ALARM )
light &= ~BIT5;
WriteChip( LOCAL_FIBERALARM_ADDR, light );
}
BYTE get_remote_alarm_status( SYSTEM_DEVICE_STATUS *psdev )
{
return (psdev->remote.alarm_hook&0xf0)>>4;
}
void light_remote_fiber_alarm( SYSTEM_DEVICE_STATUS *psdev )
{
BYTE xdata light = INVALID;
light = light_fiber( psdev->remote.fiber_status );
if( get_remote_alarm_status( psdev ) != ALARM )
light &= ~BIT5;
WriteChip( REMOTE_FIBERALARM_ADDR, light );
}
void light_alarm( SYSTEM_DEVICE_STATUS *psdev )
{
light_local_e1_alarm( psdev );
light_remote_e1_alarm( psdev );
light_local_fiber_alarm( psdev );
light_remote_fiber_alarm( psdev );
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -