gsmmuxd实现原理

Cpu对modem模块的控制一般通过uart发送at指令来完成。如果通过modem上网的话,这时在uart会同时有大量网络数据传送,需要区分网络数据和at指令。

Gsmmuxd就是完成对modem模块的多路复用,通过gsmmuxd可以实现拨号上网和接打电话、收发短信能同时进行。

多路复用协议参照gsm0710-driver,在该协议中,发往at模块的每个指令封装成如下格式:


其中address表示从哪一个虚拟串口通道来的指令;control表示帧类型;具体的at指令写在information字段。

Gsmmuxd会生成多个虚拟uart对应不同的应用,如接打电话和拨号上网。通过一个真正的uart与at模块通信。从虚拟uart接收at指令,封装成上述复用帧发送到真正uart;从真正uart接收复用帧,从中解析出at指令和串口通道,发送到对应的虚拟uart。

在android系统中,应用层通过调用ril层实现接打电话、收发短信。Ril层实现发送各种at指令到gsmmuxd的虚拟uart。


在我们的应用中,模拟出3个虚拟串口,分别为mux0,mux1,mux2。Mux1接ril层,实现接打电话、收发短信;mux2实现ppp拨号上网。

从at模块接收复用帧,从中解析出通道信息channel,发送到虚拟串口mux[channel-1]。

从虚拟串口mux[port]接收at指令,封装成复用帧(其中通道信息channel为port+1),发送到at模块。

从上面可以看出,从虚拟串口来的at指令,封装成复用帧后,channel至少为1了。Channel为0的复用帧预留给gsmmuxd本身使用了,如gsmmuxd初始化at模块用。同样从at模块发送过来的channel为0的复用帧,不再转发给虚拟串口,而是在gsmmuxd内部处理了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值