Android/Porting2013. 9. 24. 09:53


안드로이드 오픈소스를 풀빌드하려고 하면 몇시간씩 걸리게 된다. 최초 빌드는 그렇게하겠지만 일부만 수정한 경우는 일부만 빌드하고자할것이다. 

1. 안드로이드 소스 디렉토리로 이동한다.

2. 빌드환경을 셋팅

  #. build/envsetup.sh 

3. 빌드타겟을 설정한다. 환경마다 조금씩 다르겠지만 choosecombo나 lunch로 하게 되어 있다.

4. 부분빌드를 수행한다.

부분빌드는 Android.mk파일을 대상으로 진행한다. 빌드하고자 하는 부분의 Android.mk파일을 mmm으로 실행한다.

#mmm packages/app/Launcher2

mm은 해당 경로로이동 후 빌드하는것으로 mmm과 이 부분만 제외하고 동일한 작업을 한다.

빌드결과는 다음 경로아래에 lib이나 app에 위치하게 된다.

out/target/product/MODELNAME/system


Posted by 삼스
Windows2013. 9. 13. 11:46


http://msdn.microsoft.com/en-us/library/windows/apps/hh913756.aspx

윈도우 스토어앱을 위한 푸시서비스에 대한 MS문서 정리임


윈도우푸시서비스는 3rd party개발자가 자신의 클라우스서비스를 통해 토스트, 타일, 뱃지 또는 데이터를 전송할 수 있는 방안을 제공한다. 

어떻게 동작하나?

다음 그림이 설명하고 있다.

1. 앱이 Notification Client Platform에 푸시채널을 요청한다.

2. Notification Client Platform은 WNS에 새로운 푸시채널을 질의하여 URI형태로 반환한다.

3. 앱은 푸시채널URI를 얻게 된다.

4. 당신의 클라우드서비스에 이 URI를 전달한다. 이 때 보안은 알아서 하길 바란다.

5. 클라우드서비스에서 업데이트내용을 전송하려면 채널URI로 SSL을 통해 HTTP POST request를 수행한다. 이 과정은 인증이 필요하다.

6. WNS는 request를 받아서 해당 디바이스에 전달한다.


이와 같이 안드로이드 GCM이나 애플의 APNS와 동작구조은 대동소이하다.

앱등록 및 클라우드서비스의 credential얻기

WNS로 푸시를 전송하기 전에 앱을 윈도우 스토어 대시보드에 반드시 등록해야 한다. 그러면 클라우드서비스에서 WNS에 인증할때 사용 가능한 credential을 발급해준다. 이 credential은 Package Security Identifier(SID)와 secret Key를 포함한다. https://appdev.microsoft.com/StorePortals/ko-KR/Home/Index?wa=wsignin1.0 <-여기(Windows Store app development)페이지에 가서 Windows Dev Center -> Dashboard에서 이 과정을수행할 수 있다.

앱과 credential은 쌍으로 관리되며 다른 앱에는 사용될 수 없다.
앱 등록에 대한 더 자세한 사항은 http://msdn.microsoft.com/en-us/library/windows/apps/hh465407.aspx <- 여기를 참조.

푸시채널 요청





Posted by 삼스
Windows2013. 9. 12. 17:54


Bouncy Castle은 자바와 C#을 지원하는

암호화관련 거의 모든 API들이 총 망라되어 있는 오픈소스이다.

아래 주소는 그 중에서 WinRT와 WP8의 오피셜사이트이다.

http://w8bouncycastle.codeplex.com/



Posted by 삼스


EPG를 추출하기 위해 필요한 DVB-SI에 대해 분석한다.

주요 섹션은 다음과 같다.

NIT 현재 네트워크(방송국)에서 송출되는 모든 네트워크정보를 표현 BAT 1개이상의 채널을 하나의 그룹으로 지정함 SDT 서비스(채널)의 정보를 포함 EIT 특정서비스에 해당하는 프로그램(이벤트)의 정보를 송출함. TDT, TOT는 시간값을 송출하며 수신기는 자신의 시간을 이 값을 사용하며 맞출 수 있다.


NIT나 BAT는 부가적인 정보로 간주하고 SDT와 EIT로 프로그램가이드를 구성하는 방법에 대해 정리하겠다.


SDT 구조

