簡介,特點優勢,技術特性,MiniGUI 的技術優勢,MiniGUI V3.0,運行模式,MiniGUI-Threads,MiniGUI-Processes,MiniGUI-Standalone,軟體架構,圖形抽象層,輸入抽象層,圖形設備接口,訊息處理模組,多視窗處理模組和控制項,外觀支持,
簡介
MiniGUI 是一款面向
嵌入式系統的高級視窗系統(Windowing System)和
圖形用戶界面(Graphical User Interface,GUI)支持系統,由魏永明先生於 1998 年底開始開發。2002 年,魏永明先生創建北京飛漫軟體技術有限公司,為 MiniGUI 提供商業技術支持,同時也繼續提供開源版本,飛漫軟體是中國地區為開源社區貢獻代碼最多的
軟體企業。最後一個採用 GPL 授權的 MiniGUI 版本是 1.6.10,從 MiniGUI 2.0.4 開始 MiniGUI 被重寫並使用商業授權。
歷經十餘年時間, MiniGUI 已經成為性能優良、功能豐富的跨作業系統嵌入式
圖形用戶界面支持系統,支持Linux/uClinux、eCos、
uC/OS-II、VxWorks、ThreadX、Nucleus 、pSOS、OSE 等作業系統和數十種 SoC晶片,已驗證的硬體平台包括 ARM-based SoCs、MIPS based SoCs、IA-based SoCs、PowerPC、M68K(DragonBall /ColdFire)、Intel x86 等等,廣泛套用於通訊、醫療、工控、電力、機頂盒、多媒體終端等領域。使用 MiniGUI 成功開發產品的企業有華為、中興通訊、大唐移動、長虹、TCL、聯想、邁瑞、南瑞、炬力、D2 等。這些用戶廣泛分部在中國大陸、台灣、新加坡、韓國、美國、德國、義大利、印度、以色列等國家和地區。
值得一提的是,在中國自主開發的 3G 通訊標準
TD-SCDMA中,約有 60% 獲得入網許可證的 TD-SCDMA 手機使用 MiniGUI 作為其嵌入式圖形平台,以支撐瀏覽器、可視電話等 3G 套用軟體的運行,其中有
聯想TD30t、海信 T68、中興通訊 U85 等大家熟悉的 TD 手機型號。
在 MiniGUI 的基礎上,飛漫軟體研發了 mDolphin (基於開源的瀏覽器核心 WebKit 的嵌入式瀏覽器,滿分通過 Acid3 的
基準測試)、mPeer (為使用 Java 技術的
嵌入式設備提供高效的 J2SE AWT/Swing 實現支持),並且開發了基於 Eclipse CDT 的可視化
集成開發環境,為開發人員提供所見即所得(WYSIWYG)的
界面設計環境。
2010年,飛漫軟體把最新版的 MiniGUI、mDolphin、mPeer、mStudio 等
系統整合在一起,推出了合璧作業系統(HybridOS)解決方案,是一整套專為嵌入式設備打造的
快速開發平台,集成了飛漫軟體10年的嵌入式行業研發經驗和眾多成熟的產品,使眾多的希望在嵌入式設備上做開發的中小型企業,擺脫了“不穩定的核心以及驅動程式”、“交叉編譯工具鏈、基礎函式館存在大量缺陷”、“不恰當的
開源軟體”、“高水平嵌入式開發工程師缺乏”等這些問題的困擾,從而能夠在一個運行穩定、功能強大的小巧系統核心基礎上,專注開發產品。合璧作業系統(HybridOS)採用新的商業授權模式,性價比頗高。
截止2010年9月,MiniGUI 的最新版本是3.0.10, MiniGUI 將作為合璧作業系統(HybridOS)的一個組成部分而不斷演進,推薦新老用戶使用合璧作業系統(Hybridos)作為嵌入式開發平台,必將節省大量的開發成本和時間。
(概述內容來源:)
特點優勢
MiniGUI 為嵌入式 Linux 系統提供了完整的圖形系統支持,是全球針對嵌入式 Linux僅有的兩個商用嵌入式GUI系統之一。MiniGUI為嵌入式Linux 系統提供了完整的
多進程支持;可以 MiniGUI-Processes、MiniGUI-Threads或者MiniGUI-Standalone 三種運行模式運行。
技術特性
硬體適配性:
可運行於各種含有 MMU(
記憶體管理單元)的 32 位處理器架構之上,如 ix386、ARM、MIPS、PowerPC 等。
支持低端顯示設備(比如單色 LCD)和高端顯示設備(8 位色及以上顯示設備)。通過 MiniGUI 的圖形抽象層及圖形引擎技術,還可以支持特殊的顯示設備,比如 YUV 顯示設備。對顯示設備解析度無最大和最小限制。
副屏支持。當系統中有多個視頻設備時,可將一個作為 MiniGUI 的主屏,實現完整的多視窗系統;而其它設備作為副屏,在其上通過 MiniGUI 的圖形接口來實現文字渲染、圖形顯示等功能。
可支持各種輸入設備,如 PC 鍵盤、PC 滑鼠、
小鍵盤(Keypad)、觸控螢幕、遙控器等等。
多種鍵盤布局的支持。MiniGUI 除支持常見的美式 PC 鍵盤布局之外,還支持法語、德語等西歐語種的鍵 盤布局。
資源消耗:
MiniGUI 的靜態存儲隨配置選項的不同而不同,最少需占用 1MB 靜態存儲空間。
MiniGUI 啟動後,初始占用 1MB 動態存儲空間。建議
系統記憶體為 8MB 以上。
作業系統適配性:
支持 Linux 作業系統(非 uClinux 作業系統),可以 MiniGUI-Processes、MiniGUI-Threads 或者 MiniGUI-Standalone 三種運行模式運行。
內建資源支持。可以將 MiniGUI 所使用的資源,諸如點陣圖、圖示和字型等編譯到函式館中,該特性可提高 MiniGUI 的初始化速度,並且非常適合無檔案系統支持的實時
嵌入式作業系統。
視窗子系統特性:
完備的多視窗機制和訊息傳遞機制。使用 MiniGUI-Threads 運行模式時,可在不同
執行緒中創建主視窗,並支持執行緒間的訊息傳遞;使用 MiniGUI-Processes 運行模式時,支持完整的
多進程視窗系統。
提供常用的控制項類,包括靜態文本框、按鈕、單行和多行編輯框、列表框、
組合框、選單按鈕、進度條、滑塊、
屬性頁、
工具列、樹型控制項、月曆控制項、旋鈕控制項、酷工具列、
格線控制項、動畫控制項等。
圖形子系統特性:
提供有增強 GDI 函式,包括光柵操作、複雜區域處理、橢圓、圓弧、多邊形以及區域填充等函式。在提供有兼容於 C99 規範的數學庫平台上,還提供有高級二維繪圖函式,可設定線寬、線型以及填充模式等。通過 MiniGUI 的圖形抽象層及圖形引擎技術,也可以讓上述高級 GDI 接口在低端顯示屏上實現。
各種流行圖像檔案的支持,包括 Windows BMP、GIF、JPEG、PNG等(JPEG 及 PNG的支持通過 libjpeg 及 libpng 函式館提供)。
Windows 的資源檔案支持,如點陣圖、圖示、游標等。
多
字元集和多字型支持,目前支持 ISO8859-1~ISO8859-15、GB2312、GBK、GB18030、BIG5、
EUC-JP、Shift-JIS、
EUC-KR、UNICODE(UTF-8、
UTF-16編碼)等字元集,支持等寬
點陣字型、變寬點陣字型、Qt/Embedded 使用的嵌入式字型 QPF、TrueType
矢量字型(對 TrueType 的支持通過 freetype 1.3 函式館提供)。
輸入法支持,用於提供各種可能的輸入形式;內建有適合 PC 平台的漢字(GB2312)輸入法支持,包括
內碼、
全拼、智慧型拼音、五筆及
自然碼等。
MiniGUI 的技術優勢
可伸縮性強。MiniGUI 豐富的功能和可配置特性,使得它既可運行於 CPU 主頻只有 60MHz 的低端產品中,亦可運行於高端
嵌入式設備中,並使用 MiniGUI 的高級控制項風格及皮膚界面等技術,創建華麗的用戶界面。MiniGUI 的跨作業系統特性,使得 MiniGUI 可運行在最簡單的
嵌入式作業系統之上,如 uC/OS-II,也可以運行在具有
現代作業系統特性的嵌入式作業系統之上,如 Linux,而且 MiniGUI 為嵌入式 Linux 系統提供了完整的多視窗圖形環境。這些特性,使得 MiniGUI 具有非常強的可伸縮性。可伸縮性是 MiniGUI 從設計之初就考慮且不斷完善而來的。這個特性使得 MiniGUI 可套用於簡單的行業終端,也可套用於複雜的
消費類電子產品。
輕型、占用資源少。MiniGUI 是一個定位於輕量級的嵌入式圖形庫,對系統資源的需求完全考慮到了
嵌入式設備的硬體情況,如 MiniGUI 庫所占的空間最小可以裁剪到 500K 左右,對目前的嵌入式設備來說,滿足這一條件是綽綽有餘的。此外,測試結果表明,MiniGUI 能夠在 CPU 主頻為 30 MHz,僅有 4M RAM 的系統上正常運行(使用 uClinux 作業系統),這是其它針對嵌入式產品的
圖形系統所無法達到的。
高性能、高可靠性。MiniGUI 良好的
體系結構及最佳化的圖形接口,可確保最快的圖形繪製速度。在設計之初,就充分考慮到了實時
嵌入式系統的特點,針對多視窗環境下的圖形繪製開展了大量的研究及開發,最佳化了 MiniGUI 的圖形繪製性能及資源占用。MiniGUI 在大量實際系統中的套用,尤其在
工業控制系統的套用,證明 MiniGUI 具有非常好的性能。從 1999 年 MiniGUI 的第一個版本發布以來,就有許多產品和項目使用 MiniGUI,MiniGUI 也不斷從這些產品或者項目當中獲得發展動力和新的技術需求,逐漸提高了自身的可靠性和健壯性。有關 MiniGUI 的最新成功案例,您可以訪問飛漫公司網站的典型案例部分。
可配置性。為滿足
嵌入式系統各種各樣的需求,必須要求 GUI 系統是可配置的。和 Linux
核心類似,MiniGUI 也實現了大量的編譯配置選項,通過這些選項可指定 MiniGUI 庫中包括哪些功能而同時不包括哪些功能。大體說來,可以在如下幾個方面對 MiniGUI 進行定製配置:
指定 MiniGUI 要運行的硬體平台。
指定 MiniGUI 要運行的作業系統。
指定生成基於
執行緒的 MiniGUI-Threads 運行模式還是基於進程的 MiniGUI-Processes 運行模式,或者只是最簡單的 MiniGUI-Standalone 運行模式。
指定需要支持的 GAL 引擎和 IAL 引擎,以及引擎相關選項。
指定需要支持的字型類型。
指定需要支持的控制項類。
指定控制項和視窗的整體風格,可以通過指定不同的渲染器完成。這些配置選項大大增強了 MiniGUI 的靈活性,對用戶來講,可針對具體的套用需求量體裁衣,開發最適合產品需求的套用軟體。
總之,將現代視窗和
圖形技術帶入到
嵌入式設備的MiniGUI,是一個非常適合於實時嵌入式設備的高效、可靠、可定製、小巧靈活的
圖形用戶界面支持系統,其主要優點可以總結如下:
可伸縮的系統架構,易於擴展;
功能豐富,可靈活剪裁;
小體積高性能間的最佳平衡;
廣泛的套用領域。
MiniGUI V3.0
在以前版本的基礎上新增了如下新特性:
主視窗雙緩衝區(Double Buffering Main Window) 當 MiniGUI 3.0 的主視窗具有雙緩衝區時,可以在自定義緩衝區中獲得整個主視窗的渲染結果。在此基礎上,可以利用高級 2D 圖形接口或者 3D 圖形接口獲得主視窗的各種特殊顯示效果,如推拉切換、翻頁切換、捲曲效果等等。
外觀渲染器(Look and Feel Renderer)支持。MiniGUI V3.0 改變了以往只支持三種控制項風格的方式,引入了渲染器(Look and Feel)這一全新的模式。渲染器是定義如何繪製視窗元素的渲染器,是在MiniGUI V2.0.X的基礎上繼續完善的。視窗元素包括框線、標題欄、標題欄按鈕、滾動條、選定項目、無效項目、高亮項目、突出項目、三維對象等;視窗元素的外觀屬性,包括視窗元素的顏色、尺寸、字型等信息;視窗元素渲染器是對視窗元素進行定製大小、顏色、圖形、字型,便於用戶設計個性化的外觀顯示風格。用戶可以指定某個主視窗或某個控制項使用特定的渲染器,也可定製非客戶區渲染器、視窗元素的尺寸、顏色、字型、圖示,同時增強資源管理功能,從而獲得更加華麗的圖形界面。MiniGUI實現了幾種默認整體顯示風格:Classic 、Flat、Fashion 和Skin。用戶可以在配置 MiniGUI 時指定相應的選項來將 MiniGUI 編譯成特定的一種顯示風格。
Classic: 這種風格的界面是標準的Window 95風格界面,也是最廣泛使用的風格了。
Fashion: 此種風格的界面,採用 MiniGUI 3.0 組件 mGPlus 提供的顏色漸變填充技術,因此,可獲得非常炫麗的界面效果;
Flat: 此種風格的視窗界面,線條清晰,簡潔,因此適用於單色或者灰度顯示屏。因為繪製簡單,因此該渲染器占用資源最少,運行速度最快;
Skin: 上面三種外觀渲染器基本上都是由代碼繪製出來的,具有小巧靈活的特點。但是,在嵌入式套用領域,設備的差別非常大。有些設備,已經具備了非常高的運算性能。在這種情況下,可以考慮使用皮膚外觀渲染器來美化界面。皮膚外觀渲染器需要一整套和界面相關的圖片,因此需要占用一些存儲資源。皮膚外觀渲染器的最大的特點是允許用戶定製界面,用戶可以使用自己設計的圖片替換系統原有的圖片,展現在用戶面前的就將是你自己設計的界面效果。
雙向文本(BIDI Text)的顯示與輸入。大家知道,除了大家熟知的從左向右書寫的文字(如英語、漢語等)之外,還有許多語言採用從右向左的書寫習慣,如阿拉伯文和希伯來文等。為了支持這些語言,MiniGUI 3.0中增加了對這兩種語言所屬
字元集的處理,並增加了阿拉伯和希伯來鍵盤布局的支持,從而實現了對雙向文本的輸入輸出處理。阿拉伯文以及希伯來文的顯示。
不規則視窗。MiniGUI V3.0實現了不規則視窗與控制項,可滿足用戶對視窗外觀各種不同的需求。不規則視窗通過一個Region數據結構來表示可見區域,或者通過8位MYBITMAP中的透明值形成不可見區域。
字型。在 MiniGUI 3.0 中,飛漫軟體發明了一種新的 UNICODE 字型檔格式,稱為“UPF”字型。這種字型的最大特點,是便於在
多進程環境下使用,從而極大地節約了記憶體的使用。同時,飛漫軟體增強了VBF字型格式,將VBF 字型升級到了3.0,擴大了其能適用的
字元集範圍,以便支持阿拉伯文等語言文字的顯示。
其他增強。MiniGUI 3.0實現了桌面的可定製。通過桌面的外部編程接口,用戶可以在桌面放置圖示並回響桌面事件,實現類似Windows桌面的界面效果。除此之外,MiniGUI 3.0 還增強了透明控制項的實現,使之效率更高,且不依賴於控制項的內部實現代碼。MiniGUI 3.0 還提供獨立的滾動條控制項,提供統一的虛擬幀緩衝區程式支持等等。另外最新的MiniGUI V3.0新增加了兩個新的組件:mGUtils和mGPlus,把字型、點陣圖、圖示、游標等資源進行統一管理,資源的內嵌和非內嵌方式並不影響模組的組成,由此抽象出系統資源管理模組。
運行模式
和 Linux 這樣的類 UNIX 作業系統相比,一般意義上的傳統
嵌入式作業系統具有一些特殊性。舉例而言,諸如 uClinux、uC/OS-II、eCos 等作業系統,通常運行在沒有 MMU(
記憶體管理單元,用於提供
虛擬記憶體支持)的 CPU 上;這時,往往就沒有進程的概念,而只有執行緒或者任務的概念,這樣,MiniGUI 的運行環境也就大相逕庭。因此,為了適合不同的作業系統環境,可將 MiniGUI 配置成三種不同的運行模式:
MiniGUI-Threads
運行在 MiniGUI-Threads 上的程式可以在不同的執行緒中建立多個視窗,但所有的視窗在一個進程或者
地址空間中運行。這種運行模式主要用來支持大多數傳統意義上的
嵌入式作業系統,比如 VxWorks 、ThreadX、Nucleus、OSE、pSOS、uC/OS-II、eCos等等。當然,在 Linux 和 uClinux 上,MiniGUI 也能以 MiniGUI-Threads 的模式運行。
MiniGUI-Processes
和 MiniGUI-Threads相反,MiniGUI-Processes 上的每個程式是單獨的進程,每個進程也可以建立多個視窗,並且實現了
多進程視窗系統。MiniGUI-Processes 適合於具有完整 UNIX 特性的
嵌入式作業系統,比如嵌入式 Linux。該運行模式在 MiniGUI V2.0 中提供。
MiniGUI-Standalone
這種運行模式下,MiniGUI 可以以獨立任務的方式運行,既不需要多執行緒也不需要
多進程的支持,這種運行模式適合功能單一的套用場合。比如在一些使用 uClinux 的
嵌入式產品中,因為各種原因而缺少
執行緒支持,這時,就可以使用 MiniGUI-Standalone 來開發套用軟體。
一般而言,MiniGUI-Standalone 模式的適應面最廣,可以支持幾乎所有的作業系統(目前只用來提供對 Linux/uClinux 作業系統的支持);MiniGUI-Threads 模式的適用面次之,可運行在支持多任務的實時
嵌入式作業系統,或者具備完整 UNIX 特性的普通作業系統;MiniGUI-Processes 模式的適用面較小,它僅適合於具備完整 UNIX 特性的嵌入式作業系統,比如 Linux。但不論採用哪種運行模式,MiniGUI 為上層套用軟體提供了最大程度上的一致性;只有少數幾個涉及初始化的接口在不同運行模式上有所不同。
軟體架構
MiniGUI 由如下幾個模組組成:MiniGUI
軟體架構圖
圖形抽象層
(Graphics Abstraction Layer,GAL)。圖形抽象層將來自不同作業系統或設備的圖形接口進行抽象,為 MiniGUI 上層提供統一的圖形接口。在圖形抽象層內,包含有針對 Linux FB 設備、eCos LCD 設備等的軟體組成部分。這些軟體組成部分通過調用底層設備的接口來實現具體的圖形抽象層操作,如打開設備、設定解析度及顯示模式、關閉設備等。將這些用於適配圖形抽象層接口的軟體組成部分稱為“引擎(engine)”,其概念和作業系統中的
設備驅動程式類似。
輸入抽象層
(Input Abstraction Layer,IAL)。和 GAL 類似,輸入抽象層將 MiniGUI 涉及的所有輸入設備,如鍵盤(keyboard)、小鍵盤(keypad)、滑鼠(mouse)、觸控螢幕(touch screen)等抽象了出來,為上層提供一致的接口。要支持不同的鍵盤、觸控螢幕或者
滑鼠接口,則通過為 IAL 編寫不同的輸入引擎實現。MiniGUI 通過 IAL 及其輸入引擎,提供對 Linux 控制台(鍵盤及滑鼠)、觸控螢幕、遙控器、小鍵盤等輸入設備的支持。
圖形設備接口
(Graphics Device Interfaces,GDI)。該模組基於圖形抽象層為上層應用程式提供圖形相關的接口,如繪製曲線、輸出文本、填充矩形等等。
圖形設備接口中含包含其他比較獨立的子模組,如字型
字元集(font and charset)支持、圖像(image)支持等。
訊息處理模組
(Messaging Module)。該模組在輸入抽象層基礎上,實現了 MiniGUI 的訊息處理機制,為上層提供了完備的訊息管理接口。眾所周知,幾乎所有的GUI 系統本質上都是
事件驅動的,系統自身的運行,以及GUI 應用程式的運行,都依賴於訊息處理模組。
多視窗處理模組和控制項
(Windowing Module)和(Control 或 Widget)。基於圖形設備接口和訊息處理模組,MiniGUI 實現了多視窗處理模組。該模組為上層應用程式提供了創建主視窗和控制項的基本接口,並負責維護控制項類。控制項類是用來實現控制項代碼重用的重要概念,利用控制項類(control class),可以創建屬於某個控制項類的多個控制項實例(instance),從而讓這些控制項實例使用同一個控制項類的代碼,這樣,就實現了類似 C++ 那樣的類和實例概念,從而可以最大程度上重複利用已有代碼,並提高軟體的可維護性。MiniGUI 的控制項模組實現了常見的 GUI 控制項,如靜態框、按鈕、編輯框、列表框、下拉框等等。
外觀支持
(Look and Feel)。這個模組是 MiniGUI V3.0 提供給上層應用程式的接口,可用來定製 MiniGUI 視窗、控制項的繪製。在 MiniGUI V3.0 之前的版本中,對主視窗和控制項的定製能力,還沒有被抽離出來形成獨立的模組,但仍然可以通過配置選項讓 MiniGUI 的主視窗、控制項具有三種顯示風格,分別是:類似 PC 的三維風格(PC3D )、平板風格(FLAT)、流行風格(FASHION)。在 MiniGUI 3.0 中,主視窗和控制項的外觀可完全由應用程式自行定製,在創建主視窗或者控制項時,指定外觀渲染器(renderer)的名稱,就可以讓主視窗或者控制項具有各自不同的外觀。
在 MiniGUI 核心(Core)接口之上,還為應用程式提供若干組件,這些組件分別為應用程式提供某些特殊的功能特性:
mGi是 MiniGUI 的輸入法組件,該組件目前提供了
軟鍵盤輸入法和
手寫輸入法框架,並提供給用戶管理輸入法的容器,通過這個容器,用戶還可以添加自定義的輸入法。
mGp 是針對 MiniGUI 應用程式的一個列印組件,該組件使用戶的 MiniGUI 程式具有列印輸出功能,可以將 MiniGUI 程式中的點陣圖或文字輸出到印表機。
mG3d 是一個為 MiniGUI 的應用程式提供 3D 接口的組件,通過這些接口,用戶可以給自己的應用程式添加三維圖像、文字渲染、
場景渲染等效果,從而可以具有三維效果的人機界面。
mGUtils 組件為用戶提供了一些常用的對話框模板,有了這些模板,用戶就不用為一些常用的功能編寫重複代碼了。本組件提供的功能模板有:普通檔案對話框、顏色設定對話框、字型設定對話框、信息設定對話框等。
mGPlus 組件是對 MiniGUI 圖形繪製接口的一個擴充和增強,主要提供對二維矢量圖形和高級圖形算法的支持,如路徑、漸變填充和顏色組合等。
mGEff 組件提供常規的頁面特效支持。