mtk 10a 电话处理函数

本文详细解析了一个用于处理电话呼叫各种状态的函数,包括来电显示、接听、挂断等操作,并展示了如何更新状态栏指示图标及自动接听电话的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

电话的各种处理基本都在这个函数里实现:接入、接听、主动挂断、对方挂断、电话状态提示等。

如果要做电话的自动接听,也在这个函数里实现:

mmi_ret mmi_ucm_ind_hdlr(mmi_event_struct* para)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    srv_ucm_ind_evt_struct *ind;
    srv_ucm_incoming_call_ind_struct *incoming_ind;
    srv_ucm_outgoing_call_ind_struct *outgoing_ind;
    srv_ucm_alert_ind_struct *alert_ind;
    srv_ucm_notify_ind_struct *notify_ind;
    srv_ucm_connect_ind_struct *connect_ind;
    srv_ucm_disconnecting_ind_struct *disconnecting_ind;
    srv_ucm_release_ind_struct *release_ind;
    srv_ucm_call_cost_ind_struct *call_cost_ind;
    srv_ucm_auto_redial_ind_struct *auto_redial_ind;
    srv_ucm_start_processing_ind_struct *start_processing_ind;
    srv_ucm_stop_processing_ind_struct *stop_processing_ind;
    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/    
    ind = (srv_ucm_ind_evt_struct *) para;
    MMI_TRACE(MMI_COMMON_TRC_G5_CALL, TRC_MMI_UCM_IND_HDLR_P1, ind->ind_type);
    
    
    /* update the call indicator icon on the status bar */
#ifdef __MMI_CALL_INDICATOR__
    if (srv_ucm_query_call_count(SRV_UCM_ACTIVE_STATE, SRV_UCM_CALL_TYPE_ALL, NULL) > 0)
    {
        wgui_status_icon_bar_change_icon_image(STATUS_ICON_CALL_INDICATOR, IMG_SI_CALL_INDICATOR_ACTIVE);
        wgui_status_icon_bar_show_icon(STATUS_ICON_CALL_INDICATOR);
    }
    else if (srv_ucm_query_call_count(SRV_UCM_HOLD_STATE, SRV_UCM_CALL_TYPE_ALL, NULL) > 0)
    {
        wgui_status_icon_bar_change_icon_image(STATUS_ICON_CALL_INDICATOR, IMG_SI_CALL_INDICATOR_HOLD);
        wgui_status_icon_bar_show_icon(STATUS_ICON_CALL_INDICATOR);
    }
    else
    {
        wgui_status_icon_bar_hide_icon(STATUS_ICON_CALL_INDICATOR);
    }
#endif  /*__MMI_CALL_INDICATOR__*/

    kal_prompt_trace(MOD_MMI,"ucm ind_type %d", ind->ind_type);
    switch (ind->ind_type)
    {  
        case SRV_UCM_INCOMING_CALL_IND:
        {
            incoming_ind = (srv_ucm_incoming_call_ind_struct*) ind->ptr;
        #ifdef  __MMI_FTE_SUPPORT__
            mmi_ucm_auto_lock_fsm_hdlr(MMI_UCM_AL_INCOMING_EVENT);
        #endif /* __MMI_FTE_SUPPORT__ */
            
            if (MMI_FALSE == mmi_frm_group_is_present(GRP_ID_UCM_MT))
            {
                mmi_ucm_sg_create(GRP_ID_ROOT, GRP_ID_UCM_MT);
            }        
            /* display the incoming call screen */
            mmi_ucm_handle_incoming_call_ind(incoming_ind);           
        }
        break;

        case SRV_UCM_OUTGOING_CALL_IND:
        {
            outgoing_ind = (srv_ucm_outgoing_call_ind_struct*) ind->ptr;             
            g_ucm_p->call_misc.get_alert_ind = MMI_FALSE;
        #ifdef  __MMI_FTE_SUPPORT__
            mmi_ucm_auto_lock_fsm_hdlr(MMI_UCM_AL_OUTGOING_EVENT);
        #endif /* __MMI_FTE_SUPPORT__ */            
            mmi_ucm_handle_outgoing_call_ind(outgoing_ind);
    
        }
        break;        

        case SRV_UCM_ALERT_IND:
        {
            alert_ind = (srv_ucm_alert_ind_struct*)ind->ptr;
            g_ucm_p->call_misc.get_alert_ind = MMI_TRUE;
            mmi_ucm_alert_ind(alert_ind);
        }
        break;

        case SRV_UCM_NOTIFY_IND:
        {
            notify_ind = (srv_ucm_notify_ind_struct*)ind->ptr;
            mmi_ucm_notify_ind(notify_ind);
        }
        break;

        case SRV_UCM_CONNECT_IND:
        {
            connect_ind = (srv_ucm_connect_ind_struct*)ind->ptr;
        #ifdef  __MMI_FTE_SUPPORT__
            mmi_ucm_auto_lock_fsm_hdlr(MMI_UCM_AL_CONNECT_EVENT);
        #endif /* __MMI_FTE_SUPPORT__ */             
            mmi_ucm_connect_ind(connect_ind);
        }
        break;

        case SRV_UCM_DISCONNECTING_IND:
        {
            disconnecting_ind = (srv_ucm_disconnecting_ind_struct*)ind->ptr;
            mmi_ucm_handle_disconnecting_ind(disconnecting_ind);
        }
        break;

        case SRV_UCM_RELEASE_IND:
        {
            release_ind = (srv_ucm_release_ind_struct*) ind->ptr;
        #ifdef  __MMI_FTE_SUPPORT__
            mmi_ucm_auto_lock_fsm_hdlr(MMI_UCM_AL_RELEASE_EVENT);
        #endif /* __MMI_FTE_SUPPORT__ */              
            mmi_ucm_release_ind(release_ind);

        }
        break;

        case SRV_UCM_CALL_COST_IND:
        {
            call_cost_ind = (srv_ucm_call_cost_ind_struct*)ind->ptr;
            mmi_ucm_call_cost_ind(call_cost_ind);
        }
        break;

        case SRV_UCM_AUTO_REDIAL_IND:
        {
            auto_redial_ind = (srv_ucm_auto_redial_ind_struct*) ind->ptr;
            mmi_ucm_auto_redial_ind(auto_redial_ind);
        }
        break;

        case SRV_UCM_AUTO_REDIAL_CANCEL_IND:
        {
            mmi_ucm_auto_redial_cancel_ind();
        }
        break;
        
        case SRV_UCM_START_PROCESSING_IND:
        {
            start_processing_ind = (srv_ucm_start_processing_ind_struct*) ind->ptr;
            mmi_ucm_start_processing_ind(start_processing_ind);
        }
        break;

        case SRV_UCM_STOP_PROCESSING_IND:
        {
            stop_processing_ind = (srv_ucm_stop_processing_ind_struct*) ind->ptr;
            mmi_ucm_stop_processing_ind(stop_processing_ind);
        }
        break;

        case SRV_UCM_QUERY_CANCEL_IND:
        {
            mmi_ucm_query_cancel_ind();
        }
        break;

        case SRV_UCM_REFRESH_IND:
        {
            mmi_ucm_refresh_ind();
        }
        break;

        default:
        {
            MMI_ASSERT(0);
        }
        break;
        
    }
    return MMI_RET_OK;     
}

转载于:https://www.cnblogs.com/inteliot/archive/2012/06/01/2531361.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值