AOSP / CAF / CMソース(それぞれAndroid Open Source Project、CodeAurora Forum、Cyanogenmod)にあるほとんどすべてのAndroidソースベースには、rild(Radio Interface Layer Daemon)と呼ばれるCコードがあります。これは通常/hardware/ril
、ソースツリー内にあります。
このデーモンは、Androidが起動した瞬間から実行され、andというソケットを作成し/dev/socket/rild
ます/dev/socket/rild-debug
。Qualcomm、HTCから提供される独自のライブラリがあり、起動時に実行時に動的にロードされます。無線ファームウェアと通信するのは、その独自のライブラリです。そして、プロプライエタリライブラリへのコールバックのためのrildのフックがその場で確立されます。
rildレイヤーでは、前述のソケットを介して、Androidレイヤー(ソースツリーにあります)がどのようにframeworks/base/telephony/com/android/internal/telephony/RIL.java
通信するかを示します。
Java側では、インテントを確立し、このソケットを介してイベントをブロードキャスト/受信するためのデリゲートを設定するとともに、読み取り/書き込み用のソケットを開きます。
たとえば、独自のライブラリである着信呼び出しは、rildによって設定されたコールバックフックを呼び出します。rildは、標準の汎用AT Hayesモデムコマンドをソケットに書き込みます。Java側では、モデムコマンドを読み取って解釈し、そこからPhoneManagerがブロードキャストCALL_STATE_RINGING
します。ここで、Phoneアプリケーション(ソースにありますpackages/apps/Phone
)がレシーバーを登録し、キックスタートします。ユーザーインターフェイス、そしてそれはあなたが電話に応答する方法です。
別の例として、発信を行うと、Androidで番号をダイヤルすると、インテントが作成され、PhoneManagerが作成されます(これがすべてのルートです。ここでは、頭のてっぺんを思い出せませんframeworks/base/core/java
。ソースのどこかにあると思います。ツリー)インテントを受け取り、それをAT Hayesモデムコマンドのシーケンスに変換し、ソケットに書き出すと、rildはプロプライエタリライブラリへのコールバックを呼び出し、プロプライエタリライブラリは無線ファームウェアに委任します。
最後の例として、メッセージング(packages/apps/Mms
ソースツリーにあります)アプリケーションからテキストメッセージを送信すると、入力したテキストがインテントに押し込まれ、PhoneManagerがインテントを受信し、7ビットGSM文字(IIRC)を使用してテキストをGSMエンコードに変換します。 )、ソケットに書き出され、rildは独自のライブラリへのコールバックを呼び出し、独自のライブラリは無線ファームウェアに委任し、テキストは受話器のドメインを離れ、どこかで電波になります。 。:)Android自体の中でブロードキャストメッセージを送信するとともに、 AndroidManifest.xmlREAD_PHONE_STATE
でアクセス許可が使用および指定されている場合。
同様に、逆に、テキストメッセージを受信すると、その逆になり、無線ファームウェアがいくつかのバイトを受信し、プロプライエタリライブラリがrildへのコールバックを呼び出して、そのバイトをソケットに書き込みます。Java側では、Java側から読み取り、バイトシーケンスをデコードし、私たちが知っているようにテキストに変換し、メッセージ受信通知を使用してブロードキャストを開始します。次に、メッセージングアプリケーションは、そのブロードキャストの受信者を登録し、 「+xxxxxxから受信した新しいメッセージ」のようなメッセージを通知バーに送信します。
意図はにありますframeworks/base/telephony/java/com/android/internal/telephony/TelephonyIntents.java
これがテレフォニーシステムの仕組みの要点であり、本当の美しさは、一般的なAT Hayesモデムコマンドを使用して、実際の独自のメカニズムを簡素化および非表示にすることです。
QualcommやHTCのようなものについては、無線電話層がSoC(System on a Chip)回路内に埋め込まれているため、問題のライブラリをオープンソースにすることはないと考えて忘れてください。
これは、補足として、無線ファームウェアをフラッシュするのが危険である理由でもあります。一部の携帯電話は、それを実行し、間違ったファームウェア(互換性がない、または携帯電話に適していないなど)をフラッシュし、携帯電話に別れを告げて使用する機能を提供します。それはドアストッパーまたは紙の重さとして!:)
関与するJNIメカニズムはゼロであることに注意してください。
。これは、それが正確にどのように機能するかをここで推測しています。:)