[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