您的位置 首页 设计

嵌入式GUI软件MicroWindows的体系结构和图形引擎特性与完成

嵌入式GUI软件MicroWindows的体系结构和图形引擎特性与实现-MicroWindows是一个开放源码的嵌入式GUI软件,目的是把图形视窗环境引入到运行Linux的小型设备和平台上。作为X Window系统的替代品,MicroWindows可以用更少的RAM和文件存储空间(100KB~600KB)提供相似的功能,允许设计得轻松加入各种显示设备、鼠标、触摸屏和键盘等;可移植性非常好,可用C语言实现;支持Intel 16位/32位CPU、MIPS R4000以及基于ARM内核的处理器芯片。

许多开发者在嵌入式规划中开始运用类似于桌面的操作体系。其间一个计划便是Linux操作体系。因为Linux在嵌入式体系上具有桌面电脑的悉数功用和特性,作为一种免费的开放源码,它答应修正和依据用户的要求进行定制。

MicroWindows是一个开放源码的嵌入式GUI软件,意图是把图形视窗环境引进到运转Linux的小型设备平和台上。作为X Window体系的替代品,MicroWindows能够用更少的RAM和文件存储空间(100KB~600KB)供给类似的功用,答应规划得轻松参加各种显现设备、鼠标、触摸屏和键盘等;可移植性非常好,可用C言语完结;支撑Intel 16位/32位CPU、MIPS R4000以及根据ARM内核的处理器芯片。

1 体系结构

1.1 分层结构规划

MicroWindows选用分层结构规划办法,在底层供给对屏幕、鼠标、触摸屏和键盘的驱动,在程序能拜访实践的硬件设备和其它用户定制设备。在中间层有一个可移植图形引擎,供给制作线程、区域填充、制作多边形、削减和运用色彩形式的办法。在顶层完结多种API以习惯不同的运用环境。现在,MicroWindows中运用两种盛行的图形编程接口:Microsoft Windows Win32/WinCE图形显现接口(GDI)和Xlib接口。前者运用于一切的Windows CE和Win32运用程序;后者就像Nano-X,运用于一切Linux X插件集的最底层,这样可让Linux图形程序员X接口开发图形运用程序。

1.2 驱动设备

device.h文件中界说设备驱动接口。MicroWindows已完结至少将一个屏幕、鼠标和键盘的驱动与体系相连。独立图形设备引擎的中间层能够使驱动设备直接完结对硬件的具体操作。

(1)屏幕驱动

MicroWindows可运转在支撑Framebuffer的32位Linux体系上,也可运用SVGALib[45]库来进行图形显现。此外,还被移植到16位的ELKS和实形式的MSDOS上,完结1、2、4、8、16和32位的像素支撑,以及完结VGA16平面形式支撑。它的图形引擎能够运转在任何支撑readpixel、writepixel、drawhorzline、drawvertline和setpalette的体系之上。假如底层驱动体系完结了Blitting,则上层可供给更多的增强功用。在底层函数的支撑之下,上层完结了对位图、字体、光标以及色彩的支撑。除了根据调色板的1、2、4和8位像素形式,也完结15、16和32位像素的真彩形式。

(2)鼠标驱动

MicroWindows有三个鼠标驱动程序。GPM驱动程序mou_gpm.c支撑Linux体系,串口鼠标驱动程序mou_ser.c支撑Linux和ELKS体系,int33驱动程序mou_dos.c支撑MSDOS体系。鼠标驱动程序的根本功用,是将鼠标中的数据编码,然后回来关于鼠标方位和按键的相对或肯定数据。

在Linux下,MicroWindows的主循环是select()声明,假如运转的体系不支撑select(),MicroWindows则供给Poll()进口。

(3)键盘驱动

MicroWindows供给两个键盘驱动程序:Kbd_tty.c适用于Linux和ELKS体系,键盘被当成文件描绘符来读写;Kbd_bios.c用于MSDOS真彩形式下,它是对PC BIOS进行读写来对按键进行操作。

1.3 MicroGUI――独立图形设备引擎

MicroWindows的MicroGUI供给了对屏幕、鼠标、键盘驱动程序和硬件之间的接口。用户运用程序不能直接调用中心图形引擎,可是可通过API函数来完结。中心程序在客户机/服务器模型下常驻在服务器上,运用内部的文本字体和位图文本形式。此外,中心程序运用的是指针,这样不用靠转变成句柄来完结更多的杂乱功用。

MicroWindows中的中心程序以GdXXX()开始,与之相连的是图形输出体系而不是窗口办理体系。此外,还操控一切的裁剪和色彩转化功用。以下是组成MicroWindows中心模块的文件:

dvdraw.c――中心图形程序,关于制作线段、圆、多边形及其填充,文本和位图文件的制作和色彩转化;

devclip.c――中心裁剪程序;

devrgn.c――动态分配程序;

devmouse.c――鼠标操控程序;

