用电脑打电话4G上网!实现它需要什么?

写作原因

本文本来是独立文章的,但是因为鸽了太久,它已经实质成为以下文章的补充。

说在前面

我不会通信工程,我们物联网专业课也没有通信这档子事,描述大概率会有极大偏差,求指出问题。

省流/TLDR

  • dialer.exe现代使用环境下没法用。
  • 要打电话需要一块支持VoLTE、VoNR等的WWAN网卡。2G、3G退网了。
  • 即使你有了这些设备,你大概率还是打不了正常电话,例如GNOME Calls及向上的各种开源灵车,不咋完善或过于复杂,对普通用户来说没法用。

背景

很久之前我整了个Venue 11 Pro 7140平板,然后发现它自带SIM卡槽(非4G版和4G版只有外壳上的区别,也就是SIM卡卡槽那块儿没开孔)。后续买了4G网卡(DW5280e)。

最近(神tm最近,这文章鸽了很久了,连平板都换了一波了)MBRjun那边提到了这么个东西:Phone Dialer。他好奇这玩意儿是否能和4G网卡联动实现通话,我试了,报告找不到调制解调器。

为什么有了4G网卡还是打不了电话?

Phone Dialer是什么东西?它是怎么工作的?

字面意思,打电话用的。

它有这么个配置菜单,长这样:

我想我们可以这么猜测:它实际上是配合PCI内置猫(做成PCI卡的调制解调器)用的。

如何靠猫打电话

在远古时期(其实没多远,大概是90年代,也就30年前吧),大家基本都是拨号上网的。那时候是从电话分根线接猫,猫接电脑。当时上网和打电话不可兼得,直到ADSL的出现,让数据和通话分离(人能听到的声音和发出的声音是局限在一个频段范围内的,更高频的部分可以跑数据),打电话同时终于可以实现上网了。

用猫上网需要提供帐号和密码(废话),然后你可以在电话那头听到滴滴嘟嘟和一大串杂乱的声音,那就是拨号(那个滴滴嘟嘟就是DTMF)。后面是猫在和上游确定好频段和频道,之后就可以上网了。

等下,DTMF?这不就意味着你可以让电脑生成一串声音,模拟电话进行拨号吗?是的,这就是Phone Dialer的原理。

为什么你打不了电话

很简单,4G网卡根本不走那道儿。

BetaWiki,那玩意儿是Windows 95那时候的老古董了(最早是1993年引入的),而2G比它出现得要早一些,1990年吧。那时候人们都在用BP机(就是在阿拉伯炸了的那玩意儿),2G手机那时候既不便携,也不便宜。

梗图,勿当真
wp-17582630213369135594861240487835

冷提醒,天津也有妈祖庙。

不放点蔡英文怎么让你们知道这是我的博客.jpg

4G网卡有个叫AT的指令(其实是不一定有的,4G网卡实质上是MCU/SoC+猫,所谓AT指令其实是对MCU的操作指令,或者说,对外接口)(以SIMCom A7908为例,据大大通,它基于ASR1828平台,而ASR1828是特么的Cortex-A7+猫,多用于4G CPE上),它实际上代替了远古时期的拨号流程(远古时期的拨号是模拟信号,现在的4G网卡实际上就是实现了从数字信号转到模拟信号的流程),还顺带加了很多新特性。

然而,不是所有的4G网卡均支持打电话,甚至可以说,在VoLTE出现前,如果这个网卡只支持4G,它实质上无法连通2G网络,也就无从实现打电话这个功能。(这种东西我个人非常建议看看SIMCom和合宙等公司的官网,我说肯定不准确的)

如何在电脑打电话

买张支持GSM的网卡就可以打电话吗?

你想多了,也不能。

首先我们需要明确能打电话的前提条件:软件支持,硬件支持(设备支持),基站支持。

软件支持就是你的平板需要和基带/猫/网卡沟通通话,硬件支持就是你得有猫/网卡这种东西(以及你的网卡固件支持通话),基站支持就是你家附近的基站没有退网你网卡支持的协议。

2G与3G退网那些事

生草的是,很明显,中国的2G和3G已经退网了。

3G退网比较早,因为中国的TD-SCDMA技术(参数上)实在太拉,中国移动已经早早退网;CDMA2000和WCDMA相对更快一些,相关基站分别由中国电信和中国联通运营,它们也早就实现了3G退网。

