• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2008 The Android Open Source Project
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *  * Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  *  * Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in
12  *    the documentation and/or other materials provided with the
13  *    distribution.
14  *
15  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
16  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
17  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
18  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
19  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
20  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
21  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
22  * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
23  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
24  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
25  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26  * SUCH DAMAGE.
27  */
28 
29 #pragma once
30 
31 /**
32  * @file termios.h
33  * @brief General terminal interfaces.
34  */
35 
36 #include <sys/cdefs.h>
37 #include <sys/ioctl.h>
38 #include <sys/types.h>
39 #include <linux/termios.h>
40 
41 __BEGIN_DECLS
42 
43 #if __ANDROID_API__ >= 28
44 // This file is implemented as static inlines before API level 28.
45 // Strictly these functions were introduced in API level 21, but there were bugs
46 // in cfmakeraw() and cfsetspeed() until 28.
47 
48 /**
49  * [cfgetispeed(3)](http://man7.org/linux/man-pages/man3/cfgetispeed.3.html)
50  * returns the terminal input baud rate.
51  */
52 speed_t cfgetispeed(const struct termios* _Nonnull __t) __INTRODUCED_IN(21);
53 
54 /**
55  * [cfgetospeed(3)](http://man7.org/linux/man-pages/man3/cfgetospeed.3.html)
56  * returns the terminal output baud rate.
57  */
58 speed_t cfgetospeed(const struct termios* _Nonnull __t) __INTRODUCED_IN(21);
59 
60 /**
61  * [cfmakeraw(3)](http://man7.org/linux/man-pages/man3/cfmakeraw.3.html)
62  * configures the terminal for "raw" mode.
63  */
64 void cfmakeraw(struct termios* _Nonnull __t) __INTRODUCED_IN(21);
65 
66 /**
67  * [cfsetspeed(3)](http://man7.org/linux/man-pages/man3/cfsetspeed.3.html)
68  * sets the terminal input and output baud rate.
69  *
70  * Returns 0 on success and returns -1 and sets `errno` on failure.
71  */
72 int cfsetspeed(struct termios* _Nonnull __t, speed_t __speed) __INTRODUCED_IN(21);
73 
74 /**
75  * [cfsetispeed(3)](http://man7.org/linux/man-pages/man3/cfsetispeed.3.html)
76  * sets the terminal input baud rate.
77  *
78  * Returns 0 on success and returns -1 and sets `errno` on failure.
79  */
80 int cfsetispeed(struct termios* _Nonnull _t, speed_t __speed) __INTRODUCED_IN(21);
81 
82 /**
83  * [cfsetospeed(3)](http://man7.org/linux/man-pages/man3/cfsetospeed.3.html)
84  * sets the terminal output baud rate.
85  *
86  * Returns 0 on success and returns -1 and sets `errno` on failure.
87  */
88 int cfsetospeed(struct termios* _Nonnull __t, speed_t __speed) __INTRODUCED_IN(21);
89 
90 /**
91  * [tcdrain(3)](http://man7.org/linux/man-pages/man3/tcdrain.3.html)
92  * waits until all output has been written.
93  *
94  * Returns 0 on success and returns -1 and sets `errno` on failure.
95  */
96 int tcdrain(int __fd) __INTRODUCED_IN(21);
97 
98 /**
99  * [tcflow(3)](http://man7.org/linux/man-pages/man3/tcflow.3.html)
100  * suspends (`TCOOFF`) or resumes (`TCOON`) output, or transmits a
101  * stop (`TCIOFF`) or start (`TCION`) to suspend or resume input.
102  *
103  * Returns 0 on success and returns -1 and sets `errno` on failure.
104  */
105 int tcflow(int __fd, int __action) __INTRODUCED_IN(21);
106 
107 /**
108  * [tcflush(3)](http://man7.org/linux/man-pages/man3/tcflush.3.html)
109  * discards pending input (`TCIFLUSH`), output (`TCOFLUSH`), or
110  * both (`TCIOFLUSH`). (In `<stdio.h>` terminology, this is a purge rather
111  * than a flush.)
112  *
113  * Returns 0 on success and returns -1 and sets `errno` on failure.
114  */
115 int tcflush(int __fd, int __queue) __INTRODUCED_IN(21);
116 
117 /**
118  * [tcgetattr(3)](http://man7.org/linux/man-pages/man3/tcgetattr.3.html)
119  * reads the configuration of the given terminal.
120  *
121  * Returns 0 on success and returns -1 and sets `errno` on failure.
122  */
123 int tcgetattr(int __fd, struct termios* _Nonnull __t) __INTRODUCED_IN(21);
124 
125 /**
126  * [tcgetsid(3)](http://man7.org/linux/man-pages/man3/tcgetsid.3.html)
127  * returns the session id corresponding to the given fd.
128  *
129  * Returns a non-negative session id on success and
130  * returns -1 and sets `errno` on failure.
131  */
132 pid_t tcgetsid(int __fd) __INTRODUCED_IN(21);
133 
134 /**
135  * [tcsendbreak(3)](http://man7.org/linux/man-pages/man3/tcsendbreak.3.html)
136  * sends a break.
137  *
138  * Returns 0 on success and returns -1 and sets `errno` on failure.
139  */
140 int tcsendbreak(int __fd, int __duration) __INTRODUCED_IN(21);
141 
142 /**
143  * [tcsetattr(3)](http://man7.org/linux/man-pages/man3/tcsetattr.3.html)
144  * writes the configuration of the given terminal.
145  *
146  * Returns 0 on success and returns -1 and sets `errno` on failure.
147  */
148 int tcsetattr(int __fd, int __optional_actions, const struct termios* _Nonnull __t) __INTRODUCED_IN(21);
149 
150 #endif
151 
152 __END_DECLS
153 
154 #include <android/legacy_termios_inlines.h>
155