Beispiel #1
0
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;
    }
}
Beispiel #3
0
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;
}
Beispiel #4
0
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;
}