如何注销网站域名,服装设计一般要学几年,wordpress加入视频播放器,十大免费行情软件下载网站Android电话系统之-rild.docAndroid电话系统之-rildRild是Init进程启动的一个本地服务#xff0c;这个本地服务并没有使用Binder之类的通讯手段#xff0c;而是采用了socket通讯这种方式。RIL(Radio Interface Layer)Android 给出了一个ril实现框架。由于Android开发者使用的…Android电话系统之-rild.docAndroid电话系统之-rildRild是Init进程启动的一个本地服务这个本地服务并没有使用Binder之类的通讯手段而是采用了socket通讯这种方式。RIL(Radio Interface Layer)Android 给出了一个ril实现框架。由于Android开发者使用的Modem是不一样的各种指令格式初始化序列都可能不一样GSM和CDMA就差别更大 了所以为了消除这些差别Android设计者将ril做了一个抽象使用一个虚拟电话的概念。这个虚拟电话对象就是 GSMPhone(CDMAPhone),Phon对象所提供的功能协议以及要求下层的支撑环境都有一个统一的描述这个底层描述的实现就是靠RIL来 完成适配。Andoid将RIL层分为两个代码空间RILD管理 框架AT相关的xxxril.so动态链接库。将独立成一个动态链接库的好处就是系统适应不同的不同的Mode可以有 一个独立的Ril与之对应。从这个层面上看Rild更多是一个管理框架。而ril是具体的AT指令合成者和应答解析者。从最基本的功能来讲ril建立了一个侦听Socket等待客户端的连接然后从该连接上读取RIL- Java成传递来的命令并转化成AT指令发送到Modem。并等待Modem的回应然后将结果通过套接口传回到Ril-Java层。下图是Ril-D的 基本框架下面的数据流传递描述图表描述了RIL-JAVA层发出一个电话指令的5 步曲。在 AT通讯的过程中有两类响应一种是请求后给出应答一种是通知类即为不请自来的例如短信通知达到我们称该类通知为URC。在Rild中URC和一 般的Response是分开处理的概念上URC由handleUnsolicitedAtchannel.c处理而Response由 handleFinalResponse来处理。1 Event LoopRild 管理的真正精髓在ril.cpp,ril_event.cpp中在研究的过程中可以看到设计者在抽象上所下的功夫设计得很优美。Event Loop的基本工作就是等待在事件端口(串口Socket)一旦有数据到达就根据登记的Event回调函数进行处理。现在来看Ril设计者是如何建立 一套管理框架来完成这些工作的1.1 Event对象Event对象构成(fd,index,persist,func,param)fd事件相关设备句柄。例如对于串口数据事件fd就是相关串口的设备句柄index persist如果是保持的则不从watch_list中删除。func回调事件处理函数param回调时参数 为了统一管理事件Android使用了三个队列watch_list,timer_list,pending_list,并使用了一个设备句柄池readFDS。readFDS是Linux的fd_setreadFDS保存了Rild中所有的设备文件句柄以便利用select函数统一的完成事件的侦听。watch_list监测时间队列。需要检测的事件都放入到该队列中。timer_listtimer队列pending_list:待处理事件队列事件已经触发需要所回调处理的事件。事件队列队列的操作ril_event_add,ril_event_del, ril_timer_add在添加操作中有两个动作(1) 加入到watch_list(2) 将句柄加入到readFDS事件句柄池。1.2 ril_event_loop()我们知道对于Linux设备来讲我们可以使用select函数等待在FDS上,只要FDS中记录的设备有数据到来select就会设置相应的标志位并 返回。readFDS记录了所有的事件相关设备句柄。readFDS中句柄是在在AddEvent加入的。所有的事件侦听都是建立在linux的 select readFDS基础上。ril_event_loop 利用select等待在readFDS(fd_set)上当select设备有数据时ril_event_loop会从select返回在 watch_list中相应的Event放置到pend_list如果Event是持久性的则不从watch_list中删除。然后 ril_event_loop遍历pengding_list处理Event事件发起事件回调函数。1.3 几个重要的Event上面分析了ril-d的框架在该框架上跑的事件有什么(1)s_listen_event- (s_fdListen,listenCallback)