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

来源:互联网 发布:王洛宾与三毛 知乎 编辑:程序博客网 时间:2024/05/16 13:40
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; 

 
 
原创粉丝点击