[U-Boot] [PATCH] sandbox: put stdin into raw mode
Simon Glass
sjg at chromium.org
Wed Oct 26 18:17:12 CEST 2011
On Wed, Oct 26, 2011 at 3:21 AM, Mike Frysinger <vapier at gentoo.org> wrote:
> 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 at gentoo.org>
Tested-by: Simon Glass <sjg at chromium.org>
Thanks Mike
> ---
> arch/sandbox/cpu/os.c | 34 ++++++++++++++++++++++++++++++++++
> drivers/serial/sandbox.c | 1 +
> include/os.h | 5 +++++
> 3 files changed, 40 insertions(+), 0 deletions(-)
>
> diff --git a/arch/sandbox/cpu/os.c b/arch/sandbox/cpu/os.c
> index 6c175d4..f80faac 100644
> --- a/arch/sandbox/cpu/os.c
> +++ b/arch/sandbox/cpu/os.c
> @@ -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);
> +}
> diff --git a/drivers/serial/sandbox.c b/drivers/serial/sandbox.c
> index 814a0f9..1927c16 100644
> --- a/drivers/serial/sandbox.c
> +++ b/drivers/serial/sandbox.c
> @@ -30,6 +30,7 @@
>
> int serial_init(void)
> {
> + os_tty_raw(0);
> return 0;
> }
>
> diff --git a/include/os.h b/include/os.h
> index 3ea6d2d..d5df22f 100644
> --- a/include/os.h
> +++ b/include/os.h
> @@ -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);
> --
> 1.7.6.1
>
>
More information about the U-Boot
mailing list