subscription open fllow

来源:互联网 发布:linux 查找文件夹大小 编辑:程序博客网 时间:2024/05/21 17:48

1、开始一个新的事务时mmoc_info_ptr->trans_state=MMOC_TRANS_STATE_NULL

surbscription change

的话最先的subsc_chgd.chg_type=MMOC_SUBSC_CHG_SUBSC_AVAIL与其相对应的是MMOC_SUBSC_CHG_NAM_SEL

此时的一些手机参数状态如下:

mmoc_info_ptr->is_sd_initialized=0,所以在此要初始化并将其变为1

ph_stat_ptr->is_cdma_subs_avail=1

ph_stat_ptr->oprt_mode=PROT_OPRT_MODE_NULL

 

mmoc_info_ptr->curr_nam= cmd_ptr->param.subsc_chgd.nam;
  mmoc_info_ptr->prot_subsc_chg = cmd_ptr->param.subsc_chgd.prot_subsc_chg;//change_type
  mmoc_info_ptr->hybr_gw_subs_chg = cmd_ptr->param.subsc_chgd.hybr_gw_subs_chg;

 

然后根据mmoc_info_ptr->prot_subsc_chg 里保存的change_type判定哪个subs_avail

    mmoc_info_ptr->is_cdma_subs_avail=
                 cmd_ptr->param.subsc_chgd.cdma.is_subs_avail;//is_cdma_subs_avail
是在这个地方设置的

然后给mc发PROT_PH_STAT_CHG_SUBSC命令,mmoc进入MMOC_TRANS_STATE_WAIT_PH_STAT_CNF状态

 

这个命令在mc里的处理如下:

mc_init_auth

如果ph_stat_ptr->prot_subsc_chg=PROT_SUBSC_CHG_CDMA的话要设置cdma.is_cdma_subs_avail = ph_stat_ptr->is_cdma_subs_avail=1

绕后mcc_powerup_load        //Reload the subscription information.

 

这个命令处理完返回到mmoc后的处理如下:Initialize sd with the new subscription information.

调用sd_nam_sel3(...)其里面的一些参数设置如下:

mmoc_info_ptr->trans_info.subsc_chgd.nam=0   //nam没有发生变化

mmoc_info_ptr->trans_info.subsc_chgd.orig_mode = SD_SS_ORIG_MODE_NONE

mmoc_info_ptr->trans_info.subsc_chgd.mode_pref = SD_SS_MODE_PREF_DIGITAL

mmoc_info_ptr->trans_info.subsc_chgd.prl_pref = SD_SS_PRL_PREF_ANY

mmoc_info_ptr->trans_info.subsc_chgd.roam_pref = SD_SS_ROAM_PREF_ANY

mmoc_info_ptr->trans_info.subsc_chgd.hybr_pref = SD_SS_HYBR_PREF_CDMA_HDR

mmoc_info_ptr->trans_info.subsc_chgd.domain_pref = SD_SS_SRV_DOMAIN_PREF_CS_ONLY

mmoc_info_ptr->trans_info.subsc_chgd.acq_order_pref = SD_SS_ACQ_ORDER_PREF_AUTO

mmoc_info_ptr->trans_info.subsc_chgd.is_gw_subsc_avail

mmoc_info_ptr->trans_info.subsc_chgd.is_cdma_subsc_avail = 1

mmoc_info_ptr->trans_info.subsc_chgd.is_wlan_subsc_avail = 0

mmoc_info_ptr->trans_info.subsc_chgd.tech_pref = 7

好复杂的处理啊

 

MMOC_TRANS_DUAL_STANDBY_CHGD命令的处理

只有在手机操作模式处在PROT_OPRT_MODE_NULL或PROT_OPRT_MODE_ONLINE下才处理这个命令

 

/* Copy new preference to ds_pref,在此处将有几张卡的信息保存在mmoc里面,
如果是一张卡,则要确定是哪张卡
  */

  mmoc_info_ptr->ds_pref = cmd_ptr->param.dual_standby_chgd.ds_pref;
  mmoc_info_ptr->single_stby_ss = cmd_ptr->param.dual_standby_chgd.single_stby_ss;

 

 /* If Dual Standby, then both subscription should be available. If Single Standby,
  ** then selected subscription should be available. If FALSE, then wait for corresponding
  ** Subscription change event to handle Dual Standby preference change
  */
  if(!((mmoc_info_ptr->ds_pref == SYS_MODEM_DS_PREF_DUAL_STANDBY &&
      (mmoc_info_ptr->is_gw_subs_avail == TRUE ||
       mmoc_info_ptr->is_cdma_subs_avail == TRUE) &&
      mmoc_info_ptr->is_gw_hybr_subs_avail == TRUE) ||
     (mmoc_info_ptr->ds_pref == SYS_MODEM_DS_PREF_SINGLE_STANDBY &&
      ((mmoc_info_ptr->single_stby_ss == SD_SS_MAIN &&
       (mmoc_info_ptr->is_gw_subs_avail == TRUE  ||
       mmoc_info_ptr->is_cdma_subs_avail == TRUE)) ||
      (mmoc_info_ptr->single_stby_ss == SD_SS_HYBR_2 &&
       mmoc_info_ptr->is_gw_hybr_subs_avail == TRUE)))))
  {
    return mmoc_clear_transaction( mmoc_info_ptr );清楚这个事务
  }

mmoc_dual_standby_pref_chgd判断卡的情况是否发生了改变,如果没改变则清楚这个事务的处理

如果改变了,mmoc进入MMOC_TRANS_STATE_PROT_DEACT_ENTER状态此时协议都还没打开,所以直接进入MMOC_TRANS_STATE_DS_STAT_CHGD_ENTER

如果卡的信息变化了hdrmc_standby_pref_chgd_cmd      /* Inform DS stat chgd cmd to HDR */

将有几张卡的信息半寸在db里面,DB_DSDS_STATUS卡的数量对应,1表示有两张卡

mmoc进入MMOC_TRANS_STATE_WAIT_DS_STAT_CHGD_CNF,接到这个认证后变为MMOC_TRANS_STATE_DS_STAT_CHGD_ENTER,此时手机还处在开机状态,清除事务的处理