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); }
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; }
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; }
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; } }
/* 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); }
/* 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; }