S32 srv_cbm_activate_mms_pre_proc(cbm_sim_id_enum mms_sim_id, cbm_result_error_enum *cause) { /*----------------------------------------------------------------*/ /* Local Variables */ /*----------------------------------------------------------------*/ cbm_sim_id_enum sim_id; /*----------------------------------------------------------------*/ /* Code Body */ /*----------------------------------------------------------------*/ #ifdef __MMI_TELEPHONY_SUPPORT__ if (!srv_mode_switch_is_network_service_available() || srv_mode_switch_is_switching()) { *cause = CBM_BEARER_FAIL; return CBM_ERROR; } #endif /* __MMI_TELEPHONY_SUPPORT__ */ *cause = CBM_OK; sim_id = srv_cbm_get_active_sim_id(mms_sim_id); if (sim_id < CBM_SIM_ID_TOTAL) { srv_cbm_send_bearer_disconnect_req(sim_id, CBM_BEARER_PS); return CBM_WOULDBLOCK; } else { return CBM_OK; } }
/***************************************************************************** * FUNCTION * srv_callset_is_available * DESCRIPTION * to check if sim-related call setting service is available * PARAMETERS * sim : [IN] target sim * RETURNS * MMI_TRUE if the specific sim-related call setting service is available *****************************************************************************/ MMI_BOOL srv_callset_is_available(mmi_sim_enum sim) { /*----------------------------------------------------------------*/ /* Local Variables */ /*----------------------------------------------------------------*/ srv_mode_switch_type_enum usable_side; /*----------------------------------------------------------------*/ /* Code Body */ /*----------------------------------------------------------------*/ if (!srv_mode_switch_is_network_service_available()) { MMI_TRACE(MMI_COMMON_TRC_G5_CALL, TRC_SRV_CALLSET_IS_AVAILABLE, sim, MMI_FALSE, 1); return MMI_FALSE; } usable_side = srv_mode_switch_get_current_mode(); /* check sim mode setting */ if (!(usable_side & sim)) { MMI_TRACE(MMI_COMMON_TRC_G5_CALL, TRC_SRV_CALLSET_IS_AVAILABLE, sim, MMI_FALSE, 3); return MMI_FALSE; } /* check sim status */ if (!srv_sim_ctrl_is_available(sim)) { MMI_TRACE(MMI_COMMON_TRC_G5_CALL, TRC_SRV_CALLSET_IS_AVAILABLE, sim, MMI_FALSE, 4); return MMI_FALSE; } if ( #ifdef __MMI_CALLSET_CALLER_ID__ srv_callset_is_caller_id_supported(sim) || #endif /* __MMI_CALLSET_CALLER_ID__ */ srv_ss_check_capability(sim, SRV_SS_ACT_CALL_WAIT, 0, SRV_SS_ALL_CALL) || srv_ss_check_capability(sim, SRV_SS_ACT_CALL_FORWARD, SRV_SS_CALL_FORWARD_CFALL, SRV_SS_ALL_CALL) || srv_ss_check_capability(sim, SRV_SS_ACT_CALL_BAR, SRV_SS_CALL_BAR_BAC, SRV_SS_ALL_CALL) || srv_callset_is_line_switch_supported(sim) || #ifdef __MMI_CALLSET_CUG__ srv_callset_is_cug_supported(sim) || #endif /* __MMI_CALLSET_CUG__ */ MMI_FALSE ) { MMI_TRACE(MMI_COMMON_TRC_G5_CALL, TRC_SRV_CALLSET_IS_AVAILABLE, sim, MMI_TRUE, 1); return MMI_TRUE; } else { MMI_TRACE(MMI_COMMON_TRC_G5_CALL, TRC_SRV_CALLSET_IS_AVAILABLE, sim, MMI_FALSE, 6); return MMI_FALSE; } }
cbm_result_error_enum srv_cbm_get_real_acct_id(U32 nw_acct_id, U32 *rel_acct_id, U32 *bearer_type) { /*----------------------------------------------------------------*/ /* Local Variables */ /*----------------------------------------------------------------*/ kal_uint8 app_id; cbm_sim_id_enum sim_id; kal_uint32 ori_acct_id; cbm_result_error_enum cbm_errcode = CBM_OK; srv_dtcnt_result_enum da_ret; kal_int8 ret; cbm_bearer_enum ori_bearer_type = CBM_BEARER_NONE; /*----------------------------------------------------------------*/ /* Code Body */ /*----------------------------------------------------------------*/ cbm_decode_data_account_id((kal_uint32)nw_acct_id, &sim_id, &app_id, NULL, &ori_acct_id); switch (ori_acct_id) { case CBM_DEFAULT_ACCT_ID: da_ret = srv_dtcnt_get_auto_acc_id(nw_acct_id, &ori_acct_id); if (da_ret == SRV_DTCNT_RESULT_SUCCESS && cbm_get_original_account(ori_acct_id) != CBM_DEFAULT_ACCT_ID) { ori_acct_id = cbm_set_app_id(ori_acct_id, CBM_INVALID_APP_ID); } else { ori_acct_id = CBM_INVALID_NWK_ACCT_ID; cbm_errcode = CBM_INVALID_ACCT_ID; } break; default: break; } if (cbm_errcode == CBM_OK) { ret = cbm_get_bearer_type(ori_acct_id, &ori_bearer_type); if (ret != CBM_OK || ori_bearer_type == CBM_BEARER_NONE #ifndef __MMI_OP01_WIFI__ #ifdef __MMI_TELEPHONY_SUPPORT__ || (ori_bearer_type != CBM_BEARER_WIFI && !srv_mode_switch_is_network_service_available()) #endif /* __MMI_TELEPHONY_SUPPORT__ */ #endif /* __MMI_OP01_WIFI__ */ ) { cbm_errcode = CBM_INVALID_ACCT_ID; } #ifdef __PS_PDP_SWITCH_SUPPORT__ if (cbm_errcode == CBM_OK) { srv_cbm_app_cntx_struct *mms_app_p = srv_cbm_get_mms_app_slot(SRV_CBM_APP_STATE_MMS_STARTUP); if (!mms_app_p) { mms_app_p = srv_cbm_get_mms_app_slot(SRV_CBM_APP_STATE_MMS_PENDING); } if (mms_app_p) { if (sim_id != cbm_get_sim_id(mms_app_p->nw_acct_id)) { cbm_errcode = CBM_BEARER_FAIL; } } } #endif /* __PS_PDP_SWITCH_SUPPORT__ */ } if (rel_acct_id) { *rel_acct_id = cbm_encode_data_account_id(ori_acct_id, sim_id, app_id, KAL_FALSE); } if (bearer_type) { *bearer_type = ori_bearer_type; } return cbm_errcode; }
VMINT vm_callout_ex(VMWSTR phnum, VM_CALLOUT_RESPONSE_T callback) { VM_P_HANDLE phandle = vm_pmng_get_current_handle(); // VMINT resid = -1; mmi_ucm_make_call_para_struct make_call_para; VMUINT16 gid = 0; if (vm_pmng_state(phandle) != VM_PMNG_FOREGROUND) { vm_log_debug("vm_callout: state is not foreground"); return VM_CALLOUT_ERR_STATE; } #ifdef __MRE_SAL_SIM__ if (vm_sim_card_count() <= 0) { vm_log_debug("vm_callout: no sim card"); return VM_CALLOUT_ERR_NO_SIM; } #endif if (!srv_mode_switch_is_network_service_available()) { vm_log_debug("vm_callout: flight mode"); return VM_CALLOUT_ERR_FLIGHT; } if (vm_callout_status != VM_CALLOUT_IDEL) { vm_log_debug("vm_callout: device is busy now"); return VM_CALLOUT_ERR_BUSY; } if (phnum == NULL) { vm_log_debug("vm_callout : the ptr of phnum is NULL"); return VM_CALLOUT_ERR_PHONE_NUM; } if ((vm_wstrlen(phnum) <= 0) || (vm_wstrlen(phnum) >= 40)) { vm_log_debug("vm_callout : the len of phnum is error"); return VM_CALLOUT_ERR_PHONE_NUM; } if (vm_available_phnum(phnum) == FALSE) { vm_log_debug("vm_callout : the content of phnum is error"); return VM_CALLOUT_ERR_PHONE_NUM; } if (phandle < 0) { vm_log_debug("vm_callout : phandle is error"); return VM_CALLOUT_ERR_PROCESS; } if ((vm_res_save_data(VM_RES_TYPE_CALLOUT, phnum, (vm_wstrlen(phnum) * 2), (void*)callback, phandle)) < 0) { VMINT resid = -1; if ((resid = vm_res_findfirst(-1, VM_RES_TYPE_CALLOUT)) != VM_RES_NOT_FIND) { vm_res_release_data(VM_RES_TYPE_CALLOUT, resid); vm_res_findclose(VM_RES_TYPE_CALLOUT); } if ((vm_res_save_data(VM_RES_TYPE_CALLOUT, phnum, (vm_wstrlen(phnum) * 2), (void*)callback, phandle)) < 0) { vm_log_debug("vm_callout: res save error"); return VM_CALLOUT_ERR_NO_RES; } } vm_log_debug("vm_callout : before mmi_ucm_init_call_para"); mmi_ucm_init_call_para(&make_call_para); vm_log_debug("vm_callout : after mmi_ucm_init_call_para"); switch (vm_sim_get_active_sim_card()) { case 1: make_call_para.dial_type = SRV_UCM_VOICE_CALL_TYPE; break; case 2: make_call_para.dial_type = SRV_UCM_VOICE_CALL_TYPE_SIM2; break; case 3: make_call_para.dial_type = SRV_UCM_VOICE_CALL_TYPE_SIM3; break; case 4: make_call_para.dial_type = SRV_UCM_VOICE_CALL_TYPE_SIM4; break; default: return VM_CALLOUT_ERR_NO_SIM; } make_call_para.ucs2_num_uri = (U16*)phnum; vm_log_debug("vm_callout : before mmi_ucm_call_launch"); mmi_ucm_call_launch(gid, &make_call_para); vm_log_debug("vm_callout : after mmi_ucm_call_launch"); return VM_CALLOUT_NO_ERR; }