`

换卡或不插卡时删除通话记录

 
阅读更多
1.1 10A1032实现
static srv_clog_job_struct *srv_clog_submit_next_init_job(srv_clog_cntx_struct *cntx, srv_clog_job_type_enum cur_type)
{
…………………
next_type = srv_clog_get_next_init_job_type(cntx, cur_type);
MMI_TRACE(SRV_CLOG_TRC_INFO, TRC_SRV_CLOG_SUBMIT_NEXT_INIT_JOB, cur_type, next_type);
if (cur_type == SRV_CLOG_JOB_TYPE_CMN_INIT)
{
job = srv_clog_job_submit_head(cntx->comp->job_mgr, next_type);
job->pid = srv_clog_new_pid(cntx);
}
else if (next_type == SRV_CLOG_JOB_TYPE_INIT_DONE)
{
/* All initialized jobs are done, just remove the job node */
job = srv_clog_job_remove_head(cntx->comp->job_mgr);
SRV_CLOG_ASSERT(job);
srv_clog_job_free(job);
return NULL;
}
else if(next_type==SRV_CLOG_JOB_TYPE_DEL_ALL_LOGS)
//for removing call logs when the inserted sim card changed
{
srv_clog_del_all_logs_req_struct *req;
job = srv_clog_job_index(cntx->comp->job_mgr, 0);
SRV_CLOG_ASSERT(job && job->job_type == cur_type);
job = srv_clog_job_reuse(cntx->comp->job_mgr, job, next_type);
job->req_data=srv_clog_job_new_para(job,sizeof(srv_clog_del_all_logs_req_struct));
req=(srv_clog_del_all_logs_req_struct *)job->req_data;
srv_clog_init_para(SRV_CLOG_PARA_DEL_ALL_LOGS_REQ,req);
job->pid = srv_clog_new_pid(cntx);
}
else
{
job = srv_clog_job_index(cntx->comp->job_mgr, 0);
SRV_CLOG_ASSERT(job && job->job_type == cur_type);
job = srv_clog_job_reuse(cntx->comp->job_mgr, job, next_type);
job->pid = srv_clog_new_pid(cntx);
}
return job;
}
static srv_clog_job_type_enum srv_clog_get_next_init_job_type(
srv_clog_cntx_struct *cntx,
srv_clog_job_type_enum cur_job_type)
{
srv_clog_job_type_enum next_job_type = SRV_CLOG_JOB_TYPE_INIT_DONE;
switch (cur_job_type)
{

case SRV_CLOG_JOB_TYPE_CMN_INIT:
next_job_type = SRV_CLOG_JOB_TYPE_LOAD_LOGS;
break;
case SRV_CLOG_JOB_TYPE_LOAD_LOGS:
next_job_type = SRV_CLOG_JOB_TYPE_PARSE_LOGS;
break;
case SRV_CLOG_JOB_TYPE_PARSE_LOGS:
next_job_type = SRV_CLOG_JOB_TYPE_DEL_ALL_LOGS;
break;

case SRV_CLOG_JOB_TYPE_DEL_ALL_LOGS:
next_job_type = SRV_CLOG_JOB_TYPE_INIT_DONE;
break;
default:
SRV_CLOG_ASSERT(!"Wrong job_type");
break;
}
return next_job_type;
}
static S32 srv_clog_delete_all_logs_hdlr(srv_clog_cntx_struct *cntx, srv_clog_job_struct *job)
{

………………………
comp = srv_clog_get_cur_comp(cntx, job->handle);
if (job->proc_state == SRV_CLOG_JOB_DEL_ALL_LOGS_STATE_INIT)
{
if (!SRV_CLOG_CHECK_BIT_GRP
(cntx->flags, SRV_CLOG_CNTX_FLAG_PHB_READY_TOTAL, SRV_CLOG_CNTX_FLAG_PHB_READY_TOTAL))
//not ready to check sim status ,so have to wait
{
job->job_state=SRV_CLOG_JOB_STATE_WAITING;
return SRV_CLOG_RET_CONTINUE;
}
else
{
job->job_state = SRV_CLOG_JOB_STATE_HANDLING;
}
if(!srv_clog_is_ready()) //callog service is not ready means it’s in init process ,so we can treat this job as a Delete job in init process
{
srv_clog_del_all_logs_req_struct* req;
req=(srv_clog_del_all_logs_req_struct* )job->req_data;
req->sim_id=0;
if(srv_clog_is_single_sim_replaced(MMI_SIM1))
//如果是不插卡也需要删除,请加上“||!srv_sim_ctrl_is_inserted(MMI_SIM1))”
req->sim_id=MMI_SIM1;

#if (MMI_MAX_SIM_NUM >=2)
if(srv_clog_is_single_sim_replaced(MMI_SIM2))、
//如果是不插卡也需要删除,请加上“||!srv_sim_ctrl_is_inserted(MMI_SIM2))”
req->sim_id|=MMI_SIM2;
#endif
/// 如果是3卡或4可也请考虑
if(req->sim_id==0)
{
srv_clog_cb_delete_all_logs_result(cntx, job);
job->job_state = SRV_CLOG_JOB_STATE_FINISHED;
return SRV_CLOG_RET_OK;
}
}
job->cursor = 0;
job->init_value = 0;
job->proc_state = SRV_CLOG_JOB_DEL_ALL_LOGS_STATE_DELETING;
}
if (job->proc_state == SRV_CLOG_JOB_DEL_ALL_LOGS_STATE_DELETING)
{
.。。。。。。。。。。。。。。。
return SRV_CLOG_RET_OK;
}
void srv_clog_evt_init(void)
{
mmi_frm_set_protocol_event_handler(
MSG_ID_SRV_CLOG_JOB_CONTINUE_IND,
(PsIntFuncPtr) srv_clog_job_continue_ind_hdlr,
MMI_FALSE);
srv_clog_set_pevt_hdlr(
SRV_CLOG_SIM_ID_ALL,
MSG_ID_MMI_PHB_LAST_NUMBER_READY_IND,
(PsIntFuncPtr) srv_clog_sim_phb_last_number_ready_ind_hdlr);
}
备注:并把srv_clog_sim_phb_last_number_ready_ind_hdlr的定义移到srv_clog_evt_init的前面,原本是定义在ClogSrvSimSync.c

1.2 10A1108的实现(较新的版本都可以参考)
static srv_clog_job_type_enum srv_clog_get_next_init_job_type(
srv_clog_cntx_struct *cntx,
srv_clog_job_type_enum cur_job_type)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
srv_clog_job_type_enum next_job_type = SRV_CLOG_JOB_TYPE_INIT_DONE;

/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
switch (cur_job_type)
{
case SRV_CLOG_JOB_TYPE_CMN_INIT:
next_job_type = SRV_CLOG_JOB_TYPE_LOAD_LOGS;
break;

case SRV_CLOG_JOB_TYPE_LOAD_LOGS:
next_job_type = SRV_CLOG_JOB_TYPE_PARSE_LOGS;
break;

case SRV_CLOG_JOB_TYPE_PARSE_LOGS:
next_job_type = SRV_CLOG_JOB_TYPE_REVISE_LOGS;
break;

case SRV_CLOG_JOB_TYPE_REVISE_LOGS:

next_job_type=SRV_CLOG_JOB_TYPE_DEL_ALL_LOGS;

/*
// if (srv_clog_stl_support_sim_sync(cntx->comp->style_mgr))
// next_job_type = SRV_CLOG_JOB_TYPE_SIM_SYNC;
//else
// next_job_type = SRV_CLOG_JOB_TYPE_INIT_DONE;
*/
break;

case SRV_CLOG_JOB_TYPE_DEL_ALL_LOGS:
next_job_type = SRV_CLOG_JOB_TYPE_INIT_DONE;
break;

default:
SRV_CLOG_ASSERT(0);
break;
}
return next_job_type;
}
static srv_clog_job_struct *srv_clog_submit_next_init_job(srv_clog_cntx_struct *cntx, srv_clog_job_type_enum cur_type)
{
srv_clog_job_struct *job;
srv_clog_job_type_enum next_type;

/* It's the first time to start the initialized job, need to add a new job node */
next_type = srv_clog_get_next_init_job_type(cntx, cur_type);

MMI_TRACE(SRV_CLOG_TRC_INFO, TRC_SRV_CLOG_SUBMIT_NEXT_INIT_JOB, cur_type, next_type);
if (next_type == SRV_CLOG_JOB_TYPE_INIT_DONE)
return NULL;

job = srv_clog_job_submit_head(cntx->comp->job_mgr, next_type);
job->pid = srv_clog_new_pid(cntx);
if(next_type==SRV_CLOG_JOB_TYPE_DEL_ALL_LOGS)
{
srv_clog_del_all_logs_req_struct *req;

job->req_data=srv_clog_job_new_para(job,sizeof(srv_clog_del_all_logs_req_struct));
req=(srv_clog_del_all_logs_req_struct *)job->req_data;
srv_clog_init_para(SRV_CLOG_PARA_DEL_ALL_LOGS_REQ,req);
}

return job;
}
static S32 srv_clog_delete_all_logs_hdlr(srv_clog_cntx_struct *cntx, srv_clog_job_struct *job)
{

。。。。。。。。。。。。。
comp = srv_clog_get_cur_comp(cntx, job->handle);

if (job->proc_state == SRV_CLOG_JOB_DEL_ALL_LOGS_STATE_INIT)
{
if (!SRV_CLOG_CHECK_BIT_GRP
(cntx->flags, SRV_CLOG_CNTX_FLAG_PHB_READY_TOTAL, SRV_CLOG_CNTX_FLAG_PHB_READY_TOTAL))
//not ready to check sim status ,so have to wait
{
job->job_state = SRV_CLOG_JOB_STATE_WAITING;
return SRV_CLOG_RET_CONTINUE;
}
else
{
job->job_state = SRV_CLOG_JOB_STATE_HANDLING;
}
if(!srv_clog_is_ready()) //callog service is not ready means it’s in init process ,so we can treat this job as a Delete job in init process
{
srv_clog_del_all_logs_req_struct* req;
req=(srv_clog_del_all_logs_req_struct* )job->req_data;
req->sim_id=0;
if(srv_clog_is_single_sim_replaced(MMI_SIM1))
//如果是不插卡也需要删除,请加上“||!srv_sim_ctrl_is_inserted(MMI_SIM1))”
req->sim_id=MMI_SIM1;

#if (MMI_MAX_SIM_NUM >=2)
if(srv_clog_is_single_sim_replaced(MMI_SIM2)
//如果是不插卡也需要删除,请加上“||!srv_sim_ctrl_is_inserted(MMI_SIM1))”
req->sim_id|=MMI_SIM2;
#endif
/// 如果是3卡或4可也请考虑
if(!req->sim_id)
{
srv_clog_cb_delete_all_logs_result(cntx, job);
job->job_state = SRV_CLOG_JOB_STATE_FINISHED;
return SRV_CLOG_RET_OK;
}

}
job->cursor = 0;
job->init_value = 0;
job->proc_state = SRV_CLOG_JOB_DEL_ALL_LOGS_STATE_DELETING;
}
if (job->proc_state == SRV_CLOG_JOB_DEL_ALL_LOGS_STATE_DELETING)
{
。。。。。。。。。。。。。。。。。
return SRV_CLOG_RET_OK;
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics