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