首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >等待按键GNU EFI

等待按键GNU EFI
EN

Stack Overflow用户
提问于 2019-09-20 17:57:58
回答 2查看 1.5K关注 0票数 0

如何等待GNU EFI中的密钥?

我打算等待一个密钥,然后继续执行。

我的代码:

代码语言:javascript
复制
#include <efi.h>
#include <efilib.h>
#include <stdlib.h>

EFI_STATUS efi_main (EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable) {
    EFI_STATUS Status;
    ST = SystemTable;
    Status = uefi_call_wrapper(ST->ConOut->ClearScreen, 1, ST->ConOut);
    if (EFI_ERROR(Status)){
        ...
        return Status;
    }
    ...
    Status = ST->ConIn->Reset(ST->ConIn,1!=1);
    if (EFI_ERROR(Status)){
        ...
        return Status;
    }
    // wait for key here
    return EFI_SUCCESS;
}
EN

回答 2

Stack Overflow用户

发布于 2019-09-21 08:49:38

您可以从UEFI的EDK2实现获得一些想法。

基本原则是,您需要设置一个等待按键的事件。

还请参见12.3节-- UEFI规范v2.8中的简单文本输入协议

票数 2
EN

Stack Overflow用户

发布于 2020-11-26 18:00:02

efi_main(...){...}外部添加EFI_INPUT_KEY键;

efi_main之后,

代码语言:javascript
复制
#if defined(_GNU_EFI)
InitializeLib(ImageHandle, SystemTable);  
#endif

添加UINTN KeyEvent = 0;

或者不管你的方式是什么。

代码语言:javascript
复制
Print(L"PRESS ANY KEY OR PLEASE PRESS ESC TO EXIT.%N\n");

uefi_call_wrapper(SystemTable->ConOut->OutputString, 1, SystemTable->ConOut, L"START KEY READ\n"); // YES WE COULD DO SIMPLY Print(...);

SystemTable->ConIn->Reset(SystemTable->ConIn, FALSE);

//NOW WE SHOULD READ SOME KEYS
//YOU CAN ADD ANY OTHER OPTION HERE, WHEN CAPSLOCK ON THAT WILL PRINT FIRST CHAR CAPITALIZED BUT NOT REST OF CHARACTERS SINCE WE RESET...
//IF YOU WANT MORE KEYS SIMPLY IN VISUAL STUDIO TYPE SCAN_ AND YOU WILL SEE OTHER KEYS

/*...OTHER...*/

while ((UINTN)Key.ScanCode != SCAN_ESC)
{
    SystemTable->BootServices->WaitForEvent(1, &SystemTable->ConIn->WaitForKey, &KeyEvent);
    SystemTable->ConIn->ReadKeyStroke(SystemTable->ConIn, &Key);
    SystemTable->ConIn->Reset(SystemTable->ConIn, FALSE);
    Print(L"%c", Key.UnicodeChar);
}

/*...OTHER...*/

SystemTable->RuntimeServices->ResetSystem(EfiResetShutdown, EFI_SUCCESS, 0, NULL);
return EFI_SUCCESS;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58033169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档