📄 复件 (2) h323f.cpp
字号:
* 允许接收,发送WP_SEND_AVA消息并播放铃声;
* 否则,设置无应答转移计时器
*/
int h323_on_hook_state_receive_query_availability_event(s_event* psEvent, s_task* psTask)
{
H323TRACE("action: h323_on_hook_state_receive_query_availability_event\n");
wp_msg = (WrapperMsg *) psEvent->pMsg;
callIndex = wp_msg->baseInfo.callIndex;
/*H323TRACE("call index = %d\n", callIndex);*/
appCallInfo[callIndex].used = 1;
appCallInfo[callIndex].ipAddr[3] = wp_msg->baseInfo.remoteIpAddr>> 24;
appCallInfo[callIndex].ipAddr[2] = (wp_msg->baseInfo.remoteIpAddr >> 16) & 0xFF;
appCallInfo[callIndex].ipAddr[1] = (wp_msg->baseInfo.remoteIpAddr >> 8) & 0xFF;
appCallInfo[callIndex].ipAddr[0] = wp_msg->baseInfo.remoteIpAddr & 0xFF;
strncpy(appCallInfo[callIndex].display,
wp_msg->baseInfo.display, MAX_DISPLAY_LENGTH);
appCallInfo[callIndex].display[MAX_DISPLAY_LENGTH] = '\0';
strncpy(appCallInfo[callIndex].h323Id,
wp_msg->baseInfo.remoteH323Id, MAX_H323ID_LENGTH);
appCallInfo[callIndex].h323Id[MAX_H323ID_LENGTH] = '\0';
strncpy(appCallInfo[callIndex].e164Num,
wp_msg->baseInfo.remoteE164Num, MAX_E164NUM_LENGTH);
appCallInfo[callIndex].e164Num[MAX_E164NUM_LENGTH] = '\0';
/* 未接来电指示灯闪亮 */
SetLed(LED_SPKR, led_inverse_wink );
AppGetForwardConfig();
/* 处理允许无条件转移的情况 */
if(ForwardUncond)
{
char temp[MAX_PHONE_NUMBER_LEN+1];
sprintf(temp, "*%03d%03d%03d%03d", localIPNumber[0], localIPNumber[1],
localIPNumber[2], localIPNumber[3]);
/* 前转号码若为本机则不做处理 */
if ((!gkEnabled && (strcmp(temp, ForwardNumberUncond) != 0))
||(gkEnabled && (strcmp(localE164Num, ForwardNumberUncond) != 0)))
{
AppSendCallForward(callIndex,
ForwardNumberUncond, ForwardNumberUncondType);
/* 未接来电指示灯灭 */
SetLed(LED_SPKR, led_off );
return to_on_hook_state;
}
}
/* 响应呼叫方,发送AVA 消息 */
AppSendWrapper( WP_SEND_AVA, callIndex );
/* 显示来电信息 */
SetRemoteNumber(appCallInfo[callIndex].e164Num);
SetRemoteName(appCallInfo[callIndex].display, appCallInfo[callIndex].e164Num);
ClearLcd();
if (gkEnabled)
LcdShowRemote(dig_id, remoteNumber, strlen(remoteNumber), remoteName,
(transferred_flag ? FLAG_TRANSFERRED : forwarded_flag ? FLAG_FORWARDED :FLAG_NORMAL));
else
LcdShowRemote(ip_id, appCallInfo[callIndex].ipAddr, 4, remoteName,
(transferred_flag ? FLAG_TRANSFERRED : forwarded_flag ? FLAG_FORWARDED :FLAG_NORMAL));
/* 播放来电铃音 */
StopTone();
//chenguoyin
bufferStopTone();
PlayRing();
//chenguoyin
bufferPlayTone();
canStopRingInMenu = FALSE;
/*H323TRACE("Going to ringing_state\n"); */
if(ForwardNoResponse)
{
DeleteTimer(&h323_timer);
h323_timer = CreateTimer(ONE_SEC * phoneconfig.conf_forward.interval);
}
else
{
DeleteTimer(&h323_timer);
h323_timer = CreateTimer(CONNECT_TIME);
}
return null_event;
}
int h323_on_hook_state_to_ringing_state(s_event* psEvent, s_task* psTask)
{
H323TRACE("action: h323_on_hook_state_to_ringing_state\n");
return null_event;
}
/**
* 终结,回到初始状态
*/
int h323_on_hook_state_local_on_hook_event(s_event* psEvent, s_task* psTask)
{
H323TRACE("action: h323_on_hook_state_local_on_hook_event\n");
menu_event = null_event;
return null_event;
}
/**
* 终结terminate所指通道的通话
* AppTerminateAction()
*/
int h323_on_hook_state_receive_terminate_event(s_event* psEvent, s_task* psTask)
{
H323TRACE("action: h323_on_hook_state_receive_terminate_event\n");
/*wp_msg = (WrapperMsg *) psEvent->pMsg;
PreserveLcdMessage = TRUE;
AppTerminateAction( ST_H323_ON_HOOK_STATE );*/
/*设置屏显计时器,超时则LCD清屏 */
/*DeleteTimer(&h323_timer);
h323_timer = CreateTimer(ONE_SEC * 5);*/
return null_event;
}
/**
* 超时处理:LCD清屏、计时器复位
*/
int h323_on_hook_state_timeout_event(s_event* psEvent, s_task* psTask)
{
msg = (NonWrapperMsg *)psEvent->pMsg;
if ((msg->digit != h323_timer) && (msg->digit != call_forward_timer))
return null_event;
H323TRACE("action: h323_on_hook_state_timeout_event\n");
StopTone();
//chenguoyin
bufferStopTone();
PreserveLcdMessage = FALSE;
h323_timer = -1;
digit_set[0] = '\0';
num_digits = 0;
return null_event;
}
/**
* 若在菜单里选中某条电话号码,拨出该号码
*/
int h323_on_hook_state_callout_key_event(s_event* psEvent, s_task* psTask)
{
H323TRACE("action: h323_on_hook_state_callout_key_event\n");
if (toAddr[0] == '\0' && num_digits == 0)
return to_on_hook_state;
/* 打开免提 */
SetSpeakerphone(TRUE);
on_speakerphone = TRUE;
SetLed(LED_SPKR, led_steady_on );
return AppCalloutDirect();
}
/**
* 速拨功能
*/
int h323_on_hook_state_long_digit_event(s_event* psEvent, s_task* psTask)
{
H323TRACE("action: h323_on_hook_state_long_digit_event\n");
if (toAddr[0] == '\0' && num_digits == 0)
return to_on_hook_state;
if (SearchSpeedDialNumber(toAddr) == 0)
{
return null_event;
}
H323TRACE("digit_set = %s\n", digit_set);
/* 打开免提 */
SetSpeakerphone(TRUE);
on_speakerphone = TRUE;
SetLed(LED_SPKR, led_steady_on );
PreserveLcdMessage = TRUE;
return AppCalloutDirect();
}
int h323_on_hook_state_to_dead_end_state(s_event* psEvent, s_task* psTask)
{
H323TRACE("action: h323_on_hook_state_to_dead_end_state\n");
return null_event;
}
int h323_on_hook_state_to_query_availability_state(s_event* psEvent, s_task*
psTask)
{
H323TRACE("action: h323_on_hook_state_to_query_availability_state\n");
PreserveLcdMessage = FALSE;
return null_event;
}
int h323_on_hook_state_to_wait_for_connect_state(s_event* psEvent, s_task*
psTask)
{
H323TRACE("action: h323_on_hook_state_to_wait_for_connect_state\n");
return null_event;
}
/**
* 返回忙或进行呼叫转移
*/
int h323_wait_first_digit_state_receive_query_availability_event(s_event*
psEvent, s_task* psTask)
{
H323TRACE("action: h323_wait_first_digit_state_receive_query_availability_event\n");
wp_msg = (WrapperMsg *) psEvent->pMsg;
AppReplyNotAvailOrFwd(wp_msg);
return null_event;
}
/**
* 终结terminate所指通道的通话
*/
int h323_wait_first_digit_state_receive_terminate_event(s_event* psEvent,
s_task* psTask)
{
H323TRACE("action: h323_wait_first_digit_state_receive_terminate_event\n");
wp_msg = (WrapperMsg *) psEvent->pMsg;
/* While we are the transferring endpoint,
Did we receive a terminate on the existing (first) call? */
if(callIndex == wp_msg->baseInfo.callIndex)
{
/* 未进入菜单 */
if (!(*menu_inuse))
{
PreserveLcdMessage = TRUE;
if(wp_msg->reason == cmCallStateModeDisconnectedNormal)
{
LcdShowMessage(H323_REMOTE_HUNG_UP_THE_CALL);
}
else
{
LcdShowMessage(H323_UNKNOWN_ERROR);
}
}
recordCallTime();
AppTerminateAction( ST_H323_COLLECT_TRANSFER_DIGITS_STATE );
PlayBusyTone(FIFTEEN_SEC);
return to_dead_end_state;
}
return null_event;
}
/**
* 若为呼叫转移,产生to_collect_transfer_digits_state事件;
* 否则产生to_collect_digits_state
*/
int h323_wait_first_digit_state_digit_event(s_event* psEvent, s_task* psTask)
{
H323TRACE("action: h323_wait_first_digit_state_digit_event\n");
/* 若已进入菜单,不接收按键号码,退出该事件处理 */
if (*menu_inuse)
menu_event = reset_event;
msg = (NonWrapperMsg *) psEvent->pMsg;
digit_set[0] = msg->digit+'0';
digit_set[1] = '\0';
if (msg->digit == 10)
digitCollectAmount = 13;
else
digitCollectAmount = -1;
num_digits = 1;
if (digit_set[0] == '0' + 10)
digit_set[0] = '*';
else if (digit_set[0] == '0' + 11)
digit_set[0] = '#';
/* 设置等待后续拨号的计时器 */
DeleteTimer(&h323_timer);
h323_timer = CreateTimer(FIFTEEN_SEC);
if(starting_transfer)
{
LcdShowDigit( digit_set[0], FALSE );
H323TRACE("Going to collect_transfer_digits_state\n");
return to_collect_transfer_digits_state;
}
else
{
LcdShowDigit( digit_set[0], TRUE );
LcdDShowCursor(TRUE);
H323TRACE("Going to collect_digits_state\n");
return to_collect_digits_state;
}
}
/**
* 等待第一次拨号超时,停止等待
*/
int h323_wait_first_digit_state_timeout_event(s_event* psEvent, s_task* psTask)
{
H323TRACE("action: h323_wait_first_digit_state_timeout_event\n");
msg = (NonWrapperMsg *)psEvent->pMsg;
if ((msg->digit != h323_timer) && (msg->digit != call_forward_timer))
return null_event;
h323_timer = -1;
if(starting_transfer) /* just cancel the transfer */
{
H323TRACE("Time out: wait first transfer digit cancelld\n");
starting_transfer = FALSE;
if (muted && mutedByTransfer)
{
ToggleMute();
mutedByTransfer = 0;
}
return to_bidir_voice_state;
}
else
{
/* 等待拨号超时,拨出已输入号码 */
return AppCalloutDirect();
}
}
/**
* 拨出当前屏显的号码,记录拨出电话;
* 产生to_query_availability_state事件;
* 若出错产生to_dead_end_state;
* 若为第二路通话则产生to_bidir_voice_state
*/
int h323_wait_first_digit_state_callout_key_event(s_event* psEvent, s_task*
psTask)
{
if (starting_transfer)
return null_event;
if (toAddr[0] == '\0' && num_digits == 0)
{
H323TRACE("action: h323_wait_first_digit_state_redial_key_event\n");
strncpy(digit_set, outgoingcall[0].number,MAX_PHONE_NUMBER_LEN);
digit_set[MAX_PHONE_NUMBER_LEN]='\0';
return RedialKey(1);
}
H323TRACE("action: h323_wait_first_digit_state_callout_key_event\n");
return AppCalloutDirect();
}
/**
* 快速拨号功能,拨出速拨键1-10中对应的号码;
* 产生to_query_availability_state事件;
* 若出错产生to_dead_end_state;
* 若为第二路通话则产生to_bidir_voice_state
*/
int h323_wait_first_digit_state_speed_dial_key_event(s_event* psEvent, s_task*
psTask)
{
int numberIndex = -1;
if (starting_transfer)
return null_event;
H323TRACE("action: h323_wait_first_digit_state_speed_dial_key_event\n");
msg = (NonWrapperMsg *) psEvent->pMsg;
numberIndex = phoneconfig.conf_speedDial[msg->digit - 1];
if (numberIndex < 0 || numberIndex > MAX_PHONE_BOOK - 1)
return null_event;
if ((phonebook[numberIndex].number[0] != '\0'))
{
strncpy(digit_set, phonebook[numberIndex].number,MAX_PHONE_NUMBER_LEN);
digit_set[MAX_PHONE_NUMBER_LEN]='\0';
return RedialKey(2);
}
return null_event;
}
/**
* 若是Cll Transfer,返回通话状态
*/
int h323_wait_first_digit_state_cancel_key_event(s_event* psEvent, s_task*
psTask)
{
H323TRACE("action: h323_wait_first_digit_state_cancel_key_event\n");
if (starting_transfer)
{
H323TRACE("Collect transfer cancelled, back to voice state\n");
starting_transfer = FALSE;
if (muted && mutedByTransfer)
{
ToggleMute();
mutedByTransfer = 0;
}
return to_bidir_voice_state;
}
return null_event;
}
/**
* 终结,回到初始状态
*/
int h323_wait_first_digit_state_local_on_hook_event(s_event* psEvent, s_task*
psTask)
{
H323TRACE("action: h323_wait_first_digit_state_local_on_hook_event\n");
/* 若为免提状态,状态不变 */
if (on_speakerphone == TRUE)
return to_wait_first_digit_state;
if (starting_transfer)
{
recordCallTime();
AppTerminateAction(ST_H323_COLLECT_TRANSFER_DIGITS_STATE);
}
else
{
AppTerminateAction( ST_H323_WAIT_FIRST_DIGIT_STATE );
}
menu_event = reset_event;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -