学习笔记:【QC】Android Q - phone 模块

2024-05-06 10:52

本文主要是介绍学习笔记:【QC】Android Q - phone 模块,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、phone init 流程图

二、phone MO 流程图

三、phone MT 流程图

四、Log分析(MO_qcril_hal_分析)


1、RILJ请求dial

enqueue进队列,QCRIL-hal pop出来处理,最后还是调用qmi_client_send_msg_async发送给modem
11-07 17:29:23.598  2758  2758 D RILJ    : [3917]> DIAL [SUB1]
11-07 17:29:23.600  1069  1069 D RILQ    : RIL[1][QcrilMainMessageQueue.cpp: 27] [main(1069,1069)] enqueue: [DispatcherModule-MessageQueue]: enqueuing priority(NORMAL) message 0x7cfe197058 Id: RIL_REQUEST_DIAL
11-07 17:29:23.601  1069  1103 D RILQ    : RIL[1][QcrilMainMessageQueue.cpp: 83] [DispatcherModul(1069,1103)] pop: [DispatcherModule-MessageQueue]: msg: 0x7cfe197058

2、RILJ请求SET_SUPP_SVC_NOTIFICATION

enqueue进队列,QCRIL-hal pop出来处理,发送给modem
11-07 17:29:23.603  2758  2758 D RILJ    : [3918]> SET_SUPP_SVC_NOTIFICATION enable = true [SUB1]
11-07 17:29:23.606  1069  1069 D RILQ    : RIL[1][QcrilMainMessageQueue.cpp: 27] [main(1069,1069)] enqueue: [DispatcherModule-MessageQueue]: enqueuing priority(NORMAL) message 0x7cfe059938 Id: com.qualcomm.qti.qcril.android.RIL_REQUEST_SET_SUPP_SVC_NOTIFICATION
11-07 17:29:23.607  1069  1103 D RILQ    : RIL[1][QcrilMainMessageQueue.cpp: 83] [DispatcherModul(1069,1103)] pop: [DispatcherModule-MessageQueue]: msg: 0x7cfe059938

3、RIL_REQUEST_SET_SUPP_SVC_NOTIFICATION响应

收到modem对RIL_REQUEST_SET_SUPP_SVC_NOTIFICATION返回请求结果async_resp,处理完调用qcril_send_request_response->qmi_ril_fw_send_request_response_epilog返回RILJ
11-07 17:29:23.611  1069  1344 D RILQ    : RIL[1][Log.cpp: 49] [VoiceModemEndPo(1069,1344)] d: [ModemEndPointModule]: qmiAsyncCb
11-07 17:29:23.611  1069  1344 D RILQ    : RIL[1][QcrilMainMessageQueue.cpp: 27] [VoiceModemEndPo(1069,1344)] enqueue: [DispatcherModule-MessageQueue]: enqueuing priority(NORMAL) message 0x7cfb8285d8 Id: com.qualcomm.qti.qcril.qmi_async_resp
11-07 17:29:23.611  1069  1103 D RILQ    : RIL[1][QcrilMainMessageQueue.cpp: 83] [DispatcherModul(1069,1103)] pop: [DispatcherModule-MessageQueue]: msg: 0x7cfb8285d8
11-07 17:29:23.613  1069  1103 W RILQ    : (1/1069): RIL[1][(1069,1103)] qcril_send_request_response: UI <--- com.qualcomm.qti.qcril.legacy.event.RIL_REQUEST_SET_SUPP_SVC_NOTIFICATION (0x7cfddf72b0) Complete --- RIL [RID 0, Token id 3918, Success, Len 0 ]
11-07 17:29:23.618  2758  2834 D RILJ    : [3918]< SET_SUPP_SVC_NOTIFICATION  [SUB1]

4、UNSOL_RESPONSE_CALL_STATE_CHANGED

收到modem主动上报的UNSOL_RESPONSE_CALL_STATE_CHANGED,call state CC IN PROGRESS,处理完调用qcril_send_unsol_response_epilog返回RILJ
11-07 17:29:23.611  1069  1344 D RILQ    : RIL[1][Log.cpp: 49] [VoiceModemEndPo(1069,1344)] d: [ModemEndPointModule]: qmiUnsolIndCb
11-07 17:29:23.612  1069  1344 D RILQ    : RIL[1][QcrilMainMessageQueue.cpp: 27] [VoiceModemEndPo(1069,1344)] enqueue: [DispatcherModule-MessageQueue]: enqueuing priority(NORMAL) message 0x7cfe196d58 Id: VOICE_QMI_IND
11-07 17:29:23.619  1069  1103 D RILQ    : RIL[1][QcrilMainMessageQueue.cpp: 83] [DispatcherModul(1069,1103)] pop: [DispatcherModule-MessageQueue]: msg: 0x7cfe196d58
11-07 17:29:23.619  1069  1103 V qcril_qmi_voice: RIL[1][qcril_qmi_voice.cc: 4978] [DispatcherModul(1069,1103)] qcril_qmi_voice_all_call_status_ind_hdlr: > qcril_qmi_voice_all_call_status_ind_hdlr: 
11-07 17:29:23.619  1069  1103 F qcril_qmi_voice: RIL[1][qcril_qmi_voice.cc: 5136] [DispatcherModul(1069,1103)] qcril_qmi_voice_all_call_status_ind_hdlr: call state CC IN PROGRESS for conn id 1
11-07 17:29:23.621  1069  1103 W RILQ    : (1/1069): RIL[1][(1069,1103)] qcril_send_unsol_response_epilog: UI <--- RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED (0x3e9) --- RIL [RID 0, Len 0, (null)]
11-07 17:29:23.623  2758  2834 D RILJ    : [UNSL]< UNSOL_RESPONSE_CALL_STATE_CHANGED [SUB1]

5、RIL_REQUEST_DIAL响应

收到modem对RIL_REQUEST_DIAL返回请求结果async_resp,这边没有返回RILJ
11-07 17:29:23.620  1069  1344 D RILQ    : RIL[1][Log.cpp: 49] [VoiceModemEndPo(1069,1344)] d: [ModemEndPointModule]: qmiAsyncCb
11-07 17:29:23.621  1069  1344 D RILQ    : RIL[1][QcrilMainMessageQueue.cpp: 27] [VoiceModemEndPo(1069,1344)] enqueue: [DispatcherModule-MessageQueue]: enqueuing priority(NORMAL) message 0x7cfb828b18 Id: com.qualcomm.qti.qcril.qmi_async_resp
11-07 17:29:24.352  1069  1103 D RILQ    : RIL[1][QcrilMainMessageQueue.cpp: 83] [DispatcherModul(1069,1103)] pop: [DispatcherModule-MessageQueue]: msg: 0x7cfb828b18
11-07 17:29:23.619  1069  1103 V qcril_qmi_voice: RIL[1][qcril_qmi_voice.cc: 9758] [DispatcherModul(1069,1103)] qcril_qmi_voice_unsol_ind_cb_helper: > qcril_qmi_voice_unsol_ind_cb_helper:
11-07 17:29:24.353  1069  1103 V qcril_qmi_voice: RIL[1][qcril_qmi_voice.cc: 8460] [DispatcherModul(1069,1103)] qcril_qmi_voice_command_cb: > qcril_qmi_voice_command_cb: 
11-07 17:29:24.354  1069  1103 I qcril_qmi_voice: RIL[1][qcril_qmi_voice.cc: 7362] [DispatcherModul(1069,1103)] qcril_qmi_voice_dial_call_resp_hdlr: DIAL CALL RESP : ril_err=0, dial_call_resp_result=0, dial_call_resp_error=0, cc_sups_result_valid=0, cc_result_type_valid=0, cc_result_type=0 
11-07 17:29:24.354  1069  1103 V qcril_qmi_voice: RIL[1][qcril_qmi_voice.cc: 7640] [DispatcherModul(1069,1103)] qcril_qmi_voice_dial_call_resp_hdlr: < qcril_qmi_voice_dial_call_resp_hdlr: 
11-07 17:29:24.354  1069  1103 V qcril_qmi_voice: RIL[1][qcril_qmi_voice.cc: 8621] [DispatcherModul(1069,1103)] qcril_qmi_voice_command_cb: < qcril_qmi_voice_command_cb: 

