KR20070121707A - 자원-제약 셋톱 박스 환경에서 애플리케이션을 실행하는시스템 - Google Patents
자원-제약 셋톱 박스 환경에서 애플리케이션을 실행하는시스템 Download PDFInfo
- Publication number
- KR20070121707A KR20070121707A KR1020077022439A KR20077022439A KR20070121707A KR 20070121707 A KR20070121707 A KR 20070121707A KR 1020077022439 A KR1020077022439 A KR 1020077022439A KR 20077022439 A KR20077022439 A KR 20077022439A KR 20070121707 A KR20070121707 A KR 20070121707A
- Authority
- KR
- South Korea
- Prior art keywords
- top box
- application
- set top
- uipane
- graphics
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/485—Task life-cycle, e.g. stopping, restarting, resuming execution
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N7/00—Television systems
- H04N7/20—Adaptations for transmission via a GHz frequency band, e.g. via satellite
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/40—Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
- H04N21/43—Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
- H04N21/443—OS processes, e.g. booting an STB, implementing a Java virtual machine in an STB or power management in an STB
- H04N21/4437—Implementing a Virtual Machine [VM]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N5/00—Details of television systems
- H04N5/44—Receiver circuitry for the reception of television signals according to analogue transmission standards
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N7/00—Television systems
- H04N7/16—Analogue secrecy systems; Analogue subscription systems
- H04N7/162—Authorising the user terminal, e.g. by paying; Registering the use of a subscription channel, e.g. billing
- H04N7/163—Authorising the user terminal, e.g. by paying; Registering the use of a subscription channel, e.g. billing by receiver means only
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Astronomy & Astrophysics (AREA)
- Stored Programmes (AREA)
- User Interface Of Digital Computer (AREA)
- Two-Way Televisions, Distribution Of Moving Picture Or The Like (AREA)
Abstract
특히 자원-제약 셋톱 박스 환경에서 사용하도록 적응된 시스템이 설명된다. 시스템은 특히 셋톱 박스 환경에서 사용하도록 구성된 해석기 기반 공통 언어 런타임(CLR)을 사용한다. 시스템은 또한 특히 셋톱 박스 환경에서 사용하도록 구성된 유일 애플리케이션 관리자 및 UIpane 관리자를 포함한다. 애플리케이션 관리자는 현재 애플리케이션의 사용자 인터페이스 프리젠테이션과 충돌하는 사용자 인터페이스 프리젠테이션을 다른 애플리케이션이 나타낼 때 현재의 애플리케이션을 정지시킨다. 또한, 시스템은 사용자가 컬러 팔레트 및 해상도 등을 변경할 수 있게 하기 위해 전환 효과를 제공하는 그래픽스 기능을 포함한다. 그래픽스 기능은 애플리케이션이 더욱 빨리 실행할 수 있게 하는 것이 가능할 때마다 (셋탑 박스의 라인 제어 레지스터와 같은) 셋탑 박스의 그래픽스 능력을 직접 사용한다.
해석기 기반 공통 언어 런타임(CLR), 애플리케이션 관리자, UIpane 관리자, 전환 효과, 그래픽스 기능, 라인 제어 레지스터(LCR)
Description
본 발명은 자원-제약 셋톱 박스 환경과 같은 자원-제약 환경에서 애플리케이션을 개발하고 실행하는 것에 관한 것이다.
셋톱 박스는 (전파 중계국(head-end) 분포 위치와 같은) 소스로부터 매체 정보를 수신하고, 그 매체 정보를 처리해서, 처리된 매체 정보를 (종래의 텔레비전 유닛과 같은) 출력 장치 상에 나타낸다. 기존의 그리고 장래의 텔레비전 셋톱 박스가 더욱 다기능의 흥미있는 애플리케이션을 실행할 수 있게 하는 기능을 제공하라는 요구가 증가하고 있다. 예시적인 애플리케이션은 게임 애플리케이션, 주문형 비디오(VOD) 및 전자 프로그램 안내(EPG) 애플리케이션, 뉴스 프리젠테이션 애플리케이션 등을 포함한다.
셋톱 박스의 다기능을 개선하는 한가지 방법은 셋톱 박스 플랫폼 내의 "풀 스케일(full scale)" 데스크톱 프로그래밍 환경의 특징을 두 배로 하는 것이다. 오늘날 사용중인 한 예시적인 프레임워크는 마이크로소프트사의 .NET 프레임워크이다. .NET 기술은 실행을 구현하기 위해 사용된 물리적 플랫폼 내의 근본적인 복잡도에 대체로 무관한 방식으로 프로그램을 실행하는 가상 기계(VM) 환경을 제공한 다. 광범위한 개요로서, .NET 프레임워크는 컴파일러를 사용하여 소스 코드(예를 들어, C# 소스 코드)를 중간 언어(IL) 코드 및 메타데이터로 변환한다. 실행 단계에서, .NET 프레임워크는 공통 언어 런타임(common language runtime: CLR) 로더(loader) 및 JIT(just-in-time) 컴파일러를 사용하여 IL 및 메타데이터를 특정 실행 플랫폼에 특정된 고유 코드로 변환한다.
그외 다른 기술은 자원-제약 컴퓨팅 장치에서 사용하기 위해 상술된 가상 기계를 확장한다. (자원-제약 환경에서 JIT 컴파일러의 용도를 이용하는 그러한 기술은 여기에서 "콤팩트 JIT-기반 기술"이라 칭해진다.) 예를 들어, 마이크로소프트사의 .NET 콤팩트 프레임워크(.NET CF)는 자원-제약 컴퓨팅 장치에서 사용하기 위해 상술된 "풀 스케일" .NET 프레임워크를 적응시킨다. 그러한 콤팩트 JIT-기반 기술은 공통 언어 런타임(CLR)의 풀 .NET 프레임워크 아키텍처를 승계할 수 있고, .NET 프레임워크 클래스 라이브러리의 서브셋을 지원하며, .NET CF 전용으로 설계된 클래스를 포함한다. 동작시에, 그러한 콤팩트 JIT-기반 기술은 JIT 컴파일러를 사용하여 중간 언어 명령어를 실행할 수 있다. 지원된 장치는 (포켓 PC와 같은) 개인 휴대 정보 단말기(PDA), 이동 전화, 몇몇 셋톱 박스, 자동 컴퓨팅 장치 및 주문 설계된 임베디드(embedded) 장치를 포함한다. 일반적으로, (.NET CF와 같은) 그러한 콤팩트 JIT-기반 기술은 최소한 8-16 MB의 RAM을 갖는 시스템에 최적하게 설계된다.
상기 콤팩트 JIT-기반 기술은 많은 종류의 셋톱 박스에서 실행할 수 있는 해결책을 제공한다. 그러나, 이 기술은 특별히 제한된 양의 자원을 갖는 셋톱 박스 와 같이, 모든 셋톱 박스에서 사용하기에 완전히 만족스럽지는 않다. 예를 들어, 미합중국 일리노이주(IL) 샤움버그(Schaumburg)에 위치한 모토롤라사에 의해 제공되어 널리 보급된 DCT 2000 셋톱 박스는 27 MHz CPU 및 제한된 양의 메모리(예를 들어, 1.5 MB의 RAM 및 1.25 MB의 플래시 메모리)를 포함한다. 이들 자원은 콤팩트 JIT-기반 애플리케이션을 실행하기 위한 최적한 플랫폼을 제공하지는 않는다. 예를 들어, 종래의 .NET 환경에서 사용된 JIT는 메모리 내에 오리지널 IL 어셈블리 및 또한 "JIT 컴파일된(jitted)" 고유 코드를 유지할 필요가 있다. 이 요구는 자원-제약 셋톱 박스의 메모리 자원에 과중한 부담을 줄 수 있다. 더욱이, JIT-기반 기술은 모든 관리 코드를 실행 이전에 JIT 컴파일함으로써 동작한다. 이것은 애플리케이션을 시작할 때 바람직하지 않은 지연을 생기게 한다.
상술된 요인의 결과로서, 매우 자원 제약적인 셋톱 박스를 위한 콤팩트 JIT-기반 기술의 사용은 불량한 성능을 초래한다. 예를 들어, 이 해결책은 애플리케이션이 용납할 수 없을 정도로 느리게 실행하게 할 수 있다. 이 해결책은 또한 몇 가지 새로운 애플리케이션 특징의 개발을 무조건 못하게 할 수 있다.
적어도 상술된 이유로, 예시적으로, 자원-제약 셋톱 박스 상에서 및 그외 다른 자원-제약 환경에서 애플리케이션을 개발하고 실행하기 위한 더욱 만족스러운 시스템이 필요하다.
한 예시적인 구현에 따르면, 셋톱 박스 시스템이 여기에서 설명되는데: 이 셋톱 박스 시스템은 셋톱 박스에 의해 제공된 하드웨어 기능을 나타내는 하드웨어 계층, 및 셋톱 박스 환경에서 사용하기 위해 구성된 해석기 기반의 코어 런타임 엔진(예를 들어, 해석기 기반의 공통 언어 런타임)을 포함한다. 셋톱 박스 시스템은 하드웨어 계층 및 해석기 기반의 코어 런타임 엔진을 사용하여 함수를 수행할 수 있는 애플리케이션을 실행하도록 구성된다.
다른 예시적인 특징에 따르면, 셋톱 박스 시스템은 5 MB 미만의 메모리를 포함한다.
다른 예시적인 특징에 따르면, 셋톱 박스 시스템은 셋톱 박스 환경에서 사용하기 위해 구성되어, 애플리케이션을 관리하는 애플리케이션 관리자를 더 포함한다.
다른 예시적인 특징에 따르면, 애플리케이션 관리자는 다른 애플리케이션이 활성화될 때 현재의 애플리케이션을 정지시키고, 그외 다른 애플리케이션이 비활성화될 때 현재의 애플리케이션을 재개하도록 구성된다.
다른 예시적인 특징에 따르면, 셋톱 박스 시스템은 셋톱 박스 환경에서 사용하기 위해 구성되어, 사용자 인터페이스 프리젠테이션을 관리하는 UIpane 관리자를 더 포함한다.
다른 예시적인 특징에 따르면, 셋톱 박스 시스템은,
한 그래픽 프리젠테이션에서 다른 그래픽 프리젠테이션으로 전환할 때 (데시메이션(decimation), 페이딩(fading), 스크롤링(scrolling), 익스포징(exposing) 등과 같은) 전환 효과(transition effect) 제공;
그래픽 프리젠테이션의 컬러 팔레트 변경;
그래픽 프리젠테이션의 해상도 변경; 및
폰트에 안티-에일리어싱 제공
중의 하나 이상을 수행하도록 구성된 그래픽스 기능을 더 포함한다.
다른 예시적인 특징에 따르면, 셋톱 박스 시스템의 상술된 하드웨어 기능은 표시 장치 상의 각 라인에 대응하는 메모리 위치를 제공하는 라인 제어 레지스터(LCR)를 포함하고, 셋톱 박스 시스템은 LCR을 조작 처리함으로써 그래픽 효과를 제공하도록 구성된 그래픽스 기능을 더 포함한다.
부가적인 예시적 구현은 다음에서 설명된다.
도 1은 여기에서 설명된 개선된 시스템을 구현하는 셋톱 박스를 포함하는 시스템의 개략도.
도 2는 도 1의 시스템에서 사용된 예시적인 셋톱 박스의 물리적 구성의 개략도.
도 3은 도 2의 셋톱 박스에 의해 구현될 수 있는 소프트웨어 기능의 계층을 도시한 도면.
도 4는 도 3의 기능에 의해 제공된 UIpane 클래스의 계층 편성을 도시한 도면.
도 5는 도 3의 기능에 의해 제공된 애플리케이션을 로드하고 실행하기 위해 사용된 메카니즘을 도시한 도면.
도 6은 도 3의 기능에 의해 제공된 탐색(navigation) 기능의 동작을 도시한 도면.
도 7은 도 3의 기능의 동작 방식을 설명하는 절차를 도시한 도면.
명세서 및 도면에서, 유사한 컴포넌트 및 특징부에는 동일한 참조번호가 사용된다. 참조번호 100번대는 도 1에서 처음 나온 특징부를 나타내고, 참조번호 200번대는 도 2에서 처음 나온 특징부를 나타내며, 참조번호 300번대는 도 3에서 처음 나온 특징부를 나타내는 등등으로 된다.
다음 설명은 셋탑 박스 환경 및 그외 다른 자원-제약 환경에서 애플리케이션을 개발하고 실행하는 시스템을 설명한다. 한 예시적인 구현에서, 시스템은 셋탑 박스 환경에서 사용하도록 적응된 해석기 기반의 공통 언어 런타임(CLR)을 사용한다. 예를 들어, 해석기 기반 CLR은 마이크로소프트사의 SPOT(Smart Personal Objects Technology) 기능을 사용하여 구현될 수 있는데, 이것에 제한되지는 않는다.
구현예들 중에서, 여기에서 설명된 시스템은 다음 특징을 제공한다:
· 시스템은 디지털 비디오 레코더(DVR) 애플리케이션, 튜닝-관련 애플리케이션, 부모 제어-관련 애플리케이션, 프로그램 안내 및 검색 애플리케이션, 주문형 비디오(VOD) 애플리케이션, 게임 애플리케이션, 정보(예를 들어, 뉴스) 프리젠테이션 애플리케이션, 투표 애플리케이션, 인스턴트 메신저(IM) 애플리케이션 및 그외 다수의 애플리케이션과 같은 풍부한 애플리케이션을 개발하기 위해 유연성 있고 효율적인 프레임워크를 제공한다. 시스템은 또한 (기타 언어들 중에서 특히) C# 언 어를 사용하여 쓰여진 사용자 애플리케이션을 지원한다.
· 시스템은 ("풀 스케일" .NET 프레임워크 또는 그것의 공지된 콤팩트 버전에 비해) 셋탑 박스 상의 프로그래밍을 단순화하기 위해 새로운 "TV" 명칭공간(namespace)을 제공한다. 전체적으로, 명칭공간에 의해 참조된 기능은 풀 스케일 .NET 환경 또는 그 콤팩트 버전에 비해 자원을 훨씬 덜 소모한다. 이와 동시에, 시스템은 .NET 프레임워크를 보완하는 프로그래밍 프레임워크를 사용하여, 프로그래머가 거의 추가 훈련없이 셋탑 박스용 프로그래밍을 시작할 수 있게 한다.
· 시스템은 동시에 실행하는 다수의 애플리케이션을 지원하는 유일 애플리케이션 관리자를 제공한다. 그외 다른 특징 중에서 특히, 애플리케이션 관리자는 (상이한 애플리케이션들이 상이한 시스템 컬러 팔레트, 상이한 표시 해상도 등을 사용할 수 있을지라도) 동시에 실행하는 상이한 애플리케이션들을 관리하기 위해 정지/재개 메카니즘 및 통지 프레임워크를 제공한다. 예를 들어, (제2 애플리케이션과 관련된) 제2 사용자 인터페이스 프리젠테이션이 (제1 애플리케이션과 관련된) 제1 사용자 인터페이스 프리젠테이션을 대신할 때, 시스템은 자동으로 제1 애플리케이션을 정지하여, 제2 애플리케이션이 시스템 처리 능력의 대부분을 수용할 수 있게 한다. 이러한 방식으로, 시스템은 그로 인해 사용자 인터페이스 프리젠테이션이 서로 겹치지 않게 할 수 있다.
· 시스템은 제한된 셋톱 박스 자원으로 (셋톱 박스 환경에 맞춰진) 더욱 적절한 사용자 제어부를 제공하기 위해 UIpane 관리자를 제공한다. 예를 들어, 시스템은 새로운 UIpane 폼(form)을 채택한다.
· 시스템은 셋톱 박스 하드웨어에 되도록 많은 렌더링을 할당하는 그래픽스 기능을 제공한다. 이것은 최소의 자원을 소모하면서 매우 빠르게 실행하는 그래픽스 기능을 초래한다. 그외 다른 특징 중에서 특히, 그래픽스 기능은 전체 256색 지원을 제공하고, 한 애플리케이션에서 다른 애플리케이션으로 전환할 때 컬러 팔레트 및 해상도를 전환하는 능력을 제공한다. 그래픽스 기능은 또한 한 애플리케이션에서 다른 애플리케이션으로 전환할 때 전환 효과를 제공한다. 전환 효과는 셋톱 박스 라인 제어 레지스터(LCR)를 직접 조작함으로써 나타난다. 시스템은 또한 선, 타원, 둥글게 된 직사각형 등을 렌더링하는 알고리즘과 같은, 다른 시스템에서 제공된 가장 빠른 알고리즘들 중의 몇몇 알고리즘에 영향을 미친다.
· 시스템은 또한 자원-효율적 폰트 설치 및 관리 알고리듬, 및 자원-효율적 안티-에일리어싱된 트루 타입 폰트 렌더링 알고리듬을 제공한다. 자원 소모를 더욱 줄이기 위해, 시스템은 또한 폰트-스트리핑(stripping) 메카니즘을 사용하여 폰트 파일에서 정보의 일부를 제거한다.
여기에서 설명된 전략은 다수의 이점을 제공한다. 한가지 주요 이점에 따르면, 시스템은 매우 자원 제약적인 셋톱 박스에 관한 흥미있는 다기능 애플리케이션을 개발하기 위한 강력한 프레임워크를 제공한다. 이와 동시에, 시스템은 이전의 프레임워크를 보완하므로, 이들 프레임워크(및 C#과 같은 관련 프로그래밍 언어)에 관한 프로그래머의 기존의 지식에 영향을 미칠 수 있다.
전략의 추가 특징 및 부수적인 이점은 이 명세서에서 설명될 것이다. 애초에, 다음 설명은 주로 (상술된 SPOT 기술과 같은) 셋톱 박스 환경에서의 개발을 위 한 해석 기반 CLR 기술의 사용에 관련하여 주로 짜맞춰 졌지만, 다른 유형의 자원 효율적 기술이 시스템에 구성하기 위한 기반으로서 사용될 수 있다. 게다가, 그러한 다른 메모리 효율적 기술은 .NET 전형(또는 임의의 가상 기계 프레임워크 전형)을 채택할 필요가 없다. 더욱이, 시스템은 자원 제약적 환경에서의 배치에 가장 잘 어울리지만, 그러한 환경에 제한되지 않고; 예를 들어, 시스템은 풀 .NET 배치를 수용하기에 충분한 처리 자원을 갖는 환경에서 사용될 수 있다. 더욱이, 시스템은 임의 종류의 착용가능 장치(예를 들어, 손목시계 장치), 개인 휴대 정보 단말기(PDA) 장치, 이동 전화 등과 같은 (셋톱 박스 이외의) 다른 장치 상에서 사용될 수 있다.
용어와 관련하여, 매체 정보라는 용어는 사용자에 의해 소모될 수 있는 전자 형식으로 나타낸 임의의 데이터를 나타내는 말이다. 매체 정보는 오디오 자원(예를 들어, 음악, 낭송 작품 등), 정지 화상 자원(예를 들어, 디지털 사진 등), 동화상 자원(예를 들어, 시청각 텔레비전 프로그램 , 영화 등), 컴퓨터 프로그램(예를 들어, 게임 등) 등과 같은 오디오 및/또는 비디오 정보를 전달하는 임의의 정보를 포함할 수 있다.
UIpane이라는 용어는 사용자에게 프리젠테이션하기 위한 그래픽스 객체를 나타내는 말이다. 한 경우에, UIpane은 WindowsTM형 사용자 인터페이스 페인(pane)에 대응할 수 있다.
온 스크린 디스플레이(on screen display: OSD)라는 용어는 셋톱 박스에 의 해 가능해진 디스플레이 프리젠테이션을 나타내는 말이다.
상기 용어 이외에, 이 명세서는 많은 표준 .NET 용어를 사용한다. 독자는 David Chappell 저의 "Understanding .NET: A Tutorial and Analysis", Addison-Wesley 출판사, 2002; 및 David S. Platt 저의 "Introducing Mocrosoft .NET", Microsoft Press, 2003을 포함하여, .NET 개념의 배경 이해를 위한 몇 권의 입문서를 참조하기 바란다. .NET 환경에 관한 또 다른 추가 정보는 Microsoft의 MSDN 사이트에 의해 제공된 온라인인 Microsoft사의 기술 도서관에서 찾아볼 수 있다. 이 명세서 내의 보편적인 용어를 포함한 다음의 용어풀이는 MSDN 사이트에서 제공된 정보에서 얻어진다.
· 어셈블리는 한 유닛으로서 버전화되어 배치되는 하나 이상의 파일의 모음을 나타낸다. 어셈블리는 .NET 프레임워크 애플리케이션의 주요 구성 블록이다. 모든 관리 유형 및 자원은 한 어셈블리 내에 포함되고, 그 어셈블리 내에서만 액세스 가능한 것으로, 또는 다른 어셈블리들 내의 코드로부터 액세스 가능한 것으로 표시가 된다.
· C#("C sharp"으로 발음됨) 언어는 .NET 프레임워크 상에서 실행되는 애플리케이션을 구성하기 위해 설계된 하나의 프로그래밍 언어를 나타낸다. C 및 C++가 발전된 C#은 안전하고 객체 지향적인 유형이다.
· 콜백(callback) 함수는 규정된 이벤트가 발생할 때 시스템 또는 서브시스템이 호출하는 애플리케이션 정의 함수를 나타낸다.
· 클래스는 데이터(상수 및 필드) 및 비헤비어(behavior)(메소드, 속성, 인 덱서, 이벤트, 연산자, 인스턴스 생성자, 정적 생성자 및 소멸자)를 캡슐화하고 내포 유형(nested type)들을 포함할 수 있는 참조 유형(reference type)이다. 클래스 유형은 계승을 지원하는데, 이 메카니즘에 의해, 도출(derived) 클래스가 확장하여 베이스(base) 클래스를 특수화할 수 있다.
· 생성자는 클래스의 인스턴스가 선언될 때마다 자동으로 호출되는 특수 초기화 함수를 나타낸다. 생성자는 클래스 자체와 동일한 이름을 가져야 하고, 값을 반환하지 않아야 한다.
· 델리게이트(delegate)는 C++ 함수 포인터의 관리 버전인 참조 유형이다.
· 공통 언어 런타임(CLR)은 관리 코드 실행의 중심에 있는 엔진을 나타낸다. 런타임은 교차-언어 통합, 코드 액세스 보안, 객체 수명 관리, 및 디버깅 및 프로파일링 지원과 같은 서비스를 관리 코드에 공급한다. 용어 "코어 런타임 엔진"은 상술된 서비스 유형을 제공하는, 따라서 CLR 기술을 포함하는, 하지만 CLR 기술에 제한되지 않는(실제로, .NET 기술에도 제한되지 않는) 기능을 설명하기 위해 여기에서 사용된다.
· 문맥(context)은 그 안에 상주하는 객체를 위한 환경을 정의하는 속성들의 순서화된 시퀀스를 나타낸다.
· 열거(enum)는 System.Enum으로부터 상속받고 하위 프리미티브 유형의 값에 교체 이름을 제공하는 값 유형의 특별한 폼을 나타낸다. 열거형은 이름, 하위 유형, 및 필드 집합을 갖는다.
· (Windows형 Form과 같은) 폼(form)은 애플리케이션들 내에서 또는 애플리 케이션들과 교차해서 일관된 비헤비어 및 사용자 인터페이스를 제공하는 합성 제어를 나타낸다.
· 가비지 컬렉션(garbage collection: GC)은 더 이상 사용되지 않는 객체를 제거하는 프로세스를 나타낸다.
· JIT 컴파일(compilation)은 실행 시간에 코드가 요구되는 시점에서 중간 언어(MSIL)를 기계 코드로 변환하는 (종래의 "풀 스케일" .NET 환경에서의) 컴파일을 나타낸다.
· 수명은 객체가 메모리 내에 할당될 때 시작하고, 가비지 컬렉터가 객체를 메모리에서 삭제할 때 끝나는 기간을 나타낸다.
· 관리 코드는 공통 언어 런타임 환경에 의해 실행되는 코드를 나타낸다. 관리 데이터는 공통 언어 런타임에 의해 관리되는 수명을 갖는 객체를 나타낸다.
· 명칭공간은 관련된 유형들을 그룹화하는 논리적 명명 체계를 나타낸다. .NET 프레임워크는 유형들을 관련된 기능의 논리적 카테고리로 그룹화하는 계층적 명명 체계를 사용한다.
· 개인(private) 어셈블리는 그 어셈블리와 동일한 디렉토리 구조에서 클라이언트에게만 이용가능한 어셈블리를 나타낸다.
· 리플렉션(reflection)은 실행 시간에, 어셈블리 및 그 안에 규정된 유형에 대한 정보를 얻어서, 유형 인스턴스를 생성하고, 호출하며, 액세스하는 프로세스를 나타낸다.
· URI(uniform resource identifier)는 구성요소 또는 속성을 유일하게 식 별하는 번호 또는 이름을 나타낸다. URI는 URN(uniform resource names) 및 URL(uniform resource locators)을 포함한다.
· 비관리 코드는 공통 언어 런타임 환경 밖에서 직접 실행되는 코드를 나타낸다.
· 확장성 생성 언어(XML)는 웹을 통해 전달하기에 가장 적합하게 된 표준 범용 문서 생성 언어(SGML)의 서브셋을 나타낸다. XML은 애플리케이션 또는 벤더에 관계없는 구조화 데이터를 기술하고 교환하는 균일한 방법을 제공한다.
이 명세서는 다음 섹션을 포함한다.
A. 시스템 개요(도 1 및 2)
A.1. 시스템
A.2. 셋톱 박스
B. 예시적인 시스템 소프트웨어 기능(도 3-6)
B.1. 기능의 개요
B.2. ApplicationBase 기능
B.3. UIpane 기능
B.4. 애플리케이션 관리자
B.4.1. 초기화 비헤비어
B.4.2. 실행 및 메모리 관리 비헤비어
B.4.3. 정지 및 재개 비헤비어
B.4.4. 언로딩/종료 비헤비어
B.4.5. 보조 비헤비어
B.4.6. 요약(도 5)
B.5. UIpane 관리자
B.5.1. UIpane 관리 비헤비어
B.5.2. 이벤트 라우팅 비헤비어
B.5.3. UIpane 포커스 및 탐색 비헤비어
B.6. 그래픽스 특징
B.6.1. 전환 효과
B.6.2. 팔레트 및 해상도 효과
B.6.3. Blt 효과
B.6.4. 폰트 렌더링 기능
C. 예시적인 동작 메소드(도 7)
D. 부록
D.1. UIpane 인터페이스
D.2. ABC_C0.TV.Lite.UIpanes
D.2.1. ABC_C0.TV.Lite.UIpanes 명칭공간 개요
D.2.2. ABC_C0.TV.Lite.UIpanes.UIpaneBase
D.2.3. ABC_C0.TV.Lite.UIpanes.Form
D.2.4. ABC_C0.TV.Lite.UIpanes.Control
D.2.5. ABC_C0.TV.Lite.UIpanes.Button
D.2.6. ABC_C0.TV.Lite.UIpanes.UipaneEventHandler
D.2.7. ABC_C0.TV.Lite.UIpanes.KeyEventHandler
D.2.8. ABC_C0.TV.Lite.UIpanes.Transition
D.2.9. ABC_C0.TV.Lite.UIpanes.TransitionEventHandler
D.2.10. ABC_C0.TV.Lite.UIpanes.ButtonStyle
D.2.11. ABC_C0.TV.Lite.UIpanes.Keys
D.3. ABC_C0.TV.Lite.Shell.TVLiteApplicationBase
D.4. ABC_C0.TV.Lite.Drawing 명칭공간
D.4.1. 개요
D.4.2. ABC_C0.TV.Lite.Drawing.Graphics 클래스
D.4.3. ABC_C0.TV.Lite에서 사용된 RLE 압축 화상 포맷
D.5. 폰트 메소드
D.5.1. 폰트 설치 및 설치해제
D.5.2. 그래픽스 객체 폰트-관련 메소드
D.6. 고유 이벤트 및 관리 비동기 콜백
A. 시스템 개요(도 1 및 2)
일반적으로, 도면과 관련하여 설명된 모든 기능은 소프트웨어, 펌웨어(예를 들어, 고정 논리 회로), 수동 처리, 또는 이들 구현의 조합을 사용하여 구현될 수 있다. 여기에서 사용된 "로직", "모듈" 또는 "기능"이라는 용어는 일반적으로 소프트웨어, 펌웨어, 또는 소프트웨어와 펌웨어의 조합을 나타낸다. 예를 들어, 소 프트웨어 구현의 경우에, "로직", "모듈" 또는 "기능"이라는 용어는 처리 장치 또는 장치들(예를 들어, CPU 또는 CPU들) 상에서 실행될 때 지정된 태스크를 수행하는 프로그램 코드(및/또는 선언형 명령어)를 나타낸다. 프로그램 코드는 하나 이상의 컴퓨터 판독가능 메모리 장치 내에 저장될 수 있다. 더욱 일반적으로, 로직, 모듈 및 기능을 별개의 유닛으로 분리하는 예시된 분리는 그러한 소프트웨어 및/또는 하드웨어의 실제 물리적 그룹화 및 할당을 반영할 수 있고, 또는 단일 소프트웨어 프로그램 및/또는 하드웨어 유닛에 의해 수행된 상이한 태스크의 개념적 할당에 대응할 수 있다. 도시된 로직, 모듈 및 기능은 (예를 들어, 처리 장치에 의해 구현되는 바와 같이) 단일 위치에 위치할 수 있고, 또는 여러 위치에 걸쳐 분포될 수 있다.
A.1. 시스템
도 1은 여기에서 설명된 개선된 기능이 배치될 수 있는 시스템(100)의 개요를 도시한 것이다. 개요로서, 시스템(100)은 결합 메카니즘(108)을 통해 소스(106)로부터 매체 정보(또는 다른 정보)를 수신하는 다수의 자원-제약 장치(102, 104)를 포함한다.
매체 분포의 경우에, 소스(106)는 매체 정보를 수신 장치(102, 104)에 전달하는 전파 중계국(head-end) 기반구조를 나타낼 수 있다. 예를 들어, 소스(106)는 종래의 케이블 매체 분포 기반구조, (위성 매체 분포 기반구조와 같은) 종래의 무선 매체 분포 기반구조 등을 나타낼 수 있다. 또는, 소스(106)는 하나 이상의 디지털 네트워크를 통해 매체 정보를 전달하는 매체 정보의 네트워크 소스를 나타낼 수 있다. 또 다른 경우에, 소스(106)는 수신 장치(102, 104)에 대해 로컬인 위치로부터 수신 장치(102, 104)에 매체 정보를 공급하는 (비디오 주크박스 등과 같은) 엔티티를 나타낼 수 있다. 여하튼, 소스(106)는, 예를 들어 전자 프로그램 안내(EPG)에 의해 반영된 것과 같은 고정 시간 스케쥴에 따라 다수의 방송 채널에서 수신 장치(102, 104)에 매체 정보를 전달할 수 있다. 또는, 소스(106)는 주문형 방법을 사용하여 수신 장치(102, 104)에 매체 정보를 전달할 수 있다.
결합 메카니즘(108)은 소스(106)를 수신 장치(102, 104)에 결합한다. 이 결합 메카니즘(108)은 상이한 기술 및 상업적인 환경에 적합한 상이한 방식으로 구현될 수 있다. 예를 들어, 결합 메카니즘(108)은 케이블 라우팅 기반구조, 위성 라우팅 기반구조, 지상 안테나 라우팅 기반구조 등(이들뿐만 아니라 그러한 라우팅 기반구조의 임의의 결합)과 같은 임의 종류의 종래의 분포 기반구조를 포함할 수 있다. 또는 결합 메카니즘(108)은 WAN(예를 들어, 인터넷), 인트라넷 등과 같은 디지털 네트워크(또는 네트워크들의 조합)를 포함할 수 있다. 디지털 가입자 선로(DSL) 기반구조가 정보를 퍼뜨리는데 사용되는 경우에, 결합 메카니즘(108)은 부분적으로 전화 결합 기반구조의 서비스를 이용할 수 있다.
이 명세서의 설명을 위해, 소스(106) 및 결합 메카니즘(108)은 수신 장치(102, 104)에 매체 정보의 케이블 또는 위성 전달을 제공한다는 단순화한 가정이 이루어질 것이다. 소스(106)와 수신 장치(104, 106) 사이의 링크는 (정보가 소스(106)에서 수신 장치로만 흐르는 경우에) 단방향 링크로서 구현될 수 있고, 또는 (수신 장치의 사용자도 데이터를 소스(106)에 보낼 수 있는 경우에) 양호하게 양방 향 링크로서 구현될 수 있다. 양방향 통신이 사용되는 경우에, 장치-소스 링크는 장치(102, 104)가 소스(106)로부터 매체 정보를 수신하기 위해 사용한 것과 동일한 채널에 의해, 또는 상이한 채널에 의해 구현될 수 있다.
수신 장치는 셋톱 박스(102)를 포함한다. 셋톱 박스(102)는 소스(106)로부터 매체 정보를 수신하고, (매체 정보를 디코딩하고, 잠재적으로 그것을 압축해제하는 것과 같이) 수신된 매체 정보에 다양한 처리를 수행하며, 처리된 정보를 출력 장치에 전송한다. 매체 분산 환경의 경우에, 출력 장치는 텔레비전 유닛(110)에 대응할 수 있다. 한 경우에, 셋톱 박스(102)는 텔레비전 유닛(110)으로부터 분리된 유닛으로서 구현될 수 있고, 그 텔레비전 유닛(110)은 임의 종류의 결합 메카니즘(예를 들어, 물리적 배선, 무선 결합 등)을 통해 셋톱 박스(102)에 결합할 수 있다. 다른 경우에, 셋톱 박스(102)는 텔레비전 유닛(110) 내에 통합 유닛으로서 구현될 수 있다. 또 다른 경우에, 셋톱 박스(102)로부터 매체 정보를 수신하는 출력 장치는 (컴퓨터 모니터와 같은) 종래의 텔레비전 이외의 다른 종류의 표시 장치, (스테레오 시스템과 같은) 오디오 출력 장치 등을 포함할 수 있다.
기타 수신 장치(104)는 임의 종류의 착용가능 처리 메카니즘(예를 들어, 마이크로소프트의 SPOT 시계와 같은 손목시계)과 같은 처리 및 출력 기능을 갖는 임의의 메카니즘, 이동 전화, 개인 휴대 정보 단말기(PDA), 태블릿형 장치 등을 포함할 수 있다. 그러나, 설명을 용이하게 하기 위해, 이 명세서의 나머지에서는 수신 장치가 (설명된 바와 같이, 텔레비전 유닛(110)으로부터 분리되거나 텔레비전 유닛(110)과 통합될 수 있는) 셋톱 박스(102)에 대응하는 것으로 가정할 것이다.
셋톱 박스(102)는 텔레비전 유닛(110)의 표시면(114) 상에 사용자 인터페이스 프리젠테이션(112)을 나타낼 수 있는 (설명될) 기능을 포함한다. 표시면(114)은 또한 여기에서 OSD(on-screen display)라 칭해진다. 사용자는 원격 제어 장치(116) 또는 소정의 다른 종류의 입력 장치를 통해 사용자 인터페이스 프리젠테이션(112)과 상호작용할 수 있다. 예를 들어, 셋톱 박스(102)는 그 하우징 안에 직접 통합된 입력 키(도시되지 않음)를 포함할 수 있다.
A.2. 셋톱 박스
도 2는 예시적인 셋톱 박스(102)의 구성을 도시하고 있다. 셋톱 박스(102)는 아래에서 식별되는, 자신에게 귀속된 태스크를 수행하는 다수의 모듈을 포함할 수 있다. 우선, 셋톱 박스는 인터페이스 모듈(202)을 포함할 수 있다. 인터페이스 모듈(202)은 임의의 결합 메카니즘을 사용하여 소스(106)로부터 매체 정보를 수신하는 임의의 기능을 나타낼 수 있다. 예를 들어, 인터페이스 모듈(202)은 DSL 모뎀, 케이블 모뎀, 무선 네트워크 인터페이스, 이더넷 NIC, 또는 다른 종류의 네트워크 인터페이스 장비를 포함할 수 있다.
· 셋톱 박스(102)는 또한 매체 정보의 디코딩, 매체 정보의 잠재적인 압축 해제 등과 같이, 수신된 매체 정보에 임의 종류의 초기 처리를 수행하는 튜너/디코더 모듈(204)을 포함할 수 있다. 방송 서비스의 경우에, 튜닝/디코딩 모듈(204)은 (원하는 채널을 제공하는 규정된 물리적 주파수에 튜닝하는 것 등과 같은) 임의 종류의 튜닝 메카니즘을 통해 매체 정보의 하나 이상의 채널을 선택할 수 있다. 매체 정보의 네트워크 전달의 경우에, 튜닝/디코딩 메카니즘은 (예를 들어, 매체 정 보의 규정된 유니캐스트 또는 멀티캐스트 소스에 "튜닝"함으로써) 채널을 수신하기 위한 가상 튜닝 메카니즘에 의존할 수 있다.
· 셋톱 박스(102)는 셋톱 박스(102)의 기능을 구현하기 위한 명령어를 실행하는 하나 이상의 프로세서(206)를 포함할 수 있다.
· 셋톱 박스(102)는 (RAM 메모리, 플래시 메모리 등과 같은) 메모리(208)를 포함할 수 있다. 메모리(208)의 일부분은 정보가 디코딩되기 전에 매체 정보를 저장하는 FIFO형 버퍼(도시되지 않음)를 포함할 수 있다. 메모리의 다른 부분은 라인 제어 레지스터(LCR)(210)를 포함할 수 있다. LCR(210)은 출력 장치의 표시면 상의 각 라인에 대응하는 각각의 메모리 위치를 포함한다. 셋톱 박스(102)는 LCR(210)을 사용하여 출력 장치에 정보를 렌더링할 수 있다. 설명되는 바와 같이, 셋톱 박스(102)는 또한 LCR(210)을 조작처리함으로써 (전환 효과와 같은) 다양한 그래픽스 효과를 제공할 수 있다.
· 셋톱 박스(102)는 하나 이상의 입력 장치(예를 들어, 원격 제어기(116) 등)를 통해 사용자와 접속하는 I/O 인터페이스(212)를 포함할 수 있다.
· 셋톱 박스(102)는 텔레비전(110)(또는 다른 출력 장치)에 적절한 포맷으로 매체 정보를 제공하는 A/V 인터페이스 모듈(214)을 포함할 수 있다.
· 셋톱 박스(102)는 임의 종류의 데이터 및/또는 프로그램 정보를 저장하는 선택사양의 로컬 저장부(216)를 포함할 수 있다.
· 셋톱 박스(102)는 도면에 구체적으로 열거되지 않은 여러가지 기타 모듈(218)을 포함할 수 있다. 예를 들어, 셋톱 박스(102)는 튜닝/디코딩 모듈(204) 로부터의 매체 정보의 비디오 성분을 그래픽스 정보와 결합하는 그래픽스 합성기를 포함할 수 있다. 그래픽스 정보는 매체 정보 위에 겹쳐지는 여러가지 사용자 인터페이스 프리젠테이션을 포함할 수 있다.
마지막으로, 셋톱 박스(102)는 상기 식별된 컴포넌트들을 함께 결합하는 하나 이상의 버스(220)를 포함할 수 있다.
광범위한 셋톱 박스에 관한 추가 정보는 온라인 TV 사전과 같은 다수의 소스에서, "What are Set-top Boxes"라는 제목의 온라인 기사에서 찾아볼 수 있다.
여하튼, 아래에 설명될 시스템은 (자원이 제약된 박스에 제한되지는 않지만) 특히 처리 차원이 제약된 셋톱 박스에 적합하다. 예를 들어, 모토롤라사에 의해 생산되어 널리 보급된 DCT 2000 박스는 제한된 자원을 갖는다. 이 박스의 프로세서는 27 MHz에서 동작하고, 메모리는 1.5 MB의 RAM 및 1.25 MB의 플래시 메모리를 포함한다. 본 발명이 직면한 도전과제는 애플리케이션을 개발하고 실행하기 위한 이들 종류의 자원-제약 환경에 다양한 기능을 적절하게 제공하는 것이다.
한 예시적인 구현에 따르면, 시스템은 셋톱 박스 환경에서 사용하도록 적응된 해석기 기반의 공통 언어 런타임(CLR)을 이용할 수 있다. 이것은 상기 요약된 콤팩트 JIT(just-in-time) 기반 방식과 대조적이다. JIT 기반 방식에서, 플랫폼은 애플리케이션의 시작 전에 모든 관리 코드의 JIT-컴파일을 필요로 한다. 이것은 최소한 2가지의 단점을 갖는다. 첫째, JIT-컴파일은 애플리케이션이 실행되기 전에 지연(lag)을 생성한다. 둘째, JIT-컴파일은 오리지널 어셈블리 및 "JIT 컴파일된" 고유 코드를 저장하기 위해 상당한 양의 메모리를 필요로 한다. 이에 반해, 해석기 기반 CLR은 조금씩 해나가는 식으로, 즉 필요한 대로 코드를 해석함으로써, 코드의 해석 및 실행을 제공한다. 이것은 애플리케이션을 시작하는데 필요한 시간 및 애플리케이션의 메모리 요구를 감소시키는데; 후자의 장점은 제한된 메모리 자원을 갖는 자원-제약 장치에 특히 유익하다.
해석기 기반 CLR은 상이한 기술을 사용하여 구현될 수 있다. 한 예시적이고 비제한적인 경우에, 해석기 기반 CLR은 마이크로소프트사의 SPOT(Smart Personal Objects Technology)에 의해 구현될 수 있다. SPOT 기술은 Donald Thomson에 의한 "Smart Personal Object Technology(SPOT): Part I: An introduction to hardware, network, and system software"라는 제목의 온라인 기사를 포함하여 다수의 소스에서 설명된다. .NET 임베디드(embedded) 기술을 설명하는 문헌은 SPOT 기술에 관련된다. 더욱 구체적으로, 워싱턴 시애틀에 있는 netcpuTM 회사는 SPOT 기술에 관련된 netcpuTM 제품 및 관련 SDK를 제공한다.
상술된 기술-특정 구현은 단지 설명을 위한 것이다. 기타 해석기 기반의 기능은 Java 프로그래밍 프레임워크 등과 같은 .NET 프레임워크 외의 기타 프로그래밍 프레임워크에 의존할 수 있다. 위에서 정의된 바와 같이, 더욱 일반적인 용어 "해석기 기반의 코어 런타임 엔진"은 (SPOT의 TinyCLR과 같은) 해석기 기반 CLR의 사용을 포함하지만, 이 기술에 제한되지는 않는다(실제로, .NET 기술에도 제한되지 않는다).
해석기 기반 CLR은 이 명세서의 다음 부분에서 충분히 설명될 방식으로 셋탑 박스 환경에서 사용하도록 적응될 수 있다. 일반적으로, 해석기 기반 CLR은 "풀 스케일" .NET 프레임워크에 의해 제공된 것에 비해 감소된 기능 집합을 제공할 수 있다. 게다가, 해석기 기반 CLR은 양호하게 일반적으로 .NET 전형을 따르고 있어서, 개발자들이 매우 자원 제약적인 환경에서 .NET 전형을 사용하여 애플리케이션을 제공할 수 있게 한다.
더욱 구체적으로, 데스크톱 환경은 키보드 및 마우스와 같은 몇몇 가능한 입력 장치를 통해 사용자로부터 입력을 수신한다. 더욱이, 데스크톱 환경은 다수의 겹치는 UIpane으로 매우 복잡한 사용자 인터페이스 프리젠테이션을 제공하도록 구성되는데, 이것은 동일하게 복합한 UIpane 관리 전략을 요구한다. 그에 반해, 셋톱 박스 환경은 전형적으로 제한된 수의 단순한 입력 메카니즘(예를 들어, 원격 제어기)을 통해 사용자로부터 입력을 수신한다. 더욱이, 셋톱 박스 환경은 전형적으로 다수의 애플리케이션을 제공하도록 되어 있지만, 전형적으로 이들 애플리케이션을 (데스크톱 환경과 달리) 복잡한 계층화 형태로 나타내지는 않는다. 이와 같이, 본 발명에 따르면, 해석기 기반 CLR 플랫폼은 셋톱 박스 환경을 최적하게 서비스하도록 적응된다.
다음 섹션에서 설명되는 바와 같이, 예시적인 개선사항은 셋톱 박스 환경에 특별히 맞춘 명칭공간; 애플리케이션을 정지하고 재개하는 유일 애플리케이션 관리자; 유일 윈도우 관리자; 및 여러가지 유일 그래픽스 및 폰트 관련 규정을 포함한다.
B. 예시적인 시스템 소프트웨어 기능(도 3-6)
B.1. 기능의 개요
도 3은 여기에서 TV.Lite로 칭해지는(텔레비전 셋톱 박스 환경에서 사용하기 위한 비교적 "가벼운" 기능을 제공하기 때문임) 셋톱 박스 시스템의 소프트웨어 스택(300)의 개요를 제공한다. 상술된 바와 같이, 스택(300)은 여기에서 설명된 유일한 규정에 따른 셋톱 박스 환경에서 사용하도록 적응된, 해석기 기반 CLR에 의해 제공된 기능을 포함할 수 있다. 종래의 방식에서, 스택(300) 내의 계층은 시스템 내의 상이한 기능의 상대적인 종속성을 나타내는 것으로, 최하위 레벨은 시스템의 가장 기본적인 기능을 수행하고, 상위 레벨은 시스템 내의 가장 추상적인 또는 높은 레벨의 기능을 수행한다.
우선, 최하위 셋톱 박스 계층(302)은 여러가지 하드웨어 능력을 포함하는 셋톱 박스(102)의 물리적 구조에 대응한다. 예를 들어, 이 계층(302)은 LCR(210)을 포함하여 도 2에서 식별된 셋톱 박스 컴포넌트를 포함한다.
다음으로 높은 계층인 셋톱 박스 OS 계층(304)은 셋톱 박스(102)에 의해 수행된 여러가지 기본 기능을 제공한다. 예를 들어, 모토롤라 DCT 2000 셋톱 박스의 경우, 셋톱 박스 OS 계층(304)은 모톨로라에 의해 제공된 "GIOS" 운영 체제에 대응한다. 이 계층(304)은 메모리 관리, 스케쥴링, 하드웨어 제어 등을 제공할 수 있다.
그 다음 높은 계층은 (SPOT 기반 CLR과 같은, 하지만 이것에 제한되지 않는) 해석기 기반 CLR(306) 및 GFX 라이브러리(308)를 제공한다. 일반적으로, 예시적인 .NET 구현에서, 해석기 기반 CLR(306)은 특히 셋톱 박스 환경의 요구에 맞춰 적응 된 .NET 공통 언어 런타임(CLR) 기능의 서브셋을 포함한다. 해석기 기반 CLR(306)은 ("풀 스케일" .NET 프레임워크에 비해) 스택 내에서 비교적 하위에 있는데; 이것은 애플리케이션 기능과 낮은 레벨의 OS 기능 사이의 구별이 (종래의 시스템에 비해) 덜 두드러지게 한다.
GFX 라이브러리(308)는 특히 셋톱 박스 환경에서 사용하도록 적응된, 셋톱 박스 환경에서 사용하기 위한 여러가지 그래픽스 기능을 제공한다.
다음의 높은 계층은 애플리케이션 관리자(310), UIpane 관리자(312), 및 폼 및 제어부(314)를 제공한다. 다른 태스크들 중에서 특히, 애플리케이션 관리자(310)는 다수의 애플리케이션의 로딩, 실행 및 셧다운을 제어한다.
UIpane 관리자(312), 및 폼 및 제어부(314)는 (WindowsTM 운영 체제 환경에서 생성된 것들과 유사한 표시 객체와 같은, 하지만 이것에 제한되지 않는) UIpane의 프리젠테이션을 제어하는 여러 기능을 제공한다. API의 수는 셋톱 박스 환경에서 필요하지 않은 기능을 제거하기 위해 (종래의 데스크톱 환경에 비해) 이 UIpane 기능에서 줄어들 수 있다. 게다가, API는 데스크톱 환경에서 제공된 전체 API 집합을 보완함으로써, 개발자들이 전체적으로 새로운 프로그래밍 전형을 학습하지 않고 셋톱 박스 환경에 맞는 애플리케이션을 쓰기 시작할 수 있게 한다.
최상위 계층은 다수의 애플리케이션(316, 318, 320,...322)을 제공한다. 이들 애플리케이션(316, 318, 320,...322)은 임의의 목적을 위해 사용되도록 설계된 임의의 코드 기능을 포함할 수 있다. 예를 들어, 이들 애플리케이션(316, 318, 320,...322)은 디지털 비디오 레코더(DVR) 애플리케이션, 튜닝-관련 애플리케이션, 부모 제어-관련 애플리케이션, 프로그램 안내 및 검색 애플리케이션, 주문형 비디오(VOD) 애플리케이션, 게임 애플리케이션, 정보(예를 들어, 뉴스) 프리젠테이션 애플리케이션, 투표 애플리케이션, 인스턴트 메신저(IM) 애플리케이션 등을 제공할 수 있다. 애플리케이션(316, 318, 320,...322)은 또한 (다른 언어들 중에서 특히) C# 언어를 사용하여 쓰여진 사용자 애플리케이션을 지원한다.
다음 서브섹션은 도 3에 도시된 소프트웨어 스택(300)에 관한 추가 상세를 제공한다.
B.2.
ApplicationBase
기능
스택(300) 내의 기능은 셋톱 박스 환경에 맞게 개발된 유일한 명칭공간에 의해 부분적으로 구현될 수 있다. 그 기초로서, 명칭공간은 추가 기능이 계층적 형태로 부가될 수 있는 셸(shell)인 ABC_Co.TV.Lite.Shell을 제공한다. 계층 내의 자식 기능은 계승을 통해 부모 기능에 의해 제공된 툴에 의존할 수 있다.
이 서브섹션은 TVLiteApplicationBase이라 칭해진(이후, 간결하게 하기 위해 ApplicationBase라 함) 명칭공간으로 분류된 기능을 설명한다. ApplicationBase 클래스는 ABC_Co.TV.Lite.Shell에 달려 있다. ApplicationBase 클래스는 셋탑 박스 애플리케이션을 나타낸다. 즉, 모든 애플리케이션은 abstract TVLiteApplicationBase 인터페이스로부터 도출해야 한다. 이 관계를 통해, 애플리케이션은 ApplicationBase에서 지정된 모든 추상 메소드를 구현할 수 있다. 부록인 섹션 D에서는 ApplicationBase 기능의 상세한 설명을 제공하고; 이 섹션은 이 기능의 예시적인 두드러진 특징을 제공한다.
ApplicationBase 클래스는 다음의 예시적이고, 총망라한 것이 아닌 특징 리스트를 제공할 수 있다. ("메시지 펌프(message pumps)" 및 다른 특징에 대한 아래의 참조는 애플리케이션 관리자(310)의 나중 설명과 관련하여 명확해질 것이다.)
· Run 메소드는 현재의 스레드 상에서의 표준 애플리케이션 메시지 루프를 실행하기 시작하여, 지정된 UIpane을 볼 수 있게 한다. Run 메소드는 메인 UIpane을 상위 레벨 UIpane으로서 등록하기 위해 RegisterUIpane(이후 식별됨)을 자동으로 호출할 것이다.
· Initialize 메소드는 애플리케이션 정의 초기화를 수행한다. 이 메소드에서, URL에 부가되는 파라미터와 함께, 애플리케이션을 런치(launch)하라는 HTTP 요청의 URL은 초기화하기 위해 호 내의 "url" 파라미터를 통해 애플리케이션에 보내질 수 있다. 다음은 예시적인 url 파라미터를 제공한다:
http://appserver/monster.dat?param1=value1¶m2=value2.
· Exit() 메소드는 모든 메시지 펌프에게 끝내야 한다는 것을 알리고, 그 다음에, 메시지가 처리된 후 모든 애플리케이션 UIpane을 닫는다. Exit 메소드는 전형적으로 메시지 루프 내에서부터 호출되고, 강제로 Run 메소드를 복귀시킨다. 더욱 일반적으로, 애플리케이션은 애플리케이션 관리자(310)에게 애플리케이션이 종료된다는 것을 알리기 위해 Exit 메소드를 호출할 수 있고; 이것은 애플리케이션 관리자(310)가 시스템 자원의 종결처리 등과 같은 적절한 액션을 수행할 수 있게 한다.
· RegisterUIpane 메소드는 애플리케이션이 UIpane 관리자(312)에 그 상위 레벨 UIpane을 등록할 수 있게 한다. UIpane 관리자(312)는 UIpane 이벤트를 상위 레벨 UIpane에 디스패치(dispatch)할 것이다.
· Pause 메소드는 애플리케이션에게 정지하라는 요청을 하기 위해 애플리케이션 관리자(310)가 정지 이벤트를 애플리케이션에 보낼 수 있게 한다. 애플리케이션 관리자(310)는 애플리케이션에게 정지하라고 요청한 후, 스레드를 정지할 것이다.
· Resume 메소드는 애플리케이션에게 재개하라는 요청을 하기 위해 애플리케이션 관리자(310)가 재개 이벤트를 애플리케이션에 보낼 수 있게 한다.
· Terminate 메소드는 애플리케이션에게 종료하라는 요청을 하기 위해 애플리케이션 관리자(310)가 종료 이벤트를 애플리케이션에 보낼 수 있게 한다. 예를 들어, Terminate 메소드는 사용자가 적절한 UI 명령을 통해 명시된 중지(quit) 명령어를 엔터할 때, 시스템이 셧다운될 때, 시스템 자원이 부족하게 될 때 등과 같이, 애플리케이션이 종료될 때 호출될 수 있다. 이러한 상황에서, 애플리케이션 관리자(310)는 애플리케이션에게 종료하라고 지시하기 위해 Terminate 메소드를 호출한다.
· ReleaseResource 메소드는 애플리케이션 관리자(310)가 애플리케이션에게 자유롭게 될 수 있는 임의의 자원을 해제하라는 요청을 하기 위해 해제 자원 이벤트를 애플리케이션에 보낼 수 있게 한다. 이것은 가비지 컬렉터에서 객체에 대한 레퍼런스를 제거하는 것을 포함한다.
B.3.
UIpane
기능
셸은 또한 모든 UIpane의 루트 베이스(root base)로서 쓰이는 베이스 UIpane 인터페이스를 정의한다. 이 인터페이스는 UIpane 관리자가 각 UIpane의 구현의 상세를 모르고서 모든 UIpane을 제어할 수 있게 한다.
ABC_Co.TV.Lite.UIpanes 명칭공간은 저가형 셋톱 박스(STB)에서 실행하도록 최적화된 "가벼운 TV 애플리케이션"을 생성하는 클래스를 포함한다. 이전의 섹션에서 설명된 바와 같이, 셋톱 박스는 해석기 기반 CLR 시스템을 운전할 수 있다.
이 명칭공간 내의 클래스는 다음 카테고리로 분류될 수 있다:
· UIpaneBase 클래스 카테고리는 TV 애플리케이션 상에 표시되는 모든 UIpane 제어부에 기본 기능을 제공한다. ABC_Co.TV.Lite.UIpanes 명칭공간 내의 대부분의 클래스는 UIpaneBase 클래스로부터 도출된다. UIpaneBase 클래스는 또한 컨테이너인데, 이것은 자식 UIpane을 포함할 수 있다는 것을 의미한다.
· UIpane Forms 클래스 카테고리는 상위 레벨 컨테이너 UIpane의 생성을 고려한다.
· UIpane Controls 클래스 카테고리는 사용자 인터페이스의 생성을 고려한다. 예를 들어, Button 클래스는 UIpane 제어부이다.
앞의 요약에서 언급된 클래스 카테고리에 대한 지원을 제공하는 ABC_Co.TV.Lite.UIpanes 명칭공간 내에 다수의 클래스가 있다. 개요로서, 클래스에 관해서:
· Button 클래스는 TV 버튼 제어부를 나타낸다.
· Control 클래스는 제어를 위한 베이스 클래스를 정의한다. 제어 객체는 특정 함수를 수행하는 시각적 표현으로 객체를 정의한다.
· Form 클래스는 부모가 없는 상위 레벨인 컨테이너 UIpanes를 위한 베이스 클래스를 정의한다. 이 클래스(폼 객체)에 의해 생성된 객체는 시각적 표현이 약간 있거나 전혀 없고, 자식 UIPanes를 포함할 수 있다.
· Transition 클래스는 폼 객체에 전환을 적용하는 메소드를 정의한다.
· UIpaneBase 클래스는 UIpane을 위한 베이스 클래스를 정의하는 (시각적 표현을 갖는 객체, 또는 다른 UIpaneBase 객체를 포함하는 객체를 정의하는) 추상 클래스이다.
델리게이트에 관해서:
· UIpaneEventHandler 클래스는 임의의 UIpane 이벤트를 다루게 될 메소드를 나타낸다.
· KeyEventHandler 클래스는 키(key) 이벤트를 다루게 될 메소드를 나타낸다.
· TransitionEventHandler 클래스는 전환 이벤트를 다루게 될 메소드를 나타낸다.
열거에 관해서:
· Keys 클래스는 TV 애플리케이션에서 사용된 모든 가능한 키 코드를 나타낸다.
· ButtonStyle 클래스는 모든 가능한 버튼 스타일을 나타낸다.
다시, 부록인 섹션 D는 UIpane 기능의 전체적인 설명을 제공한다. 더욱이, 도 4는 이 기능의 예시적인 계층 편성을 도시한 것으로, 이것은 부록에서 완전히 설명된 기능의 요약을 제공한다.
B.4. 애플리케이션 관리자
애플리케이션 관리자(310)는 애플리케이션 로딩, 언로딩 및 초기화를 관리하는 메카니즘을 제공한다. 애플리케이션 관리자(310)는 또한 메시지 펌프를 관리하고, 메모리 관리를 수행하며, 시스템의 보안-관련 애스펙트 등을 처리한다. 애플리케이션 관리자(310)는 또한 애플리케이션에게 활동, 비활동, 정지, 재개, 종료 등을 지시함으로써 애플리케이션 비헤비어를 관리한다.
다음 서브섹션은 상기 토픽에 관한 추가 정보를 제공한다.
B.4.1 초기화
비헤비어
애플리케이션 관리자(310)는 애플리케이션을 런치하라는 애플리케이션 런치 요청을 수신할 수 있다. 예를 들어, 한 예시적인 구현에서, 런치 요청은 애플리케이션 관리자(310)에게 플래시 메모리 내의 애플리케이션을 런치하라고 요청하거나, 또는 애플리케이션을 다운로드하여 런치하라는 HTTP 요청을 통해 애플리케이션을 런치하라고 요청할 수 있다.
더욱 구체적으로, 애플리케이션 셸은 애플리케이션을 다운로드하여 실행하기 위해 ABC_C0.TV.Lite.Shell 명칭공간 내의 공용 Download 클래스를 사용할 수 있다. Download 객체의 다수의 인스턴스는 다수의 어셈블리를 동시에 다운로드하여 실행하기 위해 생성될 수 있다. 각 어셈블리는 그 자신의 스레드에서 실행된다. (주의할 점은 소정의 콤팩트 .NET JIT 기반 프레임워크에서, 애플리케이션은 상이한 애플리케이션 도메인에서 실행된다는 것이다. 이와 대조적으로, 애플리케이션이 상이한 논리적 스레드에서 실행될 때, 해석기 기반 CLR 구현에서는 애플리케이션 도메인의 개념이 없다.) Download 객체는 애플리케이션을 런치하는 권한에 대해 확인할 수 있다.
애플리케이션은 그외 다른 애플리케이션을 런치하기 위해 Download 객체를 사용할 수 있다. 런치하는 애플리케이션은 런치된 애플리케이션이 종료하는 때를 통지받고 싶으면, AutoResetEvent를 Download 생성자에게 보내고, 그 이벤트를 기다릴 수 있다. 예를 들어, 엔티티 X가 게임 애플리케이션을 런치하기 위해 Download 객체를 사용한다고 가정하자. 엔티티 X는 gameAppExitEvent라고 하는 AutoResetEvent를 생성하여, 그것을 Download 객체에 보낼 수 있다. 엔티티 X는 분리된 스레드를 생성하고, 그 스레드에서 gameAppExitEvent를 기다릴 수 있다. 게임 애플리케이션이 종료할 때, 셸은 gameAppExitEvent에게 신호할 것이다. 엔티티 X는 여전히 (정지 이벤트, 재개 이벤트, 종료 이벤트 등과 같은) 시스템 이벤트에 응답할 필요가 있기 때문에 (후술될) 메시지 펌프 스레드에서 gameAppExitEvent를 기다려서는 안된다.
Download 클래스는 어셈블리를 다운로드하여 실행하기 위한 ExecuteAssembly라고 하는 공용 메소드를 포함한다. ExecuteAssembly 메소드는 어셈블리를 다운로드하고, 로드하며, 실행하기 위해 새로운 애플리케이션 스레드를 시작할 것이다. (대안적으로, 또는 부가적으로, Download 객체는 어셈블리의 바이트 배열을 반환하 게 될 GetFile라고 하는 메소드를 지원할 수 있다. 애플리케이션은 어셈블리 데이터 또는 파일의 바이트 블럭을 판독하기 위해 GetFile 메소드를 사용할 수 있다.) 어셈블리가 다운로드되고 로드된 후, 애플리케이션 관리자는 TVLiteApplicationBase로부터 도출되는 클래스를 찾음으로써 애플리케이션 클래스를 얻기 위해 Reflection을 사용할 수 있다.
그 다음, 애플리케이션 관리자(310)는 TVLiteApplicationBase의 인스턴스를 생성하고, 애플리케이션을 런치하는 명령/URL로 Initialize 메소드를 호출한다. 그러므로, Initialize 메소드는 관리 애플리케이션을 위한 진입점을 구성한다.
애플리케이션은 Initialize 메소드가 호출될 때 자신의 메인 UIpane을 생성한다. 애플리케이션은 또한 추가 상위 레벨 UIpanes를 등록하기 위해 TVLiteApplicationBase에 제공된 RegisterUIpane 기능(후술됨)을 사용할 수 있다.
B.4.2. 실행 및 메모리 관리
비헤비어
애플리케이션은 모든 초기화 작업이 완료될 때 Run 메소드를 호출한다. 이것은 애플리케이션이 이벤트(예를 들어, 포커스 이벤트, 키 이벤트, 정지 이벤트, 재개 이벤트, 종료 이벤트 등)를 수신할 수 있게 하는 메시지 펌프를 시작할 것이다. Run 메소드는 블로킹 호(blocking call)이고, 애플리케이션이 그 자신에 관한 Exit를 호출할 때까지 복귀하지 않을 것이다. 애플리케이션은 완료될 때, 애플리케이션의 베이스 클래스 TVLiteApplicationBase에 제공된 Exit 메소드를 호출한다. 즉, Run 메소드는 현재의 스레드 상에서 메시지 루프를 시작하고, 지정된 UIpane가 보이게 한다. 애플리케이션은 메시지 펌프를 나가서 Run 메소드로부터 복귀하기 위해 Exit 메소드를 호출한다.
애플리케이션을 실행하는 동안에, 가비지 컬렉터는 관리 객체가 더 이상 사용될지 않을 때 관리 객체에 할당된 메모리를 자동으로 해제한다. 그러나, 가비지 컬렉션이 발생할 때를 예측할 수 없다. TVLiteApplicationBase는 고유 메모리 핸들, 오픈 파일 및 스트림으로의 직접 액세스가 없는 관리 애플리케이션으로서 구현될 수 있다. 그러므로, TVLiteApplicationBase의 메모리 관리는 가비지 컬렉터에 의해 적절히 처리될 수 있다.
애플리케이션 관리자(310)는 시스템 메모리가 부족하다는 것을 애플리케이션 스레드에 통지하기 위해 Purge 메소드를 호출할 수 있다. 애플리케이션은 Purge 메소드가 호출될 때 가능한 한 많은 관리 객체를 (객체에 대한 레퍼런스를 제거함으로써) 해제해야 한다. 시스템이 여전히 최소 메모리 임계치 이하로 운전하면, 애플리케이션 관리자(310)는 이용가능한 메모리의 양을 최소 메모리 임계치 이상으로 하기 위해 애플리케이션을 종료할 수 있다. 즉, 애플리케이션 관리자(310)는 선입선출 알고리듬에 기초하여 비활동 애플리케이션을 종료할 수 있다. 애플리케이션 관리자(310)는 구성 파일 내의 KeepAlive 섹션에 열거된 애플리케이션을 종료하지 않을 것이다.
B.4.3. 정지 및 재개
비헤비어
애플리케이션 관리자(310)는 애플리케이션 스레드가 막 정지되려고 한다는 것을 나타내기 위해 애플리케이션의 Pause 메소드를 호출한다. 예를 들어, 애플리케이션 관리자(310)는 다른 애플리케이션이 활성화되고, 그 새로운 애플리케이션의 UIpane이 현재 애플리케이션의 UIpane과 겹칠 때, 현재 실행중인 애플리케이션을 정지하기 위해 Pause 메소드를 자동으로 호출할 수 있다. Pause 메소드는 애플리케이션이 스레드 정지를 준비할 기회를 제공할 것이다. 애플리케이션은 스레드가 재개될 때까지 어떤 메시지도 수신하지 않을 것이다. 애플리케이션 관리자(310)는 선정된 기간(예를 들어, 0.5초) 내에 정지하지 않는 애플리케이션을 종료시킬 수 있다.
애플리케이션 관리자는 애플리케이션 스레드가 재개되었다는 것을 나타내기 위해 애플리케이션의 Resume 메소드를 호출할 수 있다. 이것은 애플리케이션이 스레드 정지 이전에 존재하는 상태로 자신을 복원할 기회를 제공할 것이다. 그 다음, 애플리케이션 관리자(310)는 스레드의 메시지 펌프를 다시 시작할 수 있다. 애플리케이션 관리자(310)는 선정된 기간(예를 들어, 0.5초) 내에 재개하지 않는 애플리케이션을 종료시킬 수 있다.
B.4.4.
언로딩
/종료
비헤비어
애플리케이션 관리자(310)는 자신의 기본 구현에서 Exit 메소드의 구현을 제공한다. 즉, Exit 메소드는 애플리케이션 관리자(310)에게 현재의 애플리케이션을 종료한다고 통지한다. 애플리케이션 관리자(310)는 종료된 애플리케이션을 제거하고, 제어를 이전의 활동 애플리케이션으로 옮길 것이다.
애플리케이션 관리자(310)는 또한 애플리케이션 스레드가 종료해야 한다는 것을 나타내기 위해 애플리케이션의 Terminate 메소드를 호출할 수 있다. 이것은 애플리케이션이 우아하게 종료할 기회를 제공할 것이다. 애플리케이션 관리 자(310)는 선정된 기간 후에 우아하게 종료하지 않는 애플리케이션을 종료시킬 것이다.
B.4.5. 보조(
miscellaneous
)
비헤비어
보안 토픽에 관해서, 애플리케이션 관리자(310)는 구성 파일 내에 지정된 규칙에 대한 애플리케이션의 요청을 유효화한다. 예를 들어, 애플리케이션 관리자(310)는 애플리케이션이 다른 애플리케이션을 런치하고, 네트워크 자원을 액세스하는 등의 권한을 갖고 있는지 확인할 수 있다. 애플리케이션은 사용 권한이 없는 기능을 요청할 때 예외를 수신할 것이다.
등록 토픽에 관해, 애플리케이션은 UIpane 이벤트를 수신하기 위해 애플리케이션 관리자(310)로 자신의 상위 레벨 UIpanes를 등록할 수 있다. 더욱 구체적으로, Run 메소드는 그 UIpane 파라미터에 지정된 UIpane을 자동으로 등록한다.
B.4.6. 요약(도 5)
도 5는 상술된 개념의 요약을 제공한다. 이 도면에서, 애플리케이션 런처(launcher)(502)는 다운로드 엔티티(504)를 접촉함으로써 애플리케이션의 런치를 불러낸다. 다운로드 엔티티(504)는 샌드박스(sandbox) 허가 엔티티(506)를 액세스함으로써 애플리케이션을 다운로드하고 실행할 권한이 있는지 판정한다. 권한이 있다면, 다운로드 엔티티(504)는 애플리케이션을 실행하기 위해 태스크 관리자 엔티티(508)에 태스크를 추가한다. 애플리케이션의 실행은 애플리케이션 전용의 애플리케이션 스레드(510)를 만들어낸다.
애플리케이션 관리자(310) 및 윈도우 관리자(312)는 호출된 애플리케이션의 실행을 제어한다. 즉, 이들 관리자(310, 312)는 메시지 대기열 엔티티(512)에 대기열 아이템을 추가하여, 애플리케이션 엔티티(514)에 의해 이들 아이템이 실행되게 한다.
B.5.
UIPanes
관리자
UIpane 관리자(312)는 완전히 관리된 UIPane 관리 구현을 제공한다. UIpane 관리자(312)는 UIpane 관리, 이벤트 라우팅, 및 포커스 관리에 책임이 있다. 이 서브섹션은 윈페이지 관리자(312)의 비헤비어에 관한 상세를 제공한다.
B.5.1.
UIpane
관리
비헤비어
UIpane은 그 유형에 기초하여 규정된 우선순위로 표시된다. 지원된 UIpane 유형은 통지형(Notification); 플로팅형(Floating)(AlwaysOnTop 속성 집합을 갖는 통지형); 및 정규형(Normal)을 포함한다. Floating UIpane은 항상 최상위 UIpane이 될 것이다. 예를 들어, 디스플레이가 상이한 애플리케이션에 대응하는(또는 동일한 애플리케이션에 대응하는) 다수의 UIpane을 동시에 나타낸다고 가정하자. 최고 우선순위 레벨을 갖는 UIpane은 포커스를 수신할 것인데, 이것은 사용자의 입력 활동이 이 UIpane으로 향하게 될 것이라는 것을 의미한다. 그러나, 한 예시적인 구현에 따르면, UIpane은 디스플레이 상에서 겹쳐치는 것이 허용되지 않는다.
UIpane 관리자(312)는 애플리케이션을 정지하고, 재개하며, 종료하기 위해 애플리케이션 관리자(310)와 밀접하게 작업한다. 예를 들어, UIpane 관리자(312)는 현재의 애플리케이션이 정지될 필요가 있을 때(전형적으로, 막 뜨려고 하는 다른 애플리케이션의 UIPane이 현재의 UIpane과 충돌할 것이기 때문에), 정지 이벤트 를 현재 애플리케이션의 메시지 펌프에 보내라고 애플리케이션 관리자(310)에게 요청한다. 이것은 현재의 애플리케이션이 정지 상태로 되기 전에 현재의 애플리케이션에게 요구 동작을 수행할 기회를 줄 것이다.
더욱 구체적으로, 애플리케이션은 각각 포커스를 받고 놓칠 때 활성화 및 비활성화 이벤트를 수신한다. 예를 들어, 통지가 실행중인 애플리케이션의 위에 나타나면, 애플리케이션은 (정지 이벤트 앞에) 비활성화 이벤트를 수신할 것이다. 통지가 사라질 때, 애플리케이션은 (재개 이벤트를 보낸 후에) 활성화 이벤트를 수신할 것이다.
B.5.2. 이벤트 라우팅
비헤비어
UIpane 관리자는 애플리케이션 스레드의 메시지 펌프를 모든 이벤트에 디스패치한다. 더욱 구체적으로, 사용자 입력 이벤트는 이벤트가 처리되거나 계층이 끝날 때까지(즉, 이벤트가, 이벤트를 소모하지 않고 그 부모가 없는 UIpane에 도달할 때) UIPanes 포함 계층을 "활성화(bubble up)"시킬 것이다.
페인트 이벤트는 UIpane이 정지되지 않은 경우에만 포함 계층의 상위 레벨 UIpaned에 디스패치된다. 상위 레벨 UIpane은 페이트 이벤트를 그 자식에게 디스패치할 책임이 있다. 예를 들어, UIpane이 그 자식으로서 몇 개의 버튼을 가지면, UIpane은 페인트 이벤트를 수신할 것이고, 그 버튼 위에서 페인트를 호출할 책임이 있다.
B.5.3.
UIpane
포커스
및 탐색
비헤비어
한 예시적인 구현에 따르면, 자식 UIpane 사이에서의 탐색은 (예를 들어, 원 격 제어기(116)에 의해 제공된) 방향성 원격 키로 달성된다. 예를 들어, 다운 키가 눌러지면, 활동중인 자식 UIpane 아래의 가장 가까운 자식이 포커스를 받을 것이다. 방향성 키 이벤트가 처리되지 않으면, 부모 UIpane은 그 형제들 중의 하나에 포커스를 보내고자 시도한다.
더욱 구체적으로, 탐색은 UIpane의 여러 위치 상에서 생성된 "핫 포인트(hot point)"에 의해 결정된다. 핫 포인트의 위치는 어떤 화살표 키가 선택되느냐에 달려있다. 예를 들어, 도 6에서, 제어부 A가 현재 포커스를 갖고 있다고 하자. 다운 키가 선택되면, 현재 포커스된 제어부의 핫 포인트는 제어부 A의 하부 에지의 중간에 대응할 것이다. 그 다음, 이 핫 포인트는 각각의 주변 제어부의 상부 에지 상으로 투사된다. 그 다음, 각 핫 포인트 쌍 사이의 거리가 측정된다. 가장 짧은 양(+)의 거리를 갖는 쌍은 포커스를 받기하기 위한 다음 제어부를 결정한다. 이 경우에, 제어부 A와 B 사이의 핫 포인트 거리(선 AB)는 제어부 A와 C 사이의 핫 포인트 거리(선 AC)보다 더 짧으므로, 제어부 B가 다음에 포커스를 받을 것이다. (D는 완전히 A 위에 위치하기 때문에 고려되지 않는다.)
특별한 경우는 2개의 제어부가 겹칠 때 발생한다. 예를 들어, 제어부 D의 상부 에지가 제어부 A 위에 있도록 제어부 D가 제어부 A와 겹치면, 제어부 D는 다운 키 누름에서 고려될 것이다. 그러므로, 이 경우에, 제어부 D는 선 AD가 선 AB 및 AC보다 짧으면 포커스를 받을 것이다.
B.6.
그래픽스
특징
그래픽스 관련 기능의 주요 목적은 (자원-제약 환경의 제한을 고려하여) 가 능한 한 경제적이고 효율적으로 개발자의 요구에 부합하는 API 집합을 제공하는 것이다.
한가지 일반적인 특징에 따르면, 상기 목적은 (데스크톱 환경에서 제공된 "풀" API 집합에 비해) 단순화된 API 집합을 사용함으로써 부분적으로 달성된다. 예를 들어, 선 및 타원 드로잉(drawing) 알고리즘과 같은 단순화된 그래픽스 API가 제공된다. API 집합은 또한 유연성이 있어서, 장래의 확장을 허용한다.
다른 특징에 따르면, 그래픽스 기능은 하드웨어의 처리 능력을 가능한 한 많이 이용하여, 셋톱 박스 하드웨어와 직접 상호작용한다. 예를 들어, 현재의 시스템에서, 드로잉 프리미티브는 하드웨어에 직접 기입할 수 있다. 이와 대조적으로, 종래의 그래픽스 API는 "무거운" 데스크톱 API 뒤에서 지나치게 추상화된다(그러므로, 자원 제약 셋톱 박스 환경에서 적용될 때 느려질 수 있다).
더욱 구체적으로, 그래픽스 기능은 가능하면 셋톱 박스(102)의 하드웨어 API에 호출이 이루어지도록 코드 경로를 미리 설치할 수 있다. 한 예를 제공하기 위해, DC 2000 셋톱 박스 하드웨어는 매우 신속하게 동작하는 블럭 카피 기능을 제공한다. 그러나, 이 기능은 소스 및 수신지 포인터가 WORD-정렬될 것을 요구한다. 그래픽스 기능은 이 기능의 요구를 수용한 다음에, 그것을 호출한다. 다른 예로서, M68000 칩은 DBRA라고 칭해지는 특별한 특징을 갖는다. 그래픽스 기능은 이 칩의 요구(예를 들어, 정렬)를 수용할 수 있고, 그 다음에 이 칩을 직접 호출하여 매우 빠른 메모리 전송을 제공할 수 있다.
다른 예로서, 그래픽스 기능은 또한 여러가지 특별한 효과를 효율적인 방식 으로 제공하기 위해 셋톱 박스(102)의 라인 제어 레지스터(LCR)(210)에 영향을 미칠 수 있다. 예를 들어, 화면 해상도가 480 라인이라고 하자. 개발자는 화면 상의 각 데이터 라인을 가리키는 LCR(210) 내의 480개의 저장 위치를 할당할 수 있다. 즉, 이것은 전체 온-스크린 디스플레이를 위한 메모리 비트맵 버퍼를 할당함으로써 달성될 수 있다. 정상 상태에서, 각 LCR 저장 위치는 비트맵의 각 라인의 시작을 가리킨다. 특별한 효과는 여러가지 알고리즘에 따라 LCR(210)을 사용하여 라인의 순서를 조작처리함으로써 달성될 수 있다. 단순한 경우를 예로 들기 위해, LCR[10]이 비트맵 내의 라인 9를 가리키고, LCR[9]가 비트맵 내의 라인 10을 가리키면, 셋톱 박스(102)는 바뀐 순서대로 이들 2개의 라인을 표시할 것이다.
더욱 구체적으로, 여기에서 설명된 셋톱 박스 시스템의 유일 그래픽스 특징은 전환 효과, 맞춤 팔레트 지원, blt 렌딩(rending) 기능, 트루 타입 폰트 렌더링 등을 포함한다. 이들 특징은 더욱 상세하게 아래에서 설명된다. 부록인 섹션 D는 이들 특징에 관한 더욱 자세한 상세를 제공한다.
B.6.1. 전환 효과
셋톱 박스(102)는 한 그래픽 프리젠테이션을 다른 그래픽 프리젠테이션으로 전환할 때 효과를 갖는 다수의 전환 효과를 제공한다. 다음 기능은 예시적인 전환 효과를 제공한다. 다시 또, 이들 기능은 상술된 방식으로 LCR(210)을 직접 조작처리함으로써 달성될 수 있다.
Scroll 메소드는 메소드에서 지정된 "오프셋" 파라미터가 양수이면 화면을 위로 스크롤하고, 또는 "오프셋"이 음수이면 화면을 아래로 스크롤한다. 이 효과 는 메소드에서 지정된 "upBound" 및 "lowBound" 파라미터에 의해 정의된 경계 내에서 제공될 것이다.
Decimate 메소드는 데시메이션 효과를 시뮬레이션한다. 더욱 구체적으로, 이 메소드는 효과 레벨을 나타내는 입력으로서 퍼센트 수를 갖는다. 데시메이션 효과는 메소드에서 지정된 "upBound"와 "lowBound" 파라미터들 사이에서 제공된다.
RasterFade 메소드는 래스터 페이드(raster fade) 효과를 세뮬레이션한다. 이메소드는 효과 레벨을 나타내는 입력으로서 퍼센트 수를 갖는다. 데시메이션 효과는 메소드에서 지정된 "upBound"와 "lowBound" 파라미터들 사이에서 제공된다.
Expose 메소드는 메소드에서 지정된 "linesToExpose" 파라미터에 의해 지정된 다수의 라인을 UIpane-지정 "upBound" 및 "lowBound"의 중앙에서 노출시킨다.
B.6.2. 팔레트 및 해상도 효과
셋톱 박스 시스템은 개발자가 해상도 및 컬러 팔레트를 동적으로 변경할 수 있게 한다. 이것은 더욱 다채로운, 따라서 더욱 흥미있는 사용자 경험을 제공할 수 있다. 예를 들어, 개발자는 제1 애플리케이션에서 제2 애플리케이션으로의 전환이 (제2 애플리케이션에 대응하여) 컬러 팔레트 및 해상도를 잠재적으로 변경하도록 시스템을 촉구할 수 있게 시스템을 구성할 수 있다.
상기 효과를 달성하기 위해, 시스템은 SetUserPalette 메소드를 제공한다. 이 메소드는 사용자가 그래픽스 객체와 관련될 맞춤 팔레트를 지정하게 한다.
또한, RestoreDefaultPalette 메소드는 디폴트 온-스크린 컬러 팔레트를 복원한다.
SetOSDResolution 메소드는 호출자가 온-스크린 표시 해상도를 설정할 수 있게 한다.
RestoreDefaultOSDResolution 메소드는 디폴트 온-스크린 표시 해상도를 복원한다.
B.6.3.
Blt
효과
BitBlt 메소드는 한 그래픽스 객체에서 다른 그래픽스 객체로 내용들을 블리트(blt)한다. 이 기능으로, 애플리케이션 개발자, 특히 게임 프로그래머는 그래픽스 문맥의 한 부분을 다른 부분으로 카피할 수 있다.
B.6.4. 폰트 렌더링 기능
일반적인 폰트 처리 특징으로서, 셋톱 박스 시스템은 셋톱 박스 환경에서 더욱 효율적인 폰트 처리를 제공하기 위해 폰트에서 불필요한 정보를 제거할 수 있다. 즉, FontOptimizer 툴은 코드셋(codeset) 파일 밖의 문자를 제거하고, 문자를 재맵핑하여, 글리프(glyph) 정보를 제거해내서, 파일 크기를 최소화함으로써 폰트 파일을 최적화한다. 그러므로, 이 특징은 자원 제약 환경에서 실행중인 관심있는 애플리케이션의 일반적인 목적에 기여한다.
SetAntiAliasBackgroundColor 메소드는 안티-에일리어싱을 위해 사용될 컬러를 설정한다. 더욱 구체적으로, 이 호는 안티-에일리어싱에서 사용하기 위한 중간 컬러의 테이블을 구성하기 위해 사용된 컬러를 설정한다.
SetFont 메소드는 문자열 출력(string draw) 동작을 위해 사용될 현재의 폰트를 설정한다.
DrawString 메소드는 여러가지 파라미터에 의해 관리되는 특정 방식으로 지정된 컬러로 문자열을 출력한다(예를 들어, 추가 정보를 위한 부록에 유의하기 바란다).
BreakString 메소드는 현재 설정된 폰트를 사용하여, 문자열을 워드로 나누고자 시도한다.
GetFontMetrics 메소드는 텍스트의 정확한 배치를 제공하기 위해 사용된 현재 지정된 폰트의 속성을 페치한다.
C. 예시적인 동작 방법
도 7은 셋톱 박스 시스템의 동작을 플로우차트 형태로 설명한 것이다. 설명을 용이하게 하기 위해, 소정의 동작은 소정의 순서로 실행된 별개의 단계를 구성하는 것으로 설명된다. 그러한 구현은 예시적이고 비제한적이다. 여기에서 설명된 소정의 단계는 단일 동작으로 함께 그룹지워져서 수행될 수 있고, 소정의 단계는 이 명세서에서 설명된 예에 이용된 순서와 다른 순서로 수행될 수 있다. 이 플로우차트에서 설명된 기능은 앞의 섹션에서 이미 설명되었으므로, 섹션 C는 주로 그러한 기능의 간략한 재검토로서 쓰일 것이다.
단계(702)에서, 셋톱 박스(102)는 상술된 Initialize 메소드를 사용하여 애플리케이션을 런치하고 로드한다. 이것은 애플리케이션을 위한 메시지 스레드를 설정하도록 셋톱 박스(102)를 촉구한다.
단계(704)에서, 셋톱 박스(102)는 애플리케이션 실행 동안에 필요에 따라 애플리케이션을 정지하고, 그 다음에 애플리케이션을 재개한다. 예를 들어, 셋톱 박 스(102)는 다른 애플리케이션이 현재의 애플리케이션보다 우선하는 UIpane을 생성하면 현재의 애플리케이션을 정지할 수 있다. 셋톱 박스는 실효된 객체를 제거함으로써 상술된 방식으로 프로그램의 실행 동안에 메모리 관리를 수행한다.
단계(706)에서, 셋톱 박스(102)는 애플리케이션을 빠져나간다/종료한다.
D. 부록
다음 섹션은 앞의 섹션에서 식별된 여러가지 기능을 더욱 총망라하여 열거한다.
D.1.
IUIpane
인터페이스
셸은 모든 UIpanes를 위한 루트 베이스로서 작용하는 베이스 IUIpane 인터페이스를 정의한다. 이 인터페이스는 UIpane 관리자(312)가 각 UIpane 구현의 상세를 모르고서 모든 UIpane을 제어할 수 있게 한다. IUIPane 인터페이스는 공식적으로 public interface IUIpane으로서 표현될 수 있다.
IUIpane 인터페이스는 다음의 예시적이고, 총망라한 것이 아닌 인터페이스 함수 리스트를 제공할 수 있다:
· Graphics CteateGraphics() 메소드는 UIpane을 위한 그래픽스 객체를 얻는다.
· void Hide() 메소드는 UIpane이 보이지 않게 한다.
· void NotifyOnClose() 메소드는 UIpane에게 닫혀있다는 것을 통지하기 위해 셸에 의해 호출된다.
· void NotifyOnFocus(bool focus)는 UIpane에게 포커스를 얻었거나 잃었다 는 것을 통지하기 위해 셸에 의해 호출된다. 파라미터 "focus"는 UIpane이 포커스를 얻었거나 잃은 경우에 나타내는 값이다.
· void NotifyOnKey(int keyCode, ref bool handled) 메소드는 현재 활동중인 UIpane에게 사용자 입력 이벤트를 통지하기 위해 셸에 의해 호출된다. 그 다음, UIpane은 이벤트를 그것의 현재 활동중인 자식에게 적절하게 라우팅할 것이다.
· void NotifyOnPaint(Rectangle rectangle) 메소드는 현재 활동중인 UIpane에게 페인트 이벤트를 통지하기 위해 셸에 의해 호출된다. 이 메소드에서, 파라미터 "rectangle"은 활동중인 UIpane의 "칙칙한(dirty)" 영역을 나타낸다. 활동적 (부모) UIpane의 책임은 그의 모든 자식에게 페인트 통지를 보내는 것이다.
· void SetPaintThrottling(bool on) 메소드는 페인트 조절을 온 또는 오프시킨다.
· void Show() 메소드는 UIpane이 보이게 한다.
D.2.
ABC
_
Co
.
TV
.
Lite
.
UIpanes
D.2.1.
ABC
_
Co
.
TV
.
Lite
.
UIpanes
명칭공간 개요
개요로서, ABC_Co.TV.Lite.UIpanes 명칭공간은 저가형 셋톱 박스에서 실행하도록 최적화된 "가벼운 TV 애플리케이션"을 생성하는 클래스를 포함한다. 앞의 섹션에서 설명된 바와 같이, 셋톱 박스는 제공자의 해석기 기반 CLR 시스템을 운전한다.
이 명칭공간 내의 클래스는 다음 카테고리로 분류될 수 있다:
· UIpaneBase 클래스 카테고리는 TV 애플리케이션에서 표시되는 모든 UIpane 제어부에 기본 기능을 제공한다. ABC_Co.TV.Lite.UIpanes 명칭공간 내의 대부분의 클래스는 UIPaneBase 클래스로부터 도출된다. UIpaneBase 클래스는 또한 컨테이너인데, 이것은 자식 UIpanes을 포함할 수 있다는 것을 의미한다.
· UIpane Forms 클래스 카테고리는 상위 레벨 컨테이너 UIpanes의 생성을 고려한다.
· UIpane Controls 클래스 카테고리는 사용자 인터페이스의 생성을 고려한다. 예를 들어, Button 클래스는 UIpane 제어부이다.
앞의 요약에서 언급된 클래스 카테고리에 대한 지원을 제공하는 ABC_Co.TV.Lite.UIpanes 명칭공간 내에 다수의 클래스가 있다. 도 4는 이들 클래스의 예시적인 계층 편성을 도시하고 있다.
개요로서, 클래스에 관해서:
· Button 클래스는 TV 버튼 제어부를 나타낸다.
· Control 클래스는 제어를 위한 베이스 클래스를 정의한다. 제어 객체는 특정 함수를 수행하는 시각적 표현으로 객체를 정의한다.
· Form 클래스는 부모가 없는 상위 레벨인 컨테이너 UIpanes를 위한 베이스 클래스를 정의한다. 이 클래스(폼 객체)에 의해 생성된 객체는 시각적 표현이 약간 있거나 전혀 없고, 자식 UIPanes를 포함할 수 있다.
· Transition 클래스는 폼 객체에 전환을 적용하는 메소드를 정의한다.
· UIpaneBase 클래스는 UIpane을 위한 베이스 클래스를 정의하는 (시각적 표현을 갖는 객체, 또는 다른 UIpaneBase 객체를 포함하는 객체를 정의하는) 추상 클래스이다.
델리게이트에 관해서:
· UIpaneEventHandler 클래스는 임의의 UIpane 이벤트를 다루게 될 메소드를 나타낸다.
· KeyEventHandler 클래스는 키(key) 이벤트를 다루게 될 메소드를 나타낸다.
· TransitionEventHandler 클래스는 전환 이벤트를 다루게 될 메소드를 나타낸다.
열거에 관해서:
· Keys 클래스는 TV 애플리케이션에서 사용된 모든 가능한 키 코드를 나타낸다.
· ButtonStyle 클래스는 모든 가능한 버튼 스타일을 나타낸다.
다음 서브섹션은 ABC_Co.TV.Lite.UIpanes 명칭공간의 상기 확인된 각각의 특징에 관한 추가 상세를 제공한다.
D.2.2.
ABC
_
Co
.
TV
.
Lite
.
UIpanes
.
UIPaneBase
앞에서 요약된 바와 같이, ABC_Co.TV.Lite.UIpanes.UipaneBase 클래스(UIpaneBase 클래스)는 (UIpane이 시각적 표현을 갖는 객체 또는 다른 UIPaneBase 객체를 포함하는 객체를 정의하는 경우에) UIpane을 위한 추상 베이스 클래스를 나타낸다. 즉, UIpaneBase 클래스는 사용자에게 정보를 표시하는 클래스에 의해 요구된 매우 기본적인 기능을 구현한다. 예를 들어, 그것은 UIpane의 경 계를 정의하고, 자식 UIpanes를 관리하며, 키 이벤트를 통해 사용자 입력을 처리한다. 그것은 공식적으로 public abstract class UIpaneBase : IUIpane으로 표현될 수 있다.
배치 토픽에 관해서, UIpaneBase 클래스는 컨테이너인데, 이것은 임의의 상위 레벨이 아닌 UIpanes를 보유할 수 있다는 것을 의미한다. UIpanes는 그것의 자식 컬렉션에서 Add, Insert, Remove 및 RemoveAt을 호출함으로써 컨테이너에 추가되거나 컨테이너로부터 제거될 수 있다. UIpane의 상부, 좌측, 폭 및 높이 값은 Uipane의 생성 동안에 설정된다. 모든 자식은 부모 UIpane의 경계 내에 있어야 한다. 사용자의 입력 키 이벤트는 먼저 포커스된 UIpane으로 갈 것이다. UIpane이 키 이벤트를 보유하지 않으면, 이벤트는 그 부모 UIpane으로 보내질 것이다.
UIpaneBase 클래스에 의해 가능해진 탐색 비헤비어는 앞에서(예를 들어, 서브섹션 B.5.2에서) 설명되었다.
페인팅 토픽에 관해서, UIpaneBase 클래스는 페인팅을 구현하지 않는다. 즉, 한 예시적인 구현에서, 개발자는 배경을 포함하여 모든 페인팅에 책임이 있다. 개발자는 페인팅을 수행하기 위한 OnPaint 메소드를 무효로 할 수 있다. 그러나, UIpaneBase는 그 자식 컬렉션 내의 임의의 자식 제어부를 페인팅할 것이다.
UIpaneBase 클래스는 다음의 예시적이고, 총망라한 것이 아닌 공용 생성자 리스트를 제공할 수 있다:
· public UIpaneBase(int left, int top, int width, int height, bool topLevel) 생성자는 특정 위치 및 크기를 갖는 UIpaneBase 클래스의 새로운 인스턴 스를 초기화한다. UIpane이 화면 경계 밖에 있으면 예외 상태로 빠진다. 이 생성자에서, 파라미터 "left"는 UIpane의 좌측 에지와 컨테이너의 클라이언트 영역의 좌측 에지 사이의 픽셀 거리를 나타낸다. 최소치는 0이고, 최대치는 OSD 폭에 대응한다. 값이 이들 경계 밖에 있으면, 예외 상태로 빠진다. "top" 파라미터는 UIpane의 하부 에지와 컨테이너의 클라이언트 영역의 상부 에지 사이의 픽셀 거리를 나타낸다. 최소치는 0이고, 최대치는 OSD 높이에 대응한다. 값이 이들 경계 밖에 있으면, 예외 상태로 빠진다. "width" 파라미터는 UIpane의 픽셀 폭을 나타낸다. 최소치는 1이고, 최대치는 ODS 폭에서 "left" 파라미터를 뺀 값에 대응한다. 값이 이들 경계 밖에 있으면, 예외 상태로 빠진다. "height" 파라미터는 UIpane의 픽셀 높이를 나타낸다. 최소치는 1이고, 최대치는 ODS 높이에서 "top" 파라미터를 뺀 값에 대응한다. 값이 이들 경계 밖에 있으면, 예외 상태로 빠진다. 마지막으로, "topLevel" 파라미터는 객체가 상위 레벨 UIpane인지 나타낸다.
UIpaneBase 클래스는 다음의 예시적이고, 총망라한 것이 아닌 공용 속성 리스트를 제공할 수 있다:
· public virtual byte BackColor 속성은 UIpane을 위한 배경 컬러 인덱스를 얻거나 설정한다. 예시적인 디폴트는 224이다.
· public virtual bool CanFocus 속성은 UIpane이 포커스를 받을 수 있는 지의 여부를 나타내는 값을 얻는다.
· public ArrayList Children 속성은 UIpane 내에 포함된 UIpanes의 컬렉션을 얻는다.
· public bool Enabled 속성은 UIpane이 사용자 상호작용에 응답할 수 있는 지의 여부를 나타내는 값을 얻거나 설정한다. 디폴트는 참(true)이다. 이 속성은 UIpane이 상위 레벨 UIpane이 아니고, 상위 레벨 UIpane인 부모나 조부모가 없으면, 거짓을 반송한다.
· public bool Floating 속성은 상위 레벨 UIpane이 플로팅 UIpane인 지의 여부를 나타내는 값을 얻거나 설정한다. 플로팅 UIpane은 다른 상위 레벨 UIpanes 상으로 키를 보내게 될 상위 레벨 UIpane이다. 상위 레벨이 아닌 UIpane은 플로팅 UIpane일 수 없다. 상위 레벨이 아닌 UIpanes를 위한 Floating 속성을 설정하고자 하는 시도는 무시될 것이다.
· public bool Focused 속성은 UIpane이 입력 포커스를 갖는 지의 여부를 나타내는 값을 얻는다.
· public virtual byte ForeColor 속성은 UIpaneBase를 위한 전면(foreground) 컬러 인덱스를 얻거나 설정한다. 예시적인 디폴트는 227이다.
· public int Height 속성은 UIpane의 높이를 얻는다.
· public int Left 속성은 UIpane의 좌측 에지와 컨테이너의 클라이언트 영역의 좌측 에지 사이의 픽셀 거리를 얻는다.
· public virtual IUIpane Parent 속성은 UIpane의 부모 컨테이너를 얻거나 설정한다. UIpane이 부모의 경계 밖에 있으면 예외 상태로 빠진다. 상위 레벨 UIpanes는 부모를 가질 수 없다.
· public int Top은 UIpane의 하부 에지와 컨테이너의 클라이언트 영역의 상부 에지 사이의 픽셀 거리를 얻는다.
· public bool Visible 속성은 UIpane이 표시되는 지의 여부를 나타내는 값을 얻는다. 디폴트는 상위 레벨 UIpanes의 경우에 거짓이고, 그외 다른 모든 UIpanes의 경우에 참이다. 이 속성은, UIpane이 상위 레벨이 아니고, 상위 레벨 UIpane인 부모나 조부모가 없으면, 거짓을 반송한다.
· public int Width 속성은 UIpane의 폭을 얻는다.
UIpaneBase 클래스는 다음의 예시적이고, 총망라한 것이 아닌 공용 메소드 리스트를 제공할 수 있다:
· public Graphics CreateGraphics() 메소드는 UIpane을 위한 그래픽스 객체를 생성한다. 그것은 UIpane을 위한 그래픽스 객체를 반송한다.
· public bool Focus() 메소드는 UIpane에 대한 입력 포커스를 설정한다. 디폴트에 의해, 제어부는 포커스를 갖지 않는다. UIpane에 대한 포커스 설정은 임의의 이전에 포커스된 UIpane로부터 포커스를 제거한다. 포커스 설정은 비동기적이므로, UIpane은 실제로 즉시 포커스를 얻지 못할 것이다. 이 메소드는 입력 포커스 요청이 성공적이면 "참(true)"을 반송하고; 그렇지 않으면 "거짓(false)"을 반송한. 참을 반송하는 것은 UIpane이 UIpane 관리자(312)에게 포커스 획득에 관심이 있다는 것을 통지할 수 있다는 것을 의미한다는 것에 유의하자. 그것은 UIpane이 이미 획득된 포커스를 갖는다는 것을 의미하지는 않고; 포커스를 제공하는 것은 UIpane 관리자(312)에게 달려있다.
· public void Hide() 메소드는 사용자로부터 UIpane을 삭제한다.
· public void Invalidate(Rectangle region) 메소드는 UIpane의 지정된 영역을 무효로 하고(즉, 이 메소드는 그 영역을, 다음 페인트 동작 시에 다시 페인팅될 영역인 UIpane의 갱신 영역에 추가하고), 페인트 메시지가 UIpane에 보내지게 한다. 또한, 이 메소드는 UIpane에 할당된 자식 Uipanes를 무효로 한다. 이 메소드에서, "region" 파라미터는 무효로 될 영역을 나타낸다. 영역 파라미터가 널(null)이면, 전체 UIpane은 무효로 된다.
· public void Refresh() 메소드는 강제로 UIpane이 그 클라이언트 영역을 무효로 하게 하고, 그 자신 및 임의의 자식 UIpanes를 즉시 재드로잉하게 한다.
· public void Show() 메소드는 UIpane을 사용자에게 표시한다.
· public void SuspendLayout(bool suspend) 메소드는 UIpane을 위한 배치 로직을 일시적으로 정지하거나 재개한다. 이 메소드에서, "suspend" 파라미터는 배치가 정지되어야 하는 지의 여부를 나타낸다.
UIpaneBase 클래스는 다음의 예시적이고, 총망라한 것이 아닌 공용 이벤트 리스트를 제공할 수 있다:
· public event UIpaneEventHandler EnabledChanged는 Enabled 속성 값이 변했을 때 발생한다.
· public event UIpaneEventHandler FocusChanged는 UIpane 입력 포커스가 변할 때 발생한다.
· public event KeyEventHandler KeyPress는 UIpane이 포커스를 갖는 동안 키가 눌러질 때 발생한다.
· public event UIpaneEventHandler VisibilityChanged는 UIpane의 가시성(visibility)이 변했을 때 발생한다.
UIpaneBase 클래스는 다음의 예시적이고, 총망라한 것이 아닌 보호된 메소드 리스트를 제공할 수 있다:
· protected virtual void OnEnabledChanged() 메소드는 EnabledChanged 이벤트를 일으킨다.
· protected virtual void OnFocusChanged() 메소드는 FocusChanged 이벤트를 일으킨다.
· protected virtual void OnKeyPress(Keys keyCode, ref bool handled) 메소드는 KeyPress 이벤트를 일으킨다. 이 메소드에서, "keyCode" 파라미터는 키 이벤트에 의해 사용될 키 코드에 관련된다. "handle" 파라미터는 키 이벤트가 처리되었는 지의 여부를 나타내는 값에 관련된다.
· protected virtual OnPaint(Graphics graphics, Rectangle clipRectangle) 메소드는 기본 페인트 메소드를 제공한다. 즉, 이 메소드는 clipRectangle 내의 자식을 페인팅한다. 즉, "clipRectangle" 파라미터는 페인팅될 영역에 관련된다. clipRectangle이 널이면 모든 것이 페인팅된다. "graphics" 파라미터는 페인팅을 수행하기 위해 사용된 그래픽스에 관련된다. 그래픽스가 널이면 예외 상태로 빠진다.
· protected virtual OnVisibilityChanged() 메소드는 VisibilityChanged 이벤트를 일으킨다.
D.2.3.
ABC
_
Co
.
TV
.
Lite
.
UIPane
.
Form
ABC_Co.TV.Lite.UIpanes.Form 클래스(Form 클래스)는 상술된 UIpaneBase 클래스로부터 도출된다. Forms 클래스는 부모가 없는 상위 레벨인 컨테이너 UIpanes를 위한 베이스 클래스를 정의한다. 이들 객체는 시각적 표현이 약간 있거나 전혀 없고, 자식 UIpanes를 포함할 수 있다. 더욱 구체적으로, 해석 기반 CLR 애플리케이션은 메인 및 기타 상위 레벨 UIpanes를 위한 폼을 사용할 수 있다. 애플리케이션은 하나보다 많은 폼을 포함할 수 있지만; 각각의 폼은 애플리케이션에 등록되어야 한다. 메인 UIpane은 Run을 호출할 때 자동으로 등록되지만; 후속 상위 레벨 UIpanes(또는 폼)은 키 및 페인트 이벤트를 수신하기 위해 명백히 등록되어야 한다. Form 클래스는 공식적으로 public class Form : UIpaneBase로서 표현될 수 있다.
Form 클래스는 다음의 예시적이고, 총망라한 것이 아닌 공용 생성자 리스트를 제공할 수 있다:
· public Form() 생성자는 디폴트 세팅을 갖는 Form 클래스의 새로운 인스턴스를 초기화한다. 디폴트에 의해, 폼은 OSD와 크기가 동일하다.
· public Form(int left, int top, int width, int height) 생성자는 특정 위치 및 크기를 갖는 Form 클래스의 새로운 인스턴스를 초기화한다. UIpane이 화면의 경계 밖에 있으면 예외 상태로 빠진다. left, top, width 및 height 파라미터는 (UIpaneBase 클래스와 관련하여) 앞에서 설명되었다.
Form 클래스는 다음의 예시적이고, 총망라한 것이 아닌 공용 메소드 리스트 를 제공할 수 있다:
· public void Close() 메소드는 폼을 닫는다. 폼이 닫힐 때, 이 객체 내에 생성된 모든 자원은 닫히고, 폼은 제거된다.
· public bool DoTransition() 메소드는 전환 이벤트를 일으킨다. 폼이 임의의 다른 폼과 겹치면, 전환 이벤트가 일어날 수 없다. 이벤트가 일어나기 전에, 화면은 폼에 의해 사용된 수평 영역에서 잠기게 된다. 잠겨있는 동안, 어떤 다른 폼도 생성될 수 없고, 또는 잠긴 영역으로 이동될 수 없다. 이 메소드는 이벤트가 일어났으면 "참(true)"을 반송하고, 그렇지 않으면 "거짓(false)"을 반송한다.
Form 클래스는 다음의 예시적이고, 총망라한 것이 아닌 공용 이벤트 리스트를 제공할 수 있다:
· public event UIpaneEventHandler Closed는 폼이 닫힐때 발생한다.
· public event TransitionEventHandler Transition은 DoTransition()이 호출될 때 발생한다.
Form 클래스는 다음의 예시적이고, 총망라한 것이 아닌 보호된 메소드 리스트를 제공할 수 있다:
· protected virtual void OnClosed() 메소드는 Closed 이벤트를 일으킨다.
D.2.4.
ABC
_
Co
.
TV
.
Lite
.
UIpanes
.
Control
ABC_Co.TV.Lite.UIpanes.Control 클래스(Control 클래스)는 UIpaneBase로부터 도출된다. 이 클래스는 제어를 위한 베이스 클래스를 정의한다. 제어는 특정 기능을 수행하는 시각적 표현을 갖는 객체이다. 예를 들어, 해석 기반 CLR 애플리 케이션은 그 사용자 인터페이스 구성요소를 위한 제어를 사용한다. 제어의 예는 Button 클래스로부터 도출된 객체이다. Control 클래스는 공식적으로 public class Control : UIpaneBase로서 표현될 수 있다:
Form 클래스는 다음의 예시적이고, 총망라한 것이 아닌 공용 생성자 리스트를 제공할 수 있다:
· public Control(int left, int top, int width, int height) 생성자는 특정 위치 및 크기를 갖는 Control 클래스의 새로운 인스턴스를 초기화한다. 제어부가 화면의 경계 밖에 있으면 예외 상태로 빠진다. left, top, width 및 height 파라미터는 앞에서 (UIpaneBase와 관련하여) 설명되었다.
Control 클래스는 다음의 예시적이고, 총망라한 것이 아닌 공용 메소드 리스트를 제공할 수 있다:
· public void BringToFont() 메소드는 UIpane을 z-순서(z-order)의 앞쪽으로 오게 한다. z-순서는 부모의 자식 컬렉션 내의 인덱스에 의해 결정된다. 인덱스가 클수록 앞쪽에 가깝고; 즉, 인덱스가 0이면, 자식은 뒤쪽에 나타난다.
· public void SendToBack() 메소드는 UIpane을 z-순서의 뒤쪽으로 보낸다.
D.2.5.
ABC
_
Co
.
TV
.
Lite
.
UIpanes
.
Button
ABC_Co.TV.Lite.UIpanes.Button 클래스(Button 클래스)는 Control 클래스로부터 도출된다. Button 클래스는 TV 버튼 제어부를 나타낸다. 즉, 버튼은 버튼이 입력 포커스를 가지면 TV 리모트의 OK 키를 사용하여 클릭될 수 있다. 버튼은 또한 자식을 포함할 수 있지만; 이들 자식은 페인팅되지 않을 것이다. 버튼의 모양 은 Style 속성을 사용하여 설정될 수 있다(ButtonStyle 참조). 예를 들어, 좌측 에지가 둥글게 되고 텍스트가 좌측-정렬되는 버튼을 생성하기 위해, Style은 ButtonStyle.RoundedLeft|ButtonStyle.LeftAligned와 동일하게 설정될 수 있다. Button 클래스는 공식적으로 public class Button : Control로서 표현될 수 있다:
· public Button(int left, int top, int width, int height) 생성자는 특정 위치, 크기 또는 스타일을 갖는 Button 클래스의 새로운 인스턴스를 초기화한다. left, top, width 및 height 파라미터는 앞에서 (UIpaneBase 클래스와 관련하여) 설명되었다.
Control 클래스는 다음의 예시적이고, 총망라한 것이 아닌 공용 속성 생성자 리스트를 제공할 수 있다:
· public override byte BackColor 속성은 UIpane을 위한 배경 컬러 인덱스를 얻거나 설정한다. 예시적인 디폴트는 224이다.
· public byte BorderColor 속성은 UIpane을 위한 경계부 컬러 인덱스를 얻거나 설정한다. 예시적인 디폴트는 227이다.
· public unit BorderWidth 속성은 버튼을 위한 픽셀의 경계부 폭을 얻거나 설정한다. 예시적인 디폴트는 4이다.
· public override byte ForeColor 속성은 UIpane을 위한 전면(foreground) 컬러 인덱스를 얻거나 설정한다. 예시적인 디폴트는 227이다.
· public byte SelectedBorderColor 속성은 버튼의 선택된 경계부 컬러를 얻거나 설정한다. 예시적인 디폴트는 211이다.
· public ButtonStyle Style 속성은 버튼 스타일을 나타내는 값을 얻거나 설정한다. 예시적인 디폴트 값은 0x3이으로서, 에지는 모두 둥글게 되고, 텍스트는 중앙 정렬된다.
· public String Text 속성은 버튼의 텍스트 레이블을 나타내는 값을 얻거나 설정한다. Text가 널로 설정되면, Text는 빈 문자열로 설정된다. 예시적인 디폴트는 빈 문자열이다.
Button 클래스는 다음의 예시적이고, 총망라한 것이 아닌 공용 메소드 리스트를 제공할 수 있다.
· public virtual void GetFont(out string name, out int height, out int aspect)는 버튼 텍스트의 폰트 파라미터를 얻는다. "name" 파라미터는 버튼 텍스트의 폰트 이름에 관련된다. "name"의 예시적인 디폴트는 (물론, 디폴트 이름은 임의의 이름으로 설정될 수 있지만) "Tiresias"이다. "height" 파라미터는 버튼 텍스트의 폰트 높이에 관련된다. 예시적인 디폴트 값 높이는 20이다. "aspect" 파라미터는 버튼 텍스트의 폰트 애스펙트 비에 관련된다. "aspect"의 예시적인 디폴트 값은 100이다.
· public virtual void SetFont(string name, int height, int aspect) 메소드는 버튼 텍스트의 폰트 파라미터를 설정한다. 예시적인 디폴트 값은 상술된 바와 같다.
Button 클래스는 다음의 예시적이고, 총망라한 것이 아닌 공용 이벤트 리스트를 제공할 수 있다:
· public event UIpaneEventHandler Click은 버튼이 클릭될 때 발생한다.
Button 클래스는 다음의 예시적이고, 총망라한 것이 아닌 보호된 메소드 리스트를 제공할 수 있다:
· protected virtual void OnClick() 메소드는 Click 이벤트를 일으킨다.
· protected override void OnKeyPress(Key keyCode, ref bool handle) 메소드는 KeyPress 이벤트를 일으킨다. 이 메소드에서, "keyCode" 파라미터는 키 이벤트에 의해 사용될 키 코드를 설명한다. "handle" 파라미터는 키 이벤트가 처리되었는 지의 여부를 나타내는 값에 대한 레퍼런스를 제공한다.
· protected override void OnPaint(Graphics graphics, Rectangle clipRectangle) 메소드는 버튼을 페인팅하고, 페인트 이벤트를 일으킨다. 이 메소드에서, "graphics" 파라미터는 페인트에 사용된 그래픽스를 나타낸다. 그래픽스가 널이면 예외 상태로 빠진다. "clipRectangle" 파라미터는 페인팅될 영역을 나타낸다. clipRectangle이 널이면 모든 것이 페인팅된다.
· protected virtual void OnPaintBackground(Graphics graphics) 메소드는 버튼의 배경을 드로잉한다. 개발자는 그 자신의 배경을 드로잉하고(예를 들어, 팬시(fancy) 비트맵을 드로잉하고) 싶을 수 있다. 이들 경우에, 개발자는 이 메소드를 무효로 할 수 있다. 이 메소드에서, "graphics" 파라미터는 페인트에 사용된 그래픽스를 나타낸다. 그래픽스가 널이면 예외 상태로 빠진다.
· protected override OnVisibilityChanged() 메소드는 VisibilityChanged 이벤트를 일으킨다.
D.2.6.
ABC
_
Co
.
TV
.
Lite
.
UIpane
.
UIpaneEventHandler
UIpaneEventHandler 클래스는 UIpane 이벤트를 다루게 될 메소드를 나타낸다. 이 클래스는 공식적으로 public delegate void UIpaneEventHandler(object sender)로 표현될 수 있다. 이벤트 핸들러의 선언은 UIpaneEventHandler 델리게이트 선언과 동일한 파라미터를 가져야 한다. 이 클래스에서, "sender" 파라미터는 이벤트의 소스를 나타낸다.
D.2.7.
ABC
_
Co
.
TV
.
Lite
.
UIpanes
.
KeyEventHandler
KeyEventHandler 클래스는 키 이벤트를 다루게 될 메소드를 나타낸다. 이 클래스는 공식적으로 public delegate void KeyEventHandler(object sender, Keys keyCode, ref bool handled)로 표현될 수 있다. 이벤트 핸들러의 선언은 KeyEventHandler 델리게이트 선언과 동일한 파라미터를 가져야 한다. "sender" 파라미터는 이벤트의 소스를 나타낸다. "keyCode" 파라미터는 키 이벤트의 키 코드를 나타낸다. "handled" 파라미터는 이 키 이벤트가 이미 다루어졌는 지의 여부를 나타낸다.
D.2.8.
ABC
_
Co
.
TV
.
Lite
.
UIpanes
.
Transition
Transition 클래스는 화면에 전환을 적용하기 위한 메소드를 제공한다. 더욱 구체적으로, Transition 클래스는 시각적 전환을 폼 객체에 제공하기 위해 사용될 수 있다. 전환 객체를 생성하기 위해, 개발자는 먼저 Form.DoTransition()을 호출함으로써 전환 이벤트를 일으킬 수 있다. 이 API는 지정된 수평 화면 영역을 로크하고, 전환 이벤트를 일으킬 것이다. 그 다음, 개발자는 전환 이벤트를 다루 기 위한 이벤트 핸들러를 생성할 수 있다. 그 다음, 이 이벤트 핸들러는 유효 전환 객체를 수신할 것이다. Transition 클래스는 공식적으로 public class Transition으로 표현될 수 있다.
예제
Transition 클래스는 다음의 예시적이고, 총망라한 것이 아닌 공용 속성 리스트를 제공할 수 있다:
· public int Height 속성은 Transition 객체의 높이를 얻는다.
Transition 클래스는 다음의 예시적이고, 총망라한 것이 아닌 공용 메소드 리스트를 제공할 수 있다:
· public void Decimate(int numerator, int denominator, int offset, int top, int bottom) 메소드는 전환 객체에 미치는 데시메이트(decimate) 효과를 시뮬레이션한다. 분자(numerator)와 분모(denominator)는 영향을 받게 될 상부와 하부 사이의 라인의 퍼센트를 나타낸다. 즉, 퍼센트=(분자/분모)*100. 이 메소드에서, 파라미터 "numerator"는 퍼센트 값의 분자를 나타낸다. 파라미터 "denominator"는 퍼센트 값의 분모를 나타낸다. 파라미터 "offset"은 데시메이션에 의해 영향받지 않고 그대로 있게 될 상부로부터의 (픽셀의) 라인 수를 나타낸다. 파라미터 "top"은 데시메이트할 때 고려될 영역의 상부를 나타낸다. 상부 경계는 전환 객체에 관련있다. 인수(argument)가 범위 밖에 있으면 예외 상태로 빠진다. "bottom" 파라미터는 데시메이트할 때 고려될 영역의 하부를 나타낸다. 하부 경계는 전환 객체에 관련있다. 인수가 범위 밖에 있으면 예외 상태로 빠진다.
· public void Expose(int linesToExpose, int top, int bottom) 메소드는 상부 및 하부에 의해 정해진 영역의 중앙에서 linesToExpose에 의해 지정된 다수의 라인을 노출시킨다. 즉, 파라미터 "linesToExpose"는 지정된 상부 및 하부에 의해 정해진 영역의 중앙으로부터 노출하기 위한 다수의 라인을 나타낸다. 파라미터 "top"은 라인을 노출시킬 때 고려될 영역의 상부를 나타내다. 상부 경계는 전환 객체에 관련있다. 인수가 범위 밖에 있으면 예외 상태로 빠진다. 파라미터 "bottom"은 라인을 노출시킬 때 고려될 영역의 하부를 나타내다. 하부 경계는 전환 객체에 관련있다. 인수가 범위 밖에 있으면 예외 상태로 빠진다.
· public void RasterFade(int numerator, int denominator, int top, int bottom) 메소드는 전환 객체에 미치는 래스터 페이드 효과를 시뮬레이션한다. 분자와 분모는 영향을 받게 될 상부와 하부 사이의 라인의 퍼센트를 나타낸다. 즉, 퍼센트=(분자/분모)*100. 파라미터 "numerator"는 퍼센트 값의 분자를 나타낸다. 파라미터 "denominator"는 퍼센트 값의 분모를 나타낸다. 파라미터 "top"은 래스터 페이드될 영역의 상부를 나타낸다. 상부 경계는 전환 객체에 관련있다. 인수가 범위 밖에 있으면 예외 상태로 빠진다. 파라미터 "bottom"은 래스터 페이드될 영역의 하부를 나타낸다. 하부 경계는 전환 객체에 관련있다. 인수가 범위 밖에 있으면 예외 상태로 빠진다.
· public void Scroll(int offset, int top, int bottom) 메소드는 상부 및 하부에 의해 정해진 영역을 위 또는 아래로 스크롤한다. 파라미터 "offset"은 스크롤하기 위한 라인의 수를 나타내는 오프셋에 관련된다. 값이 0보다 크면, 영역은 위로 스크롤되고; 그렇지 않으면 영역은 아래로 스크롤된다. 파라미터 "top"은 스크롤될 영역의 상부를 나타낸다. 상부 경계는 전환 객체에 관련있다. 인수가 범위 밖에 있으면 예외 상태로 빠진다. 파라미터 "bottom"은 스크롤될 영역의 하부를 나타낸다. 하부 경계는 전환 객체에 관련있다. 인수가 범위 밖에 있으면 예외 상태로 빠진다.
D.2.9.
ABC
_
Co
.
TV
.
Lite
.
UIpanes
.
TransitionEventHandler
TransitionEventHandler 클래스는 전환 이벤트를 다루게 될 메소드를 나타낸다. 이벤트 핸들러의 선언은 TransitionEventHandler 델리게이트 선언과 동일한 파라미터를 가져야 한다. 이 클래스는 공식적으로 public delegate void TransitionEventHandler(object sender, Transition transition)으로 표현될 수 있다. 파라미터 "sender"는 이벤트의 소스를 나타낸다. 파라미터 "transition"은 전환 객체를 나타낸다.
D.2.10.
ABC
_
Co
.
TV
.
Lite
.
UIpanes
.
ButtonStyle
이 열거는 이용가능한 버튼 스타일을 지정한다. 더욱 구체적으로, ButtonStyle은 Button 객체의 모양을 지정한다. 버튼 스타일이 0x0이면, Button 객체는 구부러진 에지가 없고, 텍스트는 좌측으로 정렬된다. LeftAligned도 RightAligned도 설정되지 않으면, 텍스트는 중앙 정렬된다. LeftAligned와 RightAligned 둘다 설정되면, LeftAligned가 우선권을 갖는다. RoundLeft도 RounfRight도 설정되지 않으면, Button 객체는 구부러진 에지가 없다. ButtonStyle 열거는 공식적으로 public enum ButtonStyle로 표현될 수 있다.
이 열거의 다른 예시적인 구성요소는 다음 표에서 지정된다:
구성요소 이름 | 설명 | 값 |
LeftAligned | 텍스트는 좌측으로 정렬된다. | 0x8 |
RightAligned | 텍스트는 우측으로 정렬된다. | 0x4 |
RoundedLeft | 좌측 에지가 둥글게 된다. | 0x1 |
RoundedRight | 우측 에지가 둥글게 된다. | 0x2 |
D.2.12.
ABC
_
Co
.
TV
.
Lite
.
UIpanes
.
Keys
이 열거는 키 코드를 지정한다. 각각의 키는 가상 키 코드로 이루어지는 키 값에 의해 식별된다. 이 열거는 공식적으로 public enum Keys로 표현될 수 있다.
이 열거의 예시적인 구성요소는 다음 표에서 지정된다:
구성요소 이름 | 설명 | 값 |
Bypass | 바이 패스 버튼 | 426 |
ChannelDown | 채널 다운 버튼 | 412 |
ChannelUp | 채널 업 버튼 | 413 |
DayBackward | 날짜 뒤로가기 버튼 | 0xB2 |
DayForward | 날짜 앞으로가기 버튼 | 0xFA |
Down | 아래 화살표 버튼 | 0x28 |
Enter | 엔터 버튼 | 0x10 |
Exit | 나가기 버튼 | 0x1B |
FastForward | 고속 앞으로가기 버튼 | 458 |
Favorites | 선호 버튼 | 495 |
Guide | 안내 버튼 | 465 |
Help | 헬프 버튼 | 0x2F |
Info | 정보 버튼 | 468 |
Last | 라스트 버튼 | 401 |
Left | 좌측 화살표 버튼 | 0x25 |
List | 리스트 버튼 | 433 |
Live | 라이브 버튼 | 434 |
Lock | 잠금 버튼 | 425 |
Menu | 메뉴 버튼 | 0x12 |
Music | 음악 버튼 | 0xD |
Mute | 뮤트 버튼 | 0xAD |
NewPlay | 600/800 리모트를 위한 새로운 플레이 버튼 | 430 |
NewStop | 600/800 리모트를 위한 새로운 정지 버튼 | 431 |
PageDown | 페이지 다운 버튼 | 0x22 |
PageUp | 페이지 업 버튼 | 0x21 |
Pause | 일시정지 버튼 | 0x13 |
Play | 플레이 버튼 | 0xFA |
Power | 전원 버튼 | 489 |
Record | 녹화 버튼 | 499 |
Remote0 | 0 리모트버튼 | 0x30 |
Remote1 | 1 리모트버튼 | 0x31 |
Remote2 | 2 리모트버튼 | 0x32 |
Remote3 | 3 리모트버튼 | 0x33 |
Remote4 | 4 리모트버튼 | 0x34 |
Remote5 | 5 리모트버튼 | 0x35 |
Remote6 | 6 리모트버튼 | 0x36 |
Remote7 | 7 리모트버튼 | 0x37 |
Remote8 | 8 리모트버튼 | 0x38 |
Remote9 | 9 리모트버튼 | 0x39 |
RemoteA | A 리모트버튼 | 422 |
RemoteB | B 리모트버튼 | 423 |
구성요소 이름 | 설명 | 값 |
RemoteC | C 리모트 버튼 | 424 |
Replay | 재생 버튼 | 432 |
Rewind | 되감기 버튼 | 501 |
Right | 우측 화살표 버튼 | 0x27 |
Select | ok/선택 버튼 | 400 |
Stop | 정지 버튼 | 0xB2 |
Up | 위 화살표 버튼 | 0x26 |
VOD | 주문형 비디오 버튼 | 429 |
VolumeDown | 볼륨 다운 버튼 | 0xAE |
VolumeUp | 볼륨 업 버튼 | 0xAF |
D.3.
ABC
_
Co
.
TV
.
Lite
.
Shell
.
TVLiteApplicationBase
ABC_Co.TV.Lite.Shell 명칭공간은 그 중에서 특히, 가벼운 TV 애플리케이션을 생성하는 abstract TVLiteApplicationBase 클래스를 포함한다. 즉, ABC_Co.TV.Lite.Shell.TVLiteApplicationBase(ApplicationBase class)는 TV 애플리케이션을 나타낸다. 모든 해석기 기반 CLR 애플리케이션은 abstract TVLiteApplicationBase 인터페이스로부터 도출해야 하고, 요구된 구현을 제공한다. ApplicationBase 클래스는 공식적으로 public abstract class TVLiteApplicationBase로 표현될 수 있다.
ApplicationBase 클래스는 다음의 예시적이고, 총망라한 것이 아닌 보호된 메소드 리스트를 제공할 수 있다:
· protected void Run(IUIpane mainUIpane) 메소드는 현재의 스레드 상에서 표준 애플리케이션 메시지 루프를 실행하기 시작하고, 지정된 UIpane이 보이게 한다. 콤팩트한 .NET 환경에서, 런 메소드는 정적 메소드이다. 그러나, 해석기 기반 CLR 환경에서의 정적 메소드는 모든 실행 스레드에 대해 포괄적이다. 그러므로, Run 메소드는 각 애플리케이션이 그 자신의 메시지 펌프를 가질 수 있도록 추상 베이스 클래스 TVLiteApplicationBase 내의 보호된 메소드로서 구현된다.
Run 메소드는 메인 UIpane을 상위 레벨 UIpane으로서 등록하기 위해 RegisterUIpane을 자동으로 호출할 것이다. 즉, 파라미터 mainUIpane은 보이게 될 UIpane를 나타낸다.
ApplicationBase 클래스는 다음의 예시적이고, 총망라한 것이 아닌 공용 속성 리스트를 제공할 수 있다:
· public bool EnhancedGraphicsMode 속성은 애플리케이션이 "EGM(Enhanced Graphics Mode)"로 들어갈 수 있게 한다. EGM 모드는 애플리케이션이 사용자 팔레트를 설정하고 OSD 해상도를 변경하는 등을 할 수 있게 한다. 그것은 배타적 모드이므로, 애플리케이션이 EGM 모드로 들어가라는 요청을 할 때(EnahncedGraphicsMode를 참으로 설정할 때), 다른 모든 관리 애플리케이션은 정지될 것이다. EGM 모드로 들어가는 애플리케이션은 다른 정지된 관리 애플리케이션이 실행될 수 있도록 EGM 모드에서 나가고 싶을 때 EnhancedGraphicsMode를 거짓으로 설정해야 한다. 애플리케이션 관리자(310)는 애플리케이션이 종료될 때 강제로 애플리케이션을 EGM 모드에서 나가게 할 것이다. 이 속성의 디폴트 값은 거짓으로 설정된다. 이 속성은 Run 메소드에 대한 호 이전에 참으로만 설정될 수 있다. 메시지 루프를 시작하기 위해 Run 메소드가 호출된 후에 이 속성이 참으로 설정되면 예외 상태로 빠질 것이다.
ApplicationBase 클래스는 다음의 예시적이고, 총망라한 것이 아닌 공용 메소드 리스트를 제공할 수 있다:
· public abstract void Initialize(string url) 메소드는 애플리케이션 정의 초기화를 수행한다. URL에 부가되는 파라미터와 함께, 애플리케이션을 런치하라는 HTTP 요청의 URL은 초기화하기 위해 호 내의 url 파라미터를 통해 애플리케이션에 보내질 것이다. 다음은 예시적인 url 파라미터를 제공한다:
http://appserver/monster.dat?paraml=value1¶m2=value2.
애플리케이션은 애플리케이션이 취급되지 않은 예외를 발생시키면 종료될 것이다.
· public void Exit() 메소드는 모든 메시지 펌프에게 그들이 종료해야 한다는 것을 알리고, 그 다음에, 메시지가 처리된 후 모든 애플리케이션 UIpanes를 닫는다. Exit 메소드는 전형적으로 메시지 루프 내에서 호출되고, 강제로 Run 메소드가 반환하게 한다. 애플리케이션 관리자(310)는 애플리케이션이 애플리케이션을 종료하기 위해 Exit 메소드를 호출했기 때문에 Terminate 메소드를 호출하지 않을 것이다.
· public void RegisterUIpane(IUIpane topLevelUIpane) 메소드는 애플리케이션이 UIpane 관리자(312)에 그 상위 레벨 UIpanes를 등록할 수 있게 한다. Uipane 관리자(312)는 UIpane 이벤트를 상위 레벨 UIpane에 디스패치할 것이다.
· public abstract void Pause() 메소드는 애플리케이션에게 정지하라는 요청을 하기 위해 애플리케이션 관리자(310)가 정지 이벤트를 애플리케이션에 보낼 수 있게 한다. 애플리케이션 관리자(310)는 애플리케이션에게 정지하라고 요청한 후, 스레드를 정지할 것이다. 애플리케이션 스레드는 애플리케이션이 정지 이벤트를 다룰 때 취급하지 않은 예외를 발생시키더라도 정지될 것이다.
· public abstract void Resume() 메소드는 애플리케이션에게 재개하라는 요청을 하기 위해 애플리케이션 관리자(310)가 재개 이벤트를 애플리케이션에 보낼 수 있게 한다. 애플리케이션 관리자(310)는 재개를 위해 애플리케이션을 호출하기 이전에 애플리케이션 스레드를 정지하지 않을 것이다. 애플리케이션 스레드는 애플리케이션이 재개 이벤트를 다룰 때 취급하지 않은 예외를 발생시키더라도 정지되지 않을 것이다.
· public abstract void Terminate() 메소드는 애플리케이션에게 종료하라는 요청을 하기 위해 애플리케이션 관리자(310)가 종료 이벤트를 애플리케이션에 보낼 수 있게 한다. 애플리케이션 관리자(310)는 종료 이벤트의 처리로부터 복귀한 후에 애플리케이션 스레드가 여전히 실행중이면 애플리케이션 스레드를 종료할 것이다. 애플리케이션 스레드는 애플리케이션이 Terminate 이벤트를 다룰 때 취급하지 않은 예외를 발생시키더라도 종료될 것이다.
· public abstract void ReleaseResource() 메소드는 애플리케이션 관리자(310)가 애플리케이션에게 자유롭게 될 수 있는 임의의 자원을 해제하라는 요청을 하기 위해 해제 자원 이벤트를 애플리케이션에 보낼 수 있게 한다. 이것은 가비지 컬렉터에서 객체에 대한 레퍼런스를 제거하는 것을 포함한다.
D.4.
ABC
_
Co
.
TV
.
Lite
.
Drawing
명칭공간
D.4.1. 개요
ABC_Co.TV.Lite.Drawing(Drawing) 명칭공간은 해석기 기반 CLR을 사용하여 셋톱 박스 플랫폼 상에서 그래픽스 애플리케이션을 쓰는 개발자에 의해 용이하게 사용될 수 있는 API 집합을 제공한다.
D.4.2.
ABC
_
Co
.
TV
.
Lite
.
Drawing
.
Graphics
클래스
Graphics 클래스는 Drawing 클래스에서 도출된다. 그것은 공식적으로 public class Graphics로 표현될 수 있다.
Graphics 클래스는 다음의 예시적이고, 총망라한 것이 아닌 공용 생성자 리스트를 제공할 수 있다:
· public Graphics(nt x, int y, int width, int height) 생성자는 호출자가 화면 상의 임의의 위치에서 그래픽스 객체를 생성하게 하는 메소드를 제공한다. 그래피스 객체는 TV 표시 영역을 넘을 수 없다. 이런 일이 발생하면, 이 생성자는 유효 TV 표시 영역에 생성되는 그래픽스를 자동으로 잘라낸다.
· public Graphics(int width, int height) 생성자는 메모리 버퍼 내에 오프-스크린 그래픽스를 생성하는 메소드를 제공한다. 한 예시적인 구현에서, 상기 2개의 그래픽스 생성자는 "internal" 메소드로서 제공될 수 있다. 이것은 프로그래밍 모델이, 모든 애플리케이션이 (Form 클래스로부터 도출된) 폼 객체를 가질 것을 요구하기 때문이다. 그래픽스 객체는 모든 드로잉이 일치하도록 폼 객체에 의해 제어된다. 예를 들어, 본 애플리케이션 모델에서, 버튼은 종래의 프로그래밍 환경에서의 분리된 UIpane 객체라기 보다 오히려, 단순히 폼 내부의 직사각형을 나타낸다. 폼 객체는 버튼을 페인팅할 책임이 있다. 개발자가 이 폼을 위한 그래픽스를 생성할 수 있게 되면, 동일한 폼 상에 나타나는 다른 내용들과 버튼을 맞추기가 어려워진다. (폼 클래스가 메소드 CreateGraphics()를 가질 수 있다는 것을 상기하기 바란다.)
Graphics 클래스는 다음의 예시적이고, 총망라한 것이 아닌 공용 속성 리스트를 제공할 수 있다:
· public Rectangle ClipBounds 속성은 현재의 그래픽스 객체가 작업하고 있는 클리핑 영역을 위해 사용된다.
Graphics 클래스는 다음의 예시적이고, 총망라한 것이 아닌 공용 메소드 리스트를 제공할 수 있다:
· public void Dispose() 메소드는 그래픽스 객체를 제거한다.
· public void SetClip(Rectangle clipRect) 메소드는 현재의 그래픽스 객체 내에 클리핑 영역을 설정한다.
· public void ResetClip() 메소드는 그래픽스 객체 내의 클리핑 영역을 다시 디폴트 상태로 리셋한다.
· public void SetUserPalette(unit[]punPalette, byte starPos) 메소드는 사용자가 현재의 그래픽스 객체와 관련될 맞춤 팔레트를 지정하게 한다. 한 예시적인 구현에서, 사용자가 지정할 수 있는 최대 팔레트 엔트리 수는 253이다. 사용자는 또한, 맞춤 팔레트가 전체 컬러 팔레트 배열에서 시작해야 하는 곳을 지정할 수 있다. 맞춤 팔레트의 시작 위치 플러스 맞춤 팔레트 내의 컬러의 수가 253보다 크면, INVALID_PARAMETER 예외 상태로 빠질 것이다.
더욱 구체적으로, 한 예시적인 구현에서, 호출자는 컬러 인덱스를 0으로 설정할 수 없게 되는데, 그것은 0이 투명 컬러를 나타내기 위해 OS(304)에 의해 예약되기 때문이다. 또한, 인덱스 255는 이 플랫폼 상에서 지원된 화상 포맷이 인코드될 때 OSD 투명 컬러 인덱스로서 사용된다. 인덱스 254는 RLE 이스케이프(escape) 키로서 사용된다. 그러므로, 이 인덱스도 금지된다. 이것은, 이 예시적인 구현에서, 맞춤 팔레트 내의 컬러의 수가 253보다 커질 수 없는 이유를 설명한다.
다른 주의점으로서, 한 예시적인 구현에서, 이 메소드는 그래픽스 시스템이 EGM 모드일 때만 호출될 수 있다. 그렇지 않으면, "INVALID_EGM_STATE" 예외 상태로 빠질 것이다. 또한, 입력 파라미터가 유효하지 않거나 시작 위치가 범위 밖에 있으면 "INVALID_INPUT_PARAMETER"로 빠질 것이다.
· public static void RestoreDefaultPalette() 메소드는 디폴트 OSD 컬러 팔레트를 복원한다.
· public void SetOSDResolution(OSDResolution resolution) 메소드는 호출자가 OSD 표시 해상도를 설정하게 한다.
한 예시적인 구현에서, enum OSDResolution 메소드는 다음 정의에 의해 관리된다:
{
OSD_RES_704=0x0, //704x480 resolution
OSD_RES_576, //576x480 resolution
OSD_RES_448, //448x480 resolution
OSD_RES_352 //352x480 resolution
};
한 예시적인 구현에서, 이 메소드는 그래픽스 시스템이 EGM 모드일 때만 호출될 수 있고; 그렇지 않으면, "INVALID_EGM_STATE" 예외 상태로 빠질 것이다.
· public void RestoreDefaultOSDResolution() 메소드는 디폴트 OSD 표시 해상도를 복원한다.
· public void SetPixel(int x, int y, byte colorIndex) 메소드는 사용자가 그래픽스 문맥 상의 지정된 위치에서 컬러 값을 설정하게 한다.
· public byte GetPixel(int x, int y) 메소드는 사용자가 그래픽스 문맥 상의 지정된 위치에서 컬러 인덱스 값을 얻게 한다.
·public void FillRectangle(byte colorIndex, int x, int y, int width, int height) 메소드는 지정된 컬러로 직사각형을 채워넣는다.
· public void DrawRectangle(byte colorIndex, int penWidth, int x, int y, int width, int height) 메소드는 지정된 컬러 및 펜 폭으로 직사각형을 드로잉한다.
· public void FillEllipse(byte colorIndex, int x, int y, int width, int height) 메소드는 지정된 컬러로 타원을 채워넣는다.
· public void DrawEllipse((byte colorIndex, int penWidth, int x, int y, int width, int height) 메소드는 지정된 컬러 및 펜 폭으로 타원을 드로잉한다.
· public void DrawLine((byte colorIndex, int penWidth, int startX, int startY, int endX, int endY) 메소드는 지정된 컬러 및 펜 폭으로 라인을 드로잉한다.
· public void FillRoundRectangle(byte colorIndex, int x, int y, int width, int height, int radius, RoundingStyle style) 메소드는 에지가 둥글게 된 직사각형을 지정된 컬러로 채운다. 이 메소드에서, "radius" 파라미터는 "height" 및 "width" 파라미터의 최소치의 2분의 1보다 작거나 같아야 된다. 반경은 이 값을 초과하면, 그 제한치에 맞춰 잘려질 것이다. "style" 파라미터는 RoundingStyle.All; RoundingStyle.UpperLeft; RoundingStyle.UpperRight; RoundingStyle.LowerLeft; RoundingStyle.LowerRight; 또는 이들의 OR 조합을 포함할 수 있다.
· public void DrawRoundRectangle(byte colorIndex, int lineWidth, int x, int y, int width, int height, int radius, RoundingStyle style) 메소드는 지정된 두께의 둥글게 된 직사각형 아우트라인을 지정된 컬러로 드로잉한다. "radius" 파라미터는 "height" 및 "width" 파라미터의 최소치의 2분의 1보다 작거나 같아야 된다. 반경은 이 값을 초과하면, 그 제한치에 맞춰 잘려질 것이다. "style" 파라미터는 RoundingStyle.All; RoundingStyle.UpperLeft; RoundingStyle.UpperRight; RoundingStyle.LowerLeft; RoundingStyle.LowerRight; 또는 이들의 OR 조합을 포함할 수 있다.
·public void BitBlt(int destX, int destY, int destWidth, int destHeight, Graphics srcGraphics, int srcX, int srcY) 메소드는 한 그래픽스 객체에서 다른 그래픽스 객체로 내용들을 블리트(blt)한다.
·public void DrawImage(byte[] buffer, int x, int y) 메소드는 현재 플랫폼 상에서 지원된 특정 포맷 비트맵을 드로잉한다. 사용자는 직사각형 화상을 이 특정 포맷 비트맵으로 변환하기 위해 제공된 툴을 사용할 수 있다. 화상이 이 플랫폼이 지원하는 포맷들 중의 한 포맷이 아니면 INVALID_IMAGE_FORMAT 예외 상태로 빠질 것이다.
Graphics 클래스는 다음의 예시적이고, 총망라한 것이 아닌 내부 메소드 리스트를 제공할 수 있다.
· internal Graphics() 메소드는 전체 TV 표시 UIpane을 커버하는 그래픽스 객체를 생성하는 생성자를 제공한다.
· internal static void EnterEGM() 메소드는 애플리케이션이 "EGM(Enhanced Graphics Mode)"으로 들어갈 수 있게 한다. 한 예시적인 구현에서, 단 하나의 애플리케이션만이 임의의 특정 시기에 EGM 모드로 들어가도록 허용된다. 그래픽스 시스템이 이미 EGM 모드에 있을 때 호출자가 EGM 모드로 들어가고자 시도하면 "INVALID_EGM_STATE" 예외 상태로 빠질 것이다. 애플리케이션은 EGM 모드에서만 사용자 팔레트를 설정하고, OSD 해상도를 변경하는 등등이 허용된다.
· internal static void LeaveEGM() 메소드는 EGM 모드에서 나간다. 이 API를 호출하기 전에, 호출자는 디폴트 컬러 팔레트 및 디폴트 OSD 해상도를 복원할 책임이 있다. (1) 애플리케이션의 모드가 EGM 모드가 아니거나; (2) 애플리케이션이 디폴트 컬러 팔레트를 복원하지 않았거나; (3) 애플리케이션이 디폴트 OSD 해상도를 복원하지 않았으면, 이 API로부터 "INVALID_EGM_STATE" 예외 상태로 빠질 것이다.
· internal static void Scroll(int offset, int upBound, int lowBound) 메소드는 "offset"이 양수이면 화면을 위로 스크롤하고, 또는 "offset"이 음수이면 화면을 아래로 스크롤한다. 이 효과는 상부/하부 경계 안에서만 발생할 것이다.
· internal static void Decimate(int numerator, int denominator, int offset, int upBound, int lowBound) 메소드는 데시메이션 효과를 시뮬레이션한다. 그것은 효과 레벨을 나타내기 위한 입력으로서 퍼센트 수를 갖는다.
· internal static void RasterFade(int numerator, int denominator, int upBound, int lowBound) 메소드는 래스터 페이드 효과를 시뮬레이션한다. 그것은 효과 레벨을 나타내기 위한 입력으로서 퍼센트 수를 갖는다.
· internal static void Expose(int linesToExpose, int upBound, int lowBound) 메소드는 UIpane-지정 "upBound" 및 "lowBound"의 중앙에서, "linesToExpose"에 의해 지정된 다수의 라인을 드러낸다.
D.4.3.
ABC
_
Co
.
TV
.
Lite
에서 사용된
RLE
압축 화상 포맷
플랫폼은 다양한 화상 포맷을 사용할 수 있다. 소유권이 있는 화상 포맷의 2종류는 비압축 비트맵 포맷; 및 RLE 압축 비트맵 포맷을 포함한다. 이들 소유권있는 화상 포맷은 고객에게 공급될 수 있는 화상 변환 툴을 사용하여 발생될 수 있다.
RLE 압축 포맷의 설명은 다음과 같다.
typedef struct
{
unsigned char ucMagic1; //First file signature number: "V"
unsigned char ucMagic2; //Second file signature number: "J"
unsigned char fRLE; //1 if the image is RLE compressed
unsigned char ucPad; //Padding, unused
unsigned short usWidth; //Width of the image
unsigned short usHeight; //Height of the image
} SpotImageHeader;
2개 미만의 연속된 픽셀이 동일한 픽셀 값을 가지면, 이 포맷은 현재의 픽셀 "그대로(as is)"를 인코드한다. 동일한 값을 갖는 2개보다 많은 연속된 픽셀에 마주치면, 이 포맷은 이들 픽셀을 RLE_ESCAPE, 픽셀 (인덱스) 값 및 카운터인 RLE 시퀀스로서 인코드한다.
D.5 폰트
메소드
다음의 서브섹션은 폰트의 렌더링을 다루는 기능을 설명한다.
D.5.1. 폰트 설치 및 설치해제
Font 수명 관리는 TVLiteApplicationBase 객체에서 취급된다. 폰트를 설치하고 선택적으로 설치해제하는 기능은 다음을 포함한다:
· void TVLiteApplicationBase.InstallFont(string name, byte[] fontData) 메소드는 새로운 폰트를 설치한다. 폰트는 (데스크톱 환경에서의 그러한 폰트의 사용에 비해) 불필요한 헤더 정보에서 제거된다. 폰트 이름은 대소문자에 민감하다.
이 메소드는 (1) 동일한 이름의 폰트가 이미 설치되어 있지만 상이한 데이터를 가진 경우; (2) 공급된 바이트가 유효한 스트립된 트루 타입 폰트로서 분석될 수 없는 경우; 또는 (3) 그 밖의 전형적인 에러 상태의 경우에, 예외로 된다. 두번째 시도가 동일한 데이터를 갖는 폰트를 설치하게 되면, 호는 예외로 되지 않을 것이다. 즉, 폰트를 설치하는 애플리케이션이 최초에 폰트를 설치한 애플리케이션과 다르면, 폰트에 대한 참조 계수는 증가될 것이다. 동일한 애플리케이션이 동일한 폰트를 2번 설치하면, 두번째 설치 시도는 효과를 나타내지 않는다.
InstallFont 메소드는 다음의 예시적인 예외 에러 반송을 제공한다:
0-(MAX_FONT-1) = 이 폰트의 슬롯 번호;
FONT_DUP_NAME = 이미 설치되었지만 데이터가 일치하지 않는 동일한 이름의 폰트;
FONT_TABLE_FULL = 폰트 테이블이 가득참; 및
FONT_DATA_VALIDATION_ERR = 폰트 데이터를 로드하는 문제.
주의할 점은 폰트가 설치되는 동안 그외 다른 애플리케이션들이 이 동일한 폰트를 사용할 수 있다는 것인데, 하지만 그들이 스스로 폰트를 설치하지 않았으면, 폰트는 설치 애플리케이션이 종료될 때 사라질 수 있다. 이와 같이, "호스트" 애플리케이션이 편승(piggyback) 애플리케이션보다 먼저 종료될 거라는 것이 보장될 수 없으면 다른 애플리케이션에 편승하는 나쁜 관행이 고려될 수 있다.
· void TVLiteApplicationBase.DeinstallFont(string name) 메소드는 폰트의 설치를 해제한다. 또는, 하나보다 많은 애플리케이션이 폰트를 설치했으면, DeinstallFont 메소드는 호출하는 애플리케이션의 참조 계수를 해제한다.
더욱 구체적으로, 설치된 폰트는 애플리케이션의 수명동안 지속될 것이고, 애플리케이션이 종료될 때(이 종료 애플리케이션이 그 폰트를 사용하는 마지막 애플리케이션인 경우에) 자동으로 제거될 것이다. 일반적으로, 종료 이전에 DeinstallFont를 호출할 필요는 없다. 그러나, 폰트를 일시적으로만 사용할 필요가 있다면, 개발자는 폰트를 명시적으로 설치해제하는 것을 고려할 수 있다.
DeinstallFont 호는 애플리케이션이 폰트를 설치하지 않았거나 폰트를 이미 설치해제했으면 예외로 될 것이다.
D.5.2.
그래픽스
객체 폰트-관련
메소드
그래픽스 객체는 다수의 다른 폰트-관련 API(메소드)를 제공한다. 그러한 예시적인 방법은 다음을 포함한다:
· void SetAntiAliasBackgroundColor(int backIndex) 메소드는 안티-에일리어싱에 사용될 컬러를 설정한다. 더욱 구체적으로, 이 호는 안티-에일리어싱 목적을 위해 사용하기 위한 중간 컬러의 테이블을 만들기 위해 사용된 컬러를 설정한다. 이것은 디폴트 팔레트가 사용되고, 전면 및 배경 컬러가 6x6x6 컬러 튜브 내에 속할 때 매우 효율적이다. 컬러 테이블의 철저한 행로는 맞춤 팔레트가 사용될 때 또는 컬러가 6x6x6 공간 밖에서 사용될 때 수행될 것이고; 행로는 안티-에일리어싱 테이블에서 각 위치에 대한 최상의 값을 찾는다.
-1의 "backIndex"가 지정되면, 어떤 안티-에일리어싱도 수행되지 않을 것이다. 사용되는 전면 컬러와 동일한 배경 컬러의 설정은 안티-에일리어싱을 불능케 하는 효과를 나타낸다.
예시적인 예외 에러 반송은 다음을 포함한다:
FONT_PARAM_OUT_OF_RANGE = 범위 밖의 팔레트 인덱스; 및
FONT_SYSTEM_ERR = 시스템 컬러 팔레트 정보를 페치하는 에러.
· void SetFont(string name, int height, int aspect) 메소드는 문자열 출력을 위해 사용될 현재의 폰트를 설정한다. "aspect" 파라미터는 30과 250을 포함하여 그 사이의 퍼센트 값을 정의하는데, 30은 30% 정상 폭을 의미하고, 250은 250% 정상 폭을 의미한다. "height" 파라미터는 4-250을 포함하여 그 범위 내에서 폰트의 픽셀 높이를 지정한다. 폰트 이름은 대소문자에 민감하다. 폰트가 글리프-전용 폰트(어떤 cmap 테이블도 포함하지 않는 폰트)이면, 높이 및 애스펙트는 무시된다.
예시적인 예외 에러 반송은 다음을 포함한다:
FONT_NOT_FOUND = 그 슬롯에서 폰트 없음; 및
FONT_PARAM_OUT_OF_RANGE = 범위 밖의 파라미터.
· void DrawString(byte colorIndex, string s, int x, int y) 메소드는 위치(x,y)에서 현재 설정된 폰트를 사용하여 지정된 컬러로 문자열을 출력한다. 이 메소드는 어떤 포매팅도 수행하지 않고; 단지 텍스트의 한 개의 라인을 출력한다.
예시적인 예외 에러 반송은 다음을 포함한다:
FONT_NOT_FOUND = 그 슬롯에서 폰트 없음; 및
FONT_PARAM_OUT_OF_RANGE = 범위 밖의 크기 또는 애스펙트 비.
· void DrawString(byte colorIndex, string s, int x, int y, int width, AlignStyle align, char truncation) 메소드는 지정된 폭을 초과하지 않도록 필요하다면 잘라내어 좌측, 우측 또는 중앙 정렬로, 현재 설정된 폰트를 사용하여 지정된 컬러로 문자열을 출력한다. 문자열이 잘리고, 비제로 잘라버림 문자가 공급되면, 이 문자는 문자열에 미리 달려있거나 부가된다. 잘라진 중앙배치 문자열의 경우, 잘라버림 문자는 미리 달려있고, 부가된다. 이 메소드에서, 정렬 파라미터는 AlignStyle.Left, AlignStyle.Right 또는 AlignStyle.Center일 수 있다.
예시적인 예외 에러 반송은 다음을 포함한다:
FONT_NOT_FOUND = 그 슬롯에서 폰트 없음; 및
FONT_PARAM_OUT_OF_RANGE = 범위 밖의 크기 또는 애스펙트 비.
· void DrawString(byte colorIndex, byte[] utf8Bytes, int byteOffset, int characterCount, byte[] advances, int x, int y) 메소드는 현재 선택된 폰트에 의존하여 글리프의 런(run) 또는 문자열을 출력한다. 선택된 폰트가 글리프만을 포함하면(cmap 테이블 없음), 바이트 영역의 헤드로부터의 byteOffset에서의 바이트 문자열은 디코드되어, 글리프 인덱스로서 처리된다. 그렇지 않으면, 바이트는 UTF-8 인코드된 문자 런으로서 처리된다. 글리프는 지정된 컬러 인덱스를 사용하여 출력되고, 현재의 안티-에일리어스 배경 컬러로 안티-에일리어싱된다. "진행 배열(advanecs array)"은 출력될 각 문자/글리프에 대한 수평 진행을 포함한다.
0보다 작은 진행을 지원하기 위해, 진행은 다음 방식으로 인코드된다. 각 문자 진행 폭은 1 또는 2 바이트 길이이다. 0 내지 127 범위의 진행 폭은 1 바이트를 사용하여, 변경없이 저장된다. 이 범위 밖에서, 최상위(MSB) 비트(0x80)는 2바이트 시퀀스의 제1 바이트를 나타낸다. 다음 비트(0x40)는 디코드된 값이 부정되어야 하는지 나타낸다. 비트 4 및 5(0x30)는 무시되지만, 0으로 설정되어야 한다. 하위 4비트 및 다음 바이트는 진행 폭의 크기를 나타낸다. 제1 바이트의 비트 6이 설정되면, 폭은 무효로 된다. 이것은 12 비트 길이까지 폭을 지원한다. 진행 리스트가 공급되면, 그 진행 리스트는 적어도 characterCount 문자의 수를 지원할 만큼 충분한 엔트리를 포함해야 한다.
예시적인 예외 에러 반송은 다음을 포함한다:
FONT_NOT_FOUND = 어떤 폰트도 선택되지 않음; 및
FONT_PARAM_OUT_OF_RANGE = 범위 밖의 크기 또는 애스펙트 비.
· int MeasureString(string s) 메소드는 현재 설정된 폰트를 사용하여 픽셀의 스트링 폭을 반환한다.
예시적인 예외 에러 반송은 다음을 포함한다:
FONT_PARAM_ERR = NULL 입력 등;
FONT_NOT_FOUND = 선택된 유효 폰트 없음;
FONT_PARAM_OUT_OF_RANGE = 범위 밖의 폰트 크기 또는 애스펙트 파라미터; 및
FONT_BAD_UTF8_CODE = 문자열 내의 무효 UTF8 시퀀스.
· int BreakString(string s, int startIndex, int width, string sep) 메소드는 현재 설정된 폰트를 사용하여, "sep" 내의 문자를 사용해서 문자열을 워드로 나누고자 시도하고, 문자열이 지정된 폭에 맞게 나누어질 수 있을 때 분리자 문자의 인덱스를 반환할 것이다. 이 메소드는 문자열이 공급된 폭 내에서 "sep"를 사용해서 적합하게 나누어질 수 없으면 "1"을 반환한다. 효율성의 이유로, 한 예시적인 구현에서, "sep" 문자열은 최대 8개의 문자만을 포함할 수 있다. 이것은 대부분의 실제 용도에 적합해야 된다. 이 문자열이 빈 문자열이면, 텍스트는 임의의 문자 상에서 나누어질 것이다. 예를 들어, 문자열 "How now cow"가 0의 startIndex인 공백 문자만을 포함하는 분리자와 함께 보내진다고 하자. 처음 3개의 워드만이 적합하다면, BreakString()은 "cow" 앞의 공백의 인덱스인 13을 반환할 것이다. 전체 문자열이 적합하다면, 이 메소드는 문자열의 길이인 17을 반환할 것이다.
예시적인 예외 에러 반송은 다음을 포함한다:
FONT_PARAM_ERR = NULL 파라미터 등;
FONT_NOT_FOUND = 선택된 유효 폰트 없음;
FONT_PARAM_OUT_OF_RANGE = 범위 밖의 폰트 크기 또는 애스펙트 파라미터, 너무 긴 sep 문자열; 및
FONT_BAD_UTF8_CODE = "sep" 문자열 내의 무효 UTF8 시퀀스.
· void GetFontMetrics(out int ascent, out int descent, out int lineSpacing) 메소드는 텍스트의 정확한 배치에 필요한 현재 지정된 폰트의 속성을 페치한다. "ascent" 파라미터는 폰트 글리프가 기준선 위에 드로잉할 수 있는 픽셀의 수가 얼마인지 설명하는 양의 값이다. "descent" 파라미터는 폰트 글리프가 기준선 아래에 드로잉할 수 있는 픽셀의 수가 얼마인지 설명하는 양의 값이다. "lineSpacing" 파라미터는 이 폰트에서 텍스트의 라인들 사이에 필요한 픽셀의 예상된 디폴트 간격이다. 이것은 폰트의 상단, 하단 및 라인 갭의 합이다.
예시적인 예외 에러 반송은 다음을 포함한다:
FONT_PARAM_ERR = NULL 파라미터 등; 및
FONT_NOT_FOUND = 지정된 슬롯에서 폰트 없음.
D.5.3. 폰트 에러 코드
예시적인 폰트 에러 코드는 다음을 포함한다:
FONT_PARAM_ERR 0x85000002
FONT_DUP_NAME 0x85000003
FONT_TABLE_FULL 0x85000004
FONT_DATA_VALIDATION_ERR 0x85000005
FONT_NOT_FOUND 0x85000006
FONT_PARAM_OUT_OF_RANGE 0x85000007
FONT_BAD_UTF8_CODE 0x85000008
FONT_SYSTEM_ERR 0x85000009
D.6. 고유 이벤트 및 관리 비동기
콜백
엔티티는 이벤트 통지에 대해 등록하기 위해 NotifyOnEventCallback 시스템 메소드(내부 전용)를 호출할 수 있다. NotifyOnEventCallback은 비-블로킹(non-blocking) 호이고, 엔티티는 그렇게 하라는 어떤 명시된 요구가 있지 않으면, 분리된 스레드 상에서 이 호를 만들 필요가 없다. HTTP, MpegFiltering, Tuning, eTV 등과 같은 모든 콜백-지향 이벤트의 대기 및 디스패칭을 수행할 단일 시스템 스레드가 있을 것이다. (예외는 전용 시스템 스레드에 의해 다루어지는 UserInput, AppLaunch 및 PingPong 이벤트이다.)
이벤트 유형은 대체로 2가지로 분류될 수 있다: 다수의 인스턴스 이벤트 및 단일 인스턴스 이벤트. HTTP 및 GuideDB Search는 전형적인 다수의 인스턴스 모델을 나타낸다. 이들 모델에서, 요청은 전형적으로, 동작을 시작하기 위해 (엔티티에 의해) 명시적으로 이루어져야 하고, 다수의 스레드는 상이한 요청을 생성하는 것일 수 있다. 이 모델에서, (NotifyOnEvent에 대한) 호출자는 동일한 이벤트의 다수의 인스턴스(예를 들어, 동일한 애플리케이션 상의 상이한 스레드로부터의 또는 상이한 애플리케이션으로부터의 다수의 HTTP 요청) 사이를 구별하기 위해 사용될 수 있는 대응하는 NSL 핸들을 넘겨줄 수 있다. 단일 인스턴스에서, 엔티티는 전형적으로 요청을 초기화하기 위해 명시된 어떤 것도 할 필요가 없다. 런타임은 자동으로 이들 종류의 이벤트를 얻고, 그것들을 이해 관계자에게 디스패치할 것이다(그 데이터를 획득하고, 그것을 적절히 분석하여, 그 API의 고객에게 더욱 디스패칭하는 것이 엔티티의 책임이다).
한 예시적인 구현에 따르면, 어떤 시점에서나, Event Type/Handle 조합에 대해 단 하나의 미해결 요청이 있을 수 있다. 예를 들어, 한 예시적인 구현에서, 처음의 요청이 성공적으로 완료된 때까지(예를 들어, 콜백이 호출된 때까지) 동일한 핸들에서 제2 HTTP 요청은 할 수 없다. 이것은 어려운 요구사항이 아니고, 요구된 경우와 소정의 조건이 부합된 경우에 어느 정도 완화될 수 있다.
SpotHost 계층은 NSL과 SPOT 환경 사이의 중개자로서 동작할 것이다. 단일 인스턴스 모델에서, 이벤트는 모든 가입자에게 방송될 것이다. SpotHost 계층은 NSL 계층으로부터 (HttpResponse 또는 MpegFilter와 같은) 이벤트를 획득해서, 그것을 HAL_DISPATCH_EVENT 구조체로 래핑(wrapping)하고, Toba_EnqueueDispatchEvent 함수를 사용하여 그것을 시스템 대기열에 보낸다. 엔티티는 SpotHost 계층에서 적절한 함수를 구현할 책임이 있다.
시스템은 처리하기 위한 대기열의 이벤트 오프를 행할 때, 일치하는 요청을 찾을 수 없거나, 그것을 디스패치하기 위한 임의의 타겟을 찾을 수 없으면(예를 들어, 요청을 한 애플리케이션이 종료되었기 때문에), 시스템은 (적절한 종결처리를 한 후에) 응답을 폐기할 것이다. 따라서, API는 초기화를 수행하기 이전에 (NotifyOnEvent를 호출함으로써) 먼저 통지에 대해 등록해야 한다. 그렇지 않으면, 응답이 폐기되게 할 수 있는 미묘한 경쟁 상태가 있을 수 있다. 시스템은 일치하는 요청을 찾으면, 대응하는 델리게이트를 호출할 것이다. 엔티티는 델리게이트 핸들러 내의 사소하지 않은 어떤 일이라도 수행하면 안된다.
Dispose 메소드는 (NativeResponse.freeNativeDataFunctionPtr에 의해 지시된 함수를 호출하고, 파라미터로서 rawNativeDataPtr을 넘겨주는) NativeResponse 객체에서 호출되어야 한다. 원시 데이터를 보유하는 것이 바람직하다면, NativeResponse 객체를 유지할 수 있고; 대안적으로, freeNativeDataFunctionPtr 필드를 0으로 설정한 다음에 Dispose를 호출할 수 있다. 콜백에 의해 예외 상태로 빠지면, 시스템은 최악으로 여기고, NativeResponse 객체에서 Dispose를 호출한다. 시스템 및 사용자가 보증된 종결처리를 제공할 수 있을 것이기 때문에 종결처리를 수행해도 아무런 의의가 없다.
시스템은 또한 등록해제를 위해서도 명시적 API, 예를 들어, CancelNotification(HalDispatchEvents e, uint nativeHandle)를 제공할 수 있다. 이 기능을 사용하여, 시스템은 단지 자동 등록해제를 위한 비정상 종료 케이스하고만 관련되어야 한다.
사용 예제
여기에서의 목적은 (각 요청에 대한 분리된 스레드를 모두 생성하지 않고) NSL/PAL 계층으로부터 비동기 콜백 및 시스템 이벤트를 수신하도록 매우 가볍고 "얇은" 계층을 사용자에게 제공하는 것이다. API 제작자는 원한다면, 이 특징 위에 IAsyncResult/AsyncCallback 기반 콜백 메카니즘을 구성할 수 있다.
본 발명은 구조적 특징 및/또는 방법론적 액트에 특정된 언어로 설명되었지만, 첨부된 청구범위에서 규정된 본 발명은 설명된 특별한 특징이나 액트에 반드시 제한되는 것은 아니라는 것을 이해할 것이다. 오히려, 특별한 특징 및 액트는 청구된 본 발명을 구현하는 예시적 형태로 개시된다.
Claims (20)
- 셋톱 박스 시스템에 있어서,셋톱 박스 시스템에 의해 제공된 하드웨어 기능을 나타내는 하드웨어 계층; 및셋톱 박스 환경에서 사용하기 위해 구성된 해석기 기반 코어 런타임 엔진(interpreter-based core runtime engine)을 포함하고,상기 셋톱 박스 시스템은 상기 하드웨어 계층 및 상기 해석기 기반 코어 런타임 엔진을 사용하여 함수를 수행할 수 있는 애플리케이션을 실행하도록 구성되는 셋톱 박스 시스템.
- 제1항에 있어서, 상기 하드웨어 기능은 5 MB 미만의 메모리를 포함하는 셋톱 박스 시스템.
- 제1항에 있어서, 상기 셋톱 박스 환경에서 사용하기 위해 구성되어, 애플리케이션들을 관리하는 애플리케이션 관리자를 더 포함하는 셋톱 박스 시스템.
- 제3항에 있어서, 상기 애플리케이션 관리자는 다른 애플리케이션이 활성화될 때 현재의 애플리케이션을 정지하고, 그외 다른 애플리케이션이 비활성화될 때 현 재의 애플리케이션을 재개하도록 구성되는 셋톱 박스 시스템.
- 제1항에 있어서, 상기 셋톱 박스 환경에서 사용하기 위해 구성되어, 사용자 인터페이스 프리젠테이션들을 관리하는 UI 관리자를 더 포함하는 셋톱 박스 시스템.
- 제1항에 있어서, 한 그래픽 프리젠테이션에서 다른 그래픽 프리젠테이션으로 전환할 때 전환 효과(transition effect)를 제공하도록 구성된 그래픽스 기능을 더 포함하는 셋톱 박스 시스템.
- 제6항에 있어서, 상기 전환 효과는 데시메이션(decimation); 페이딩(fading); 스크롤링(scrolling); 및 익스포징(exposing) 중의 하나 이상을 포함하는 셋톱 박스 시스템.
- 제1항에 있어서, 그래픽 프리젠테이션의 컬러 팔레트(color palette)를 변경하도록 구성된 그래픽스 기능을 더 포함하는 셋톱 박스 시스템.
- 제1항에 있어서, 그래픽 프리젠테이션의 해상도를 변경하도록 구성된 그래픽스 기능을 더 포함하는 셋톱 박스 시스템.
- 제1항에 있어서, 폰트(font) 파일들로부터 정보를 제거함으로써 폰트 처리를 단순화하도록 구성된 그래픽스 기능을 더 포함하는 셋톱 박스 시스템.
- 제1항에 있어서, 안티-에일리어싱(anti-aliasing)을 폰트들에 제공하도록 구성된 그래픽스 기능을 더 포함하는 셋톱 박스 시스템.
- 제1항에 있어서,상기 하드웨어 기능은 표시 장치 상의 각 라인들에 대응하는 메모리 위치들을 제공하는 라인 제어 레지스터(LCR)를 포함하고,상기 셋톱 박스 시스템은 상기 LCR을 조작처리함으로써 그래픽스 효과를 제공하도록 구성된 그래픽스 기능을 더 포함하는 셋톱 박스 시스템.
- 제한된 양의 자원들을 갖는 셋톱 박스 시스템에 있어서,셋톱 박스 시스템에 의해 제공된 하드웨어 기능을 나타내는 하드웨어 계층; 및셋톱 박스 환경에서 사용하기 위해 구성된 해석기 기반 처리 모듈을 포함하고,상기 하드웨어 기능은 표시 장치 상의 각 라인들에 대응하는 메모리 위치들을 제공하는 라인 제어 레지스터(LCR)를 포함하고,상기 셋톱 박스 시스템은 상기 LCR을 조작처리함으로써 그래픽스 효과를 제 공하도록 구성된 그래픽스 기능을 더 포함하는 셋톱 박스 시스템.
- 제13항의 셋톱 박스 시스템을 구현하는 명령어들을 포함하는 하나 이상의 기계-판독가능 매체.
- 자원-제약 셋톱 박스 환경에서 애플리케이션을 실행하는 방법에 있어서,현재의 애플리케이션을 로드하여 초기화하는 단계;셋톱 박스 환경에서 사용하기 위해 구성된 해석기 기반 처리 모듈을 사용하여 현재의 애플리케이션을 실행하는 단계;현재 애플리케이션의 사용자 그래픽스 프리젠테이션과 충돌하는 다른 애플리케이션이 활성화될 때 현재의 애플리케이션을 정지하는 단계;그외 다른 애플리케이션이 비활성화될 때 현재의 애플리케이션을 재개하는 단계; 및종료(exit) 이벤트의 발생시에 현재의 애플리케이션을 종료하는 단계를 포함하는 자원-제약 셋톱 박스 환경에서의 애플리케이션 실행 방법.
- 제15항에 있어서, 상기 초기화 단계는 상기 애플리케이션을 위한 메시지 스레드를 설정하는 단계를 포함하는 방법.
- 제15항에 있어서, 한 그래픽스 프리젠테이션에서 다른 그래픽스 프리젠테이 션으로 전환할 때 전환 효과를 제공하는 단계를 더 포함하는 방법.
- 제15항에 있어서, 한 그래픽스 프리젠테이션에서 다른 그래픽스 프리젠테이션으로 전환시에 상기 팔레트 및 해상도의 하나 이상을 변경하는 단계를 더 포함하는 방법.
- 제15항의 방법을 구현하는 명령어들을 포함하는 하나 이상의 기계-판독가능 매체.
- 제15항의 방법을 구현하도록 구성된 로직을 포함하는 셋톱 박스 시스템.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/097,840 | 2005-04-01 | ||
US11/097,840 US20060225107A1 (en) | 2005-04-01 | 2005-04-01 | System for running applications in a resource-constrained set-top box environment |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20070121707A true KR20070121707A (ko) | 2007-12-27 |
Family
ID=37072173
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020077022439A KR20070121707A (ko) | 2005-04-01 | 2006-03-29 | 자원-제약 셋톱 박스 환경에서 애플리케이션을 실행하는시스템 |
Country Status (6)
Country | Link |
---|---|
US (1) | US20060225107A1 (ko) |
EP (1) | EP1869883A4 (ko) |
JP (1) | JP2008536384A (ko) |
KR (1) | KR20070121707A (ko) |
CN (1) | CN101185328A (ko) |
WO (1) | WO2006107662A2 (ko) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101440717B1 (ko) * | 2012-05-16 | 2014-09-17 | 위스트론 코포레이션 | 가상 채널 관리 방법, 디지털 콘텐츠 검색 방법, 및 가상 채널을 가진 네트워크 기반 멀티미디어 재생 시스템 |
Families Citing this family (70)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7193562B2 (en) | 2004-11-22 | 2007-03-20 | Ruckus Wireless, Inc. | Circuit board having a peripheral antenna apparatus with selectable antenna elements |
US7880683B2 (en) | 2004-08-18 | 2011-02-01 | Ruckus Wireless, Inc. | Antennas with polarization diversity |
US7652632B2 (en) | 2004-08-18 | 2010-01-26 | Ruckus Wireless, Inc. | Multiband omnidirectional planar antenna apparatus with selectable elements |
US7933628B2 (en) | 2004-08-18 | 2011-04-26 | Ruckus Wireless, Inc. | Transmission and reception parameter control |
US7696946B2 (en) | 2004-08-18 | 2010-04-13 | Ruckus Wireless, Inc. | Reducing stray capacitance in antenna element switching |
US7965252B2 (en) | 2004-08-18 | 2011-06-21 | Ruckus Wireless, Inc. | Dual polarization antenna array with increased wireless coverage |
US8031129B2 (en) | 2004-08-18 | 2011-10-04 | Ruckus Wireless, Inc. | Dual band dual polarization antenna array |
US7899497B2 (en) | 2004-08-18 | 2011-03-01 | Ruckus Wireless, Inc. | System and method for transmission parameter control for an antenna apparatus with selectable elements |
US7292198B2 (en) | 2004-08-18 | 2007-11-06 | Ruckus Wireless, Inc. | System and method for an omnidirectional planar antenna apparatus with selectable elements |
TWI391018B (zh) | 2004-11-05 | 2013-03-21 | Ruckus Wireless Inc | 藉由確認抑制之增強資訊量 |
US8638708B2 (en) | 2004-11-05 | 2014-01-28 | Ruckus Wireless, Inc. | MAC based mapping in IP based communications |
US7505447B2 (en) | 2004-11-05 | 2009-03-17 | Ruckus Wireless, Inc. | Systems and methods for improved data throughput in communications networks |
US8619662B2 (en) | 2004-11-05 | 2013-12-31 | Ruckus Wireless, Inc. | Unicast to multicast conversion |
US8792414B2 (en) | 2005-07-26 | 2014-07-29 | Ruckus Wireless, Inc. | Coverage enhancement using dynamic antennas |
US7358912B1 (en) | 2005-06-24 | 2008-04-15 | Ruckus Wireless, Inc. | Coverage antenna apparatus with selectable horizontal and vertical polarization elements |
US7646343B2 (en) | 2005-06-24 | 2010-01-12 | Ruckus Wireless, Inc. | Multiple-input multiple-output wireless antennas |
US7893882B2 (en) | 2007-01-08 | 2011-02-22 | Ruckus Wireless, Inc. | Pattern shaping of RF emission patterns |
US7789757B2 (en) * | 2005-09-22 | 2010-09-07 | At&T Intellectual Property I, L.P. | Video games on demand with anti-piracy security |
US8009644B2 (en) * | 2005-12-01 | 2011-08-30 | Ruckus Wireless, Inc. | On-demand services by wireless base station virtualization |
US20070275733A1 (en) * | 2006-03-03 | 2007-11-29 | David Vismons | Method for providing certain information |
US9071583B2 (en) | 2006-04-24 | 2015-06-30 | Ruckus Wireless, Inc. | Provisioned configuration for automatic wireless connection |
US9769655B2 (en) | 2006-04-24 | 2017-09-19 | Ruckus Wireless, Inc. | Sharing security keys with headless devices |
EP2013758B1 (en) | 2006-04-24 | 2016-08-03 | Ruckus Wireless, Inc. | Dynamic authentication in secured wireless networks |
US8670725B2 (en) | 2006-08-18 | 2014-03-11 | Ruckus Wireless, Inc. | Closed-loop automatic channel selection |
KR100781918B1 (ko) * | 2007-02-02 | 2007-12-04 | 가온미디어 주식회사 | Mdu 방송 신호 분배 시스템 |
US8073882B2 (en) | 2007-07-11 | 2011-12-06 | Mats Stefan Persson | Method, system and computer-readable media for managing software object handles in a dual threaded environment |
US8547899B2 (en) | 2007-07-28 | 2013-10-01 | Ruckus Wireless, Inc. | Wireless network throughput enhancement through channel aware scheduling |
JP5092608B2 (ja) * | 2007-08-01 | 2012-12-05 | パナソニック株式会社 | 受信装置 |
US8127233B2 (en) * | 2007-09-24 | 2012-02-28 | Microsoft Corporation | Remote user interface updates using difference and motion encoding |
KR100974908B1 (ko) * | 2007-12-15 | 2010-08-09 | 한국전자통신연구원 | Smmd 기반 사용자 맞춤형 미디어 서비스 시스템 및방법 |
US8355343B2 (en) | 2008-01-11 | 2013-01-15 | Ruckus Wireless, Inc. | Determining associations in a mesh network |
US8695056B2 (en) * | 2008-01-26 | 2014-04-08 | International Business Machines Corporation | Method for information tracking in multiple interdependent dimensions |
BRPI0803717A2 (pt) * | 2008-09-03 | 2010-06-15 | Tqtvd Software Ltda | sistema de execução de aplicativos para televisão digital, aparato de execução de aplicativos para televisão digital e método para implementar tal sistema |
US8217843B2 (en) | 2009-03-13 | 2012-07-10 | Ruckus Wireless, Inc. | Adjustment of radiation patterns utilizing a position sensor |
US8698675B2 (en) | 2009-05-12 | 2014-04-15 | Ruckus Wireless, Inc. | Mountable antenna elements for dual band antenna |
US9372711B2 (en) | 2009-07-20 | 2016-06-21 | Google Technology Holdings LLC | System and method for initiating a multi-environment operating system |
US9367331B2 (en) | 2009-07-20 | 2016-06-14 | Google Technology Holdings LLC | Multi-environment operating system |
US9348633B2 (en) | 2009-07-20 | 2016-05-24 | Google Technology Holdings LLC | Multi-environment operating system |
US9389877B2 (en) | 2009-07-20 | 2016-07-12 | Google Technology Holdings LLC | Multi-environment operating system |
US8528037B2 (en) | 2009-08-28 | 2013-09-03 | CSC Holdings, LLC | Dynamic application loader for set top box |
US9979626B2 (en) | 2009-11-16 | 2018-05-22 | Ruckus Wireless, Inc. | Establishing a mesh network with wired and wireless links |
CN102763378B (zh) | 2009-11-16 | 2015-09-23 | 鲁库斯无线公司 | 建立具有有线和无线链路的网状网络 |
US8528005B2 (en) | 2010-04-09 | 2013-09-03 | Telefonaktiebolaget Lm Ericsson (Publ) | Method and arrangement in an IPTV terminal |
JP2013518733A (ja) * | 2010-04-23 | 2013-05-23 | サムスン ヘビー インダストリーズ カンパニー リミテッド | ロボットシステムの制御方法及びその装置 |
CN101859261B (zh) * | 2010-06-09 | 2015-05-13 | 中兴通讯股份有限公司 | 一种释放内存的控制方法及控制设备 |
CN102149017A (zh) * | 2010-07-20 | 2011-08-10 | 华为终端有限公司 | 机顶盒应用的管理方法及机顶盒 |
US8898723B2 (en) * | 2010-08-20 | 2014-11-25 | Sony Corporation | Virtual channel declarative script binding |
US9407012B2 (en) | 2010-09-21 | 2016-08-02 | Ruckus Wireless, Inc. | Antenna with dual polarization and mountable antenna elements |
US9354900B2 (en) | 2011-04-28 | 2016-05-31 | Google Technology Holdings LLC | Method and apparatus for presenting a window in a system having two operating system environments |
US20120278747A1 (en) * | 2011-04-28 | 2012-11-01 | Motorola Mobility, Inc. | Method and apparatus for user interface in a system having two operating system environments |
US9792188B2 (en) | 2011-05-01 | 2017-10-17 | Ruckus Wireless, Inc. | Remote cable access point reset |
US8788863B2 (en) | 2011-08-10 | 2014-07-22 | Microsoft Corporation | System and method for restoring and/or continuing execution functionality to various processes based on predefined power classifications while transitioning a computing environment from connected standby state to execution state |
US9952897B2 (en) * | 2011-09-12 | 2018-04-24 | Microsoft Technology Licensing, Llc | Managing processes within suspend states and execution states |
US8751800B1 (en) | 2011-12-12 | 2014-06-10 | Google Inc. | DRM provider interoperability |
US8756668B2 (en) | 2012-02-09 | 2014-06-17 | Ruckus Wireless, Inc. | Dynamic PSK for hotspots |
US9634403B2 (en) | 2012-02-14 | 2017-04-25 | Ruckus Wireless, Inc. | Radio frequency emission pattern shaping |
US10186750B2 (en) | 2012-02-14 | 2019-01-22 | Arris Enterprises Llc | Radio frequency antenna array with spacing element |
US9092610B2 (en) | 2012-04-04 | 2015-07-28 | Ruckus Wireless, Inc. | Key assignment for a brand |
US9417753B2 (en) | 2012-05-02 | 2016-08-16 | Google Technology Holdings LLC | Method and apparatus for providing contextual information between operating system environments |
US9342325B2 (en) | 2012-05-17 | 2016-05-17 | Google Technology Holdings LLC | Synchronizing launch-configuration information between first and second application environments that are operable on a multi-modal device |
US9570799B2 (en) | 2012-09-07 | 2017-02-14 | Ruckus Wireless, Inc. | Multiband monopole antenna apparatus with ground plane aperture |
US9979960B2 (en) | 2012-10-01 | 2018-05-22 | Microsoft Technology Licensing, Llc | Frame packing and unpacking between frames of chroma sampling formats with different chroma resolutions |
EP2974045A4 (en) | 2013-03-15 | 2016-11-09 | Ruckus Wireless Inc | LOWBAND REFLECTOR FOR A DIRECTED DOUBLE BELT ANTENNA |
CN103888843B (zh) * | 2014-03-11 | 2017-12-12 | 惠州Tcl移动通信有限公司 | 智能电视的电视节目频道与应用程序整合的方法及系统 |
US10540696B2 (en) | 2014-09-30 | 2020-01-21 | At&T Intellectual Property I, L.P. | Enhanced shared media experiences |
US10084984B2 (en) * | 2016-08-15 | 2018-09-25 | Hisense Usa Corp. | System and methods for device control and multiple input handling |
US10368080B2 (en) | 2016-10-21 | 2019-07-30 | Microsoft Technology Licensing, Llc | Selective upsampling or refresh of chroma sample values |
CN109150751B (zh) | 2017-06-16 | 2022-05-27 | 阿里巴巴集团控股有限公司 | 一种网络控制方法及装置 |
US11036365B2 (en) * | 2019-06-07 | 2021-06-15 | Microsoft Technology Licensing, Llc | Hang condition mitigation for browser applications |
CN112231090A (zh) * | 2020-11-04 | 2021-01-15 | Oppo广东移动通信有限公司 | 应用进程管理方法、装置及终端设备 |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5563648A (en) * | 1994-04-28 | 1996-10-08 | Thomson Consumer Electronics, Inc. | Method for controlling execution of an audio video interactive program |
US5673401A (en) * | 1995-07-31 | 1997-09-30 | Microsoft Corporation | Systems and methods for a customizable sprite-based graphical user interface |
US5802284A (en) * | 1995-12-13 | 1998-09-01 | Silicon Graphics, Inc. | System and method using cover bundles to provide immediate feedback to a user in an interactive television environment |
JP3572473B2 (ja) * | 1997-01-30 | 2004-10-06 | 株式会社ルネサステクノロジ | 液晶表示制御装置 |
US6029045A (en) * | 1997-12-09 | 2000-02-22 | Cogent Technology, Inc. | System and method for inserting local content into programming content |
US6792616B1 (en) * | 1998-05-01 | 2004-09-14 | Scientific-Atlanta, Inc. | System and method for providing a plurality of programming services in a television system |
US6874145B1 (en) * | 1999-07-13 | 2005-03-29 | Sun Microsystems, Inc. | Methods and apparatus for implementing an application lifecycle design for applications |
JP2003504753A (ja) * | 1999-07-13 | 2003-02-04 | サン・マイクロシステムズ・インコーポレイテッド | アプリケーションライフサイクルに従ってアプリケーションを管理するための方法および装置 |
US7257812B1 (en) * | 1999-12-16 | 2007-08-14 | Sun Microsystems, Inc. | Methods and apparatus for managing an application |
US6819331B2 (en) * | 2002-03-01 | 2004-11-16 | Broadcom Corporation | Method and apparatus for updating a color look-up table |
US6995803B2 (en) * | 2002-05-23 | 2006-02-07 | Microsoft Corporation | Anti-aliasing characters for improved display on an interlaced television monitor |
WO2004047440A2 (en) * | 2002-11-18 | 2004-06-03 | United Video Properties, Inc. | Systems and methods for providing real-time services in an interactive television program guide application |
JP2007508612A (ja) * | 2003-10-10 | 2007-04-05 | コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ | Bdディスクのためのjavaライフサイクルモデル |
-
2005
- 2005-04-01 US US11/097,840 patent/US20060225107A1/en not_active Abandoned
-
2006
- 2006-03-29 EP EP06748835A patent/EP1869883A4/en not_active Withdrawn
- 2006-03-29 CN CNA2006800111737A patent/CN101185328A/zh active Pending
- 2006-03-29 WO PCT/US2006/011353 patent/WO2006107662A2/en active Application Filing
- 2006-03-29 JP JP2008504271A patent/JP2008536384A/ja active Pending
- 2006-03-29 KR KR1020077022439A patent/KR20070121707A/ko not_active Application Discontinuation
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101440717B1 (ko) * | 2012-05-16 | 2014-09-17 | 위스트론 코포레이션 | 가상 채널 관리 방법, 디지털 콘텐츠 검색 방법, 및 가상 채널을 가진 네트워크 기반 멀티미디어 재생 시스템 |
Also Published As
Publication number | Publication date |
---|---|
CN101185328A (zh) | 2008-05-21 |
WO2006107662A3 (en) | 2007-09-27 |
JP2008536384A (ja) | 2008-09-04 |
WO2006107662A2 (en) | 2006-10-12 |
US20060225107A1 (en) | 2006-10-05 |
EP1869883A4 (en) | 2009-01-21 |
EP1869883A2 (en) | 2007-12-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR20070121707A (ko) | 자원-제약 셋톱 박스 환경에서 애플리케이션을 실행하는시스템 | |
JP4694091B2 (ja) | 分散アプリケーションのスケーリングおよび配信 | |
US7996826B2 (en) | Method of executing virtual machine application program and digital broadcast receiver using the same | |
KR20010020250A (ko) | 객체 지향의 프로그래밍 언어를 위한 하드웨어 가속기 | |
JP2001028585A (ja) | 配信コンテンツ生成方法、コンテンツ配信方法および装置、並びに、コード変換方法 | |
CN103870316A (zh) | 一种智能操作系统上的java虚拟机实现方法 | |
CN112445545B (zh) | 一种网页应用的启动方法及显示设备 | |
CN112612525A (zh) | 显示设备及显示设备开机方法 | |
KR20050056270A (ko) | 소프트웨어 애플리케이션을 생성하는 방법 | |
KR100870200B1 (ko) | 통합 미들웨어형 디지털방송 수신장치 | |
CN112269668A (zh) | 一种应用资源共享及显示设备 | |
JP2000172509A (ja) | プログラム協調実行装置 | |
CN113542765B (zh) | 一种媒体数据跳变续播方法及显示设备 | |
CN112667285B (zh) | 一种应用升级方法、显示设备及服务器 | |
CN116261003A (zh) | 一种显示设备及基于浏览器的流媒体播放控制方法 | |
CN112487322B (zh) | 一种第三方应用Loading页面的加载方法及显示设备 | |
CN116340680A (zh) | 一种显示设备及插件对象生命周期管理的控制方法 | |
Cesar et al. | Open graphical framework for interactive TV | |
Pravin et al. | Set top box system with android support using Embedded Linux operating systempaper | |
CN112911359A (zh) | 一种资源显示方法、显示设备及遥控器 | |
CN112637683A (zh) | 显示设备系统优化方法及显示设备 | |
Peng et al. | Integration of applications into digital television environment | |
Jaeger | Set-top box software architectures for digital video broadcast and interactive services | |
CN112291600B (zh) | 一种缓存方法及显示设备 | |
CN112286540B (zh) | 应用软件安装方法、终端及显示设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
WITN | Application deemed withdrawn, e.g. because no request for examination was filed or no examination fee was paid |