* 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.
This commit is contained in:
Sebastian Huber
2011-12-14 08:50:49 +00:00
parent fc8f39e684
commit 40f8b21ef4
6 changed files with 70 additions and 55 deletions

View File

@@ -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> 2011-12-13 Sebastian Huber <sebastian.huber@embedded-brains.de>
* sapi/include/confdefs.h: Fixed workspace size estimate of tasks. * sapi/include/confdefs.h: Fixed workspace size estimate of tasks.

View File

@@ -20,7 +20,9 @@
#include <rtems.h> #include <rtems.h>
#include <rtems/libio.h> #include <rtems/libio.h>
#include <rtems/assoc.h>
#include <stdint.h> #include <stdint.h>
#include <termios.h>
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
@@ -181,26 +183,42 @@ extern int rtems_termios_nlinesw;
#define MAXLDISC 8 #define MAXLDISC 8
/* baudrate xxx integer type */ /* 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 */ extern const rtems_assoc_t rtems_termios_baud_table [];
int rtems_termios_number_to_baud(rtems_termios_baud_t baud);
/* 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 */ /* convert Bxxx constant to index */
int rtems_termios_baud_to_index(rtems_termios_baud_t termios_baud); int rtems_termios_baud_to_index(rtems_termios_baud_t termios_baud);
/* /**
* This method is used by a driver to tell termios its * @brief Sets the initial @a baud in the Termios context @a tty.
* initial baud rate. This is especially important when *
* the device driver does not set the baud to the default * @retval 0 Successful operation.
* of B9600. * @retval -1 Invalid baud value.
*/ */
int rtems_termios_set_initial_baud( int rtems_termios_set_initial_baud(
struct rtems_termios_tty *ttyp, struct rtems_termios_tty *tty,
rtems_termios_baud_t baud rtems_termios_baud_t baud
); );
#ifdef __cplusplus #ifdef __cplusplus

View File

@@ -10,24 +10,14 @@
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "config.h" #include "config.h"
#endif #endif
#include <sys/termios.h>
#include <rtems/termiostypes.h> #include <rtems/termiostypes.h>
#include <rtems/assoc.h>
extern rtems_assoc_t termios_assoc_table[]; rtems_termios_baud_t rtems_termios_baud_to_number(tcflag_t c_cflag)
int32_t rtems_termios_baud_to_number(
int termios_baud
)
{ {
int baud; uint32_t remote_value = (uint32_t) (c_cflag & CBAUD);
baud = rtems_assoc_local_by_remote( termios_assoc_table, termios_baud ); return rtems_assoc_local_by_remote(rtems_termios_baud_table, remote_value);
if ( baud == 0 && termios_baud != 0 )
return -1;
return baud;
} }

View File

@@ -10,14 +10,12 @@
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "config.h" #include "config.h"
#endif #endif
#include <sys/termios.h>
#include <rtems/termiostypes.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 }, { "B0", 0, B0 },
{ "B50", 50, B50 }, { "B50", 50, B50 },
{ "B75", 75, B75 }, { "B75", 75, B75 },

View File

@@ -10,23 +10,21 @@
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "config.h" #include "config.h"
#endif #endif
#include <sys/termios.h>
#include <rtems/termiostypes.h> #include <rtems/termiostypes.h>
#include <rtems/assoc.h>
extern rtems_assoc_t termios_assoc_table[]; tcflag_t rtems_termios_number_to_baud(rtems_termios_baud_t baud)
int rtems_termios_number_to_baud(
int32_t baud
)
{ {
int termios_baud; uint32_t remote_value = rtems_assoc_remote_by_local(
rtems_termios_baud_table,
baud
);
termios_baud = rtems_assoc_remote_by_local( termios_assoc_table, baud ); if (remote_value == 0) {
if ( termios_baud == 0 && baud != 0 ) remote_value = B0;
return -1; }
return termios_baud;
return (tcflag_t) remote_value;
} }

View File

@@ -10,24 +10,26 @@
*/ */
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include "config.h" #include "config.h"
#endif #endif
#include <sys/termios.h>
#include <rtems/termiostypes.h> #include <rtems/termiostypes.h>
int rtems_termios_set_initial_baud( int rtems_termios_set_initial_baud(
struct rtems_termios_tty *ttyp, struct rtems_termios_tty *tty,
int32_t baud 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 ( c_cflag_baud == 0 ) {
if ( cflags_baud == -1 ) tcflag_t cbaud = CBAUD;
return -1;
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;
} }