RIL_REQUEST_SET_UICC_SUBSCRIPTION 在Qcom平台的流程

#define RIL_REQUEST_SET_UICC_SUBSCRIPTION 122
从一张sim卡中选择某个application作为subscription,更通俗的讲就是对卡里的application进行provisioning/dis-provisioning
从telephony传到QCRIL的结构

typedef struct {
  int   slot;        //哪个卡槽                /* 0, 1, ... etc. */
  int   app_index; //app index                  /* array subscriptor from applications[RIL_CARD_MAX_APPS] in
                                        RIL_REQUEST_GET_SIM_STATUS */
  RIL_SubscriptionType  sub_type;   //这个与Modem stack对应,也就是Modem的sub /* Indicates subscription 1 or subscription 2 */
  RIL_UiccSubActStatus  act_status;  //是激活还是去激活
} RIL_SelectUiccSub;

来看下Qcril里对应的处理函数
qcril_qmi_nas_set_uicc_subscription()

        select_uicc_sub_ptr = (RIL_SelectUiccSub *) params_ptr->data; //获得telephony传下来的参数
        // Update sub id as stack id to handle cross mapping scenario.
        // UIM requires stack-id to activate the subscription as pri or sec.
        // In case of straight mapping stack id = sub id.
        select_uicc_sub_ptr->sub_type = qcril_qmi_nas_get_modem_stack_id(); //获得当前RILD进程与Modem进行map的stack id, 后续会转换成session type

        //获得当前Mode Pref的值
        qmi_client_send_msg_sync_with_shm( qcril_qmi_client_get_user_handle ( QCRIL_QMI_CLIENT_NAS ), 
                                                           QMI_NAS_GET_MODE_PREF_REQ_MSG_V01,

        //如果对应的Modem stack0, 其实用的就是primary sub, 那么就将idx0转换成mode_pref, 如果对应的是Modem stack1,那对应的就是secondary sub, 用idx0
//注意这里的mode_pref只表示1X还是GW类型的。
         if ( RIL_SUBSCRIPTION_1 == select_uicc_sub_ptr->sub_type )  
         {
                mode_pref = qcril_qmi_nas_conv_nas_mode_pref_to_qcril(qmi_mode_pref_resp.idx0_mode_pref_valid, qmi_mode_pref_resp.idx0_mode_pref, select_uicc_sub_ptr  );
          }

//将Telephony传过来的参数保存起来,用作后用
memset( &subs_info, 0, sizeof(subs_info) );
memcpy( &subs_info.uicc_subs_info, select_uicc_sub_ptr, sizeof( RIL_SelectUiccSub ) );
subs_info.subs_mode_pref = mode_pref;  //保存mode_pref的值,即当前的stack是1x类型的还是GW类型的

//以ACTIVATE为例
 if ( select_uicc_sub_ptr->act_status == RIL_UICC_SUBSCRIPTION_ACTIVATE )
{
       QCRIL_LOG_DEBUG( "Request QCRIL(UIM) to activate slot %d aid %d", select_uicc_sub_ptr->slot, select_uicc_sub_ptr->app_index );
       err_no = qcril_process_event( instance_id, modem_id, QCRIL_EVT_INTERNAL_MMGSDI_ACTIVATE_SUBS,
                                                (void *) &subs_info, sizeof( qcril_uicc_subs_info_type ),
                                                (RIL_Token) QCRIL_TOKEN_ID_INTERNAL );
       QCRIL_LOG_INFO( ".. QCRIL_EVT_INTERNAL_MMGSDI_ACTIVATE_SUBS res %d", (int) err_no );
}

接着来看下QCRIL_EVT_INTERNAL_MMGSDI_ACTIVATE_SUBS的后续处理

08:47:20.376 qcril_uim_card.c 03706 RIL[0][cmd-122(544)] qcril_uim_process_change_subscription: qcril_uim_process_change_subscription: RID: 0x0, MID:0x0, slot: 0x0, app_index: 0x0, sub_type: 0x1, act_status: 0x1

QCRIL_EVT_INTERNAL_MMGSDI_ACTIVATE_SUBS->qcril_uim_process_internal_command()->qcril_uim_process_change_subscription()

1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值