成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Android電話功能各部分深入探討

移動開發 Android
Android電話功能主要通過Android操作系統中的Radio Interface Layer來提供電話服務以及各個相關硬件之間的抽象層等等。

Android手機操作系統是一款基于Linux平臺的開源系統。開發人員可以根據不同的需求對其進行修改等操作。在這系統中有很多比較重要的功能值得我們去研究。比如Android電話功能就是其中一個基礎知識點。#t#

第一部分 Android電話功能概述

Android的Radio Interface Layer (RIL)提供了電話服務和的radio硬件之間的抽象層。

Radio Interface Layer RIL(Radio Interface Layer)負責數據的可靠傳輸、AT命令的發送以及response的解析。應用處理器通過AT命令集與帶GPRS功能的無線通訊模塊通信。

AT command由Hayes公司發明,是一個調制解調器制造商采用的一個調制解調器命令語言,每條命令以字母"AT"開頭。

JAVA Framework

代碼的路徑為:

  1. frameworks/base/telephony/java/android/telephony  
  2. android.telephony以及android.telephony.gsm 

Core native:

在hardware/ril目錄中,提供了對RIL支持的本地代碼,包括4個文件夾:

  1. hardware/ril/include   
  2. hardware/ril/libril   
  3. hardware/ril/reference-ril   
  4. hardware/ril/rild 

kernel Driver

在Linux內核的驅動中,提供了相關的驅動程序的支持,可以建立在UART或者SDIO,USB等高速的串行總線上。

第二部分 Android電話功能各個部分

hardware/ril/include/telephony/目錄中的ril.h文件是ril部分的基礎頭文件。

其中定義的結構體RIL_RadioFunctions如下所示:

  1. typedef struct {  
  2. int version;  
  3. RIL_RequestFunc onRequest;  
  4. RIL_RadioStateRequest onStateRequest;  
  5. RIL_Supports supports;  
  6. RIL_Cancel onCancel;  
  7. RIL_GetVersion getVersion;  
  8. } RIL_RadioFunctions; 

RIL_RadioFunctions中包含了幾個函數指針的結構體,這實際上是一個移植層的接口,下層的庫實現后,由rild守護進程得到這些函數指針,執行對應的函數。

幾個函數指針的原型為:

  1. typedef void (*RIL_RequestFunc) (int request, void *data,   
  2. size_t datalen, RIL_Token t);  
  3. typedef RIL_RadioState (*RIL_RadioStateRequest)();  
  4. typedef int (*RIL_Supports)(int requestCode);  
  5. typedef void (*RIL_Cancel)(RIL_Token t);  
  6. typedef const char * (*RIL_GetVersion) (void); 

其中最為重要的函數是onRequest(),它是一個請求執行的函數。

2.1 rild守護進程

rild 守護進程的文件包含在hardware/ril/rild目錄中,其中包含了rild.c和radiooptions.c兩個文件,這個目錄中的文件經過編譯后生成一個可執行程序,這個程序在系統的安裝路徑在:

  1. /system/bin/rild 

rild.c是這個守護進程的入口,它具有一個主函數的入口main,執行的過程是將請求轉換成AT命令的字符串,給下層的硬件執行。在運行過程中,使用dlopen 打開路徑為/system/lib/中名稱為libreference-ril.so的動態庫,然后從中取出 RIL_Init符號來運行。

RIL_Init符號是一個函數指針,執行這個函數后,返回的是一個RIL_RadioFunctions類型的指針。得到這個指針后,調用RIL_register()函數,將這個指針注冊到libril庫之中,然后進入循環。
事實上,這個守護進程提供了一個申請處理的框架,而具體的功能都是在libril.so和libreference-ril.so中完成的。

2.2 libreference-ril.so動態庫

libreference-ril.so動態庫的路徑是:

  1. hardware/ril/reference-ril  

