mtk中的一些函数作用-2

来电:

1. PsCBackCallIncoming()

       ProcessIncomingEvents(CM_PS_CALL_INCOMING, info);

 

2.ProcessIncomingCallEvent(info)

       AddNewCallInfo()       在这里,cm_p->state_info.AllCalls[index].group_id = GetUnUsedGroupID();

                                                 如果是MO,那么就先设置为255,然后在PsCBackSetCallFeature( )中在设置为GetUnUsedGroupID()

       CMSetupAlertForMT();     准备提示信息   

 

3. mmi_gsm_ring_ind()

       mmi_ucm_ring_ind_struct ring_ind;  

       装载ring_ind

       mmi_ucm_dispatch_ind(MMI_UCM_RING_IND, (void *)&ring_ind);

 

4. mmi_ucm_ring_ind(void *act_struct)                  参数就是上面的ring_ind

       如果(当前没有OUTGOING, INCOMING group,不存在紧急电话,不是黑名单号码)

       {

              mmi_ucm_sync_call_list(ind->call_list);                  同步cm_p与g_ucm_p

              把参数带进来的消息拷贝到g_ucm_p->mo_mt_display和g_ucm_p->call_misc.l4c_info中

              mmi_ucm_entry_marker()

              mdi_audio_stop_all()

             

       }

       否则      //自动拒接来电

       {

              mmi_ucm_pre_send_req(MMI_UCM_AUTO_REJECT, &(ind->uid_info), NULL, NULL);

       mmi_ucm_pre_send_req(MMI_UCM_FORCE_RELEASE, &(ind->uid_info), NULL, NULL);

       }

      

 

5. mmi_ucm_entry_incoming_call()

       根据g_ucm_p->mo_mt_display,设置一些提示信息:tone id, path, image……

       ShowCategory17Screen()

       注册按键相应:

       任意键接听: mmi_ucm_incoming_call_sendkey()

       右软件,END键拒接:mmi_ucm_incoming_call_endkey()

       SEND键接听:mmi_ucm_incoming_call_endkey()

       mmi_ucm_play_incoming_tone() 分2中:ring tone, wait tone

 

 

拒接来电

1.mmi_ucm_incoming_call_endkey()

mmi_ucm_stop_incoming_tone()

如果已经启动自动接听,则停止定时器UCM_AUTO_ANSWER_TIMER

mmi_ucm_end_single_action_with_index(groupIndex, 0)

 

2. mmi_ucm_end_single_action_with_index( )

       mmi_ucm_id_info_struct actionId;

       显示processing….

       装载actionId

       mmi_ucm_pre_send_req(MMI_UCM_END_SINGLE, &actionId, NULL, NULL);

 

      

3. mmi_ucm_pre_send_req( )

       mmi_ucm_single_call_struct singleReq;

       用上面的actionId装载singleReq

       mmi_ucm_send_req(op_code, first_ptr->call_type, &singleReq);

 

4. mmi_ucm_send_req( )

       mmi_gsm_ucm_act_req(MMI_UCM_END_SINGLE, act_struct);

 

5. mmi_gsm_ucm_act_req( )

       设置:cm_p->ucm_action_type = MMI_GSM_UCM_NORMAL, cm_p->ucm_operation = MMI_GSM_UCM_END_SINGLE

       mmi_gsm_end_single(act_struct);

 

6. mmi_gsm_end_single( )          所有的挂断电话都是在这里处理

       由于此时只有一通来电,因此执行:else if(GetTotalCallCount() == 1 && GetCurrentState() == CM_INCOMING_STATE) 这个分支

       SetCallflag(CM_HANGUP_REQUESTED)

       MakePsAthRequest((void*)PsCBackIncomingCallRejected);

 

7. MakePsAthRequest( )

       发送消息:PRT_ATH_REQ

       athReq->op_code = L4C_DISCONNECT_NONE;

 

 

L4C返回消息:PRT_ATH_REQ_SUCCESS,进入CBACK:

1. PsCBackIncomingCallRejected( )

       ProcessIncomingEvents(CM_PS_INCOMING_CALL_REJECTED, info);            J进入状态机

              g_bUserReject = TRUE;

              gIncomingCallDroppedFlag = TRUE

 

2. ProcessIncomingCallRejected()

       装载cm_p->disc_call

       ResetCallflag(CM_HANGUP_REQUESTED)

       设置CM的状态

       PurgeIncomingCallStructure()             清除了该来电在cm_p中的信息。但是在cm_p->disc_call中仍然存在

       mmi_gsm_release_ind(GetCallEndCause());

       mmi_gsm_end_single_rsp(TRUE, NULL);

 

