uart: use an unsigned int for baud rate rather than speed_t
uart.c contains a static conversion function that will translate known baud rates into their speed_t counter parts. If an unsupported baud rate is selected, a diagnostic will be emitted via syslog and a default of B9600 will be chosen. Signed-off-by: Jon Trulson <jtrulson@ics.com> Signed-off-by: Brendan Le Foll <brendan.le.foll@intel.com>
This commit is contained in:
committed by
Thomas Ingleby
parent
c30457e434
commit
88f3052d99
@@ -83,7 +83,7 @@ char* mraa_uart_get_dev_path(mraa_uart_context dev);
|
||||
* @param baud desired baud rate
|
||||
* @return mraa_result_t
|
||||
*/
|
||||
mraa_result_t mraa_uart_open_dev(mraa_uart_context dev, speed_t baud);
|
||||
mraa_result_t mraa_uart_open_dev(mraa_uart_context dev, unsigned int baud);
|
||||
|
||||
/**
|
||||
* Close a device previously opened with mraa_uart_open_dev().
|
||||
|
||||
@@ -85,7 +85,7 @@ class Uart
|
||||
* @return mraa_result_t
|
||||
*/
|
||||
mraa_result_t
|
||||
openDevice(speed_t baud)
|
||||
openDevice(unsigned int baud)
|
||||
{
|
||||
return mraa_uart_open_dev(m_uart, baud);
|
||||
}
|
||||
|
||||
@@ -31,6 +31,49 @@
|
||||
#include "uart.h"
|
||||
#include "mraa_internal.h"
|
||||
|
||||
// This function takes an unsigned int and converts it to a B* speed_t
|
||||
// that can be used with linux termios.
|
||||
static speed_t uint2speed(unsigned int speed)
|
||||
{
|
||||
switch (speed) {
|
||||
case 0: return B0; // hangup, not too useful otherwise
|
||||
case 50: return B50;
|
||||
case 75: return B75;
|
||||
case 110: return B110;
|
||||
case 150: return B150;
|
||||
case 200: return B200;
|
||||
case 300: return B300;
|
||||
case 600: return B600;
|
||||
case 1200: return B1200;
|
||||
case 1800: return B1800;
|
||||
case 2400: return B2400;
|
||||
case 4800: return B4800;
|
||||
case 9600: return B9600;
|
||||
case 19200: return B19200;
|
||||
case 38400: return B38400;
|
||||
case 57600: return B57600;
|
||||
case 115200: return B115200;
|
||||
case 230400: return B230400;
|
||||
case 460800: return B460800;
|
||||
case 500000: return B500000;
|
||||
case 576000: return B576000;
|
||||
case 921600: return B921600;
|
||||
case 1000000: return B1000000;
|
||||
case 1152000: return B1152000;
|
||||
case 1500000: return B1500000;
|
||||
case 2000000: return B2000000;
|
||||
case 2500000: return B2500000;
|
||||
case 3000000: return B3000000;
|
||||
case 3500000: return B3500000;
|
||||
case 4000000: return B4000000;
|
||||
}
|
||||
|
||||
// if we are here, then an unsupported baudrate was selected.
|
||||
// Report it via syslog and return B9600, a common default.
|
||||
syslog(LOG_ERR, "uart: unsupported baud rate, defaulting to 9600.");
|
||||
return B9600;
|
||||
}
|
||||
|
||||
mraa_uart_context
|
||||
mraa_uart_init(int index)
|
||||
{
|
||||
@@ -112,7 +155,7 @@ mraa_uart_get_dev_path(mraa_uart_context dev)
|
||||
}
|
||||
|
||||
mraa_result_t
|
||||
mraa_uart_open_dev(mraa_uart_context dev, speed_t baud)
|
||||
mraa_uart_open_dev(mraa_uart_context dev, unsigned int baud)
|
||||
{
|
||||
if (!dev) {
|
||||
syslog(LOG_ERR, "uart: open: context is NULL");
|
||||
@@ -144,8 +187,9 @@ mraa_uart_open_dev(mraa_uart_context dev, speed_t baud)
|
||||
cfmakeraw(&termio);
|
||||
|
||||
// set our baud rates
|
||||
cfsetispeed(&termio, baud);
|
||||
cfsetospeed(&termio, baud);
|
||||
speed_t speed = uint2speed(baud);
|
||||
cfsetispeed(&termio, speed);
|
||||
cfsetospeed(&termio, speed);
|
||||
|
||||
// make it so
|
||||
if (tcsetattr(dev->fd, TCSAFLUSH, &termio) < 0) {
|
||||
|
||||
Reference in New Issue
Block a user