(请保留->发布地址: http://yiiyee.cn/blog/author/luobing/ )
突然想起一句诗:戍客望边色,思归多苦颜。也许是天气原因,也许是出差,心情总是不好。
上海的天空,灰蒙蒙的。一眼望去,都是淡墨色的乌云,不沉重,也透不过阳光。窗外的风很小,茂盛的树叶一动不动。除了传来的汽车声音,几乎要怀疑时间停止了一样。
没有阳光的天气,让人心情比较压抑。
UEFI下编写Option ROM,除了图形显示外(这是用户最直接能感受到的),最常用的就是键盘了。
我把上一篇博客中关于键盘的代码,以x64的方式再编译,拿到实际的环境中去测试。上次使用的ReadKeyStrokeEx来获取键盘输入,我测试的是一款AMI BIOS的环境,与联想开发的一款计算机。
很奇怪,程序不工作。
加上调试代码,提示SimpleTextInputEx的Protocol找不到。嗯,确实奇怪。
Spec中没有对这方面的说明。Console I/O protocol中提供了两种获取键盘的方式,除了SimpleTextInputEx外,还有SimpleTextInput可以使用。
我最关心的是键盘的处理,因此关注点放在了ReadKeyStrokeEx和ReadKeyStroke上。它们的区别,从函数说明上很容易看出来:
ReadKeyStroke所用的数据结构EFI_INPUT_Key是ReadKeyStrokeEx所用EFK_KET_DATA的子集。EFI_KEY_DATA中多了EFI_KEY_STATE的字段,这是用来标志Shift、Ctrl等键状态的。
不知道为什么实际环境中不支持ReadKeyStrokeEx,偷懒吗?
这次的代码比较简单,直接把ReadKeyStroke运行起来,重新编个函数封装一下。运行情况就不截图了,就是在上次的代码上改的,输出信息差不多。
百度云链接:https://pan.baidu.com/s/1gccSosw8_UAGTI5gZPnLCA
提取码:dx23
代码在 04 ReadKey下。
2,458 total views, 1 views today