=====================================================================
固件C字营·版权所有·欢迎转载
敬请关注微信公众号:“固件C字营”
敬请关注QQ群:1052307
敬请关注CSDN博客:Cstyle_0x007
=====================================================================
终端服务,所谓的Text 终端服务就UEFI提供给用户和机器打交道的接口,主要包括输入和输出两个部分。输入就是我们的键盘,输出当然就是显示器文本模式输出了,如果显示设备不支持文本模式,就需要模拟文本模式,不过还有一个用来作为debug和远程监视控制的 字符流设备(类似串口) 也是作为输出的一部分。
Simple Text Input Protocol:
如下是数据结构的定义,里面我们需要特别注意到的一个是EFI_EVENT WatiForKey,在SimpleTextInput.c中有参考的实例。
EFI_SIMPLE_TEXT_INPUT_PROTOCOL:Reset()
reset 输入设备,比如说键盘
EFI_SIMPLE_TEXT_INPUT_PROTOCOL:
ReadKeyStroke() /ReadKeyStrokeEx()
非阻塞的输入方式,执行完后立即返回,不会等待键盘的输入。输入的数据需要进行转换成EFI_INPUT_KEY 、EFI_KEY_DATA
EFI_SIMPLE_TEXT_INPUT_PROTOCOL:
WaitForKey/ WaitForKeyEx:
一旦EVENT被创建,他们必须要与EVENT notification function链接起来,一旦输入设备的缓冲中有我们需要的数据的时候,那么这两 种EVENT就会被UEFI BS服务 SignalEvent()设置为signaled状态。
EFI_SIMPLE_TEXT_INPUT_PROTOCOL:
SetState()
设置输入设备的状态,比如键盘的大小写指示灯,数字键盘锁定灯等等。
EFI_SIMPLE_TEXT_INPUT_PROTOCOL:
RegisterKeyNotify()
用来注册一个notification 函数,当按键被按下的时候,执行该函数。
EFI_SIMPLE_TEXT_INPUT_PROTOCOL:
UnregisterKeyNotify()
执行RegisterKeyNotify()相反的动作。
Simple Text Output Protocol:
如下是数据结构的定义,SimpleTextOutput.c有参考实例:
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL:Reset()
重设显示模式,和清除显示屏。
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL:
OutputString()
输出Unicode字符串到终端,同时需要检测设备显示模式的设置,输出的字符串是否合法,输出完成后,设置光标位置。
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL:
TestString()
检测输出的字符串是否合法。
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL:
QueryMode()
检测设备支持的输出模式,最少需要支持80x25的文字模式。可以侦测支持的所有的模式和当前的模式(RowsXColumns)。
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL:
SetMode()
设置输出的模式,可以提供给上层的服务来调用。
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL:
SetAttribute()
设置如何把字符显示在终端上,主要是指前景色和背景色等等。
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL:
ClearScreen()
清屏,清除所有的显示的字符,把屏幕设置成背景色,设置光标到原点(0.0)
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL:
SetCursorPosition()
设置光标的位置,或者说是下次输出的位置,注意不要超出,显示模式的行和列的范围。
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL:
EnableCursor()
设置是否要显示光标,但是不会影响上面提到的输出的光标定位。
Serial I/O Protocol:
如下是数据结构的定义,SerialIo.c有参考实例:
EFI_SERIAL_IO_PROTOCOL:Reset()
重置硬件。
EFI_SERIAL_IO_PROTOCOL:
SetAttributes()
设置串口的BaudRate, ReceiveFifoDepth, Timeout, Parity, DataBits, and StopBits等参数。
EFI_SERIAL_IO_PROTOCOL:
SetControl() and GetControl()
设置和读取串口设备的各种控制位。
EFI_SERIAL_IO_PROTOCOL:
Write() and Read()
往串口设备写数据,或者从其读数据。有提供超时机制,一旦超时就好反馈给上层EFI_TIMEOUT错误;有些串口还提供了FIFO,也可能你刚好运气不佳,在写入的时候刚好FIFO是满的,那么你就需要先刷新FIFO,然后根据FIFO的深度,做一个合理的比设置的延时时间稍长的时间,而不是简单的返回超时错误。
OK,Done!
转载请注明出处Cstyle.z.zhou@gmail.com//http://blog.csdn.net/CStyle_0x007
=====================================================================
固件C字营·版权所有·欢迎转载
敬请关注微信公众号:“固件C字营”
敬请关注QQ群:1052307
敬请关注CSDN博客:Cstyle_0x007
=====================================================================
@微信公众号《固件C字营》不定期更新状态,关注&订阅公众号不迷路。
完整PDF版整理中,可以在CSDN下载频道搜索”UEFI内核导读“下载样张......