2G因为其包含一些历史因素(例如众多旧设备仅支持2G,且2G承担应急通信的作用),迟迟不能退网,但现在也有消息说退了,而且实测,中国移动2G搜不到信号,不支持VoLTE的手机打不了电话。

甚至我们学校的那堆物联网热水器都因为2G退网,不得不换了表头。

如果3G还能用,你能打电话吗?

额,这玩意儿我不太好说,从来没人提到过这类技术,问AOSC托腮群群友听说没有大规模商用来着……

3G时代大多数用户都是在2G通话的,这个比较生草(也可能是我从来没注意过这档子事)。联通倒是有推过一个叫高清语音(HD Voice)的东西,群友也有提到过一个叫VoIP over HSPA的东西,这玩意儿好像并不算真正的所谓“Voice over UMTS”。倒是有个叫“IMS over UMTS”的技术可以看看。

而至于3G打电话一直没怎么推广(或者一直没人注意)的原因,4G早期及以前都是不支持语言与数据并发(语数并发)的,这导致你打电话时候必然会断网。加上2G和3G都是用的电路交换技术(Circuited Switched,CS),这玩意儿会在你打电话时候独占一条道路;而4G后就开始使用分组交换技术(Packet Switched,PS),看起来跟IP什么的沾上边了,自然VoLTE、VoNR之类的就发展起来了。

然而……算了我圆不回去了,我突然发现我当时问的问题出现了很大偏差(导致群友注意点在3G时代的流量和通话同时使用,而非独立的3G通话)。个人建议去看一下知乎萌大叔vincentist的文章《关于移动通信(3G、4G和5G)你需要知道的基本知识》。简单说就是,有的3G技术允许通话(WCDMA、TD-SCDMA),有的不行(CDMA2000)。前俩分别是联通和移动用,后一个是电信用。而很不幸,前文提到过,我们家多用移动,TD-SCDMA这玩意儿移动不乐意推,自然导致在我印象中没有什么3G通话相关的记忆。

同时,部分博主也有过用3G网卡打电话的记忆(也可能是回落到2G打的电话,这个我不清楚)。

4G网卡呢?

你还是想多了。不是所有的4G网卡都支持打电话,例如我买的DW5280e,它确实不支持打电话。部分早期4G手机,例如前文贴出的搭载骁龙400的中国移动M811,它确实不支持4G下打电话。2G、3G退网后它就抓瞎了。

要支持4G通话,你必须要一个支持VoLTE的设备(以及支持VoLTE的固件,例如Quectel移远的EC20模块,需要安装特定固件才能支持电信的VoLTE)。在SimCom等专门做物联网模块的公司的官网,你可以找到很多标配VoLTE功能,或可选VoLTE的模块。

然而,我个人极其不建议你买,这特么齁贵,明显不是给个人用户用的。我特么找半天,走M.2接口的平均价格愣没下过300;USB接口的好歹便宜了点,但是我没有把握认定它即插即用。如果你非要买,建议不要all in one,直接俩模块:上网一个,打电话一个,而且尽量不要同时使用(原因后面会说)。(而且支持VoLTE的便宜USB板子价格在50-200之间,网速仅10Mbps下行/5Mbps上行,明显不够用)

买个支持VoLTE的网卡就可以开打了吧?

我目前猜测是这样,但手头确实没钱做这个实验。

但是,上文说过,我可以俩网卡啊,上网一个,打电话一个(设想很美好,实际很难绷,原因在后面)。上网这个普通的4G网卡就可以了,打电话这个我目前使用合宙的Air780EPV实现。原因无他,便宜,有度云物联doiot的usb板子开箱即用。

哦对了,这玩意儿不包邮。感觉还好,因为只有淘宝这一家有这玩意儿。你看,人还送包纸嘞

如何打出电话

AT指令

很简单,AT指令。通过串口连接4G网卡通信。

例如,你可以:

ATD10086

这样就可以给10086打电话了!接下来,你会收到一个叫“OK”的字符串,这说明命令执行成功了。

当然,你想接电话这个怎么办呢?也简单,看看串口有没有收到一个叫“RING”的字符串。收到了:

  • 接听:ATA
  • 挂断:ATH

是不是很简单啊?简单个鬼啊!你家打电话是靠指令实现的啊!而且你如何听到声音、把声音传出去啊!

