From 40f8b21ef432b5854ad09881ab8fbcbee18cf9e1 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Wed, 14 Dec 2011 08:50:49 +0000 Subject: 2011-12-14 Sebastian Huber * 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. --- cpukit/ChangeLog | 9 +++++ cpukit/libcsupport/include/rtems/termiostypes.h | 44 +++++++++++++++++-------- cpukit/libcsupport/src/termios_baud2num.c | 18 +++------- cpukit/libcsupport/src/termios_baudtable.c | 6 ++-- cpukit/libcsupport/src/termios_num2baud.c | 24 +++++++------- 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 + + * 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 * 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 #include +#include #include +#include #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 #include -#include -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 #include -#include -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 #include -#include -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 #include -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; } -- cgit v1.2.3