33 - Human Interface Infrastructure Overview
本章節主要用于介紹Human Interface Infrastructure(HII)架構介紹,描述如何通過 HII 來管理用戶的輸入,以及描述在 UEFI spec 中涉及 HII 相關的 Protocol、function 和類型定義。
33.1 Goals
簡單來說,就是要生成一個簡單方便地可視化界面,讓使用者可以在不同階段來進行配置 FW.
33.2 Design Discussion
Human Interface Infrastructure 架構如下:
Driver 以及 application 會將 HII source 安裝到 Hii Database,而 HII Database 就是一個數據中心,中間保存的就是(字體、字符、圖片以及表單).Form Browser 通過 Display Device 來呈現界面用于給客戶瀏覽數據,然后用戶通過 HID device (Human Interface Device 這類設備通常包括鍵盤、鼠標、游戲手柄、觸摸板等用于人與計算機進行交互的輸入或輸出設備。)來輸入數據給 Form Browser.在交互完成后,用戶提交了修改給 Form Browser,然后 Form browser 通過 Variable Store 來修改保存到 NVRAM 中。
33.2.1 Drivers And Applications
以 package 列表形式的使用者接口是由 driver 和 application 動態創建的,接口可以預編譯或者作為 resource 包含在 driver 和 application 中。若是以資源的形式包在 driver 或者 application 中,則可以對資源進行修改,而不需要重新編譯,比如若是在 UNI 文件中定義,需要修改的話就需要重新編譯,若是動態 C 里面去修改的話就不需要重新編譯,比如硬件信息。
用戶數據是以文本的格式進行保存,然后 resource 會被編譯成一個 RES 文件然后鏈接到主程序。(PE/COFF resource 區域----PE/COFF(Portable Executable/Common Object File Format)是微軟公司定義的一種文件格式,用于可執行文件、動態鏈接庫(DLLs)、資源文件等在Windows操作系統中的存儲。)
RES 文件中的資源數據在 PE/COFF 文件中通常位于 .rsrc 節,并以層次化的目錄結構進行組織。
33.2.1.10 O/S-Present Forms Browser/Processor
在某些時候,OS 也是需要訪問 HIIDATABASE 表單數據,所以定義了一個 O/S agent 用于封裝數據并通過標準方式導出。
數據一般是保存 NVRAM 中,可以通過 HII 接口導出 HIIDatabase 數據。
33.2.7 Fonts
UEFI描述了一種標準字體,這是所有支持位圖輸出設備上文本顯示的系統所必需的。標準字體(system 字體)是一種固定間距字體,其中所有字符要么窄(8x19 像素),要么寬(16x19 像素)。UEFI還允許顯示其他字體,包括固定間距和可變間距。平臺對這些字體的支持是可選的。UEFI字體描述使用簡化字體包(簡化字體包)或正常字體。
33.2.7.1 Font Attributes
字體屬性有三種:
- Font Name:也就是我們常見的字體樣式,比如Arial、Times New Roman 等,標準字體也就是"sysdefault"
- Font Size:字體大小描述的就是單個字符單元(Cell)的最大高度,標準的都是 19.
- Font Style:字體樣式描述了對字體基本視覺樣式的標準視覺修改。支持的字體樣式包括:粗體,斜體,下劃線,雙下劃線,壓花,輪廓和陰影。一些字體樣式也可以由字體呈現引擎模擬。標準字體總是沒有附加的字體樣式。
33.2.7.2 Limiting Glyphs
主要顯示字符的因素是存儲空間的問題,在進 OS 之前,若是需要顯示所有沒有預料到的字符串,則需要保存所有在 Unicode 字體的字形數據。
所以我們可以提前收集需要顯示的字符串,從而減小需要保存的字形數據。
UEFI 默認支持基本的拉丁字符,若是 UEFI application 或者 Driver 需要顯示其他的字符,他們可以添加新的字符數據到現有的 HII Database.在現有的字符字形定義在已經存在的 Unicode 字符庫中沒有則添加。
33.2.7.3 Fixed Font Description
字體可以在寬度、樣式、基線、高度、大小等方面有所不同。固定字體定義包括空白和字形數據,以及字形數據的位置。這可以防止在運行時調整不同固定字體的字符以美觀地配合在一起。為了向UEFI驅動程序提供如何設計固定字體字符的基本描述,下面定義了行業標準字體術語:
baseline-從單元格的左上角到上限(A, B, C,…)的距離
cap_height :從大寫字母底部到大寫字母頂部的距離
x_height :從基線到小寫字母‘ x ’頂部的距離-
descender:從基線(g, j, p, q, y)下方延伸的距離-
ascender:從小寫字母‘ x ’頂部到高小寫字母(b, d, f, h, k, l)的距離
同時也支持雙字節存儲的,但是就不像 8*16 那樣一行一行存儲,而是先存儲左邊半邊,然后再存儲右邊半邊,