devkbd.c――中心键盘操控程序;

devpalX.c――连接到体系调色板。

1.4 运用程序接口

MicroWindows供给两个运用程序接口:MicroWindows API(源代码在win*.c中)和Nano_XAPI(源代码在nanox*.c中)

在MicroWidows上的API函数的根本模型都是用来初始化屏幕、键盘和鼠标的驱动程序,然后一向等候select()音讯循环。当事情发生时,这条信息将送到用户程序。假如是用户恳求图形操作,那参数将被编码后送到恰当的GdXXX中心程序上。与原始图形操作相对的窗口概念是被该层所操控的,也便是说该层的API函数界说了窗口及其对应体系的概念。这样,体系坐标就能被转成屏幕上显现的坐标,而且可将数据传给GdXXX中心程序,由其作实践操作。该层亦界说图形/显现文件,而且会将此信息包括削减信息送到中心程序上。

MicroWindows API支撑大多数图形制作、削减、窗口工具条制作以及迁延窗口等这些程序。Nano_x API以mini-X服务器根底,类似于X的一个API,沿袭X Window中的Xlib API,命名都是GrXXX()而不是X Windows中的X)。Nano-x API参加了根据网络的客户机/服务器功用,可是没有完结窗口办理,所以对窗口的处理需求运用体系供给的一个插件(widget)集,或许完全由运用程序员自已开发。

2 图形引擎特性与完结

图形引擎层的功用是完结图形在实虚屏之间的转化,以Gd.。.为开始,并将指针传给PSD作为它的首个参数。PSD参数将指定底层的显现形式,例如设备的笔直和水平尺度、硬件运用的色彩形式。别的,真实履行画图的程序在这一层中作为功用指针运用。一切屏幕坐标都是COORD类型。

色彩在图形引擎中被指定RGB CILORVAL形式,然后被转化成色彩指针,以PIXELVAL形式传给显现硬件,在32bpp(bit per pixel)真彩显现器环境下不用转化。

(1)区域

区域用来描绘屏幕上像素点的散布。在MicroWindows中,区域是用一些无交迭的矩形组成的数组来描绘的。现在完结区域有两种办法,开始是用一个静态数组CLIPRECTs来描绘杂乱区域。在这个数组中任一矩形中的点都被认为是存在这个区域中的,另一个全局变量clipcount用来给这个数组中的矩形计数。这个办法没有给区域办理供给进口点,所以整个数组的数据直接被送到担任裁剪功用的函数数口。新办规律能够创立任何数意图区域。用来描绘区域的数组CLIPREGION被界说成动态数据组,可动态分配它所包括矩形的数量,这样那些无交迭的矩形被寄存在“y-x”类型的行列中。在同一行列中,一切矩形的笔直高度y是相同的,这意味着在每个行列中只要矩形的宽度可变。实践程序是运用IntersecTIon、Union、SubtracTIon、Exclusive OR等办法来完结创立、删去一个区域或许是将几个区域或矩形兼并。以下是这种办法规划的几个函数。

嵌入式GUI软件MicroWindows的体系结构和图形引擎特性与完结

(2)裁剪

图形引擎中有一个由图形操作界说的由一些矩形组成的裁剪区,假如点被包括在这些削减区内就会被制作出来。有两个裁剪算法:devclipl.c针对静态矩形数组,devclipc2.c针对新的动态数组。GdSetClipRects是仅有删去区域并指定后来的图形操作的进口点。一切的绘图程序都要调用两个附加程序来决议是否画图。GdClipPoint获取屏幕坐标的(x,y)点,假如该点被制作出来的话,则回来TRUE。GdClipArea获取屏幕上方最左的或许下方最右的点并回以下值:CLIP_VISIBLE(指定区域在原区域内)、CLIP_INVISIBLE(指定区域不在原区域内)、CLIP_PARTIAL(指定区域部分在原区域内)。

(3)画线

MicroWindows运用GdPoint画点,GdLine画线。画线时运用当时的前景色(DgSetForeground指定)。有两种制作形式:MODE_SET和MODE_COR。

(4)矩形、圆和椭圆以及多边形

矩形、圆和椭圆的制作别离调用GdRect和GdEllipse来完结。MicroWindows中界说了一个包括(x,y)多边形极点的数组来表明多边形,调用GdLine函数画线,把这些点相连就能够完结画多边形。制作时运用前景色。

(5)区域填充

MicroWindows中运用GdFillRect函数填充矩形区域,填充运用前景色。填充圆和椭圆运用GdFillEillpse函数,填充多边形运用GdFillPoly函数。填充的完结是在屏幕驱动中不断地调用GrawHorzLine函数。

(6)字体和文本输出

MicroWindows支撑可变/不可变字体。文本输出时运用GdSetFont界说输出运用的字体,再调用GdText函数输出。

(7)色彩形式和调色板

MicroWindows支撑RGB色彩,色彩匹配,真彩和调色板显现,3D作用的显现。

