首页 / 专利库 / 显示技术 / 图形显示器 / 用于在有限资源的机顶盒环境中运行应用的系统

用于在有限资源的机顶盒环境中运行应用的系统

阅读:664发布:2024-01-06

专利汇可以提供用于在有限资源的机顶盒环境中运行应用的系统专利检索,专利查询,专利分析的服务。并且对一种特别适合用在有限资源的机顶盒环境中的系统进行了说明。该系统使用被特别配置成用在该机顶盒环境中的基于解释程序的公共语言运行时刻(CLR)。该系统还包括被特别配置成用在该机顶盒环境中的独特的应用管理器和UIpane管理器。该应用管理器在另一应用呈现干扰当前应用的 用户界面 呈现的用户界面呈现时暂停当前应用。另外,该系统还包括用于提供过渡效果的图形功能,其允许用户改变 调色板 或 分辨率 等。该图形功能只要能使应用执行得更快就会直接使用机顶盒的图形能 力 (诸如机顶盒的行控制寄存器)。,下面是用于在有限资源的机顶盒环境中运行应用的系统专利的具体信息内容。

1.一种机顶盒系统,包括:
硬件层,表示由所述机顶盒系统提供的硬件功能;
基于解释程序的核心运行时刻引擎,被配置成用在机顶盒环境中,
其中,所述机顶盒系统被配置成运行可使用所述硬件层和所述基于解释程序 的核心运行时刻引擎来执行功能的应用。
2.如权利要求1所述的机顶盒系统,其特征在于,所述硬件功能包括小于5MB 的存储器
3.如权利要求1所述的机顶盒系统,其特征在于,还包括用于管理应用的应 用管理器,其被配置成用在所述机顶盒环境中。
4.如权利要求3所述的机顶盒系统,其特征在于,所述应用管理器被配置成 当另一应用被激活时暂停当前应用,并且当所述另一应用被去活时继续所述的当前 应用。
5.如权利要求1所述的机顶盒系统,其特征在于,还包括用于管理用户界面 呈现的UI管理器,其被配置成用在所述机顶盒环境中。
6.如权利要求1所述的机顶盒系统,其特征在于,还包括被配置成在从一个 图形呈现切换至另一个时提供过渡效果的图形功能。
7.如权利要求6所述的机顶盒系统,其特征在于,所述过渡效果包括抽取、 淡变、滚动、以及曝光中的一个或多个。
8.如权利要求1所述的机顶盒系统,其特征在于,还包括被配置成改变图形 呈现的调色板的图形功能。
9.如权利要求1所述的机顶盒系统,其特征在于,还包括被配置成改变图形 呈现的分辨率的图形功能。
10.如权利要求1所述的机顶盒系统,其特征在于,还包括被配置成通过从 字体文件剥离信息来简化字体处理的图形功能。
11.如权利要求1所述的机顶盒系统,其特征在于,还包括被配置成为字体 提供平滑的图形功能。
12.如权利要求1所述的机顶盒系统,其特征在于,
所述硬件功能包括提供与显示器设备上的各行相对应的存储器单元的行控制 寄存器(LCR),以及
所述机顶盒系统还包括被配置成通过操纵所述LCR提供图形效果的图形功 能。
13.一种具有有限量资源的机顶盒系统,包括:
硬件层,表示由所述机顶盒系统提供的硬件功能;以及
基于解释程序的处理模,被配置成用在机顶盒环境中,
其中所述硬件功能包括提供与显示器设备上的各行相对应的存储器单元的行 控制寄存器(LCR),以及
所述机顶盒系统还包括被配置成通过操纵所述LCR提供图形效果的图形功 能。
14.包含用于实现如权利要求13所述的机顶盒系统的指令的一种或多种机器 可读介质。
15.一种用于在有限资源的机顶盒环境中执行应用的方法,包括:
装载并初始化当前应用;
使用被配置成用在机顶盒环境中的基于解释程序的处理模块执行所述当前应 用;
在干扰所述当前应用的用户图形呈现的另一应用被激活时暂停所述当前应 用:
当所述另一应用被去活时继续所述当前应用;以及
一旦发生退出事件就退出所述当前应用。
16.如权利要求15所述的方法,其特征在于,所述初始化包括为所述应用建 立消息线程。
17.如权利要求15所述的方法,其特征在于,还包括当从一个图形呈现切换 至另一个时提供过渡效果。
18.如权利要求15所述的方法,其特征在于,还包括一旦从一个图形呈现切 换至另一个就改变调色板和分辨率中的一个或多个。
19.包含用于实现如权利要求15所述的方法的指令的一种或多种机器可读介 质。
20.一种包括被配置成实现如权利要求15所述的方法的逻辑的机顶盒系统。

说明书全文

技术领域

本主题涉及在诸如有限资源的机顶盒环境等有限资源环境中开发和运行应 用。

背景技术

