blob: 0fd5c9524e9a58e2ddd01fb4c5ed517bcececd2d [file] [log] [blame]
The Android Open Source Project1dc9e472009-03-03 19:28:35 -08001/*
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 */
Elliott Hughes462e90c2018-08-21 16:10:48 -070028
29#pragma once
30
31/**
32 * @file termios.h
33 * @brief General terminal interfaces.
34 */
The Android Open Source Project1dc9e472009-03-03 19:28:35 -080035
36#include <sys/cdefs.h>
37#include <sys/ioctl.h>
38#include <sys/types.h>
The Android Open Source Project1dc9e472009-03-03 19:28:35 -080039#include <linux/termios.h>
40
41__BEGIN_DECLS
42
Elliott Hughes5bc78c82016-11-16 11:35:43 -080043#if __ANDROID_API__ >= __ANDROID_API_L__
Elliott Hughes462e90c2018-08-21 16:10:48 -070044// This file is implemented as static inlines before API level 21.
45
46/**
47 * [cfgetispeed(3)](http://man7.org/linux/man-pages/man3/cfgetispeed.3.html)
48 * returns the terminal input baud rate.
49 */
Elliott Hughesff26a162017-08-17 22:34:21 +000050speed_t cfgetispeed(const struct termios* __t) __INTRODUCED_IN(21);
Elliott Hughes462e90c2018-08-21 16:10:48 -070051
52/**
53 * [cfgetospeed(3)](http://man7.org/linux/man-pages/man3/cfgetospeed.3.html)
54 * returns the terminal output baud rate.
55 */
Elliott Hughesff26a162017-08-17 22:34:21 +000056speed_t cfgetospeed(const struct termios* __t) __INTRODUCED_IN(21);
Elliott Hughes462e90c2018-08-21 16:10:48 -070057
58/**
59 * [cfmakeraw(3)](http://man7.org/linux/man-pages/man3/cfmakeraw.3.html)
60 * configures the terminal for "raw" mode.
61 */
Elliott Hughesff26a162017-08-17 22:34:21 +000062void cfmakeraw(struct termios* __t) __INTRODUCED_IN(21);
Elliott Hughes462e90c2018-08-21 16:10:48 -070063
64/**
65 * [cfsetspeed(3)](http://man7.org/linux/man-pages/man3/cfsetspeed.3.html)
66 * sets the terminal input and output baud rate.
67 *
68 * Returns 0 on success and returns -1 and sets `errno` on failure.
69 */
Elliott Hughesff26a162017-08-17 22:34:21 +000070int cfsetspeed(struct termios* __t, speed_t __speed) __INTRODUCED_IN(21);
Elliott Hughes462e90c2018-08-21 16:10:48 -070071
72/**
73 * [cfsetispeed(3)](http://man7.org/linux/man-pages/man3/cfsetispeed.3.html)
74 * sets the terminal input baud rate.
75 *
76 * Returns 0 on success and returns -1 and sets `errno` on failure.
77 */
Elliott Hughesff26a162017-08-17 22:34:21 +000078int cfsetispeed(struct termios* __t, speed_t __speed) __INTRODUCED_IN(21);
Elliott Hughes462e90c2018-08-21 16:10:48 -070079
80/**
81 * [cfsetospeed(3)](http://man7.org/linux/man-pages/man3/cfsetospeed.3.html)
82 * sets the terminal output baud rate.
83 *
84 * Returns 0 on success and returns -1 and sets `errno` on failure.
85 */
Elliott Hughesff26a162017-08-17 22:34:21 +000086int cfsetospeed(struct termios* __t, speed_t __speed) __INTRODUCED_IN(21);
Elliott Hughes462e90c2018-08-21 16:10:48 -070087
88/**
89 * [tcdrain(3)](http://man7.org/linux/man-pages/man3/tcdrain.3.html)
90 * waits until all output has been written.
91 *
92 * Returns 0 on success and returns -1 and sets `errno` on failure.
93 */
Elliott Hughesff26a162017-08-17 22:34:21 +000094int tcdrain(int __fd) __INTRODUCED_IN(21);
Elliott Hughes462e90c2018-08-21 16:10:48 -070095
96/**
97 * [tcflow(3)](http://man7.org/linux/man-pages/man3/tcflow.3.html)
98 * suspends (`TCOOFF`) or resumes (`TCOON`) output, or transmits a
99 * stop (`TCIOFF`) or start (`TCION`) to suspend or resume input.
100 *
101 * Returns 0 on success and returns -1 and sets `errno` on failure.
102 */
Elliott Hughesff26a162017-08-17 22:34:21 +0000103int tcflow(int __fd, int __action) __INTRODUCED_IN(21);
Elliott Hughes462e90c2018-08-21 16:10:48 -0700104
105/**
106 * [tcflush(3)](http://man7.org/linux/man-pages/man3/tcflush.3.html)
107 * discards pending input (`TCIFLUSH`), output (`TCOFLUSH`), or
108 * both (`TCIOFLUSH`). (In `<stdio.h>` terminology, this is a purge rather
109 * than a flush.)
110 *
111 * Returns 0 on success and returns -1 and sets `errno` on failure.
112 */
Elliott Hughesff26a162017-08-17 22:34:21 +0000113int tcflush(int __fd, int __queue) __INTRODUCED_IN(21);
Elliott Hughes462e90c2018-08-21 16:10:48 -0700114
115/**
116 * [tcgetattr(3)](http://man7.org/linux/man-pages/man3/tcgetattr.3.html)
117 * reads the configuration of the given terminal.
118 *
119 * Returns 0 on success and returns -1 and sets `errno` on failure.
120 */
Elliott Hughesff26a162017-08-17 22:34:21 +0000121int tcgetattr(int __fd, struct termios* __t) __INTRODUCED_IN(21);
Elliott Hughes462e90c2018-08-21 16:10:48 -0700122
123/**
124 * [tcgetsid(3)](http://man7.org/linux/man-pages/man3/tcgetsid.3.html)
125 * returns the session id corresponding to the given fd.
126 *
127 * Returns a non-negative session id on success and
128 * returns -1 and sets `errno` on failure.
129 */
Elliott Hughesff26a162017-08-17 22:34:21 +0000130pid_t tcgetsid(int __fd) __INTRODUCED_IN(21);
Elliott Hughes462e90c2018-08-21 16:10:48 -0700131
132/**
133 * [tcsendbreak(3)](http://man7.org/linux/man-pages/man3/tcsendbreak.3.html)
134 * sends a break.
135 *
136 * Returns 0 on success and returns -1 and sets `errno` on failure.
137 */
Elliott Hughesff26a162017-08-17 22:34:21 +0000138int tcsendbreak(int __fd, int __duration) __INTRODUCED_IN(21);
Elliott Hughes462e90c2018-08-21 16:10:48 -0700139
140/**
141 * [tcsetattr(3)](http://man7.org/linux/man-pages/man3/tcsetattr.3.html)
142 * writes the configuration of the given terminal.
143 *
144 * Returns 0 on success and returns -1 and sets `errno` on failure.
145 */
Elliott Hughesff26a162017-08-17 22:34:21 +0000146int tcsetattr(int __fd, int __optional_actions, const struct termios* __t) __INTRODUCED_IN(21);
Elliott Hughes462e90c2018-08-21 16:10:48 -0700147
Josh Gao8778d642016-07-22 15:26:36 -0700148#endif
149
The Android Open Source Project1dc9e472009-03-03 19:28:35 -0800150__END_DECLS
151
Josh Gaob8e1b7052016-04-13 17:18:20 -0700152#include <android/legacy_termios_inlines.h>