* 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>
* sapi/include/confdefs.h: Fixed workspace size estimate of tasks.

View File

@@ -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

View File

@@ -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;
uint32_t remote_value = (uint32_t) (c_cflag & CBAUD);
baud = rtems_assoc_local_by_remote( termios_assoc_table, termios_baud );
if ( baud == 0 && termios_baud != 0 )
return -1;
return baud;
return rtems_assoc_local_by_remote(rtems_termios_baud_table, remote_value);
}

View File

@@ -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 },

View File

@@ -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
);
termios_baud = rtems_assoc_remote_by_local( termios_assoc_table, baud );
if ( termios_baud == 0 && baud != 0 )
return -1;
return termios_baud;
if (remote_value == 0) {
remote_value = B0;
}
return (tcflag_t) remote_value;
}

View File

@@ -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;
}