summaryrefslogtreecommitdiffstats
path: root/testsuites/libtests/termios/init.c
diff options
context:
space:
mode:
authorKevin Kirspel <kevin-kirspel@idexx.com>2017-03-21 15:39:48 -0400
committerSebastian Huber <sebastian.huber@embedded-brains.de>2017-03-22 11:55:04 +0100
commit1c6926c11f2e5efcb166c668b097d64a0321d66e (patch)
tree30683dcf11979f51273413aade68a3828d00da10 /testsuites/libtests/termios/init.c
parentbsp/atsam: Fix DMA support of some drivers (diff)
downloadrtems-1c6926c11f2e5efcb166c668b097d64a0321d66e.tar.bz2
termios: Synchronize with latest FreeBSD headers
Adding modified FreeBSD headers to synchronize RTEMS termios with FreeBSD. Modify termios to support dedicated input and output baud for termios structure. Updated BSPs to use dedicated input and output baud in termios structure. Updated tools to use dedicated input and output baud in termios structure. Updated termios testsuites to use dedicated input and output baud in termios structure. Close #2897.
Diffstat (limited to '')
-rw-r--r--testsuites/libtests/termios/init.c341
1 files changed, 205 insertions, 136 deletions
diff --git a/testsuites/libtests/termios/init.c b/testsuites/libtests/termios/init.c
index fcb586b5ea..d8ac60a8f0 100644
--- a/testsuites/libtests/termios/init.c
+++ b/testsuites/libtests/termios/init.c
@@ -46,6 +46,7 @@ void print_c_oflag(struct termios * tp);
void print_c_lflag(struct termios * tp);
void print_c_cflag(struct termios * tp);
void print_c_cc(struct termios * tp);
+void print_baud(const char* name, speed_t spd);
void print_termios(struct termios *tp);
unsigned long get_baud_rate(void);
unsigned long get_parity(void);
@@ -118,6 +119,9 @@ void print_c_oflag( struct termios * tp )
if( tp->c_oflag & ONLCR )
printf( "ONLCR " );
+ if( tp->c_oflag & ONOEOT )
+ printf( "ONOEOT " );
+
if( tp->c_oflag & OCRNL )
printf( "OCRNL " );
@@ -215,27 +219,38 @@ void print_c_oflag( struct termios * tp )
void print_c_lflag( struct termios * tp )
{
char * c_lflag_bits [] = {
- "ISIG", /* 0000001 */
- "ICANON", /* 0000002 */
- "XCASE", /* 0000004 */
- "ECHO", /* 0000010 */
- "ECHOE", /* 0000020 */
- "ECHOK", /* 0000040 */
- "ECHONL", /* 0000100 */
- "NOFLSH", /* 0000200 */
- "TOSTOP", /* 0000400 */
- "ECHOCTL", /* 0001000 */
- "ECHOPRT", /* 0002000 */
- "ECHOKE", /* 0004000 */
- "FLUSHO", /* 0010000 */
- "unknown", /* 0020000 */
- "PENDIN", /* 0040000 */
- "IEXTEN", /* 0100000 */
- "unknown", /* 0200000 */
- "unknown", /* 0400000 */
- "unknown", /* 1000000 */
- "unknown", /* 2000000 */
- "unknown", /* 4000000 */
+ "ECHOKE", /* 0x00000001 */
+ "ECHOE", /* 0x00000002 */
+ "ECHOK", /* 0x00000004 */
+ "ECHO", /* 0x00000008 */
+ "ECHONL", /* 0x00000010 */
+ "ECHOPRT", /* 0x00000020 */
+ "ECHOCTL", /* 0x00000040 */
+ "ISIG", /* 0x00000080 */
+ "ICANON", /* 0x00000100 */
+ "ALTWERASE", /* 0x00000200 */
+ "IEXTEN", /* 0x00000400 */
+ "EXTPROC", /* 0x00000800 */
+ "XCASE", /* 0x00001000 */
+ "unknown", /* 0x00002000 */
+ "unknown", /* 0x00004000 */
+ "unknown", /* 0x00008000 */
+ "unknown", /* 0x00010000 */
+ "unknown", /* 0x00020000 */
+ "unknown", /* 0x00040000 */
+ "unknown", /* 0x00080000 */
+ "unknown", /* 0x00100000 */
+ "unknown", /* 0x00200000 */
+ "TOSTOP", /* 0x00400000 */
+ "FLUSHO", /* 0x00800000 */
+ "unknown", /* 0x01000000 */
+ "NOKERNINFO", /* 0x02000000 */
+ "unknown", /* 0x04000000 */
+ "unknown", /* 0x08000000 */
+ "unknown", /* 0x10000000 */
+ "PENDIN", /* 0x20000000 */
+ "unknown", /* 0x40000000 */
+ "NOFLSH", /* 0x80000000 */
};
printf( "c_lflag = 0x%08x\n\t", tp->c_lflag );
@@ -246,98 +261,8 @@ void print_c_lflag( struct termios * tp )
void print_c_cflag( struct termios * tp )
{
- unsigned int baud;
-
printf( "c_cflag = 0x%08x\n", tp->c_cflag );
- baud = (tp->c_cflag & CBAUD) ;
- if ( tp->c_cflag & CBAUDEX )
- switch( baud ) {
- case B0:
- printf( "\tCBAUD =\tB0\n" );
- break;
-
- case B50:
- printf( "\tCBAUD =\tB50\n" );
- break;
-
- case B75:
- printf( "\tCBAUD =\tB75\n" );
- break;
-
- case B110:
- printf( "\tCBAUD =\tB110\n" );
- break;
-
- case B134:
- printf( "\tCBAUD =\tB134\n" );
- break;
-
- case B150:
- printf( "\tCBAUD =\tB150\n" );
- break;
-
- case B200:
- printf( "\tCBAUD =\tB200\n" );
- break;
-
- case B300:
- printf( "\tCBAUD =\tB300\n" );
- break;
-
- case B600:
- printf( "\tCBAUD =\tB600\n" );
- break;
-
- case B1200:
- printf( "\tCBAUD =\tB1200\n" );
- break;
-
- case B1800:
- printf( "\tCBAUD =\tB1800\n" );
- break;
-
- case B2400:
- printf( "\tCBAUD =\tB2400\n" );
- break;
-
- case B4800:
- printf( "\tCBAUD =\tB4800\n" );
- break;
-
- case B9600:
- printf( "\tCBAUD =\tB9600\n" );
- break;
-
- case B19200:
- printf( "\tCBAUD =\tB19200\n" );
- break;
-
- case B38400:
- printf( "\tCBAUD =\tB38400\n" );
- break;
-
- case B57600:
- printf( "\tCBAUD =\tB57600\n" );
- break;
-
- case B115200:
- printf( "\tCBAUD =\tB115200\n" );
- break;
-
- case B230400:
- printf( "\tCBAUD =\tB230400\n" );
- break;
-
- case B460800:
- printf( "\tCBAUD =\tB460800\n" );
- break;
-
- default:
- printf( "\tCBAUD =\tunknown (0x%08x)\n", baud );
- break;
- }
-
switch( tp->c_cflag & CSIZE ) {
case CS5:
printf( "\tCSIZE =\tCS5\n" );
@@ -356,6 +281,11 @@ void print_c_cflag( struct termios * tp )
break;
}
+ if( tp->c_cflag & CIGNORE )
+ printf( "\tCIGNORE set: iqnore c_cflags enabled\n" );
+ else
+ printf( "\tCIGNORE clear: iqnore c_cflags disabled\n" );
+
if( tp->c_cflag & CSTOPB )
printf( "\tCSTOPB set: send 2 stop bits\n" );
else
@@ -386,17 +316,35 @@ void print_c_cflag( struct termios * tp )
else
printf( "\tCLOCAL clear: don't ignore modem lines\n" );
-#if defined(CBAUDEX)
- if( tp->c_cflag & CBAUDEX )
- printf( "\tCBAUDEX set: What does this do?\n" );
+ if( tp->c_cflag & CCTS_OFLOW )
+ printf( "\tCCTS_OFLOW: hardware CTS output flow control enabled\n" );
else
- printf( "\tCBAUDEX clear: What does this do?\n" );
-#endif
+ printf( "\tCCTS_OFLOW: hardware CTS output flow control disabled\n" );
+
+ if( tp->c_cflag & CRTS_IFLOW )
+ printf( "\tCRTS_IFLOW: hardware RTS input flow control enabled\n" );
+ else
+ printf( "\tCRTS_IFLOW: hardware RTS input flow control disabled\n" );
if( tp->c_cflag & CRTSCTS )
printf( "\tCRTSCTS: harware flow control enabled?\n" );
else
printf( "\tCRTSCTS: hardware flow control disabled?\n" );
+
+ if( tp->c_cflag & CDSR_OFLOW )
+ printf( "\tCDSR_OFLOW: hardware DSR output flow control enabled\n" );
+ else
+ printf( "\tCDSR_OFLOW: hardware DSR output flow control disabled\n" );
+
+ if( tp->c_cflag & CDTR_IFLOW )
+ printf( "\tCDTR_IFLOW: hardware DTR input flow control enabled\n" );
+ else
+ printf( "\tCDTR_IFLOW: hardware DTR input flow control disabled\n" );
+
+ if( tp->c_cflag & CCAR_OFLOW )
+ printf( "\tCCAR_OFLOW: hardware CD output flow control enabled\n" );
+ else
+ printf( "\tCCAR_OFLOW: hardware CD output flow control disabled\n" );
}
@@ -404,25 +352,26 @@ void print_c_cc( struct termios * tp )
{
size_t i;
char * cc_index_names [ /* NCCS */ ] = {
- "[VINTR] ", /* 0 */
- "[VQUIT] ", /* 1 */
- "[VERASE] ", /* 2 */
- "[VKILL] ", /* 3 */
- "[VEOF] ", /* 4 */
- "[VTIME] ", /* 5 */
- "[VMIN] ", /* 6 */
- "[VSWTC ", /* 7 */
- "[VSTART] ", /* 8 */
- "[VSTOP] ", /* 9 */
+ "[VEOF] ", /* 0 */
+ "[VEOL] ", /* 1 */
+ "[VEOL2] ", /* 2 */
+ "[VERASE] ", /* 3 */
+ "[VWERASE] ", /* 4 */
+ "[VKILL] ", /* 5 */
+ "[VREPRINT]", /* 6 */
+ "[VERASE2] ", /* 7 */
+ "[VINTR] ", /* 8 */
+ "[VQUIT] ", /* 9 */
"[VSUSP] ", /* 10 */
- "[VEOL] ", /* 11 */
- "[VREPRINT]", /* 12 */
- "[VDISCARD]", /* 13 */
- "[VWERASE] ", /* 14 */
- "[VLNEXT ", /* 15 */
- "[VEOL2] ", /* 16 */
- "unknown ", /* 17 */
- "unknown ", /* 18 */
+ "[VDSUSP] ", /* 11 */
+ "[VSTART] ", /* 12 */
+ "[VSTOP] ", /* 13 */
+ "[VLNEXT] ", /* 14 */
+ "[VDISCARD]", /* 15 */
+ "[VMIN] ", /* 16 */
+ "[VTIME] ", /* 17 */
+ "[VSTATUS] ", /* 18 */
+ "unknown ", /* 19 */
};
for( i = 0; i < sizeof(cc_index_names)/sizeof(char*) ; i++ ) {
@@ -431,6 +380,116 @@ void print_c_cc( struct termios * tp )
}
+void print_baud( const char* name, speed_t spd )
+{
+ switch( spd ) {
+ case B0:
+ printf( "%s = B0\n", name );
+ break;
+
+ case B50:
+ printf( "%s = B50\n", name );
+ break;
+
+ case B75:
+ printf( "%s = B75\n", name );
+ break;
+
+ case B110:
+ printf( "%s = B110\n", name );
+ break;
+
+ case B134:
+ printf( "%s = B134\n", name );
+ break;
+
+ case B150:
+ printf( "%s = B150\n", name );
+ break;
+
+ case B200:
+ printf( "%s = B200\n", name );
+ break;
+
+ case B300:
+ printf( "%s = B300\n", name );
+ break;
+
+ case B600:
+ printf( "%s = B600\n", name );
+ break;
+
+ case B1200:
+ printf( "%s = B1200\n", name );
+ break;
+
+ case B1800:
+ printf( "%s = B1800\n", name );
+ break;
+
+ case B2400:
+ printf( "%s = B2400\n", name );
+ break;
+
+ case B4800:
+ printf( "%s = B4800\n", name );
+ break;
+
+ case B9600:
+ printf( "%s = B9600\n", name );
+ break;
+
+ case B19200:
+ printf( "%s = B19200\n", name );
+ break;
+
+ case B38400:
+ printf( "%s = B38400\n", name );
+ break;
+
+ case B7200:
+ printf( "%s = B7200\n", name );
+ break;
+
+ case B14400:
+ printf( "%s = B14400\n", name );
+ break;
+
+ case B28800:
+ printf( "%s = B28800\n", name );
+ break;
+
+ case B57600:
+ printf( "%s = B57600\n", name );
+ break;
+
+ case B76800:
+ printf( "%s = B76800\n", name );
+ break;
+
+ case B115200:
+ printf( "%s = B115200\n", name );
+ break;
+
+ case B230400:
+ printf( "%s = B230400\n", name );
+ break;
+
+ case B460800:
+ printf( "%s = B460800\n", name );
+ break;
+
+ case B921600:
+ printf( "%s = B921600\n", name );
+ break;
+
+ default:
+ printf( "%s = unknown (0x%08x)\n", name, (unsigned int)spd );
+ break;
+ }
+}
+
+
void print_termios( struct termios *tp )
{
printf( "\nLooking at the current termios settings:\n\n" );
@@ -439,6 +498,8 @@ void print_termios( struct termios *tp )
print_c_cflag( tp );
print_c_lflag( tp );
print_c_cc( tp );
+ print_baud( "c_ispeed", tp->c_ispeed );
+ print_baud( "c_ospeed", tp->c_ospeed );
printf( "\n" );
}
@@ -450,7 +511,8 @@ unsigned long get_baud_rate(void)
while( 1 ) {
printf( "Enter the numerical value for the new baud rate.\n" );
printf( "Choices are: 50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800\n" );
- printf( "2400, 4800, 9600, 19200, 38400, 57600, 115200, 230400, 460800\n" );
+ printf( "2400, 4800, 9600, 19200, 38400, 7200, 14400, 28800, 57600, 76800\n" );
+ printf( "115200, 230400, 460800, 921600\n" );
printf( "\nYour choice: " );
scanf( "%lu", &baud_rate );
printf( "\n" );
@@ -470,10 +532,15 @@ unsigned long get_baud_rate(void)
case 9600: return B9600;
case 19200: return B19200;
case 38400: return B38400;
+ case 7200: return B7200;
+ case 14400: return B14400;
+ case 28800: return B28800;
case 57600: return B57600;
+ case 76800: return B76800;
case 115200: return B115200;
case 230400: return B230400;
case 460800: return B460800;
+ case 921600: return B921600;
default:
printf( "%lu is not a valid choice. Try again.\n\n", baud_rate );
@@ -589,7 +656,9 @@ void change_line_settings( struct termios *tp )
sleep( sleep_time );
- tp->c_cflag = CLOCAL | CREAD | parity | stop_bits | data_bits | baud_rate;
+ tp->c_cflag = CLOCAL | CREAD | parity | stop_bits | data_bits;
+ tp->c_ispeed = baud_rate;
+ tp->c_ospeed = baud_rate;
if( tcsetattr( fileno( stdin ), TCSADRAIN, tp ) < 0 ) {
perror( "change_line_settings(): tcsetattr() failed" );
rtems_test_exit( 1 );