机顶盒从源(诸如头端分发站点)接收媒体信息、处理该媒体信息、并将经 处理的媒体信息呈现在输出设备(诸如常规电视单元)上。对提供将使现有和未来 的电视机顶盒能够运行更多方面以及更有趣的应用的功能的需求不断增长。示例性 应用包括游戏应用、视频点播(VOD)以及电子节目指南(EPG)应用、新闻简 报应用等。
改善机顶盒多功能性的一种途径是在机顶盒平台中复制“全方位”桌面可编 程环境的特征。现在使用的一种示例性框架是微软公司的.NET框架。.NET技术以 通常独立于用来实现执行程序的物理平台中的潜在复杂性的方式提供用于该执行 的虚拟机(VM)环境。作为宽泛的概述,.NET框架使用编译器将源代码(例如, C#源代码)转换为中间语言(IL)代码和元数据。在执行阶段,.NET框架使用公 共语言运行时刻(CLR)加载程序和即时(JIT)编译器将IL和元数据转换为专用 于具体执行平台的本机代码。
其它技术扩展了上述虚拟机原理以用于有限资源计算设备中。(这些在有限 资源环境中采用JIT编译器的技术,在此被称为“精简的基于JIT的技术”)。例 如,微软公司的.NET精简框架(.NET CF)修改了上述“全方位”.NET框架以用 于有限资源计算设备中。这种精简的基于JIT的技术能够继承公共语言运行时刻 (CLR)的完整.NET框架架构,支持.NET框架类库的子集,并且包含专为.NET CF设计的类。在操作中,这种精简的基于JIT的技术能够使用JIT编译器来执行 中间语言指令。支持的设备包括个人数据助理(PDA)(诸如袖珍型PC)、移动 电话、某些机顶盒、车用计算设备、以及定制的嵌入式设备等。一般而言,这种精 简的基于JIT的技术(诸如.NET CF)最适宜被设计用于具有至少8-16MB的RAM 的系统。
以上精简的基于JIT的技术提供了许多种类的机顶盒中的可行方案。然而,这 种技术并不完全满足在所有机顶盒中使用,诸如资源量极其有限的机顶盒。例如, 由Schaumburg,IL的摩托罗拉公司提供的普通DCT 2000机顶盒包括27MHz的 CPU以及有限量的存储器(例如,1.5MB的RAM和1.25MB的闪存)。这些资 源没有提供在其上运行精简的基于JIT的应用的最佳平台。例如,在常规.NET环 境中使用的JIT需要在存储器中保持原始IL程序集以及“即时的”本机代码两者。 该要求会使有限资源的机顶盒的存储器资源负担过重。此外,基于JIT的技术通过 在运行前JIT编译所有托管代码来工作。这在启动应用时产生了不希望有的延迟。
由于上述因素,对于非常严重的有限资源机顶盒使用精简的基于JIT的技术产 生了较差性能。例如,该方案可能导致应用运行过于缓慢。该方案还可能完全阻碍 开发一些新的应用特征。
出于至少上述原因,存在对用于在有限资源的机顶盒以及其它有限资源环境 中开发和运行应用的更加令人满意的系统的典型需求。
发明内容
根据一个示例性实现,在此描述的机顶盒,包括:表示由该机顶盒设置的硬 件功能的硬件层以及配置成在机顶盒环境中使用的基于解释程序的核心运行时刻 引擎(例如,基于解释程序的公共语言运行时刻)。该机顶盒系统被配置成使用硬 件层和基于解释程序的核心运行时刻引擎来运行能够执行功能的应用。
根据另一示例性特征,该机顶盒系统包括小于5MB的存储器。
根据另一示例性特征,该机顶盒系统还包括被配置成在该机顶盒环境中使用 的用于管理应用的应用管理器。
根据另一示例性特征,该应用管理器被配置成在另一应用被激活时暂停当前 应用,并在其它应用被去活时继续上述当前应用。
根据另一示例性特征,该机顶盒系统还包括被配置成在该机顶盒环境中使用 的用于管理用户界面呈现的UIpane管理器。
根据另一示例性特征,该机顶盒系统还包括被配置成执行以下一个或多个步 骤的图形功能:
当从一个图形呈现切换为另一个时提供过渡效果(诸如抽取(decimation)、淡 变、滚动、曝光等);
改变图形呈现的调色板
改变图形呈现的分辨率
通过从字体文件剥离信息以简化字体处理;以及
为字体提供平滑(anti-aliased)。
根据另一示例性特征,该机顶盒系统的上述硬件功能包括提供与显示设备上 的各行相对应的存储器单元(memory location)的行控制寄存器(LCR),并且其 中该机顶盒系统还包括被配置成通过操纵该LCR提供图形效果的图形功能。
以下对其它示例性实现进行说明。
附图说明
图1示出了包括用以实现本申请中所述的改善系统的机顶盒的系统的概述。
图2示出了在图1系统中使用的示例性机顶盒的物理构造的概述。
图3示出了可由图2的机顶盒实现的软件功能的层次。
图4示出了由图3的功能提供的UIpane类的分层组织。
图5示出了由图3的功能提供的用于装载和执行应用的机制。
图6示出了由图3的功能提供的导航功能的操作。
图7示出了阐述图3功能的操作方式的过程。
贯穿整个公开和附图,使用相同的数字来参考相同的组件和特征。100系列的 数字表示最初在图1中存在的特征,200系列的数字表示最初在图2中存在的特征, 300系列数字表示最初在图3中存在的特征,依此类推。

具体实施方式

以下说明阐述了一种用于在机顶盒环境及其它有限资源环境中开发和运行应 用的系统。在一个示例性实现中,该系统使用适用于机顶盒环境的基于解释程序的 公共语言运行时刻(CLR)。例如,该基于解释程序的CLR可使用,但并不限于, 微软公司的智能个人对象技术(SPOT)功能来实现。
在这些改善中,在本申请中说明的系统提供了以下特征:
·该系统提供了一种用以开发诸如数字视频录像机(DVR)应用、与调谐有 关的应用、与父母控制有关的应用、节目指南及搜索应用、视频点播(VOD)应 用、游戏应用、信息(例如,新闻)简报应用、投票应用、即时消息(IM)应用、 以及许多其它应用等丰富应用的灵活而有效的框架。该系统还支持使用C#语言(等 其它语言)写的用户应用。
·该系统提供了用以简化机顶盒上的编程(与“全方位”.NET框架或公知的 其精简版本相比)的新“TV”命名空间。总体上,与全方位.NET环境或其精简版 本相比,命名空间引用的功能消耗少得多的资源。同时,该系统使用了补充.NET 框架的编程框架,从而使程序员在很少额外培训的情况下就能开始对机顶盒编程。
·该系统提供了用于支持同时运行多个应用的独特的应用管理器。除了其它 特征,应用管理器提供了管理同时运行的不同应用(即使这些程序可能使用不同的 系统调色板、不同的显示分辨率等)的暂停/继续机制以及通知框架。例如,当第 二用户界面呈现(与第二应用相关联)取代第一用户界面呈现(与第一应用相关联) 时,该系统能自动地暂停第一应用,使第二应用能够接受系统的大部分处理能。 以这种方式,该系统能够由此防止用户界面呈现彼此重叠。
·该系统提供了UIpane管理器以用有限的机顶盒资源提供更为合适的用户控 件(为机顶盒环境定制)。例如,该系统采用新的UIpane形式。
·该系统提供了向机顶盒硬件分配尽可能多的渲染的图形功能。这使得图形 功能在消耗最小资源的同时又运行非常快速。除了其它特征,图形功能提供了全 256色支持,并且提供了一旦从一个应用切换到另一应用就切换调色板和分辨率的 能力。图形功能还提供了当从一个应用切换到另一应用时的过渡效果。该过渡效果 通过直接操作机顶盒行控制寄存器(LCR)来运行。该系统还利用了其它系统中所 设的一些最快的算法,诸如用于渲染线条、椭圆、圆矩形等的算法。
·该系统还提供了资源-高效字体安装和管理算法、以及资源-高效平滑 Truetype字体渲染算法。为了进一步减少资源消耗,该系统还使用字体剥离机制以 从字体文件中剥离一些信息。
在此说明的策略提供了许多益处。根据一个主要益处,该系统提供了用于在 非常有限资源的机顶盒上开发有趣且多方面的应用的有力框架。同时,该系统补充 了先前的多种框架,并由此能够利用程序员对这些框架(以及C#等与其相关联的 编程语言)的现有知识。
本策略的其它特征和伴随的益处将在以下说明中阐述。首先,虽然以下讨论 主要被构建在使用部署在机顶盒环境中的基于解释程序的CLR技术(诸如上述 SPOT技术)的背景中,然而其它类型的资源-高效技术也能用作构造本系统的基础。 此外,这种其它存储器-高效技术不需要采用.NET范例(或任何虚拟机框架范例)。 此外,虽然本发明最适合在有限资源环境中部署,但是其并不限于这种环境;例如, 该系统还可用于具有足够处理资源以适应全.NET采用的环境中。此外,该系统还 可用于其它设备上(机顶盒之外),诸如任何种类的可佩戴设备(例如,腕表设备)、 个人数字助理(PDA)设备、移动电话等。
关于术语,术语媒体信息是指能够为用户消费的以电子形式表示的任何书籍。 媒体信息可包括诸如音频资源(例如,音乐、口语主题等)、静态图片资源(例如, 数码照片等)、动画资源(例如,音视频电视节目、电影等)、计算机程序(例如, 游戏等)等传送音频和/或视频信息的任何信息。
术语UIpane表示用于呈现给用户的图形对象。在一种情形中,UIpane可对应 于WindowsTM型用户界面窗格。
术语屏幕上显示(OSD)是指由机顶盒支持的显示呈现。
除了以上术语之外,本公开使用了许多标准.NET术语。读者可查阅许多介绍 性文本以便对.NET思想有一背景理解,其中包括:David Chappell, Understanding.NET:A Tutorial and Analysis(理解.NET:指导与分析), Addison-Wesley出版社;以及David S.Platt,Introducing Microsoft.NET (Microsoft.NET入门),Microsoft出版社,2003。关于.NET环境的其它信息可在 由微软的MSDN站点在线提供的微软公司的技术库中找到。包含本公开中的常用 术语的以下术语表是从MSDN站点提供的信息中获得的。
·程序集是指作为一个单元被版本化和部署的一个或多个文件的集合。程序 集是.NET框架应用的主要构件。所有受管理类型和资源被包含在程序集内,并 且被标记为仅在该程序集内存取或从其它程序集中的代码存取。
·C#(发音为“C sharp”)语言是指被设计用于构造在.NET框架上运行的应 用的一种编程语言,它是C和C++的演进并且是类型安全和面向对象的。
·回调函数是指在发生指定事件时系统或子系统调用的应用定义函数。
·类是指封装数据(常量和字段)和行为(方法、属性、索引器、事件、运 算符、实例构造函数、静态构造函数、以及解构函数)并能包含嵌套类型的应用类 型。类类型支持继承机制,籍此派生类能够扩展和专门化一基本类。
·构造函数是指只要声明类的实例就自动调用的专用初始化函数。该构造函 数必须与类本身具有相同的名称,且必须不返回值。
·委托是为C++函数指针的受管理版本的引用类型。
·公共语言运行时刻(CLR)是指在受管理代码执行的核心处的引擎。该运 行时刻为受管理代码提供诸如交叉语言综合、代码存取安全、对象生命期管理、以 及调试和简档支持等多种服务。术语“核心运行时刻引擎”在此被用于描述提供上 述类型的服务的功能,并因此包括CLR技术,但其并不限于CLR技术(并且,实 际上也并不限于.NET技术)。
·上下文是指用以定义各对象驻留在其中的环境的属性的有序序列。
·枚举(enum)是指从System.Enum继承并为基础的基元类型的值提供替换 名称的特殊形式的值类型。枚举型具有名称、基础类型、以及一组字段。
·表单(诸如窗口型表单)是指在应用内或跨应用地提供一致行为和用户界 面的组合控件。
·无用单元收集(GC)是指用于移除不再使用的对象的过程。
·JIT编译是指在运行时间需要代码时将中间语言(MSIL)转换为机器代码 的编译(在常规“全方位”.NET环境中)。
·生命期是指从对象被分配在存储器中时开始到无用单元收集程序将该对象 从存储器中删除时结束的这段时期。
·受管理代码是指由公共语言运行时刻环境执行的代码。受管理数据是指具 有由公共语言运行时刻管理的生命期的对象。
·命名空间是指用于分组相关类型的逻辑命名方案。.NET框架使用将类型分 组为相关功能的逻辑分类的分层命名方案。
·私有程序集是指只有在与该程序集相同的目录结构中的客户程序才可利用 的程序集。
·反射是指用于获得关于程序集以及其中定义的类型的信息,并在运行时间 创建、调用、以及存取类型实例的过程。
·统一资源标识符(URI)是指唯一地标识要素或属性的数字或名称。URI包 括统一资源名称(URN)和统一资源定位符(URL)。
·非受管理代码是指在公共语言运行时刻环境之外直接执行的代码。
·可扩展标记语言(XML)是指被最优化用于在Web上传输的标准通用标记 语言(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.2.UIpane焦点和导航行为
B.6.图形特征
B.6.1.过渡效果
B.6.2.调色板和分辨率效果
B.6.3.Blt(块传送)效果
B.6.4.字体渲染功能
C.示例性操作方法(图7)
D.附录
D.1.IUIpane接口
D.2.ABC_Co.TV.Lite.UIpanes
D.2.1.ABC_Co.TV.Lite.UIpanes命名空间概述
D.2.2.ABC_Co.TV.Lite.UIpanes.UIpaneBase
D.2.3.ABC_Co.TV.Lite.UIpanes.Form
D.2.4.ABC_Co.TV.Lite.UIpanes.Control
D.2.5.ABC_Co.TV.Lite.UIpanes.Button
D.2.6.ABC_Co.TV.Lite.UIpanes.UIpaneEventHandler
D.2.7.ABC_Co.TV.Lite.UIpanes.KeyEventHandler
D.2.8.ABC_Co.TV.Lite.UIpanes.Transition
D.2.9.ABC_Co.TV.Lite.UIpanes.TransitionEventhandler
D.2.10.ABC_Co.TV.Lite.UIpanes.ButtonStyle
D.2.11.ABC_Co.TV.Lite.UIpanes.Keys
D.3.ABC_Co.TV.Lite.Shell.TVLiteApplicationBase
D.4.ABC_Co.TV.Lite.Drawing命名空间
D.4.1.概述
D.4.2.ABC_Co.TV.Lite.Drawing.Graphics类
D.4.3.ABC_Co.TV.Lite中使用的RLE压缩图像格式
D.5.字体方法
D.5.1安装和卸载字体
D.5.2.图形对象与字体有关的方法
D.6本机事件和受管理异步回调
A.系统概述(图1和2)
一般而言,关于附图所述的任何功能可使用软件、固件(例如,固定的逻辑 电路)、手动过程、或这些实现的组合来实现。在本申请中使用的术语“逻辑”、 “模块”或“功能”一般表示软件、固件、或软件与固件的组合。例如,在软件实 现的情形中,术语“逻辑”、“模块”或“功能”表示当在一个或多个处理设备(例 如,一个或多个CPU)上被执行时执行指定任务的程序代码(和/或声明型指令)。 该程序代码可被存储在一个或多个计算机可读存储器设备中。更为一般地,所示的 将逻辑、模块和功能分为不同单元可反映这些软件和/或硬件的真实物理分组和分 配,或者可对应由单个软件程序和/或硬件单元执行的不同任务的概念性分配。所 示的逻辑、模块和功能可位于单个地点(例如,由处理设备来实现),或者可分布 在多个位置上。
A.1.系统
图1示出了可在其中部署本申请中所说明的改善的功能的系统100的概览。 作为概览,系统100包括用于通过耦合机制108从源106接收媒体信息(或其它信 息)的多个有限资源设备(102、104)。
在媒体分发的情形中,源106可表示用于将媒体信息传送给接收设备(102、 104)的头端基础设施。例如,源106可表示常规电缆媒体分发基础设施、常规无 线媒体分发基础设施(诸如卫星媒体分发基础设施)等。或者源106可表示通过一 个或多个数字网络传送媒体信息的媒体信息网络源。在其它情形中,源106可表示 将媒体信息从相对于接收设备(102、104)的本地位置提供给接收设备(102、104) 的实体(诸如视频自动点唱机等)。在任何情形中,源106能够根据例如由电子节 目指南(EPG)反映的固定时间表用若干广播频道向接收设备(102、104)传送媒 体信息。或者源106可以使用点播方法将媒体信息传送到接收设备(102,104)。
耦合机制108将源106耦合至接收设备(102、104)。该耦合机制108能以 适合不同技术和商业环境的不同方式实现。例如,耦合机制108可包括诸如电缆路 由基础设施、卫星路由基础设施、地面天线路由基础设施(以及这些路由基础设施 的任意组合)等任意类型的常规分发基础设施。或者耦合机制108可包括诸如广域 网(例如,因特网)、内联网等数字网络(或这些网络的组合)。在使用数字用户 线(DSL)基础设施传播信息的情形中,耦合机制108可利用电话耦合基础设施的 部分服务。
为了本说明的说明性目的,将作出源106和耦合机制108提供对接收设备 (102、104)的电缆或卫星媒体信息传送这一简化假定。源106与接收设备(104、 106)之间的链接可作为单向链接(其中信息仅从源106流向接收设备),或者优 选地作为双向链接(其中接收设备的用户还可向源106发送数据)来实现。在使用 双向通信的情形中,设备到源链接可通过设备(102、104)用来从源106接收媒体 信息的相同频道、或者通过不同频道来实现。
接收设备包括机顶盒102。机顶盒102从源106接收媒体信息,对接收到的媒 体信息执行各种处理(诸如解码该媒体信息并可能地对其进行压缩),并将经处理 的信息转发到输出设备。在媒体分发环境的情形中,输出设备可对应于电视单元 110。在一种情形中,机顶盒102可作为电视单元110以外的单独单元来实现,并 可通过任何类型的耦合机制(例如,物理配线、无线耦合等)耦合至机顶盒102。 在其它情形中,机顶盒102可作为电视单元110内的组成单元来实现。在其它情形 中,从机顶盒102接收媒体信息的输出设备可包括除常规电视以外的任何类型的显 示器设备(诸如计算机监视器)、音频输出设备(诸如立体声系统)等。
其它接收设备104可包括具有处理和输出功能的任意机构,诸如任意类型的 可佩戴处理机构(例如,诸如微软的SPOT手表等腕表)、移动电话、个人数字助 理(PDA)、平板式设备等。然而,为了便于讨论,本说明的剩余部分将假定接收 设备对应于机顶盒(如前所述的,它可以与电视单元110分离或者与电视单元110 集成在一起)。
机顶盒102包括可在电视单元110的显示器表面114上呈现用户界面呈现112 的功能(将进行说明)。显示器表面114在此也被称为屏幕上显示(OSD)。用户 可通过遥控设备116或某些其它类型的输入设备与用户界面呈现112交互。例如, 机顶盒102可包括直接集成在其外壳中的输入键(未示出)。
A.2.机顶盒
图2示出了示例性机顶盒102的组成。机顶盒102可包括将在以下说明的用 于执行其所授任务的若干模块。首先,机顶盒包括接口模块202。接口模块202可 表示用于使用任意耦合机制从源106接收媒体信息的任何功能。例如,接口模块 202可包括DSL调制解调器、电缆调制解调器、无线网络接口、以太网NIC、或 其它类型的网络接口设备。
·机顶盒102还可包括用于对接收到的媒体信息执行诸如解码该媒体信息、 可能地解压缩该媒体信息等任意类型的初步处理的调谐器/解码器模块204。在广播 服务的情形中,调谐/解码模块204可通过任何类型的调谐机制(诸如通过调谐至 提供所需频道的指定物理频率等)选择一个或多个媒体信息频道。在网络传送媒体 信息的情形中,调谐/解码机制可依赖于虚拟调谐机制来接收频道(例如,通过“调 谐”至指定的单播或多播媒体信息源)。
·机顶盒102可包括用于执行实现机顶盒102的功能的指令的一个或多个处 理器206。
·机顶盒102可包括存储器208(诸如RAM存储器、闪存等)。存储器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字典等许多来源中找到。
在任何情况下,以下所述的系统尤其适用于具有有限处理资源的机顶盒(虽 然并不限于具有有限资源的机顶盒)。例如,Motorola生产的普通DCT 2000机顶 盒具有有限资源。该机顶盒的处理器工作在27MHz,并且存储器包括1.5MB的 RAM和1.25MB的闪存。本发明所应付的挑战是为在其中开发和运行应用的这些 类型的有限资源环境提供合适多样的功能。
根据一个示例性实现,该系统可采用适用于机顶盒环境中的基于解释程序的 公共语言运行时刻(CLR)。这与以上总结的精简的基于即时(精简的基于JIT) 方法相对照。在基于JIT方法中,平台要求在启动应用前对所有受管理代码进行JIT 编译。这至少有两个缺点。首先,JIT编译在应用运行前产生了延迟。其次,JIT 编译要求大量存储器来存储原始程序集和“即时的”本机代码。相反,基于解释程 序的CLR在逐段的基础上提供程序的解释和执行,即在需要的基础上来解释代码。 这减少了启动应用所需的时间以及应用的存储器要求;后一优点对于具有有限存储 器资源的有限资源设备尤其可贵。
基于解释程序的CLR可使用不同技术来实现。在一个示例性而非限制性情形 中,基于解释程序的CLR可由微软公司的智能个人对象技术(SPOT)来实现。SPOT 技术在许多来源中都有说明,其中包括Donald Thomson的题为“Smart Personal Object Technology(SPOT):Part I:An introduction to hardware,network,and system software(智能个人对象技术:第一部分:硬件、网络及系统软件介绍)”的在线 文章。描述.NET嵌入式技术的文献与SPOT技术相关。更具体地,西雅图华盛顿 的netcpuTM公司提供了与SPOT技术相关的netcpuTM产品及相关SDK。
上述特定技术实现仅是示例性的。其它基于解释程序的功能可依赖诸如Java 编程框架等.NET框架以外的其它编程框架。如上所定义的,更为一般性的术语“基 于解释程序的核心运行时刻引擎”包括基于解释程序的CLR(诸如SPOT的 TinyCLR)的使用,但并不限于此技术(并且实际上并不限于.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 2l0的图2中所述的机顶盒组件。
下一最高层——机顶盒OS层304提供由机顶盒102执行的各种基础功能。例 如,对于Motorola DCT 2000机顶盒,机顶盒OS层304对应于Motorola提供的 “GIOS”操作系统。该层304可提供存储器管理、调度、硬件控制等。
下一最高层提供基于解释程序的CLR 306(诸如,但并不限于基于SPOT的 CLR)和GFX库308。一般而言,在示例性.NET实现中,基于解释程序的CLR 306 包含特别适用于机顶盒环境要求的.NET公共语言运行时刻(CLR)功能的子集。 基于解释程序的CLR 306在栈中相对较低(相比于“全方位”.NET框架);这使 得应用功能与低层OS功能之间的差别变小(相比于常规系统)。
GFX库308提供特别适合在机顶盒环境中使用的用在机顶盒系统中的各种图 形功能。
下一最高层提供应用管理器310、UIpane管理器312、以及表单和控件314。 除了其它任务,应用管理器310控制多个应用的装载、运行、以及关闭。
UIpane管理器312以及表单和控件314提供控制UIpane呈现(诸如,但并不 限于与在WindowsTM操作系统环境中生成的UIpane呈现类似的显示对象)的各种 功能。在该UIpane功能中已经精简了API的数目(相比于常规桌面环境)以排除 机顶盒环境并不需要的功能。然而这些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表示机顶盒应用。即,所有应用都应派生 自抽象的TVLiteApplicationBase接口。通过该关系,各应用可实现ApplicationBase 中指定的所有抽象方法。章节D中的附录提供了对ApplicationBase功能的具体说 明;本章节提供了对该功能的示例性显著特征。
ApplicationBase类可提供以下示例性及非穷尽性特征列表。(以下对“消息 ”和其它特征的引用将在对应用管理器310的后续讨论的环境中阐明)。
·Run方法在当前线程上开始运行标准应用消息循环,并使指定UIpane可见。 该Run方法将自动地调用RegisterUIpane(以下说明)以将主UIpane注册为顶层 UIpane。
·Initialize方法执行由应用定义的初始化。在该方法中,发起应用的HTTP 请求的URL与该URL所附的参数一起可在调用中通过“url”参数被传给该应用 以进行初始化。以下提供了一示例性url参数:
http://appserver/monster.dat?paraml=valuel & param2=value2.
·Exit()方法通知所有消息泵它们应该终止,并随后在各消息已经处理之后关 闭所有应用UIpane。该Exit方法通常是从消息循环内部调用的,并且强制Run方 法返回。更一般性地,一应用可调用Exit方法来通知应用管理器310该应用正在 退出;这使得应用管理器310执行诸如整理系统资源等适当的动作。
·RegisterUIpane方法允许应用使用UIpane管理器312来注册其顶层UIpane。 UIpane管理器312将UIpane事件派送到顶层UIpane。
·Pause方法允许应用管理器310向应用发送暂停事件以请求其暂停。应用管 理器310将在请求该应用暂停后挂起该线程。
·Resume方法允许应用管理器310向应用发送继续事件以请求其继续。
·Terminate方法允许应用管理器310向应用发送终止事件以请求其终止。例 如,Terminate方法可在应用要被终止时被调用,诸如在用户通过适当UI命令输入 明确退出指示时、在系统被关闭时、在系统资源运行缓慢时等。在这些情形中,应 用管理器310调用Terminate方法以指示该应用终止。
·ReleaseResource方法允许应用管理器310向应用发送释放资源事件以请求 其释放任何可被释放的资源。这包括移除对象的引用以提供给无用单元收集程序。
B.3.UIpane功能
命令解释程序还定义作为所有UIpane的根基的基IUIpane接口。该接口允许 UIpane管理器无需“知道”每个UIpane的实现细节就能控制所有UIpane。
ABC_Co.TV.Lite.UIpanes命名空间包含用于创建被最优化用于在低端机顶盒 (STB)上执行的“轻TV应用”的类。如在之前章节解释的,机顶盒能够运行基 于解释程序的CLR系统。
在该命名空间中的类可被分组为以下分类:
·UIpaneBase类分类为在TV应用上显示的所有UIpane控件提供基础功能。 ABC_Co.TV.Lite.UIpanes命名空间内的大多数类派生自UIpaneBase类。UIpaneBase 类也是容器,意味着它能够包含子UIpane。
·UIpane Form类分类允许创建顶层容器Uipane。
·Uipane Controls类分类允许创建用户界面。例如,Button类是UIpane控件。
ABC_Co.TV.Lite.UIpanes命名空间内有许多类为之前概要中提到的类分类提 供支持。作为概览,关于这些类:
·Button类表示TV按钮控件。
·Control类定义控件的基类。控件对象定义执行特定功能的具有视觉呈现的 对象。
·Form类定义无父的、顶层的、容器UIpane的基类。由该类生成的对象(表 单对象)具有一些或没有视觉呈现,并且可包含子UIpane。
·Transition类定义将过渡应用到表单对象的方法。
·UIpaneBase类是定义UIpane的基类的抽象类(其定义具有视觉呈现的对象 或者包含其它UIpaneBase对象的对象)。
关于委托:
·UIpaneEventHandler类表示将处理任意UIpane事件的方法。
·KeyEventHandler类表示将处理键事件的方法。
·TransitionEventHandler类表示将处理过渡事件的方法。
关于枚举:
·Keys类表示TV应用中使用的所有可能键代码。
·ButtonStyle类表示所有可能的按钮格。
此外,附录章节D提供了对UIpane功能的穷尽讨论。此外,图4示出了该功 能的一个示例性分层组织,其提供了在附录中充分阐述的功能的概要。
B.4.应用管理器
应用管理器310提供了管理应用装载、卸载、和初始化的机制。应用管理器 310还控制消息泵、执行存储器管理、处理系统的与安全有关的方面等。应用管理 器310还通过指示应用激活、去活、暂停、继续、终止等来管理应用行为。
以下子章节提供了关于以上主题的其它信息。
B.4.1初始化行为
应用管理器310可接收发起应用的应用发起请求。例如,在一个示例性实现 中,该发起请求可请求应用管理器310发起闪存中的应用或者通过下载并发起应用 的HTTP请求来发起应用。
更具体地,该应用命令解释程序能使用ABC_Co.TV.Lite.Shell命名空间中的 公共Download(下载)类来下载及执行应用。该Download对象的多个实例可被 创建用于同时下载和执行多个程序集。每个程序集在其自身的线程中运行。(注意: 在某些精简的基于JIT的框架中,各应用在不同的应用域中运行。然而,由于各应 用在不同的逻辑线程中运行,所以在基于解释程序的CLR实现中没有应用域的概 念。)Download对象可对准许发起应用进行检查。
应用可使用Download对象来发起其它应用。如果该发起应用希望在被发起的 应用退出时被通知,则其可将AutoResetEvent(自动复位事件)传给Download构 造程序并等待该事件。例如,假定实体X使用Download对象发起游戏应用。实体 X可创建被称为gameAppExitEvent(游戏应用退出事件)的AutoResetEvent并将 其传给Download对象。实体X可创建单独线程并在该线程中等待 gameAppExitEvent。当游戏应用退出时,Shell(命令解释程序)将发信号给 gameAppExitEvent。实体X不应在消息泵线程(将在以下说明)中等待 gameAppExitEvent,因为实体X仍需响应系统事件(诸如,暂停事件、继续事件、 终止事件等)。
Download类包含被称为ExecuteAssembly(执行程序集)的公共方法以下载 并执行程序集。ExecuteAssembly方法将开始一个新应用线程以下载、装载、以及 执行程序集。(或者,此外,Download对象能够支持将返回程序集的字节阵列的 被称为GetFile的方法。应用可使用该GetFile(获取文件)方法来读取程序集数据 或文件的字节块。)在程序集被下载和装载后,应用管理器可使用Reflection通过 寻找派生自TVLiteApplicationBase的类来找到应用类。
然后,应用管理器310实例化TVLiteApplicationBase的一个实例并用发起应 用的命令/URL来调用Initialize方法。因此,Initialize方法构成了受管理程序的入 口点。
该应用在Initialize方法被调用时创建其主UIpane。该应用还可使用 TVLiteApplicationBase中提供的RegisterUIpane功能(以下说明)来注册额外的顶 层UIpane。
B.4.2.执行与存储器管理行为
应用在其完成所有初始化工作时调用Run方法。这将起动允许应用接收事件 (例如,焦点事件、键事件、暂停事件、继续事件、终止事件等)的消息泵。Run 方法。Run方法是阻塞调用并且将不会返回直到该应用本身调用Exit。当应用结束 时,其调用应用的基类TVLiteApplicationBase中提供的Exit方法。换言之,Run 方法在当前线程上起动消息循环并使指定UIpane可见。应用调用Exit方法退出消 息泵并从Run方法返回。
在运行该应用的过程中,无用单元收集程序在受管理对象不再使用时自动地 释放分配给该对象的内存。然而,无用单元收集将在何时发生是不可预知的。 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.杂集行为
关于安全主题,应用管理器310对照在配置文件中指定的规则验证应用的请 求。例如,应用管理器310可检查应用是否有发起另一应用、存取网络资源等的许 可。应用在其不具有使用请求功能的许可时将收到异常。
关于注册主题,应用可用应用管理器310来注册其顶层UIpane以接收UIpane 事件。更具体地,Run方法自动地注册UIpane参数中指定的UIpane。
B.4.6.概要(图5)
图5提供了上述概念的概要。在该图中,应用发起程序502通过联系下载实 体504调用应用的发起。下载实体504通过访问沙箱许可实体506确定其是否具有 下载和执行该应用的许可。如果有,则下载实体504将任务添加至任务管理器实体 508以执行该应用。运行该应用创建专属于该应用的应用线程510。
应用管理器310和窗口管理器312控制被调用应用的执行。即,这些管理器 (310、312)将队列项添加至消息队列实体512,导致应用实体514对这些项的执 行。
B.5.UIpane管理器
UIpane管理器312提供了完全受管理的UIpane管理实现。UIpane管理器312 负责UIpane管理、事件路由、以及焦点管理。本子章节提供关于winpage管理器 312行为的细节。
B.5.1.UIpane管理器行为
UIpane根据其类型以指定的优先级来实现。支持的UIpane类型包括: Notification(通知);Floating(浮动)  (具有AlwaysOnTop(总在顶层)属性集 的Notification);以及Normal(正常)。Floating UIpane将总是最上层UIpane。 例如,假定显示器同时呈现对应于不同应用(或对应于相同应用)的多个UIpane。 具有最高优先级的UIpane将接收焦点,意味着用户的输入活动将被导向该UIpane。 然而,根据一个示例性实现,UIpane不允许重叠在显示器上。
UIpane管理器312与应用管理器312紧密合作以暂停、继续、以及终止应用。 例如,UIpane管理器312在当前应用需要被挂起时(通常由于将要发生的另一应 用的UIpane将干扰当前UIpane)要求应用管理器310向当前应用的消息泵发送暂 停事件。这将给当前应用在其进入挂起状态前执行必要操作的机会。
更具体地,应用分别在其收到和失去焦点时接收激活和去活事件。例如,如 果通知出现在正在运行的应用之上,则该应用将接收去活事件(随后是暂停事件)。 当该通知解除时,该应用将接收激活事件(在已被发送继续事件之后)。
B.5.2.事件路由行为
UIpane管理器将所有事件派送到应用线程的消息泵。更具体地,用户输入事 件将在UIpane容器层次中“冒泡”直到该事件被处理或者该层次结束(即,当事 件达到不消耗该事件且其父为空的UIpane)。
绘画事件仅在UIpane还未暂停时才被派送至容器层次的顶层UIpane。顶层 UIpane负责将绘画事件派送至其子对象。例如,如果UIpane具有作为其子对象的 多个按钮,则UIpane将接收绘画事件并负责对各按钮调用绘画。
B.5.3.UIpane焦点和导航行为
根据一个示例性实现,子UIpane当中的导航是用方向遥控键(例如,由遥控 器116提供)实现的。例如,如果向下键被按下,则活动的子UIpane下面最近的 子UIpane将接收焦点。如果没有操作方向键,则父UIpane尝试将焦点传给其兄弟 对象。
更具体地,导航由创建在UIpane的不同位置上的“热点”来确定。热点的位 置取决于哪个箭头键被选择。例如,在图6中,假定当前控件A具有焦点。如果 向下键被选择,则当前焦点控件的热点将对应于控件A的下边缘的中间。该热点 然后被投影到其周围每个控件的上边缘。然后测量每对热点之间的距离,具有最短 正距离的那对将确定接收焦点的下一控件。在这种情形中,控件A与B之间的热 点距离(线段AB)短于控件A与C之间的热点距离(AC),从而使得控件B接 着将接收焦点(D由于其完全位于A之上,所以不作考虑)。
当两个控件重叠时出现一种特殊的情形。例如,如果控件D与控件A重叠从 而使得控件D的上边缘在控件A之上,则控件D对于向下键按下将被考虑。因此, 在这种情形中,如果线段AD比线段AB和AC两者都短,则控件D接收焦点。
B.6.图形特征
与图形相关的功能的一个主要目的是提供尽可能经济和高效地满足开发人员 需求(考虑到有限资源环境的局限性)的API集。
根据一个一般特征,以上目的部分通过使用简化API集(与桌面环境中提供 的“完整”API集相比)来实现。例如,提供了诸如直线和椭圆绘图算法等简化的 图形API。该API集还具有允许将来扩展的灵活性。
根据另一特征,图形功能直接与机顶盒硬件交互,从而尽可能多地利用硬件 的处理能力。例如,在当前系统中,绘图基元可直接写入硬件。相反,常规图形 API过于抽象地位于“繁重”的桌面API的后面(因此当应用在有限资源的机顶盒 环境中时将变得缓慢)。
更具体地,图形功能可预设代码路径从而在可能的情况下对机顶盒102的硬 件API进行调用。提供一个示例,DCT 200机顶盒硬件提供了操作非常快速的块 复制功能。然而,该功能要求源指针和目的指针是字(WORD)对齐的。图形功 能适应了该功能的要求并随后调用它。作为另一示例,M68000芯片具有被称为 DBRA的特殊特征。图形功能可适应该芯片的要求(例如,对齐)并随后直接调用 该芯片以提供非常快速的内存转移。
作为另一示例,图形功能还能利用机顶盒102的行控制寄存器(LCR)210从 而以高效的方式提供各种特殊效果。例如,假设屏幕分辨率为480行。开发人员可 在LCR 210中分配指向屏幕上的各行数据的480个存储单元。即,这可以通过为 整个屏幕上显示分配内存位图缓冲区来实现。在正常状态下,每个LCR存储单元 指向位图的每一行的开始。特殊效果可通过根据各种算法使用LCR 210操作各行 的顺序来实现。举一简单的情形,如果令LCR[10]指向位图中的第9行而LCR[9] 指向位图中的第10行,则机顶盒102将以颠倒顺序显示这两行。
更具体地,在此说明的机顶盒系统的示例性的独特图形特征包括过渡效果、 定制调色板支持、blt分裂功能、Truetype字体渲染等。以下对这些特征进行了具 体说明。附录——章节D提供了关于这些特征的更多细节。
B.6.1.过渡效果
机顶盒102提供了在从一个图形呈现切换至另一个时实施的许多过渡效果。 以下功能提供了示例性的过渡效果。并且,这些功能可通过以上述方式直接操纵 LCR 210来实现。
Scroll方法在方法中指定的“偏移”参数为正数时向上滚动屏幕,或者在“偏 移”为负数时向下滚动。该效果将在由该方法中指定的“上边界”和“下边界”参 数限定的边界内提供。
Decimate方法模拟抽取效果。更具体地,该方法采用一百分数作为输入以指 示效果级别。该抽取效果在该方法中指定的“上边界”和“下边界”参数之间提供。
RasterFade方法模拟光栅淡变效果。该方法采用一百分数作为输入以指示效果 级别。该抽取效果在该方法中指定的“上边界”和“下边界”参数之间提供。
Expose方法在由UIpane指定的“上边界”和“下边界”的中心曝光由该方法 中指定的“linesToExpose”参数指定的若干行。
B.6.2.调色板和分辨率效果
机顶盒系统允许开发人员动态地改变分辨率和调色板。这可以提供更加多变 的、由此也更为有趣的用户体验。例如,开发人员可将系统配置成从第一应用切换 至第二应用将提示系统潜在地改变调色板和分辨率(与第二应用相对应)。
为了实现以上效果,系统提供了SetUserPalette(设置用户调色板)方法。该 方法让用户指定将与一图形对象相关联的定制调色板。
另外,RestoreDefaultPalette方法恢复默认的屏幕上调色板。
SetOSDResolution方法允许调用程序设置屏幕上显示分辨率。
RestoreDefaultOSDResolution方法恢复默认的屏幕上显示分辨率。
B.6.3.Blt效果
BitBlt(位块传送)方法将内容从一个图形对象块传送到另一图形对象。使用 该功能,应用开发人员,尤其是游戏程序员能够将图形内容的一部分复制到另一部 分。
B.6.4.字体渲染功能
作为一般性的字体处理特征,机顶盒系统能够从字体剥离不必要的信息从而 在机顶盒环境中提供对字体更为高效的处理。即,FontOptimizer(字体最优化程序) 工具通过消除代码集文件之外的特性、重新映射字符以及剥离字型信息以最小化文 件大小来最优化字体文件。因此该特征对在有限资源环境中运行感兴趣的应用的一 般目标作出了贡献。
SetAntiAliasBackgroundColor方法设置将被用于平滑的颜色。更具体地,该调 用建立用于创建在平滑中使用的中间颜色表的颜色。
SetFont方法设置将被用于字符串绘制操作的当前字体。
DrawString方法以由各种参数控制的特定方式以指定的颜色绘制字符串。
BreakString方法,使用当前设置的字体尝试将字符串分裂为多个字。
GetFontMetrics方法获取用于提供精确文本布局的当前指定字体的属性。
C.示例性操作方法
图7以流程图形式描述了机顶盒系统的操作。为了便于讨论,一些操作被描 述为由按一定顺序执行的不同步骤组成。这种实现是示例性而非限制性的。在此所 述的一些步骤可以被分组在一起并在单个操作中执行,而一些步骤可以用不同于本 公开阐述的示例中采用的顺序来执行。由于在该流程图中描述的功能已在前面章节 中解释,所以章节C将主要作为这些功能的简短回顾。
在步骤702,机顶盒102使用上述Initialize方法发起并装载应用。这提示机顶 盒102为该应用建立消息线程。
在步骤704,机顶盒102在该应用的运行中根据需要暂停并随后继续该应用。 例如,机顶盒102可在另一应用生成了优先于当前应用的UIpane时暂停当前应用。 机顶盒在程序的运行过程中通过以上述方式移除陈旧对象来执行内存管理。
在步骤706,机顶盒102退出/终止该应用。
D.附录
以下章节提供了在前面章节中描述的各种功能的更为穷尽的列表。
D.1.IUIpane接口
命令解释程序定义用作所有UIpane的根基的基IUIpane接口。该接口允许 UIpane管理器312无需知道每个UIpane的实现细节就能控制所有UIpane。IUIpane 接口可以在形式上表示为:public interface IUIpane。
IUIpane接口可提供以下示例性而非穷尽的接口功能列表:
·Graphic CreateGraphics()方法获得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的“脏” 区。活动(父)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类也是容器,这意味着它能包含子UIpane。
·UIpane Forms类分类允许创建顶层容器UIpane。
·UIpane Controls类分类允许创建用户界面。例如,Button类是UIpane控件。
ABC_Co.TV.Lite.UIpanes命名空间内有许多类对之前概要中提到的类分类提 供支持。图4示出了这些类的一个示例性分层组织:
·Button类表示TV按钮控件。
·Control类定义控件的基类。控件对象定义执行特定功能的具有视觉呈现的 对象。
·Form类定义无父的、顶层的、容器UIpane的基类。由该类生成的对象(表 单对象)具有一些或没有视觉呈现,并且可包含子UIpane。
·Transition类定义将过渡应用到表单类的方法。
·UIpaneBase类是定义UIpane的基类的抽象类(其定义具有视觉呈现的对象 或者包含其它UIpaneBase对象的对象)。
关于委托:
·UIpaneEventHandler类表示将处理任意UIpane事件的方法。
·KeyEventHandler类表示将处理键事件的方法。
·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(UIpane定义具有视觉呈现的对象或包含其它UIpaneBase对象的对象) 的抽象基类。即,UIpaneBase类实现向用户显示信息的各个类所需的非常基础的 功能。例如,它定义UIpane的边界、管理子UIpane并通过键事件处理用户输入。 它可以在形式上表述为:public abstract class UIpaneBase:IUIpane。
关于布局的主题,UIpaneBase类是一容器,这意味着它能保存任何非顶层 UIpane。UIpane可通过对其子女集合调用Add(添加)、Insert(插入)、Remove (移除)、以及RemoveAt以被添加到容器或从容器移除。UIpane的top(上端)、 left(左端)、width(宽度)以及height(高度)值在创建该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,而最大则对应于OSD宽度减去left参数。如果值在 这些边界之外,则抛出异常。“height”参数是指该UIpane按像素计的高度。最小 是1,而最大则对应于OSD高度减去top参数。如果值在这些边界之外,则抛出异 常。最后,“topLevel”参数指示该对象是否是顶层UIpane。
UIpaneBase类可提供以下示例性而非穷尽的公共属性列表:
·public virtual byte BackColor属性获得或设置该UIpane的背景颜色索引。示 例性的默认值是224。
·public virtual bool CanFocus属性获得指示UIpane是否能接收焦点的值。
·public ArrayList Children属性获得UIpane内包含的UIpane的集合。
·public bool Enabled属性获得或设置指示该UIpane是否能响应用户交互的 值。默认值为真。该属性在UIpane不是顶层UIpane并且没有为顶层UIpane的父 亲或祖父时返回假。
·public bool Floating属性获得或设置指示该顶层UIpane是否为浮动UIpane 的值。浮动的UIpane是将键传到其它顶层UIpane上的顶层UIpane。非顶层UIpane 不能为浮动UIpane。为非顶层UIpane设置Floating属性的尝试将会被忽略。
·public bool Focused属性获得指示该UIpane是否具有输入焦点的值。
·public virtual byte ForeColor属性获得或设置UIpaneBase的前景颜色索引。 示例性默认值是227。
·public int Height属性获得该UIpane的高度。
·public int Left属性获得该UIpane的左边缘与其容器客户区域的左边缘之间 按像素计的距离。
·public virtual IUIpane Parent属性获得或设置UIpane的父容器。如果UIpane 在其父边界之外,则抛出异常。顶层UIpane不能有父亲。
·public int Top获得该UIpane的下边缘与其容器客户区域的上边缘之间按像 素计的距离。
·public bool Visible属性获得指示该UIpane是否被显示的值。对于顶层UIpane 默认值为假,而对于所有其它UIpane默认值为真。该属性在UIpane不是顶层并且 没有为顶层UIpane的父亲或祖父时返回假。
·public int Width属性获得该UIpane的宽度。
UIpaneBase类可提供以下示例性而非穷尽的公共方法列表:
·public Graphic CreatGraphic()方法创建UIpane的图形对象。其返回该UIpane 的图形对象。
·public bool Focus()方法将输入焦点设置到该UIpane。默认地,控件不具有 焦点。将焦点设置到一UIpane就从任何先前的焦点UIpane移除焦点。设置焦点是 异步的,所以UIpane不会立即实际获得焦点。该方法在输入焦点请求成功时返回 “真”;否则返回“假”。注意,返回真意味着该UIpane能够通知UIpane管理器 312它有兴趣获得焦点。它并不表示该UIpane已经获得了焦点;直到UIpane管理 器312提供焦点为止。
·public void Hide()方法对用户隐藏该UIpane。
·public void Invalidate(Rectangle region)方法使该UIpane的指定区域无效(即, 该方法将该区域添加到将在下一绘画操作被重新绘画的该UIpane的更新区域)并 导致一绘画消息被发送到该UIpane。并且,该方法使分配到该UIpane的子UIpane 无效。在该方法中,“region”参数是指将被无效的区域。如果该region参数为空, 则整个UIpane被无效。
·public void Refresh()方法强制该UIpane无效其客户区域并立即重画其自身 和任何子UIpane。
·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 VisiblilityChanged在UIpane的可见性已经 改变时发生。
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 rectangle)方法提供了基 绘画方法。即,该方法绘画clipRectangle内的子女。即,“clipRectangle”参数是 指将被绘画的区域。如果clipRectangle为空则绘画所有内容。“graphics”参数是 指用于执行该绘画的图形。如果graphics为空则抛出异常。
·protected virtual VisiblilityChanged()方法引发VisiblilityChanged事件。
D.2.3.ABC_Co.TV.Iite.UIpanes.Form
ABC_Co.TV.Lite.UIpanes.Form类(Form类)派生自上述UIpaneBase类。 该Form类定义无父的、顶层的、容器UIpane的基类。这些对象具有一些或没有 可视呈现,并且可包含子UIpane。更具体地,基于解释程序的CLR应用对于主和 其它顶层UIpane可使用表单。一个应用可包含一个以上的表单;然而每个表单都 必须向该应用注册。主UIpane在调用Run时被自动注册;然而,后续的顶层UIpane (或表单)必须明确地注册以便接收键和绘画事件。该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()方法发起过渡事件。如果该表单与任何其它表单重 叠,则不能发起过渡事件。在发起过渡事件前,屏幕在该表单使用的平区域处被 住。当被锁住时,其它表单不能被创建或移到该被锁区域。该方法在过渡事件被 发起时返回“真”,否则返回“假”。
Form类可提供以下示例性而非穷尽的公共事件列表:
·public event UIpaneEventHandler Closed在表单关闭时发生。
·public event TransitionEventHanler Transition在DoTransition()被调用时发生。
Form类可提供以下示例性而非穷尽的受保护的方法列表:
·protected virtual void OnClosed()方法发起Closed事件。
D.2.4.ABC_Co.TV.Iite.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 BringToFront()方法将该UIpane提到z-顺序的前端。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
Button类可提供以下示例性而非穷尽的公共构造程序列表:
·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的前景色索引。示 例性默认值是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”参数是指按钮文本的字体名称。示例性的默认名 称为“Tiresias”(然而理所当然的是,该默认名称可被设为任何名称)。“height” 参数是指按钮文本的字体高度。示例性的默认值高度是20。“aspect”参数是指按 钮文本的字体高宽比。aspect的示例性默认值是100。
·public virtual void SetFont(string name,int height,int aspect)设置按钮文本的字 体参数。示例性的默认值如上文所述。
Button类可提供以下示例性而非穷尽的公共事件列表:
·public事件UIpaneEventHandler Click在该按钮被点击时发生。
Button类可提供以下示例性而非穷尽的受保护的方法列表:
·protected virtual void OnClick()方法发起Click事件。
·protected override void OnKeyPress(Keys keyCode,ref bool handled)方法发起 KeyPress事件。在该方法中,“keyCode”参数描述将由键事件使用的键代码。 “handle”参数提供对指示该键事件是否已被处理的值的引用。
·protected override void OnPaint(Graphics graphics,Rectangle clipRectangle)方 法绘画该按钮并发起绘画事件。在该方法中,graphics参数是指用于绘画的图形。 如果graphics为空则抛出异常事件。“clipRectangle”参数是指将被绘画的区域。 如果clipRectangle为空则绘画全部内容。
·protected virtual void OnPaintBackground(Graphics graphics)方法绘制该按钮 的背景。开发人员可绘制他们自己的背景(例如,绘制设想的位图)。在这些情形 中,开发人员可覆盖该方法。在该方法中,“graphics”参数是指用于绘画的图形。 如果graphics为空则发出异常。
·protected override OnVisibilityChanged()方法发起VisibilityChanged事件。
D.2.6.ABC_Co.TV.Lite.UIpanes.UInaneEventHandler
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。
示例
                       
public class MyForm:Form
{
         public MyForm():base()
         {
            //创建新的事件处理机
            this.Transition+=new
            TransitionEventHandler(this.OnTransition);
         }
        public void Start()
    {
          //发起过渡事件
          this.DoTransition();
        }
    public void OnTransition(object sender,Transition transition)
    {
        //执行过渡效果
      }
}
                                     
Transition类可提供以下示例性而非穷尽的公共属性列表:
public int Height属性获得Transition对象的高度。
Transition类可提供以下示例性而非穷尽的公共方法列表:
public void Decimate(int numerator,int denominator,int offset,int top,int bottom) 方法对过渡对象模拟抽取效果。numerator和denominator表示顶端与底端之间将被 影响的行的百分比。即,百分比=(numerator/denominator)*100。在该方法中,参数 “numerator”表示百分比值的分子。参数“denominator”表示百分比值的分母。参 数“offset”表示从顶端起将保持不被抽取影响的行数(按像素计)。参数“top” 是指在抽取时将被考虑的区域的顶端。上边界与过渡对象相关。如果该参数越界, 则抛出异常。“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)方法对 过渡效果模拟光栅淡变效果。numerator和denominator表示顶端与底端之间将被影 响的行的百分数。即,百分比=(numerator/denominator)*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 TransitionEventHandle(object sender,Transition transition)。参数 “sender”是指该事件的源。参数“transition”是指过渡对象。
D.2.2.ABC_Co.TV.Lite.UIpanes.ButtonSyle
该枚举指定了可用的按钮风格。更具体地,ButtonStyle指定Button对象的外 观。如果按钮风格等于0x0,则Button对象具有不弯曲的边缘并且文本向左对齐。 如果既没有设置LeftAligned也没有设置RightAligned,则文本为中间对齐。如果 LeftAligned和RightAligned两者都被设置,则LeftAligned优先。如果既没有设置 RoundedLeft也没有设置RoundedRight,则按钮具有不弯曲的边缘。ButtonStyle枚 举可在形式上表述为:public enum ButtonStyle
该枚举中其它示例性的成员在下表中指定:
表1:ButtonStyle成员
    成员名称     说明     值     LeftAligned     文本向左对齐     0x8     RightAligned     文本向右对齐     0x4     RoundedLeft     左边缘为圆形     0x1     RoundedRight     右边缘为圆形     0x2
D.2.12.ABC_Co.TV.Lite.UIpanes.Keys
该枚举指定了键代码。每个键由组成虚键代码的键值来标识。该枚举可以在 形式上表述为:public enum Keys。
该枚举中示例性的成员在下表中指定:
表2:Keys成员
    成员名称     说明     值     ByPass     旁路按钮     426     ChannelDown     频道往下按钮     412     ChannelUp     频道往上按钮     413     DayBackward     向后一天按钮     0xFB     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遥控的新停    止按钮     43l     PageDown    向下翻页按钮     0x22     PageUp    向上翻页按钮     0x21     Pause    暂停按钮     0x13     Play    播放按钮     0xFA     Power    电源按钮     489     Record    记录按钮     499     Remote0    0遥控按钮     0x30     Remotel    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应用的抽象 TVLiteApplicationBase类以及其它内容。即, ABC_Co.TV.Lite.Shell.TVLiteApplicationBase(ApplicationBase类)表示TV应用。 所有基于解释程序的CLR应用都应派生自该抽象的TVLiteApplicationBase接口并 且提供所需实现。ApplicationBase类可在形式上表述为:public abstract class TVLiteApplicationBase。
ApplicationBase类可提供以下示例性而非穷尽的受保护的方法列表:
·protected void Run(IUIpane mainUIpane)方法在当前线程上开始运行标准应用 消息循环,并使指定的UIpane可见。在精简的.NET环境中,该运行方法是静态方 法。然而,在基于解释程序的CLR环境中的静态方法对于所有运行的线程都是全 局的。因此,Run方法在抽象的基类TVLiteApplicationBase中作为受保护的方法来 实现以允许每个应用具有其自身的消息泵。
Run方法将自动地调用RegisterUIpane以将主UIpane注册为顶层UIpane。即, 参数mainUpane是指将使其可见的UIpane。
ApplicationBase类可提供以下示例性而非穷尽的公共属性列表:
·public bool EnhancedGraphicsMode属性允许应用进入“增强图形模式 (EGM)”。EGM模式允许应用设置用户调色板、改变OSD分辨率等。这是排 他性的模式,所以在一应用请求进入EGM模式(将EnhancedGraphicsMode设为 真)时,所有其它的受管理应用都将被挂起。进入EGM模式的应用在其想要离开 EGM模式时将EnhancedGraphicsMode设为假以使得其它被挂起的受管理应用能够 运行。应用管理器310在应用退出时将强制该应用离开EGM模式。该属性的默认 值被设为假。该属性只有在对Run方法的调用前才能被设为真。如果该属性在Run 方法已被调用以起动消息循环之后被设为真,则将抛出异常。
ApplicationBase可提供以下示例性而非穷尽的公共方法列表:
·public abstract void Initialize(string url)方法执行由应用定义的初始化。发起 该应用的HTTP请求的URL与其所附的参数一起通过要Initialize的调用中的参数 被传到该应用。以下提供了示例性url参数:
http://appserver/monster.dat?paraml=value1 & param2=value2.
该应用在其生成未处理的异常时将被终止。
·public void Exit()方法通知所有消息泵它们必须终止,并随后在所有消息已 被处理后关闭所有的应用UIpane。Exit方法通常从消息循环内被调用,并且强制 Run方法返回。由于该应用已经调用Exit方法来退出该应用,所以应用管理器310 将不会调用Terminate方法。
·public void RegisterUIpane(IUIpane topLevelUIpane)方法允许应用使用UIpane 管理器312注册其顶层UIpane。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.Drawina.Graphics类
Graphics类派生自Drawing类。它可以在形式上表述为:public class Graphics。
Graphics类可提供以下示例性而非穷尽的公共构造程序列表:
public Graphics(int x,int y,int width,int height)构造程序提供了让调用程序在 屏幕上的任意位置创建图形对象的方法。这些图形对象不能超出TV显示区域之 外。如果发生了这种情形,则构造程序自动地将该被创建的图形剪裁为有效的TV 显示区域。
Public Graphics(int width,int height)构造程序提供了在存储器缓冲区中创建屏 下(off-screen)图形对象的方法。在一个示例性实现中,以上两个Graphics构造 程序可被设为“internal”方法。这是因为编程模型要求所有的应用都有表单对象 (派生自Form类)。该图形对象由表单对象控制以使得所有绘制同步。例如,在 当前应用模型中,按钮仅表示表单内部的矩形,而不是常规编程环境中的单独的 UIpane对象。表单对象负责绘画该按钮。如果开发人员被允许为该表单创建图形, 则将变得难以同步出现在同一表单上的按钮和其它内容。(重申:该表单类将具有 方法CreateGraphics()。)
Graphics类可提供以下示例性而非穷尽的公共属性列表:
·public Rectangle ClipBounds属性被用于剪裁当前图形对象所处的剪裁区域。
Graphics类可提供以下示例性而非穷尽的公共方法列表:
·public void Dispose()方法废弃图形对象。
·public void SetClip(Rectangle clipRect)方法设置当前图形对象中的剪裁区域。
·public void ResetClip()方法将图形对象中的剪裁区域复位返回到其默认状 态。
·public void SetUserPalette(unit[]pubPalette,byte startPos)方法让用户指定将与 当前图形对象相关联的定制调色板。在一个示例性实现中,用户能够指定的调色板 条目的最大数目是253。用户还能该定制调色板应起始于整个调色板阵列中的何 处。如果该定制调色板中的颜色数目加上该定制调色板的起始位置大于253,则将 抛出INVALID_PARAMETER(无效参数)异常。
更具体地,在一个示例性实现中,调用程序不允许将颜色索引设为0,因为这 是被OS 304保留用以指示透明颜色的。同样,当该平台上所支持的图像格式被编 码时索引255被用作OSD透明颜色索引。索引254被用作RLE退出键。因此,该 索引也被禁止。这就解释了在该示例性实现中定制调色板中的颜色数目为何不能大 于253的原因。
作为进一步说明,在一个示例性实现中,该方法只有在图形系统处于EGM模 式中时才能被调用。否则,将抛出“INVALID_EGM_STATE(无效EGM状态)” 异常。并且,如果输入参数无效或者起始位置越界,也将抛出 “INVALID_INPUT_PARAMETER(无效输入参数)”。
·public static void RestoreDefaultPalette()方法恢复默认的OSD调色板。
·publlic void SetOSDResolution(OSDResolution resolution)方法让调用程序设 置OSD显示分辨率。
在一个示例性实现中,enum OSDResolution方法由以下定义控制:
  {
    OSD_RES_704=0x0, //704x480分辨率
    OSD_RES_576,      //576x480分辨率
    OSD_RES_448,      //448x480分辨率
    OSD_RES_352,      //352x480分辨率
  }
在一个示例性实现中,该方法只有在图形系统处在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”参数中最小值的一半。 如果radius超过了这个值,则其将被截至该限定值。“style”参数可包括: RoundingStyle.All;RoundingStyle.UpperLeft;RoundingStyle.UpperRight; RoundingStyle.LowerLeft;RoundingStyle.LowerRight;或者被“或”的组合。
·public void DrawRoundRectangle(byte color Index,int lineWidth,int x,int y,int width,int height,int radius,RoundingStyle style)方法用指定的颜色绘制具有指定粗 细的圆形矩形轮廓。“radius”参数必须小于或等于“height”和“width”参数中 最小值的一半。如果radius超过了这个值,则其将被截至该限定值。“style”参数 可包括:RoundingStyle.All;RoundingStyle.UpperLeft;RoundingStyle.UpperRight; RoundingStyle.LowerLeft;RoundingStyle.LowerRight;或者被“或”的组合。
·public void BitBlt(int destX,int destY,int destWidth,int destHeight,Graphics srcGraphics,int srcX,int srcY)方法将内容从一个图形对象块传送至另一图形对象。
·public void DrawImage(byte[]buffer,int x,int y)方法绘制平台上当前所支持的 特殊格式的位图。用户可使用提供的工具将普通图形转换为该特殊格式的位图。如 果该图像不是该平台支持的格式中的一种,则将抛出INVALID_IMAGE_FORMAT (无效图像格式)异常。
Graphics类可提供以下示例性而非穷尽的内部方法列表:
·internal Graphics()方法提供了创建覆盖整个TV显示UIpane的图形对象的构 造程序。
·internal static void EnterEGM()方法允许应用进入“增强图形模式”(EGM)。 在一个示例性实现中,在任意特定时间只有一个应用被允许进入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压缩图象格式
该平台可使用各种图像格式。两种专属的图像格式包括:未压缩位图格式; 以及RLE压缩位图格式。这些专属图像格式可使用能提供给客户的图像转换工具 来生成。
RLE压缩格式的说明如下。
typedef struct
{
unsigned char ucMagic1;  //第一文件签名号:“V”
unsigned char ucMagic2;  //第二文件签名号:“J”
unsigned char fRLE;      //如果图像为RLE压缩,则为1
unsigned char ucPad;     //填充,未使用
unsigned char usWidth;   //图像宽度
unsigned char usHeight;  //图像高度
}SpotImageHeader;
少于两个连续的像素具有相同的像素值,则该格式“照原样”编码当前像素。 如果两个以上的连续像素具有相同值,则该格式将这些像素编码为RLE序列,即: RLE_ESCAPE,像素(索引)值和计数器。
D.5.字体方法
以下子章节阐述了用于处理字体的渲染的功能。
D.5.1安装和卸载字体
字体生命期管理在TVLiteApplicationBase对象中处理。用于安装和任选地卸 载字体的功能包括:
·void TVLiteApplicationBase.InstallFont(string name,byte[]fontData)方法安装 新的字体。该字体被剥离不必要的标头信息(与桌面环境中这种字体的使用相比)。 字体名称区分大小写。
该方法在以下情况下抛出异常:(1)例如同样名称的字体已使用不同数据被 安装;(2)如果提供的字节不能被解析为有效剥离的trueType字体;或者(3) 其它典型的错误情况。如果作出第二次尝试以用相同数据来安装字体,则该调用将 不会抛出异常。即,如果安装字体的应用不同于最初安装该字体的应用,则该字体 的引用计数将递增。如果相同的应用安装相同字体两次,则第二次安装尝试不起作 用。
InstallFont方法提供了以下示例性的异常错误返回:
0-(MAX_FONTS-1)=该字体的槽号;
FONT_DUP_NAME=已安装的相同名称的字体但是数据不匹配;
FONT_TABLE_FULL=字体表满;以及
FONT_DATA_VALIDATION_ERR=装载字体数据的问题。
注意,在一字体被安装时其它应用也可使用该相同字体,但是如果它们自己 不安装该字体,则字体会在安装该字体的应用退出时消失。同样,这将被考虑为“寄 生”于另一应用的安装之上的不良实施,除非能够确保“主”应用将不会在该寄生 应用之前退出。
·void TVLiteApplicationBase.DeinstallFont(string name)方法卸载字体。或者, 如果一个以上的应用已安装了该字体,则DeinstallFont方法释放调用应用的引用计 数。
更具体地,被安载的字体在该应用的生命期间将持续并且当该应用退出时自 动地被移除(如果该退出的应用是使用该字体的最后一个应用)。通常在退出之前 不需要调用DeinstallFont。然而,如果只是瞬时需要使用一字体,则开发人员可考 虑明确地卸载该字体。
DeinstallFont调用将在应用没有安载该字体或已卸载了该字体时抛出异常。
D.5.2.图形对象与字体有关的方法
图形对象提供许多其它的与字体有关的API(方法)。示例性的该类方法包括:
·void SetAntiAliasBackgroundColor(int backIndex)方法设置将被用于平滑的颜 色。更具体地,该调用建立被用于创建用于平滑用途的中间颜色表的颜色。这在默 认调色板正被使用并且前景和背景颜色落在6x6x6的颜色立方体内时非常高效。当 定制的调色板被使用或者所使用的颜色在6x6x6空间之外时将执行对该颜色表的 穷尽遍历;该遍历找出平滑表中每个位置的最佳值。
如果“backIndex”被指定为-1,则将不执行平滑。设置与正被使用的前景颜 色相同的背景颜色具有禁用平滑的效果。
示例性的异常错误返回包括:
FONT_PARAM_OUT_OF_RANGE=调色板索引越界;以及
FONT_SYSTEM_ERR=取系统调色板信息错误。
·void SetFont(string name,int height,int aspect)方法设置将被用于字符串绘制 的当前字体。“aspect”参数定义30与250之间的包括端值的百分值,其中30表 示30%的正常宽度,而25表示250%的正常宽度。“height”参数指定在4-250范 围内包括端值的按像素计的字体高度。字体名称区分大小写。如果字体是纯字型字 体(字体不含cmap(字符映射表)表),则忽略height和aspect。
示例性的异常错误返回包括:
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 编码的字符运行来处理。字型使用指定的颜色索引来绘制,并且被平滑至当前平滑 背景颜色。“提升量阵列”包含用于将被绘制的每个字符/字型的水平提升量。
为了支持提升量小于0,用以下方式对提升量编码。每个字符提升量宽度为一 个或两个字节长。在范围0到127范围内的提升量宽度使用1个字节不作修改地被 存储。在该范围之外,最高有效位(0x80)指示两字节序列的第一个字节。下一位 (0x40)指示被编码的值是否应被求反。第4和第5位(0x30)被忽略但应被设为 0。低4位和下一字节表示提升量宽度的大小。如果第一个字节的第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 brown cow”,连同仅含空格字符的分隔符串,startIndex为O。如果只 有前三个词将符合,则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”参数是该字体中文本行之间所需的按像素计的期望 的默认间隔。这是该字体的ascent(上升量)、descent(下降量)、以及行间隙的 总和。
示例性的异常错误返回包括:
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是非阻塞调用,并且该实体无需在单独的线程上进行该 调用,除非明确地需要这么做。将有单个系统线程执行诸如HTTP、MpegFiltering (Mpeg滤波)、Tuning(调谐)、eTV等所有面向回调的事件的等待和派送。 (UserInput(用户输入)、AppLaunch(应用发起)和PingPong(乒乓)事件例外, 它们由专用的系统线程来处理)。
事件的类型可被宽泛地分为两种:多实例事件和单实例事件;HTTP和 GuideDB Search代表典型的多实例事件。在这些模型中,通常必须明确地作出请 求(由实体)以起动操作,并且多个线程能够创建不同请求。在该模型中,调用程 序(去往NotifyOnEvent)将在可被用于在相同事件的多个实例(例如,来自同一 应用的不同线程或者来自不同应用的多个HTTP请求)之间进行区分的相应NSL 句柄中传递。使用该单个实例,实体通常不需要明确地做任何事来发起请求。运行 时间自动地获取这些种类的事件并将它们派送至感兴趣的一方(获取该数据、对其 适当地解析并且执行进一步的对其API的消费者的派送是该实体的责任)。
根据一个示例性实现,在任何时刻,对于事件类型/句柄组合只能有一个未解 决的请求。例如,在一个示例性实现中,在相同的句柄上不能进行第二个HTTP 请求直到第一个请求已经成功地完成(例如,回调已被调用)。这不是一个困难的 要求,如果需要并且如果满足了一定条件则可以被一定程度的放宽。
SpotHost层将起到NSL与SPOT环境之间的中间人的作用。使用单实例模式, 该事件将被广播至所有订户。SpotHost层将从NSL层获取事件(诸如HttpResponse 或MpegFilter),将其包入HAL_DISPATCH_EVENT结构并使用 Toba_EnqueueDispatchEvent函数将其发送到系统队列。该实体负责实现SpotHost 层中的适当功能。
当系统从队列当中取出事件以便处理时,如果其不能找到匹配的请求或不能 找到任何派送对象(例如,由于作出该请求的应用已退出),则系统将放弃该响应 (在作出适当的清除之后)。因此,API应该在执行初始化前首先为通知注册(通 过调用NotifyOnEvent)。否则,可能有会导致响应被放弃的错综复杂的竞态条件。 如果系统找到匹配的请求,它将调用相应的委托。该实体在该委托处理程序中不应 该执行任何不平凡工作。
Dispose方法应该关于NativeResponse对象被调用(调用由 NativeResponse.freeNativeDataFunctionPtr指向的功能并在作为参数的 rawNativeDataPtr中传递)。如果需要保持本机数据,则可以保持NativeResponse 对象;或者可将freeNativeDataFunctionPtr字段设为0并随后调用Dispose。如果回 调抛出异常,则系统假定最坏的情形并关于NativeResponse对象调用Dispose。由 于系统和用户都将能够提供确保的清除,所以使用Finalizer执行清除没有问题。
系统也能提供明确的API来解除注册;例如, CancelNotificiation(HalDispatchEvent e,uint nativeHandle)。使用该功能,系统仅需 要关注自动解除注册的非正常终止的情形。
使用示例
             
多实例模型
=========
_httpDataPtr=HttpWebResponse.CreateNativeHttpData();//创建NSL句柄
/*
多个应用可创建Http对象,并且每个请求需要唯一地可标识;因此需要在NSL 句柄中作为权标传递。
*/
SystemUtils.NotifyOnEvent(HalDispatchEvents.HTTP,_httpDataPtr,
HttpC allback);StartRequest();//初始化...
//去做其它事情...
void HttpCallback(NativeResponse nr)
{
      uint rawNativeData=nr.rawNativeDataPtr;
      /*nr.Dispose必须被调用以废弃本机资源。如果想要保持本机数据, 则可在调用Dispose前将rawNativeDataPtr设为0。Dispose在回调中并不需要 在此立即执行。*/
    //执行平凡活动并尽快返回。
}
单实例模型
=========
       MpegFilterApi()
       {
           /*
0=>没有相关联的本机句柄。虽然NSL MpegFilter API可以具有句柄,但在 这里并不需要,因此MpegFilter事件的所有实例都是相同的。它们仅将一块数据传 到感兴趣的一方(在这种情形中,为MpegFilter受管理的API)
      */
      NotifyOnEvent(HalDispatchEvents.MpegFilter,0 /*无本机句柄*/, this.MpegFilterCallback);
     }
     void MpegFilterCallback(NativeResponse response)
     {
        byte[]filterdata=new byte[response.rawnativedatasize];
        Systemutils.CopyToByteArray(filterdata,response.rawnativedataptr);
/*
调用Dispose以去除相关联的本机数据。
      */
      response.Dispose();
/*执行具有字节阵列的活动但是尽快返回,因为该调用是在系统线程上作出 的*/
   }
             
在此的目的是为用户提供非常轻量级并且“薄”的层以从NSL/PAL层接收异 步回调和系统事件(而无需为每个请求生成单独线程)。如果需要,API作者可在 该特征之上根据回调机制创建IAsyncResult/AsyncCallback。
虽然以结构特征和/或方法动作特有的语言对本发明进行了说明,然而需要理 解的是,限定在所附权利要求中的本发明并不限于所述的这些具体特征或动作。这 些具体特征和动作仅是作为用于实现所要求保护的发明的示例性形式而公开的。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