示例#1
0
void CALLCC UcmService::act_request(gs_srv_ucm_act_opcode_enum act_op, void *act_data, void *user_data, gs_srv_callback_func result_callback)
{
    //MMI_PRINT(MOD_MRE, TRACE_GROUP_1, "[MRE] UcmService::act_request");

    addRef();
    release();
    if (gs_is_MRE_free() && result_callback)
    {
        callback_data* pCbData = (callback_data*)vm_malloc(sizeof(callback_data));
        pCbData->p_handle = vm_pmng_get_current_handle();
        pCbData->callback = (void*)result_callback;
        pCbData->user_data = user_data;
        srv_ucm_act_request((srv_ucm_act_opcode_enum)act_op,act_data,pCbData,(mmi_proc_func)&UcmService::callback);
    }   
    srv_ucm_act_request((srv_ucm_act_opcode_enum)act_op,act_data,user_data,(mmi_proc_func)result_callback);
}
示例#2
0
VMINT vm_ivr_end(void)
{
    VMINT result = 0;
    VMINT resid = -1;
    srv_ucm_single_call_act_req_struct req;
    
    if ((resid = vm_res_findfirst(-1, VM_RES_TYPE_IVR)) != VM_RES_NOT_FIND)
	{	
	    VM_P_HANDLE phandle;
	    
	    vm_res_findclose(VM_RES_TYPE_IVR);	    
	    phandle = vm_res_get_process_handle(VM_RES_TYPE_IVR, resid);
	    if (vm_pmng_get_current_handle() != phandle)
	    {
	        result = -2;
	        goto error;
	    }		
    }   
    else
    {
        result = -3;
        goto error;
    }
    memcpy(&req.action_uid,&g_vm_ivr_call_info,sizeof(req.action_uid));
    
    srv_ucm_act_request(SRV_UCM_END_SINGLE_ACT,&req,NULL,NULL);
error:
    MMI_PRINT(MOD_MRE,TRACE_GROUP_9,"vm_ivr_end %d,%d,%d",result,req.action_uid.group_id,req.action_uid.call_id);
    return result;
}
示例#3
0
VMINT vm_ivr_call(vm_ivr_call_data* data)
{   
    VMINT result = 0;
    srv_ucm_dial_act_req_struct req;

    memset(&req, 0, sizeof(req));
    if (data->sim_card > vm_sim_max_card_count() || data->sim_card < 1)
    {
        result = -2;
        goto error;
    }

	if (srv_ucm_query_call_count(SRV_UCM_CALL_STATE_ALL, SRV_UCM_CALL_TYPE_ALL, NULL) > 0)
	{
	    result = -3;
        goto error;
	}
	
    if ((vm_res_save_data(VM_RES_TYPE_IVR, data->user_data, 4, (void*)data->callback, vm_pmng_get_current_handle())) < 0)
	{
		result = -4;
        goto error;
	}
	req.call_type = 1<< ((data->sim_card-1)*8);
	kal_wstrncpy(req.num_uri,data->phone_num,SRV_UCM_MAX_NUM_URI_LEN+1);
	req.module_id = SRV_UCM_MODULE_ORIGIN_COMMON;
	req.is_ip_dial = 0;
	req.phb_data = NULL;
	
	srv_ucm_act_request(SRV_UCM_DIAL_ACT,&req,NULL,_vm_ivr_call_callback);
error:
    MMI_PRINT(MOD_MRE,TRACE_GROUP_9,"vm_ivr_call %d,%d",result,data->sim_card);
    return result;
}
示例#4
0
static void vm_callout_process_state_pro(VM_P_HANDLE phandle, VMINT pro_state)
{
	VMINT resid = 0;
	
	switch(pro_state)
	{
		case VM_PMNG_UNLOAD:
			while ((resid = vm_res_findfirst(phandle, VM_RES_TYPE_CALLOUT)) != VM_RES_NOT_FIND)
			{
				vm_res_release_data(VM_RES_TYPE_CALLOUT, resid);		
				vm_res_findclose(VM_RES_TYPE_CALLOUT);		
			}				
			while ((resid = vm_res_findfirst(phandle, VM_RES_TYPE_IVR)) != VM_RES_NOT_FIND)
			{
			    srv_ucm_single_call_act_req_struct req;
                memcpy(&req.action_uid,&g_vm_ivr_call_info,sizeof(req.action_uid));
                
                srv_ucm_act_request(SRV_UCM_END_SINGLE_ACT,&req,NULL,NULL);
                
				vm_res_release_data(VM_RES_TYPE_IVR, resid);		
				vm_res_findclose(VM_RES_TYPE_IVR);		
			}
			break;
		case VM_PMNG_FOREGROUND:
			break;
		case VM_PMNG_BACKGROUND:
			break;
	}
}
示例#5
0
/*
static mmi_ret _vm_ivr_end_all_callback(mmi_event_struct *param)
{
    srv_ucm_act_rsp_struct* rsp = (srv_ucm_act_rsp_struct*)((srv_ucm_act_result_evt_struct*)param)->act_result;
    srv_ucm_single_call_act_req_struct req;
    MMI_PRINT(MOD_MRE,TRACE_GROUP_9,"_vm_ivr_end_all_callback %d",rsp->result_info.result);

    memcpy(&req.action_uid,&g_vm_ivr_call_info,sizeof(req.action_uid));   
//    srv_ucm_act_request(SRV_UCM_END_SINGLE_ACT,&req,NULL,_vm_ivr_end_callback);  
}
*/
static void _vm_ivr_handler_timer_cb(void)
{
    srv_ucm_single_call_act_req_struct req;

	memcpy(&req.action_uid,&g_vm_ivr_call_info,sizeof(req.action_uid));   
    srv_ucm_act_request(SRV_UCM_END_SINGLE_ACT,&req,NULL,_vm_ivr_end_callback);                
//    srv_ucm_act_request(SRV_UCM_END_ALL_PROCESSING_ACT,NULL,NULL,_vm_ivr_end_all_callback);
}
示例#6
0
/*
static mmi_ret _vm_ivr_dial_callback(mmi_event_struct *param)
{
    srv_ucm_act_rsp_struct* rsp = (srv_ucm_act_rsp_struct*)((srv_ucm_act_result_evt_struct*)param)->act_result;
    VMINT resid = -1;

    MMI_PRINT(MOD_MRE,TRACE_GROUP_9,"_vm_ivr_dial_callback 1");
    
    if ((resid = vm_res_findfirst(-1, VM_RES_TYPE_IVR)) != VM_RES_NOT_FIND)
	{	
        VM_P_HANDLE phandle = vm_res_get_process_handle(VM_RES_TYPE_IVR, resid);
        void* user_data;
        VMINT size = 4;
        vm_ivr_cb callback;
        ivr_callback_data data;

        MMI_PRINT(MOD_MRE,TRACE_GROUP_9,"_vm_ivr_dial_callback %d",rsp->result_info.result);
        
        vm_res_get_callback(VM_RES_TYPE_IVR, resid, (void**)&callback);
        vm_res_get_data(VM_RES_TYPE_IVR, resid, (void**)&user_data, &size);
        data.user_data = user_data;
        

		if (rsp && SRV_UCM_RESULT_OK == rsp->result_info.result)
        {
            data.status = VM_IVR_DIALED;
        }
        else
        {
            data.status = VM_IVR_DIAL_FAIL;
        }
        
        if (vm_pmng_set_ctx(phandle) == VM_PMNG_OP_OK)
		{
			if (callback != NULL)
			{
				callback(&data);
			}

			vm_pmng_reset_ctx();
		}
		vm_res_findclose(VM_RES_TYPE_IVR); 
    }   
    MMI_PRINT(MOD_MRE,TRACE_GROUP_9,"_vm_ivr_dial_callback end");
    return MMI_RET_OK; 
}
*/
VMINT vm_ivr_dial_number(VMCHAR number)
{
    VMINT result = 0;
    srv_ucm_dtmf_struct digits;
    mmi_keypads_enum key;
    VMINT resid =1;
    
    if (!number)
    {
        result = -2;
        goto error;
    }

    if ((resid = vm_res_findfirst(-1, VM_RES_TYPE_IVR)) != VM_RES_NOT_FIND)
	{	
	    VM_P_HANDLE phandle;
	    
	    vm_res_findclose(VM_RES_TYPE_IVR);
	    phandle = vm_res_get_process_handle(VM_RES_TYPE_IVR, resid);
	    if (vm_pmng_get_current_handle() != phandle)
	    {
	        result = -3;
	        goto error;
	    }
		
    }   
    else
    {
        result = -4;
        goto error;
    }

	switch (number)
	{
	case '1':
	    key = KEY_1;
	    break;
	case '2':
	    key = KEY_2;
	    break;
	case '3': 
	    key = KEY_3;
	    break;
	case '4':
	    key = KEY_4;
	    break;
	case '5':
	    key = KEY_5;
	    break;
	case '6':
	    key = KEY_6;
	    break;
	case '7':
	    key = KEY_7;
	    break;
	case '8':
	    key = KEY_8;
	    break;
	case '9':
	    key = KEY_9;
	    break;
	case '0':
	    key = KEY_0;
	    break;
    case '*':
	    key = KEY_STAR;
	    break;
    case '#':
	    key = KEY_POUND;
	    break;	
    default:
        result = -5;
        goto error;
	}	
	
	digits.digit = key;
	srv_ucm_act_request(SRV_UCM_START_DTMF_ACT,&digits,NULL,NULL);
	srv_ucm_act_request(SRV_UCM_STOP_DTMF_ACT,&digits,NULL,NULL);
error:	
    MMI_PRINT(MOD_MRE,TRACE_GROUP_9,"vm_ivr_dial_number %d",result);
	return result;
}