6、UNSOL_RESPONSE_CALL_STATE_CHANGED

收到modem主动上报的UNSOL_RESPONSE_CALL_STATE_CHANGED,call state CC IN PROGRESS,call state ORIGINATING
11-07 17:29:23.622  1069  1344 D RILQ    : RIL[1][Log.cpp: 49] [VoiceModemEndPo(1069,1344)] d: [ModemEndPointModule]: qmiUnsolIndCb
11-07 17:29:23.622  1069  1344 D RILQ    : RIL[1][QcrilMainMessageQueue.cpp: 27] [VoiceModemEndPo(1069,1344)] enqueue: [DispatcherModule-MessageQueue]: enqueuing priority(NORMAL) message 0x7cfe036dd8 Id: VOICE_QMI_IND
11-07 17:29:24.355  1069  1103 D RILQ    : RIL[1][QcrilMainMessageQueue.cpp: 83] [DispatcherModul(1069,1103)] pop: [DispatcherModule-MessageQueue]: msg: 0x7cfe036dd8
11-07 17:29:24.356  1069  1103 V qcril_qmi_voice: RIL[1][qcril_qmi_voice.cc: 9758] [DispatcherModul(1069,1103)] qcril_qmi_voice_unsol_ind_cb_helper: > qcril_qmi_voice_unsol_ind_cb_helper: 
11-07 17:29:24.356  1069  1103 V qcril_qmi_voice: RIL[1][qcril_qmi_voice.cc: 4978] [DispatcherModul(1069,1103)] qcril_qmi_voice_all_call_status_ind_hdlr: > qcril_qmi_voice_all_call_status_ind_hdlr: 
11-07 17:29:24.356  1069  1103 F qcril_qmi_voice: RIL[1][qcril_qmi_voice.cc: 5110] [DispatcherModul(1069,1103)] qcril_qmi_voice_all_call_status_ind_hdlr: call state ORIGINATING for conn id 1

6.1、DIAL的回调

DIAL的回调是从UNSOL_RESPONSE_CALL_STATE_CHANGED的返回走到qcril_send_empty_payload_request_response,然后qcril_send_request_response返回RILJ
11-07 17:29:24.358  1069  1103 E qcril_qmi_voice: RIL[1][qcril_qmi_voice.cc: 24767] [DispatcherModul(1069,1103)] qmi_ril_voice_ims_command_oversight_handle_event: ccx ril qcril_reqlist_query to deal with RIL_REQUEST_DIAL...
11-07 17:29:24.358  1069  1103 E qcril_qmi_voice: RIL[1][qcril_qmi_voice.cc: 24771] [DispatcherModul(1069,1103)] qmi_ril_voice_ims_command_oversight_handle_event: ccx ril qcril_send_empty_payload_request_response
11-07 17:29:24.358  1069  1103 E RILQ    : (1/1069): RIL[1][(1069,1103)] qcril_send_empty_payload_request_response: ccx ril qcril.c qcril_send_empty_payload_request_response
11-07 17:29:24.358  1069  1103 E RILQ    : (1/1069): RIL[1][(1069,1103)] qcril_send_empty_payload_request_response: ccx ril qcril_send_request_response
11-07 17:29:24.358  1069  1103 W RILQ    : (1/1069): RIL[1][(1069,1103)] qcril_send_request_response: UI <--- com.qualcomm.qti.qcril.legacy.event.RIL_REQUEST_DIAL (0x7cfddf6658) Complete --- RIL [RID 0, Token id 3917, Success, Len 0 ]
11-07 17:29:24.360  2758  2834 D RILJ    : [3917]< DIAL  [SUB1]

