本文共 7434 字,大约阅读时间需要 24 分钟。
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; }转载地址:http://nvgdi.baihongyu.com/