diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2011-12-14 08:50:49 +0000 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2011-12-14 08:50:49 +0000 |
commit | 40f8b21ef432b5854ad09881ab8fbcbee18cf9e1 (patch) | |
tree | a6c8302378fd9d34761e915720325ae82a7dfebd | |
parent | fc8f39e6845d0482dd47b329b5d7b847ed1453c4 (diff) |
2011-12-14 Sebastian Huber <sebastian.huber@embedded-brains.de>
* libcsupport/include/rtems/termiostypes.h,
libcsupport/src/termios_baud2num.c,
libcsupport/src/termios_baudtable.c,
libcsupport/src/termios_num2baud.c,
libcsupport/src/termios_setinitialbaud.c: Added const qualifier to
baud associations. Fixed integer types.
-rw-r--r-- | cpukit/ChangeLog | 9 | ||||
-rw-r--r-- | cpukit/libcsupport/include/rtems/termiostypes.h | 44 | ||||
-rw-r--r-- | cpukit/libcsupport/src/termios_baud2num.c | 18 | ||||
-rw-r--r-- | cpukit/libcsupport/src/termios_baudtable.c | 6 | ||||
-rw-r--r-- | cpukit/libcsupport/src/termios_num2baud.c | 24 | ||||
-rw-r--r-- | cpukit/libcsupport/src/termios_setinitialbaud.c | 24 |
6 files changed, 70 insertions, 55 deletions
diff --git a/cpukit/ChangeLog b/cpukit/ChangeLog index c251cfc76f..f3409c02f1 100644 --- a/cpukit/ChangeLog +++ b/cpukit/ChangeLog @@ -1,3 +1,12 @@ +2011-12-14 Sebastian Huber <sebastian.huber@embedded-brains.de> + + * libcsupport/include/rtems/termiostypes.h, + libcsupport/src/termios_baud2num.c, + libcsupport/src/termios_baudtable.c, + libcsupport/src/termios_num2baud.c, + libcsupport/src/termios_setinitialbaud.c: Added const qualifier to + baud associations. Fixed integer types. + 2011-12-13 Sebastian Huber <sebastian.huber@embedded-brains.de> * sapi/include/confdefs.h: Fixed workspace size estimate of tasks. diff --git a/cpukit/libcsupport/include/rtems/termiostypes.h b/cpukit/libcsupport/include/rtems/termiostypes.h index 68d5443fa6..c43ce25258 100644 --- a/cpukit/libcsupport/include/rtems/termiostypes.h +++ b/cpukit/libcsupport/include/rtems/termiostypes.h @@ -20,7 +20,9 @@ #include <rtems.h> #include <rtems/libio.h> +#include <rtems/assoc.h> #include <stdint.h> +#include <termios.h> #ifdef __cplusplus extern "C" { @@ -181,26 +183,42 @@ extern int rtems_termios_nlinesw; #define MAXLDISC 8 /* baudrate xxx integer type */ -typedef int32_t rtems_termios_baud_t; +typedef uint32_t rtems_termios_baud_t; -/* convert xxx integer to equivalent Bxxx constant */ -int rtems_termios_number_to_baud(rtems_termios_baud_t baud); +extern const rtems_assoc_t rtems_termios_baud_table []; -/* convert Bxxx constant to xxx integer */ -rtems_termios_baud_t rtems_termios_baud_to_number(int termios_baud); +/** + * @brief Converts the integral baud value @a baud to the Termios control flag + * representation. + * + * @retval B0 Invalid baud value or a baud value of 0. + * @retval other Baud constant according to @a baud. + */ +tcflag_t rtems_termios_number_to_baud(rtems_termios_baud_t baud); + +/** + * @brief Converts the baud part of the Termios control flags @a c_cflag to an + * integral baud value. + * + * There is no need to mask the @a c_cflag with @c CBAUD. + * + * @retval 0 Invalid baud value or a baud value of @c B0. + * @retval other Integral baud value. + */ +rtems_termios_baud_t rtems_termios_baud_to_number(tcflag_t c_cflag); /* convert Bxxx constant to index */ int rtems_termios_baud_to_index(rtems_termios_baud_t termios_baud); -/* - * This method is used by a driver to tell termios its - * initial baud rate. This is especially important when - * the device driver does not set the baud to the default - * of B9600. +/** + * @brief Sets the initial @a baud in the Termios context @a tty. + * + * @retval 0 Successful operation. + * @retval -1 Invalid baud value. */ -int rtems_termios_set_initial_baud( - struct rtems_termios_tty *ttyp, - rtems_termios_baud_t baud +int rtems_termios_set_initial_baud( + struct rtems_termios_tty *tty, + rtems_termios_baud_t baud ); #ifdef __cplusplus diff --git a/cpukit/libcsupport/src/termios_baud2num.c b/cpukit/libcsupport/src/termios_baud2num.c index 57b908ebee..e9c279aa3d 100644 --- a/cpukit/libcsupport/src/termios_baud2num.c +++ b/cpukit/libcsupport/src/termios_baud2num.c @@ -10,24 +10,14 @@ */ #ifdef HAVE_CONFIG_H -#include "config.h" + #include "config.h" #endif -#include <sys/termios.h> #include <rtems/termiostypes.h> -#include <rtems/assoc.h> -extern rtems_assoc_t termios_assoc_table[]; - -int32_t rtems_termios_baud_to_number( - int termios_baud -) +rtems_termios_baud_t rtems_termios_baud_to_number(tcflag_t c_cflag) { - int baud; - - baud = rtems_assoc_local_by_remote( termios_assoc_table, termios_baud ); - if ( baud == 0 && termios_baud != 0 ) - return -1; + uint32_t remote_value = (uint32_t) (c_cflag & CBAUD); - return baud; + return rtems_assoc_local_by_remote(rtems_termios_baud_table, remote_value); } diff --git a/cpukit/libcsupport/src/termios_baudtable.c b/cpukit/libcsupport/src/termios_baudtable.c index 92d1c6b809..0f7c4995fd 100644 --- a/cpukit/libcsupport/src/termios_baudtable.c +++ b/cpukit/libcsupport/src/termios_baudtable.c @@ -10,14 +10,12 @@ */ #ifdef HAVE_CONFIG_H -#include "config.h" + #include "config.h" #endif -#include <sys/termios.h> #include <rtems/termiostypes.h> -#include <rtems/assoc.h> -rtems_assoc_t termios_assoc_table[] = { +const rtems_assoc_t rtems_termios_baud_table [] = { { "B0", 0, B0 }, { "B50", 50, B50 }, { "B75", 75, B75 }, diff --git a/cpukit/libcsupport/src/termios_num2baud.c b/cpukit/libcsupport/src/termios_num2baud.c index 3725609135..3d6f0038f0 100644 --- a/cpukit/libcsupport/src/termios_num2baud.c +++ b/cpukit/libcsupport/src/termios_num2baud.c @@ -10,23 +10,21 @@ */ #ifdef HAVE_CONFIG_H -#include "config.h" + #include "config.h" #endif -#include <sys/termios.h> #include <rtems/termiostypes.h> -#include <rtems/assoc.h> -extern rtems_assoc_t termios_assoc_table[]; - -int rtems_termios_number_to_baud( - int32_t baud -) +tcflag_t rtems_termios_number_to_baud(rtems_termios_baud_t baud) { - int termios_baud; + uint32_t remote_value = rtems_assoc_remote_by_local( + rtems_termios_baud_table, + baud + ); + + if (remote_value == 0) { + remote_value = B0; + } - termios_baud = rtems_assoc_remote_by_local( termios_assoc_table, baud ); - if ( termios_baud == 0 && baud != 0 ) - return -1; - return termios_baud; + return (tcflag_t) remote_value; } diff --git a/cpukit/libcsupport/src/termios_setinitialbaud.c b/cpukit/libcsupport/src/termios_setinitialbaud.c index 282f5533de..4d7ec558fe 100644 --- a/cpukit/libcsupport/src/termios_setinitialbaud.c +++ b/cpukit/libcsupport/src/termios_setinitialbaud.c @@ -10,24 +10,26 @@ */ #ifdef HAVE_CONFIG_H -#include "config.h" + #include "config.h" #endif -#include <sys/termios.h> #include <rtems/termiostypes.h> -int rtems_termios_set_initial_baud( - struct rtems_termios_tty *ttyp, - int32_t baud +int rtems_termios_set_initial_baud( + struct rtems_termios_tty *tty, + rtems_termios_baud_t baud ) { - int cflags_baud; + int rv = 0; + tcflag_t c_cflag_baud = rtems_termios_number_to_baud(baud); - cflags_baud = rtems_termios_number_to_baud(baud); - if ( cflags_baud == -1 ) - return -1; + if ( c_cflag_baud == 0 ) { + tcflag_t cbaud = CBAUD; - ttyp->termios.c_cflag = (ttyp->termios.c_cflag & ~CBAUD) | cflags_baud; + tty->termios.c_cflag = (tty->termios.c_cflag & ~cbaud) | c_cflag_baud; + } else { + rv = -1; + } - return 0; + return rv; } |