3.mmi_gsm_release_ind( )

       mmi_ucm_release_ind_struct release_ind;

       用cm_p->disc_call来装载release_ind

       mmi_gsm_get_call_list(release_ind.call_list);           获取cm_p中的电话信息

       mmi_ucm_dispatch_ind(MMI_UCM_RELEASE_IND, (void *)&release_ind);

 

4. mmi_ucm_release_ind()

       mmi_ucm_stop_inband_tone();

    mmi_ucm_stop_incoming_tone();

       因为是来电,start_time时间无效,因此log call

       装载g_ucm_p->call_end

       mmi_ucm_sync_call_list(ind->call_list);                  同步cm_p与g_ucm_p。此时,2个变量中除了disc_call和call_end,再也没有其他关于被挂断电话的信息了。

       mmi_ucm_entry_call_end()                               提示信息:结束(需要利用g_ucm_p->call_end的信息)

       恢复一些必要的变量到原始状态

 

       清除g_ucm_p->call_end信息

 

5. mmi_gsm_end_single_rsp()

       mmi_ucm_act_rsp_struct end_single_rsp;

       设置:cm_p->ucm_action_type = MMI_GSM_UCM_NO_ACTION, cm_p->ucm_operation = MMI_GSM_UCM_IDLE

       mmi_gsm_get_call_list(end_single_rsp.call_list);

       ResetRedialAttempts()               清除自动重拨信息

       mmi_ucm_dispatch_rsp(MMI_UCM_END_SINGLE, MMI_UCM_VOICE_CALL_TYPE, (void *)&end_single_rsp);

 

6. mmi_ucm_end_act_rsp()

       mmi_ucm_sync_call_list(rsp->call_list);

       mmi_ucm_set_process_state(-1, -1, MMI_UCM_DO_PROCESS_STATE, MMI_UCM_COMP_PROCESS_STATE);

       mmi_ucm_set_process_state(-1, -1, MMI_UCM_COMP_PROCESS_STATE, MMI_UCM_IDLE_PROCESS_STATE);

 

 

拒接接听

1.mmi_ucm_incoming_call_sendkey()

       mmi_ucm_stop_incoming_tone();

       判断该如何去接听

 

2. mmi_ucm_accept_action()

       mmi_ucm_id_info_struct actionId;

       显示processing…..

       g_ucm_p->call_misc.curr_action = MMI_UCM_ACCEPT;

       装载actionId;

       mmi_ucm_pre_send_req(MMI_UCM_ACCEPT, &actionId, NULL, NULL);

 

3. mmi_ucm_send_req(op_code, first_ptr->call_type, &singleReq);

      

4. mmi_gsm_ucm_act_req(MMI_UCM_ACCEPT, act_struct);

       设置cm_p->ucm_action_type = MMI_GSM_UCM_NORMAL, cm_p->ucm_operation = MMI_GSM_UCM_ACCEPT

      

5. mmi_gsm_accept(act_struct)

       MakePsCallAcceptIncoming((void*)PsCBackIncomingCallAccepted);

              发送消息:PRT_INCOMINGCALL_ACCEPT_EVENT

 

L4返回消息PRT_INCOMINGCALL_ACCEPT_SUCCESS,进入CBACK:

1.PsCBackIncomingCallAccepted()

       ProcessIncomingEvents(CM_PS_INCOMING_CALL_CONNECTED, info);             进入状态机

 

2. ProcessAcceptIncomingCall()

       设置CM的状态

       SetIncomingCallStateActive();

       mmi_gsm_accept_rsp(TRUE, NULL);

 

3. mmi_gsm_accept_rsp( )

       mmi_ucm_act_rsp_struct accept_rsp;     

       设置cm_p->ucm_action_type = MMI_GSM_UCM_NO_ACTION, cm_p->ucm_operation = MMI_GSM_UCM_IDLE

       mmi_gsm_get_call_list(accept_rsp.call_list);                  获取cm_p电话信息

       mmi_ucm_dispatch_rsp(MMI_UCM_ACCEPT, MMI_UCM_VOICE_CALL_TYPE, (void *)&accept_rsp);

 

4. mmi_ucm_accept_act_rsp(act_struct);

       Log call

       mmi_ucm_sync_call_list(rsp->call_list);                  同步cm_p与g_ucm_p

       mmi_ucm_set_process_state(-1, -1, MMI_UCM_DO_PROCESS_STATE, MMI_UCM_COMP_PROCESS_STATE);

       mmi_ucm_set_process_state(-1, -1, MMI_UCM_COMP_PROCESS_STATE, MMI_UCM_IDLE_PROCESS_STATE);           

mmi_ucm_go_back_screen_check();

 

5. mmi_ucm_go_back_screen_check()           此时这个来电信息已经变成ACTIVE

       mmi_ucm_tab_highlight();                 设置显示的tab信息

       mmi_ucm_entry_in_call(); 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值