Android:全面&详细解析android 10 RSSI信号显示与刷新其三,QCRIL篇

作者:GentlemanTsao
https://blog.csdn.net/GentelmanTsao

每篇一格言
梦想不能等,趁年轻时就要努力实现自己的梦想,不然老了恐怕也是心有余而力不足。
——任志强

回顾

接RIL篇,没有看过的tx建议从头看起:
全面&详细解析RSSI 其一,framework篇

首先回顾下RSSI 上报的整体层次关系,认识QCRIL所处的位置:
在这里插入图片描述
我们从RadioImpl的getSignalStrength方法继续分析。下面回顾下该方法的实现:

Return<void> RadioImpl::getSignalStrength(int32_t serial) {
 std::shared_ptr<RadioContext> ctx = getContext(serial);
 //Step1:得到message实例
 auto msg = std::make_shared<RilRequestGetSignalStrengthMessage>(ctx);
 。。。
 //Step2:定义了callback方法
 GenericCallback<QcRilRequestMessageCallbackPayload> cb(
            [this, serial](std::shared_ptr<Message> msg, Message::Callback::Status status,
                          std::shared_ptr<QcRilRequestMessageCallbackPayload> resp) -> void {
                          if (resp != nullptr) {
                           RadioResponseInfo respInfo = {};
                  SignalStrength signalStrength = {};
                  populateResponseInfo(respInfo, serial, RESPONSE_SOLICITED, resp->errorCode);
                  auto rilSigResult = std::static_pointer_cast<qcril::interfaces::RilGetSignalStrengthResult_t>(resp->data);
                  。。。
                  convertRilSignalStrengthToHal(rilSigResult->respData, signalStrength);
                  RADIO_HIDL_SEND_RESPONSE(mSlotId, mRadioResponse,
                        getSignalStrengthResponse, respInfo, signalStrength);
                          }
        });
 //Step3:把step2的方法设为message的callback,然后分发message给NAS
 msg->setCallback(&cb);
 msg->dispatch();
 。。。
}

Analysis 1:RilRequestGetSignalStrengthMessage

step1得到的是RilRequestGetSignalStrengthMessage的实例,为了搞懂它是什么,我整理了如下的类关系图,请仔细查看(点击可放大)
在这里插入图片描述

从上图的继承关系可知,RilRequestGetSignalStrengthMessage有dispatch和setCallback方法,以及继承了Message的两个属性:mName,mCallback。它在自己的构造方法中,将mName赋值为“RIL_REQUEST_SIGNAL_STRENGTH”,也就是它的名字叫
“RIL_REQUEST_SIGNAL_STRENGTH”。

static constexpr const char *MESSAGE_NAME = "RIL_REQUEST_SIGNAL_STRENGTH";
inline RilRequestGetSignalStrengthMessage(std::shared_ptr<MessageContext> context)
        : QcRilRequestMessage(get_class_message_id(), context) {
      mName = MESSAGE_NAME;
    }

不要走开,马上回来。

相关章节:
全面&详细的解析Android数据流量统计流程与分析方法

养成好习惯,看完点赞,每天进步一点点

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GentlemanTsao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值