百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

手机实时提取SIM卡打电话的信令和声音-GSM硬件与Android电话RIL

toyiye 2024-04-03 23:10 51 浏览 0 评论

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

探索一:GSM硬件与Android电话RIL

缘起

其实,对手机呼叫转发的需求,确实是由来已久。此处转发个2012年的帖子:

如何通过将手机呼叫代理到SIP或skype来进行“穷人漫游”?

https://qastack.cn/android/26754/how-to-make-poor-mans-roaming-by-proxying-cell-calls-to-sip-or-skype

看了,我只能说:想屁吃呢,它要能搞,十年前它就搞出来了,直接搜就出来了,等现在?还网上求助,你当上龙王庙求雨呢,发个帖就能把答案等到了?

不曾想,现世报、来得快,时隔两年,轮到我来踩这个坑了,所以说人不能太嚣张,对待前人没有走通的路,甚至是无人区,还是要心存敬畏之心。

多年后,我们翻看这些历史的篇章,这些也算是前辈了,好比莱特兄弟发明飞机前,无数先辈萦绕多年的飞天梦一样,人类何时才能像鸟儿雄鹰一样翱翔蓝天?

但是毕竟我们还是跟它们不同,我们生在红旗下、长在新中国,在项目需求的驱动下,我们有能力、也有决心去开拓新兴领域,而不是单纯去发帖等待答案。(不过他做得好像也没错,时隔多年,他如果不小心翻到这里,那他的需求,也算有答案了,虽然只是无数个解之一,不一定算得上最优解)

在本篇章中,我们将从最基础的地方入手,从原理层面,论证如果要实现这些能力,需要哪些支持?现有的市面上的技术和方案,是否已能满足要求?如果要往下开展,我们可以从哪些方向入手?

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

硬件-GSM模块

原理

我们作为软件研发,甚至是应用层面的人员,一天天的扯调频/调幅方式和逻辑,感觉也不太合适。此处抽象一点,主要做的A/D、D/A转换(模拟/数字转换),然后按照规划,在数模转换的前期,将数字信号提取出来、并且拦截原先通往话筒和听筒的通路。

手机GSM的工作原理框图大致如下:(我也是抄的,看看就行)

该原理的逻辑和图示,出处为《图解通信原理与案例分析-15》,写得挺详细通俗易懂的,有兴趣的可以查阅。

https://blog.51cto.com/u_11299290/3196103

GSM模块介绍

从历史的条件已知,过往的2G时代做得比较经典的GSM模块不外乎就几款,我们根据百度的结果,列举了几款常用的GSM模块,如文档《常见GSM模块介绍》所描述。

https://wenku.baidu.com/view/549c79e0336c1eb91b375d94

注意:这里有个很有意思的现象,我们说,项目需要“将数字信号提取出来、并且拦截原先通往话筒和听筒的通路”,现在,妈蛋,它根本没有数字的接口出来。看到了吧?出来的都是模拟信号,引脚引出的控制口是异步口,是用来收发AT指令控制信号的。

怎么取数据?还拦截原先的话筒/听筒的信号?看了好几款芯片都是这样,心慌慌。

简易版的手机

GSM模块会这样设计,不是没有道理的,因为没有需求。正常GSM模块或4G模块的封装,都是以易用性为基准。即不管是老人机、电话手表,还是高级的智能机,使用模块后,只需要装配少量的外部元器件,就可以实现一个稳定可通话设备。

但如果一个封装,引一个数字同步信号的引脚出来,也就意味着底板需要增加A/D、D/A模组,平白增加功耗和成本。

简易版的通话设备,可参考下面这位哥哥的纯手工的作品《使用Arduino和GSM模块进行呼叫和消息》,内容还是写得很详细的,打电话该有的功能都具备。

https://blog.csdn.net/acktomas/article/details/116123675

Linux-ALSA架构

架构简析

ALSA(Advanced Linux Sound Architecture)是linux上主流的音频结构,在没有出现ALSA架构之前,一直使用的是OSS(Open Sound System)音频架构主要的区别就是在OSS架构下,App访问底层是直接通过Sound设备节点访问的。而在ALSA音频架构下,App是通过ALSA提供的alsa-lib库访问底层硬件的操作,不再访问Sound设备节点了。这样做的好处可以简化App实现的难度。

具体的文章,可参考《ALSA系统简析》一文,看了感觉挺好的。(我就是搬运工)

https://blog.csdn.net/LinuxArmbiggod/article/details/128270673

Android 音频策略

闲话不说,直接上图:

这一堆输入输出设备里面,比较常用的就是HDMI,扬声器,3.5mm圆孔耳机,USB耳机,还有蓝牙耳机。

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

没错,我就是那个搬运工,文章出处《Android 音频策略(音频优先级,音频输入输入,声音优先级)》,感兴趣的自己看。

https://zhuanlan.zhihu.com/p/617022941

RIL与打电话流程

这个章节,本来我是打算写很多内容的,一个原因是我们预研时在这里投入了大量的力气,另一个原因是这个架构是Android关于电话策略的核心内容。

但是后来我看了同为CSDN的分享《Android打电话流程学习(一)》,觉得我写得再好,也不会有它写得那么详细简洁,不写了,想看自己去看。反正我在RK平台调试时,基本也是按照这个脉络来上下调整的。

https://blog.csdn.net/weixin_45099376/article/details/126499597

界面应用Dialer和其它系统应用,与RIL的交互时序可参考下图:

从移植的角度看Android声音

我们当时去试的时候,手上有两款设备:RK3288/3399设备,和一个Root过的红米手机。试验和调试过程相当的漫长,一言难尽,不同平台依赖的内核和modem.img都不同。

具体的调试逻辑,可以参考瑞芯微RK的架构,以及网友前辈分享的文章《Android Audio 调试总结》,基本上来讲移植一款芯片到新的底板上要修改和调试的内容,跟文中描述的也差不多。区别是该文只涉及声卡芯片和声音驱动以及架构的调整,不涉及Modem的选型和调整而已。

https://zhuanlan.zhihu.com/p/56792351

语音架构和逻辑大致如下图:(看看就好)

总结

写了一大堆文字,都是搬运工,人懒就是没办法。我们做这块的探索,前前后后三个多差不多四个月,一直在寻觅一条出路,未果。

原因主要有以下两点:

  1. 声音的切换流程,从硬件原理的角度来看,一定是在底板中实现,Modem中输出的直接就是模拟信号,怎么提数字信号?怎么拦截?当然我们选型的模块,可以找有数字同步引脚的模块,但是基本没有意义。所以,封装后的分流,要么走蓝牙HF的通道,要么从模拟信号中再加一个A/D、D/A转换模块,要么就找个有数字引脚的引出数字信号。
  2. RIL/telephony这个逻辑,真的是锁得很严,当之无愧称为“系统级”应用,不要说提权、Root应用了,我就这么说吧:改了之后手机的稳定性都存疑,内核日志唰唰唰的往外冒。正常人绝对不会想去碰这个代码和逻辑。

综上,要想实现最初的需求和能力,还需进一步探索。稍后再看我们进一步的篇章,探索过程,人类的主观能动性相当重要,勿忘初心、砥砺前行。

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码