发明内容
简而言之,本发明提供一种用于辅助显示器的计算体系结构,它包括若干不同的代码层,设备制造商可根据特定需要,按需独立扩展其中的每一层。以此体系结构,本发明允许设备制造商以仅要求显著减少的(例如,极少甚至没有)固件改变量的方式自定义硬件组件。自定义的例子包括将诸如移动通信的无线电、SPOT无线电、蓝牙无线电、和/或GPS接收器等无线电接收器或收发器;包括温度传感器、音频解码器(例如,用于数字信号处理)、附加存储和/或诸如指示器等其它硬件集成到设备中。
在硬件组件以上的低层,HAL(硬件抽象层)允许以独立于硬件的方式编写较高层的代码。HAL可按需扩展以支持自定义的硬件。因为HAL将硬件区别抽象化,所以设备制造商可在许多类型的设备之间重复使用在较高层运行的驱动程序,而无需大动干戈地为每一类设备自定义驱动程序。
在驱动程序以上,其它设备软件包括诸如TinyCLR等公共语言运行库(runtime),它包括.NET公共语言运行环境的相对较小范围的实现。在公共语言运行库上运行的受管的代码将在公共语言运行库所运行的任何平台上运行,这是由该平台的HAL(硬件抽象层)(例如基于ARM7芯片的平台的HAL)实现的。因为固件的主体是用受管代码编写的,所以它也不依赖于其运行的硬件的类型。通过控制设备固件的主体,并将HAL和CLR包括到该体系结构中,设备制造商可重复使用现有软件,而无需进行任何改变,这对于提供用作辅助显示器的各种类型的设备之间的高质量的、一致的体验而言是很重要的。
通过将该体系结构分层,设备制造商只需扩展该体系结构中适当的一层(或数层)中的代码。例如,如果改变是新的CPU,则HAL需要被加以适应。但是,如果改变是增加一件硬件而不改变HAL为之存在的CPU,则可能只需要适当的对该硬件的驱动程序和在该设备上运行并控制该硬件的其它相应的软件。某些诸如因为性能原因等(例如,涉及高速媒体缓冲)不能用受管代码编写的应用程序可以用诸如C或C++等本机代码编写,并且实质上扩展了CLR。
对向辅助显示平台添加附加能力感兴趣的设备制造商(硬件制造商)添加硬件,从而扩展现有设备固件以及所需的任何其它代码。对现有(例如,由另一家供应商所提供)辅助显示固件的影响是微不足道的。
此外,该平台可按需扩展,以从在主计算机系统上提供的客户辅助设备API集合的角度为改变的硬件进行调整。为此目的,提供使用客户API的简单且可扩展的机制,用于在设备制造商所提供的设备软件和主计算机系统之间所进行的通信。这赋予设备制造商提供需要使用该平台的特别硬件的特定特征的端对端实现的能力。API可扩展性允许设备制造商和独立软件供应商开发主计算机系统上的能与该设备上的自定义硬件交互的客户应用程序而不要求专门的API。
更特别地,可扩展性模型要求在主计算机系统上运行的客户应用程序能够向该设备发送数据以前指定“端点”。通过让设备制造商提供专门的固件来通告该设备上的端点,主计算机系统上的软件可标识具有特殊硬件能力的设备,并直接向该端点打开通信信道。客户API被设计成使客户应用程序和该设备之间所传输数据的类型是无关的。从而该端对端平台减少了设备制造商一方提供硬件可扩展性所花费的工作量。
当结合附图考虑以下详细描述时,其它优点将会变得显而易见,附图中:
具体实施方式
示例性操作环境
图1表示可加入本发明的以主个人计算机系统形式的计算设备120的框图。本领域技术人员将会认识到,图1中所示的个人计算机系统120纯粹旨在示例,且本发明可用其它计算机系统配置来实施,包括手持式设备、多处理器系统、基于微处理器或可编程的消费者电子设备、网络PC、小型计算机、大型计算机、无外设(Headless)服务器、等等。本发明还可在分布式计算环境中实施,其中任务是由通过通信网络连接的远程处理设备执行的。在分布式计算环境中,程序模块可位于本地和远程记忆存储设备中。
个人计算机系统120包括处理单元121、系统存储器122、以及将包括系统存储器在内的各个系统组件耦合到处理单元121的系统总线123。系统总线123可以是若干类型总线结构中的任何一种,包括存储器总线或存储器控制器、外围总线、以及使用各种总线体系结构中的任何一种的局部总线。系统存储器包括只读存储器(ROM)124和随机存取存储器(RAM)125。包含诸如在启动期间帮助在个人计算机120内部的各元件之间传递信息的基本例程的基本输入/输出系统126(BIOS)存储在ROM 124中。个人计算机120还可包括用于读或写硬盘(未示出)的硬盘驱动器127、用于读或写可移动磁盘129的磁盘驱动器128、以及用于读或写诸如CD-ROM或其它光介质等可移动光盘的光盘驱动器130。硬盘驱动器127、磁盘驱动器128以及光盘驱动器130分别由硬盘驱动器接口132、磁盘驱动器接口133、以及光盘驱动器接口134连接到系统总线123。各驱动器及其相关联的计算机可读介质为个人计算机120提供计算机可读指令、数据结构、程序模块和其它数据的非易失性存储。尽管本文中所描述的示例性计算机系统使用硬盘、可移动磁盘129以及可移动光盘131,但是本领域技术人员应当认识到,在示例性计算机系统中还可使用可存储可由计算机访问的数据的其它类型的计算机可读介质,诸如磁带盒、闪存卡、数字视频盘、贝努利盒式磁带、随机存取存储器(RAM)、只读存储器(ROM)、等等。
若干程序模块可存储在硬盘、磁盘129、光盘131、ROM 124或RAM 125上,包括操作系统135(诸如WindowsXP等)、一个或多个应用程序136(诸如MicrosoftOutlook)、其它程序模块137和程序数据138。用户可通过诸如键盘140和定位设备142等输入设备将命令和信息输入到个人计算机120中。其它输入设备(未示出)可包括话筒、控制杆、游戏垫、圆盘式卫星天线、扫描仪、等等。这些及其它输入设备常常通过耦合到系统总线的串行端口接口146连接到处理单元121,但也可通过诸如并行端口、游戏端口或通用串行总线(USB)等其它接口连接。监视器147或其它类型的显示设备也可经由诸如视频适配器148等接口连接到系统总线123。除了监视器147以外,个人计算机通常还包括诸如扬声器和打印机等其它外围输出设备(未示出)。辅助显示/设备200是附加输出设备,并可经由例如辅助显示接口155连接到系统总线123。
辅助显示器还可通过串行接口或由诸如并行端口、游戏端口、红外或无线连接、通用串行总线(USB)或其它外围设备连接等其它接口连接到主计算设备120。图1中的输入设备201可提供一个或多个激励器赖于与辅助显示器200对接和/或对其进行控制,例如可经由输入设备接口156(可以是串行接口)、或由诸如并行端口、游戏端口、红外或无线连接、通用串行总线(USB)或其它外围设备连接等其它接口连接到系统总线123。
个人计算机120可使用到诸如远程计算机149等一个或多个远程计算机的逻辑连接在联网环境中操作。远程计算机149可以是另一个人计算机、服务器、路由器、网络PC、对等设备或其它普通网络节点,并且通常包括以上相对于个人计算机120所描述的许多或所有元件,尽管图1中仅示出记忆存储设备150。图1中所示的逻辑连接包括局域网(LAN)151和广域网(WAN)152。此类网络环境常见于办公室、企业范围的计算机网络、内联网和因特网。
当在LAN网络环境中使用时,个人计算机120通过网络接口或适配器153连接到局域网151。当在WAN网络环境中使用时,个人计算机120通常包括调制解调器154或用于通过诸如因特网等广域网152建立通信的其它装置。可以是内置或者外置的调制解调器154经由串行端口接口146连接到系统总线123。在联网环境中,相对于个人计算机120所描述的程序模块或其部分可存储在远程记忆存储设备中。可以理解,图示的网络连接是示例性的,并且可以使用在计算机之间建立通信链路的其它装置。
应当注意,根据本发明,该计算机系统无需为使辅助设备工作而始终保持运行状态。实际上,当计算机电源切断时,辅助设备仍可在默认范围或用户配置的范围工作,诸如当计算机系统处于睡眠状态或冬眠模式中时,和/或当用户尚未登录,或者经由安全机制封锁系统时。
辅助显示/设备200可作为主显示器的补充,还可在主显示器关闭或者不在工作状态(例如,断开)时用作代用显示器来为用户提供某些信息。例如,诸如如何对主显示器加电等信息可能是有帮助的,同样连接到移动计算机、当主显示器关闭和/或并非轻易可见(例如,膝上计算机的顶盖合上)时用户可以看到的辅助显示设备上的会议房间号和/或方向也是有帮助的。辅助设备可播放音频和/或视频,显示图像,显示日历信息,显示电子邮件,等等。
为在这些断电模式中启用和控制通信,可存在固件,它存储在非易失性存储器中,当被次级处理器加载和操作时,它启用辅助显示器以及其它要使用的辅助组件,只要还有一些电源可用。注意,如本文中所使用,术语“固件”和“设备硬件”本质上是等价的,并且一般可被视为表示辅助存储器、其中的代码和/或其上运行该代码的辅助处理器。
图2A-2E分别示出计算设备上或与之相关联的用于放置辅助显示屏200a-200e的示例性位置。如图2A和2B所示,一个辅助显示屏200a可被放置在独立(陆线或移动)电话202的前表面、后表面、或其它表面上,(如果经由诸如蓝牙技术等连接则无需被物理地耦合)和/或另一个辅助显示屏200b放置在移动计算机204或图形输入板计算设备(未示出)的侧边或顶盖上。辅助显示屏200c的另一个位置(图2C)可以是在安装在计算机或连接到计算机的外围设备上(诸如监视器206上或键盘上(未示出))的电话机上。图2D和2E分别示出辅助显示屏200d和200e在连接到计算机的独立控制台或其它外壳210(诸如主板的外壳等)的前面板上的其它放置方案。本领域技术人员将会认识到,辅助显示屏可放在任何计算设备或其它具有显示能力的任何表面上,诸如放在带有到计算机的无线或其它连接的手表上,放在远程控制设备上,放在远程壁挂式单元上,等等。实际上,辅助显示器无需物理地靠近主计算机系统,因为连接可以是通过LAN或WAN,甚至是通过因特网。
如从图2A-2E明确的,辅助显示器可以是任何数量的已知类型的显示器的形式,诸如一个或多个发光二极管(LED)、2线字母数字显示器、单色显示器、彩色显示器等。本领域技术人员将会认识到,本发明还可使用其它计算或通信设备的显示器,作为辅助显示器200。这些其它计算或通信设备包括通用计算机、蜂窝电话、以及诸如寻呼机或个人数字助理(PDA)等手持式设备。此外,本发明可将计算设备120的屏幕显示的一个区域内实现的虚拟辅助显示(例如,屏幕保护程序或图形用户界面的组件)作为辅助显示器200使用,包括在用户登录以前。辅助显示器200可包括上述任何形式的组合,还可物理地或逻辑地与诸如一个或多个LED等指示器结合,和/或与虚拟辅助显示结合使用。
即使没有屏幕,或当其屏幕被断电时,辅助设备仍可提供功能。例如,辅助设备可播放音频,收集数据(例如,用于在稍后下载回到主计算机系统),执行计算,等等。而且,显示器可由一个或多个LED等而不是完整屏幕组成。因此,尽管有辅助显示屏可能产生许多好处和优点,因此辅助设备在本文中可被称为辅助显示器,但是显示器不是必需的。一般而言,如本文中所称的辅助显示器本质上可由可被感知的任何事物组成,包括任何可视化、可听、和/或可触知的表示。可用作辅助显示设备的各类设备的例子包括单独的计算机系统、膝上计算机顶盖上的显示器、移动电话、袖珍型个人计算机、数字的基于图像的相框、厨房显示器、电视、媒体播放器、包括闹钟的钟、手表、等等。其它类型的设备包括嵌入在消费者电子设备(诸如冰箱、家庭影院接收器、DVD播放器、等等),壁式显示器,汽车、运输或其它车辆单位(例如,将汽车/火车/飞机里已有的显示器作为辅助显示器使用)、主计算机系统的键盘或其它输入设备、PDA(包括非蜂窝电话PDA)等的主显示器内的、或使用其主显示器的辅助设备。
辅助显示器的可扩展体系结构
转到图3,图示出经由辅助性显示API集合304将辅助性设备300和/或301向包括应用程序302和其它程序(例如,操作系统组件)的客户机展现的示例性实现。API集合304为各种功能提供API,包括向系统注册客户应用程序306(程序的组件或者该程序本身),向附加设备发送内容,向附加设备发送通知,以及从附加设备接收事件。事件可包括导航事件、内容请求事件、内容改变事件、等等。
API层304被写在便携式设备API集合310上,后者经由用户模式驱动程序框架312与设备的驱动程序过程通信。便携式设备API集合310将辅助显示映射到一类便携式设备,且它允许设备能力的枚举。但是,这被封装在用户模式驱动程序内,并不向客户应用程序306展现。图3所示的其它(可选的)组件包括能在辅助显示上提供通知的通知客户机316。例如,即使在诸如日历程序等应用程序不在运行中时,系统提供对应于该程序的预定时间的通知;通知客户机316能实现此类情形。
转到硬件制造商的角度,一般而言,每一个辅助设备供应商都提供对应的辅助设备驱动程序324,尽管该设备驱动程序可由辅助性显示平台的供应商供应。某些类型的辅助设备被认为是“增强型”设备,因为它们是用某些固件配置的,其中这些固件一般是与可经由API集合304接收的任何信息兼容的。因此,可为此类设备提供一般的驱动程序,尽管如下所述,此驱动程序可被扩展,且/或其它驱动程序可被添加。
在任何情况下,用户模式驱动程序框架都提供设备驱动程序接口(DDI),用于将设备驱动程序(例如,324和325)耦合到辅助显示平台。然后这些驱动程序将对应于API所接收的信息的数据转发(和返回)给适当的硬件接口(传输),用于与辅助显示设备的通信。例如,在图3中,设备驱动程序324被示为正在将数据转发(经由先前所定义的协议)给远程堆栈和驱动程序327,用于与设备300的无线(例如,蓝牙、Wi-Fi、AM/FM红外等等)通信,而设备驱动程序325被示为正在将数据转发给基于USB的硬件328,尽管包括诸如基于TCP/IP传输等网络传输在内的其它类型的传输也是可行的。注意,用户模式驱动程序对所有增强性显示均有效,而无论连接的类型是什么,但是每个设备每种连接类型使用一个驱动程序可能更为直接。还要注意,如图3中所表示,多个设备可被耦合到计算机,以在同时用作一个辅助显示器。用户可配置(例如,经由控制面板或系统数据提供器308之类)在哪个设备上显示哪个客户应用程序的数据。系统数据提供器308还向辅助显示器供应诸如时间数据、无线信号强度数据和/或电池电平数据等系统信息。
又如图3所示,“增强型”显示器301是运行本文中称为辅助显示平台的特定固件堆栈的显示器。例如,在本发明的一个实现中,这一固件堆栈包括TinyCLR组件,并支持TinyCLR对象串行化。
在图3所示的示例性实现中,为导航和显示被高速缓存的内容,设备应用程序369和外壳程序370在TinyCLR框架374和实时运行组件376上运行,后者解释、导航、并显示数据。图示TinyCLR运行时组件376至少在一个驱动程序377和TinyHAL之上,如以下参考图4所述。
一般而言,外壳程序370提供主页、非客户区域、菜单、以及辅助显示设备的一般外观和感觉。所提供的数据可以是或被修改为屏幕的有向图的形式,其中每一个屏幕都是以TinyCLR形式对象为根的TinyCLR视图对象的可视化树。外壳层接收来自固件较低层的按钮事件,解释这些事件,并适当地围绕数据进行导航。外壳程序370还经由如上所述的辅助显示平台接受来自主计算机系统的通知请求,并且当它从高速缓存管理器372得知需要该内容(例如,内容丢失的情况)时,向主计算机系统发布请求以提供新的内容。外壳程序370还显示定时的通知,这可在主计算机系统未被连接时发生。注意,呈现引擎370也可以是可扩展的,从而应用程序可提供能够呈现该应用程序的数据的自定义代码。
离线高速缓存管理器372包括写在TinyCLR 376之上的汇编程序,它管理存储在该设备上的数据项的高速缓存。此组件还执行一些存储器管理,处理系统应用程序可能提供多于设备所能存储的数据这一事实。如果固件修改数据高速缓存,则此组件跟踪该信息,并向系统上的应用程序宣告事件,以在主计算机系统在线时立即让它知道,或如果不在线时,则让它在机器一回到在线状态时即得知。高速缓存管理程序可经由接口向驱动程序360展现。
根据本发明的一个方面,各个层(如图4中一般示出)是分离的,且每一层都可根据需要由设备制造商单独扩展以支持扩展的硬件。注意,图4的大部分一般地对应于图3的固件堆栈。通过将该体系结构分层,设备制造商仅需按照如扩展的硬件所需要的那样来扩展该体系结构中适当的一层或数层中的代码。
特别地,除了显示面板和控制器490、辅助处理器491和存储器492以外,设备制造商还添加了扩展的硬件493来自定义设备。自定义的例子包括将以下一个或多个集成到设备中,诸如SPOT无线电、蓝牙无线电、GPS接收器、温度传感器、音频解码器、音频编码器、附加存储、诸如指纹读出器等生物测定传感器、加速计、RFID标签/读出器、在场检测、到存储阵列/系统管理的接口(例如,对诸如SMbus等可提供系统信息的系统总线的访问,或对大型存储阵列的访问)、电池(例如,设备自带的电源,而不是与主计算机系统共享的电源)、红外收发器、RF发送器(例如,RF遥控器)、话筒、和/或诸如指示器等硬件。如应理解,制造商能以仅要求对辅助设备固件堆栈进行显著减少的(例如,极少甚至没有)改变量的方式自定义硬件组件。
在硬件组件之上,HAL(例如,硬件抽象层)允许以独立于硬件的方式编写高层代码。如本文中所使用,当指代码堆栈时,术语“高层”和“低层”、“之上”和“之下”等类似于在其它计算情形中所使用的那些术语,其中一般而言,软件组件相对于较高的组件越是低,该较低的组件就越靠近硬件。如图4中所示,基本HAL可由HAL扩展代码480根据需要扩展,以支持自定义的硬件。注意,扩展HAL不总是必要的,因为,例如可能有未使用的通用I/O等可用于通过现有HAL479来操作设备。或者,可经由扩展的HAL来管理端口。
在HAL之上是驱动程序4771-4773,其中包括为扩展的硬件添加的自定义驱动程序4773。注意,尽管图4仅示出一个驱动程序4773和一个扩展的硬件块493,但可添加更多的驱动程序和/或硬件。此外,应当注意,修改现有的驱动程序代码而不是添加另一个驱动程序,来执行所需的被添加的功能是等效的。如一般所知,因为HAL 479抽象出硬件差异,所以设备制造商可重复使用在许多类型的物理设备之间运行的自定义驱动程序4773(或经修改的驱动程序),而无需为每个不同的设备类自定义驱动程序4773。
在驱动程序之上,其它设备软件包括诸如TinyCLR 376等公共语言运行库(CLR),它由.NET公共语言实时运行环境的相对较小范围的实现组成。在公共语言运行库上运行的受管代码将在公共语言运行库运行的任何平台上运行,这是由该平台的HAL(例如基于ARM7芯片的平台的HAL)实现的。因为固件的主体是用受管代码编写的,所以它们也不依赖于它运行的硬件的类型。通过控制设备固件的主体,并将HAL和CLR包括到该体系结构中,设备制造商可重复使用现有软件,而无需进行任何改变,这对于用作辅助显示器的各种类型的设备之间提供高质量的、一致的体验而言是很重要的。
应用程序402可以是与扩展的硬件493协同工作的自定义应用程序。但是,也能够通过用户体验来扩展如图4中所示的已经编写好的应用程序,从而来扩展用户体验。作为示例,考虑扩展的硬件包括接收到通知即发亮的简单指示器。接收通知的程序402可被扩展成在接收到通知时点亮指示器,并在通知被解除时将其熄灭。
某些诸如因为性能原因等不能用受管代码编写的应用程序可用诸如C或C++等本机代码编写,并且实际上扩展了CLR,如图4中CLR扩展476所示。尽管CLR可提供诸如读、写、打开、关闭、I/O控制等API供框架扩展474使用,但这对某些应用程序而言可能还不足够。例如,如果从应用程序层缓冲通过CLR复制到低层数字信号处理缓冲中,则可能不能足够快地实现高速媒体缓冲。为避免此类复制开销,CLR扩展476中的本机代码可填充单个缓冲集合。
通过使用主计算机系统上的API并下载代码到设备,还可扩展辅助外壳程序370。通常这样做的原因是向自定义的功能添加诸如图标、概述文本、上下文敏感的文本、和菜单项等引用。例如,还被配置成音频播放器的辅助显示设备还可允许记录其它数据,进行游戏,以及维护约会日历。可经由外壳扩展470来添加图标和菜单项,以允许能简便地运行这些不同的应用程序。还可经由对应的扩展474来扩展框架库374。
注意,如图5所示,在辅助显示屏有足够控件的一个实施例中,辅助显示设备的屏幕506的一个区域504被保留,以供设备制造商显示诸如公司徽标等某些信息。该区域可被用于显示对应于扩展的硬件的信息,例如,GPS接收器可在该区域中显示某些GPS数据或图标,当选择该图标时可迅速将GPS数据调到主屏幕。
回到图3,此外,还可在主计算机系统的客户辅助显示API集合304和/或310上扩展该平台。为此目的,为了在设备制造商提供的设备软件和主计算机系统之间进行通信提供一种使用客户API的简单且可扩展的机制。这赋予设备制造商提供需要使用该平台的特别硬件的特定特征的端对端实现的能力。API可扩展性允许设备制造商和独立软件供应商开发主计算机系统上的能与该设备上的自定义硬件交互的客户应用程序306和其它程序302而不要求专门的API。
更特别地,可扩展模型要求在客户应用程序302能向设备发送数据以前指定“端点”。通过让设备制造商扩展辅助设备固件中的代码来通告该设备上的端点,主计算机系统上的软件可标识具有特殊硬件能力的设备,并直接向该端点打开通信信道。客户API被设计成使客户应用程序和该设备之间所传输数据的类型是无关的,例如,可传递文本、二进制数据、媒体、对象、等等。从而该端对端平台提供了硬件的可扩展性而只需要设备制造商一方所花费较少的工作量。
对于增强型设备,本质上唯一的要求是建立端点之间的数据管道,并传入串行化的对象等。实现此要求的一个方法是使用称为.NET远程操作的技术,它允许主计算机系统上的代码对辅助设备上的类进行方法调用。因此,例如,主计算机系统上的应用程序可调用以GPS能力配置的辅助设备以在主计算机系统上获得GPS信息。
如上所述,内容可被下载到增强型设备上的高速缓存中,然后设备本身将根据需要处理该内容。注意,这允许断开的使用,并使系统上运行的多个应用程序提供内容,一般情况下同一时间有一个应用程序运行以访问辅助显示器上被高速缓存的内容。
如可从上文中看到,本发明提供具有可根据需要扩展以支持附加硬件的辅助显示平台。同时,该辅助显示平台令硬件设备的制造商能够使那些设备被作为特征完整的辅助显示器使用,只需少量或甚至无需改变固件来扩展,从而制造商能够轻易添加所需的功能,以及创新并将其设备与其它制造商的设备区别开来。从而本发明提供当代计算中所需的许多好处和优点。
尽管本发明容许各种修改和替换结构,但是在附图中示出了某些示例性实施例,并且以上已经对它们进行了详细的描述。但是,应当理解,本文无意将本发明限制于所揭示的一种或多种具体形式,相反,本发明将覆盖所有落入本发明的精神和范围的修改、替换构造和等效技术方案。