(8)图片制作

MicroWindows支撑两种格局的图片。单色图片用IMAGEBITS结构(1表明前景色,0表明背景色)来界说,制作时调用GdBitmap程序。彩色图片能够别离界说为1、4、8 bpp的形式,用IMAGEHDR结构来表明。制作时调用GdDrawImage函数。

(9)映射

映射功用在实虚屏的转化中运用。GdBlit能够完结上层的API将虚拟内存存仿制到显现屏上,仿制时调用GdBlit函数。

3 MicroWindows API

MicroWindows API中的根本通讯机制是音讯机制。一个音讯机制中包括了message number和两个参数:wParam、lParam。Message被寄存在运用程序的message-queue中,GetMessage函数将其取出。WM_GHAR针对键盘输入,WM_LBUTTONDOWN针对鼠标键被按下。窗口创立时运用WMCREATE,删去时运用WM_DESTROY。DispatchMessage将音讯传到处理程序的窗口。

以下是处理音讯的有关函数:

SendMessage 将音讯传到窗口

PostMessage 将音讯传到音讯行列

PostQuitMessage 传递WM_QUIT音讯到音讯行列读时中止程序

GetMessage 得到音讯后完毕中止

TranslateMessage 将按键按下/弹起的音讯传到WMCAR

DispatchMessage 将音讯传到为它分配的窗口程序

3.2 窗口的创立和删去

RegisterClass 界说新的窗口类型并发动窗口程序

UnRegisterClass 删去窗口类型

CreateWindowsEx 按窗口类型创立一个窗口

DeatroyWindow 删去一个窗口

窗口创立后发生WM_CREATE音讯,删去发生WM_DESTROY音讯。

3.3 窗口的显现、躲藏和移动

ShowWindow函数指定窗口是否可见。MoveWindow改动窗口的方位和巨细。窗口方位改动时,发生WM_MOVE音讯;窗口巨细改动时,发生WM_SIZE音讯。

3.4 窗口的制作

窗口制作时发生WM_PAINT音讯。窗口的标题栏主动制作,设置特点运用SetWinowText,观察特点运用GetWindowText。

(1)实虚屏切换

窗口制作运用的坐标体系是屏幕上的肯定坐标系,MicroWindows API运用的是相对坐标系。GetClientRect和GetWindowRect函数各自回来虚屏和实屏的坐标值。

(2)Device Contexts

调用图形API之间要包括device context。它指定体系所运用的窗口和坐标系,一起还界说体系默许的前景色和背景色。

GetDC用来包括device context。在画标题栏还需调用GetWindowDC。GetDCEx界说子/兄弟窗口的裁剪操作。制作完毕时调用ReleaseDC开释DC。

(3)图形API

见网络弥补版(http://www.dpj.com.cn)

3.5 其它有用函数

WndSetDesktopWallpaper 设置桌面的背景图片

WndSetCursor 为窗口创立光标

WndRaiseWindow 拉伸窗口

WndLowerWindow 缩小窗口

WndGetTopWindow 回来最上层窗口的句柄

Sleep 睡觉

(1)设置窗口中心

WM_SETFOCUS和WMKILLFOCUS别离用于获取/删去中心。GetAcTIveWindow回来ancestor窗口,GetDesktopWINDOW回来当时桌面窗口的句柄。

(2)鼠标捕获

WM_MOUSEMOVE用来表明鼠标被移动。SetCapture获取悉数的鼠标移动信息,ReleaseCapture回来到程序,GetCaptrue回来到捕获区域。

(3)区域办理

SetRect 界说一个矩形结构

SetRectEmpty 界说一个空矩形

CopyRect 仿制一个矩形

IsRectEmpty 为空矩形时回来TRUE

InflateRect 扩大矩形

OffsetRect 移动矩形

PtInRect 判断点是否在矩形区内

4 Nano-X API

(1)Client/Server模型

Nano-X答应运用程序运用Client/Server网络协议或本地UNIX Domain Socket,可让几个运用程序运转在嵌入式设备或远端主机上,并连接到Server上显现出来。

(2)窗口的创立和删去

Nan0-X中运用GrNewWindow创立窗口。GrNewInputWindow界说窗口只答运用来输入。函数界说了窗口的鸿沟和色彩。

(3)窗口的显现、躲藏和移动

GrMapWindow用来显现窗口,GrUnmapWindow用来躲藏,GrRaiseWindow用来拉伸,GrLowerWindow用来缩小,GrMoveWindow用来移动,GrResizeWindow用来改动窗口巨细。

(4)窗口中的制作

①Graphics Context。GrNewGC用来分配graphics Context,删去时运用GrDestroyGC,GrCopyGC用来仿制。创立一个Graphics Context后,服务器回来一个Graphics Context的ID,用来作为API的参数。GC中不寄存裁剪区和体系坐标系。

②绘图API。

责任编辑:gt

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/sheji/94006.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部