// Copyright (c) 2004 David Muse
// See the COPYING file for more information.
#ifndef RUDIMENTS_SERIALPORTPROFILE_H
#define RUDIMENTS_SERIALPORTPROFILE_H
#include <rudiments/private/serialportprofileincludes.h>
// cfmakeraw, cfsetspeed???
// wraps struct termios
#ifdef RUDIMENTS_NAMESPACE
namespace rudiments {
#endif
class serialportprofileprivate;
class serialportprofile {
public:
enum inputmode_t {
cannonical=0,
raw
};
enum flowcontrol_t {
fc_none=0,
fc_software,
fc_hardware
};
enum baudrate_t {
baud_0=B0,
baud_50=B50,
baud_75=B75,
baud_110=B110,
baud_134=B134,
baud_150=B150,
baud_200=B200,
baud_300=B300,
baud_600=B600,
baud_1200=B1200,
baud_1800=B1800,
baud_2400=B2400,
baud_4800=B4800,
baud_9600=B9600,
#if defined(B57600)
baud_19200=B19200,
#elif defined(EXTA)
baud_19200=EXTA,
#endif
#if defined(B38400)
baud_38400=B38400,
#elif defined(EXTB)
baud_38400=EXTB,
#endif
#ifdef B57600
baud_57600=B57600,
#endif
#ifdef B76800
baud_76800=B76800,
#endif
#ifdef B115200
baud_115200=B115200,
#endif
#ifdef B230400
baud_230400=B230400,
#endif
#ifdef B460800
baud_460800=B460800,
#endif
#ifdef B500000
baud_500000=B500000,
#endif
#ifdef B576000
baud_576000=B576000,
#endif
#ifdef B921600
baud_921600=B921600,
#endif
#ifdef B1000000
baud_1000000=B1000000,
#endif
#ifdef B1142000
baud_1152000=B1152000,
#endif
#ifdef B1500000
baud_1500000=B1500000,
#endif
#ifdef B2000000
baud_2000000=B2000000,
#endif
#ifdef B2500000
baud_2500000=B2500000,
#endif
#ifdef B3000000
baud_3000000=B3000000,
#endif
#ifdef B3500000
baud_3500000=B3500000,
#endif
#ifdef B4000000
baud_4000000=B4000000,
#endif
};
enum charsize_t {
cs_5=CS5,
cs_6=CS6,
cs_7=CS7,
cs_8=CS8
};
#ifdef NLDLY
enum newlinedelay_t {
nl_none=NL0,
nl_100=NL1
};
#endif
#ifdef CRDLY
enum carriagereturndelay_t {
cr_none=CR0,
cr_depends=CR1,
cr_100=CR2,
cr_150=CR3
};
#endif
#ifdef TABDLY
enum tabdelay_t {
td_none=TAB0,
td_depends=TAB1,
td_100=TAB2
};
#endif
#ifdef BSDLY
enum backspacedelay_t {
bs_none=BS0,
bs_50=BS1
};
#endif
#ifdef VTDLY
enum verticaltabdelay_t {
vt_none=VT0,
vt_2=VT1
};
#endif
#ifdef FFDLY
enum formfeeddelay_t {
ff_none=FF0,
ff_2=FF1
};
#endif
serialportprofile();
~serialportprofile();
void setControlOptions(tcflag_t flags);
// set control options to "flags"
void setLocalOptions(tcflag_t flags);
// set local options to "flags"
void setInputOptions(tcflag_t flags);
// set input options to "flags"
void setOutputOptions(tcflag_t flags);
// set output options to "flags"
void setControlCharacters(const cc_t *c_cc);
// Set control characters to the values pointed to by
// "c_cc". Note that c_cc must be an array of length
// NCCS.
void setOptions(const termios *newtio);
// set all options and control characters to
// the values set in "newtio"
void defaultControlOptions();
// set the control options to system defaults
void defaultLocalOptions();
// set the local options to system defaults
void defaultInputOptions();
// set the input options to system defaults
void defaultOutputOptions();
// set the output options to system defaults
void defaultControlCharacters();
// set the control characters to system defaults
void defaultOptions();
// set all options and control characters to
// system defaults
void evalOptionsString(const char *string);
// Serial port configuration requirements are often
// given as a 3 character string representing the
// number of bits-per-char, the parity and the number
// of stop bits such as "8n1", "7e2", etc.
// This methods parses such a string and sets the
// profile to match those values.
void inputMode(inputmode_t inputmode);
// set input mode to "inputmode"
inputmode_t inputMode();
// get the current input mode setting
void flowControl(flowcontrol_t flowcontrol);
// set flow control to "flowcontrol"
flowcontrol_t flowControl();
// get the current flow control setting
// control options
// setters...
void baud(const char *baudrate);
void baud(baudrate_t baudrate);
// set the (input and output) baud rate
// default is 0
bool inputBaud(const char *baudrate);
bool inputBaud(baudrate_t baudrate);
// set the input baud rate
// default is 0
bool outputBaud(const char *baudrate);
bool outputBaud(baudrate_t baudrate);
// set the output baud rate
// default is 0
void characterSize(charsize_t size);
// set the character size
// default is 5 bits
// termios flag: CSIZE
void twoStopBits(bool truefalse);
// use two stop bits if "truefalse" is true
// or one stop bit if "truefalse" is false
// default is one stop bit
// termios flag: CSTOPB
void receiverOn(bool truefalse);
// turn the receiver on/off
// (enables serial port to read incoming data)
// default is off
// (you probably always want to set this on)
// termios flag: CREAD
void parityCheck(bool truefalse);
// turn parity checking on/off
// default is off
// termios flag: CPARENB
void oddParity(bool truefalse);
// use odd parity if "truefalse" is true
// or even parity if "truefalse" is false
// default is even parity
// termios flag: PARODD
void hangupOnClose(bool truefalse);
// lower modem control lines after
// last process closes the device (hang up)
// default is not to hang up on close
// termios flag: HUPCL
void ignoreModemControlLines(bool truefalse);
// ignore (possibly sporadic) job control and hangup
// signals that could terminate or otherwise control
// the program
// default is not to ignore
// (this should be set to true when communicating
// with a device connected directly to the computer as
// opposed to over a modem)
// termios flag: CLOCAL
#ifdef LOBLK
void blockJobControlOutput(bool truefalse);
// block output from a nonconcurrent shell layer
// default is not to block
// termios flag: LOBLK
#endif
void hardwareFlowControl(bool truefalse);
// use RTS/CTS flow control
// default is not to use RTS/CTS flow control
// termios flag: CRTSCTS/NEW_CRTSCTS/
// CRTS_IFLOW/CRTS_OFLOW
// getters...
baudrate_t baud();
// returns current (input and output) baud
baudrate_t inputBaud();
// returns current input baud
baudrate_t outputBaud();
// returns current output baud
charsize_t characterSize();
// returns current character size
bool twoStopBits();
// returns true if two stop bits are being used
bool receiverOn();
// returns true if the receiver is on
bool parityCheck();
// returns true if parity check is enabled
bool oddParity();
// returns true if odd parity is being used
bool hangupOnClose();
// returns true if the modem lines will be
// lowered when the last device closes the
// device
bool ignoreModemControlLines();
// returns true if (possibly sporadic) job
// control and hangup signals are being ignored
bool blockJobControlOutput();
// returns true if output from a nonconcurrent
// shell layer is being blocked
bool hardwareFlowControl();
// returns true if RTS/CTS hardware flow
// control is being used
// local options
// setters...
void generateSignals(bool truefalse);
// cause corresponding signals to be raised when any of
// the INTR, QUIT, SUSP or DSUSP characters are received
// default is not to raise signals
// termios flag: ISIG
void canonicalInput(bool truefalse);
// enable special characters EOF, EOL, EOL2, ERASE,
// KILL, LNEXT, REPRINT, STATUS and WERASE, buffer by
// lines
// default is not to enable the special characters and
// not buffer by lines
// termios flag: ICANON
#ifdef XCASE
void escapedUpperCase(bool truefalse);
// If cannonicalInput() is also set true, converts
// characters from input to lower case unless they are
// preceeded by a \. On output, preceeds each upper
// case character with a \ and converts all lower case
// characters to uppercase.
// default is not to use escaped upper case
// (this is used when communicating with terminals that
// can display upper or lower case, but only transmit/
// receive upper case)
// termios flag: XCASE
#endif
void echoInput(bool truefalse);
// If cannonicalInput() is also set true then echo
// input.
// termios flag: ECHO
void eraseCharactersOn(bool truefalse);
// If cannonicalInput() is also set true, character
// set using eraseCharacter() erases the preceeding
// character and character set using
// wordEraseCharacter() erases the preceeding word.
// termios flag: ECHOE
void killCharacterOn(bool truefalse);
// If cannonicalInput() is also set true, character
// set using killCharacter() erases the current line.
// termios flag: ECHOK
void echoNewLine(bool truefalse);
// If cannonicalInput() is also set true, new line
// characters are echoed even if echoInput() is set
// false.
// termios flag: ECHONL
void extendedFunctions(bool truefalse);
// If cannonicalInput() is also set true, enables
// characters set by secondEndOfLineCharacter(),
// reprintCharacter() and wordEraseCharacter(). Also
// enables lowerCase().
// termios flag: IEXTEN
void echoControlCharacters(bool truefalse);
// If echoInput() is also set true, control characters
// are echoed as ^X where X is the ascii code for the
// character plus 0x40.
// termios flag: ECHOCTL
#ifdef ECHOPRT
void echoErasedCharacter(bool truefalse);
// If cannonicalInput() and echoInput() are also set
// true, characters are printed as they are erased.
// termios flag: ECHOPRT
#endif
void emulateKill(bool truefalse);
// If cannonicalInput() is also set, the character set
// using killCharacter() causes the line to be erased
// by erasing each character on the line.
// (useful when a terminal doesn't support the KILL
// character but does support the ERASE character)
// termios flag: ECHOKE
void noFlushAfterInterruptOrQuit(bool truefalse);
// Disables flushing of the input/output queues when
// generating SIGINT, SIGQUIT or SIGSUSP signals.
// termios flag: NOFLSH
#ifdef PENDIN
void retypePendingCharacters(bool truefalse);
// All characters in the input queue are reprinted when
// the next character is read.
// termios flag: PENDIN
#endif
void sendSignalForBackgroundOutput(bool truefalse);
// Send the SIGTTOU signal to the process group of a
// background process which tries to write to its
// controlling terminal.
// termios flag: TOSTOP
// getters...
bool generateSignals();
// returns true if corresponding signals will be raised
// when any of the INTR, QUIT, SUSP or DSUSP characters
// are received default is not to raise signals
bool canonicalInput();
// returns true if special characters EOF, EOL, EOL2,
// ERASE, KILL, LNEXT, REPRINT, STATUS and WERASE are
// enabled and buffering is being done by lines
#ifdef XCASE
bool escapedUpperCase();
// Returns true if on input, characters are being
// converted from upper to lower case unless they are
// preceeded by a \ and on output lower case characters
// are being converted to upper case and upper case
// characters are being preceeded with a \.
#endif
bool echoInput();
// returns true if input characters are being echoed
bool eraseCharactersOn();
// returns true if the character set using
// eraseCharacter() erases the preceeding
// character and the character set using
// wordEraseCharacter() erases the preceeding word
bool killCharacterOn();
// returns true if the character set using
// killCharacter() erases the current line
bool echoNewLine();
// returns true if new line characters are being echoed
// even if echoInput() is set false
bool extendedFunctions();
// returns true if characters set by
// secondEndOfLineCharacter(), reprintCharacter() and
// wordEraseCharacter() are enabled and lowerCase() is
// enabled
bool echoControlCharacters();
// returns true if control characters are being echoed
// as ^X where X is the ascii code for the character
// plus 0x40
#ifdef ECHOPRT
bool echoErasedCharacter();
// returns true if characters are being printed as they
// are erased
#endif
bool emulateKill();
// returns true if the character set using
// killCharacter() causes the line to be erased
// by erasing each character on the line
bool noFlushAfterInterruptOrQuit();
// returns true if flushing of the input/output queues
// when generating SIGINT, SIGQUIT or SIGSUSP signals
// is enabled
#ifdef PENDIN
bool retypePendingCharacters();
// returns true if all characters in the input queue
// are reprinted when the next character is read
#endif
bool sendSignalForBackgroundOutput();
// returns true if the SIGTTOU signal is being sent
// to the process group of a background process which
// tries to write to its controlling terminal
// input options
void inputParityCheck(bool truefalse);
// enable parity checking on input
// termios flag: INPCK
void ignoreParityErrors(bool truefalse);
// ignore parity errors (ie. if a character has a
// parity error, just return what we got, rather than
// marking or converting it)
// termios flag: IGNPAR
void markParityErrors(bool truefalse);
// Unless ignoreParityErrors() is set true, prefix a
// character with a parity error with \337 \0. The
// default is to convert it to \0 unless
// ignoreParityErrors() is set true.
// termios flag: PARMRK
void stripParityBits(bool truefalse);
// set the 8th bit of each character (the parity bit)
// to 0
// termios flag: ISTRIP
void softwareFlowControlOnOutput(bool truefalse);
// enable XON/XOFF flow control on output.
// termios flag: IXON
void softwareFlowControlOnInput(bool truefalse);
// enable XON/XOFF flow control on input.
// termios flag: IXOFF
void anyCharacterStartsFlow(bool truefalse);
// enable any character to restart output
// termios flag: IXANY
void ignoreBreak(bool truefalse);
// ignore BREAK character
// termios flag: IGNBRK
void sendSignalOnBreak(bool truefalse);
// If ignoreBreak() isn't set true and a BREAK character
// is received, flush input and output queues and send a
// SIGINT if the serial port is the controlling terminal
// of the process group. If ignoreBreak() is not set,
// the default is to return a \0 character or \377 \0
// if markParityErrors() is set true.
// termios flag: BRKINT
void mapNewLineToCarriageReturnOnInput(bool truefalse);
// translate new line to carriage return on input
// termios flag: INLCR
#ifdef ONOEOT
void discardEndOfTransmission(bool truefalse);
// termios flat: ONOEOT
#endif
void ignoreCarriageReturn(bool truefalse);
// ignore carriage return on input
// termios flag: IGNCR
void mapCarriageReturnToNewLineOnInput(bool truefalse);
// translate carriage return to new line on input
// termios flag: ICRNL
#ifdef IUCLC
void lowerCase(bool truefalse);
// map uppercase characters to lowercase on input
// termios flag: IUCLC
#endif
void bellIfLineTooLong(bool truefalse);
// ring bell when input queue is full
// termios flag: IMAXBEL
// getters...
bool inputParityCheck();
// returns true if input parity checking is enabled
bool ignoreParityErrors();
// returns true if parity errors are being ignored
bool markParityErrors();
// returns true if characters with parity errors are
// prefixed with \377 \0
bool stripParityBits();
// returns true if the 8th bit (the parity bit) of
// each character is being set to 0
bool softwareFlowControlOnOutput();
// returns true if XON/XOFF flow control is enabled on
// output
bool softwareFlowControlOnInput();
// returns true if XON/XOFF flow control is enabled on
// input
bool anyCharacterStartsFlow();
// returns true if any character will restart output
bool ignoreBreak();
// returns true if the BREAK character is being ignored
bool sendSignalOnBreak();
// returns true if input and output queues are flushed
// and a SIGINT is sent to the process group if the
// serial port is the controlling terminal when a BREAK
// character is received
bool mapNewLineToCarriageReturnOnInput();
// returns true if new lines are mapped to carriage
// returns on input
#ifdef ONOEOT
bool discardEndOfTransmission();
#endif
bool ignoreCarriageReturn();
// returns true if carriage returns are ignored on input
bool mapCarriageReturnToNewLineOnInput();
// returns true if carriage returns are mapped to new
// lines on input
#ifdef IUCLC
bool lowerCase();
// returns true if uppercase characters are mapped to
// lowercase on input
#endif
bool bellIfLineTooLong();
// returns true if the bell will be rung when the input
// queue is full
// output options
void postProcessOutput(bool truefalse);
// enables implementation-defined output processing
// termios flag: OPOST
#ifdef OLCUC
void outputUpperCase(bool truefalse);
// map lowercase characters to uppercase on output
// termios flag: OLCUC
#endif
void mapNewLineToCarriageReturnNewLineOnOutput(
bool truefalse);
// map new line to carriage return/new line on
// output
// termios flag: ONLCR
#ifdef OCRNL
void mapCarriageReturnToNewLineOnOutput(bool truefalse);
// map carriage return to new line on output
// termios flag: OCRNL
#endif
#ifdef ONOCR
void dontOutputCarriageReturnAtColumnZero(bool truefalse);
// don't output carriage return at column 0
// termios flag: ONOCR
#endif
#ifdef ONLRET
void mapNewLineToCarriageReturnOnOutput(bool truefalse);
// map new line to carriage return on output
// termios flag: ONLRET
#endif
#ifdef OFILL
void useFillCharactersForDelay(bool truefalse);
// send fill characters for delay instead of using a
// timed delay
// termios flag: OFILL
#endif
#ifdef OFDEL
void useDelForFill(bool truefalse);
// use the DEL character instead of NULL for the fill
// character
// termios flag: OFDEL
#endif
void expandTabToSpaces(bool truefalse);
// map tabs to spaces
// termios flag: XTAGS/OXTABS/TAB3
#ifdef NLDLY
void delayAfterNewLine(newlinedelay_t nldelay);
// send a delay after each new line character
// termios flag: NLDLY
#endif
#ifdef CRDLY
void delayAfterCarriageReturn(carriagereturndelay_t crdelay);
// send a delay after each carriage return character
// termios flag: CRDLY
#endif
#ifdef TABDLY
void delayAfterTab(tabdelay_t tabdelay);
// send a delay after each tab character
// termios flag: TABDLY
#endif
#ifdef BSDLY
void delayAfterBackSpace(backspacedelay_t bsdelay);
// send a delay after each backspace character
// termios flag: BSDLY
#endif
#ifdef VTDLY
void delayAfterVerticalTab(verticaltabdelay_t vtdelay);
// send a delay after each vertical tab character
// termios flag: VTDLY
#endif
#ifdef FFDLY
void delayAfterFormFeed(formfeeddelay_t ffdelay);
// send a delay after each form feed character
// termios flag: FFDLY
#endif
// getters...
bool postProcessOutput();
// returns true if implementation-defined output
// processing is enabled
#ifdef OLCUC
bool outputUpperCase();
// returns true if lowercase characters are mapped to
// uppercase on output
#endif
bool mapNewLineToCarriageReturnNewLineOnOutput();
// returns true if new lines are mapped to carriage
// return/new line on output
#ifdef OCRNL
bool mapCarriageReturnToNewLineOnOutput();
// returns true if carriage returns are mapped to new
// lines on output
#endif
#ifdef ONOCR
bool dontOutputCarriageReturnAtColumnZero();
// returns true if carriage returns aren't sent at
// column 0
#endif
#ifdef ONLRET
bool mapNewLineToCarriageReturnOnOutput();
// returns true if new lines are mapped to carriage
// returns on output
#endif
#ifdef OFILL
bool useFillCharactersForDelay();
// returns true if fill characters are sent for delay
// instead of using a timed delay
#endif
#ifdef OFDEL
bool useDelForFill();
// returns true if the DEL character is used instead of
// NULL for the fill character
#endif
bool expandTabToSpaces();
// returns true if the tabs are mapped to spaces
#ifdef NLDLY
newlinedelay_t delayAfterNewLine();
// returns the delay that is sent after new line
// characters
#endif
#ifdef CRDLY
carriagereturndelay_t delayAfterCarriageReturn();
// returns the delay that is sent after carriage return
// characters
#endif
#ifdef TABDLY
tabdelay_t delayAfterTab();
// returns the delay that is sent after tab characters
#endif
#ifdef BSDLY
backspacedelay_t delayAfterBackSpace();
// returns the delay that is sent after backspace
// characters
#endif
#ifdef VTDLY
verticaltabdelay_t delayAfterVerticalTab();
// returns the delay that is sent after vertical tab
// characters
#endif
#ifdef FFDLY
formfeeddelay_t delayAfterFormFeed();
// returns the delay that is sent after form feed
// characters
#endif
// control characters
void interruptCharacter(cc_t character);
// set the character that will cause a SIGINT to be
// sent to the process when generateSignals() is set
// true
// termios flag: VINTR
void quitCharacter(cc_t character);
// set the character that will cause a SIGQUIT to be
// sent to the process when generateSignals() is set
// true
// termios flag: VQUIT
void eraseCharacter(cc_t character);
// set the character that will cause a character erase
// when canonicalInput() is set to true
// termios flag: VERASE
void killCharacter(cc_t character);
// set the character that will cause a line erase
// when canonicalInput() is set to true
// termios flag: VKILL
void endOfFileCharacter(cc_t character);
// set the character that will cause the pending tty
// buffer to be sent to the program without waiting for
// end-of-line and read()'s to return 0 when
// canonicalInput() is set to true
// termios flag: VEOF
void endOfLineCharacter(cc_t character);
// set the end-of-line character, recognized when
// canonicalInput() is set to true
// termios flag: VEOL
void secondEndOfLineCharacter(cc_t character);
// set the "other" end-of-line character, recognized
// when canonicalInput() is set to true
// termios flag: VEOL2
void switchCharacer(cc_t character);
// set the switch character
// termios flag: VSWTCH/VSWTC
void startCharacter(cc_t character);
// set the start character for XON/XOFF flow control
// termios flag: VSTART
void stopCharacter(cc_t character);
// set the stop character for XON/XOFF flow control
// termios flag: VSTOP
void suspendCharacter(cc_t character);
// set the character that will cause a SIGSUSP to be
// sent to the process when generateSignals() is set
// true
// termios flag: VSUSP
#ifdef VDSUSP
void delayedSuspendCharacter(cc_t character);
// set the character that will cause a SIGTSTP to be
// sent to the process when generateSignals() and
// extendedFunctions() are set true
// termios flag: VDSUSP
#endif
void literalNextCharcter(cc_t character);
// set the character that "quotes" the next character,
// depriving it of special meaning, recognized when
// extendedFunctions() is set true
// termios flag: VLNEXT
void wordEraseCharcter(cc_t character);
// set the word erase character, recognized when
// canonicalInput() and extendedFunctions() are set true
// termios flag: VWERASE
void reprintCharacter(cc_t character);
// set the character that causes unread characters to
// be reprinted, recognized when canonicalInput() and
// extendedFunctions() are set true
// termios flag: VREPRINT
void discardPendingOutputCharacter(cc_t character);
// set the character that toggles discarding pending
// output, recognized when extendedFunctions() is set
// true
// termios flag: VDISCARD
#ifdef VSTATUS
void statusRequestCharacter(cc_t character);
// set the status request character
// termios flag: VSTATUS
#endif
void readThreshold(cc_t count);
// set the number of characters that must be read
// before a read() will begin waiting for readTimeout()
// deciseconds before falling through
// termios flag: VMIN
void readTimeout(cc_t deciseconds);
// set the number of deciseconds that a read() will
// wait after reading readThreshold() characters before
// falling through
// termios flag: VTIME
// getters...
cc_t interruptCharacter();
// returns the character that will cause a SIGINT to be
// sent to the process when generateSignals() is set
// true
cc_t quitCharacter();
// returns the character that will cause a SIGQUIT to be
// sent to the process when generateSignals() is set
// true
cc_t eraseCharacter();
// returns the character that will cause a character
// erase when canonicalInput() is set to true
cc_t killCharacter();
// returns the character that will cause a line erase
// when canonicalInput() is set to true
cc_t endOfFileCharacter();
// returns the character that will cause the pending tty
// buffer to be sent to the program without waiting for
// end-of-line and read()'s to return 0 when
// canonicalInput() is set to true
cc_t endOfLineCharacter();
// returns the end-of-line character, recognized when
// canonicalInput() is set to true
cc_t secondEndOfLineCharacter();
// returns the "other" end-of-line character, recognized
// when canonicalInput() is set to true
cc_t switchCharacer();
// returns the switch character
cc_t startCharacter();
// returns the start character for XON/XOFF flow control
cc_t stopCharacter();
// returns the stop character for XON/XOFF flow control
cc_t suspendCharacter();
// returns the character that will cause a SIGSUSP to be
// sent to the process when generateSignals() is set
// true
#ifdef VDSUSP
cc_t delayedSuspendCharacter();
// returns the character that will cause a SIGTSTP to be
// sent to the process when generateSignals() and
// extendedFunctions() are set true
#endif
cc_t literalNextCharcter();
// returns the character that "quotes" the next
// character, depriving it of special meaning,
// recognized when extendedFunctions() is set true
cc_t wordEraseCharcter();
// returns the word erase character, recognized when
// canonicalInput() and extendedFunctions() are set true
cc_t reprintCharacter();
// returns the character that causes unread characters
// to be reprinted, recognized when canonicalInput() and
// extendedFunctions() are set true
cc_t discardPendingOutputCharacter();
// returns the character that toggles discarding pending
// output, recognized when extendedFunctions() is set
// true
cc_t statusRequestCharacter();
// returns the status request character
cc_t readThreshold();
// returns the number of characters that must be read
// before a read() will begin waiting for readTimeout()
// deciseconds before falling through
cc_t readTimeout();
// returns the number of deciseconds that a read() will
// wait after reading readThreshold() characters before
// falling through
termios *getTermios();
// returns the struct termios used internally
#include <rudiments/private/serialportprofile.h>
};
#ifdef RUDIMENTS_NAMESPACE
}
#endif
#endif