EDN China > 技术文章 > 消费电子设计 > 便携设备 > 正文
? 2016博客大赛-不限主题,寻找电子导师,大奖升级??

结构化的平板电视OSD界面设计

来源:深圳电子技术网?? 2007年08月14日 ?? 收藏0

  需要说明的是,上述的物件并不能涵盖现在和将来所有的OSD中可能出现的内容,但却是OSD的基本的和主要的内容,通过对它们进行分类和进行统一的处理,可以帮我们完成通常意义上的OSD的80-90%的工作。

  使用基于对象的方法处理OSD UI

  传统的处理手法是将特定场景下的OSD物件逐一用代码“画”出来,在遇到特定的UI事件时,再利用一堆if else判断出特定场景和操作对象,并做相应的OSD处理。在OSD较简单的情况下,其不失为一个可行的方法。但在遇到OSD场景和模式较多的情况下,这个if else的结构会变得很大,而且更为重要的是极易出错以及维护成本提高。

  随着OSD越来越复杂以及代码工作量的不断提高,人们意识到我们需要花费太多时间在这些“表面文章”上,而真正重要的应用层和设备驱动层的开发时间会受到影响,进而影响新产品的开发进度。固件工程师也不愿不断重复编写同样代码来满足不断改变客户的特定OSD需要。

  笔者早期也曾遭遇同样的困扰,面对部门里工程师毫无效率地做着同样的事情,感觉到开发一个统一的OSD UI平

台的重要性。现在对于上述OSD UI进行的分析,可以让我们开发出独立于特定数字视频处理器平台和OSD发生机制的硬件环境的独立统一开发工具。

  事实上,平板显示芯片方案的重要提供者如Genesis、Pixelworks等为了加速其产品的开发和应用速度,已经提供了具有这样功能的基于Windows的固件开发工具。本文试图探讨这一类工具的运作原理,或许读者基于本文可以开发出自己所需要的工具,当然其应用具有更广泛的代表性。

  笔者在最近的液晶电视开发案例中使用了这样一个结构:

  typedef struct
{
byte mode;//UI场景适用的模式
byte lan; // UI语言
byte scene; // UI场景
byte last; // UI上个场景
byte next; // UI下个场景
byte sel; //UI 当前场景对物件的选择
byte sel_total; //UI当前场景中选择项的总数
byte *info; // UI的物件指针
byte pos_v; // 物件垂直方向位置
byte pos_h; // 物件水平方向的位置
byte col_f; // 物件的前景颜色
byte col_b; // 物件的背景颜色
byte att; // 物件的其它显示属性
ACT_Struct (*act)[]; // 该物件的响应动作表指针
byte *note; // 导航说明信息
}UI_Struct;

Pixelworks的GUI Builder OSD

  图4:Pixelworks的GUI Builder OSD

  UI开发工具界面。

  这样的结构是为了描述一个OSD物件的基本属性及规定其对于动作的相应表现。利用这样的结构将场景中的每个物件描述清楚,则一个特定UI场景的OSD内容就可以被确定,而同时被确定的还有其上一个场景、下一个场景及动作响应特性等所有UI特性。这样的信息构成一个数组,由一个统一的“解释平台”对其进行翻译和描述,从而将整个UI构造完成。

  这有点类似解释语言,而我们所需要做的就是编写这些“脚本”,对物件进行OSD“绘制”的工作由“解释”平台去调用外部的OSD发生器的驱动代码来完成。当需要改变OSD发生器或基于不同平面显示控制器平台时,只需要更新少量OSD部分驱动代码,从而实现UI系统“平台无关化”。

  我们需要构造相关物件的数据结构,以便“解释”平台识别物件类型并进行正确的绘制。例如下面的结构完成了一个语言选项(文字物件)的描述:

  void UI_ChangeLan()
{
UI_Lan=VAL_Lan;
ReDraw();
}
code byte *STR_LAN_CHN[]=
{
“中文”,
“英文”,
“法文”,
“西班牙文”,
};
code word TXT_LAN_CHN[]=
{
//文字物件的标志 对应的文字资源 对应的变量 具有的可选项目总数 当该物件被改变时的执行动作
RES_TXT,STR_LAN_CHN,VAL_LAN,sizeof(STR_LAN_CHN)/sizeof(byte *),UI_ChangeLan
};

  第一个数据RES_TXT向“解释”平台表明这个物件是文字,具有文字的数据结构。“解释”平台依据这一点,按照事先约定的结构读取后继数据,第二个数据表明其文字内容的来源是STR_LAN_CHN,第三个数据表明需要根据哪个变量来决定获取文字资源中第几个数据,而第四个数据表明,该物件具有多少个可供选择的文字内容,最后一个数据规定了当该物件发生改变时需要做什么。这样,“解释”平台获得了足够的信息去“绘制”这样一个语言选项,并可以在发生改变时去自动执行UI_ChangeLan()这个函数,帮助程序员去完成语言改变所需要进行的操作。


?? ?? ??


打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮

1.扫描左侧二维码
2.点击右上角的分享按钮
3.选择分享给朋友
?? ??

平板电视? OSD? 编程?

相关文章

我来评论
美国的游客
美国的游客 ??? (您将以游客身份发表,请登录 | 注册)
?
有问题请反馈