1.Hole Single,Hold Conference(操作完全相同)
1. mmi_ucm_hold_action()
mmi_ucm_hold_action_with_index(g_ucm_p->call_misc.hilite_tab);
2. mmi_ucm_hold_action_with_index()
显示processing
g_ucm_p->call_misc.curr_action = MMI_UCM_HOLD;
设置该高亮hiliteTab的所有电话的proc_state=MMI_UCM_DO_PROCESS_STATE, act_type=MMI_UCM_HOLD
mmi_ucm_pre_send_req(MMI_UCM_HOLD, &actionId, NULL, NULL);
3. mmi_ucm_pre_send_req( )
装载singleReq
mmi_ucm_send_req(op_code, first_ptr->call_type, &singleReq);
4. mmi_ucm_send_req( )
mmi_gsm_ucm_act_req(MMI_UCM_HOLD, act_struct)
5. mmi_gsm_ucm_act_req( )
设置:cm_p->ucm_action_type = MMI_GSM_UCM_NORMAL, cm_p->ucm_operation = MMI_GSM_UCM_HOLD
mmi_gsm_hold(act_struct);
6. mmi_gsm_hold( )
MakePsSwapCallRequest((void*)mmi_gsm_ps_hold_rsp);
发送消息:PRT_SWAPCALL_EVENT
swapReq->opcode = CSMCC_SWAP_CALL;
L4C返回PRT_END_CHLD_RSP,进入CBACK:
1. mmi_gsm_ps_hold_rsp()
ProcessIncomingEvents(CM_PS_ACTIVE_CALL_HELD, info); 进入状态机
2. ProcessCallsHeld()
if (GetTotalCallCount() > 0)
SyncCallList(); 首先cm_p与L4C同步,然后g_ucm_p与cm_p同步
设置CM状态
2.Retrieve Single, Retrieve Conference(操作完全相同)
1. mmi_ucm_retrieve_action()
mmi_ucm_retrieve_action_with_index(g_ucm_p->call_misc.hilite_tab);
2. mmi_ucm_retrieve_action_with_index( )
提示:processing..
mmi_ucm_pre_send_req(MMI_UCM_RETRIEVE, &actionId, NULL, NULL);
3. mmi_ucm_send_req(op_code, first_ptr->call_type, &singleReq);
4. mmi_gsm_ucm_act_req(MMI_UCM_RETRIEVE, act_struct);
设置:cm_p->ucm_action_type = MMI_GSM_UCM_NORMAL, cm_p->ucm_operation = MMI_GSM_UCM_RETRIECE
5. mmi_gsm_retrieve(act_struct);
MakePsSwapCallRequest((void*)RetrieveReqSucess);
发送消息:PRT_SWAPCALL_EVENT, opcode = CSMCC_SWAP_CALL;
L4返回:PRT_END_CHLD_RSP,进入CBACK:
1. RetrieveReqSucess()
OutgoingProcessCMEvent(CM_PS_RETRIEVESUC, (void*)MsgStruct); 进入状态机
2. ProcessPSRetrieveSucEvent()
MakeRetrieve()
设置CM状态
3. mmi_gsm_retrieve_rsp(TRUE, NULL);
设置cm_p->ucm_action_type = MMI_GSM_UCM_NO_ACTION, cm_p->ucm_operation = MMI_GSM_UCM_IDLE
mmi_ucm_dispatch_rsp(MMI_UCM_RETRIEVE, MMI_UCM_VOICE_CALL_TYPE, (void *)&retrieve_rsp);
4. mmi_ucm_act_rsp(act_struct);
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);
显示:操作成功
mmi_ucm_go_back_screen_check()
3.Swap
1. mmi_ucm_swap_action()
2. mmi_ucm_swap_action_with_index(g_ucm_p->call_misc.hilite_tab, -1);
3. mmi_ucm_pre_send_req()
mmi_ucm_send_req(op_code, first_ptr->call_type, &multipleReq);
4. mmi_gsm_ucm_act_req(MMI_UCM_SWAP, act_struct);
SetUCMOperationState(MMI_GSM_UCM_NORMAL, MMI_GSM_UCM_SWAP);
5. mmi_gsm_swap(act_struct);
MakePsSwapCallRequest((void*)SwapReqSucess);
消息:PRT_SWAPCALL_EVENT
L4返回:PRT_END_CHLD_RSP,进入CBACK:
1. SwapReqSucess()
OutgoingProcessCMEvent(CM_PS_SWAPSUC, (void*)MsgStruct); 进入状态机
2. ProcessPSSwapSucEvent()
MakeSwap();
mmi_gsm_swap_rsp()
mmi_ucm_dispatch_rsp(MMI_UCM_SWAP, MMI_UCM_VOICE_CALL_TYPE, (void *)&swap_rsp);
3. mmi_ucm_act_rsp()
mmi_ucm_sync_call_list(rsp->call_list);
mmi_ucm_go_back_screen_check()
4. Conference
1. mmi_ucm_conference_action()
2. mmi_ucm_conference_action_with_index(g_ucm_p->call_misc.hilite_tab, -1);
显示processing…
3. mmi_ucm_pre_send_req(MMI_UCM_CONFERENCE, &firstId, &otherId, NULL);
4. mmi_ucm_send_req(op_code, first_ptr->call_type, &confReq);
5. mmi_gsm_ucm_act_req(MMI_UCM_CONFERENCE, act_struct);
SetUCMOperationState(MMI_GSM_UCM_NORMAL, MMI_GSM_UCM_CONFERENCE);
6. mmi_gsm_conference(act_struct);
SetConfFlag()
7. MakePsConfCallRequest()
发送消息:PRT_CONFCALL_EVENT, opcode = CSMCC_ADD_HELD_CALL;
L4返回PRT_END_CHLD_RSP,进入CBACK:
1. ConfReqSucess()
OutgoingProcessCMEvent(CM_PS_CONFSUC, (void*)MsgStruct); 进入状态机
2. ProcessPSConfSucEvent()
MakeConf() 此时,cm_p中所有HOLD CALL,都变成ACTIVE
3. mmi_gsm_conference_rsp(TRUE, NULL);
SetUCMOperationState(MMI_GSM_UCM_NO_ACTION, MMI_GSM_UCM_IDLE);
把cm_p中所有ACTIVE CALL的group_id都设置成cm_p->state_info.ucm_conf_group_id。
mmi_gsm_get_call_list(conference_rsp.call_list);
mmi_ucm_dispatch_rsp(MMI_UCM_CONFERENCE, MMI_UCM_VOICE_CALL_TYPE, (void *)&conference_rsp);
4. mmi_ucm_act_rsp(act_struct);
同步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.分机
1. mmi_ucm_split_action()
2. mmi_ucm_split_action_with_index(g_ucm_p->call_misc.hilite_tab, g_ucm_p->call_misc.hilite_index);
Processing….
3. mmi_ucm_pre_send_req(MMI_UCM_SPLIT, &actionId, NULL, NULL);
装载splitReq
4. mmi_ucm_send_req(op_code, first_ptr->call_type, &splitReq);
5. mmi_gsm_ucm_act_req(MMI_UCM_SPLIT, act_struct);
设置cm_p->ucm_action_type = MMI_GSM_UCM_NOMAL, cm_p->ucm_operation = MMI_GSM_UCM_SPLIT
6. mmi_gsm_split(act_struct);
设置分机电话的status_flag = CM_SPLIT_REQUESTED
7. MakePsSplitRequest(((mmi_ucm_split_req_struct*) act_struct)->split_call);
发送消息PRT_SPLITCALL_EVENT, opcode = CSMCC_HOLD_ACTIVE_EXCEPT_SPECIFIC_CALL;
L4返回消息PRT_END_CHLD_RSP,进入CBACK:
1. SplitReqSucess()
OutgoingProcessCMEvent(CM_PS_SPLITSUC, (void*)MsgStruct); 进入状态机
2. ProcessPSSplitSucEvent()
MakeSplitSucess() 设置其他ACTIVE CALL为HOLD 状态
3. mmi_gsm_split_rsp(TRUE, NULL);
设置cm_p->ucm_action_type = MMI_GSM_UCM_NO_ACTION, cm_p->ucm_operation = MMI_GSM_UCM_IDLE
mmi_gsm_get_call_list(split_rsp.call_list);
mmi_ucm_dispatch_rsp(MMI_UCM_SPLIT, MMI_UCM_VOICE_CALL_TYPE, (void *)&split_rsp);
4. mmi_ucm_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);
显示操作成功
mmi_ucm_go_back_screen_check()
6.End Single
1. mmi_ucm_end_single_action( )
2. mmi_ucm_end_single_action_with_index(g_ucm_p->call_misc.hilite_tab, g_ucm_p->call_misc.hilite_index);
mmi_ucm_pre_send_req(MMI_UCM_END_SINGLE, &actionId, NULL, NULL);
3. mmi_ucm_send_req(op_code, first_ptr->call_type, &singleReq);
4. mmi_gsm_ucm_act_req(MMI_UCM_END_SINGLE, act_struct);
设置cm_p->ucm_action_type = MMI_GSM_UCM_NORMAL, cm_p->ucm_operation = MMI_GSM_UCM_END_SINGLE
5.mmi_gsm_end_single(act_struct); 所有的挂断一通电话都是在这里处理
7.End Conference
1. mmi_ucm_end_conference_action()
2. mmi_ucm_end_conference_action_with_index(g_ucm_p->call_misc.hilite_tab);
mmi_ucm_pre_send_req(MMI_UCM_END_CONFERENCE, &actionId, NULL, NULL); 注意:actionId中只有group_id, 没有call_id
3. mmi_ucm_send_req(op_code, first_ptr->call_type, &endconfReq);
4. mmi_gsm_ucm_act_req(MMI_UCM_END_CONFERENCE, act_struct);
SetUCMOperationState(MMI_GSM_UCM_NORMAL, MMI_GSM_UCM_END_CONFERENCE);
5. mmi_gsm_end_conference(act_struct);
if(GetTotalActiveCallCount() > 1) 电话会议处于ACTIVE STATE
{
MakePsHangupallActiveRequest((void*)HangupallActReqSucess);
return;
}
else if (GetTotalHoldCallCount() > 1) 电话会议处于HOLD STATE
{
MakePsSendRelHeld((void*)HangupallHldReqSucess);
return;
}
8.End All
1. mmi_ucm_end_all_action()
2. mmi_ucm_end_all_action_with_type(MMI_UCM_CALL_TYPE_ALL);
Processing
g_ucm_p->call_misc.curr_action = MMI_UCM_END_ALL;
3. mmi_ucm_pre_send_req()
4. mmi_ucm_send_req()
5. mmi_gsm_ucm_act_req(MMI_UCM_END_ALL, act_struct);
SetUCMOperationState(MMI_GSM_UCM_NORMAL, MMI_GSM_UCM_END_ALL);
6. mmi_gsm_end_all(act_struct);
MakePsHangupallCallsRequest((void*)HangupallReqSucess);
发送消息:PRT_ENDALLCALL_EVENT, opcode = CSMCC_REL_ALL
L4返回PRT_ENDALLCALLREQ_SUCCESS,进入CBACK:
1.HangupallReqSucess()
OutgoingProcessCMEvent(CM_PS_HANGUPALLSUC, (void*)&gMyhandle); 进入状态机
2. ProcessPSHangupallSucEvent()
3. mmi_gsm_release_ind()
9.NetWork Drop
1. PsCBackNetworkCallDropped()
ProcessIncomingEvents(CM_PS_NWK_CALL_DROP, info);
2. ProcessEndCallIdAndGoBack( )