基于Microwindows的嵌入式GUI设计
microwindows 的api
microwindows 采用分层体系结构设计,提供了丰富的api 支持,支持win32/ wince gdi 和nano-x两种api 集。
microwindows 体系结构
microwindows 的体系结构由下至上,分别为具体硬件、驱动层、图形引擎层和api 层,如图1 所示。用户可以根据具体应用需求对不同层的代码进行修改或重写。
(1) 设备驱动程序。
键盘驱动程序主要有两个,分别是kbd _ tty. c 和kbd _ bios. c 。前者主要用于linux 和el ks 系统,而后者主要用于msdos 实模式。
鼠标驱动程序主要有三个:mou_gpm. c ,用于linux 的一个gpm 驱动; mou _ ser. c ,用于linux 和el ks 系统;mou_gpm. c ,主要用于msdos 系统。
屏幕驱动程序有面向16 位el ks、msdos 实模式的v ga 驱动( scr_bios. c、vgaplan4. c、memp14. c 、scr_here. c)和面向linux 的framebuffer ( scr_fb. c、fb. c 等) 两种。这部分驱动程序最复杂,在设计时可以参考scr_fb. c 来设计自己的屏幕驱动程序。
(2) 设备独立的图形引擎。
microwindows 的图形引擎是设备独立的。引擎的每一例程都接受screendevice 结构的指针( psd) 来作为第一个参数。psd 说明了底层的显示细节,如屏幕大小的x 、y 值,屏幕颜色ncolors ,以及诸如打开、关闭、画线等函数指针。
microwindows 的api
microwindows 提供两个应用程序接口:一是win32 接口,这种api 不是很成熟;二是nano-x ,这种api 比较好,结构上清晰,功能上也完全。
在microwindows 上的api 接口函数的基本模型都是用来初始化屏幕、键盘和鼠标的驱动程序,然后一直等待select () 消息循环。当事件发生时,这条信息将送到用户程序。如果是用户请求图形操作,那参数将被编码后送到适当的gdxxx 核心程序上。与原始图形操作相对的窗口概念是被该层所控制的,也就是说该层的api 函数定义了窗口及其对应系统的概念。这样,系统坐标就能被转成屏幕上显示的坐标,并且可将数据传给gdxxx 核心程序,由它进行实际操作。该层亦定义图形/ 显示文件,并且会将此信息(包括裁减信息) 送到核心程序上。
microwindows 的api 支持大多数图形绘制、裁减、窗口工具条绘制及拖拉窗口等程序。nano-x 最先是由davin bell 为minix 设计的,它被设计为c/ s 模式,一般是通过unix domain socket 在客户与服务器端进行通信的,但没有实现窗口管理,所以对窗口的处理需要使用系统提供的一个插件集,或者完全由应用程序员自已开发。另外,nano-x 不是消息驱动的,而是基于x 协议模式。在这种模式下,驱动整个系统运行的可以说是请求与事件。
请求就是客户端为了完成某一动作而对服务器端所发出的申请,并且为每一个请求都定义了一个标识数。每个请求的结构都是不同的,但类似如下结构:
linux操作系统文章专题:linux操作系统详解(linux不再难懂)
评论