본문 바로가기
Android

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

by OKOK 2021. 6. 12.

4.2.1 USIM의 데이터 구조

2G 통신에 사용되는 파일 시스템의 루트 디렉토리를 MF라 하고 3G를 위한 파일 시스템의 루트 디렉토리는 ADF라 불림. 일조의 디렉토리인 DF와 파일역할을 하는 EF를 가질수 있음. 

 

R-APDU의 값에는 결과의 상태를 나타내는 Status Word가 있음. 일반적으로 0x90, 0x00으로 반환됨. 이는 UICC에서 단말로 보내는 명령인 Proactive Command가 UICC에서 대기 중임을 나타내는 것임. 문맥상으로 UICC에서 단말로 명령을 보내고 단말에서 명령을 처리한 후 결과를 보내는 방식으로 동작한다고 볼 수 있음. 

 

4.3 안드로이드 USIM 소프트웨어 구조

getsimstatus, requestsim_io, requestentersimpin, requestwritesmstosim

릴 데몬과 통신을 담당하는 Ril.java 두 번째는 UISM의 데이터에 접근하기 위한 메서드를 제공하고 휴대폰의 초기화 과정에서 필요한 데이터를 미리 가져와서 캐싱하는 역하을 하는 SIMrecords 클래스, 세 번째는 SIM Toolkit 관련 부분을 처리하기 위한 루틴. SIMFileHandler라는 클래스를 통해서 호출됨. SIMFileHandler는 EF를 읽고 쓰는 메서드를 제공하는 클래스로 해당 메서드를 호출하면 응다블 위한 메시지를 작성하여 명령과 함께 RIL.java로 전달함. 

UiccController : GSM, CDMA, LTE 등의 통신 방식에 따라 해당하는 IccCard 클래스를 생성함. CatService는 Proactive Command를 인텐트로 작성하여 브로드캐스팅함.

 

4.3.4 안드로이드 앱

SIM Toolkit은 과거 휴대폰에 별도의 앱을 설치할 수 없던 시절에 이동 통신 사업자의 필요에 의해 UICC에 저장된 휴대폰에서 구동이 가능한 앱을 일컫는 말임. UICC 내의 전화번호부인 SIM Phonebook을 사용하기 위해 SimPhoneBookInterfaceManager 객체를 생성함. USIM은 SMS을 저장할 수 있는 기능이 존재함. 이 때 EF등의 EF필드를 사용하게 됨. SIMRecords 객체는 USIM의 EF들을 미리 읽어서 저장하기 위해 사용되는 AdnREcordCache와 VoiceMailConstrants, SpnOverrid 등의 객체를 생성함. USIM 상태가 SIM Ready 상태라면 CatService나 GsmServiceStateTracker 클래스에 이를 알려줌. 

 

mIccStatusChangedRegistrants에는 RIL_UNSOL_REPONSE_SIM_STATUS_CHANCED 이벤트가 전달되었을 떄, 알림을 받길 원하는 객체들이 등록되어 있음. registerForIccStatusChanged() 메서드는 내부 변수인 mIccStatusChangedRegistrants에 전달받은 EVENT_ICC_STATUS_CHANGED와 IccCard 객체의 핸들러를 등록함. 

관련 객체들에 상황을 알림. 

 

USIM에 연관된 대부분의 작업들은 USIM에 있는 데이터에 접근하여 읽거나 쓰는 작업임. 이러한 작업은 SIMFileHandler 객체를 이용하여 동작하게 됨. fetchSimRecords() 메서드를 통해 필요한 EF들에 대한 읽기 작업이 완료되면 onAllRecordsLoaded() 메서드가 실행됨. 

 

4.5 안드로이드 USAT 초기화 및 동작

USIM의 사용은 모뎀에서 UICC로 명령을 전달하고 이에 대한 응답을 UICC로부터 받는 방식으로 진행됨. 이에 반해 Proactive Command는 UICC에서 명령을 보내고 모뎀에서 응답을 함. Proactive Command 동작을 위해 안드로이드는 2장에서 살펴본 RIL ind를 이용하여 모뎀에서 안드로이드 플랫폼으로 데이터를 받아오는 작업을 진행함. Proactive Command는 UICC로부터 APDU 형태로 모뎀으로 전달되며 다시 모뎀에서 AT command 형태로 RIL로 전달됨. STK app은 ACTION_BOOT_COMPLETE 인텐트를 받을 수 있도록 AndroidManafiest.xml에 intent-filter를 설정해두고 있음. 

startService() 메서드가 호출되면 StkAppService의 생성을 위해 StkAppService클래스의 onCreate() 메서드가 실행됨. ServiceHandler 객체의 OP_BOOT_COMPLETED 이벤트 처리 루틴.

 

UICC에 USAT을 포함할지 여부는 이동 통신 사업자에서 결정함. 따라서 휴대폰은 부팅시점에 UICC에 USAT의 존재 여부를 알 수 없기 떄문에 휴대폰에 STK 앱이 설치되어 있는 경우 일단 이를 삭제함. 그리고 부팅이 완료되고 UICC로부터 SIM Toolkit 메뉴를 표시하기 위한 Setup menu proactive command를 전달받으면 다시 STK 앱이 설치되며 메인 메뉴에 아이콘이 표시되어 USAT을 사용할 수 있게 됨. 

 

모뎀으로 전달된 Proactive Command는 AT Command의 형태로 벤더 RIL로 전송됨. 

댓글