Android 学习之QCRIL QMI

本文详细阐述了手机信号强度从Modem到应用层的传递流程,包括关键步骤如Modem获取信号值、信号值通过QMI传递给RIL、RIL处理并上报信号强度等,并展示了相关代码片段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

信号值由下往上的流程  
1.modem获取信号值 
Qmi_nas.c (amss\mpss.ta.2.2\modem_proc\mmcp\mmode\qmi\src) qmi_nasi_get_signal_strength  
2.通过qmi给ril 
Qcril_qmi_nas.c (android\vendor\qcom\proprietary\qcril\qcril_qmi) qcril_qmi_nas_signal_strength_con_conv_cache2ril  
3.这里会打一个log,搜索这里的log,便可以得知modem给ril的各个信号值 
qcril_qmi_nas_dump_sign_strength_report 
void qcril_qmi_nas_dump_sign_strength_report(RIL_SignalStrength* ril_signal_strength) { 
    QCRIL_LOG_FUNC_ENTRY();  
    QCRIL_LOG_INFO( "..GW");     QCRIL_LOG_INFO( ".. signalStrength %d, bitErrorRate %d", ril_signal_strength->GW_SignalStrength.signalStrength, 
                                                             ril_signal_strength->GW_SignalStrength.bitErrorRate );  
    QCRIL_LOG_INFO( "..TDSCDMA"); #ifndef QMI_RIL_UTF     QCRIL_LOG_INFO( ".. signalStrength %d", ril_signal_strength->TD_SCDMA_SignalStrength.rscp ); #endif  
    QCRIL_LOG_INFO( "..CDMA");     QCRIL_LOG_INFO( ".. dbm %d, ecio %d ", ril_signal_strength->CDMA_SignalStrength.dbm, 
                                                             ril_signal_strength->CDMA_SignalStrength.ecio );  
    QCRIL_LOG_INFO( "..EVDO");     QCRIL_LOG_INFO( ".. dbm %d, ecio %d, signalNoiseRatio %d", ril_signal_strength->EVDO_SignalStrength.dbm, 
                                                             ril_signal_strength->EVDO_SignalStrength.ecio, 
                                                             ril_signal_strength->EVDO_SignalStrength.signalNoiseRatio );  
    QCRIL_LOG_INFO( "..LTE"); 

    QCRIL_LOG_INFO( ".. signalStrength %d, rsrp %d, rsrq %d, rsnnr %d", 

ril_signal_strength->LTE_SignalStrength.signalStrength, 
                                                              ril_signal_strength->LTE_SignalStrength.rsrp, 
                                                              ril_signal_strength->LTE_SignalStrength.rsrq, 
                                                              ril_signal_strength->LTE_SignalStrength.rssnr );  
    QCRIL_LOG_FUNC_RETURN(); }  
4.往上再给Qcril_qmi_nas的qcril_qmi_nas_request_signal_strength Qcril_qmi_nas.c (android\vendor\qcom\proprietary\qcril\qcril_qmi) qcril_qmi_nas_request_signal_strength  
5.往上,接受ril的RIL_REQUEST_SIGNAL_STRENGTH 请求 
Qcril.c (android\vendor\qcom\proprietary\qcril\qcril_qmi) qcril_event_table 
/* 19 - RIL_REQUEST_SIGNAL_STRENGTH */ { QCRIL_REG_ALL_ACTIVE_STATES( RIL_REQUEST_SIGNAL_STRENGTH, qcril_qmi_nas_request_signal_strength ) },  
6.往上,给RIL的getSignalStrength 
RIL.java (android\frameworks\opt\telephony\src\java\com\android\internal\telephony) getSignalStrength  
7.往上给GSST的queueNextSignalStrengthPoll 
GsmServiceStateTracker.java 
(android\frameworks\opt\telephony\src\java\com\android\internal\telephony\gsm) handleMessage 
EVENT_SIM_READY 
EVENT_GET_SIGNAL_STRENGTH queueNextSignalStrengthPoll  
8.往上给SST的onSignalStrengthResult和notifySignalStrength ServiceStateTracker.java 
(frameworks\opt\telephony\src\java\com\android\internal\telephony) onSignalStrengthResult notifySignalStrength  
9.往上给PhoneBase的notifySignalStrength 
PhoneBase.java (frameworks\opt\telephony\src\java\com\android\internal\telephony) notifySignalStrength

10.往上给DefaultPhoneNotifier的notifySignalStrength 
DefaultPhoneNotifier.java 
(frameworks\opt\telephony\src\java\com\android\internal\telephony) notifySignalStrength 
Rlog.d(LOG_TAG, "notifySignalStrength: mRegistry=" + mRegistry 
        + " ss=" + sender.getSignalStrength() + " sender=" + sender);  
11.往上给TelephonyRegistry的notifySignalStrengthForSubscriber 
TelephonyRegistry.java (frameworks\base\services\core\java\com\android\server) notifySignalStrengthForSubscriber  
如此,SignalStrength的各个成员变量便有了对应的信号值,做为显示几格的标准 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值