<p>As Tong Ho brought up in 2012 (<a href="http://lists.ipxe.org/pipermail/ipxe-devel/2012-April/001381.html">http://lists.ipxe.org/pipermail/ipxe-devel/2012-April/001381.html</a>), the current code for reading keypresses in EFI appears to break the UEFI spec.  To summarize, CheckEvent may (should? must?) clear the checked event.  On my Asus Z77, this means that no key presses are actually being read by ReadKeyStroke (<a href="http://lists.ipxe.org/pipermail/ipxe-devel/2016-February/004676.html">http://lists.ipxe.org/pipermail/ipxe-devel/2016-February/004676.html</a>).</p>

<p>I've written a patch that works around this by running ReadKeyStroke in efi_iskey(), storing it in a global variable, and then working with that variable in efi_getchar().</p>

<p>This patch fixes my system to the point where it's reading rougly 60% of the keypresses instead of none at all, but I am still losing keypresses, and I have no idea why.</p>

<hr>

<h4>You can view, comment on, or merge this pull request online at:</h4>
<p>  <a href='https://github.com/ipxe/ipxe/pull/44'>https://github.com/ipxe/ipxe/pull/44</a></p>

<h4>Commit Summary</h4>
<ul>
  <li>[efi] Read key each time through iskey to avoid dropping keypresses</li>
</ul>

<h4>File Changes</h4>
<ul>
  <li>
    <strong>M</strong>
    <a href="https://github.com/ipxe/ipxe/pull/44/files#diff-0">src/interface/efi/efi_console.c</a>
    (28)
  </li>
</ul>

<h4>Patch Links:</h4>
<ul>
  <li><a href='https://github.com/ipxe/ipxe/pull/44.patch'>https://github.com/ipxe/ipxe/pull/44.patch</a></li>
  <li><a href='https://github.com/ipxe/ipxe/pull/44.diff'>https://github.com/ipxe/ipxe/pull/44.diff</a></li>
</ul>

<p style="font-size:small;-webkit-text-size-adjust:none;color:#666;">—<br>Reply to this email directly or <a href="https://github.com/ipxe/ipxe/pull/44">view it on GitHub</a>.<img alt="" height="1" src="https://github.com/notifications/beacon/AArTVJPFHN9-NfAO5Pn77c8aSbQAPQszks5pordMgaJpZM4HlPXt.gif" width="1" /></p>
<div itemscope itemtype="http://schema.org/EmailMessage">
<div itemprop="action" itemscope itemtype="http://schema.org/ViewAction">
  <link itemprop="url" href="https://github.com/ipxe/ipxe/pull/44"></link>
  <meta itemprop="name" content="View Pull Request"></meta>
</div>
<meta itemprop="description" content="View this Pull Request on GitHub"></meta>
</div>