summaryrefslogtreecommitdiff
path: root/components/libc/posix/termios
diff options
context:
space:
mode:
authorMeco Man <[email protected]>2021-10-17 17:19:12 -0400
committerMeco Man <[email protected]>2021-10-17 17:19:12 -0400
commitb513d37cf2fc33c2dd20021316533feaac0bef23 (patch)
treef14e24d145a40620dbb8fd5a5d807b972ec4a1d5 /components/libc/posix/termios
parent9fe546b0d86b17c64e57447913c8a9f3a9c40534 (diff)
[libc][posix] create 'posix' folder and move related files into it
Diffstat (limited to 'components/libc/posix/termios')
-rw-r--r--components/libc/posix/termios/SConscript13
-rw-r--r--components/libc/posix/termios/posix_termios.c129
-rw-r--r--components/libc/posix/termios/posix_termios.h213
3 files changed, 355 insertions, 0 deletions
diff --git a/components/libc/posix/termios/SConscript b/components/libc/posix/termios/SConscript
new file mode 100644
index 0000000000..381eb5ad8b
--- /dev/null
+++ b/components/libc/posix/termios/SConscript
@@ -0,0 +1,13 @@
+# RT-Thread building script for component
+
+from building import *
+
+cwd = GetCurrentDir()
+src = Glob('*.c') + Glob('*.cpp')
+CPPPATH = [cwd]
+
+group = DefineGroup('libc', src,
+ depend = ['RT_USING_LIBC', 'RT_USING_POSIX', 'RT_USING_POSIX_TERMIOS'],
+ CPPPATH = CPPPATH)
+
+Return('group')
diff --git a/components/libc/posix/termios/posix_termios.c b/components/libc/posix/termios/posix_termios.c
new file mode 100644
index 0000000000..9f33c857e6
--- /dev/null
+++ b/components/libc/posix/termios/posix_termios.c
@@ -0,0 +1,129 @@
+/*
+ * Copyright (c) 2006-2021, RT-Thread Development Team
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date Author Notes
+ * 2017/08/30 Bernard The first version
+ */
+#include <stdlib.h>
+#include <string.h>
+#include <dfs_posix.h>
+#include <sys/errno.h>
+#include <termios.h>
+
+int tcgetattr(int fd, struct termios *tio)
+{
+ /* Get the current serial port settings. */
+ if (ioctl(fd, TCGETA, tio))
+ return -1;
+
+ return 0;
+}
+
+int tcsetattr(int fd, int act, const struct termios *tio)
+{
+ switch (act)
+ {
+ case TCSANOW:
+ /* make the change immediately */
+ return (ioctl(fd, TCSETA, (void*)tio));
+ case TCSADRAIN:
+ /*
+ * Don't make the change until all currently written data
+ * has been transmitted.
+ */
+ return (ioctl(fd, TCSETAW, (void*)tio));
+ case TCSAFLUSH:
+ /* Don't make the change until all currently written data
+ * has been transmitted, at which point any received but
+ * unread data is also discarded.
+ */
+ return (ioctl(fd, TCSETAF, (void*)tio));
+ default:
+ errno = EINVAL;
+ return (-1);
+ }
+}
+
+/**
+ * this function gets process group ID for session leader for controlling
+ * terminal
+ *
+ * @return always 0
+ */
+pid_t tcgetsid(int fd)
+{
+ return 0;
+}
+
+speed_t cfgetospeed(const struct termios *tio)
+{
+ return tio->c_cflag & CBAUD;
+}
+
+speed_t cfgetispeed(const struct termios *tio)
+{
+ return cfgetospeed(tio);
+}
+
+int cfsetospeed(struct termios *tio, speed_t speed)
+{
+ if (speed & ~CBAUD)
+ {
+ errno = EINVAL;
+ return -1;
+ }
+
+ tio->c_cflag &= ~CBAUD;
+ tio->c_cflag |= speed;
+ return 0;
+}
+
+int cfsetispeed(struct termios *tio, speed_t speed)
+{
+ return speed ? cfsetospeed(tio, speed) : 0;
+}
+
+int tcsendbreak(int fd, int dur)
+{
+ /* nonzero duration is implementation-defined, so ignore it */
+ return 0;
+}
+
+int tcflush(int fd, int queue)
+{
+ return ioctl(fd, TCFLSH, (void*)queue);
+}
+
+int tcflow(int fd, int action)
+{
+ return ioctl(fd, TCXONC, (void*)action);
+}
+
+/**
+ * this function waits for transmission of output
+ */
+int tcdrain(int fd)
+{
+ return 0;
+}
+
+#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
+void cfmakeraw(struct termios *t)
+{
+ t->c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP|INLCR|IGNCR|ICRNL|IXON);
+ t->c_oflag &= ~OPOST;
+ t->c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN);
+ t->c_cflag &= ~(CSIZE|PARENB);
+ t->c_cflag |= CS8;
+ t->c_cc[VMIN] = 1;
+ t->c_cc[VTIME] = 0;
+}
+
+int cfsetspeed(struct termios *tio, speed_t speed)
+{
+ return cfsetospeed(tio, speed);
+}
+#endif
diff --git a/components/libc/posix/termios/posix_termios.h b/components/libc/posix/termios/posix_termios.h
new file mode 100644
index 0000000000..6dc5531955
--- /dev/null
+++ b/components/libc/posix/termios/posix_termios.h
@@ -0,0 +1,213 @@
+/*
+ * Copyright (c) 2006-2021, RT-Thread Development Team
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date Author Notes
+ * 2017/08/30 Bernard The first version
+ */
+#ifndef TERMIOS_H__
+#define TERMIOS_H__
+
+#include <sys/types.h>
+#include <sys/ioctl.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef unsigned char cc_t;
+typedef unsigned int speed_t;
+typedef unsigned int tcflag_t;
+
+#define NCCS 32
+
+struct termios {
+ tcflag_t c_iflag;
+ tcflag_t c_oflag;
+ tcflag_t c_cflag;
+ tcflag_t c_lflag;
+ cc_t c_line;
+ cc_t c_cc[NCCS];
+ speed_t __c_ispeed;
+ speed_t __c_ospeed;
+};
+
+#define VINTR 0
+#define VQUIT 1
+#define VERASE 2
+#define VKILL 3
+#define VEOF 4
+#define VTIME 5
+#define VMIN 6
+#define VSWTC 7
+#define VSTART 8
+#define VSTOP 9
+#define VSUSP 10
+#define VEOL 11
+#define VREPRINT 12
+#define VDISCARD 13
+#define VWERASE 14
+#define VLNEXT 15
+#define VEOL2 16
+
+#define IGNBRK 0000001
+#define BRKINT 0000002
+#define IGNPAR 0000004
+#define PARMRK 0000010
+#define INPCK 0000020
+#define ISTRIP 0000040
+#define INLCR 0000100
+#define IGNCR 0000200
+#define ICRNL 0000400
+#define IUCLC 0001000
+#define IXON 0002000
+#define IXANY 0004000
+#define IXOFF 0010000
+#define IMAXBEL 0020000
+#define IUTF8 0040000
+
+#define OPOST 0000001
+#define OLCUC 0000002
+#define ONLCR 0000004
+#define OCRNL 0000010
+#define ONOCR 0000020
+#define ONLRET 0000040
+#define OFILL 0000100
+#define OFDEL 0000200
+#define NLDLY 0000400
+#define NL0 0000000
+#define NL1 0000400
+#define CRDLY 0003000
+#define CR0 0000000
+#define CR1 0001000
+#define CR2 0002000
+#define CR3 0003000
+#define TABDLY 0014000
+#define TAB0 0000000
+#define TAB1 0004000
+#define TAB2 0010000
+#define TAB3 0014000
+#define BSDLY 0020000
+#define BS0 0000000
+#define BS1 0020000
+#define FFDLY 0100000
+#define FF0 0000000
+#define FF1 0100000
+
+#define VTDLY 0040000
+#define VT0 0000000
+#define VT1 0040000
+
+#define B0 0000000
+#define B50 0000001
+#define B75 0000002
+#define B110 0000003
+#define B134 0000004
+#define B150 0000005
+#define B200 0000006
+#define B300 0000007
+#define B600 0000010
+#define B1200 0000011
+#define B1800 0000012
+#define B2400 0000013
+#define B4800 0000014
+#define B9600 0000015
+#define B19200 0000016
+#define B38400 0000017
+
+#define B57600 0010001
+#define B115200 0010002
+#define B230400 0010003
+#define B460800 0010004
+#define B500000 0010005
+#define B576000 0010006
+#define B921600 0010007
+#define B1000000 0010010
+#define B1152000 0010011
+#define B1500000 0010012
+#define B2000000 0010013
+#define B2500000 0010014
+#define B3000000 0010015
+#define B3500000 0010016
+#define B4000000 0010017
+
+#define CSIZE 0000060
+#define CS5 0000000
+#define CS6 0000020
+#define CS7 0000040
+#define CS8 0000060
+#define CSTOPB 0000100
+#define CREAD 0000200
+#define PARENB 0000400
+#define PARODD 0001000
+#define HUPCL 0002000
+#define CLOCAL 0004000
+
+#define ISIG 0000001
+#define ICANON 0000002
+#define ECHO 0000010
+#define ECHOE 0000020
+#define ECHOK 0000040
+#define ECHONL 0000100
+#define NOFLSH 0000200
+#define TOSTOP 0000400
+#define IEXTEN 0100000
+
+#define TCOOFF 0
+#define TCOON 1
+#define TCIOFF 2
+#define TCION 3
+
+#define TCIFLUSH 0
+#define TCOFLUSH 1
+#define TCIOFLUSH 2
+
+#define TCSANOW 0
+#define TCSADRAIN 1
+#define TCSAFLUSH 2
+
+#define EXTA 0000016
+#define EXTB 0000017
+#define CBAUD 0010017
+#define CBAUDEX 0010000
+#define CIBAUD 002003600000
+#define CMSPAR 010000000000
+#define CRTSCTS 020000000000
+
+#define XCASE 0000004
+#define ECHOCTL 0001000
+#define ECHOPRT 0002000
+#define ECHOKE 0004000
+#define FLUSHO 0010000
+#define PENDIN 0040000
+#define EXTPROC 0200000
+
+#define XTABS 0014000
+
+speed_t cfgetospeed (const struct termios *);
+speed_t cfgetispeed (const struct termios *);
+int cfsetospeed (struct termios *, speed_t);
+int cfsetispeed (struct termios *, speed_t);
+
+int tcgetattr (int, struct termios *);
+int tcsetattr (int, int, const struct termios *);
+
+int tcsendbreak (int, int);
+int tcdrain (int);
+int tcflush (int, int);
+int tcflow (int, int);
+
+pid_t tcgetsid (int);
+
+#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
+void cfmakeraw(struct termios *);
+int cfsetspeed(struct termios *, speed_t);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif