MTK:UCM--hold,retrieve,swap,split,conference

 

1.Hole SingleHold 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( )


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IOT物联网小镇

赏点银子去植发

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值