11dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/* 21dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 31dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * All rights reserved. 41dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * 51dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Redistribution and use in source and binary forms, with or without 61dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * modification, are permitted provided that the following conditions 71dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * are met: 81dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * * Redistributions of source code must retain the above copyright 91dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * notice, this list of conditions and the following disclaimer. 101dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * * Redistributions in binary form must reproduce the above copyright 111dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * notice, this list of conditions and the following disclaimer in 121dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * the documentation and/or other materials provided with the 131dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * distribution. 141dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * 151dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 161dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 171dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 181dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 191dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 201dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 211dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 221dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 231dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 241dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 251dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 261dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * SUCH DAMAGE. 271dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */ 281dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#ifndef _TERMIOS_H_ 291dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define _TERMIOS_H_ 301dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 311dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <sys/cdefs.h> 321dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <sys/ioctl.h> 331dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <sys/types.h> 341dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <stdint.h> 351dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <linux/termios.h> 361dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 371dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project__BEGIN_DECLS 381dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 391dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/* Redefine these to match their ioctl number */ 401dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#undef TCSANOW 411dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define TCSANOW TCSETS 421dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 431dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#undef TCSADRAIN 441dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define TCSADRAIN TCSETSW 451dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 461dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#undef TCSAFLUSH 471dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define TCSAFLUSH TCSETSF 481dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 491dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectstatic __inline__ int tcgetattr(int fd, struct termios *s) 501dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project{ 511dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project return ioctl(fd, TCGETS, s); 521dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project} 531dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 541dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectstatic __inline__ int tcsetattr(int fd, int __opt, const struct termios *s) 551dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project{ 561dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project return ioctl(fd, __opt, (void *)s); 571dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project} 581dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 591dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectstatic __inline__ int tcflow(int fd, int action) 601dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project{ 611dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project return ioctl(fd, TCXONC, (void *)(intptr_t)action); 621dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project} 631dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 641dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectstatic __inline__ int tcflush(int fd, int __queue) 651dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project{ 661dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project return ioctl(fd, TCFLSH, (void *)(intptr_t)__queue); 671dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project} 681dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 69954923858b34dbe695d202c5a3076f05f269338aVitaly Woolstatic __inline__ int tcdrain(int fd) 70954923858b34dbe695d202c5a3076f05f269338aVitaly Wool{ 71954923858b34dbe695d202c5a3076f05f269338aVitaly Wool return ioctl(fd, TCSBRK, (void *)(intptr_t)1); 72954923858b34dbe695d202c5a3076f05f269338aVitaly Wool} 73954923858b34dbe695d202c5a3076f05f269338aVitaly Wool 741dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectstatic __inline__ pid_t tcgetsid(int fd) 751dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project{ 761dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project pid_t _pid; 771dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project return ioctl(fd, TIOCGSID, &_pid) ? (pid_t)-1 : _pid; 781dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project} 791dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 801dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectstatic __inline__ int tcsendbreak(int fd, int __duration) 811dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project{ 821dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project return ioctl(fd, TCSBRKP, (void *)(uintptr_t)__duration); 831dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project} 841dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 851dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectstatic __inline__ speed_t cfgetospeed(const struct termios *s) 861dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project{ 871dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project return (speed_t)(s->c_cflag & CBAUD); 881dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project} 891dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 901dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectstatic __inline__ int cfsetospeed(struct termios *s, speed_t speed) 911dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project{ 921dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project s->c_cflag = (s->c_cflag & ~CBAUD) | (speed & CBAUD); 931dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project return 0; 941dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project} 951dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 961dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectstatic __inline__ speed_t cfgetispeed(const struct termios *s) 971dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project{ 981dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project return (speed_t)(s->c_cflag & CBAUD); 991dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project} 1001dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 1011dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectstatic __inline__ int cfsetispeed(struct termios *s, speed_t speed) 1021dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project{ 1031dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project s->c_cflag = (s->c_cflag & ~CBAUD) | (speed & CBAUD); 1041dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project return 0; 1051dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project} 1061dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 1071dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectstatic __inline__ void cfmakeraw(struct termios *s) 1081dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project{ 1091dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project s->c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP|INLCR|IGNCR|ICRNL|IXON); 1101dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project s->c_oflag &= ~OPOST; 1111dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project s->c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN); 1121dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project s->c_cflag &= ~(CSIZE|PARENB); 1131dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project s->c_cflag |= CS8; 1141dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project} 1151dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 1161dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project__END_DECLS 1171dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 1181dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif /* _TERMIOS_H_ */ 119