基于Microwindows的嵌入式GUI設計
microwindows 的api
microwindows 采用分層體系結構設計,提供了豐富的api 支持,支持win32/ wince gdi 和nano-x兩種api 集。
microwindows 體系結構
microwindows 的體系結構由下至上,分別為具體硬件、驅動(dòng)層、圖形引擎層和api 層,如圖1 所示。用戶(hù)可以根據具體應用需求對不同層的代碼進(jìn)行修改或重寫(xiě)。
(1) 設備驅動(dòng)程序。
鍵盤(pán)驅動(dòng)程序主要有兩個(gè),分別是kbd _ tty. c 和kbd _ bios. c 。前者主要用于linux 和el ks 系統,而后者主要用于msdos 實(shí)模式。
鼠標驅動(dòng)程序主要有三個(gè):mou_gpm. c ,用于linux 的一個(gè)gpm 驅動(dòng); mou _ ser. c ,用于linux 和el ks 系統;mou_gpm. c ,主要用于msdos 系統。
屏幕驅動(dòng)程序有面向16 位el ks、msdos 實(shí)模式的v ga 驅動(dòng)( scr_bios. c、vgaplan4. c、memp14. c 、scr_here. c)和面向linux 的framebuffer ( scr_fb. c、fb. c 等) 兩種。這部分驅動(dòng)程序最復雜,在設計時(shí)可以參考scr_fb. c 來(lái)設計自己的屏幕驅動(dòng)程序。
(2) 設備獨立的圖形引擎。
microwindows 的圖形引擎是設備獨立的。引擎的每一例程都接受screendevice 結構的指針( psd) 來(lái)作為第一個(gè)參數。psd 說(shuō)明了底層的顯示細節,如屏幕大小的x 、y 值,屏幕顏色ncolors ,以及諸如打開(kāi)、關(guān)閉、畫(huà)線(xiàn)等函數指針。
microwindows 的api
microwindows 提供兩個(gè)應用程序接口:一是win32 接口,這種api 不是很成熟;二是nano-x ,這種api 比較好,結構上清晰,功能上也完全。
在microwindows 上的api 接口函數的基本模型都是用來(lái)初始化屏幕、鍵盤(pán)和鼠標的驅動(dòng)程序,然后一直等待select () 消息循環(huán)。當事件發(fā)生時(shí),這條信息將送到用戶(hù)程序。如果是用戶(hù)請求圖形操作,那參數將被編碼后送到適當的gdxxx 核心程序上。與原始圖形操作相對的窗口概念是被該層所控制的,也就是說(shuō)該層的api 函數定義了窗口及其對應系統的概念。這樣,系統坐標就能被轉成屏幕上顯示的坐標,并且可將數據傳給gdxxx 核心程序,由它進(jìn)行實(shí)際操作。該層亦定義圖形/ 顯示文件,并且會(huì )將此信息(包括裁減信息) 送到核心程序上。
microwindows 的api 支持大多數圖形繪制、裁減、窗口工具條繪制及拖拉窗口等程序。nano-x 最先是由davin bell 為minix 設計的,它被設計為c/ s 模式,一般是通過(guò)unix domain socket 在客戶(hù)與服務(wù)器端進(jìn)行通信的,但沒(méi)有實(shí)現窗口管理,所以對窗口的處理需要使用系統提供的一個(gè)插件集,或者完全由應用程序員自已開(kāi)發(fā)。另外,nano-x 不是消息驅動(dòng)的,而是基于x 協(xié)議模式。在這種模式下,驅動(dòng)整個(gè)系統運行的可以說(shuō)是請求與事件。
請求就是客戶(hù)端為了完成某一動(dòng)作而對服務(wù)器端所發(fā)出的申請,并且為每一個(gè)請求都定義了一個(gè)標識數。每個(gè)請求的結構都是不同的,但類(lèi)似如下結構:
linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)
評論