[WindowsCE 6.0 특집 ②] 윈도우 임베디드 CE 6.0의 Cellcore 및 RIL 기능

일반입력 :2008/08/04 17:41

성수현(MDS테크놀로지 ES사업부 SE팀 대리)

필자는 MDS테크놀로지 ES사업부 SE팀에서 윈도우 CE 관련 기술지원과 MS 공인 윈도우 CE 교육강사로 활동하고 있으며, 2007년 MS 윈도우 임베디드 부문 MVP로 선정되었다.

Cellcore 와 RIL 이란?

Cellcore와 RIL이란 단어는 윈도우 CE 개발자들에게는 생소한 단어들이다. 왜냐하면 기존에는 모바일에서만 지원이 되었고 CE쪽에서는 필요가 없었기 때문이다. 하지만 하드웨어와 소프트웨어, 네트워크의 발달로 인해 앞으로 윈도우 CE에서도 많이 요구될 것으로 예상되었는지 마이크로소프트에서도 윈도우 임베디드 CE 6.0부터 상기 기능을 지원하게 되었다.

그러면 지금부터 윈도우 CE 개발자를 위해 Cellcore와 RIL 기능에 대해서 알아보자.

-Cellcore란? 무선연결 서비스를 지향하는 기본적인 개념으로 CDMA나 GSM 모듈과의 통신을 가능하게 해주는 것이다. 또한 음성이나 데이터 통신을 가능하게 해주는 컴포넌트이기도 하다.

-RIL이란? Cellcore 시스템 소프트웨어와 Radio 하드웨어를 연결하는 인터페이스로 셀룰러(cellular) 기술을 위한 추상적인 레이어이다.

셀룰러 아키텍처

셀룰러 아키텍처는 상당히 복잡한 형태로 되어 있다. 하지만 복잡한 만큼 구현도 어렵지만 그만큼의 많은 기능들도 지원해 준다. 기존의 CE 디바이스에서 네트워크를 이용하려면 Wifi를 이용하거나 유선을 이용했어야 했다. 하지만 윈도우 임베디드 CE 6.0에서 지원하는 Cellcore 기능을 이용한다면 전화뿐만 아니라 인터넷 및 데이터 통신을 할 수 있다.

또한 RIL 드라이버만 포팅하면 GSM의 SIM 카드도 API를 통해 제어가능하며, TAPI를 통해 모뎀통신도 가능하고, 모뎀을 통해 CE 디바이스를 네트워크 연결 통로로 이용해 다른 디바이스에서 인터넷을 가능하게 할 수 있다.

한 예로 그림에서 RIL Proxy를 RIL API를 통해 인스턴스를 생성한 다음 RIL 함수를 통해 전화하거나 문제를 보낼 수 있고, 또한 Miniport 드라이버를 만들게 되면 상위에 있는 NDIS를 통해 인터넷을 할 수 있다. 단 통신모듈 업체에서 RIL 드라이버는 제공해줘야 한다.

기존 5.0때에는 RIL과 비슷한 기능을 구현하기 위해 별도의 CDC(Communication Device Class) 라는 것을 만들었다. 이 CDC는 모뎀과 통신할 수 있도록 하는 것으로 Serial 드라이버를 이용해 모뎀을 동작시키는 방법이다. 이 방법은 시리얼 드라이버를 통해 모뎀을 제어하고 시리얼 드라이버의 PDD 함수에 모뎀을 제어하는 코드를 모두 포팅해줘야 한다.

그러나 윈도우 임베디드 CE 6.0에서 cellcore를 지원하는 만큼 5.0에서 어렵게 포팅했던 방식이 6.0에서 지원하므로 RIL 드라이버를 많이 지원할 것으로 생각이 든다. 이렇게 되면 윈도우 CE에서 RIL을 사용하고자 할 때 어렵게 포팅했던 작업을 크게 줄일 수 있고, 많은 cellcore 기능을 사용하게 될 것으로 기대가 된다.

RIL

셀룰러 아키텍처는 상당히 복잡한 형태로 되어 있다. 하지만 복잡한 만큼 구현도 어렵지만 그만큼의 많은 기능들도 지원해 준다. 기존의 CE 디바이스에서 네트워크를 이용하려면 Wifi를 이용하거나 유선을 이용했어야 했다. 하지만 윈도우 임베디드 CE 6.0에서 지원하는 Cellcore 기능을 이용한다면 전화뿐만 아니라 인터넷 및 데이터 통신을 할 수 있다.

