libpayload: Add a timeout function for getchar and getch

Implement a timeout option for getchar() to return after so many
milliseconds.  Also implement the same thing for curses using
the halfdelay() function.

Signed-off-by: Jordan Crouse <jordan.crouse@amd.com>
Acked-by: Uwe Hermann <uwe@hermann-uwe.de>



git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3223 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
This commit is contained in:
Jordan Crouse
2008-04-08 23:21:33 +00:00
committed by Uwe Hermann
parent 4eb5089821
commit 672d0ae156
4 changed files with 48 additions and 4 deletions

View File

@ -39,6 +39,8 @@
#include "local.h"
static int _halfdelay = 0;
/* ============== Serial ==================== */
/* FIXME: Cook the serial correctly */
@ -241,8 +243,13 @@ static int curses_getchar(int delay)
return cook_serial(c);
}
if (!delay)
if (delay == 0)
break;
if (delay > 0) {
mdelay(100);
delay--;
}
}
c = inb(0x60);
@ -262,12 +269,33 @@ static int curses_getchar(int delay)
int wgetch(WINDOW *win)
{
return curses_getchar(win->_delay);
int delay = -1;
if (_halfdelay || win->_delay)
delay = win->_delay ? 0 : _halfdelay;
return curses_getchar(delay);
}
int nodelay(WINDOW *win, NCURSES_BOOL flag)
{
win->_delay = flag ? 0 : -1;
win->_delay = flag ? 1 : 0;
return 0;
}
int halfdelay(int tenths)
{
if (tenths > 255)
return ERR;
_halfdelay = tenths;
return 0;
}
int nocbreak(void)
{
/* Remove half delay timeout. */
_halfdelay = 0;
return 0;
}