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