#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)
{
}
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");
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) {