6.2、qcril_qmi_voice_all_call_status_ind_hdlr

qcril_qmi_voice_all_call_status_ind_hdlr继续处理,通过qcril_send_unsol_response_epilog返回RILJ
11-07 17:29:24.360  1069  1103 W RILQ    : (1/1069): RIL[1][(1069,1103)] qcril_send_unsol_response_epilog: UI <--- RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED (0x3e9) --- RIL [RID 0, Len 0, (null)]
11-07 17:29:24.362  2758  2834 D RILJ    : [UNSL]< UNSOL_RESPONSE_CALL_STATE_CHANGED [SUB1]


注意:


1.1069  1344 这个是ModemEndPointModule 接收modem返回线程,主动上报:qmiUnsolIndCb;请求返回:qmiAsyncCb ,接收完都enqueue进队列
2.1069  1103,这个是消息处理线程,从队列里面pop出消息进行处理
3.处理完上报给RILJ,data的上报,不是qcril_qmi_voice_dial_call_resp_hdlr,而是从qcril_qmi_voice_all_call_status_ind_hdlr(UNSOL_RESPONSE_CALL_STATE_CHANGED的处理)回调上去的

 

这篇关于学习笔记:【QC】Android Q - phone 模块的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/964161

相关文章

Python中re模块结合正则表达式的实际应用案例

《Python中re模块结合正则表达式的实际应用案例》Python中的re模块是用于处理正则表达式的强大工具,正则表达式是一种用来匹配字符串的模式,它可以在文本中搜索和匹配特定的字符串模式,这篇文章主... 目录前言re模块常用函数一、查看文本中是否包含 A 或 B 字符串二、替换多个关键词为统一格式三、提

Android DataBinding 与 MVVM使用详解

《AndroidDataBinding与MVVM使用详解》本文介绍AndroidDataBinding库,其通过绑定UI组件与数据源实现自动更新,支持双向绑定和逻辑运算,减少模板代码,结合MV... 目录一、DataBinding 核心概念二、配置与基础使用1. 启用 DataBinding 2. 基础布局

Android ViewBinding使用流程

《AndroidViewBinding使用流程》AndroidViewBinding是Jetpack组件,替代findViewById,提供类型安全、空安全和编译时检查,代码简洁且性能优化,相比Da... 目录一、核心概念二、ViewBinding优点三、使用流程1. 启用 ViewBinding (模块级

一文深入详解Python的secrets模块

《一文深入详解Python的secrets模块》在构建涉及用户身份认证、权限管理、加密通信等系统时,开发者最不能忽视的一个问题就是“安全性”,Python在3.6版本中引入了专门面向安全用途的secr... 目录引言一、背景与动机:为什么需要 secrets 模块?二、secrets 模块的核心功能1. 基

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

Python logging模块使用示例详解

《Pythonlogging模块使用示例详解》Python的logging模块是一个灵活且强大的日志记录工具,广泛应用于应用程序的调试、运行监控和问题排查,下面给大家介绍Pythonlogging模... 目录一、为什么使用 logging 模块?二、核心组件三、日志级别四、基本使用步骤五、快速配置(bas

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示

Android NDK版本迭代与FFmpeg交叉编译完全指南

《AndroidNDK版本迭代与FFmpeg交叉编译完全指南》在Android开发中,使用NDK进行原生代码开发是一项常见需求,特别是当我们需要集成FFmpeg这样的多媒体处理库时,本文将深入分析A... 目录一、android NDK版本迭代分界线二、FFmpeg交叉编译关键注意事项三、完整编译脚本示例四

Android与iOS设备MAC地址生成原理及Java实现详解

《Android与iOS设备MAC地址生成原理及Java实现详解》在无线网络通信中,MAC(MediaAccessControl)地址是设备的唯一网络标识符,本文主要介绍了Android与iOS设备M... 目录引言1. MAC地址基础1.1 MAC地址的组成1.2 MAC地址的分类2. android与I