또한 RIL 드라이버만 포팅하면 GSM의 SIM 카드도 API를 통해 제어가능하며, TAPI를 통해 모뎀통신도 가능하고, 모뎀을 통해 CE 디바이스를 네트워크 연결 통로로 이용해 다른 디바이스에서 인터넷을 가능하게 할 수 있다.

한 예로 그림에서 RIL Proxy를 RIL API를 통해 인스턴스를 생성한 다음 RIL 함수를 통해 전화하거나 문제를 보낼 수 있고, 또한 Miniport 드라이버를 만들게 되면 상위에 있는 NDIS를 통해 인터넷을 할 수 있다. 단 통신모듈 업체에서 RIL 드라이버는 제공해줘야 한다.

기존 5.0때에는 RIL과 비슷한 기능을 구현하기 위해 별도의 CDC(Communication Device Class) 라는 것을 만들었다. 이 CDC는 모뎀과 통신할 수 있도록 하는 것으로 Serial 드라이버를 이용해 모뎀을 동작시키는 방법이다. 이 방법은 시리얼 드라이버를 통해 모뎀을 제어하고 시리얼 드라이버의 PDD 함수에 모뎀을 제어하는 코드를 모두 포팅해줘야 한다.

그러나 윈도우 임베디드 CE 6.0에서 cellcore를 지원하는 만큼 5.0에서 어렵게 포팅했던 방식이 6.0에서 지원하므로 RIL 드라이버를 많이 지원할 것으로 생각이 든다. 이렇게 되면 윈도우 CE에서 RIL을 사용하고자 할 때 어렵게 포팅했던 작업을 크게 줄일 수 있고, 많은 cellcore 기능을 사용하게 될 것으로 기대가 된다.

RIL

RIL은 크게 RIL Proxy와 RIL Driver로 나누어진다. RIL Proxy는 애플리케이션에서 사용할 수 있는 인스턴스로 CE상에서 여러 개를 생성해서 사용할 수 있다. 반면 RIL Driver의 경우에는 하나만 존재한다.

RIL Proxy는 SIM API, RIL API, CellTSP, SMS API를 통해 접근이 가능하며, VSP(Virtual Serial Port)를 통해서도 접근이 가능하다. 하지만 RIL Proxy는 인스턴스가 많이 생성이 되고, RIL Driver는 하나이기 때문에 RIL Driver는 RIL Proxy에서 들어오는 명령어들을 순차적으로 잘 처리해 줘야 한다.

RIL Proxy

RIL은 크게 RIL Proxy와 RIL Driver로 나누어진다. RIL Proxy는 애플리케이션에서 사용할 수 있는 인스턴스로 CE상에서 여러 개를 생성해서 사용할 수 있다. 반면 RIL Driver의 경우에는 하나만 존재한다.

RIL Proxy는 SIM API, RIL API, CellTSP, SMS API를 통해 접근이 가능하며, VSP(Virtual Serial Port)를 통해서도 접근이 가능하다. 하지만 RIL Proxy는 인스턴스가 많이 생성이 되고, RIL Driver는 하나이기 때문에 RIL Driver는 RIL Proxy에서 들어오는 명령어들을 순차적으로 잘 처리해 줘야 한다.

RIL Proxy

실제 윈도우 CE에서 RIL Proxy는 ril.dll로 존재하며 ril.dll은 cellcore 애플리케이션에서 생성할 때마다 하나의 인스턴스가 생성된다. 그리고 RIL Proxy는 Microsoft에서 기본적으로 제공을 하며 RIL Driver와 RIL Client 사이의 인터페이스 역할을 담당한다. 또한 RIL 함수를 제어하기 위한 RIL_xxxIOCTLS 함수 등을 제공한다.

대표적인 함수

RIL_Initialize() : RIL Proxy를 생성하기 위한 함수

RIL_Deinitialize() : RIL Proxy를 삭제하기 위한 함수

실제 윈도우 CE에서 RIL Proxy는 ril.dll로 존재하며 ril.dll은 cellcore 애플리케이션에서 생성할 때마다 하나의 인스턴스가 생성된다. 그리고 RIL Proxy는 Microsoft에서 기본적으로 제공을 하며 RIL Driver와 RIL Client 사이의 인터페이스 역할을 담당한다. 또한 RIL 함수를 제어하기 위한 RIL_xxxIOCTLS 함수 등을 제공한다.

