OpenHarmony SIM卡信号值整体流程分析
目录
1.Telephony架构
2.具体分析
1.Telephony架构
本篇是来介绍OpenHarmony SIM卡信号值的整体分析流程,整体流程如下:
这里的分层流程参考:OpenAtom OpenHarmony
2.具体分析
可以看出来信号值先是从modem传递到vendorlib层,由于我们无法查看到modem的内容,我们直接来看硬件抽象层,分析下日志:
这里可以看出来是有vendorlib中at_support的日志打印,这里的日志可以看出来当前的信号值是-97,这块是的实现一般是厂商实现的,所以一般是闭源的,我这边的路径是在
./xxx/device/platform/soc/common/telephony/lib64/xxx.z.so
里面,大家可以根据关键字搜索,一般应该都是在这下面
当然也有从vendor_report.c上传信号的,如上同理
然后回调用到at_network.c中的ProcessCurrentCellList函数,然后设置一个HNOTI_NETWORK_CURRENT_CELL_UPDATED通知
其实从架构图上面可以看出来at_network.c应该是在vendorlib中,所以应该是闭源的,闭源代码位置和上述所说的位置一致
然后继续看HNOTI_NETWORK_CURRENT_CELL_UPDATED通知,其实在hril_network.cpp中已经将HNOTI_NETWORK_CURRENT_CELL_UPDATED通知与NetworkCurrentCellUpdated_1_2函数绑定,如下:
可以看出来调用到NetworkCurrentCellUpdated_1_2函数中,此时我们其实已经来到了hril层,其实是中间层,这层代码就是开源的了
NetworkCurrentCellUpdated_1_2函数会调用到til_ril_network.cpp的NetworkCurrentCellUpdated_1_2函数中,此函数会发送一个RADIO_CURRENT_CELL_UPDATE通知cell部分进行更新
最终会调用到network_search_handle.cpp中的RadioCurrentCellInfoUpdate函数,此函数会调用cell的ProcessCurrentCellInfo函数进行数据更新
然后到cell_info.cpp中的ProcessCurrentCellInfo函数,此函数如下:
会调用到 ProcessCurrentCell函数,此函数其实是根据当前不同的网络制式进行不同的函数调用,如下就是我们当前的sim卡是5g的并且我们也在设置中设置的是5g的网络制式的调用流程
会调用到ProcessCurrentCellNr函数
此函数就是将当前底层反馈上来的信号值赋值并且将信号值转成具体的信号等级,也就是我们状态栏看见的信号格,我们具体来看看 GetCurrentSignalLevelNr函数实现
其实是以倒序的方式进行判断,先从信号最强的阈值开始判断,上述我们知道rsrp的值为-97,其实此处的sigalBar_的值是5,然后NR_SIGNAL_THRESHOLD的值如下:
所以根据逻辑判断当前信号的值是满足最大值的要求的,所以信号格是5,中间步骤省略,其实最终这个信号值就是systemUI中通过getSignalInformation获取的信号值