而且有些网卡它根本没有AT指令,它们基本走MBIM和QMI等协议。部分网卡,如Quectel移远,那边是做了个AT指令兼容层

上层封装:ModemManager

我们又不是人均程序员,打个电话靠串口输指令的,而且每个网卡协议不一样太难受了。所以,我们有了一个更上层的封装:ModemManager,基带管理器

以下是它的描述和我个人翻译。

ModemManager is a system daemon which controls WWAN (2G/3G/4G/5G) devices and connections.

Alongside NetworkManagerModemManager is the default mobile broadband management system in most standard GNU/Linux distributions (DebianFedoraUbuntuArch Linux…), and is also available in custom systems built with e.g. buildrootyocto/openembedded or ptxdist.

ModemManager may also be used in routers running openwrt (integrated with netifd as a new protocol handler), or to manage both voice and data in mobile phones running postmarketos (PINE64 PinePhone, BQ Aquaris X5, OnePlus 6…).

libqmilibmbim and libqrtr-glib are additional libraries that are developed under the umbrella of the ModemManager project, but which can also be used independently with their own command line tools.

ModemManager(基带管理器)是一个可以控制WWAN(2G、3G、4G、5G等)设备及相关连接的系统守护进程。

与NetworkManager相似,ModemManager在大多数GNU/Linux发行版中为默认的基带管理系统。同时,在buildroot、yocto/openembedded或ptxdist等平台编译的客制化系统中也可用。

ModemManager也可以(作为新的协议处理方案与netifd集成)用在OpenWRT路由器上,或需要同时管理数据和通话的PostmarketOS手机上(例如PINE64 PinePhone,BQ Aquaris X5,一加6)

libqmi(用于QMI协议)、libmbim(用于MBIM协议)和libqrtr-glib(用于使用QRTR总线的高通SoC)也被挂在ModemManager项目下作为额外库进行开发,但是它们也可以用它们独属的命令行工具独立使用。

这下就简单多了。

打电话需要:

mmcli -m 0 -o <index> --voice-create-call='number=你号'
mmcli -m 0 --start  

接电话需要从mmcli里观察event,有接到电话后需要:

mmcli -o <index> --accept

然后再:

sudo cat /dev/ttyUSB<x> |  play -t raw -r 8000 -c 1 -e u-law -

以听到声音……

哦对了,这指令实在太复杂,以至于我自己都不用的,网上甚至没几个正常教程。

卧槽这打个电话费那么多劲,能不能让我们打个正常电话?还有没有更简单的方法?

对ModemManager的更上层的GUI封装:GNOME Calls、Chatty/Pidgin(SMS插件)……

艾玛终于来了个正常的了。

你应该也看出来了,GNOME Calls是打电话的,Chatty或Pidgin是发短信的。它们的界面一目了然,略过。

开打!

效果

我这边采用的是doiot度云物联的Air780EPV USB板子,到手无需设置。

网卡冲突

如果电脑已经存在了一个4G网卡,GNOME会试图与它们都进行沟通,导致整体卡死。解决方案为拔掉现有的4G网卡。

比较冷笑话的是,GNOME在处理双WLAN网卡的时候也会出现类似问题,此时你需要nmtui。

对面听不到声音,你也听不到对面的声音

这个原因是,GNOME Calls本身可能没有实现这部分。没开玩笑,你用Calls自己的拨号盘会发现,对面只能听见DTMF拨号声一直在回响。只能说很操蛋了。

有什么意义

你知道的,我以前写过这么一个知乎回答:如何看待陈震和米粉对线后被骚扰短信轰炸?

那时候我就已经说了,电脑可以通过添加WWAN网卡,成为手机的替代方案。

目前我们已经实现了SMS短信与系统的解耦,但是电话方面始终没有真正的可行的方案出现,甚至用电脑打电话本身就是一种很“魔”的行为。

现在我们发现,这确实很魔,魔到没人去试图维护这东西。


发布于

修改于

,即

(未显示说明未经修改)

分类:

标签:

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注


许可协议

更多文章

广电圆舞曲:津独大绝赞体验广电圆舞曲:津独大绝赞体验2024年11月5日TuskedEvening0
那些MtF群体中的抽象事件那些MtF群体中的抽象事件2025年3月14日TuskedEvening0