대표적인 함수

RIL_Initialize() : RIL Proxy를 생성하기 위한 함수

RIL_Deinitialize() : RIL Proxy를 삭제하기 위한 함수

RIL Driver는 윈도우 CE의 전형적인 스트림 인터페이스 드라이버로 PDD(Platform Dependent Driver)와 MDD(Modal Device Driver) 두 부분으로 나누어져 있으며, Windows Embedded CE 6.0 Platform Builder에서 MDD와 PDD의 샘플 코드를 제공한다.

RIL_Initialize 함수를 통해 RIL Proxy를 생성한다. 여기서 첫 번째, 두 번째, 세 번째 인자가 중요한데, 첫 번째 인자로 RIL 드라이버의 Index를 입력하고 두 번째 인자로 RIL 함수를 처리하면서 result 값들을 받을 수 있는 콜백 함수를 입력하고, 세 번째 인자로 RIL함수에서 발생하는 이벤트를 처리할 수 있는 콜백 함수가 반드시 필요하다.

윈도우 임베디드 CE 6.0에서 RIL 테스트

셀룰러 에뮬레이터(Cellular Emulator)는 전화기를 에뮬레이션 해주는 프로그램으로 윈도우 임베디드 CE에서는 이를 지원하지 않는다. 하지만 Mobile 6 SDK를 설치한다면 셀룰러 에뮬레이터를 CE에서 함께 연동해서 테스트해 볼 수 있다.

테스트해 볼 수 있는 방법은 윈도우 임베디드 CE 6.0에서 에뮬레이터로 OS를 빌드하고 RIL 관련 컴포넌트를 추가하면 에뮬레이터에서 에뮬레이션해주는 시리얼 포트를 통해 Cellular Emulator로 메시지를 전달할 수 있다.

그래서 Windows CE 에뮬레이터에서 전화를 걸거나 SMS 문자를 보내거나 에뮬레이터로부터 보내온 AT command 로그 등을 확인할 수 있다.

MyRILResult 함수는 RIL 함수를 통해 명령어를 주는 결과값을 받는 콜백 함수 이다.

RIL 함수로부터 어떠한 이벤트가 들어왔는지 확인할 수 있는 콜백 함수이다.

RIL Driver

RIL Driver는 윈도우 CE의 전형적인 스트림 인터페이스 드라이버로 PDD(Platform Dependent Driver)와 MDD(Modal Device Driver) 두 부분으로 나누어져 있으며, Windows Embedded CE 6.0 Platform Builder에서 MDD와 PDD의 샘플 코드를 제공한다.

그리고 RIL Driver는 각 모뎀 제공 회사마다 사용되는 모뎀 command가 다르기 때문에 이 commend를 처리해야 하는 코드들이 포함되어 있다. 또한 RIL을 Network로 사용하려면 RIL Miniport Driver가 필요하다.

RIL Miniport Driver의 역할은 RIL Driver와 TCP/IP를 통해 IP 통신을 할 수 있도록 처리하거나, 또는 NDISUIO(NDIS User mode I/O)와 RIL Driver 간의 통신을 해 외부에 인터넷을 연결할 수 있도록 해준다.

윈도우 임베디드 CE 6.0에서 RIL 테스트

셀룰러 에뮬레이터(Cellular Emulator)는 전화기를 에뮬레이션 해주는 프로그램으로 윈도우 임베디드 CE에서는 이를 지원하지 않는다. 하지만 Mobile 6 SDK를 설치한다면 셀룰러 에뮬레이터를 CE에서 함께 연동해서 테스트해 볼 수 있다.

테스트해 볼 수 있는 방법은 윈도우 임베디드 CE 6.0에서 에뮬레이터로 OS를 빌드하고 RIL 관련 컴포넌트를 추가하면 에뮬레이터에서 에뮬레이션해주는 시리얼 포트를 통해 Cellular Emulator로 메시지를 전달할 수 있다.

그래서 Windows CE 에뮬레이터에서 전화를 걸거나 SMS 문자를 보내거나 에뮬레이터로부터 보내온 AT command 로그 등을 확인할 수 있다.

글을 마치며

이와 같이 윈도우 임베디드 CE 6.0부터 새롭게 추가된 Cellcore 및 RIL 기능은 네트워크와 통신기능을 점차 중시하는 PMP, CNS 와 같은 모바일 및 임베디드 기기에 또 하나의 차별화된 부가기능을 제공할 것으로 기대한다. @