mirror of
https://github.com/u-boot/u-boot.git
synced 2024-11-23 12:14:32 +08:00
sandbox: put stdin into raw mode
This allows us to act like a serial device: we get tab chars and CTRL+C and respond appropriately. Signed-off-by: Mike Frysinger <vapier@gentoo.org> Tested-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
ec8f0b9024
commit
ab06a758b9
@ -21,6 +21,7 @@
|
||||
|
||||
#include <fcntl.h>
|
||||
#include <stdlib.h>
|
||||
#include <termios.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
@ -53,3 +54,36 @@ void os_exit(int exit_code)
|
||||
{
|
||||
exit(exit_code);
|
||||
}
|
||||
|
||||
/* Restore tty state when we exit */
|
||||
static struct termios orig_term;
|
||||
|
||||
static void os_fd_restore(void)
|
||||
{
|
||||
tcsetattr(0, TCSANOW, &orig_term);
|
||||
}
|
||||
|
||||
/* Put tty into raw mode so <tab> and <ctrl+c> work */
|
||||
void os_tty_raw(int fd)
|
||||
{
|
||||
static int setup = 0;
|
||||
struct termios term;
|
||||
|
||||
if (setup)
|
||||
return;
|
||||
setup = 1;
|
||||
|
||||
/* If not a tty, don't complain */
|
||||
if (tcgetattr(fd, &orig_term))
|
||||
return;
|
||||
|
||||
term = orig_term;
|
||||
term.c_iflag = IGNBRK | IGNPAR;
|
||||
term.c_oflag = OPOST | ONLCR;
|
||||
term.c_cflag = CS8 | CREAD | CLOCAL;
|
||||
term.c_lflag = 0;
|
||||
if (tcsetattr(fd, TCSANOW, &term))
|
||||
return;
|
||||
|
||||
atexit(os_fd_restore);
|
||||
}
|
||||
|
@ -30,6 +30,7 @@
|
||||
|
||||
int serial_init(void)
|
||||
{
|
||||
os_tty_raw(0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -71,3 +71,8 @@ int os_close(int fd);
|
||||
* @param exit_code exit code for U-Boot
|
||||
*/
|
||||
void os_exit(int exit_code);
|
||||
|
||||
/**
|
||||
* Put tty into raw mode to mimic serial console better
|
||||
*/
|
||||
void os_tty_raw(int fd);
|
||||
|
Loading…
Reference in New Issue
Block a user