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