service_description_section(){ 

    table_id

    section_syntax_indicator
    reserved_future_use
    reserved
    section_length
    transport_stream_id
    reserved
    version_number
    current_next_indicator
    section_number
    last_section_number
    original_network_id
    reserved_future_use
    for (i=0;i<N;i++){

        service_id 

        reserved_future_use 

        EIT_schedule_flag 

        EIT_present_following_flag 

        running_status 

        free_CA_mode 

        descriptors_loop_length 

        for (j=0;j<N;j++){

            descriptor()
        }

    }

    CRC_32 


PID는 0x011이며 table_id는 0x42(actual), 0x46(other)가 있다.

EIT_schedule_flag : 1이면 서비스의 EIT schedule 정보가 현재 TS에 포함됨을 의미한다. TR101 211에 더 자세한 정보가 기술되어 있다. 0이면 현재 TS에 EIT schedule정보가 없음을 의미한다.

EIT_present_following_flag : 1이면 서비스의 EIT present following정보가 현재 TS에 포함됨을 의미한다. TR101 211에 더 자세한 정보가 기술되어 있다. 0이면 현재 TS에 EIT present following 정보가 없음을 의미한다.

running_status : 서비스의 현재 상태를 나타낸다.

 0

undefined 

 1

not running 

 2

starts in a few seconds(e.g. for video recording) 

 3

pausing 

 4

running 

 5

reserved for future use 

free_CA_mode : 켄텐츠가 스크램블되었는지를 나타냄.


EIT

PID는 0x0012이고 table_id다음과 같다.

  1. 1)  actual TS, present/following event information = table_id = "0x4E";

  2. 2)  other TS, present/following event information = table_id = "0x4F";

  3. 3)  actual TS, event schedule information = table_id = "0x50" ~ "0x5F";

  4. 4)  other TS, event schedule information = table_id = "0x60" ~ "0x6F". 


event_information_section(){ 

    table_id

    section_syntax_indicator
    reserved_future_use
    reserved
    section_length
    service_id

    reserved
    version_number 

    current_next_indicator 

    section_number 

    last_section_number 

    transport_stream_id 

    original_network_id 

    segment_last_section_number 

    last_table_id 

    for(i=0;i<N;i++){

        event_id
        start_time
        duration
        running_status
        free_CA_mode
        descriptors_loop_length
        for(i=0;i<N;i++){
            descriptor()
        }

    }

    CRC_32 


service_id : 이벤트가 소속되는 서비스(채널)아이디

segment_last_section_number : sub_table을 가지는 경우 마지막섹션의 개수. 아닌경우 last_section_number와 동일하다.

last_table_id : table이 하나로만 구성되면 이 table과 동일 table_id이며 여러개로 구성된 경우 마지막 table_id를 나타낸다.

event_id : 이벤트를 구별하는 아이디

start_time : 프로그램 시작시간, UTC시간이며 시작시간이 정해지지 않은 경우 모든 비트가 1이다. 앞에서부터 16비트가 년월일이고 MJD포맷이다. 이어서 24비트가 4비트씩 시분초를 의미한다.

EXAMPLE 1: 93/10/13 12:45:00 is coded as "0xC079124500".

duration : 프로그램 방영시간.  24비트로 4비트씩 시분초를 의미한다.

running_status : 현재 상태를 의미한다.

free_CA_mode : 스크램블 여부를 의미한다.

 

Descriptors

각 섹션별로 추가적인 정보들이 디스크립터로 기술이 된다. 상당히 많은 디스크립터들이 정의되어 있으며 이 중에 필요한 디스크립터들만 추출해도 EPG정보구성에는 문제가 없다.

디스크립터 목록에 대한 정보는 tr101211에 기술되어 있고, 디스크립터에 대한 상세한 구조는 en_300468에 기술되어 있다.

SDT와 EIT의 디스크립터 목록은 다음과 같다.


SDT descriptors

- Announcement support descriptor

- Bouquet name descriptor

- CA identifier descriptor

- Country availability descriptor

- Data broadcast descriptor

- Linkage descriptor

- Mosaic descriptor

- Multilingual service name descriptor

- NVOD reference descriptor

- Service descriptor

- Service availability descritor

- Telephone descriptor

- Timeshifted service descriptor


EIT descriptor

- CA identifier descriptor

- Component descriptor

- Content descriptor

- Data broadcast descriptor

- Extended event descriptor

- Linkage descriptor

- Multilingual component descriptor

- Parental rating descriptor

- PDC decriptor

- Short event descriptor

- Telephone descriptor

- Time shifted event descriptor



Posted by 삼스