其中Android電話功能主要的文件是reference-ril.c和atchannel.c。這個庫必須實現的是一個名稱為RIL_Init的函數,這個函數執行的結果是返回一個RIL_RadioFunctions結構體的指針,指針指向函數指針。
這個庫在執行的過程中需要創建一個線程來執行實際的功能。在執行的過程中,這個庫將打開一個/dev/ttySXXX的終端(終端的名字是從上層傳入的),然后利用這個終端控制硬件執行。

2.3 libril.so動態庫

libril.so庫的目錄是:

  1. hardware/ril/libril  

其中主要的文件為ril.cpp,這個庫主要需要實現的以下幾個接口為:

  1. RIL_startEventLoop(void);  
  2. void RIL_setcallbacks (const RIL_RadioFunctions *callbacks);  
  3. RIL_register (const RIL_RadioFunctions *callbacks);  
  4. RIL_onRequestComplete(RIL_Token t, RIL_Errno e, void *response, 
    size_t responselen);  
  5. void RIL_onUnsolicitedResponse(int unsolResponse, void *data,   
  6. size_t datalen);  
  7. RIL_requestTimedCallback (RIL_TimedCallback callback, void *param,   
  8. const struct timeval *relativeTime); 

這些函數也是被rild守護進程調用的,不同的vendor可以通過自己的方式實現這幾個接口,這樣可以保證RIL可以在不同系統的移植。其中 RIL_register()函數把外部的RIL_RadioFunctions結構體注冊到這個庫之中,在恰當的時候調用相應的函數。在Android電話功能執行的過程中,這個庫處理了一些將請求轉換成字符串的功能。

責任編輯:曹凱 來源: CSDN
相關推薦

2012-02-28 14:43:43

2017-01-03 17:57:46

Android異步精髓Handler

2009-12-23 16:13:00

WPF Attache

2009-11-20 17:17:08

Oracle函數索引

2021-05-17 05:36:02

CSS 文字動畫技巧

2010-11-22 14:18:32

MySQL鎖機制

2010-07-21 09:38:15

PHP緩存技術

2009-12-03 13:55:10

路由器主要功能

2009-11-12 13:56:54

2009-12-07 16:07:03

PHP類的繼承

2009-12-14 14:40:10

Ruby全局域變量

2024-01-26 06:42:05

Redis數據結構

2009-10-16 09:17:39

屏蔽布線系統

2009-12-07 13:55:58

PHP array_m

2013-07-11 09:45:48

扁平化扁平化設計

2009-12-11 11:08:31

靜態路由策略

2010-03-05 13:44:00

Python序列

2009-08-27 11:27:58

foreach語句C# foreach語

2023-01-12 17:18:06

數據庫多云

2011-02-25 09:23:00

Java類加載器
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲va欧美va天堂v国产综合 | 亚洲国产精品一区二区久久 | 欧美日韩国产高清 | 日韩中文字幕在线播放 | 亚洲高清视频在线 | 这里有精品 | 日韩成人精品视频 | 欧美日韩视频在线第一区 | 国产高清免费在线 | 国产精品久久久久aaaa樱花 | 国产综合久久久久久鬼色 | 一区二区三区高清 | 欧美成人激情 | 亚洲免费三区 | 国产成人福利视频 | 国产一区二区三区在线免费观看 | 亚洲网站在线观看 | 伊人伊成久久人综合网站 | 特级黄一级播放 | 国产精品美女在线观看 | 狠狠干天天干 | 日韩a v在线免费观看 | 免费观看www7722午夜电影 | 国产色爽 | 黄色网络在线观看 | 欧美不卡一区 | 欧美日韩国产一区二区三区 | 亚洲成人av一区二区 | 黄免费在线| 成人在线观| 999国产精品视频免费 | 一级黄色毛片 | 欧洲精品码一区二区三区免费看 | 成人精品毛片 | 久久91精品 | 男女午夜激情视频 | 日韩国产高清在线观看 | 中文字幕一区二区三区在线乱码 | 国产黄色大片在线观看 | 久久青| 色婷婷综合久久久中字幕精品久久 |