[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Minios-devel] [PATCH v2 3/4] mini-os: Enable console to be configured as raw tty using termios



On Sun, Jun 18, 2017 at 11:21:21PM +0100, Simon Waterman wrote:
> Add minimal implementation of termios functions so that a console
> can be configured in raw mode if an application requires it.
> 
> Signed-off-by: Simon Waterman <watermansrdev@xxxxxxxxx>
> ---
>  lib/sys.c | 44 ++++++++++++++++++++++++++++++++++++++++++--
>  1 file changed, 42 insertions(+), 2 deletions(-)
> 
> diff --git a/lib/sys.c b/lib/sys.c
> index 1420722..6173471 100644
> --- a/lib/sys.c
> +++ b/lib/sys.c
> @@ -32,6 +32,7 @@
>  #include <xenbus.h>
>  #include <xenstore.h>
>  #include <poll.h>
> +#include <termios.h>
>  
>  #include <sys/types.h>
>  #include <sys/unistd.h>
> @@ -1436,6 +1437,47 @@ int nice(int inc)
>      return 0;
>  }
>  
> +/* Limited termios terminal settings support */
> +const struct termios default_termios = {0,           /* iflag */
> +                                        ONLCR,       /* oflag */
> +                                        0,           /* lflag */
> +                                        CREAD | CS8, /* cflag */
> +                                        {}};         /* cc */
> +
> +int tcsetattr(int fildes, int action, const struct termios *tios)
> +{
> +    if (files[fildes].type != FTYPE_CONSOLE) {
> +        errno = ENOTTY;
> +        return -1;
> +    }
> +
> +    if (tios->c_oflag & ONLCR)
> +        files[fildes].cons.dev->is_raw = false;
> +    else
> +        files[fildes].cons.dev->is_raw = true;
> +
> +    return 0;
> +}
> +
> +int tcgetattr(int fildes, struct termios *tios)
> +{
> +    if (files[fildes].type != FTYPE_CONSOLE) {
> +        errno = ENOTTY;
> +        return -1;
> +    }
> +
> +    memcpy(tios, &default_termios, sizeof(struct termios));
> +    
> +    if (files[fildes].cons.dev->is_raw)
> +        tios->c_oflag &= ~ONLCR;
> +
> +    return 0;
> +}
> +
> +void cfmakeraw(struct termios *termios_p)
> +{
> +    termios_p->c_oflag &= ~ONLCR;
> +}

I'm not sure if this function does the right thing. Linux's TERMIOS(3)
says cfmakeraw does only the following to c_oflag:

           termios_p->c_oflag &= ~OPOST;

What source (spec) did you reference?

_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/cgi-bin/mailman/listinfo/minios-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.