您的位置:首页 > 其它

初识Symbian 下的Front End Processor

2010-04-22 15:59 120 查看
收藏
一、概念:

在Symbian OS中输入法是由被称为前端处理器FEP(Front End Processors)的程序来实现的,它处于用户和应用程序之间的位置,作为一种动态链接库被系统调用,通过某种输入方式来输入文本。

二、Symbian OS中输入法的实现:

在实现上,FEP位于系统控制堆栈(CONTROL STACK),应用程序依次进入控制堆栈)的顶端。它会优先截获用户的输入(按键、手写动作、声音流),并对其进行处理。
对于系统来说.FEP是一个实现了FEP接口的多态动态链接库(DLL)。

对应项目管理文件中的定义如下:
TARGET XXX.fep
TARGETPATH \system~fep
TARGE'ITYPE dll

其中XXX为输入法名称。由TARGETI'YPE指定程序类型为动态链接库(DLL)。它截获用户按键、触摸屏动作或声音信号.对这些信息做适当处理后被传递给应用程序。

在Symbian OS中允许存在多个FEP,用户可以从列表中指定(激活)一个FEP使用。当应用程序启动时没有指定某种FEP时,系统会调入默认的FEP,在Nokia Series60 for SymbianOS平台上 被设置为默认的FEP。

当有多个FEP存在时,就要进行FEP的切换。FEP的切换主要依赖于系统文件COEMAIN.H 中定义的InstallFepl 函数来实现。利用系统文件COECNTRL.H 中定义的CCoeEnviCoeEnv来调用InstallFepL函数,将任意一个存在的FEP激活.并指定为系统将要使用的FEP。

图1给出了FEP在系统中的实现过程。当系统启动时,InstallFepL函数最近一次载人的FEP被系统指定为当前的FEP.应用于所有的应用程序。同时,FEP被放置在控制堆栈的顶层.用来监控用户的输入。当有用户的输入时,FEP就会判断应用程序所需要的输入状态:数字、中文、英文,或者不需要FEP支持。当用户进行某种操作(如按完成键、退出键、回主菜单、发送短信息等)结束输入时.FEP就会重新返回到监控状态,等待用户的下一次输入。

这样的实现方式有以下几个方面的优点:
(1)允许多个FEP并存。由InstallFepL函数最近一次载人的FEP一旦被系统指定为当前的FEP,就将服务丁所有的运行程序。与此同时,其它的FEP不会同它产生冲突或者资源争用等情况,从而保证了在多个FEP并存情况下系统的稳定。
(2)由于FEP在控制堆栈中具有较高优先级,可以优先截获用户的输入.对输入信息做适当处理后传递给应用程序。因
此.FEP不需要关心究竟哪个应用程序在运行, 而程序本身不需要知道系统是否存在FEP以及存在的FEP的具体情况.、
(3)便于FEP对用户的输入进行控制。FEP截获用户输入之后。结合具体的定义规则,在内部对信息进行判断和处理,整
个过程不受外部程序和系统的干扰。

三、FEP的开发模式:

FEP程序开发的出发点,就是基于FEP对用户输入(按键、触摸屏、声音)控制的封闭性,即FEP对截获的输入信息的判断和处理在程序内部,整个过程不受外部干扰。
首先,(如图2)FEP进入初始化阶段,程序初始化一系列重要的参数:iInputCpabilities、iInputMode、ilnsidelnline Editing
Transaction。iInputCapabilities用来标识输入法的输入状态,数字状态、中文状态、英文状态等;iInputMode用来设置系统当前使用的输入方式。ilnsidelnlineEditingTransaction用来判断FEP是否处于在线编辑(InsideInlineEditing)状态。所谓在线编辑(InsideInlineEditing),是指对于所操作的文本并没有在FEP的浮动窗口(Floating Window)中进行。而是相当于出现在FEP的
目标文本编辑器上,这样做的好处是在进行FEP设计的时候,关心的只是一个区域.因为无论是在线编辑还是最后的文本输出,目标位置都是文本编辑器。
获得当前的iInputMethod(输入方式)之后,FEP将进入按键分类处理阶段,程序等待用户的输入。FEP对于用户的输入采取三种不同的处理方式:(1)按“#”键.这是FEP切换各种输入方式的功能键,导致当前输入方式被更改;(2)输入退出键、完成键、菜单键等功能键,由于这些按键会关闭当前的文本编辑器,因此,当前所创建的FEP实例会随之被销毁;(3)有意义的按键,由于输入法规则定义不同,因此对于“有意义”的界定也不相同。一般来说.“ 键为标点候选按键,“1”至“9”键为输入按键。

当这些有意义的键被用户按下的时候.FEP进入在线编辑(InsidelnlineEditing)阶段.结合FEP的具体规则开始输入处理工作FEP会获取输入焦点,存输入过程中,浮动窗口(FloatingWindow)交替ijl现候选数据和提示信息。根据定义的输入规则.FEP会对所输入的数据进行O次、1次或多次的UpdateInline Editing调用之后.进行一次Commit Inline Editing或者Cancel 1nline Editing操作。在完成一次完整的在线编辑之后,FEP将输入的数据提交给文本编辑器。需要注意的是:进行在线更新(Update Inline Editing)时,更新的是整个新的编辑文本而不是当前新增的文本。

在线编辑(InsideInlineEditing)结束后,FEP会有选择性的释放焦点 等待用户的输入。

这种开发模式,有利于实现一个完备稳定的FEP程序 首先,阶段性的划分,符合Symbian操作系统定义的C++编程思想,便于功能模块的封装,有利于FEP程序的设计和开发工作。同时,这种划分也使得FEP的运行机制清晰明了;其次,阶段的独立性。初始化阶段、按键分类处理阶段、在线编辑阶段有各自的任务,互不干扰,如初始化阶段负责初始化几项重要参数和设置输入方式、按键分类处理阶段根据定义的分类进行具体的处理等;再次,阶段的连续性。各阶段有各自的任务,但FEP的整个运行过程是连续的.在初始化阶段进行一系列初始
化工作之后,由按键分类处理阶段分类操作.并通过在线编辑阶段完成最后的用户输入信息的处理工作:最后.阶段的完备性。FEP作为系统调用的DLL,需要消除程序的漏洞,完善FEP在各个情况下的处理机制。三个阶段的各自细致的处理任务以及相互之间良好的连续性,非常有利于程序的检错和纠错。进而保证了这种完备性的实施。

四、输入法设计中的关键技术:

4.1、 文件读写技术

4.2、 支持FEP的基本组件和基础类

4.3、 浮动窗口(Floating Window)

4.4、 内码转换问题
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: