michgan software studio

.net compact framework에는 (3.5까지도) System.Threading.Semaphore 클래스가 빠져 있습니다. 그렇다고 Windows Mobile에서 Semaphore를 쓸 수 없는 것은 아닙니다. CE용의 Win32 API로는 CreateSemaphore 와 ReleaseSemaphore가 존재하기 때문이죠.

따라서 Semaphore 클래스가 필요하다면 Win32 API를 P/Invoke로 호출하는 wrapper 클래스를 만들면 되겠습니다. 

이 소스에서는 System.Threading namespace에 직접 Semaphore를 추가하고 있습니다. 원래는 일개 평민은 System namespace를 건드리면 안 되겠지만, .net CF와 일반 프레임워크 간의 호환성을 위해서 침범했다고 합시다.

주의: 내부적으로 호출하는 Win32 함수에 대한 에러 처리가 되어 있지 않습니다.

코드 보기


저작자 표시 비영리 동일 조건 변경 허락


Windows Mobile 6.0 SDK 를 설치하셨다면, 아래 위치에 샘플 소스코드가 같이 설치됩니다.

64 비트 Windows의 경우:
C:\Program Files (x86)\Windows Mobile 6 SDK\Samples\PocketPC\CS\GPS

32 비트 Windows의 경우:
C:\Program Files\Windows Mobile 6 SDK\Samples\PocketPC\CS\GPS

위도, 경도, 고도 정도만 측정하는 경우라면 이 소스를 사용해도 괜찮을거 같네요.

저작자 표시 비영리 동일 조건 변경 허락


이번 글에서는 Windows Mobile 휴대폰에서 기지국 정보를 구하는 방법을 소개합니다.

3G 네트워크에서는 기지국 하나가 커버할 수 있는 반경이 2-3km 정도 되기 때문에 기지국 정보만으로도 제한적인 위치 정보 기반 서비스를 할 수 있습니다. 특히 지하에서는 전파 전달이 잘 되지 않기 때문에 곳곳에 기지국을 설치해야 하죠. 때문에 기지국 ID를 알아낼 수 있다면 사용자가 현재 어느 지하철 역에 있는지, 어느 쇼핑몰 안에 있는지, 어느 대학교 안에 있는지를 구분해서 서비스를 제공할 수 있을 것입니다. 지하철에서는 배차 정보나 행선지 찾기 서비스에 응용할 수도 있고, 쇼핑몰에서는 약도나 상품 검색 서비스를 제공할 수 있을 것입니다.

C#으로 Cell ID를 가져오는 방법은 생각보다 복잡합니다. P/Invoke 라는 기술을 사용해야 하는데요. C 언어와 32비트 CPU에 대한 이해가 없으면 헤맬 가능성이 높습니다.

스크린 샷은 다음과 같습니다. 심플하게 MCC/MNC, LAC, CellId 를 찍어 주고 있습니다.

MCC는 국가 코드입니다. 450번이 우리나라인가봐요.
MNC는 통신망 코드입니다. 5번은 SKT 입니다. 전체 코드는 http://en.wikipedia.org/wiki/Mobile_Network_Code 에 나열되어 있습니다.
LAC하고 CellId가 지역/기지국 정보입니다.


코드에 대한 설명을 시작하겠습니다. 

너무 길어서 가려둡니다


저작자 표시 비영리 동일 조건 변경 허락

1 2 3 4 5  ... 20 
BLOG main image
michgan software studio
Copyright (c) 1992-2008 michgan
by michgan

카테고리

분류 전체보기 (60)
release (34)
document (22)
review (1)