作者: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数据流量统计流程与分析方法
养成好习惯,看完点赞,每天进步一点点