Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Debug statements for termios struct.
#include <stdio.h>
#include <sys/ioctl.h>
#include "termios_dbg.h"
#define CHECK_BIT(var, pos) ((var) & (1<<(pos)))
void ptermios_iflag(struct termios *tty)
{
printf("c_iflag=0x%x\n", tty->c_iflag);
if (CHECK_BIT(tty->c_iflag, 0))
printf(" IGNBRK");
if (CHECK_BIT(tty->c_iflag, 1))
printf(" BRKINT");
if (CHECK_BIT(tty->c_iflag, 2))
printf(" IGNPAR");
if (CHECK_BIT(tty->c_iflag, 3))
printf(" PARMRK");
if (CHECK_BIT(tty->c_iflag, 4))
printf(" INPCK");
if (CHECK_BIT(tty->c_iflag, 5))
printf(" ISTRIP");
if (CHECK_BIT(tty->c_iflag, 6))
printf(" INLCR");
if (CHECK_BIT(tty->c_iflag, 7))
printf(" IGNCR");
if (CHECK_BIT(tty->c_iflag, 8))
printf(" ICRNL");
if (CHECK_BIT(tty->c_iflag, 9))
printf(" IUCLC");
if (CHECK_BIT(tty->c_iflag, 10))
printf(" IXON");
if (CHECK_BIT(tty->c_iflag, 11))
printf(" IXANY");
if (CHECK_BIT(tty->c_iflag, 12))
printf(" IXOFF");
if (CHECK_BIT(tty->c_iflag, 13))
printf(" IMAXBEL");
printf("\n");
}
void ptermios_oflag(struct termios *tty)
{
printf("c_oflag=0x%x\n", tty->c_oflag);
if (CHECK_BIT(tty->c_oflag, 0))
printf(" OPOST");
if (CHECK_BIT(tty->c_oflag, 1))
printf(" OLCUC");
if (CHECK_BIT(tty->c_oflag, 2))
printf(" ONLCR");
if (CHECK_BIT(tty->c_oflag, 3))
printf(" OCRNL");
if (CHECK_BIT(tty->c_oflag, 4))
printf(" ONOCR");
if (CHECK_BIT(tty->c_oflag, 5))
printf(" ONLRET");
if (CHECK_BIT(tty->c_oflag, 6))
printf(" OFILL");
if (CHECK_BIT(tty->c_oflag, 7))
printf(" OFDEL");
if ((tty->c_oflag & NLDLY) == NL0)
printf(" NL0");
if ((tty->c_oflag & NLDLY) == NL1)
printf(" NL1");
if ((tty->c_oflag & CRDLY) == CR0)
printf(" CR0");
if ((tty->c_oflag & CRDLY) == CR1)
printf(" CR1");
if ((tty->c_oflag & CRDLY) == CR2)
printf(" CR2");
if ((tty->c_oflag & CRDLY) == CR3)
printf(" CR3");
if ((tty->c_oflag & TABDLY) == TAB0)
printf(" TAB0");
if ((tty->c_oflag & TABDLY) == TAB1)
printf(" TAB1");
if ((tty->c_oflag & TABDLY) == TAB2)
printf(" TAB2");
if ((tty->c_oflag & TABDLY) == TAB3)
printf(" TAB3");
if ((tty->c_oflag & TABDLY) == XTABS)
printf(" XTABS");
if ((tty->c_oflag & BSDLY) == BS0)
printf(" BS0");
if ((tty->c_oflag & BSDLY) == BS1)
printf(" BS1");
if ((tty->c_oflag & VTDLY) == VT0)
printf(" VT0");
if ((tty->c_oflag & VTDLY) == VT1)
printf(" VT1");
if ((tty->c_oflag & FFDLY) == FF0)
printf(" FF0");
if ((tty->c_oflag & FFDLY) == FF1)
printf(" FF1");
printf("\n");
}
void ptermios_cflag(struct termios *tty)
{
printf("c_cflag=0x%x\n", tty->c_cflag);
if ((tty->c_cflag & CBAUD) == B0)
printf(" B0");
if ((tty->c_cflag & CBAUD) == B50)
printf(" B50");
if ((tty->c_cflag & CBAUD) == B75)
printf(" B75");
if ((tty->c_cflag & CBAUD) == B110)
printf(" B110");
if ((tty->c_cflag & CBAUD) == B134)
printf(" B134");
if ((tty->c_cflag & CBAUD) == B150)
printf(" B150");
if ((tty->c_cflag & CBAUD) == B200)
printf(" B200");
if ((tty->c_cflag & CBAUD) == B300)
printf(" B300");
if ((tty->c_cflag & CBAUD) == B600)
printf(" B600");
if ((tty->c_cflag & CBAUD) == B1200)
printf(" B1200");
if ((tty->c_cflag & CBAUD) == B1800)
printf(" B1800");
if ((tty->c_cflag & CBAUD) == B2400)
printf(" B2400");
if ((tty->c_cflag & CBAUD) == B4800)
printf(" B4800");
if ((tty->c_cflag & CBAUD) == B9600)
printf(" B9600");
if ((tty->c_cflag & CBAUD) == B19200)
printf(" B19200");
if ((tty->c_cflag & CBAUD) == B38400)
printf(" B38400");
if ((tty->c_cflag & CSIZE) == CS5)
printf(" CS5");
if ((tty->c_cflag & CSIZE) == CS6)
printf(" CS6");
if ((tty->c_cflag & CSIZE) == CS7)
printf(" CS7");
if ((tty->c_cflag & CSIZE) == CS8)
printf(" CS8");
if (CHECK_BIT(tty->c_cflag, 6))
printf(" CSTOPB");
if (CHECK_BIT(tty->c_cflag, 7))
printf(" CREAD");
if (CHECK_BIT(tty->c_cflag, 8))
printf(" PARENB");
if (CHECK_BIT(tty->c_cflag, 9))
printf(" PARODD");
if (CHECK_BIT(tty->c_cflag, 10))
printf(" HUPCL");
if (CHECK_BIT(tty->c_cflag, 11))
printf(" CLOCAL");
if (CHECK_BIT(tty->c_cflag, 31))
printf(" CRTSCTS");
printf("\n");
}
void ptermios_lflag(struct termios *tty)
{
printf("c_lflag=0x%x\n", tty->c_lflag);
if (CHECK_BIT(tty->c_lflag, 0))
printf(" ISIG");
if (CHECK_BIT(tty->c_lflag, 1))
printf(" ICANON");
if (CHECK_BIT(tty->c_lflag, 2))
printf(" XCASE");
if (CHECK_BIT(tty->c_lflag, 3))
printf(" ECHO");
if (CHECK_BIT(tty->c_lflag, 4))
printf(" ECHOE");
if (CHECK_BIT(tty->c_lflag, 5))
printf(" ECHOK");
if (CHECK_BIT(tty->c_lflag, 6))
printf(" ECHONL");
if (CHECK_BIT(tty->c_lflag, 7))
printf(" NOFLSH");
if (CHECK_BIT(tty->c_lflag, 8))
printf(" TOSTOP");
if (CHECK_BIT(tty->c_lflag, 9))
printf(" ECHOCTL");
if (CHECK_BIT(tty->c_lflag, 10))
printf(" ECHOPRT");
if (CHECK_BIT(tty->c_lflag, 11))
printf(" ECHOKE");
if (CHECK_BIT(tty->c_lflag, 12))
printf(" FLUSHO");
if (CHECK_BIT(tty->c_lflag, 14))
printf(" PENDIN");
if (CHECK_BIT(tty->c_lflag, 15))
printf(" IEXTEN");
printf("\n");
}
void ptermios_cc(struct termios *tty)
{
printf("VINTR=0x%x\n", tty->c_cc[VINTR]);
printf("VQUIT=0x%x\n", tty->c_cc[VQUIT]);
printf("VERASE=0x%x\n", tty->c_cc[VERASE]);
printf("VKILL=0x%x\n", tty->c_cc[VKILL]);
printf("VEOF=0x%x\n", tty->c_cc[VEOF]);
printf("VTIME=0x%x\n", tty->c_cc[VTIME]);
printf("VMIN=0x%x\n", tty->c_cc[VMIN]);
printf("VSWTC=0x%x\n", tty->c_cc[VSWTC]);
printf("VSTART=0x%x\n", tty->c_cc[VSTART]);
printf("VSTOP=0x%x\n", tty->c_cc[VSTOP]);
printf("VSUSP=0x%x\n", tty->c_cc[VSUSP]);
printf("VEOL=0x%x\n", tty->c_cc[VEOL]);
printf("VREPRINT=0x%x\n", tty->c_cc[VREPRINT]);
printf("VDISCARD=0x%x\n", tty->c_cc[VDISCARD]);
printf("VWERASE=0x%x\n", tty->c_cc[VWERASE]);
printf("VLNEXT=0x%x\n", tty->c_cc[VLNEXT]);
printf("VEOL2=0x%x\n", tty->c_cc[VEOL2]);
}
void ptermios_modemlines(int fd)
{
int controlbits;
if (ioctl(fd, TIOCMGET, &controlbits) == -1)
fprintf(stderr, "ptermios_modemlines: TIOCMGET\n");
printf("modem=0x%x\n", controlbits);
printf("%d\tDSR (data set ready/line enable)\n", CHECK_BIT(controlbits, 0) ? 1 : 0);
printf("%d\tDTR (data terminal ready)\n", CHECK_BIT(controlbits, 1) ? 1 : 0);
printf("%d\tRTS (request to send)\n", CHECK_BIT(controlbits, 2) ? 1 : 0);
printf("%d\tSecondary TXD (transmit)\n", CHECK_BIT(controlbits, 3) ? 1 : 0);
printf("%d\tSecondary RXD (receive)\n", CHECK_BIT(controlbits, 4) ? 1 : 0);
printf("%d\tCTS (clear to send)\n", CHECK_BIT(controlbits, 5) ? 1 : 0);
printf("%d\tDCD (data carrier detect)\n", CHECK_BIT(controlbits, 6) ? 1 : 0);
printf("%d\tTIOCM_CAR\n", CHECK_BIT(controlbits, 7) ? 1 : 0);
printf("%d\tRNG (ring)\n", CHECK_BIT(controlbits, 8) ? 1 : 0);
printf("%d\tTIOCM_RNG\n", CHECK_BIT(controlbits, 9) ? 1 : 0);
printf("%d\tDSR (data set ready)\n", CHECK_BIT(controlbits, 10) ? 1 : 0);
}
void ptermios(struct termios *tty)
{
ptermios_iflag(tty);
ptermios_oflag(tty);
ptermios_cflag(tty);
ptermios_lflag(tty);
ptermios_cc(tty);
}
#ifndef TERMIOS_DEBUG_H
#define TERMIOS_DEBUG_H
#include <termios.h>
void ptermios_iflag(struct termios *tty);
void ptermios_oflag(struct termios *tty);
void ptermios_cflag(struct termios *tty);
void ptermios_lflag(struct termios *tty);
void ptermios_cc(struct termios *tty);
void ptermios_modemlines(int fd);
void ptermios(struct termios *tty);
#endif /* TERMIOS_DEBUG_H */
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment