[发明内容]
本发明的主要目的是提供一种基于Client/Server结构的机卡分离图形界面***,可解决机卡分离中卡端辅助设备缺少显示资源的问题,使卡端辅助设备在没有本地显示资源的情况下,依然具备图形界面的显示控制功能,使卡端辅助设备承载完整的应用业务成为可能。卡端辅助将作为应用业务的实现载体,方便地接入主机使其享受卡中的应用业务服务,扩展主机的功能,且成本低。因此,本发明将使数字多媒体产品的发展更加灵活且具备更长的产品生命周期。
本发明提供的基于Client/Server结构的机卡分离图形界面***可在支持双向传输的机卡分离接口标准的基础上实现,所采用的DVB-CI接口标准、UTI接口标准都支持双向数据传输;除此以外,也支持一般的双向协议接口,如以太网接口。通过这些接口协议来建立一个可双向传输的数据通道,传输图形界面***的用于显示控制操作的命令或数据。主机端作为服务器,负责完成来自卡端的显示控制命令的解释并执行相应动作,按要求返回数据和结果状态;卡端作为客户端,通过显示控制服务器程序连接主机端,通过图形界面操作的协议命令包,实现对主机端的显示设备的控制。
本发明提供的基于Client/Server结构的机卡分离图形界面***具备对主机显示资源的查询操作,包括:对主机显示设备属性的查询,显示属性的设置,其中属性包含有屏幕大小和所支持的颜色深度等信息。卡端在进行图形界面控制操作前都通过该操作,来完成对主机显示设备的属性信息收集和配置,以便更好地规划将要显示的元素的位置或色彩等属性,达到更好的显示效果。
本发明提供的基于Client/Server结构的机卡分离图形界面***具备调色板的配置操作,包括:获取***调色板,设置调色板。考虑到某些低端主机设备显示部件必须要有调色板支持,因此在获取了显示属性信息后,需要定制合适的调色板。由于这是所有图形界面显示的取色基础,因此在显示前进行配置操作。
本发明提供的基于Client/Server结构的机卡分离图形界面***具备画笔控制操作,包括:画笔的形状设置、颜色设置、当前画笔属性的获取。通过对画笔的配置可实现多种不同的线条模式,又由于画笔是基本绘图操作的基础,因此决定了基本形状中线条的样式和颜色。
本发明提供的基于Client/Server结构的机卡分离图形界面***具备基本的画图操作,包括:画点、画直线、画曲线、画矩形框及填充矩形、画椭圆形框及填充椭圆形、画任意多边形及填充任意多边形。这些基本绘图操作的集合体就组成了完整的界面窗口。
本发明提供的基于Client/server结构的机卡分离图形界面***具备文字显示操作,包括:字库管理、字体设置、当前字体属性获取、文字显示范围测量、文字显示。字库和字体的管理或配置可支持多样式的文字,丰富界面;而文字的显示和基本绘图操作就能组成完整的图形界面;文字的测量是为了能够实现自动调整图形界面适应屏幕大小或显示区域的功能。
本发明提供的基于Client/server结构的机卡分离图形界面***具备图形区域操作,包括:图形区域拷贝,图形区域粘贴。这些是对屏幕上图形界面的区域操作,主要目的是提高效率,因为有些重复显示的区域可通过拷贝粘贴的方式来实现,而不需要重新绘制图形。最典型的应用是下移屏幕显示,只需要更新最下面新一行内的区域,其他保持不变往上移动即可。
本发明提供的基于Client/server结构的机卡分离图形界面***具备图片文件的显示操作,包括:显示象素图片、显示文件图片。卡端可以在内存中画好图象,通过接口一次性显示到屏幕上;另外可以直接将文件传输给主机,并指定位置显示。
卡端通过该图形界面***来建立一个虚拟的显示设备,并形成一套控制虚拟显示设备的显示接口库,依据应用业务的需求来进行显示控制操作,使应用开发人员察觉不到其中的差别。
本发明提供的基于Client/server结构的机卡分离图形界面***可在支持双向传输的物理接口上实现,通过传输协议建立数据传输通道,完成该图形界面***的协议控制。
本发明提供的基于Client/server结构的机卡分离图形界面***的接口协议可以在双向传输协议的基础上实现。整个***实现的层次如附图1所示。其中“接口协议”可以是TCP/IP协议、ISO7816、DVB-CI、UTI等双向传输协议,图形界面操作的接口定义可完全独立于机卡之间的连接接口协议而存在,因此保证该***具备较好的可移植性。附图1中,主机泛指数据和/或进行多媒体处理且显示的设备,如电视接收机、机顶盒、多媒体服务器等设备;卡端泛指主机的外部辅助设备,如智能卡、SIM卡、以及外部数据存储/协处理设备。
本发明提供的基于Client/server结构的机卡分离图形界面***中,Client/server结构是灵活分配的,主机既可以是服务器端,也可以是客户端;而卡端辅助设备也既可以是服务器端,也可以是客户端。只要是负责提供设备显示的一端就成为服务器;通过接口使用对方显示设备完成图形界面的就是客户端。
总之,本发明提供的基于Client/server结构的机卡分离图形界面***使显示设备或资源不用固定存在或绑定在主机设备或外部辅助设备上,它既可以存在于主机端,也可以存在于卡端。通过图形界面***的使用来完成对远端显示设备或资源的使用和控制。
[具体实施方式]
●实例为基于UTI接口的数字电视机卡分离的数据广播业务应用。
主机端设备:
1 主机采用一个低端配置(如:2M Flash、8M Ram)的ST5518方案的数字电视接收机。
2 具备UTI接口硬件和驱动、协议支持。
3 具备基于Client/server结构的机卡分离图形界面***的Server端接口层。
4 有显示设备及控制接口。
主机仅负责控制显示设备,通过图形界面***的接口协议,解释卡端的图形界面操作命令,完成命令执行、以及状态结果返回等工作。
卡端设备:
1 端配置依据数据广播应用业务需求而定。
2 具备UTI接口硬件和驱动、协议支持。
3 具备基于Client/server结构的机卡分离图形界面***的客户端接口层。
4 完整的数据广播业务应用程序。
卡端是一个具备与主机连接接口的,但不具备图形显示输出接口的设备。它承载了完整的应用程序软体,通过图形界面***协议,通过与主机的连接接口,向主机端发送各种图形界面操作命令,间接控制主机端的显示设备,完成应用业务的图形界面呈现。如图2,在卡端可形成一个完整的虚拟显示设备接口,供应用程序体使用。
***实现的层次结构如附图2所示。卡端的程序开发和主机端相同,通过图2中的“虚拟显示设备控制接口”层对机卡分离图形界面***的接口协议进行封装,形成一个虚拟的显示设备控制API,使应用业务程序开发人员察觉不到其中的差别,有利于开发设计的统一和可移植性。其虚拟的显示设备的控制API的操作建立在主机和卡之间的连接接口之上,首先在主机和卡之间的物理连接接口上,双方使用统一的接口协议,在此基础上建立一个独立数据传输通道,通过传输各种图形显示控制命令,来实现对非本地的显示设备的控制。
整个***实施的基础是主机端和卡端的USB接口的物理连接,如附图3和附图4中的UTI接口模块部分,主机端和卡端都必须具备的UTI接口的硬件基础:USB接口,主机端配备USB HOST控制模块,而卡端则是作为USB设备存在;或者可以反过来,主机端作为USB设备存在,而卡端配备USB HOST控制模块。总之能使主机端和卡端能通过USB接口连接起来,完成附图2中最基本的硬件层的物理传输连接。
在物理连接基础上,在主机端和卡端需要完成基本的USB接口上的传输控制驱动程序,通过USB接口的传输通道,完成原始的数据交互接口,为UTI协议的实现准备基本的数据I/O通道。
在有了基本的数据交互接口的基础上,如附图2中所示,主机端和卡端都必须实现UTI协议层,完成UTI协议的数据交互,为应用层的通信提供传输通道。
主机端和卡端的应用层之间通过UTI协议,建立一个独立的数据传输通道,用来传输统一定义好的各种图形界面***的控制命令的数据包,如附图2中图形界面***的Server端和Client端。主机端和卡端的软体负责完成各种命令包的解析和命令动作执行,从而间接控制对方的显示设备来显示自己的应用图形界面。
附图3中的卡端会形成一个虚拟的显示资源或设备的控制API,用来仿照及模拟实际的本地显示设备的控制,从而屏蔽底层内部的差异,统一开发模式。
另外,基于UTI接口协议的基于Client/server结构的机卡分离图形界面***的协议接口定义列举如下:
1.显示属性设置接口
●获取显示设备属性
首先需要获取主机显示设备的基本显示属性信息,包含大小和所支持的颜色深度。
表1 显示属性信息请求
语法 | 比特数 | 类型 |
display_info_req(){display_info_req_tag} | 24 | uimsbf |
主机接收到模块的请求后,将返回当前***的显示属性的基本信息。
表2 显示属性信息数据
语法 | 比特数 | 类型 |
display_info_reply(){display_info_reply_taglengthweightheightdepthstyle} | 2416161616 | uimsbfuimsbfuimsbfuimsbfuimsbf |
Width:屏幕宽度
Height:屏幕高度
Depth:显示的颜色深度,定义如下:
表3 depth颜色深度定义
depth值 | 颜色深度定义 |
64 | 64位色 |
32 | 32位色 |
16 | 16位色 |
8 | 256色 |
其他 | 保留 |
●设置画笔颜色
设置画笔颜色、类型、宽度。模块的画图操作开始前,依靠该命令来设置画笔的颜色。
表4 设置画笔属性命令
语法 | 比特数 | 类型 |
set_pen_style_cmd(){set_pen_style_taglength_field()=5typewidthredgreenblue} | 2488888 | uimsbfuimsbfuimsbfuimsbfuimsbfuimsbf |
type是画笔的类型,它决定画笔的单个点单元的形状。
width是画笔的宽度,它决定了画笔的粗细,在实际的操作中表示方形笔的边长;圆形笔的直径。
其中颜色由red、green、blue组成RGB模式的颜色值。主机将为每一个模块独立维护当前的窗口颜色。
2.基本的图形操作接口
基本的图形操作包括:画点、画线、画空心矩形、曲线、多边形框和填充多边形框。可依据***的需要,进行扩展,添加新的图形操作。
●画点
表5 画点命令包
语法 | 比特数 | 类型 |
draw_point_cmd(){draw_point_taglengthxy} | 241616 | uimsbfuimsbfuimsbf |
只需要点的坐标(x,y)即可,以左上角为原点。
●画线
线的类型包括:直线、曲线、以及各种实心线、虚线等样式。
表6 画线命令包
语法 | 比特数 | 类型 |
draw_line_cmd(){draw_line_taglengthline_typeline_stylex1y1x2y2r} | 24881616161616 | uimsbfuimsbfuimsbfuimsbfuimsbfuimsbfuimsbfuimsbf |
line_type是线的类型
line_style是画线的模式。
线的起点坐标是(x1,y1),终点坐标是(x2,y2)。以屏幕左上角为原点。
r是画曲线时要使用到的曲线半径,以(x1,y1)和(x2,y2)两个点为直径坐标。
●画空心矩形框
表7 画空心矩形框命令
语法 | 比特数 | 类型 |
draw_rect_cmd(){draw_rect_taglengthline_stylexywidthheight} | 24816161616 | uimsbfuimsbfuimsbfuimsbfuimsbfuimsbf |
矩形框左上角的坐标(x,y),width和height是矩形的宽和高。
●填充矩形
表8 填充矩形框命令
语法 | 比特数 | 类型 |
fill_rect_cmd(){fill_rect_taglengthxywidthheight} | 2416161616 | uimsbfuimsbfuimsbfuimsbfuimsbf |
矩形框的起点定义为左上角的顶点,其起点坐标是(x,y)。
width和height是矩形的宽和高。
以屏幕左上角为原点。
●画空心椭圆形框
表9 画空心椭圆形框命令
语法 | 比特数 | 类型 |
draw_ellipse_cmd(){draw_ellipse_taglengthline_stylexyv_rh_r} | 24816161616 | uimsbfuimsbfuimsbfuimsbfuimsbfuimsbf |
(x,y)是中心点的坐标。
v_r是垂直的半径长度。
v_h是水平的半径长度。
●填充椭圆形
表10 填充椭圆形框命令
语法 | 比特数 | 类型 |
fill_ellipse_cmd(){fill_ellipse_taglengthxyv_rh_r} | 2416161616 | uimsbfuimsbfuimsbfuimsbfuimsbf |
(x,y)是中心点的坐标。
v_r是垂直的半径长度。
v_h是水平的半径长度。
●画多边形框
表11 画多边形框命令
语法 | 比特数 | 类型 |
draw_polygon_cmd(){draw_polygon_taglengthline_stylepoint_numberfor(i=0;i<point_number;i++){xy}} | 248161616 | uimsbfuimsbfuimsbfuimsbfuimsbf |
point_number是多边形的顶点个数。
(x,y)是多边形每一个顶点的坐标。
●填充多边形
表12 填充多边形命令
语法 | 比特数 | 类型 |
fill_polygon_cmd(){fill_polygon_taglengthpoint_numberfor(i=0;i<point_number;i++){xy}} | 24161616 | uimsbfuimsbfuimsbfuimsbf |
point_number是多边形的顶点个数。
(x,y)是多边形每一个顶点的坐标。
3.图片文件显示接口
●图片显示
卡端可通过直接传输图片文件,在主机端完成图片的显示。
表13 图片文件显示
语法 | 比特数 | 类型 |
show_image_file_cmd(){show_image_file_taglength_field()apdu_numberlast_apdu_numberif(apdu_number=0){file_name_lenfor(i=0;i<file_name_len;i++){file_name_text}}for(i=0;i<N;i++){file_data}} | 241616888 | uimsbfuimsbfuimsbfuimsbfuimsbfuimsbf |
apdu_number和last_apdu_number是分件数据分块号。
file_name_len是文件名的长度。
file_name_text是文件名字串。
文件名字串中的扩展名将作为该文件的类型标志。
file_data是文件数据。
4.字库及字体控制接口
该接口用于实现控制主机字库及字体的功能,涉及到:字库选择接口、字体属性设置接口和文字显示接口。
●字库设置
表14 设置主机当前字库命令
语法 | 比特数 | 类型 |
select_font_req(){select_font_req_taglength_field()font_name_lenfor(i=0;i<font_name_len;i++){font_name_text}} | 2488 | uimsbfuimsbfuimsbf |
font_name_len是字库的名字长度。
font_name_text是字库的名字字符。
字库以字库名称字串作为索引,当主机接收到该命令后,将变更当前使用字库。
●字体设置
用于对字体的具体属性或效果的设置。
表15 设置主机当前字体属性
语法 | 比特数 | 类型 |
set_font_type_req(){set_font_type_req_taglength_field()italicunderlinerotatereservedrotate_degreefont_sizefont_weightfont_color} | 241124881632 | uimsbfuimsbfuimsbfuimsbfuimsbfuimsbfuimsbfuimsbfuimsbf |
italic是字体是否使用斜体模式的开关标志。0:不使用;1:使用。
underline是下画线的模式的启用标志。0:不使用;1:使用。
rotate是字体是否旋转的标志,而rotate_degree是旋转的度数。
font_size是字体的大小,一般这里指的是字体高度,以象素为单位。
font_weight是字体的重度,表示字体的粗细,该值的具体效果将由HOST端主机决定。
font_color是字体的颜色设置。这里定义颜色,可以和画图的画笔颜色独立分开,互不影响。
●文字显示控制接口
模块通过上述接口设置好当前字库和字体属性后,即可向主机端发送显示文字的命令。
表16 显示文字命令
语法 | 比特数 | 类型 |
show_text_cmd(){show_text_taglength_field()xystyle | 24161616 | uimsbfuimsbfuimsbfuimsbf |
text_lenfor(i=0;i<text_len;i++){text_char}} | 328 | uimsbfuimsbf |
(x,y):是文字显示在屏幕上的坐标位置。
text_char:字符信息。
text_len是字符串长度。
style:显示风格。
主机端接收到该命令后,将文字显示到屏幕上。
●文字测量接口
模块通过上述接口设置可依据文字内容测量其在显示时占用的屏幕区域大小或范围。
表17 文字测量命令
语法 | 比特数 | 类型 |
measure_text_req(){measure_text_req_taglength_field()text_lenfor(i=0;i<text_len;i++){text_char}} | 24328 | uimsbfuimsbfuimsbf |
5.图形区域操作接口
在某些应用中,需要将屏幕的某一块区域拷贝,进行操作,再粘贴。例如典型的滚动操作。
●图形区域拷贝操作
表18 拷贝命令
语法 | 比特数 | 类型 |
copy_area_cmd(){copy_area_taglength_feld()xywidthheight} | 2416161616 | uimsbfuimsbfuimsbfuimsbfuimsbf |
(x,y)是要拷贝的区域的左上角顶点坐标。
width是要拷贝区域的宽度值。
height是要拷贝区域的高度值。
●图形区域粘贴操作
表19 粘贴命令
语法 | 比特数 | 类型 |
past_area_cmd(){ | | |
past_area_cmd_taglength_field()src_xdc_area_handlerdest_xdest_ydest_widthdest_height} | 243216161616 | uimsbfuimsbfuimsbfuimsbfuimsbfuimsbf |
src_xdc_area_handler是图象数据源的标志,是拷贝命令操作后返回的。
(dest_x,dest_y)是要粘贴到的目标区域的左上角顶点坐标。
dest_width是目标区域的宽度值。
dest_height是目标区域的高度值。
卡端的整个功能布局如图3所示。