본문 바로가기
Android

안드로이드 하드웨어 서비스 03 텔레포니 프레임워크 (4)

by OKOK 2021. 5. 27.

3.5 RIL.java 의 RIL req처리의 예제

텔레포니 프레임워크의 RIL는 RIL데몬과 유닉스 도메인 소켓을 통해 통신하며 모뎀에 서비스를 요청하는 중요한 역할을 수행함. 릴을 이해하려면 RILSender쓰레드와 RILReceiver쓰레드의 동작을 이해함. CallManager, GSMPhone, GsmCallTracker, RILjava, RILSEnder, RILReceiver, RIL데몬. 

 

3.5.1 Phone APP의 텔레포니 프레임워크 API호출

CallController -> PhoneUtils -> CallManager- -> GSMPhone -> GsmCallTracker -> RIL java

현재 phone객체와 발신 전화를 걸 전화번호를 받음.

Phone객체는 Phone app 생성 시 지원하는 네트워크에 따라 GSMPhone 객체와 CDMAPhone 객체가 생성되는데 본서는 GSM을 지원하는 폰을 기준으로 작성되었으므로 GSMPhone 객체가 반환되는 것으로 가정함.

 

3.5.2 RIL java의 Radio API 호출

반환된 메시지의 정보 중 가장 중요한 것은 최종 목적지와 서비스 아이디이다.

 

3.5.4 RILRequest 객체를 RILSender 쓰레드로 전송

RILRequest 객체의 풀로부터 획든된 RILRequest 객체는 메시지를 통해 RILSender쓰레드로 전송됨. 

 

3.5.5 RILSender 쓰레드의 RIL req 발송

마샬링은 객체의 메모리 표현을 저장 또는 전송에 적합한 데이터 포맷으로 변환하는 과정임. 

 

3.6.3 클라이어느 객체 핸들러의 서비스 resp 메시지 처리

 

3.7 RIL의 RIL ind의 처리의 예

RSSI(Received Signal Strength Indication) 수신 신호의 파워를 샘플링하여 디지털 신호로 변환한 수치. 모뎀은 측정된 수신 신호의 세기를 정기적으로 안드로이드에 전달함 

Subscriber의 객체(GsmServiceStateTracker)는 BaseCommands의 객체의 Registrant(mSignalStrengthRegistrant) 객체에 수신을 원하는 서비스 ind(EVENT_SIGNAL_STRENGTH_UPDATE)를 등록함.

 

서비스 ind메시지(EVENT_SIGNAL_STRENGTH_UPDATE)수신

handleMessage() 메서드는 서비스 ind 메시지의 what 필드를 참조하여 수신된 서비스 ind 메시지를 어떻게 처리할 것인지 결정함. 수신된 서비스 ind 메시지 타입은 EVENT_SIGNAL_STREGTH_UPDATE임. 

서비스 ind 메시지의 obj필드의 데이터를 AsyncResult 타입으로 캐스팅 : 서비스 ind 메시지의 obj 필드 데이터는 AsyncsResult 객체임. 메시지의 obj 필드에 저장된 신호 세기 데이터는 처리르 위해 asyncResult 타입으로 캐스팅됨.

RSSI 데이터 칠 : 모뎀으로부터 수신된 RSSI 데이터는 SignralStrength 객체에 저장되어 RSSI의 수신을 원하는 프로세스에 전달함

댓글