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

📄 light.c

📁 pdh控制程序
💻 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 + -