手机实时提取SIM卡呼叫信令和声音-GSM硬件和Android手机RIL

手机实时提取SIM卡通话的信令和声音

探索 1:GSM 硬件和手机 RIL

起源

事实上,手机呼叫转移的需求确实由来已久。这是 2012 年的一篇文章:

如何通过将移动呼叫代理到 SIP 或 skype 来实现“穷人的漫游”?

怎么把手机卡取出来_手机取卡后手机不能正常使用_取卡出来手机怎么操作

看完之后我只能说,你到底在做啥梦啊?如果能做的话十年前就做了,你随便搜一下就能找到。你现在还等什么?你还在网上求助,你是在龙王庙求雨吗?发个帖子就能得到答案吗?

没想到报应来得这么快,两年后,轮到我落入这个陷阱。所以人不能太骄傲,前人没有走过的路,甚至无人居住的地方,我们还是要心存敬畏。

多年以后,当我们回顾这些历史篇章时,我们也可以将它们视为我们的前辈。正如莱特兄弟发明飞机之前,飞行的梦想曾萦绕了无数前辈多年,人类何时才能像雄鹰一样翱翔蓝天?

但我们毕竟和他们不一样,我们生在红旗下,长在新中国,在项目需求的驱动下,有能力和决心去探索新兴领域,而不是简单地发帖等待答案。(但他似乎没有做错什么,多年后,如果他偶然来到这里,那么他的需求已经得到解答,虽然那只是无数个解决方案中的一个,可能不是最好的解决方案)

在这一章中,我们会从最基础的点出发,从原理层面,论证实现这些能力需要什么支撑?市面上现有的技术和解决方案能不能满足要求?如果想进一步发展,又从哪里入手?

让我们一起开始快乐的探索吧。

硬件-GSM模块原理

作为软件开发人员,甚至应用人员,我们觉得天天讲FM/AM的方法和逻辑不太合适,我们稍微抽象一下,主要做A/D和D/A转换(模拟/数字转换),然后按照方案,在数模转换的前期,把数字信号提取出来,截取到麦克风和接收器的原始路径。

手机GSM的工作原理框图如下:(我抄的,随便看看就好)

这个原则的逻辑和图表来自于《图解传播原理与案例分析-15》,写的很详细,通俗易懂,有兴趣的可以看看。

GSM模块介绍

从历史情况来看,我们知道在过去的2G时代只有少数几种经典的GSM模块,我们根据百度的结果列出了几种常用的GSM模块,详见文档《常见GSM模块介绍》。

取卡出来手机怎么操作_手机取卡后手机不能正常使用_怎么把手机卡取出来

注意:这里有一个有趣的现象,我们说项目需要“提取数字信号,截取到麦克风和听筒的原始路径”,现在,妈的,它根本没有数字接口,看到了吗?全部都是模拟信号,引脚引出的控制口是异步口,用于发送和接收AT命令控制信号。

如何获取数据?并且截取原始的麦克风/耳机信号?我见过好几个芯片都是这样,搞得我慌了。

简易手机

GSM模块这样设计是有原因的,因为没有需求,普通的GSM模块或者4G模块的封装都是以易用性为原则,也就是说,不管是老人机,电话手表,还是高级智能手机,使用该模块后,只需要很少量的外围元器件,就可以实现稳定、可以通话的设备。

但是如果封装中引出一个数字同步信号的引脚,就意味着底板需要增加A/D和D/A模块,这只会增加功耗和成本。

简化版的通话器可以参考下面师兄的手工作品《利用GSM模块打电话发信息》,内容写的很详细,打电话需要的功能都有。

取卡出来手机怎么操作_手机取卡后手机不能正常使用_怎么把手机卡取出来

Linux-ALSA架构简析

ALSA(Linux Sound)是Linux上主流的音频架构,在ALSA架构出现之前,一直采用的是OSS(Open Sound)音频架构。主要区别在于OSS架构中App直接通过Sound设备节点访问底层,而ALSA音频架构中App通过ALSA提供的alsa-lib库访问底层硬件,不再访问Sound设备节点,这样做的好处是简化了App实现的难度。

更多内容可以参考《ALSA系统简析》这篇文章,挺不错的。(我是搬运工)

取卡出来手机怎么操作_手机取卡后手机不能正常使用_怎么把手机卡取出来

音频策略

不用多说,下面是图片:

取卡出来手机怎么操作_手机取卡后手机不能正常使用_怎么把手机卡取出来

在这些输入输出设备中,比较常用的有HDMI、音箱、3.5mm圆孔耳机、USB耳机、蓝牙耳机等。

注意:这里的输入、输出通道对我们后续的选择有直接的影响。

是的,我是搬运工,文章来源是《音频策略(音频优先级、音频输入、声音优先级)》,有兴趣的请自行阅读。

RIL及调用流程

我原本计划在这一章里写很多内容,一个原因是我们在前期调研的时候在这里投入了很大的精力,另一个原因是这个架构是电话策略的核心内容。

但后来在CSDN上看到了《调用过程学习(一)》的分享,觉得再怎么写也不会像上面这么详细简洁,就不写了。想看的自己去看吧。反正我在RK平台调试的时候基本都是按照这个脉络来上下调整的。

怎么把手机卡取出来_手机取卡后手机不能正常使用_取卡出来手机怎么操作

界面应用与其他系统应用以及RIL的交互顺序可以如下图看到:

怎么把手机卡取出来_手机取卡后手机不能正常使用_取卡出来手机怎么操作

从移植角度看声音

我们试用的时候有两台设备,一台 /3399 设备和一台 root 过的红米手机。测试和调试的过程相当漫长,很难用几句话来描述。不同的平台依赖不同的内核和 modem.img。

具体调试逻辑可以参考 RK 的架构以及资深网友分享的文章《Audio Debug 》。基本上移植芯片到新底板时需要修改和调试的内容和文章中的描述类似。不同之处在于文章中只涉及到声卡芯片、声卡驱动和架构的调整,并没有涉及到 modem 的选择和调整。

取卡出来手机怎么操作_怎么把手机卡取出来_手机取卡后手机不能正常使用

语音架构和逻辑大致如下:(看一下就明白了)

取卡出来手机怎么操作_手机取卡后手机不能正常使用_怎么把手机卡取出来

总结

我写了很多文字,但都是搬运工,我很懒,但也没办法,我们探索了三四个多月,一直在寻找出路,但无果。

主要有两个原因:

从硬件原理上看,声音切换过程肯定要在底板实现。调制解调器输出的直接就是模拟信号,数字信号怎么提取?怎么截取?当然我们可以选择带数字同步引脚的模块,但是基本没意义。所以封装后的分流要么走蓝牙HF通道,要么加个A/D或者D/A转换模块把模拟信号引出来,要么找个数字引脚把数字信号引出来。RIL/这个逻辑确实锁的很严,不愧是“系统级”应用,别说提权、root应用了,我这么说吧:改了之后手机稳定性成问题,内核日志喷涌而出,正常人是绝对不想碰这个代码和逻辑的。

总结一下,为了实现最初的需求和能力,还需要进一步的探索,后面再看后续章节。在探索过程中,人的主观能动性非常重要,不忘初心,继续前行。

版权说明:平台部分文章信息及图片来源于网络。本页面仅负责文章的调整、排版和编辑。如果权利人发现自己的作品被歪曲,请及时与我们联系。经核实确认后,将尽快处理。

相关推荐

流量卡大全
联系客服
联系客服
返回顶部