From 93726e5205daaa7475cf17c8f916a8b1842affca Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Wed, 9 Jul 2014 15:44:13 +0200 Subject: termios: Add rtems_termios_set_best_baud() --- testsuites/libtests/termios01/init.c | 55 ++++++++++++++++++++++++++++- testsuites/libtests/termios01/termios01.doc | 4 +++ 2 files changed, 58 insertions(+), 1 deletion(-) (limited to 'testsuites/libtests/termios01') diff --git a/testsuites/libtests/termios01/init.c b/testsuites/libtests/termios01/init.c index 896867895d..d1de3f869d 100644 --- a/testsuites/libtests/termios01/init.c +++ b/testsuites/libtests/termios01/init.c @@ -517,7 +517,7 @@ static void test_termios_cfmakeraw(void) rtems_test_assert( term.c_cflag & CS8 ); } -static void test_early_device_install_remove( +static rtems_status_code test_early_device_install_remove( rtems_device_major_number major, rtems_device_minor_number minor, void *arg @@ -535,6 +535,8 @@ static void test_early_device_install_remove( rtems_test_assert( sc == RTEMS_INCORRECT_STATE ); rtems_test_assert( rtems_resource_snapshot_check( &snapshot ) ); + + return RTEMS_SUCCESSFUL; } static void test_device_install_remove(void) @@ -716,6 +718,56 @@ static void test_set_attributes_error(void) rtems_test_assert( rtems_resource_snapshot_check( &snapshot ) ); } +static void test_set_best_baud(void) +{ + static const struct { + uint32_t baud; + tcflag_t cflag; + } baud_to_cflag_table[] = { + { 0, B0 }, + { 25, B0 }, + { 26, B50 }, + { 50, B50 }, + { 62, B50 }, + { 63, B75 }, + { 75, B75 }, + { 110, B110 }, + { 134, B134 }, + { 150, B150 }, + { 200, B200 }, + { 300, B300 }, + { 600, B600 }, + { 1200, B1200 }, + { 1800, B1800 }, + { 2400, B2400 }, + { 4800, B4800 }, + { 9600, B9600 }, + { 19200, B19200 }, + { 38400, B38400 }, + { 57600, B57600 }, + { 115200, B115200 }, + { 230400, B230400 }, + { 460800, B460800 }, + { 0xffffffff, B460800 } + }; + + size_t n = RTEMS_ARRAY_SIZE(baud_to_cflag_table); + size_t i; + + for ( i = 0; i < n; ++i ) { + rtems_termios_tty tty; + struct termios *term = rtems_termios_get_termios( &tty ); + tcflag_t cbaud_mask = CBAUD; + + memset( &tty, 0xff, sizeof( tty ) ); + rtems_termios_set_best_baud( &tty, baud_to_cflag_table[ i ].baud ); + + rtems_test_assert( + (term->c_cflag & cbaud_mask) == baud_to_cflag_table[ i ].cflag + ); + } +} + static rtems_task Init( rtems_task_argument ignored ) @@ -872,6 +924,7 @@ static rtems_task Init( test_device_install_remove(); test_first_open_error(); test_set_attributes_error(); + test_set_best_baud(); TEST_END(); rtems_test_exit(0); diff --git a/testsuites/libtests/termios01/termios01.doc b/testsuites/libtests/termios01/termios01.doc index 7d0589c343..ebc9c7aef2 100644 --- a/testsuites/libtests/termios01/termios01.doc +++ b/testsuites/libtests/termios01/termios01.doc @@ -28,9 +28,13 @@ directives: rtems_termios_device_remove rtems_termios_device_open rtems_termios_device_close + rtems_termios_set_best_baud concepts: + Exercise termios ioctl for all baud, character size, parity and bits per character options. + Ensure that Termios device install/remove works. ++ Ensure that Termios first open works in the error case. ++ Ensure that Termios set attributes works in the error case. ++ Ensure that Termios set best baud works. -- cgit v1.2.3