1f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner/*
2f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner * Copyright (C) 2008 The Android Open Source Project
3f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner * All rights reserved.
4f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner *
5f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner * Redistribution and use in source and binary forms, with or without
6f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner * modification, are permitted provided that the following conditions
7f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner * are met:
8f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner *  * Redistributions of source code must retain the above copyright
9f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner *    notice, this list of conditions and the following disclaimer.
10f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner *  * Redistributions in binary form must reproduce the above copyright
11f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner *    notice, this list of conditions and the following disclaimer in
12f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner *    the documentation and/or other materials provided with the
13f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner *    distribution.
14f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner *
15f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
16f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
17f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
18f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
19f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
20f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
21f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
22f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
23f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
24f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
25f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner * SUCH DAMAGE.
27f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner */
28f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#ifndef _TERMIOS_H_
29f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define _TERMIOS_H_
30f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner
31f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#include <sys/cdefs.h>
32f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#include <sys/ioctl.h>
33f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#include <sys/types.h>
34f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#include <stdint.h>
35f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#include <linux/termios.h>
36f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner
37f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner__BEGIN_DECLS
38f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner
39f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner/* Redefine these to match their ioctl number */
40f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#undef  TCSANOW
41f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define TCSANOW    TCSETS
42f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner
43f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#undef  TCSADRAIN
44f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define TCSADRAIN  TCSETSW
45f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner
46f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#undef  TCSAFLUSH
47f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#define TCSAFLUSH  TCSETSF
48f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner
49f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turnerstatic __inline__ int tcgetattr(int fd, struct termios *s)
50f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner{
51f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner    return ioctl(fd, TCGETS, s);
52f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner}
53f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner
54f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turnerstatic __inline__ int tcsetattr(int fd, int __opt, const struct termios *s)
55f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner{
56f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner    return ioctl(fd, __opt, (void *)s);
57f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner}
58f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner
59f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turnerstatic __inline__ int tcflow(int fd, int action)
60f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner{
61f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner    return ioctl(fd, TCXONC, (void *)(intptr_t)action);
62f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner}
63f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner
64f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turnerstatic __inline__ int tcflush(int fd, int __queue)
65f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner{
66f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner    return ioctl(fd, TCFLSH, (void *)(intptr_t)__queue);
67f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner}
68f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner
69f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turnerstatic __inline__ pid_t tcgetsid(int fd)
70f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner{
71f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner    pid_t _pid;
72f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner    return ioctl(fd, TIOCGSID, &_pid) ? (pid_t)-1 : _pid;
73f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner}
74f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner
75f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turnerstatic __inline__ int tcsendbreak(int fd, int __duration)
76f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner{
77f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner    return ioctl(fd, TCSBRKP, (void *)(uintptr_t)__duration);
78f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner}
79f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner
80f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turnerstatic __inline__ speed_t cfgetospeed(const struct termios *s)
81f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner{
82f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner    return (speed_t)(s->c_cflag & CBAUD);
83f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner}
84f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner
85f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turnerstatic __inline__ int cfsetospeed(struct termios *s, speed_t  speed)
86f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner{
87f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner    s->c_cflag = (s->c_cflag & ~CBAUD) | (speed & CBAUD);
88f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner    return 0;
89f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner}
90f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner
91f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turnerstatic __inline__ speed_t cfgetispeed(const struct termios *s)
92f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner{
93f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner    return (speed_t)(s->c_cflag & CBAUD);
94f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner}
95f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner
96f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turnerstatic __inline__ int cfsetispeed(struct termios *s, speed_t  speed)
97f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner{
98f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner    s->c_cflag = (s->c_cflag & ~CBAUD) | (speed & CBAUD);
99f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner  return 0;
100f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner}
101f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner
102f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turnerstatic __inline__ void cfmakeraw(struct termios *s)
103f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner{
104f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner    s->c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP|INLCR|IGNCR|ICRNL|IXON);
105f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner    s->c_oflag &= ~OPOST;
106f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner    s->c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN);
107f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner    s->c_cflag &= ~(CSIZE|PARENB);
108f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner    s->c_cflag |= CS8;
109f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner}
110f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner
111f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner__END_DECLS
112f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner
113f13db29e2847a3760e403332ea3243915e0f4bf3David 'Digit' Turner#endif /* _TERMIOS_H_ */
114