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

📄 ring.c

📁 pdh控制程序
💻 C
字号:
#ifndef _RING_C_
#define _RING_C_

#include "api.h"

BYTE is_key_press()
{
#if _LCD_MENU_
	if( get_menu_key_voice_status() )
		return VALID;
#endif
	return INVALID;
}

BYTE is_ow_call()
{
	BYTE hook_status;
	SYSTEM_DEVICE_STATUS *psdev = &gsystemStauts;
	static BYTE xdata preview_remote_hook = 0;
	BYTE remote_hook;

	hook_status = ReadChip( LOCAL_HOOKSTATUS_ADDR );

	if( hook_status&BIT1 )
		psdev->local.alarm_hook &= HOOK_ON;

	if( (!(hook_status&BIT1)) && ( (psdev->remote.alarm_hook&0x0f) != PHONE_TALK) )
	{
		psdev->local.alarm_hook &= HOOK_ON;
		psdev->local.alarm_hook |= HOOK_OFF;
		return INVALID;
	}

	if( ((psdev->remote.alarm_hook&0x0f) == (HOOK_ON&0x0f))
		&& ((psdev->local.alarm_hook&0x0f) == (HOOK_ON&0x0f)) )
		preview_remote_hook = (HOOK_ON&0x0f);

	if( hook_status&BIT1 )
	{
		remote_hook = (psdev->remote.alarm_hook&0x0f);
		if( remote_hook == HOOK_OFF  )
		{
			if( (preview_remote_hook&0x0f) == (HOOK_ON&0x0f) )
				return VALID;
		}
	}
	if( ((psdev->remote.alarm_hook&0x0f) == PHONE_TALK)
		||((psdev->remote.alarm_hook&0x0f) == HOOK_OFF)
		&& ((preview_remote_hook&0x0f) == (HOOK_ON&0x0f)) )
	{
		preview_remote_hook = HOOK_OFF;
		return INVALID;
	}

	return INVALID;
}

BYTE get_mute_status()
{
	BYTE mute;

	mute = ReadChip( LOCAL_HOOKSTATUS_ADDR );

	if( mute&BIT0 )
		return INVALID;
	else
		return VALID;
}


BYTE is_alarm( SYSTEM_DEVICE_STATUS *psdev )
{
	if( (get_local_alarm_status( psdev ) != ALARM )
	|| (get_remote_alarm_status( psdev ) != ALARM ) )
		return VALID;

	return INVALID;
}

BYTE is_local_loop( SYSTEM_DEVICE_STATUS *psdev )
{
	if( light_e1_loop( psdev->remote.e1_status ) != INVALID )
		return VALID;

	return INVALID;
}

BYTE is_remote_loop( SYSTEM_DEVICE_STATUS *psdev )
{
	if( light_e1_loop( psdev->local.e1_status ) != INVALID )
		return VALID;

	return INVALID;
}

BYTE get_remote_ow_status( SYSTEM_DEVICE_STATUS *psdev )
{
	return (psdev->remote.alarm_hook&0x0f);
}

void ring_control( BYTE ring_status , SYSTEM_DEVICE_STATUS *psdev )
{
	BYTE ring_chip = RING_NORMAL;

	switch( ring_status )
	{
	case KEY_VOICE:
		ring_chip &= ~BIT6;
		break;

	case CALL_VOICE:
		ring_chip &= ~BIT4;
		break;

	case ALARM_VOICE:
		ring_chip &= ~BIT2;
		break;

	case LOCAL_LOOP_VOICE:
		ring_chip &= ~BIT3;
		break;

	case REMOTE_LOOP_VOICE:
		ring_chip &= ~BIT5;
		break;

	default:
		break;
	}

	if( get_remote_ow_status( psdev ) == HOOK_OFF )
		ring_chip &= ~BIT1;

	if( get_remote_ow_status( psdev ) == PHONE_TALK )
		ring_chip &= ~BIT0;

	WriteChip( REMOTE_HOOK_ADDR, ring_chip );
}

void ring_process( SYSTEM_DEVICE_STATUS *psdev )
{
	BYTE ring_status;

	/*LCD按键是否按下*/
	if( is_key_press() == VALID )
		ring_status = KEY_VOICE;

	/*公务是否有电话*/
	else if( is_ow_call() == VALID )
		ring_status = CALL_VOICE;

	/*检验静音状态*/
	else if( get_mute_status() == INVALID )
		ring_status = SILENCE;

	/*检查是否有告警*/
	else if( is_alarm( psdev ) == VALID )
		ring_status = ALARM_VOICE;

	/*检查是否有本端环回*/
	else if( is_local_loop( psdev ) == VALID )
		ring_status = LOCAL_LOOP_VOICE;

	/*检查是否有远端环回*/
	else if( is_remote_loop( psdev ) == VALID )
		ring_status = REMOTE_LOOP_VOICE;

	ring_control( ring_status, psdev );
}

void task_ring_process( void )
{
	SYSTEM_DEVICE_STATUS *psdev = &gsystemStauts;

	ring_process( psdev );
}

#endif

⌨️ 快捷键说明

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